@sapui5/sap.fe.core 1.136.3 → 1.136.6
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/core/.library +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +3 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +6 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -5
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +19 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +10 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +6 -5
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +8 -4
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -2
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +4 -17
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -19
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +15 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +18 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +4 -4
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +3 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_ar.properties +2 -0
- package/src/sap/fe/core/messagebundle_bg.properties +2 -0
- package/src/sap/fe/core/messagebundle_ca.properties +2 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
- package/src/sap/fe/core/messagebundle_cs.properties +2 -0
- package/src/sap/fe/core/messagebundle_cy.properties +2 -0
- package/src/sap/fe/core/messagebundle_da.properties +2 -0
- package/src/sap/fe/core/messagebundle_de.properties +2 -0
- package/src/sap/fe/core/messagebundle_el.properties +2 -0
- package/src/sap/fe/core/messagebundle_en.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/core/messagebundle_es.properties +3 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
- package/src/sap/fe/core/messagebundle_et.properties +2 -0
- package/src/sap/fe/core/messagebundle_fi.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -0
- package/src/sap/fe/core/messagebundle_hi.properties +2 -0
- package/src/sap/fe/core/messagebundle_hr.properties +2 -0
- package/src/sap/fe/core/messagebundle_hu.properties +2 -0
- package/src/sap/fe/core/messagebundle_id.properties +2 -0
- package/src/sap/fe/core/messagebundle_it.properties +2 -0
- package/src/sap/fe/core/messagebundle_iw.properties +2 -0
- package/src/sap/fe/core/messagebundle_ja.properties +2 -0
- package/src/sap/fe/core/messagebundle_kk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ko.properties +2 -0
- package/src/sap/fe/core/messagebundle_lt.properties +2 -0
- package/src/sap/fe/core/messagebundle_lv.properties +2 -0
- package/src/sap/fe/core/messagebundle_mk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ms.properties +2 -0
- package/src/sap/fe/core/messagebundle_nl.properties +2 -0
- package/src/sap/fe/core/messagebundle_no.properties +2 -0
- package/src/sap/fe/core/messagebundle_pl.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
- package/src/sap/fe/core/messagebundle_ro.properties +2 -0
- package/src/sap/fe/core/messagebundle_ru.properties +2 -0
- package/src/sap/fe/core/messagebundle_sh.properties +2 -0
- package/src/sap/fe/core/messagebundle_sk.properties +2 -0
- package/src/sap/fe/core/messagebundle_sl.properties +2 -0
- package/src/sap/fe/core/messagebundle_sr.properties +2 -0
- package/src/sap/fe/core/messagebundle_sv.properties +2 -0
- package/src/sap/fe/core/messagebundle_th.properties +2 -0
- package/src/sap/fe/core/messagebundle_tr.properties +2 -0
- package/src/sap/fe/core/messagebundle_uk.properties +2 -0
- package/src/sap/fe/core/messagebundle_vi.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -2
- package/src/sap/fe/core/templating/PropertyHelper.ts +2 -1
|
@@ -84,6 +84,7 @@ type SaveDocumentParameters = {
|
|
|
84
84
|
mergePatchDraft?: boolean;
|
|
85
85
|
skipBindingToView?: boolean;
|
|
86
86
|
bindings?: ODataListBinding[];
|
|
87
|
+
isStandardSave?: boolean;
|
|
87
88
|
};
|
|
88
89
|
|
|
89
90
|
type InternalCreateParameters = {
|
|
@@ -1794,6 +1795,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1794
1795
|
if (oContext.getModel().hasPendingChanges("$auto") && mParameters.mergePatchDraft) {
|
|
1795
1796
|
oContext.getModel().submitBatch("$auto");
|
|
1796
1797
|
}
|
|
1798
|
+
|
|
1797
1799
|
const activeDocumentContext = await transactionHelper.saveDocument(
|
|
1798
1800
|
rootContext,
|
|
1799
1801
|
this.getAppComponent(),
|
|
@@ -1801,7 +1803,9 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1801
1803
|
bExecuteSideEffectsOnError as boolean,
|
|
1802
1804
|
aBindings,
|
|
1803
1805
|
this.getMessageHandler(),
|
|
1804
|
-
this.getCreationMode()
|
|
1806
|
+
this.getCreationMode(),
|
|
1807
|
+
undefined,
|
|
1808
|
+
mParameters?.isStandardSave
|
|
1805
1809
|
);
|
|
1806
1810
|
this._removeStickySessionInternalProperties(sProgrammingModel);
|
|
1807
1811
|
|
|
@@ -2758,7 +2762,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2758
2762
|
let forceDisplayMode = false;
|
|
2759
2763
|
const isActiveEntity = await context.requestObject("IsActiveEntity");
|
|
2760
2764
|
|
|
2761
|
-
if (isCollaborationDraftSupported
|
|
2765
|
+
if (isCollaborationDraftSupported) {
|
|
2762
2766
|
forceDisplayMode = !(await this.base.collaborativeDraft.activateCollaboration(context, isActiveEntity));
|
|
2763
2767
|
} else {
|
|
2764
2768
|
globalModel.setProperty("/hasCollaborationAuthorization", undefined);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/ui/core/Lib", "sap/ui/core/Messaging", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "../helpers/ResourceModelHelper"], function (Log, deepEqual, uid, ClassSupport, CommonUtils, messageHandling, Library, Messaging, MessageType, ControllerExtension, OverrideExecution, ResourceModelHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _class, _class2;
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _class, _class2;
|
|
9
9
|
var getResourceModel = ResourceModelHelper.getResourceModel;
|
|
10
10
|
var publicExtension = ClassSupport.publicExtension;
|
|
11
11
|
var privateExtension = ClassSupport.privateExtension;
|
|
@@ -28,7 +28,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
|
|
|
28
28
|
* @experimental As of version 1.90.0
|
|
29
29
|
* @since 1.90.0
|
|
30
30
|
*/
|
|
31
|
-
let MessageHandler = (_dec = defineUI5Class("sap.fe.core.controllerextensions.MessageHandler"), _dec2 = methodOverride(), _dec3 = privateExtension(), _dec4 = extensible(OverrideExecution.Instead), _dec5 =
|
|
31
|
+
let MessageHandler = (_dec = defineUI5Class("sap.fe.core.controllerextensions.MessageHandler"), _dec2 = methodOverride(), _dec3 = privateExtension(), _dec4 = extensible(OverrideExecution.Instead), _dec5 = privateExtension(), _dec6 = extensible(OverrideExecution.Instead), _dec7 = publicExtension(), _dec8 = extensible("AfterAsync"), _dec9 = publicExtension(), _dec10 = finalExtension(), _dec11 = publicExtension(), _dec12 = publicExtension(), _dec13 = finalExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
|
|
32
32
|
function MessageHandler() {
|
|
33
33
|
var _this;
|
|
34
34
|
_this = _ControllerExtension.call(this) || this;
|
|
@@ -88,6 +88,22 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
|
|
|
88
88
|
return true;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Determines whether or not bound messages should be removed from the dialog.
|
|
93
|
+
*
|
|
94
|
+
* For the object page if the bound messages are shown in the message strip, then remove that from the dialog to avoid duplicate messages.
|
|
95
|
+
*
|
|
96
|
+
* Only remove the messages if more than one message is present in the message model.
|
|
97
|
+
* @param transitionMessages The messages that are shown in the message dialog.
|
|
98
|
+
* @param context The context of the message dialog.
|
|
99
|
+
* @returns Returns the bound messages which should be shown in the message dialog.
|
|
100
|
+
*/;
|
|
101
|
+
_proto.
|
|
102
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
103
|
+
filterContextBoundMessages = function filterContextBoundMessages(transitionMessages, context) {
|
|
104
|
+
return transitionMessages;
|
|
105
|
+
}
|
|
106
|
+
|
|
91
107
|
/**
|
|
92
108
|
* Allows consumer of a message button BB to decide which bound messages should be shown and how.
|
|
93
109
|
*
|
|
@@ -211,7 +227,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
|
|
|
211
227
|
this.holdMsgsToShow = true;
|
|
212
228
|
|
|
213
229
|
// Create a UI decision.
|
|
214
|
-
const newUIDecisions = messageHandling.getUIDecisions(customMessages, bindingContext, showBoundTransitionMessages, concurrentEditFlag, control, sActionName, onBeforeShowMessage, viewType, showBoundStateMessages, parameters, getResourceModel(this.getView()));
|
|
230
|
+
const newUIDecisions = messageHandling.getUIDecisions(customMessages, bindingContext, showBoundTransitionMessages, concurrentEditFlag, control, sActionName, onBeforeShowMessage, viewType, showBoundStateMessages, parameters, getResourceModel(this.getView()), this);
|
|
215
231
|
this.updateUIDecisions(newUIDecisions, overrideUIDecision);
|
|
216
232
|
this.removeHoldKey(unHoldKey ?? control?.getId());
|
|
217
233
|
const uiElementIsAvailable = this.base.getAppComponent().getModel("internal")?.getProperty("/messageUIElementIsAvailable");
|
|
@@ -446,7 +462,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/uid", "
|
|
|
446
462
|
}
|
|
447
463
|
};
|
|
448
464
|
return MessageHandler;
|
|
449
|
-
}(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "
|
|
465
|
+
}(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "getShowBoundMessagesInMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "filterContextBoundMessages", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "filterContextBoundMessages"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "beforeShowMessageButton", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "beforeShowMessageButton"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "showMessageDialog", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "showMessageDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeTransitionMessages", [_dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "removeTransitionMessages"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "showMessages", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "showMessages"), _class2.prototype), _class2)) || _class);
|
|
450
466
|
return MessageHandler;
|
|
451
467
|
}, false);
|
|
452
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwibWV0aG9kT3ZlcnJpZGUiLCJfZGVjMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjNCIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJfZGVjNSIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfdGhpcyIsImNhbGwiLCJzdHJpY3RXYXJuaW5nTWVzc2FnZXMiLCJob2xkS2V5cyIsImhvbGRNc2dzVG9TaG93IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkluaXQiLCJpbnRlcm5hbE1vZGVsIiwiYmFzZSIsImdldEFwcENvbXBvbmVudCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIiLCJhTWVzc2FnZXMiLCJjb25jYXQiLCJpc1N0cmljdFdhcm5pbmdNZXNzYWdlIiwib01lc3NhZ2UiLCJmaW5kIiwibWVzc2FnZSIsImdldENvZGUiLCJnZXRNZXNzYWdlIiwiZ2V0VHlwZSIsImdldERlc2NyaXB0aW9uVXJsIiwiZGVlcEVxdWFsIiwiZ2V0VGFyZ2V0cyIsImdldFBlcnNpc3RlbnQiLCJjbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcyIsImZpbHRlckVycm9yTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZpbHRlciIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZyIsImJlZm9yZVNob3dNZXNzYWdlQnV0dG9uIiwiX21lc3NhZ2VEZXRhaWxzIiwicmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyIsImtleSIsInVuaXF1ZUtleSIsInVpZCIsImluY2x1ZGVzIiwicHVzaCIsInJlc2V0SG9sZEtleXMiLCJzaG93TWVzc2FnZURpYWxvZyIsIm1QYXJhbWV0ZXJzIiwiZ2V0UHJvcGVydHkiLCJtZXNzYWdlc0luTW9kZWwiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZHVwbGljYXRlV2FybmluZ01lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlcyIsImN1c3RvbU1lc3NhZ2VzIiwib09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsInZpZXdUeXBlIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiaXNPcGVyYXRpb25EaWFsb2dPcGVuIiwiYlNob3dCb3VuZE1lc3NhZ2VzIiwib0JpbmRpbmdDb250ZXh0IiwiY29udGV4dCIsInJlamVjdCIsInNldFRpbWVvdXQiLCJwcm9jZXNzQW5kU2hvd01lc3NhZ2VzIiwiYmluZCIsInBhcmFtZXRlcnMiLCJiaW5kaW5nQ29udGV4dCIsInNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInN1Y2Nlc3MiLCJmYWlsdXJlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiY29udHJvbCIsInNBY3Rpb25OYW1lIiwib25CZWZvcmVTaG93TWVzc2FnZSIsInVuSG9sZEtleSIsImZvcmNlU2hvd1VJRWxlbWVudCIsIm92ZXJyaWRlVUlEZWNpc2lvbiIsInNob3dCb3VuZFN0YXRlTWVzc2FnZXMiLCJuZXdVSURlY2lzaW9ucyIsIm1lc3NhZ2VIYW5kbGluZyIsImdldFVJRGVjaXNpb25zIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInVwZGF0ZVVJRGVjaXNpb25zIiwicmVtb3ZlSG9sZEtleSIsImdldElkIiwidWlFbGVtZW50SXNBdmFpbGFibGUiLCJ0aGVuIiwic2hvd01lc3NhZ2VzV2l0aENvbmR0aW9ucyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNob3dVSUVsZW1lbnQiLCJjaGVja1RvU2hvd1VJRWxlbWVudCIsInJldCIsInNob3dNZXNzYWdlc0luVUkiLCJlcnIiLCJMb2ciLCJlcnJvciIsImluZm8iLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJrZWVwQm91bmRNZXNzYWdlIiwia2VlcFVuYm91bmRNZXNzYWdlIiwic1BhdGhUb0JlUmVtb3ZlZCIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsIl9jaGVja05hdmlnYXRpb25Ub0Vycm9yUGFnZSIsImFVbmJvdW5kTWVzc2FnZXMiLCJnZXRNZXNzYWdlcyIsImJTaG93Qm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJhQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJhQ3VzdG9tTWVzc2FnZXMiLCJiSXNTdGlja3lFZGl0TW9kZSIsIkNvbW1vblV0aWxzIiwiaXNTdGlja3lFZGl0TW9kZSIsIm1NZXNzYWdlUGFnZVBhcmFtZXRlcnMiLCJpc0RhdGFSZWNlaXZlZEVycm9yIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm5hdmlnYXRlQmFja1RvT3JpZ2luIiwiZXJyb3JUeXBlIiwiaXNJbml0aWFsTG9hZDUwM0Vycm9yIiwib1RlY2huaWNhbERldGFpbHMiLCJnZXRUZWNobmljYWxEZXRhaWxzIiwiaHR0cFN0YXR1cyIsIl9nZXRIVFRQNTAzTWVzc2FnZVBhcmFtZXRlcnMiLCJ0ZWNobmljYWxEZXRhaWxzIiwibWVzc2FnZVBhZ2VQYXJhbWV0ZXJzIiwic2Vjb25kc0JlZm9yZVJldHJ5IiwicmV0cnlBZnRlciIsIl9nZXRTZWNvbmRzQmVmb3JlUmV0cnlBZnRlciIsInJldHJ5QWZ0ZXJNZXNzYWdlIiwiZ2V0UmV0cnlBZnRlck1lc3NhZ2UiLCJkUmV0cnlBZnRlciIsImRDdXJyZW50RGF0ZVRpbWUiLCJEYXRlIiwiaUN1cnJlbnREYXRlVGltZUluTWlsbGlTZWNvbmRzIiwiZ2V0VGltZSIsImlSZXRyeUFmdGVyRGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyIsImlTZWNvbmRzQmVmb3JlUmV0cnkiLCJvbGRVSURlY2lzaW9ucyIsImFsbE1lc3NhZ2VzVG9TaG93IiwibWVyZ2VkVUlEZWNpc2lvbiIsIm1lc3NhZ2VzVG9TaG93IiwiQXJyYXkiLCJmcm9tIiwiU2V0IiwiZWxlbWVudHMiLCJ1aUVsZW1lbnRUb1VzZSIsImNvbnRleHROZWVkc0V0YWdSZWZyZXNoIiwiY29udGFpbnNCb3VuZFRyYW5zaXRpb24iLCJpbktleSIsInNwbGljZSIsImluZGV4T2YiLCJob2xkTWVzc2FnZXNGb3JDb250cm9sIiwiaWRlbnRpZmllciIsInJlbGVhc2VIb2xkQnlDb250cm9sIiwic2hvd01lc3NhZ2VzIiwibWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2siLCJoYW5kbGVTaGVsbEJhY2siLCJzaGVsbEJhY2siLCJvUmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJfcm91dGluZyIsIm5hdmlnYXRlVG9NZXNzYWdlUGFnZSIsImdldFRleHQiLCJjYXRjaCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZXNzYWdlSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBtZXRob2RPdmVycmlkZSwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzLFxuXHRNZXNzYWdlVUlEZWNpc2lvbnMsXG5cdFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0U3VwcG9ydGVkVUlFbGVtZW50XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwiLi4vaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5cbnR5cGUgT2JqZWN0V2l0aENvbnZlcnRlclR5cGUgPSBvYmplY3QgJiB7XG5cdGNvbnZlcnRlclR5cGU6IHN0cmluZztcbn07XG50eXBlIE5hdmlnYXRpb25Ub0Vycm9yUGFnZVBhcmFtZXRlciA9IHtcblx0Y3VzdG9tTWVzc2FnZXM/OiBDdXN0b21NZXNzYWdlW107XG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW47XG5cdGlzRGF0YVJlY2VpdmVkRXJyb3I/OiBib29sZWFuO1xuXHR0aXRsZT86IHN0cmluZztcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdGlzSW5pdGlhbExvYWQ1MDNFcnJvcj86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0ID0ge1xuXHR0aXRsZT86IHN0cmluZztcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdGVycm9yVHlwZT86IHN0cmluZztcblx0bmF2aWdhdGVCYWNrVG9PcmlnaW4/OiBib29sZWFuO1xuXHRoYW5kbGVTaGVsbEJhY2s/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEN1c3RvbU1lc3NhZ2UgPSB7XG5cdGNvZGU6IHN0cmluZztcblx0dGV4dDogc3RyaW5nO1xuXHRwZXJzaXN0ZW50OiBib29sZWFuO1xuXHR0eXBlOiBNZXNzYWdlVHlwZTtcbn07XG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciA9IHtcblx0Y3VzdG9tTWVzc2FnZXM/OiBDdXN0b21NZXNzYWdlW107XG5cdGlzT3BlcmF0aW9uRGlhbG9nT3Blbj86IGJvb2xlYW47XG5cdGNvbnRleHQ/OiBDb250ZXh0O1xuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuO1xuXHRjb250cm9sPzogQ29udHJvbDtcblx0c0FjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGFTZWxlY3RlZENvbnRleHRzPzogQ29udGV4dCB8IENvbnRleHRbXSB8IG51bGw7XG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycztcblx0dW5Ib2xkS2V5Pzogc3RyaW5nO1xuXHRvdmVycmlkZVVJRGVjaXNpb24/OiBib29sZWFuO1xuXHRzaG93Qm91bmRTdGF0ZU1lc3NhZ2VzPzogYm9vbGVhbjtcblx0Ym91bmRBY3Rpb25OYW1lPzogc3RyaW5nO1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzID0gU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIgJiB7XG5cdG1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrPzogRnVuY3Rpb247XG5cdHNoZWxsQmFjaz86IEZ1bmN0aW9uIHwgYm9vbGVhbjtcblx0aXNEYXRhUmVjZWl2ZWRFcnJvcj86IGJvb2xlYW47XG5cdGlzSW5pdGlhbExvYWQ1MDNFcnJvcj86IGJvb2xlYW47XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG4vKipcbiAqXG4gKiBEZWZpbmVzIHRoZSBtZXNzYWdlIGRldGFpbCByZWxldmFudCBmb3IgdGhlIE1lc3NhZ2VCdXR0b24gYnVpbGRpbmcgYmxvY2sgdG8gZGlzcGxheSBhIHBvcG92ZXIuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2VEZXRhaWwgPSB7XG5cdG1lc3NhZ2U6IE1lc3NhZ2U7XG5cdGdyb3VwTmFtZT86IHN0cmluZztcblx0YWN0aXZlVGl0bGVIYW5kbGVyPzogRnVuY3Rpb247XG59O1xuXG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgbWVzc2FnZSBoYW5kbGluZy5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcbiAqIEBzaW5jZSAxLjkwLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuTWVzc2FnZUhhbmRsZXJcIilcbmNsYXNzIE1lc3NhZ2VIYW5kbGVyIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgc3RyaWN0V2FybmluZ01lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByb3RlY3RlZCBob2xkS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRwcml2YXRlIGhvbGRNc2dzVG9TaG93ID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIiwgdW5kZWZpbmVkKTtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiLCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyB3YXJuaW5nIG1lc3NhZ2VzIHRvIHRoZSBtZXNzYWdlIGhhbmRsZXIuXG5cdCAqIEBwYXJhbSBhTWVzc2FnZXMgVGhlIHN0cmljdCB3YXJuaW5nIG1lc3NhZ2VzIHRvIGJlIGFkZGVkXG5cdCAqL1xuXHRhZGRXYXJuaW5nTWVzc2FnZXNUb01lc3NhZ2VIYW5kbGVyKGFNZXNzYWdlczogTWVzc2FnZVtdKTogdm9pZCB7XG5cdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMgPSB0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcy5jb25jYXQoYU1lc3NhZ2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgbWVzc2FnZSBpcyBhIHN0cmljdCB3YXJuaW5nIG1lc3NhZ2UgdGhhdCB3YXMgcmVjZWl2ZWQgcHJldmlvdXNseS5cblx0ICogQHBhcmFtIG9NZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGJlIGNoZWNrZWRcblx0ICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIG1lc3NhZ2UgaXMgYSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlXG5cdCAqL1xuXHRpc1N0cmljdFdhcm5pbmdNZXNzYWdlKG9NZXNzYWdlOiBNZXNzYWdlKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuc3RyaWN0V2FybmluZ01lc3NhZ2VzLmZpbmQoKG1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRtZXNzYWdlLmdldENvZGUoKSA9PT0gb01lc3NhZ2UuZ2V0Q29kZSgpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRNZXNzYWdlKCkgPT09IG9NZXNzYWdlLmdldE1lc3NhZ2UoKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBvTWVzc2FnZS5nZXRUeXBlKCkgJiZcblx0XHRcdFx0XHRtZXNzYWdlLmdldERlc2NyaXB0aW9uVXJsKCkgPT09IG9NZXNzYWdlLmdldERlc2NyaXB0aW9uVXJsKCkgJiZcblx0XHRcdFx0XHRkZWVwRXF1YWwobWVzc2FnZS5nZXRUYXJnZXRzKCksIG9NZXNzYWdlLmdldFRhcmdldHMoKSkgJiZcblx0XHRcdFx0XHRtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gb01lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9KSAhPT0gdW5kZWZpbmVkXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYWxsIHN0cmljdCB3YXJuaW5nIG1lc3NhZ2VzIGZyb20gdGhlIG1lc3NhZ2UgaGFuZGxlci5cblx0ICovXG5cdGNsZWFyU3RyaWN0V2FybmluZ01lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RyaWN0V2FybmluZ01lc3NhZ2VzID0gW107XG5cdH1cblxuXHRmaWx0ZXJFcnJvck1lc3NhZ2VzKG1lc3NhZ2VzOiBNZXNzYWdlW10pOiBNZXNzYWdlW10ge1xuXHRcdHJldHVybiBtZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5FcnJvcik7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBib3VuZCBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZH0uXG5cdCAqXG5cdCAqIElmIHRoZSBib3VuZCBtZXNzYWdlcyBhcmUgc2hvd24gdG8gdGhlIHVzZXIgd2l0aCBhIGRpZmZlcmVudCBjb250cm9sIGxpa2UgdGhlIChUT0RPOkxpbmspIE1lc3NhZ2VCdXR0b25cblx0ICogdGhpcyBtZXRob2QgaGFzIHRvIGJlIG92ZXJyaWRkZW4uXG5cdCAqIEByZXR1cm5zIERldGVybWluZXMgd2hldGhlciBvciBub3QgYm91bmQgbWVzc2FnZXMgYXJlIHNob3duIGluIHRoZSBtZXNzYWdlIGRpYWxvZy5cblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0Z2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2coKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIGNvbnN1bWVyIG9mIGEgbWVzc2FnZSBidXR0b24gQkIgdG8gZGVjaWRlIHdoaWNoIGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93biBhbmQgaG93LlxuXHQgKlxuXHQgKiBUaGlzIGhvb2sgaXMgY2FsbGVkIHdoZW4gdGhlIG1lc3NhZ2UgYnV0dG9uIEJCIGRldGVjdHMgYSBjaGFuZ2UgaW4gdGhlIG1lc3NhZ2UgbW9kZWwuXG5cdCAqIFRoZSBob29rcyBhbGxvd3MgdG8gZGVmaW5lIGJlaGF2aW91ciBmb3IgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgYnV0dG9uIEJCLlxuXHQgKlxuXHQgKiBDb25zdW1lcnMgd2lsbCBiZSBhYmxlIHRvIGRvIHRoZSBmb2xsb3dpbmcgd2l0aCB0aGlzIGhvb2suXG5cdCAqXG5cdCAqIDEuIEZpbHRlciBvdXQgbWVzc2FnZXMgc28gdGhhdCB0aGV5IGFyZSBub3Qgc2hvd24gb24gdGhlIG1lc3NhZ2UgYnV0dG9uLlxuXHQgKiAyLiBncm91cCB0aGUgbWVzc2FnZXMgYmFzZWQgb24gdGhlaXIgVUkuXG5cdCAqIDMuIHByb3ZpZGUgYSBwcmVzc2VyIGhhbmRsZXIgaW5jYXNlIHRoZSBtZXNzYWdlIHNob3VsZCBzaG93IGFzIGEgbGluay5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscyBPYmplY3QgY29udGFpbmluZyB0aGUgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBtZXNzYWdlLlxuXHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzLm1lc3NhZ2UgVGhlIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbC5JZGVhbGx5LCBpdCBtdXN0IG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscy5ncm91cE5hbWUgVGhlIGdyb3VwIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBfbWVzc2FnZURldGFpbHMuYWN0aXZlVGl0bGVIYW5kbGVyIEZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY2xpY2sgZXZlbnQgb24gYSBtZXNzYWdlIGluIHRoZSBNZXNzYWdlQnV0dG9uIGJ1aWxkaW5nIGJsb2NrLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBtdXN0IGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC5cblx0ICogQHB1YmxpY1xuXHQgKiBAZXhwZXJpbWVudGFsXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlckFzeW5jXCIpXG5cdGFzeW5jIGJlZm9yZVNob3dNZXNzYWdlQnV0dG9uKF9tZXNzYWdlRGV0YWlsczogTWVzc2FnZURldGFpbFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIHRvIGhvbGQgbWVzc2FnZXMgdW5pdGwgYSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuXHQgKlxuXHQgKiBUaGUgY2FsbGVyIGNhbiByZWdpc3RlciB0byBob2xkIHRoZSBtZXNzYWdlIGhhbmRsZXIgZnJvbSBzaG93aW5nIG1lc3NhZ2VzIHVudGlsIHRoZSBjYWxsZXIncyBwcm9jZXNzZXMgYXJlIGNvbXBsZXRlZC5cblx0ICogT24gcmVnaXN0ZXJpbmcgdGhlIGNhbGxlciBpcyByZXR1cm5lZCBhIHVuaXF1ZSBrZXkuXG5cdCAqIFRoZSBtZXNzYWdlcyB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgVUkgd2l0aCBzdWJzZXF1ZW50ICdzaG93TWVzc2FnZURpYWxvZygpJyBjYWxscy5cblx0ICogVGhlIGNhbGxlciBuZWVkcyB0byB1c2UgJ3Nob3dNZXNzYWdlRGlhbG9nKDxrZXk+KScgYXQgdGhlIGVuZCBvZiBhbGwgaGlzIHByb2Nlc3NlcyB0byBzaG93IHRoZSBtZXNzYWdlcyBpbiB0aGUgVUkuXG5cdCAqXG5cdCAqIElmIG11bHRpcGxlIG93bmVycyByZWdpc3RlciBzaW11bHRhbmVvdXNseSwgdGhlbiBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIFVJIG9ubHkgYWZ0ZXIgJ3Nob3dNZXNzYWdlRGlhbG9nKDxyZXNwZWN0aXZlX2tleT4pJyBpcyBjYWxsZWQgYnkgYWxsIHRoZSBwcm9jZXNzZXMnIG93bmVycy5cblx0ICogQHBhcmFtIGtleSBVbmlxdWUgaWRlbnRpZmllciB0byB1c2UsIElmIG5vdCBwcm92aWRlZCwgYSBVSUQgd291bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCB0byByZWdpc3Rlci5cblx0ICogQHJldHVybnMgVW5pcXVlIEtleSB0byBiZSB1c2VkIGJ5IHRoZSBjYWxsZXIgdG8gc2hvdyBtZXNzYWdlcyBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUuXG5cdCAqL1xuXHRyZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGtleT86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdW5pcXVlS2V5ID0ga2V5ID8/IHVpZCgpO1xuXHRcdGlmICghdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyh1bmlxdWVLZXkpKSB7XG5cdFx0XHR0aGlzLmhvbGRLZXlzLnB1c2godW5pcXVlS2V5KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuaXF1ZUtleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBhbGwgZXhpc3RpbmcgaGVsZCBrZXlzLlxuXHQgKi9cblx0cmVzZXRIb2xkS2V5cygpOiB2b2lkIHtcblx0XHR0aGlzLmhvbGRLZXlzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSBtZXNzYWdlIGRpYWxvZyB3aXRoIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgdGhlcmUgYXJlIGFueS5cblx0ICogVGhlIG1lc3NhZ2UgZGlhbG9nIGlzIHNob3duIGFzIGEgbW9kYWwgZGlhbG9nLiBPbmNlIHRoZSB1c2VyIGNvbmZpcm1zIHRoZSBkaWFsb2csIGFsbCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdCAqIGFyZSByZW1vdmVkIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSwgYSBsaXN0IG9mIG1lc3NhZ2VzIGlzIHNob3duLiBUaGUgdXNlclxuXHQgKiBjYW4gZmlsdGVyIG9uIG1lc3NhZ2UgdHlwZXMgYW5kIGNhbiBkaXNwbGF5IGRldGFpbHMgYXMgd2VsbCBhcyB0aGUgbG9uZyB0ZXh0LiBJZiB0aGVyZSBpcyBvbmUgbWVzc2FnZSxcblx0ICogdGhlIGRpYWxvZyBpbW1lZGlhdGVseSBzaG93cyB0aGUgZGV0YWlscyBvZiB0aGUgbWVzc2FnZS4gSWYgdGhlcmUgaXMganVzdCBvbmUgc3VjY2VzcyBtZXNzYWdlLCBhIG1lc3NhZ2Vcblx0ICogdG9hc3QgaXMgc2hvd24gaW5zdGVhZC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFBSSVZBVEVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIGRpYWxvZy4gSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzXG5cdCAqIHRvIGJlIHNob3duLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbW1lZGlhdGVseVxuXHQgKiBAcHVibGljXG5cdCAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHNob3dNZXNzYWdlRGlhbG9nKG1QYXJhbWV0ZXJzPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdC8vIHJlbW92ZSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIGJlZm9yZSBzaG93aW5nIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdGF3YWl0IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIpO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBkdXBsaWNhdGVXYXJuaW5nTWVzc2FnZSA9IG1lc3NhZ2VzSW5Nb2RlbC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmlzU3RyaWN0V2FybmluZ01lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fSk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlKTtcblxuXHRcdGNvbnN0IGN1c3RvbU1lc3NhZ2VzID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgPyBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA6IHVuZGVmaW5lZCxcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgdmlld1R5cGUgPSAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFdpdGhDb252ZXJ0ZXJUeXBlKS5jb252ZXJ0ZXJUeXBlO1xuXHRcdC8vIHNldCBpc0FjdGlvblBhcmFtZXRlckRpYWxvZyBvcGVuIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRvIGRlY2lkZSB3aGV0aGVyIG1lc3NhZ2UgZGlhbG9nIHNob3VsZCBvcGVuIG9yIG5vdFxuXHRcdGlmIChtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5pc09wZXJhdGlvbkRpYWxvZ09wZW4gJiYgb09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzT3BlcmF0aW9uRGlhbG9nT3BlblwiLCB0cnVlKTtcblx0XHR9XG5cdFx0Y29uc3QgYlNob3dCb3VuZE1lc3NhZ2VzID0gdGhpcy5nZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpO1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IChcblx0XHRcdG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmNvbnRleHQgPyBtUGFyYW1ldGVycy5jb250ZXh0IDogdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9jb25zdCBiRXRhZ01lc3NhZ2UgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5iSGFzRXRhZ01lc3NhZ2U7XG5cdFx0Ly8gcmVzZXQgIGlzT3BlcmF0aW9uRGlhbG9nT3BlblxuXHRcdC8vIGNhbm5vdCBkbyB0aGlzIG9wZXJhdGlvbnMuanMgc2luY2UgaXQgaXMgbm90IGF3YXJlIG9mIHRoZSB2aWV3XG5cdFx0aWYgKG9PUEludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoXCJpc09wZXJhdGlvbkRpYWxvZ09wZW5cIiwgZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oXG5cdFx0XHRmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIsIHJlc29sdmU6ICgpID0+IHZvaWQsIHJlamVjdDogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBncmVhdCBBUEkgLSB3aWxsIGJlIGNoYW5nZWQgbGF0ZXJcblx0XHRcdFx0XHRcdHRoaXMucHJvY2Vzc0FuZFNob3dNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YlNob3dCb3VuZE1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21NZXNzYWdlcyA/PyBbXSxcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHRcdFx0XHR2aWV3VHlwZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHRcdFx0MFxuXHRcdFx0XHQpO1xuXHRcdFx0fS5iaW5kKHRoaXMpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzIHRoZSBtZXNzYWdlcyBhbmQgc2hvdyB0aGVtIHdoZW4gZXhwZWN0ZWQuXG5cdCAqXG5cdCAqIFdlIGZpbHRlciB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgaG9sZCB0aGVtIHVudGlsIGFsbCByZWdpc3RlcmVkIHByb2Nlc3NlcyBjYWxsIHNob3dNZXNzYWdlRGlhbG9nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBoZWxkIGtleXMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gc2hvdyBtZXNzYWdlIGRpYWxvZy5cblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmQgY29udGV4dCBvZiB0aGUgcGFnZS5cblx0ICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyBTaG91bGQgYm91bmQgbWVzc2FnZXMgYmUgc2hvd24uXG5cdCAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkLlxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gZmFpbHVyZSBGYWlsdXJlIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gdmlld1R5cGUgVmlldyB0eXBlLCBsaXN0IHJlcG9ydCBvciBvYmplY3QgcGFnZS5cblx0ICovXG5cdHByb2Nlc3NBbmRTaG93TWVzc2FnZXMoXG5cdFx0cGFyYW1ldGVyczogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIsXG5cdFx0YmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogYm9vbGVhbixcblx0XHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdLFxuXHRcdHN1Y2Nlc3M6ICgpID0+IHZvaWQsXG5cdFx0ZmFpbHVyZTogKCkgPT4gdm9pZCxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCB7XG5cdFx0XHRjb25jdXJyZW50RWRpdEZsYWcsXG5cdFx0XHRjb250cm9sLFxuXHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlLFxuXHRcdFx0dW5Ib2xkS2V5LFxuXHRcdFx0aXNPcGVyYXRpb25EaWFsb2dPcGVuOiBmb3JjZVNob3dVSUVsZW1lbnQgPSBmYWxzZSxcblx0XHRcdG92ZXJyaWRlVUlEZWNpc2lvbixcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXNcblx0XHR9ID0gcGFyYW1ldGVycztcblx0XHR0aGlzLmhvbGRNc2dzVG9TaG93ID0gdHJ1ZTtcblxuXHRcdC8vIENyZWF0ZSBhIFVJIGRlY2lzaW9uLlxuXHRcdGNvbnN0IG5ld1VJRGVjaXNpb25zID0gbWVzc2FnZUhhbmRsaW5nLmdldFVJRGVjaXNpb25zKFxuXHRcdFx0Y3VzdG9tTWVzc2FnZXMsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0XHRcdGNvbmN1cnJlbnRFZGl0RmxhZyxcblx0XHRcdGNvbnRyb2wsXG5cdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2UsXG5cdFx0XHR2aWV3VHlwZSxcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXMsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0Z2V0UmVzb3VyY2VNb2RlbCh0aGlzLmdldFZpZXcoKSlcblx0XHQpO1xuXHRcdHRoaXMudXBkYXRlVUlEZWNpc2lvbnMobmV3VUlEZWNpc2lvbnMsIG92ZXJyaWRlVUlEZWNpc2lvbik7XG5cdFx0dGhpcy5yZW1vdmVIb2xkS2V5KHVuSG9sZEtleSA/PyBjb250cm9sPy5nZXRJZCgpKTtcblx0XHRjb25zdCB1aUVsZW1lbnRJc0F2YWlsYWJsZSA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIik7XG5cdFx0KHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCk/LnNldFByb3BlcnR5KFxuXHRcdFx0XCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIsXG5cdFx0XHR1aUVsZW1lbnRJc0F2YWlsYWJsZS50aGVuKFxuXHRcdFx0XHRhc3luYyBmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zKGZvcmNlU2hvd1VJRWxlbWVudCwgc3VjY2VzcywgZmFpbHVyZSk7XG5cdFx0XHRcdH0uYmluZCh0aGlzKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBNZXNzYWdlcyBpbiB0aGUgVUkgYmFzZWQgb24gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIGZvcmNlU2hvd1VJRWxlbWVudFxuXHQgKiBAcGFyYW0gc3VjY2Vzc1xuXHQgKiBAcGFyYW0gZmFpbHVyZVxuXHQgKi9cblx0YXN5bmMgc2hvd01lc3NhZ2VzV2l0aENvbmR0aW9ucyhcblx0XHRmb3JjZVNob3dVSUVsZW1lbnQgPSBmYWxzZSxcblx0XHRzdWNjZXNzPzogKHJldD86IHVua25vd24pID0+IHZvaWQsXG5cdFx0ZmFpbHVyZT86IChlcnI/OiB1bmtub3duKSA9PiB2b2lkXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNob3dVSUVsZW1lbnQgPSBmb3JjZVNob3dVSUVsZW1lbnQgfHwgdGhpcy5jaGVja1RvU2hvd1VJRWxlbWVudCgpO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0aWYgKHNob3dVSUVsZW1lbnQgJiYgaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiKSkge1xuXHRcdFx0Ly8gU2hvdyBVSSBlbGVtZW50IGZvciB0aGUgcHJlc2VudCBkZWNpc2lvbiBhbmQgY2xlYXIgdGhlIGRlY2lzaW9uLlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgcmV0ID0gYXdhaXQgbWVzc2FnZUhhbmRsaW5nLnNob3dNZXNzYWdlc0luVUkoaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiKSk7XG5cdFx0XHRcdHN1Y2Nlc3M/LihyZXQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRkUgOiBWNCA6IE1lc3NhZ2VIYW5kbGVyIDogRXJyb3Igb24gdHJ5aW5nIHRvIHNob3cgVUkgZWxlbWVudDogJHtlcnJ9YCk7XG5cdFx0XHRcdGZhaWx1cmU/LihlcnIpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiLCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0XHR9XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL21lc3NhZ2VVSURlY2lzaW9uXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHR0aGlzLmNsZWFyU3RyaWN0V2FybmluZ01lc3NhZ2VzKCk7XG5cdFx0XHR0aGlzLmhvbGRNc2dzVG9TaG93ID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5pbmZvKFwiRkUgOiBWNCA6IE1lc3NhZ2VIYW5kbGVyIDogSG9sZGluZyBtZXNzYWdlcyB1bnRpbCBhIHJlZ2lzdGVyZWQgcHJvY2VzcyBcIik7XG5cdFx0XHRzdWNjZXNzPy4oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogWW91IGNhbiByZW1vdmUgdGhlIGV4aXN0aW5nIHRyYW5zaXRpb24gbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIHdpdGggdGhpcyBtZXRob2QuXG5cdCAqIFdpdGggZXZlcnkgdXNlciBpbnRlcmFjdGlvbiB0aGF0IGNhdXNlcyBzZXJ2ZXIgY29tbXVuaWNhdGlvbiAobGlrZSBjbGlja2luZyBvbiBhbiBhY3Rpb24sIGNoYW5naW5nIGRhdGEpLFxuXHQgKiB0aGlzIG1ldGhvZCByZW1vdmVzIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIG1lc3NhZ2VzIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwuXG5cdCAqIEBwYXJhbSBba2VlcEJvdW5kTWVzc2FnZV0gQ2hlY2tzIGlmIHRoZSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFyZSBub3QgdG8gYmUgcmVtb3ZlZFxuXHQgKiBAcGFyYW0ga2VlcFVuYm91bmRNZXNzYWdlXG5cdCAqIEBwYXJhbSBzUGF0aFRvQmVSZW1vdmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGtlZXBCb3VuZE1lc3NhZ2U/OiBib29sZWFuLCBrZWVwVW5ib3VuZE1lc3NhZ2U/OiBib29sZWFuLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKCFrZWVwQm91bmRNZXNzYWdlKSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdFx0fVxuXHRcdGlmICgha2VlcFVuYm91bmRNZXNzYWdlKSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdGhhdCByZXR1cm5zIGFsbCB0aGUgcGFyYW1ldGVycyBuZWVkZWQgdG8gaGFuZGxlIHRoZSBuYXZpZ2F0aW9uIHRvIHRoZSBlcnJvciBwYWdlLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgVGhlIHBhcmFtZXRlcnMgbmVjZXNzYXJ5IGZvciB0aGUgbmF2aWdhdGlvbiB0byB0aGUgZXJyb3IgcGFnZVxuXHQgKi9cblx0X2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKG1QYXJhbWV0ZXJzPzogTmF2aWdhdGlvblRvRXJyb3JQYWdlUGFyYW1ldGVyKTogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhVW5ib3VuZE1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKCk7XG5cdFx0Y29uc3QgYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyA9IHRoaXMuZ2V0U2hvd0JvdW5kTWVzc2FnZXNJbk1lc3NhZ2VEaWFsb2coKTtcblx0XHRjb25zdCBhQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMgPSBiU2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzID8gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpIDogW107XG5cdFx0Y29uc3QgYUN1c3RvbU1lc3NhZ2VzID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgPyBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA6IFtdO1xuXHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID0gQ29tbW9uVXRpbHMuaXNTdGlja3lFZGl0TW9kZSh0aGlzLmJhc2UuZ2V0VmlldygpKTtcblx0XHRsZXQgbU1lc3NhZ2VQYWdlUGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gVE9ETzogU3RpY2sgbW9kZSBjaGVjayBpcyBva2F5IGFzIGxvbmcgYXMgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGlzIHVzZWQgd2l0aCBzYXAuZmUuY29yZSBhbmQgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50LlxuXHRcdC8vIEl0IG1pZ2h0IGJlIGJldHRlciB0byBwcm92aWRlIGFuIGV4dGVuc2lvbiB0byB0aGUgY29uc3VtZXIgb2YgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRvIHByb3ZpZGUgdGhpcyB2YWx1ZS5cblxuXHRcdC8vIFRoZSBtZXNzYWdlIHBhZ2UgY2FuIG9ubHkgc2hvdyAxIG1lc3NhZ2UgdG9kYXksIHNvIHdlIG5hdmlnYXRlIHRvIGl0IHdoZW4gOlxuXHRcdC8vIDEuIFRoZXJlIGFyZSBubyBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIHRvIHNob3csXG5cdFx0Ly8gMi4gVGhlcmUgYXJlIG5vIGN1c3RvbSBtZXNzYWdlcyB0byBzaG93LCAmXG5cdFx0Ly8gMy4gVGhlcmUgaXMgZXhhY3RseSAxIHVuYm91bmQgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBtb2RlbCB3aXRoIHN0YXR1c0NvZGU9NTAzIGFuZCByZXRyeS1BZnRlciBhdmFpbGFibGVcblx0XHQvLyA0LiByZXRyeUFmdGVyIGlzIGdyZWF0ZXIgdGhhbiAxMjAgc2Vjb25kc1xuXHRcdC8vXG5cdFx0Ly8gSW4gQWRkaXRpb24sIG5hdmlnYXRpbmcgYXdheSBmcm9tIGEgc3RpY2t5IHNlc3Npb24gd2lsbCBkZXN0cm95IHRoZSBzZXNzaW9uIHNvIHdlIGRvIG5vdCBuYXZpZ2F0ZSB0byBtZXNzYWdlIHBhZ2UgZm9yIG5vdy5cblx0XHQvLyBUT0RPOiBjaGVjayBpZiBuYXZpZ2F0aW9uIHNob3VsZCBiZSBkb25lIGluIHN0aWNreSBlZGl0IG1vZGUuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlKSB7XG5cdFx0XHRtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHR0aXRsZTogbVBhcmFtZXRlcnMudGl0bGUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBtUGFyYW1ldGVycy5kZXNjcmlwdGlvbixcblx0XHRcdFx0bmF2aWdhdGVCYWNrVG9PcmlnaW46IHRydWUsXG5cdFx0XHRcdGVycm9yVHlwZTogXCJQYWdlTm90Rm91bmRcIlxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0IWJJc1N0aWNreUVkaXRNb2RlICYmXG5cdFx0XHQhYUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aCAmJlxuXHRcdFx0IWFDdXN0b21NZXNzYWdlcy5sZW5ndGggJiZcblx0XHRcdChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSB8fCBtUGFyYW1ldGVycz8uaXNJbml0aWFsTG9hZDUwM0Vycm9yID09PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2UgPSBhVW5ib3VuZE1lc3NhZ2VzWzBdO1xuXHRcdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCkgYXMgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAob1RlY2huaWNhbERldGFpbHM/Lmh0dHBTdGF0dXMgPT09IDUwMykge1xuXHRcdFx0XHRtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzID0gdGhpcy5fZ2V0SFRUUDUwM01lc3NhZ2VQYXJhbWV0ZXJzKG9NZXNzYWdlLCBvVGVjaG5pY2FsRGV0YWlscyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtTWVzc2FnZVBhZ2VQYXJhbWV0ZXJzO1xuXHR9XG5cblx0X2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyhtZXNzYWdlOiBNZXNzYWdlLCB0ZWNobmljYWxEZXRhaWxzOiBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyk6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG1lc3NhZ2VQYWdlUGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3Qgc2Vjb25kc0JlZm9yZVJldHJ5ID1cblx0XHRcdHRlY2huaWNhbERldGFpbHMucmV0cnlBZnRlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5fZ2V0U2Vjb25kc0JlZm9yZVJldHJ5QWZ0ZXIodGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSA6IHVuZGVmaW5lZDtcblxuXHRcdGlmIChzZWNvbmRzQmVmb3JlUmV0cnkgPT09IHVuZGVmaW5lZCB8fCBzZWNvbmRzQmVmb3JlUmV0cnkgPiAxMjApIHtcblx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gbWVzc2FnZUhhbmRsaW5nLmdldFJldHJ5QWZ0ZXJNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmV0cnlBZnRlck1lc3NhZ2UgPyBgJHtyZXRyeUFmdGVyTWVzc2FnZX0gJHttZXNzYWdlLmdldE1lc3NhZ2UoKX1gIDogbWVzc2FnZS5nZXRNZXNzYWdlKCksXG5cdFx0XHRcdG5hdmlnYXRlQmFja1RvT3JpZ2luOiB0cnVlLFxuXHRcdFx0XHRlcnJvclR5cGU6IFwiVW5hYmxlVG9Mb2FkXCJcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1lc3NhZ2VQYWdlUGFyYW1ldGVycztcblx0fVxuXG5cdF9nZXRTZWNvbmRzQmVmb3JlUmV0cnlBZnRlcihkUmV0cnlBZnRlcjogRGF0ZSk6IG51bWJlciB7XG5cdFx0Y29uc3QgZEN1cnJlbnREYXRlVGltZSA9IG5ldyBEYXRlKCksXG5cdFx0XHRpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMgPSBkQ3VycmVudERhdGVUaW1lLmdldFRpbWUoKSxcblx0XHRcdGlSZXRyeUFmdGVyRGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyA9IGRSZXRyeUFmdGVyLmdldFRpbWUoKSxcblx0XHRcdGlTZWNvbmRzQmVmb3JlUmV0cnkgPSAoaVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzIC0gaUN1cnJlbnREYXRlVGltZUluTWlsbGlTZWNvbmRzKSAvIDEwMDA7XG5cdFx0cmV0dXJuIGlTZWNvbmRzQmVmb3JlUmV0cnk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBleGlzdGluZyBVSSBkZWNpc2lvbnMgd2l0aCB0aGUgbmV3IG9uZXMuXG5cdCAqIEBwYXJhbSBuZXdVSURlY2lzaW9ucyBJbiBjb21taW5nIFVJIGRlY2lzaW9ucy5cblx0ICogQHBhcmFtIG92ZXJyaWRlVUlEZWNpc2lvbiBPdmVycmlkZSB0aGUgZXhpc3RpbmcgVUkgZGVjaXNpb24gdG8gc2hvdyBtZXNzYWdlcyB3aXRoIHRoZSBuZXcgb25lLlxuXHQgKlxuXHQgKiAnb3ZlcnJpZGVVSURlY2lzaW9uJywgVGhpcyB3b3VsZCBiZSBuZWVkZWQgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBwYWdlIGNvbnRleHQgYW5kIHRoZSBwYXJhbXRlcnMgdG8gY3JlYXRlIHRoZSBuZXcgVUkgZGVjaXNpb24gYXJlIGRpZmZlcmVudC5cblx0ICovXG5cdHVwZGF0ZVVJRGVjaXNpb25zKG5ld1VJRGVjaXNpb25zOiBNZXNzYWdlVUlEZWNpc2lvbnMsIG92ZXJyaWRlVUlEZWNpc2lvbiA9IGZhbHNlKTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRjb25zdCBvbGRVSURlY2lzaW9ucyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIikgYXMgTWVzc2FnZVVJRGVjaXNpb25zO1xuXHRcdGxldCBhbGxNZXNzYWdlc1RvU2hvdzogTWVzc2FnZVtdID0gW107XG5cdFx0bGV0IG1lcmdlZFVJRGVjaXNpb247XG5cdFx0aWYgKG9sZFVJRGVjaXNpb25zICYmIG92ZXJyaWRlVUlEZWNpc2lvbiA9PT0gZmFsc2UpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0b2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdG5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRvbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvd1swXS5nZXRDb2RlKCkgPT09IFwiQ19DT01NT05fU1VDQ0VTU19NRVNTQUdFXCIgJiZcblx0XHRcdFx0bmV3VUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3dbMF0uZ2V0Q29kZSgpID09PSBcIkNfQ09NTU9OX1NVQ0NFU1NfTUVTU0FHRVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgYm90aCBhcmUgZ2VuZXJpYyBzdWNjZXNzIG1lc3NhZ2VzLCB0aGVuIHdlIHNob3cgb25seSBvbmUgbWVzc2FnZS5cblx0XHRcdFx0YWxsTWVzc2FnZXNUb1Nob3cgPSBvbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFsbE1lc3NhZ2VzVG9TaG93ID0gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5vbGRVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdywgLi4ubmV3VUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3ddKSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlbGVtZW50cyA9IFtvbGRVSURlY2lzaW9ucy51aUVsZW1lbnRUb1VzZSwgbmV3VUlEZWNpc2lvbnMudWlFbGVtZW50VG9Vc2VdO1xuXHRcdFx0Ly8gRGVmYXVsdCB3ZSBzaG93IGRpYWxvZ1xuXHRcdFx0bGV0IHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQgPSBhbGxNZXNzYWdlc1RvU2hvdy5sZW5ndGggPiAwID8gXCJEaWFsb2dcIiA6IFwiTm9uZVwiO1xuXG5cdFx0XHRpZiAoYWxsTWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIFNpbmdsZSBtZXNzYWdlLCB3ZSBjaGVjayBmb3Igc3BlY2lmaWMgVUkgRWxlbWVudCB0byB1c2UuXG5cdFx0XHRcdGlmIChlbGVtZW50cy5pbmNsdWRlcyhcIlRvYXN0XCIpKSB7XG5cdFx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIlRvYXN0XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudHMuaW5jbHVkZXMoXCJCb3hcIikpIHtcblx0XHRcdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiQm94XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bWVyZ2VkVUlEZWNpc2lvbiA9IHtcblx0XHRcdFx0bWVzc2FnZXNUb1Nob3c6IGFsbE1lc3NhZ2VzVG9TaG93LFxuXHRcdFx0XHR1aUVsZW1lbnRUb1VzZSxcblx0XHRcdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2g6IG9sZFVJRGVjaXNpb25zLmNvbnRleHROZWVkc0V0YWdSZWZyZXNoIHx8IG5ld1VJRGVjaXNpb25zLmNvbnRleHROZWVkc0V0YWdSZWZyZXNoLFxuXHRcdFx0XHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogb2xkVUlEZWNpc2lvbnMuY29udGFpbnNCb3VuZFRyYW5zaXRpb24gfHwgbmV3VUlEZWNpc2lvbnMuY29udGFpbnNCb3VuZFRyYW5zaXRpb25cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lcmdlZFVJRGVjaXNpb24gPSBuZXdVSURlY2lzaW9ucztcblx0XHR9XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiLCBtZXJnZWRVSURlY2lzaW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgaGVsZCBrZXkuXG5cdCAqIEBwYXJhbSBpbktleSBLZXkgdG8gcmVtb3ZlLlxuXHQgKi9cblx0cmVtb3ZlSG9sZEtleShpbktleT86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmIChpbktleSAmJiB0aGlzLmhvbGRLZXlzLmluY2x1ZGVzKGluS2V5KSkge1xuXHRcdFx0dGhpcy5ob2xkS2V5cy5zcGxpY2UodGhpcy5ob2xkS2V5cy5pbmRleE9mKGluS2V5KSwgMSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIFVJIEVsZW1lbnQgd2l0aCBtZXNzYWdlcyBzaG91bGQgYmUgc2hvd24uXG5cdCAqIEByZXR1cm5zIEJvb2xlYW5cblx0ICovXG5cdGNoZWNrVG9TaG93VUlFbGVtZW50KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmhvbGRNc2dzVG9TaG93ICYmICh0aGlzLmhvbGRLZXlzLmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhvbGQgbWVzc2FnZXMgZm9yIHRoZSBjb250cm9sLlxuXHQgKiBAcGFyYW0gY29udHJvbFxuXHQgKi9cblx0aG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Y29uc3QgaWRlbnRpZmllciA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHR0aGlzLnJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMoaWRlbnRpZmllcik7XG5cdH1cblxuXHQvKipcblx0ICogUmVsZWFzZSBtZXNzYWdlIGhvbGQgYnkgYSBjb250cm9sLlxuXHQgKiBAcGFyYW0gY29udHJvbFxuXHQgKi9cblx0YXN5bmMgcmVsZWFzZUhvbGRCeUNvbnRyb2woY29udHJvbD86IENvbnRyb2wpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpZGVudGlmaWVyID0gY29udHJvbD8uZ2V0SWQoKTtcblx0XHR0aGlzLnJlbW92ZUhvbGRLZXkoaWRlbnRpZmllcik7XG5cdFx0Y29uc3QgdWlFbGVtZW50SXNBdmFpbGFibGUgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIpO1xuXHRcdCh0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpPy5zZXRQcm9wZXJ0eShcblx0XHRcdFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiLFxuXHRcdFx0dWlFbGVtZW50SXNBdmFpbGFibGU/LnRoZW4oXG5cdFx0XHRcdGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBNZXNzYWdlSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoKTtcblx0XHRcdFx0fS5iaW5kKHRoaXMpXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRhd2FpdCB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3dzIGEgbWVzc2FnZSBwYWdlIG9yIGEgbWVzc2FnZSBkaWFsb2cgYmFzZWQgb24gdGhlIG1lc3NhZ2VzIGluIHRoZSBtZXNzYWdlIGRpYWxvZy5cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzXVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSB1c2VyIGNsb3NlcyB0aGUgbWVzc2FnZSBkaWFsb2cgb3Igd2hlbiBuYXZpZ2F0aW9uIHRvIHRoZSBtZXNzYWdlIHBhZ2UgaXMgY29tcGxldGUuIElmIHRoZXJlIGFyZSBubyBtZXNzYWdlc1xuXHQgKiB0byBiZSBzaG93biwgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgaW1tZWRpYXRlbHlcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBzaG93TWVzc2FnZXMocGFyYW1ldGVycz86IFNob3dNZXNzYWdlc1BhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQgfCBib29sZWFuIHwgRGlhbG9nPiB7XG5cdFx0Y29uc3QgbWVzc2FnZVBhZ2VQYXJhbWV0ZXJzID0gdGhpcy5fY2hlY2tOYXZpZ2F0aW9uVG9FcnJvclBhZ2UocGFyYW1ldGVycyk7XG5cblx0XHRpZiAobWVzc2FnZVBhZ2VQYXJhbWV0ZXJzKSB7XG5cdFx0XHQvLyBuYXZpZ2F0ZSB0byBtZXNzYWdlIHBhZ2UuXG5cdFx0XHQvLyBoYW5kbGVyIGJlZm9yZSBwYWdlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkLCBmb3IgZXhhbXBsZSB0byBjbG9zZSB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2dcblx0XHRcdGlmIChwYXJhbWV0ZXJzPy5tZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjaykge1xuXHRcdFx0XHRwYXJhbWV0ZXJzLm1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdG1lc3NhZ2VQYWdlUGFyYW1ldGVycy5oYW5kbGVTaGVsbEJhY2sgPSAhcGFyYW1ldGVycz8uc2hlbGxCYWNrO1xuXHRcdFx0dGhpcy5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgdG8gc2V0IGEgdGltZW91dCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgbW9zdCByZWNlbnQgbWVzc2FnZXNcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0Ly8gY2xlYXIgYWxsIGhvbGQga2V5cyBhcyB3ZSBuYXZpZ2F0ZSB0byBtZXNzYWdlIHBhZ2UuXG5cdFx0XHRcdFx0dGhpcy5yZXNldEhvbGRLZXlzKCk7XG5cblx0XHRcdFx0XHQvLyBUT0RPOiBncmVhdCBBUEkgLSB3aWxsIGJlIGNoYW5nZWQgbGF0ZXJcblx0XHRcdFx0XHR0aGlzLmJhc2UuX3JvdXRpbmdcblx0XHRcdFx0XHRcdC5uYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UoXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnM/LmlzRGF0YVJlY2VpdmVkRXJyb3IgPT09IHRydWVcblx0XHRcdFx0XHRcdFx0XHQ/IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfREFUQV9SRUNFSVZFRF9FUlJPUlwiKVxuXHRcdFx0XHRcdFx0XHRcdDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX1RJVExFXCIpLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdC50aGVuKHJlc29sdmUpXG5cdFx0XHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbmF2aWdhdGUgdG8gbWVzc2FnZSBkaWFsb2dcblx0XHRcdHJldHVybiB0aGlzLnNob3dNZXNzYWdlRGlhbG9nKHBhcmFtZXRlcnMpO1xuXHRcdH1cblx0fVxufVxuZXhwb3J0IGRlZmF1bHQgTWVzc2FnZUhhbmRsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQSxJQVFNQSxjQUFjLElBQUFDLElBQUEsR0FEbkJDLGNBQWMsQ0FBQyxpREFBaUQsQ0FBQyxFQUFBQyxLQUFBLEdBY2hFQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBd0RoQkMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2xCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxPQUFPLENBQUMsRUFBQUMsS0FBQSxHQXdCckNDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FDakJMLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBQU0sS0FBQSxHQThDeEJGLGVBQWUsQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FDakJDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0F1SmhCTCxlQUFlLENBQUMsQ0FBQyxFQUFBTSxNQUFBLEdBdUxqQk4sZUFBZSxDQUFDLENBQUMsRUFBQU8sTUFBQSxHQUNqQkgsY0FBYyxDQUFDLENBQUMsRUFBQWYsSUFBQSxDQUFBbUIsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxvQkFBQTtJQXBkakIsU0FBQXRCLGVBQUEsRUFBYztNQUFBLElBQUF1QixLQUFBO01BQ2JBLEtBQUEsR0FBQUQsb0JBQUEsQ0FBQUUsSUFBQSxLQUFNLENBQUM7TUFBQ0QsS0FBQSxDQVRERSxxQkFBcUIsR0FBYyxFQUFFO01BQUFGLEtBQUEsQ0FJbkNHLFFBQVEsR0FBYSxFQUFFO01BQUFILEtBQUEsQ0FFekJJLGNBQWMsR0FBRyxLQUFLO01BQUEsT0FBQUosS0FBQTtJQUk5QjtJQUFDSyxjQUFBLENBQUE1QixjQUFBLEVBQUFzQixvQkFBQTtJQUFBLElBQUFPLE1BQUEsR0FBQTdCLGNBQUEsQ0FBQThCLFNBQUE7SUFBQUQsTUFBQSxDQUdERSxNQUFNLEdBRE4sU0FDQUEsTUFBTUEsQ0FBQSxFQUFTO01BQ2QsTUFBTUMsYUFBYSxHQUFHLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsVUFBVSxDQUFjO01BQ25GSCxhQUFhLENBQUNJLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRUMsU0FBUyxDQUFDO01BQzFETCxhQUFhLENBQUNJLFdBQVcsQ0FBQyw4QkFBOEIsRUFBRUUsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQVYsTUFBQSxDQUlBVyxrQ0FBa0MsR0FBbEMsU0FBQUEsa0NBQWtDQSxDQUFDQyxTQUFvQixFQUFRO01BQzlELElBQUksQ0FBQ2hCLHFCQUFxQixHQUFHLElBQUksQ0FBQ0EscUJBQXFCLENBQUNpQixNQUFNLENBQUNELFNBQVMsQ0FBQztJQUMxRTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQVosTUFBQSxDQUtBYyxzQkFBc0IsR0FBdEIsU0FBQUEsc0JBQXNCQSxDQUFDQyxRQUFpQixFQUFXO01BQ2xELE9BQ0MsSUFBSSxDQUFDbkIscUJBQXFCLENBQUNvQixJQUFJLENBQUVDLE9BQU8sSUFBSztRQUM1QyxPQUNDQSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLEtBQUtILFFBQVEsQ0FBQ0csT0FBTyxDQUFDLENBQUMsSUFDeENELE9BQU8sQ0FBQ0UsVUFBVSxDQUFDLENBQUMsS0FBS0osUUFBUSxDQUFDSSxVQUFVLENBQUMsQ0FBQyxJQUM5Q0YsT0FBTyxDQUFDRyxPQUFPLENBQUMsQ0FBQyxLQUFLTCxRQUFRLENBQUNLLE9BQU8sQ0FBQyxDQUFDLElBQ3hDSCxPQUFPLENBQUNJLGlCQUFpQixDQUFDLENBQUMsS0FBS04sUUFBUSxDQUFDTSxpQkFBaUIsQ0FBQyxDQUFDLElBQzVEQyxTQUFTLENBQUNMLE9BQU8sQ0FBQ00sVUFBVSxDQUFDLENBQUMsRUFBRVIsUUFBUSxDQUFDUSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQ3RETixPQUFPLENBQUNPLGFBQWEsQ0FBQyxDQUFDLEtBQUtULFFBQVEsQ0FBQ1MsYUFBYSxDQUFDLENBQUM7TUFFdEQsQ0FBQyxDQUFDLEtBQUtoQixTQUFTO0lBRWxCOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUFSLE1BQUEsQ0FHQXlCLDBCQUEwQixHQUExQixTQUFBQSwwQkFBMEJBLENBQUEsRUFBUztNQUNsQyxJQUFJLENBQUM3QixxQkFBcUIsR0FBRyxFQUFFO0lBQ2hDLENBQUM7SUFBQUksTUFBQSxDQUVEMEIsbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ0MsUUFBbUIsRUFBYTtNQUNuRCxPQUFPQSxRQUFRLENBQUNDLE1BQU0sQ0FBRVgsT0FBTyxJQUFLQSxPQUFPLENBQUNHLE9BQU8sQ0FBQyxDQUFDLEtBQUtTLFdBQVcsQ0FBQ0MsS0FBSyxDQUFDO0lBQzdFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQTlCLE1BQUEsQ0FZQStCLG1DQUFtQyxHQUZuQyxTQUVBQSxtQ0FBbUNBLENBQUEsRUFBWTtNQUM5QyxPQUFPLElBQUk7SUFDWjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWxCQztJQUFBL0IsTUFBQSxDQXFCTWdDLHVCQUF1QixHQUY3QixlQUVNQSx1QkFBdUJBLENBQUNDLGVBQWdDLEVBQWlCO01BQzlFLE9BQU94QixPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVhDO0lBQUFWLE1BQUEsQ0FZQWtDLHNCQUFzQixHQUF0QixTQUFBQSxzQkFBc0JBLENBQUNDLEdBQVksRUFBVTtNQUM1QyxNQUFNQyxTQUFTLEdBQUdELEdBQUcsSUFBSUUsR0FBRyxDQUFDLENBQUM7TUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQ3hDLFFBQVEsQ0FBQ3lDLFFBQVEsQ0FBQ0YsU0FBUyxDQUFDLEVBQUU7UUFDdkMsSUFBSSxDQUFDdkMsUUFBUSxDQUFDMEMsSUFBSSxDQUFDSCxTQUFTLENBQUM7TUFDOUI7TUFDQSxPQUFPQSxTQUFTO0lBQ2pCOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUFwQyxNQUFBLENBR0F3QyxhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FBQSxFQUFTO01BQ3JCLElBQUksQ0FBQzNDLFFBQVEsR0FBRyxFQUFFO0lBQ25COztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FiQztJQUFBRyxNQUFBLENBZ0JNeUMsaUJBQWlCLEdBRnZCLGVBRU1BLGlCQUFpQkEsQ0FBQ0MsV0FBd0MsRUFBaUI7TUFDaEYsTUFBTXZDLGFBQWEsR0FBRyxJQUFJLENBQUNDLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLFVBQVUsQ0FBYztNQUNuRjtNQUNBLE1BQU1ILGFBQWEsQ0FBQ3dDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQztNQUUvRCxNQUFNQyxlQUFlLEdBQUdDLFNBQVMsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7TUFDN0QsTUFBTUMsdUJBQXVCLEdBQUdKLGVBQWUsQ0FBQ2hCLE1BQU0sQ0FBRVgsT0FBZ0IsSUFBSztRQUM1RSxPQUFPLElBQUksQ0FBQ0gsc0JBQXNCLENBQUNHLE9BQU8sQ0FBQztNQUM1QyxDQUFDLENBQUM7TUFDRjRCLFNBQVMsQ0FBQ0ksY0FBYyxDQUFDRCx1QkFBdUIsQ0FBQztNQUVqRCxNQUFNRSxjQUFjLEdBQUdSLFdBQVcsSUFBSUEsV0FBVyxDQUFDUSxjQUFjLEdBQUdSLFdBQVcsQ0FBQ1EsY0FBYyxHQUFHMUMsU0FBUztRQUN4RzJDLHlCQUF5QixHQUFHLElBQUksQ0FBQy9DLElBQUksQ0FBQ2dELE9BQU8sQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7TUFDdEcsTUFBTUMsUUFBUSxHQUFJLElBQUksQ0FBQ2xELElBQUksQ0FBQ2dELE9BQU8sQ0FBQyxDQUFDLENBQUNHLFdBQVcsQ0FBQyxDQUFDLENBQTZCQyxhQUFhO01BQzdGO01BQ0EsSUFBSWQsV0FBVyxJQUFJQSxXQUFXLENBQUNlLHFCQUFxQixJQUFJTix5QkFBeUIsRUFBRTtRQUNsRkEseUJBQXlCLENBQUM1QyxXQUFXLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDO01BQ3JFO01BQ0EsTUFBTW1ELGtCQUFrQixHQUFHLElBQUksQ0FBQzNCLG1DQUFtQyxDQUFDLENBQUM7TUFDckUsTUFBTTRCLGVBQWUsR0FDcEJqQixXQUFXLElBQUlBLFdBQVcsQ0FBQ2tCLE9BQU8sR0FBR2xCLFdBQVcsQ0FBQ2tCLE9BQU8sR0FBRyxJQUFJLENBQUNSLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQzFFO01BQ25CO01BQ0E7TUFDQTtNQUNBLElBQUlGLHlCQUF5QixFQUFFO1FBQzlCQSx5QkFBeUIsQ0FBQzVDLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUM7TUFDdEU7TUFDQSxPQUFPLElBQUlFLE9BQU8sQ0FDakIsVUFBZ0NDLE9BQW1CLEVBQUVtRCxNQUFrQixFQUFRO1FBQzlFO1FBQ0FDLFVBQVUsQ0FDVCxZQUFzQztVQUNyQztVQUNBLElBQUksQ0FBQ0Msc0JBQXNCLENBQzFCckIsV0FBVyxJQUFJLENBQUMsQ0FBQyxFQUNqQmlCLGVBQWUsRUFDZkQsa0JBQWtCLEVBQ2xCUixjQUFjLElBQUksRUFBRSxFQUNwQnhDLE9BQU8sRUFDUG1ELE1BQU0sRUFDTlAsUUFDRCxDQUFDO1FBQ0YsQ0FBQyxDQUFDVSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ1osQ0FDRCxDQUFDO01BQ0YsQ0FBQyxDQUFDQSxJQUFJLENBQUMsSUFBSSxDQUNaLENBQUM7SUFDRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FYQztJQUFBaEUsTUFBQSxDQVlBK0Qsc0JBQXNCLEdBQXRCLFNBQUFBLHNCQUFzQkEsQ0FDckJFLFVBQXNDLEVBQ3RDQyxjQUE4QixFQUM5QkMsMkJBQW9DLEVBQ3BDakIsY0FBK0IsRUFDL0JrQixPQUFtQixFQUNuQkMsT0FBbUIsRUFDbkJmLFFBQWlCLEVBQ1Y7TUFDUCxNQUFNO1FBQ0xnQixrQkFBa0I7UUFDbEJDLE9BQU87UUFDUEMsV0FBVztRQUNYQyxtQkFBbUI7UUFDbkJDLFNBQVM7UUFDVGpCLHFCQUFxQixFQUFFa0Isa0JBQWtCLEdBQUcsS0FBSztRQUNqREMsa0JBQWtCO1FBQ2xCQztNQUNELENBQUMsR0FBR1osVUFBVTtNQUNkLElBQUksQ0FBQ25FLGNBQWMsR0FBRyxJQUFJOztNQUUxQjtNQUNBLE1BQU1nRixjQUFjLEdBQUdDLGVBQWUsQ0FBQ0MsY0FBYyxDQUNwRDlCLGNBQWMsRUFDZGdCLGNBQWMsRUFDZEMsMkJBQTJCLEVBQzNCRyxrQkFBa0IsRUFDbEJDLE9BQU8sRUFDUEMsV0FBVyxFQUNYQyxtQkFBbUIsRUFDbkJuQixRQUFRLEVBQ1J1QixzQkFBc0IsRUFDdEJaLFVBQVUsRUFDVmdCLGdCQUFnQixDQUFDLElBQUksQ0FBQzdCLE9BQU8sQ0FBQyxDQUFDLENBQ2hDLENBQUM7TUFDRCxJQUFJLENBQUM4QixpQkFBaUIsQ0FBQ0osY0FBYyxFQUFFRixrQkFBa0IsQ0FBQztNQUMxRCxJQUFJLENBQUNPLGFBQWEsQ0FBQ1QsU0FBUyxJQUFJSCxPQUFPLEVBQUVhLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDakQsTUFBTUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDakYsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUVxQyxXQUFXLENBQUMsOEJBQThCLENBQUM7TUFDekgsSUFBSSxDQUFDdkMsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQWdCQyxXQUFXLENBQzNFLDhCQUE4QixFQUM5QjhFLG9CQUFvQixDQUFDQyxJQUFJLENBQ3hCLGtCQUFxRDtRQUNwRCxPQUFPLElBQUksQ0FBQ0MseUJBQXlCLENBQUNaLGtCQUFrQixFQUFFUCxPQUFPLEVBQUVDLE9BQU8sQ0FBQztNQUM1RSxDQUFDLENBQUNMLElBQUksQ0FBQyxJQUFJLENBQ1osQ0FDRCxDQUFDO0lBQ0Y7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQWhFLE1BQUEsQ0FNTXVGLHlCQUF5QixHQUEvQixlQUFNQSx5QkFBeUJBLENBQUEsRUFJZDtNQUFBLElBSGhCWixrQkFBa0IsR0FBQWEsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQWhGLFNBQUEsR0FBQWdGLFNBQUEsTUFBRyxLQUFLO01BQUEsSUFDMUJwQixPQUFpQyxHQUFBb0IsU0FBQSxDQUFBQyxNQUFBLE9BQUFELFNBQUEsTUFBQWhGLFNBQUE7TUFBQSxJQUNqQzZELE9BQWlDLEdBQUFtQixTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBaEYsU0FBQTtNQUVqQyxNQUFNa0YsYUFBYSxHQUFHZixrQkFBa0IsSUFBSSxJQUFJLENBQUNnQixvQkFBb0IsQ0FBQyxDQUFDO01BQ3ZFLE1BQU14RixhQUFhLEdBQUcsSUFBSSxDQUFDQyxJQUFJLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQyxVQUFVLENBQWM7TUFDbkYsSUFBSW9GLGFBQWEsSUFBSXZGLGFBQWEsQ0FBQ3dDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1FBQ3JFO1FBQ0EsSUFBSTtVQUNILE1BQU1pRCxHQUFHLEdBQUcsTUFBTWIsZUFBZSxDQUFDYyxnQkFBZ0IsQ0FBQzFGLGFBQWEsQ0FBQ3dDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1VBQ25HeUIsT0FBTyxHQUFHd0IsR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLE9BQU9FLEdBQVksRUFBRTtVQUN0QkMsR0FBRyxDQUFDQyxLQUFLLENBQUMsa0VBQWtFRixHQUFHLEVBQUUsQ0FBQztVQUNsRnpCLE9BQU8sR0FBR3lCLEdBQUcsQ0FBQztVQUNkM0YsYUFBYSxDQUFDSSxXQUFXLENBQUMsOEJBQThCLEVBQUVFLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3RTtRQUNBUCxhQUFhLENBQUNJLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRUMsU0FBUyxDQUFDO1FBQzFELElBQUksQ0FBQ2lCLDBCQUEwQixDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDM0IsY0FBYyxHQUFHLEtBQUs7TUFDNUIsQ0FBQyxNQUFNO1FBQ05pRyxHQUFHLENBQUNFLElBQUksQ0FBQyx5RUFBeUUsQ0FBQztRQUNuRjdCLE9BQU8sR0FBRyxDQUFDO01BQ1o7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQXBFLE1BQUEsQ0FTQWtHLHdCQUF3QixHQUR4QixTQUNBQSx3QkFBd0JBLENBQUNDLGdCQUEwQixFQUFFQyxrQkFBNEIsRUFBRUMsZ0JBQXlCLEVBQVE7TUFDbkgsSUFBSSxDQUFDRixnQkFBZ0IsRUFBRTtRQUN0QnBCLGVBQWUsQ0FBQ3VCLDZCQUE2QixDQUFDRCxnQkFBZ0IsQ0FBQztNQUNoRTtNQUNBLElBQUksQ0FBQ0Qsa0JBQWtCLEVBQUU7UUFDeEJyQixlQUFlLENBQUN3QiwrQkFBK0IsQ0FBQyxDQUFDO01BQ2xEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUF2RyxNQUFBLENBS0F3RywyQkFBMkIsR0FBM0IsU0FBQUEsMkJBQTJCQSxDQUFDOUQsV0FBNEMsRUFBMkM7TUFDbEgsTUFBTStELGdCQUFnQixHQUFHMUIsZUFBZSxDQUFDMkIsV0FBVyxDQUFDLENBQUM7TUFDdEQsTUFBTUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDNUUsbUNBQW1DLENBQUMsQ0FBQztNQUMvRSxNQUFNNkUsd0JBQXdCLEdBQUdELDRCQUE0QixHQUFHNUIsZUFBZSxDQUFDMkIsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO01BQzVHLE1BQU1HLGVBQWUsR0FBR25FLFdBQVcsSUFBSUEsV0FBVyxDQUFDUSxjQUFjLEdBQUdSLFdBQVcsQ0FBQ1EsY0FBYyxHQUFHLEVBQUU7TUFDbkcsTUFBTTRELGlCQUFpQixHQUFHQyxXQUFXLENBQUNDLGdCQUFnQixDQUFDLElBQUksQ0FBQzVHLElBQUksQ0FBQ2dELE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDM0UsSUFBSTZELHNCQUErRDs7TUFFbkU7TUFDQTs7TUFFQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0EsSUFBSXZFLFdBQVcsRUFBRXdFLG1CQUFtQixLQUFLLElBQUksRUFBRTtRQUM5Q0Qsc0JBQXNCLEdBQUc7VUFDeEJFLEtBQUssRUFBRXpFLFdBQVcsQ0FBQ3lFLEtBQUs7VUFDeEJDLFdBQVcsRUFBRTFFLFdBQVcsQ0FBQzBFLFdBQVc7VUFDcENDLG9CQUFvQixFQUFFLElBQUk7VUFDMUJDLFNBQVMsRUFBRTtRQUNaLENBQUM7TUFDRixDQUFDLE1BQU0sSUFDTixDQUFDUixpQkFBaUIsSUFDbEIsQ0FBQ0Ysd0JBQXdCLENBQUNuQixNQUFNLElBQ2hDLENBQUNvQixlQUFlLENBQUNwQixNQUFNLEtBQ3RCZ0IsZ0JBQWdCLENBQUNoQixNQUFNLEtBQUssQ0FBQyxJQUFJL0MsV0FBVyxFQUFFNkUscUJBQXFCLEtBQUssSUFBSSxDQUFDLEVBQzdFO1FBQ0QsTUFBTXhHLFFBQVEsR0FBRzBGLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNZSxpQkFBaUIsR0FBR3pHLFFBQVEsQ0FBQzBHLG1CQUFtQixDQUFDLENBQXdDO1FBQy9GLElBQUlELGlCQUFpQixFQUFFRSxVQUFVLEtBQUssR0FBRyxFQUFFO1VBQzFDVCxzQkFBc0IsR0FBRyxJQUFJLENBQUNVLDRCQUE0QixDQUFDNUcsUUFBUSxFQUFFeUcsaUJBQWlCLENBQUM7UUFDeEY7TUFDRDtNQUNBLE9BQU9QLHNCQUFzQjtJQUM5QixDQUFDO0lBQUFqSCxNQUFBLENBRUQySCw0QkFBNEIsR0FBNUIsU0FBQUEsNEJBQTRCQSxDQUFDMUcsT0FBZ0IsRUFBRTJHLGdCQUF5QyxFQUEyQztNQUNsSSxJQUFJQyxxQkFBOEQ7TUFFbEUsTUFBTUMsa0JBQWtCLEdBQ3ZCRixnQkFBZ0IsQ0FBQ0csVUFBVSxLQUFLdkgsU0FBUyxHQUFHLElBQUksQ0FBQ3dILDJCQUEyQixDQUFDSixnQkFBZ0IsQ0FBQ0csVUFBVSxDQUFDLEdBQUd2SCxTQUFTO01BRXRILElBQUlzSCxrQkFBa0IsS0FBS3RILFNBQVMsSUFBSXNILGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUNqRSxNQUFNRyxpQkFBaUIsR0FBR2xELGVBQWUsQ0FBQ21ELG9CQUFvQixDQUFDakgsT0FBTyxDQUFDO1FBQ3ZFNEcscUJBQXFCLEdBQUc7VUFDdkJULFdBQVcsRUFBRWEsaUJBQWlCLEdBQUcsR0FBR0EsaUJBQWlCLElBQUloSCxPQUFPLENBQUNFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBR0YsT0FBTyxDQUFDRSxVQUFVLENBQUMsQ0FBQztVQUN0R2tHLG9CQUFvQixFQUFFLElBQUk7VUFDMUJDLFNBQVMsRUFBRTtRQUNaLENBQUM7TUFDRjtNQUVBLE9BQU9PLHFCQUFxQjtJQUM3QixDQUFDO0lBQUE3SCxNQUFBLENBRURnSSwyQkFBMkIsR0FBM0IsU0FBQUEsMkJBQTJCQSxDQUFDRyxXQUFpQixFQUFVO01BQ3RELE1BQU1DLGdCQUFnQixHQUFHLElBQUlDLElBQUksQ0FBQyxDQUFDO1FBQ2xDQyw4QkFBOEIsR0FBR0YsZ0JBQWdCLENBQUNHLE9BQU8sQ0FBQyxDQUFDO1FBQzNEQyxpQ0FBaUMsR0FBR0wsV0FBVyxDQUFDSSxPQUFPLENBQUMsQ0FBQztRQUN6REUsbUJBQW1CLEdBQUcsQ0FBQ0QsaUNBQWlDLEdBQUdGLDhCQUE4QixJQUFJLElBQUk7TUFDbEcsT0FBT0csbUJBQW1CO0lBQzNCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQXpJLE1BQUEsQ0FPQWtGLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUNKLGNBQWtDLEVBQW9DO01BQUEsSUFBbENGLGtCQUFrQixHQUFBWSxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBaEYsU0FBQSxHQUFBZ0YsU0FBQSxNQUFHLEtBQUs7TUFDL0UsTUFBTXJGLGFBQWEsR0FBRyxJQUFJLENBQUNDLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLFVBQVUsQ0FBYztNQUNuRixNQUFNb0ksY0FBYyxHQUFHdkksYUFBYSxDQUFDd0MsV0FBVyxDQUFDLG9CQUFvQixDQUF1QjtNQUM1RixJQUFJZ0csaUJBQTRCLEdBQUcsRUFBRTtNQUNyQyxJQUFJQyxnQkFBZ0I7TUFDcEIsSUFBSUYsY0FBYyxJQUFJOUQsa0JBQWtCLEtBQUssS0FBSyxFQUFFO1FBQ25ELElBQ0M4RCxjQUFjLENBQUNHLGNBQWMsQ0FBQ3BELE1BQU0sS0FBSyxDQUFDLElBQzFDWCxjQUFjLENBQUMrRCxjQUFjLENBQUNwRCxNQUFNLEtBQUssQ0FBQyxJQUMxQ2lELGNBQWMsQ0FBQ0csY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDM0gsT0FBTyxDQUFDLENBQUMsS0FBSywwQkFBMEIsSUFDekU0RCxjQUFjLENBQUMrRCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMzSCxPQUFPLENBQUMsQ0FBQyxLQUFLLDBCQUEwQixFQUN4RTtVQUNEO1VBQ0F5SCxpQkFBaUIsR0FBR0QsY0FBYyxDQUFDRyxjQUFjO1FBQ2xELENBQUMsTUFBTTtVQUNORixpQkFBaUIsR0FBR0csS0FBSyxDQUFDQyxJQUFJLENBQUMsSUFBSUMsR0FBRyxDQUFDLENBQUMsR0FBR04sY0FBYyxDQUFDRyxjQUFjLEVBQUUsR0FBRy9ELGNBQWMsQ0FBQytELGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDOUc7UUFDQSxNQUFNSSxRQUFRLEdBQUcsQ0FBQ1AsY0FBYyxDQUFDUSxjQUFjLEVBQUVwRSxjQUFjLENBQUNvRSxjQUFjLENBQUM7UUFDL0U7UUFDQSxJQUFJQSxjQUFrQyxHQUFHUCxpQkFBaUIsQ0FBQ2xELE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLE1BQU07UUFFekYsSUFBSWtELGlCQUFpQixDQUFDbEQsTUFBTSxLQUFLLENBQUMsRUFBRTtVQUNuQztVQUNBLElBQUl3RCxRQUFRLENBQUMzRyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDL0I0RyxjQUFjLEdBQUcsT0FBTztVQUN6QixDQUFDLE1BQU0sSUFBSUQsUUFBUSxDQUFDM0csUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDNEcsY0FBYyxHQUFHLEtBQUs7VUFDdkI7UUFDRDtRQUVBTixnQkFBZ0IsR0FBRztVQUNsQkMsY0FBYyxFQUFFRixpQkFBaUI7VUFDakNPLGNBQWM7VUFDZEMsdUJBQXVCLEVBQUVULGNBQWMsQ0FBQ1MsdUJBQXVCLElBQUlyRSxjQUFjLENBQUNxRSx1QkFBdUI7VUFDekdDLHVCQUF1QixFQUFFVixjQUFjLENBQUNVLHVCQUF1QixJQUFJdEUsY0FBYyxDQUFDc0U7UUFDbkYsQ0FBQztNQUNGLENBQUMsTUFBTTtRQUNOUixnQkFBZ0IsR0FBRzlELGNBQWM7TUFDbEM7TUFDQTNFLGFBQWEsQ0FBQ0ksV0FBVyxDQUFDLG9CQUFvQixFQUFFcUksZ0JBQWdCLENBQUM7SUFDbEU7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBNUksTUFBQSxDQUlBbUYsYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQUNrRSxLQUFjLEVBQVE7TUFDbkMsSUFBSUEsS0FBSyxJQUFJLElBQUksQ0FBQ3hKLFFBQVEsQ0FBQ3lDLFFBQVEsQ0FBQytHLEtBQUssQ0FBQyxFQUFFO1FBQzNDLElBQUksQ0FBQ3hKLFFBQVEsQ0FBQ3lKLE1BQU0sQ0FBQyxJQUFJLENBQUN6SixRQUFRLENBQUMwSixPQUFPLENBQUNGLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUN0RDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXJKLE1BQUEsQ0FJQTJGLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUEsRUFBWTtNQUMvQixPQUFPLElBQUksQ0FBQzdGLGNBQWMsS0FBSyxJQUFJLENBQUNELFFBQVEsQ0FBQzRGLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN4RTs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF6RixNQUFBLENBSUF3SixzQkFBc0IsR0FBdEIsU0FBQUEsc0JBQXNCQSxDQUFDakYsT0FBZ0IsRUFBUTtNQUM5QyxNQUFNa0YsVUFBVSxHQUFHbEYsT0FBTyxDQUFDYSxLQUFLLENBQUMsQ0FBQztNQUNsQyxJQUFJLENBQUNsRCxzQkFBc0IsQ0FBQ3VILFVBQVUsQ0FBQztJQUN4Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF6SixNQUFBLENBSU0wSixvQkFBb0IsR0FBMUIsZUFBTUEsb0JBQW9CQSxDQUFDbkYsT0FBaUIsRUFBaUI7TUFDNUQsTUFBTWtGLFVBQVUsR0FBR2xGLE9BQU8sRUFBRWEsS0FBSyxDQUFDLENBQUM7TUFDbkMsSUFBSSxDQUFDRCxhQUFhLENBQUNzRSxVQUFVLENBQUM7TUFDOUIsTUFBTXBFLG9CQUFvQixHQUFHLElBQUksQ0FBQ2pGLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFcUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDO01BQ3pILElBQUksQ0FBQ3ZDLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFnQkMsV0FBVyxDQUMzRSw4QkFBOEIsRUFDOUI4RSxvQkFBb0IsRUFBRUMsSUFBSSxDQUN6QixrQkFBcUQ7UUFDcEQsT0FBTyxJQUFJLENBQUNDLHlCQUF5QixDQUFDLENBQUM7TUFDeEMsQ0FBQyxDQUFDdkIsSUFBSSxDQUFDLElBQUksQ0FDWixDQUNELENBQUM7TUFDRCxNQUFNLElBQUksQ0FBQzVELElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFcUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDO0lBQ3BHOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEzQyxNQUFBLENBUU0ySixZQUFZLEdBRmxCLGVBRU1BLFlBQVlBLENBQUMxRixVQUFtQyxFQUFvQztNQUN6RixNQUFNNEQscUJBQXFCLEdBQUcsSUFBSSxDQUFDckIsMkJBQTJCLENBQUN2QyxVQUFVLENBQUM7TUFFMUUsSUFBSTRELHFCQUFxQixFQUFFO1FBQzFCO1FBQ0E7UUFDQSxJQUFJNUQsVUFBVSxFQUFFMkYsNkJBQTZCLEVBQUU7VUFDOUMzRixVQUFVLENBQUMyRiw2QkFBNkIsQ0FBQyxDQUFDO1FBQzNDO1FBRUEvQixxQkFBcUIsQ0FBQ2dDLGVBQWUsR0FBRyxDQUFDNUYsVUFBVSxFQUFFNkYsU0FBUztRQUM5RCxJQUFJLENBQUM1RCx3QkFBd0IsQ0FBQyxDQUFDO1FBQy9CLE1BQU02RCxlQUFlLEdBQUdDLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsYUFBYSxDQUFFO1FBRXBFLE9BQU8sSUFBSXhKLE9BQU8sQ0FBVSxDQUFDQyxPQUFPLEVBQUVtRCxNQUFNLEtBQUs7VUFDaEQ7VUFDQUMsVUFBVSxDQUFDLE1BQU07WUFDaEI7WUFDQSxJQUFJLENBQUN0QixhQUFhLENBQUMsQ0FBQzs7WUFFcEI7WUFDQSxJQUFJLENBQUNwQyxJQUFJLENBQUM4SixRQUFRLENBQ2hCQyxxQkFBcUIsQ0FDckJsRyxVQUFVLEVBQUVpRCxtQkFBbUIsS0FBSyxJQUFJLEdBQ3JDNkMsZUFBZSxDQUFDSyxPQUFPLENBQUMsb0NBQW9DLENBQUMsR0FDN0RMLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDLG9DQUFvQyxDQUFDLEVBQ2hFdkMscUJBQ0QsQ0FBQyxDQUNBdkMsSUFBSSxDQUFDNUUsT0FBTyxDQUFDLENBQ2IySixLQUFLLENBQUN4RyxNQUFNLENBQUM7VUFDaEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQztNQUNILENBQUMsTUFBTTtRQUNOO1FBQ0EsT0FBTyxJQUFJLENBQUNwQixpQkFBaUIsQ0FBQ3dCLFVBQVUsQ0FBQztNQUMxQztJQUNELENBQUM7SUFBQSxPQUFBOUYsY0FBQTtFQUFBLEVBbGdCMkJtTSxtQkFBbUIsR0FBQUMseUJBQUEsQ0FBQS9LLE9BQUEsQ0FBQVMsU0FBQSxhQUFBM0IsS0FBQSxHQUFBa00sTUFBQSxDQUFBQyx3QkFBQSxDQUFBakwsT0FBQSxDQUFBUyxTQUFBLGFBQUFULE9BQUEsQ0FBQVMsU0FBQSxHQUFBc0sseUJBQUEsQ0FBQS9LLE9BQUEsQ0FBQVMsU0FBQSwwQ0FBQXpCLEtBQUEsRUFBQUUsS0FBQSxHQUFBOEwsTUFBQSxDQUFBQyx3QkFBQSxDQUFBakwsT0FBQSxDQUFBUyxTQUFBLDBDQUFBVCxPQUFBLENBQUFTLFNBQUEsR0FBQXNLLHlCQUFBLENBQUEvSyxPQUFBLENBQUFTLFNBQUEsOEJBQUFuQixLQUFBLEVBQUFFLEtBQUEsR0FBQXdMLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQWpMLE9BQUEsQ0FBQVMsU0FBQSw4QkFBQVQsT0FBQSxDQUFBUyxTQUFBLEdBQUFzSyx5QkFBQSxDQUFBL0ssT0FBQSxDQUFBUyxTQUFBLHdCQUFBaEIsS0FBQSxFQUFBQyxLQUFBLEdBQUFzTCxNQUFBLENBQUFDLHdCQUFBLENBQUFqTCxPQUFBLENBQUFTLFNBQUEsd0JBQUFULE9BQUEsQ0FBQVMsU0FBQSxHQUFBc0sseUJBQUEsQ0FBQS9LLE9BQUEsQ0FBQVMsU0FBQSwrQkFBQWIsS0FBQSxHQUFBb0wsTUFBQSxDQUFBQyx3QkFBQSxDQUFBakwsT0FBQSxDQUFBUyxTQUFBLCtCQUFBVCxPQUFBLENBQUFTLFNBQUEsR0FBQXNLLHlCQUFBLENBQUEvSyxPQUFBLENBQUFTLFNBQUEsbUJBQUFaLE1BQUEsRUFBQUMsTUFBQSxHQUFBa0wsTUFBQSxDQUFBQyx3QkFBQSxDQUFBakwsT0FBQSxDQUFBUyxTQUFBLG1CQUFBVCxPQUFBLENBQUFTLFNBQUEsR0FBQVQsT0FBQSxNQUFBRCxNQUFBO0VBQUEsT0FvZ0JqQ3BCLGNBQWM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
468
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwibWV0aG9kT3ZlcnJpZGUiLCJfZGVjMyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjNCIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiZmluYWxFeHRlbnNpb24iLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfdGhpcyIsImNhbGwiLCJzdHJpY3RXYXJuaW5nTWVzc2FnZXMiLCJob2xkS2V5cyIsImhvbGRNc2dzVG9TaG93IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkluaXQiLCJpbnRlcm5hbE1vZGVsIiwiYmFzZSIsImdldEFwcENvbXBvbmVudCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIiLCJhTWVzc2FnZXMiLCJjb25jYXQiLCJpc1N0cmljdFdhcm5pbmdNZXNzYWdlIiwib01lc3NhZ2UiLCJmaW5kIiwibWVzc2FnZSIsImdldENvZGUiLCJnZXRNZXNzYWdlIiwiZ2V0VHlwZSIsImdldERlc2NyaXB0aW9uVXJsIiwiZGVlcEVxdWFsIiwiZ2V0VGFyZ2V0cyIsImdldFBlcnNpc3RlbnQiLCJjbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcyIsImZpbHRlckVycm9yTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZpbHRlciIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZyIsImZpbHRlckNvbnRleHRCb3VuZE1lc3NhZ2VzIiwidHJhbnNpdGlvbk1lc3NhZ2VzIiwiY29udGV4dCIsImJlZm9yZVNob3dNZXNzYWdlQnV0dG9uIiwiX21lc3NhZ2VEZXRhaWxzIiwicmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyIsImtleSIsInVuaXF1ZUtleSIsInVpZCIsImluY2x1ZGVzIiwicHVzaCIsInJlc2V0SG9sZEtleXMiLCJzaG93TWVzc2FnZURpYWxvZyIsIm1QYXJhbWV0ZXJzIiwiZ2V0UHJvcGVydHkiLCJtZXNzYWdlc0luTW9kZWwiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZHVwbGljYXRlV2FybmluZ01lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlcyIsImN1c3RvbU1lc3NhZ2VzIiwib09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsInZpZXdUeXBlIiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiaXNPcGVyYXRpb25EaWFsb2dPcGVuIiwiYlNob3dCb3VuZE1lc3NhZ2VzIiwib0JpbmRpbmdDb250ZXh0IiwicmVqZWN0Iiwic2V0VGltZW91dCIsInByb2Nlc3NBbmRTaG93TWVzc2FnZXMiLCJiaW5kIiwicGFyYW1ldGVycyIsImJpbmRpbmdDb250ZXh0Iiwic2hvd0JvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwic3VjY2VzcyIsImZhaWx1cmUiLCJjb25jdXJyZW50RWRpdEZsYWciLCJjb250cm9sIiwic0FjdGlvbk5hbWUiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwidW5Ib2xkS2V5IiwiZm9yY2VTaG93VUlFbGVtZW50Iiwib3ZlcnJpZGVVSURlY2lzaW9uIiwic2hvd0JvdW5kU3RhdGVNZXNzYWdlcyIsIm5ld1VJRGVjaXNpb25zIiwibWVzc2FnZUhhbmRsaW5nIiwiZ2V0VUlEZWNpc2lvbnMiLCJnZXRSZXNvdXJjZU1vZGVsIiwidXBkYXRlVUlEZWNpc2lvbnMiLCJyZW1vdmVIb2xkS2V5IiwiZ2V0SWQiLCJ1aUVsZW1lbnRJc0F2YWlsYWJsZSIsInRoZW4iLCJzaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic2hvd1VJRWxlbWVudCIsImNoZWNrVG9TaG93VUlFbGVtZW50IiwicmV0Iiwic2hvd01lc3NhZ2VzSW5VSSIsImVyciIsIkxvZyIsImVycm9yIiwiaW5mbyIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImtlZXBCb3VuZE1lc3NhZ2UiLCJrZWVwVW5ib3VuZE1lc3NhZ2UiLCJzUGF0aFRvQmVSZW1vdmVkIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlIiwiYVVuYm91bmRNZXNzYWdlcyIsImdldE1lc3NhZ2VzIiwiYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsImJJc1N0aWNreUVkaXRNb2RlIiwiQ29tbW9uVXRpbHMiLCJpc1N0aWNreUVkaXRNb2RlIiwibU1lc3NhZ2VQYWdlUGFyYW1ldGVycyIsImlzRGF0YVJlY2VpdmVkRXJyb3IiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibmF2aWdhdGVCYWNrVG9PcmlnaW4iLCJlcnJvclR5cGUiLCJpc0luaXRpYWxMb2FkNTAzRXJyb3IiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiX2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyIsInRlY2huaWNhbERldGFpbHMiLCJtZXNzYWdlUGFnZVBhcmFtZXRlcnMiLCJzZWNvbmRzQmVmb3JlUmV0cnkiLCJyZXRyeUFmdGVyIiwiX2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImRSZXRyeUFmdGVyIiwiZEN1cnJlbnREYXRlVGltZSIsIkRhdGUiLCJpQ3VycmVudERhdGVUaW1lSW5NaWxsaVNlY29uZHMiLCJnZXRUaW1lIiwiaVJldHJ5QWZ0ZXJEYXRlVGltZUluTWlsbGlTZWNvbmRzIiwiaVNlY29uZHNCZWZvcmVSZXRyeSIsIm9sZFVJRGVjaXNpb25zIiwiYWxsTWVzc2FnZXNUb1Nob3ciLCJtZXJnZWRVSURlY2lzaW9uIiwibWVzc2FnZXNUb1Nob3ciLCJBcnJheSIsImZyb20iLCJTZXQiLCJlbGVtZW50cyIsInVpRWxlbWVudFRvVXNlIiwiY29udGV4dE5lZWRzRXRhZ1JlZnJlc2giLCJjb250YWluc0JvdW5kVHJhbnNpdGlvbiIsImluS2V5Iiwic3BsaWNlIiwiaW5kZXhPZiIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJpZGVudGlmaWVyIiwicmVsZWFzZUhvbGRCeUNvbnRyb2wiLCJzaG93TWVzc2FnZXMiLCJtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjayIsImhhbmRsZVNoZWxsQmFjayIsInNoZWxsQmFjayIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb01lc3NhZ2VQYWdlIiwiZ2V0VGV4dCIsImNhdGNoIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1lc3NhZ2VIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0TWVzc2FnZVRlY2huaWNhbERldGFpbHMsXG5cdE1lc3NhZ2VVSURlY2lzaW9ucyxcblx0U2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRTdXBwb3J0ZWRVSUVsZW1lbnRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCIuLi9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcblxudHlwZSBPYmplY3RXaXRoQ29udmVydGVyVHlwZSA9IG9iamVjdCAmIHtcblx0Y29udmVydGVyVHlwZTogc3RyaW5nO1xufTtcbnR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbjtcblx0aXNEYXRhUmVjZWl2ZWRFcnJvcj86IGJvb2xlYW47XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0ZXJyb3JUeXBlPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZUJhY2tUb09yaWdpbj86IGJvb2xlYW47XG5cdGhhbmRsZVNoZWxsQmFjaz86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQ3VzdG9tTWVzc2FnZSA9IHtcblx0Y29kZTogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHBlcnNpc3RlbnQ6IGJvb2xlYW47XG5cdHR5cGU6IE1lc3NhZ2VUeXBlO1xufTtcbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlRGlhbG9nUGFyYW1ldGVyID0ge1xuXHRjdXN0b21NZXNzYWdlcz86IEN1c3RvbU1lc3NhZ2VbXTtcblx0aXNPcGVyYXRpb25EaWFsb2dPcGVuPzogYm9vbGVhbjtcblx0Y29udGV4dD86IENvbnRleHQ7XG5cdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW47XG5cdGNvbnRyb2w/OiBDb250cm9sO1xuXHRzQWN0aW9uTmFtZT86IHN0cmluZztcblx0YVNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdIHwgbnVsbDtcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHR1bkhvbGRLZXk/OiBzdHJpbmc7XG5cdG92ZXJyaWRlVUlEZWNpc2lvbj86IGJvb2xlYW47XG5cdHNob3dCb3VuZFN0YXRlTWVzc2FnZXM/OiBib29sZWFuO1xuXHRib3VuZEFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNob3dNZXNzYWdlc1BhcmFtZXRlcnMgPSBTaG93TWVzc2FnZURpYWxvZ1BhcmFtZXRlciAmIHtcblx0bWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcblx0c2hlbGxCYWNrPzogRnVuY3Rpb24gfCBib29sZWFuO1xuXHRpc0RhdGFSZWNlaXZlZEVycm9yPzogYm9vbGVhbjtcblx0aXNJbml0aWFsTG9hZDUwM0Vycm9yPzogYm9vbGVhbjtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbi8qKlxuICpcbiAqIERlZmluZXMgdGhlIG1lc3NhZ2UgZGV0YWlsIHJlbGV2YW50IGZvciB0aGUgTWVzc2FnZUJ1dHRvbiBidWlsZGluZyBibG9jayB0byBkaXNwbGF5IGEgcG9wb3Zlci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZURldGFpbCA9IHtcblx0bWVzc2FnZTogTWVzc2FnZTtcblx0Z3JvdXBOYW1lPzogc3RyaW5nO1xuXHRhY3RpdmVUaXRsZUhhbmRsZXI/OiBGdW5jdGlvbjtcbn07XG5cbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBtZXNzYWdlIGhhbmRsaW5nLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQGV4cGVyaW1lbnRhbCBBcyBvZiB2ZXJzaW9uIDEuOTAuMFxuICogQHNpbmNlIDEuOTAuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5NZXNzYWdlSGFuZGxlclwiKVxuY2xhc3MgTWVzc2FnZUhhbmRsZXIgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBzdHJpY3RXYXJuaW5nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJvdGVjdGVkIGhvbGRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdHByaXZhdGUgaG9sZE1zZ3NUb1Nob3cgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiLCB1bmRlZmluZWQpO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIsIFByb21pc2UucmVzb2x2ZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIHdhcm5pbmcgbWVzc2FnZXMgdG8gdGhlIG1lc3NhZ2UgaGFuZGxlci5cblx0ICogQHBhcmFtIGFNZXNzYWdlcyBUaGUgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgdG8gYmUgYWRkZWRcblx0ICovXG5cdGFkZFdhcm5pbmdNZXNzYWdlc1RvTWVzc2FnZUhhbmRsZXIoYU1lc3NhZ2VzOiBNZXNzYWdlW10pOiB2b2lkIHtcblx0XHR0aGlzLnN0cmljdFdhcm5pbmdNZXNzYWdlcyA9IHRoaXMuc3RyaWN0V2FybmluZ01lc3NhZ2VzLmNvbmNhdChhTWVzc2FnZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBtZXNzYWdlIGlzIGEgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZSB0aGF0IHdhcyByZWNlaXZlZCBwcmV2aW91c2x5LlxuXHQgKiBAcGFyYW0gb01lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBpcyBhIHN0cmljdCB3YXJuaW5nIG1lc3NhZ2Vcblx0ICovXG5cdGlzU3RyaWN0V2FybmluZ01lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMuZmluZCgobWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0Q29kZSgpID09PSBvTWVzc2FnZS5nZXRDb2RlKCkgJiZcblx0XHRcdFx0XHRtZXNzYWdlLmdldE1lc3NhZ2UoKSA9PT0gb01lc3NhZ2UuZ2V0TWVzc2FnZSgpICYmXG5cdFx0XHRcdFx0bWVzc2FnZS5nZXRUeXBlKCkgPT09IG9NZXNzYWdlLmdldFR5cGUoKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSA9PT0gb01lc3NhZ2UuZ2V0RGVzY3JpcHRpb25VcmwoKSAmJlxuXHRcdFx0XHRcdGRlZXBFcXVhbChtZXNzYWdlLmdldFRhcmdldHMoKSwgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpKSAmJlxuXHRcdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSBvTWVzc2FnZS5nZXRQZXJzaXN0ZW50KClcblx0XHRcdFx0KTtcblx0XHRcdH0pICE9PSB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBhbGwgc3RyaWN0IHdhcm5pbmcgbWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBoYW5kbGVyLlxuXHQgKi9cblx0Y2xlYXJTdHJpY3RXYXJuaW5nTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5zdHJpY3RXYXJuaW5nTWVzc2FnZXMgPSBbXTtcblx0fVxuXG5cdGZpbHRlckVycm9yTWVzc2FnZXMobWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkfS5cblx0ICpcblx0ICogSWYgdGhlIGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biB0byB0aGUgdXNlciB3aXRoIGEgZGlmZmVyZW50IGNvbnRyb2wgbGlrZSB0aGUgKFRPRE86TGluaykgTWVzc2FnZUJ1dHRvblxuXHQgKiB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgb3ZlcnJpZGRlbi5cblx0ICogQHJldHVybnMgRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBib3VuZCBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGRpYWxvZy5cblx0ICpcblx0ICogRm9yIHRoZSBvYmplY3QgcGFnZSBpZiB0aGUgYm91bmQgbWVzc2FnZXMgYXJlIHNob3duIGluIHRoZSBtZXNzYWdlIHN0cmlwLCB0aGVuIHJlbW92ZSB0aGF0IGZyb20gdGhlIGRpYWxvZyB0byBhdm9pZCBkdXBsaWNhdGUgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIE9ubHkgcmVtb3ZlIHRoZSBtZXNzYWdlcyBpZiBtb3JlIHRoYW4gb25lIG1lc3NhZ2UgaXMgcHJlc2VudCBpbiB0aGUgbWVzc2FnZSBtb2RlbC5cblx0ICogQHBhcmFtIHRyYW5zaXRpb25NZXNzYWdlcyBUaGUgbWVzc2FnZXMgdGhhdCBhcmUgc2hvd24gaW4gdGhlIG1lc3NhZ2UgZGlhbG9nLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGJvdW5kIG1lc3NhZ2VzIHdoaWNoIHNob3VsZCBiZSBzaG93biBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0ZmlsdGVyQ29udGV4dEJvdW5kTWVzc2FnZXModHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlW10sIGNvbnRleHQ6IENvbnRleHQpOiBNZXNzYWdlW10ge1xuXHRcdHJldHVybiB0cmFuc2l0aW9uTWVzc2FnZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIGNvbnN1bWVyIG9mIGEgbWVzc2FnZSBidXR0b24gQkIgdG8gZGVjaWRlIHdoaWNoIGJvdW5kIG1lc3NhZ2VzIHNob3VsZCBiZSBzaG93biBhbmQgaG93LlxuXHQgKlxuXHQgKiBUaGlzIGhvb2sgaXMgY2FsbGVkIHdoZW4gdGhlIG1lc3NhZ2UgYnV0dG9uIEJCIGRldGVjdHMgYSBjaGFuZ2UgaW4gdGhlIG1lc3NhZ2UgbW9kZWwuXG5cdCAqIFRoZSBob29rcyBhbGxvd3MgdG8gZGVmaW5lIGJlaGF2aW91ciBmb3IgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgYnV0dG9uIEJCLlxuXHQgKlxuXHQgKiBDb25zdW1lcnMgd2lsbCBiZSBhYmxlIHRvIGRvIHRoZSBmb2xsb3dpbmcgd2l0aCB0aGlzIGhvb2suXG5cdCAqXG5cdCAqIDEuIEZpbHRlciBvdXQgbWVzc2FnZXMgc28gdGhhdCB0aGV5IGFyZSBub3Qgc2hvd24gb24gdGhlIG1lc3NhZ2UgYnV0dG9uLlxuXHQgKiAyLiBncm91cCB0aGUgbWVzc2FnZXMgYmFzZWQgb24gdGhlaXIgVUkuXG5cdCAqIDMuIHByb3ZpZGUgYSBwcmVzc2VyIGhhbmRsZXIgaW5jYXNlIHRoZSBtZXNzYWdlIHNob3VsZCBzaG93IGFzIGEgbGluay5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscyBPYmplY3QgY29udGFpbmluZyB0aGUgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBtZXNzYWdlLlxuXHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzLm1lc3NhZ2UgVGhlIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbC5JZGVhbGx5LCBpdCBtdXN0IG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cblx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscy5ncm91cE5hbWUgVGhlIGdyb3VwIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBfbWVzc2FnZURldGFpbHMuYWN0aXZlVGl0bGVIYW5kbGVyIEZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY2xpY2sgZXZlbnQgb24gYSBtZXNzYWdlIGluIHRoZSBNZXNzYWdlQnV0dG9uIGJ1aWxkaW5nIGJsb2NrLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBtdXN0IGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC5cblx0ICogQHB1YmxpY1xuXHQgKiBAZXhwZXJpbWVudGFsXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoXCJBZnRlckFzeW5jXCIpXG5cdGFzeW5jIGJlZm9yZVNob3dNZXNzYWdlQnV0dG9uKF9tZXNzYWdlRGV0YWlsczogTWVzc2FnZURldGFpbFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIHRvIGhvbGQgbWVzc2FnZXMgdW5pdGwgYSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuXHQgKlxuXHQgKiBUaGUgY2FsbGVyIGNhbiByZWdpc3RlciB0byBob2xkIHRoZSBtZXNzYWdlIGhhbmRsZXIgZnJvbSBzaG93aW5nIG1lc3NhZ2VzIHVudGlsIHRoZSBjYWxsZXIncyBwcm9jZXNzZXMgYXJlIGNvbXBsZXRlZC5cblx0ICogT24gcmVnaXN0ZXJpbmcgdGhlIGNhbGxlciBpcyByZXR1cm5lZCBhIHVuaXF1ZSBrZXkuXG5cdCAqIFRoZSBtZXNzYWdlcyB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgVUkgd2l0aCBzdWJzZXF1ZW50ICdzaG93TWVzc2FnZURpYWxvZygpJyBjYWxscy5cblx0ICogVGhlIGNhbGxlciBuZWVkcyB0byB1c2UgJ3Nob3dNZXNzYWdlRGlhbG9nKDxrZXk+KScgYXQgdGhlIGVuZCBvZiBhbGwgaGlzIHByb2Nlc3NlcyB0byBzaG93IHRoZSBtZXNzYWdlcyBpbiB0aGUgVUkuXG5cdCAqXG5cdCAqIElmIG11bHRpcGxlIG93bmVycyByZWdpc3RlciBzaW11bHRhbmVvdXNseSwgdGhlbiBtZXNzYWdlcyBhcmUgc2hvd24gaW4gdGhlIFVJIG9ubHkgYWZ0ZXIgJ3Nob3dNZXNzYWdlRGlhbG9nKDxyZXNwZWN0aXZlX2tleT4pJyBpcyBjYWxsZWQgYnkgYWxsIHRoZSBwcm9jZXNzZXMnIG93bmVycy5cblx0ICogQHBhcmFtIGtleSBVbmlxdWUgaWRlbnRpZmllciB0byB1c2UsIElmIG5vdCBwcm92aWRlZCwgYSBVSUQgd291bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCB0byByZWdpc3Rlci5cblx0ICogQHJldHVybnMgVW5pcXVlIEtleSB0byBiZSB1c2VkIGJ5IHRoZSBjYWxsZXIgdG8gc2hvdyBtZXNzYWdlcyBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUuXG5cdCAqL1xuXHRyZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGtleT86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdW5pcXVlS2V5ID0ga2V5ID8/IHVpZCgpO1xuXHRcdGlmICghdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyh1bmlxdWVLZXkpKSB7XG5cdFx0XHR0aGlzLmhvbGRLZXlzLnB1c2godW5pcXVlS2V5KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuaXF1ZUtleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBhbGwgZXhpc3RpbmcgaGVsZCBrZXlzLlxuXHQgKi9cblx0cmVzZXRIb2xkS2V5cygpOiB2b2lkIHtcblx0XHR0aGlzLmhvbGRLZXlzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSBtZXNzYWdlIGRpYWxvZyB3aXRoIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgdGhlcmUgYXJlIGFueS5cblx0ICogVGhlIG1lc3NhZ2UgZGlhbG9nIGlzIHNob3duIGFzIGEgbW9kYWwgZGlhbG9nLiBPbmNlIHRoZSB1c2VyIGNvbmZpcm1zIHRoZSBkaWFsb2csIGFsbCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdCAqIGFyZSByZW1vdmVkIGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWVzc2FnZSwgYSBsaXN0IG9mIG1lc3NhZ2VzIGlzIHNob3duLiBUaGUgdXNlclxuXHQgKiBjYW4gZmlsdGVyIG9uIG1lc3NhZ2UgdHlwZXMgYW5kIGNhbiBkaXNwbGF5IGRldGFpbHMgYXMgd2VsbCBhcyB0aGUgbG9uZyB0ZXh0LiBJZiB0aGVyZSBpcyBvbmUgbWVzc2FnZSxcblx0ICogdGhlIGRpYWxvZyBpbW1lZGlhdGVseSBzaG93cyB0aGUgZGV0YWlscyBvZiB0aGUgbWVzc2FnZS4gSWYgdGhlcmUgaXMganVzdCBvbmUgc3VjY2VzcyBtZXNzYWdlLCBhIG1lc3NhZ2Vcblx0ICogdG9hc3QgaXMgc2hvd24gaW5zdGVhZC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFBSSVZBVEVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIGRpYWxvZy4gSWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzXG5cdCAqIHRvIGJlIHNob3duLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbW1lZGlhdGVseVxuXHQgKiBAcHVibGljXG5cdCAqIEBleHBlcmltZW50YWwgQXMgb2YgdmVyc2lvbiAxLjkwLjBcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHNob3dNZXNzYWdlRGlhbG9nKG1QYXJhbWV0ZXJzPzogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdC8vIHJlbW92ZSBzdHJpY3Qgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsIGJlZm9yZSBzaG93aW5nIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdGF3YWl0IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIpO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBkdXBsaWNhdGVXYXJuaW5nTWVzc2FnZSA9IG1lc3NhZ2VzSW5Nb2RlbC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmlzU3RyaWN0V2FybmluZ01lc3NhZ2UobWVzc2FnZSk7XG5cdFx0fSk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGR1cGxpY2F0ZVdhcm5pbmdNZXNzYWdlKTtcblxuXHRcdGNvbnN0IGN1c3RvbU1lc3NhZ2VzID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgPyBtUGFyYW1ldGVycy5jdXN0b21NZXNzYWdlcyA6IHVuZGVmaW5lZCxcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgdmlld1R5cGUgPSAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIE9iamVjdFdpdGhDb252ZXJ0ZXJUeXBlKS5jb252ZXJ0ZXJUeXBlO1xuXHRcdC8vIHNldCBpc0FjdGlvblBhcmFtZXRlckRpYWxvZyBvcGVuIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRvIGRlY2lkZSB3aGV0aGVyIG1lc3NhZ2UgZGlhbG9nIHNob3VsZCBvcGVuIG9yIG5vdFxuXHRcdGlmIChtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5pc09wZXJhdGlvbkRpYWxvZ09wZW4gJiYgb09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b09QSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzT3BlcmF0aW9uRGlhbG9nT3BlblwiLCB0cnVlKTtcblx0XHR9XG5cdFx0Y29uc3QgYlNob3dCb3VuZE1lc3NhZ2VzID0gdGhpcy5nZXRTaG93Qm91bmRNZXNzYWdlc0luTWVzc2FnZURpYWxvZygpO1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IChcblx0XHRcdG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmNvbnRleHQgPyBtUGFyYW1ldGVycy5jb250ZXh0IDogdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKVxuXHRcdCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9jb25zdCBiRXRhZ01lc3NhZ2UgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5iSGFzRXRhZ01lc3NhZ2U7XG5cdFx0Ly8gcmVzZXQgIGlzT3BlcmF0aW9uRGlhbG9nT3BlblxuXHRcdC8vIGNhbm5vdCBkbyB0aGlzIG9wZXJhdGlvbnMuanMgc2luY2UgaXQgaXMgbm90IGF3YXJlIG9mIHRoZSB2aWV3XG5cdFx0aWYgKG9PUEludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9PUEludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoXCJpc09wZXJhdGlvbkRpYWxvZ09wZW5cIiwgZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oXG5cdFx0XHRmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIsIHJlc29sdmU6ICgpID0+IHZvaWQsIHJlamVjdDogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBncmVhdCBBUEkgLSB3aWxsIGJlIGNoYW5nZWQgbGF0ZXJcblx0XHRcdFx0XHRcdHRoaXMucHJvY2Vzc0FuZFNob3dNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YlNob3dCb3VuZE1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21NZXNzYWdlcyA/PyBbXSxcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSxcblx0XHRcdFx0XHRcdFx0cmVqZWN0LFxuXHRcdFx0XHRcdFx0XHR2aWV3VHlwZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHRcdFx0MFxuXHRcdFx0XHQpO1xuXHRcdFx0fS5iaW5kKHRoaXMpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzIHRoZSBtZXNzYWdlcyBhbmQgc2hvdyB0aGVtIHdoZW4gZXhwZWN0ZWQuXG5cdCAqXG5cdCAqIFdlIGZpbHRlciB0aGUgbWVzc2FnZXMgdG8gc2hvdyBhbmQgaG9sZCB0aGVtIHVudGlsIGFsbCByZWdpc3RlcmVkIHByb2Nlc3NlcyBjYWxsIHNob3dNZXNzYWdlRGlhbG9nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBoZWxkIGtleXMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gc2hvdyBtZXNzYWdlIGRpYWxvZy5cblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmQgY29udGV4dCBvZiB0aGUgcGFnZS5cblx0ICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyBTaG91bGQgYm91bmQgbWVzc2FnZXMgYmUgc2hvd24uXG5cdCAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkLlxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdWNjZXNzIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gZmFpbHVyZSBGYWlsdXJlIGNhbGxiYWNrLlxuXHQgKiBAcGFyYW0gdmlld1R5cGUgVmlldyB0eXBlLCBsaXN0IHJlcG9ydCBvciBvYmplY3QgcGFnZS5cblx0ICovXG5cdHByb2Nlc3NBbmRTaG93TWVzc2FnZXMoXG5cdFx0cGFyYW1ldGVyczogU2hvd01lc3NhZ2VEaWFsb2dQYXJhbWV0ZXIsXG5cdFx0YmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogYm9vbGVhbixcblx0XHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdLFxuXHRcdHN1Y2Nlc3M6ICgpID0+IHZvaWQsXG5cdFx0ZmFpbHVyZTogKCkgPT4gdm9pZCxcblx0XHR2aWV3VHlwZT86IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCB7XG5cdFx0XHRjb25jdXJyZW50RWRpdEZsYWcsXG5cdFx0XHRjb250cm9sLFxuXHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlLFxuXHRcdFx0dW5Ib2xkS2V5LFxuXHRcdFx0aXNPcGVyYXRpb25EaWFsb2dPcGVuOiBmb3JjZVNob3dVSUVsZW1lbnQgPSBmYWxzZSxcblx0XHRcdG92ZXJyaWRlVUlEZWNpc2lvbixcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXNcblx0XHR9ID0gcGFyYW1ldGVycztcblx0XHR0aGlzLmhvbGRNc2dzVG9TaG93ID0gdHJ1ZTtcblxuXHRcdC8vIENyZWF0ZSBhIFVJIGRlY2lzaW9uLlxuXHRcdGNvbnN0IG5ld1VJRGVjaXNpb25zID0gbWVzc2FnZUhhbmRsaW5nLmdldFVJRGVjaXNpb25zKFxuXHRcdFx0Y3VzdG9tTWVzc2FnZXMsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0XHRcdGNvbmN1cnJlbnRFZGl0RmxhZyxcblx0XHRcdGNvbnRyb2wsXG5cdFx0XHRzQWN0aW9uTmFtZSxcblx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2UsXG5cdFx0XHR2aWV3VHlwZSxcblx0XHRcdHNob3dCb3VuZFN0YXRlTWVzc2FnZXMsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0Z2V0UmVzb3VyY2VNb2RlbCh0aGlzLmdldFZpZXcoKSksXG5cdFx0XHR0aGlzXG5cdFx0KTtcblx0XHR0aGlzLnVwZGF0ZVVJRGVjaXNpb25zKG5ld1VJRGVjaXNpb25zLCBvdmVycmlkZVVJRGVjaXNpb24pO1xuXHRcdHRoaXMucmVtb3ZlSG9sZEtleSh1bkhvbGRLZXkgPz8gY29udHJvbD8uZ2V0SWQoKSk7XG5cdFx0Y29uc3QgdWlFbGVtZW50SXNBdmFpbGFibGUgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRWxlbWVudElzQXZhaWxhYmxlXCIpO1xuXHRcdCh0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpPy5zZXRQcm9wZXJ0eShcblx0XHRcdFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiLFxuXHRcdFx0dWlFbGVtZW50SXNBdmFpbGFibGUudGhlbihcblx0XHRcdFx0YXN5bmMgZnVuY3Rpb24gKHRoaXM6IE1lc3NhZ2VIYW5kbGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2hvd01lc3NhZ2VzV2l0aENvbmR0aW9ucyhmb3JjZVNob3dVSUVsZW1lbnQsIHN1Y2Nlc3MsIGZhaWx1cmUpO1xuXHRcdFx0XHR9LmJpbmQodGhpcylcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3cgTWVzc2FnZXMgaW4gdGhlIFVJIGJhc2VkIG9uIGNvbmRpdGlvbnMuXG5cdCAqIEBwYXJhbSBmb3JjZVNob3dVSUVsZW1lbnRcblx0ICogQHBhcmFtIHN1Y2Nlc3Ncblx0ICogQHBhcmFtIGZhaWx1cmVcblx0ICovXG5cdGFzeW5jIHNob3dNZXNzYWdlc1dpdGhDb25kdGlvbnMoXG5cdFx0Zm9yY2VTaG93VUlFbGVtZW50ID0gZmFsc2UsXG5cdFx0c3VjY2Vzcz86IChyZXQ/OiB1bmtub3duKSA9PiB2b2lkLFxuXHRcdGZhaWx1cmU/OiAoZXJyPzogdW5rbm93bikgPT4gdm9pZFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaG93VUlFbGVtZW50ID0gZm9yY2VTaG93VUlFbGVtZW50IHx8IHRoaXMuY2hlY2tUb1Nob3dVSUVsZW1lbnQoKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdGlmIChzaG93VUlFbGVtZW50ICYmIGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIikpIHtcblx0XHRcdC8vIFNob3cgVUkgZWxlbWVudCBmb3IgdGhlIHByZXNlbnQgZGVjaXNpb24gYW5kIGNsZWFyIHRoZSBkZWNpc2lvbi5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHJldCA9IGF3YWl0IG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZXNJblVJKGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIikpO1xuXHRcdFx0XHRzdWNjZXNzPy4ocmV0KTtcblx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZFIDogVjQgOiBNZXNzYWdlSGFuZGxlciA6IEVycm9yIG9uIHRyeWluZyB0byBzaG93IFVJIGVsZW1lbnQ6ICR7ZXJyfWApO1xuXHRcdFx0XHRmYWlsdXJlPy4oZXJyKTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIiwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9tZXNzYWdlVUlEZWNpc2lvblwiLCB1bmRlZmluZWQpO1xuXHRcdFx0dGhpcy5jbGVhclN0cmljdFdhcm5pbmdNZXNzYWdlcygpO1xuXHRcdFx0dGhpcy5ob2xkTXNnc1RvU2hvdyA9IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuaW5mbyhcIkZFIDogVjQgOiBNZXNzYWdlSGFuZGxlciA6IEhvbGRpbmcgbWVzc2FnZXMgdW50aWwgYSByZWdpc3RlcmVkIHByb2Nlc3MgXCIpO1xuXHRcdFx0c3VjY2Vzcz8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFlvdSBjYW4gcmVtb3ZlIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbCB3aXRoIHRoaXMgbWV0aG9kLlxuXHQgKiBXaXRoIGV2ZXJ5IHVzZXIgaW50ZXJhY3Rpb24gdGhhdCBjYXVzZXMgc2VydmVyIGNvbW11bmljYXRpb24gKGxpa2UgY2xpY2tpbmcgb24gYW4gYWN0aW9uLCBjaGFuZ2luZyBkYXRhKSxcblx0ICogdGhpcyBtZXRob2QgcmVtb3ZlcyB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIG1vZGVsLlxuXHQgKiBAcGFyYW0gW2tlZXBCb3VuZE1lc3NhZ2VdIENoZWNrcyBpZiB0aGUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcmUgbm90IHRvIGJlIHJlbW92ZWRcblx0ICogQHBhcmFtIGtlZXBVbmJvdW5kTWVzc2FnZVxuXHQgKiBAcGFyYW0gc1BhdGhUb0JlUmVtb3ZlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhrZWVwQm91bmRNZXNzYWdlPzogYm9vbGVhbiwga2VlcFVuYm91bmRNZXNzYWdlPzogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICgha2VlcEJvdW5kTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQpO1xuXHRcdH1cblx0XHRpZiAoIWtlZXBVbmJvdW5kTWVzc2FnZSkge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRoYXQgcmV0dXJucyBhbGwgdGhlIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGhhbmRsZSB0aGUgbmF2aWdhdGlvbiB0byB0aGUgZXJyb3IgcGFnZS5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJhbWV0ZXJzIG5lY2Vzc2FyeSBmb3IgdGhlIG5hdmlnYXRpb24gdG8gdGhlIGVycm9yIHBhZ2Vcblx0ICovXG5cdF9jaGVja05hdmlnYXRpb25Ub0Vycm9yUGFnZShtUGFyYW1ldGVycz86IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVBhcmFtZXRlcik6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYVVuYm91bmRNZXNzYWdlcyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcygpO1xuXHRcdGNvbnN0IGJTaG93Qm91bmRUcmFuc2l0aW9uTWVzc2FnZXMgPSB0aGlzLmdldFNob3dCb3VuZE1lc3NhZ2VzSW5NZXNzYWdlRGlhbG9nKCk7XG5cdFx0Y29uc3QgYUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzID0gYlNob3dCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyA/IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSA6IFtdO1xuXHRcdGNvbnN0IGFDdXN0b21NZXNzYWdlcyA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmN1c3RvbU1lc3NhZ2VzID8gbVBhcmFtZXRlcnMuY3VzdG9tTWVzc2FnZXMgOiBbXTtcblx0XHRjb25zdCBiSXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmlzU3RpY2t5RWRpdE1vZGUodGhpcy5iYXNlLmdldFZpZXcoKSk7XG5cdFx0bGV0IG1NZXNzYWdlUGFnZVBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIFRPRE86IFN0aWNrIG1vZGUgY2hlY2sgaXMgb2theSBhcyBsb25nIGFzIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpcyB1c2VkIHdpdGggc2FwLmZlLmNvcmUgYW5kIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudC5cblx0XHQvLyBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gcHJvdmlkZSBhbiBleHRlbnNpb24gdG8gdGhlIGNvbnN1bWVyIG9mIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiB0byBwcm92aWRlIHRoaXMgdmFsdWUuXG5cblx0XHQvLyBUaGUgbWVzc2FnZSBwYWdlIGNhbiBvbmx5IHNob3cgMSBtZXNzYWdlIHRvZGF5LCBzbyB3ZSBuYXZpZ2F0ZSB0byBpdCB3aGVuIDpcblx0XHQvLyAxLiBUaGVyZSBhcmUgbm8gYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyB0byBzaG93LFxuXHRcdC8vIDIuIFRoZXJlIGFyZSBubyBjdXN0b20gbWVzc2FnZXMgdG8gc2hvdywgJlxuXHRcdC8vIDMuIFRoZXJlIGlzIGV4YWN0bHkgMSB1bmJvdW5kIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2UgbW9kZWwgd2l0aCBzdGF0dXNDb2RlPTUwMyBhbmQgcmV0cnktQWZ0ZXIgYXZhaWxhYmxlXG5cdFx0Ly8gNC4gcmV0cnlBZnRlciBpcyBncmVhdGVyIHRoYW4gMTIwIHNlY29uZHNcblx0XHQvL1xuXHRcdC8vIEluIEFkZGl0aW9uLCBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBhIHN0aWNreSBzZXNzaW9uIHdpbGwgZGVzdHJveSB0aGUgc2Vzc2lvbiBzbyB3ZSBkbyBub3QgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlIGZvciBub3cuXG5cdFx0Ly8gVE9ETzogY2hlY2sgaWYgbmF2aWdhdGlvbiBzaG91bGQgYmUgZG9uZSBpbiBzdGlja3kgZWRpdCBtb2RlLlxuXHRcdGlmIChtUGFyYW1ldGVycz8uaXNEYXRhUmVjZWl2ZWRFcnJvciA9PT0gdHJ1ZSkge1xuXHRcdFx0bU1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0dGl0bGU6IG1QYXJhbWV0ZXJzLnRpdGxlLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogbVBhcmFtZXRlcnMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdG5hdmlnYXRlQmFja1RvT3JpZ2luOiB0cnVlLFxuXHRcdFx0XHRlcnJvclR5cGU6IFwiUGFnZU5vdEZvdW5kXCJcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdCFiSXNTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0IWFCb3VuZFRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGggJiZcblx0XHRcdCFhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoICYmXG5cdFx0XHQoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEgfHwgbVBhcmFtZXRlcnM/LmlzSW5pdGlhbExvYWQ1MDNFcnJvciA9PT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlID0gYVVuYm91bmRNZXNzYWdlc1swXTtcblx0XHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzPy5odHRwU3RhdHVzID09PSA1MDMpIHtcblx0XHRcdFx0bU1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2dldEhUVFA1MDNNZXNzYWdlUGFyYW1ldGVycyhvTWVzc2FnZSwgb1RlY2huaWNhbERldGFpbHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbU1lc3NhZ2VQYWdlUGFyYW1ldGVycztcblx0fVxuXG5cdF9nZXRIVFRQNTAzTWVzc2FnZVBhcmFtZXRlcnMobWVzc2FnZTogTWVzc2FnZSwgdGVjaG5pY2FsRGV0YWlsczogTWVzc2FnZVRlY2huaWNhbERldGFpbHMpOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBtZXNzYWdlUGFnZVBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB8IHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IHNlY29uZHNCZWZvcmVSZXRyeSA9XG5cdFx0XHR0ZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIgIT09IHVuZGVmaW5lZCA/IHRoaXMuX2dldFNlY29uZHNCZWZvcmVSZXRyeUFmdGVyKHRlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikgOiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2Vjb25kc0JlZm9yZVJldHJ5ID09PSB1bmRlZmluZWQgfHwgc2Vjb25kc0JlZm9yZVJldHJ5ID4gMTIwKSB7XG5cdFx0XHRjb25zdCByZXRyeUFmdGVyTWVzc2FnZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRSZXRyeUFmdGVyTWVzc2FnZShtZXNzYWdlKTtcblx0XHRcdG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJldHJ5QWZ0ZXJNZXNzYWdlID8gYCR7cmV0cnlBZnRlck1lc3NhZ2V9ICR7bWVzc2FnZS5nZXRNZXNzYWdlKCl9YCA6IG1lc3NhZ2UuZ2V0TWVzc2FnZSgpLFxuXHRcdFx0XHRuYXZpZ2F0ZUJhY2tUb09yaWdpbjogdHJ1ZSxcblx0XHRcdFx0ZXJyb3JUeXBlOiBcIlVuYWJsZVRvTG9hZFwiXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiBtZXNzYWdlUGFnZVBhcmFtZXRlcnM7XG5cdH1cblxuXHRfZ2V0U2Vjb25kc0JlZm9yZVJldHJ5QWZ0ZXIoZFJldHJ5QWZ0ZXI6IERhdGUpOiBudW1iZXIge1xuXHRcdGNvbnN0IGRDdXJyZW50RGF0ZVRpbWUgPSBuZXcgRGF0ZSgpLFxuXHRcdFx0aUN1cnJlbnREYXRlVGltZUluTWlsbGlTZWNvbmRzID0gZEN1cnJlbnREYXRlVGltZS5nZXRUaW1lKCksXG5cdFx0XHRpUmV0cnlBZnRlckRhdGVUaW1lSW5NaWxsaVNlY29uZHMgPSBkUmV0cnlBZnRlci5nZXRUaW1lKCksXG5cdFx0XHRpU2Vjb25kc0JlZm9yZVJldHJ5ID0gKGlSZXRyeUFmdGVyRGF0ZVRpbWVJbk1pbGxpU2Vjb25kcyAtIGlDdXJyZW50RGF0ZVRpbWVJbk1pbGxpU2Vjb25kcykgLyAxMDAwO1xuXHRcdHJldHVybiBpU2Vjb25kc0JlZm9yZVJldHJ5O1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgZXhpc3RpbmcgVUkgZGVjaXNpb25zIHdpdGggdGhlIG5ldyBvbmVzLlxuXHQgKiBAcGFyYW0gbmV3VUlEZWNpc2lvbnMgSW4gY29tbWluZyBVSSBkZWNpc2lvbnMuXG5cdCAqIEBwYXJhbSBvdmVycmlkZVVJRGVjaXNpb24gT3ZlcnJpZGUgdGhlIGV4aXN0aW5nIFVJIGRlY2lzaW9uIHRvIHNob3cgbWVzc2FnZXMgd2l0aCB0aGUgbmV3IG9uZS5cblx0ICpcblx0ICogJ292ZXJyaWRlVUlEZWNpc2lvbicsIFRoaXMgd291bGQgYmUgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gcGFnZSBjb250ZXh0IGFuZCB0aGUgcGFyYW10ZXJzIHRvIGNyZWF0ZSB0aGUgbmV3IFVJIGRlY2lzaW9uIGFyZSBkaWZmZXJlbnQuXG5cdCAqL1xuXHR1cGRhdGVVSURlY2lzaW9ucyhuZXdVSURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zLCBvdmVycmlkZVVJRGVjaXNpb24gPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Y29uc3Qgb2xkVUlEZWNpc2lvbnMgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSURlY2lzaW9uXCIpIGFzIE1lc3NhZ2VVSURlY2lzaW9ucztcblx0XHRsZXQgYWxsTWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdGxldCBtZXJnZWRVSURlY2lzaW9uO1xuXHRcdGlmIChvbGRVSURlY2lzaW9ucyAmJiBvdmVycmlkZVVJRGVjaXNpb24gPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9sZFVJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRuZXdVSURlY2lzaW9ucy5tZXNzYWdlc1RvU2hvdy5sZW5ndGggPT09IDEgJiZcblx0XHRcdFx0b2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3dbMF0uZ2V0Q29kZSgpID09PSBcIkNfQ09NTU9OX1NVQ0NFU1NfTUVTU0FHRVwiICYmXG5cdFx0XHRcdG5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93WzBdLmdldENvZGUoKSA9PT0gXCJDX0NPTU1PTl9TVUNDRVNTX01FU1NBR0VcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIGJvdGggYXJlIGdlbmVyaWMgc3VjY2VzcyBtZXNzYWdlcywgdGhlbiB3ZSBzaG93IG9ubHkgb25lIG1lc3NhZ2UuXG5cdFx0XHRcdGFsbE1lc3NhZ2VzVG9TaG93ID0gb2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3c7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhbGxNZXNzYWdlc1RvU2hvdyA9IEFycmF5LmZyb20obmV3IFNldChbLi4ub2xkVUlEZWNpc2lvbnMubWVzc2FnZXNUb1Nob3csIC4uLm5ld1VJRGVjaXNpb25zLm1lc3NhZ2VzVG9TaG93XSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZWxlbWVudHMgPSBbb2xkVUlEZWNpc2lvbnMudWlFbGVtZW50VG9Vc2UsIG5ld1VJRGVjaXNpb25zLnVpRWxlbWVudFRvVXNlXTtcblx0XHRcdC8vIERlZmF1bHQgd2Ugc2hvdyBkaWFsb2dcblx0XHRcdGxldCB1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50ID0gYWxsTWVzc2FnZXNUb1Nob3cubGVuZ3RoID4gMCA/IFwiRGlhbG9nXCIgOiBcIk5vbmVcIjtcblxuXHRcdFx0aWYgKGFsbE1lc3NhZ2VzVG9TaG93Lmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHQvLyBTaW5nbGUgbWVzc2FnZSwgd2UgY2hlY2sgZm9yIHNwZWNpZmljIFVJIEVsZW1lbnQgdG8gdXNlLlxuXHRcdFx0XHRpZiAoZWxlbWVudHMuaW5jbHVkZXMoXCJUb2FzdFwiKSkge1xuXHRcdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJUb2FzdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnRzLmluY2x1ZGVzKFwiQm94XCIpKSB7XG5cdFx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkJveFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1lcmdlZFVJRGVjaXNpb24gPSB7XG5cdFx0XHRcdG1lc3NhZ2VzVG9TaG93OiBhbGxNZXNzYWdlc1RvU2hvdyxcblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UsXG5cdFx0XHRcdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoOiBvbGRVSURlY2lzaW9ucy5jb250ZXh0TmVlZHNFdGFnUmVmcmVzaCB8fCBuZXdVSURlY2lzaW9ucy5jb250ZXh0TmVlZHNFdGFnUmVmcmVzaCxcblx0XHRcdFx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IG9sZFVJRGVjaXNpb25zLmNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIHx8IG5ld1VJRGVjaXNpb25zLmNvbnRhaW5zQm91bmRUcmFuc2l0aW9uXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZXJnZWRVSURlY2lzaW9uID0gbmV3VUlEZWNpc2lvbnM7XG5cdFx0fVxuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvbWVzc2FnZVVJRGVjaXNpb25cIiwgbWVyZ2VkVUlEZWNpc2lvbik7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIGhlbGQga2V5LlxuXHQgKiBAcGFyYW0gaW5LZXkgS2V5IHRvIHJlbW92ZS5cblx0ICovXG5cdHJlbW92ZUhvbGRLZXkoaW5LZXk/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoaW5LZXkgJiYgdGhpcy5ob2xkS2V5cy5pbmNsdWRlcyhpbktleSkpIHtcblx0XHRcdHRoaXMuaG9sZEtleXMuc3BsaWNlKHRoaXMuaG9sZEtleXMuaW5kZXhPZihpbktleSksIDEpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBVSSBFbGVtZW50IHdpdGggbWVzc2FnZXMgc2hvdWxkIGJlIHNob3duLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuXG5cdCAqL1xuXHRjaGVja1RvU2hvd1VJRWxlbWVudCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5ob2xkTXNnc1RvU2hvdyAmJiAodGhpcy5ob2xkS2V5cy5sZW5ndGggPiAwID8gZmFsc2UgOiB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb2xkIG1lc3NhZ2VzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIGNvbnRyb2xcblx0ICovXG5cdGhvbGRNZXNzYWdlc0ZvckNvbnRyb2woY29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdGNvbnN0IGlkZW50aWZpZXIgPSBjb250cm9sLmdldElkKCk7XG5cdFx0dGhpcy5yZWdpc3RlclRvSG9sZE1lc3NhZ2VzKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbGVhc2UgbWVzc2FnZSBob2xkIGJ5IGEgY29udHJvbC5cblx0ICogQHBhcmFtIGNvbnRyb2xcblx0ICovXG5cdGFzeW5jIHJlbGVhc2VIb2xkQnlDb250cm9sKGNvbnRyb2w/OiBDb250cm9sKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaWRlbnRpZmllciA9IGNvbnRyb2w/LmdldElkKCk7XG5cdFx0dGhpcy5yZW1vdmVIb2xkS2V5KGlkZW50aWZpZXIpO1xuXHRcdGNvbnN0IHVpRWxlbWVudElzQXZhaWxhYmxlID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiKTtcblx0XHQodGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKT8uc2V0UHJvcGVydHkoXG5cdFx0XHRcIi9tZXNzYWdlVUlFbGVtZW50SXNBdmFpbGFibGVcIixcblx0XHRcdHVpRWxlbWVudElzQXZhaWxhYmxlPy50aGVuKFxuXHRcdFx0XHRhc3luYyBmdW5jdGlvbiAodGhpczogTWVzc2FnZUhhbmRsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZXNXaXRoQ29uZHRpb25zKCk7XG5cdFx0XHRcdH0uYmluZCh0aGlzKVxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0YXdhaXQgdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL21lc3NhZ2VVSUVsZW1lbnRJc0F2YWlsYWJsZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIG1lc3NhZ2UgcGFnZSBvciBhIG1lc3NhZ2UgZGlhbG9nIGJhc2VkIG9uIHRoZSBtZXNzYWdlcyBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc11cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgdXNlciBjbG9zZXMgdGhlIG1lc3NhZ2UgZGlhbG9nIG9yIHdoZW4gbmF2aWdhdGlvbiB0byB0aGUgbWVzc2FnZSBwYWdlIGlzIGNvbXBsZXRlLiBJZiB0aGVyZSBhcmUgbm8gbWVzc2FnZXNcblx0ICogdG8gYmUgc2hvd24sIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIGltbWVkaWF0ZWx5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgc2hvd01lc3NhZ2VzKHBhcmFtZXRlcnM/OiBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbiB8IERpYWxvZz4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VQYWdlUGFyYW1ldGVycyA9IHRoaXMuX2NoZWNrTmF2aWdhdGlvblRvRXJyb3JQYWdlKHBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1lc3NhZ2VQYWdlUGFyYW1ldGVycykge1xuXHRcdFx0Ly8gbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0Ly8gaGFuZGxlciBiZWZvcmUgcGFnZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCwgZm9yIGV4YW1wbGUgdG8gY2xvc2UgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0XHRpZiAocGFyYW1ldGVycz8ubWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2spIHtcblx0XHRcdFx0cGFyYW1ldGVycy5tZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjaygpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlUGFnZVBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID0gIXBhcmFtZXRlcnM/LnNoZWxsQmFjaztcblx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHQvLyB3ZSBoYXZlIHRvIHNldCBhIHRpbWVvdXQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG1vc3QgcmVjZW50IG1lc3NhZ2VzXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGNsZWFyIGFsbCBob2xkIGtleXMgYXMgd2UgbmF2aWdhdGUgdG8gbWVzc2FnZSBwYWdlLlxuXHRcdFx0XHRcdHRoaXMucmVzZXRIb2xkS2V5cygpO1xuXG5cdFx0XHRcdFx0Ly8gVE9ETzogZ3JlYXQgQVBJIC0gd2lsbCBiZSBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRcdFx0dGhpcy5iYXNlLl9yb3V0aW5nXG5cdFx0XHRcdFx0XHQubmF2aWdhdGVUb01lc3NhZ2VQYWdlKFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5pc0RhdGFSZWNlaXZlZEVycm9yID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIilcblx0XHRcdFx0XHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5hdmlnYXRlIHRvIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRyZXR1cm4gdGhpcy5zaG93TWVzc2FnZURpYWxvZyhwYXJhbWV0ZXJzKTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsY0FBYyxJQUFBQyxJQUFBLEdBRG5CQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUMsS0FBQSxHQWNoRUMsY0FBYyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQXdEaEJDLGdCQUFnQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUNsQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLEVBQUFDLEtBQUEsR0FlckNMLGdCQUFnQixDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUNsQkosVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDLEVBQUFHLEtBQUEsR0F5QnJDQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCUCxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUFRLEtBQUEsR0E4Q3hCRixlQUFlLENBQUMsQ0FBQyxFQUFBRyxNQUFBLEdBQ2pCQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEdBd0poQkwsZUFBZSxDQUFDLENBQUMsRUFBQU0sTUFBQSxHQXVMakJOLGVBQWUsQ0FBQyxDQUFDLEVBQUFPLE1BQUEsR0FDakJILGNBQWMsQ0FBQyxDQUFDLEVBQUFqQixJQUFBLENBQUFxQixNQUFBLElBQUFDLE9BQUEsMEJBQUFDLG9CQUFBO0lBdGVqQixTQUFBeEIsZUFBQSxFQUFjO01BQUEsSUFBQXlCLEtBQUE7TUFDYkEsS0FBQSxHQUFBRCxvQkFBQSxDQUFBRSxJQUFBLEtBQU0sQ0FBQztNQUFDRCxLQUFBLENBVERFLHFCQUFxQixHQUFjLEVBQUU7TUFBQUYsS0FBQSxDQUluQ0csUUFBUSxHQUFhLEVB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
|
|
@@ -167,6 +167,23 @@ class MessageHandler extends ControllerExtension {
|
|
|
167
167
|
return true;
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
/**
|
|
171
|
+
* Determines whether or not bound messages should be removed from the dialog.
|
|
172
|
+
*
|
|
173
|
+
* For the object page if the bound messages are shown in the message strip, then remove that from the dialog to avoid duplicate messages.
|
|
174
|
+
*
|
|
175
|
+
* Only remove the messages if more than one message is present in the message model.
|
|
176
|
+
* @param transitionMessages The messages that are shown in the message dialog.
|
|
177
|
+
* @param context The context of the message dialog.
|
|
178
|
+
* @returns Returns the bound messages which should be shown in the message dialog.
|
|
179
|
+
*/
|
|
180
|
+
@privateExtension()
|
|
181
|
+
@extensible(OverrideExecution.Instead)
|
|
182
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
183
|
+
filterContextBoundMessages(transitionMessages: Message[], context: Context): Message[] {
|
|
184
|
+
return transitionMessages;
|
|
185
|
+
}
|
|
186
|
+
|
|
170
187
|
/**
|
|
171
188
|
* Allows consumer of a message button BB to decide which bound messages should be shown and how.
|
|
172
189
|
*
|
|
@@ -330,7 +347,8 @@ class MessageHandler extends ControllerExtension {
|
|
|
330
347
|
viewType,
|
|
331
348
|
showBoundStateMessages,
|
|
332
349
|
parameters,
|
|
333
|
-
getResourceModel(this.getView())
|
|
350
|
+
getResourceModel(this.getView()),
|
|
351
|
+
this
|
|
334
352
|
);
|
|
335
353
|
this.updateUIDecisions(newUIDecisions, overrideUIDecision);
|
|
336
354
|
this.removeHoldKey(unHoldKey ?? control?.getId());
|