@sapui5/sap.fe.test 1.101.1 → 1.102.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/CollaborationClient.js +77 -0
- package/src/sap/fe/test/CollaborationClient.ts +105 -0
- package/src/sap/fe/test/FeMocks.js +1 -1
- package/src/sap/fe/test/FeMocks.ts +6 -2
- package/src/sap/fe/test/JestTemplatingHelper.js +51 -22
- package/src/sap/fe/test/JestTemplatingHelper.ts +46 -19
- package/src/sap/fe/test/ListReport.js +7 -15
- package/src/sap/fe/test/LocationUtil.js +12 -16
- package/src/sap/fe/test/ObjectPage.js +38 -6
- package/src/sap/fe/test/Shell.js +94 -34
- package/src/sap/fe/test/TemplatePage.js +14 -0
- package/src/sap/fe/test/UI5MockHelper.js +99 -18
- package/src/sap/fe/test/UI5MockHelper.ts +81 -14
- package/src/sap/fe/test/api/CollaborationAPI.js +215 -0
- package/src/sap/fe/test/api/CollaborationAPI.ts +240 -0
- package/src/sap/fe/test/api/DialogMassEditActions.js +115 -0
- package/src/sap/fe/test/api/DialogMassEditAssertions.js +174 -0
- package/src/sap/fe/test/api/DialogType.js +11 -2
- package/src/sap/fe/test/api/HeaderAssertions.js +76 -41
- package/src/sap/fe/test/api/TableAPI.js +30 -34
- package/src/sap/fe/test/api/TableActions.js +1 -1
- package/src/sap/fe/test/api/TableAssertions.js +51 -46
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +161 -156
- package/src/sap/fe/test/builder/MdcTableBuilder.js +89 -12
- package/src/sap/fe/test/library.js +1 -1
- package/src/sap/fe/test/massEdit.js +0 -62
package/package.json
CHANGED
package/src/sap/fe/test/.library
CHANGED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
*/
|
|
5
|
+
sap.ui.define(["sap/fe/core/controllerextensions/collaboration/CollaborationCommon", "sap/fe/test/api/CollaborationAPI", "sap/ui/test/OpaBuilder"], function (CollaborationCommon, CollaborationAPI, OpaBuilder) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var Activity = CollaborationCommon.Activity;
|
|
9
|
+
|
|
10
|
+
function CollaborationClient(oPageDefinition) {
|
|
11
|
+
var sAppId = oPageDefinition.appId,
|
|
12
|
+
sComponentId = oPageDefinition.componentId,
|
|
13
|
+
viewId = sAppId + "::" + sComponentId;
|
|
14
|
+
return {
|
|
15
|
+
actions: {
|
|
16
|
+
iEnterDraft: function (userID, userName) {
|
|
17
|
+
return OpaBuilder.create(this).hasId(viewId).do(function (view) {
|
|
18
|
+
var oContext = view.getBindingContext();
|
|
19
|
+
CollaborationAPI.enterDraft(oContext, userID, userName);
|
|
20
|
+
}).viewId("").description("Remote session entering draft").execute();
|
|
21
|
+
},
|
|
22
|
+
iLeaveDraft: function () {
|
|
23
|
+
return OpaBuilder.create(this).do(function () {
|
|
24
|
+
CollaborationAPI.leaveDraft();
|
|
25
|
+
}).description("Remote session leaving draft").execute();
|
|
26
|
+
},
|
|
27
|
+
iLockPropertyForEdition: function (sPropertyPath) {
|
|
28
|
+
return OpaBuilder.create(this).do(function () {
|
|
29
|
+
CollaborationAPI.startLiveChange(sPropertyPath);
|
|
30
|
+
}).description("Remote session locking property " + sPropertyPath).execute();
|
|
31
|
+
},
|
|
32
|
+
iUnlockPropertyForEdition: function () {
|
|
33
|
+
return OpaBuilder.create(this).do(function () {
|
|
34
|
+
CollaborationAPI.undoChange();
|
|
35
|
+
}).description("Remote session unlocking property ").execute();
|
|
36
|
+
},
|
|
37
|
+
iUpdatePropertyValue: function (sPropertyPath, value) {
|
|
38
|
+
return OpaBuilder.create(this).do(function () {
|
|
39
|
+
CollaborationAPI.updatePropertyValue(sPropertyPath, value);
|
|
40
|
+
}).description("Remote session updating property " + sPropertyPath + " with " + value).execute();
|
|
41
|
+
},
|
|
42
|
+
iDiscardDraft: function () {
|
|
43
|
+
return OpaBuilder.create(this).do(function () {
|
|
44
|
+
CollaborationAPI.discardDraft();
|
|
45
|
+
}).description("Remote session discarding draft").execute();
|
|
46
|
+
},
|
|
47
|
+
iDeleteDraft: function () {
|
|
48
|
+
return OpaBuilder.create(this).do(function () {
|
|
49
|
+
CollaborationAPI.deleteDraft();
|
|
50
|
+
}).description("Remote session deleting draft").execute();
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
assertions: {
|
|
54
|
+
iCheckDefaultUserChangedValue: function (sPropertyPath) {
|
|
55
|
+
return OpaBuilder.create(this).check(function () {
|
|
56
|
+
return CollaborationAPI.checkReceived({
|
|
57
|
+
userID: "DEFAULT_USER",
|
|
58
|
+
userAction: Activity.Change,
|
|
59
|
+
clientContent: sPropertyPath
|
|
60
|
+
});
|
|
61
|
+
}).description("Remote session received change notification for" + sPropertyPath + " changed").execute();
|
|
62
|
+
},
|
|
63
|
+
iCheckDefaultUserLeftDraft: function () {
|
|
64
|
+
return OpaBuilder.create(this).check(function () {
|
|
65
|
+
return CollaborationAPI.checkReceived({
|
|
66
|
+
userID: "DEFAULT_USER",
|
|
67
|
+
userAction: Activity.Leave
|
|
68
|
+
});
|
|
69
|
+
}).description("Remote session received notification on default user leaving the draft session").execute();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return CollaborationClient;
|
|
76
|
+
}, false);
|
|
77
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbGxhYm9yYXRpb25DbGllbnQudHMiXSwibmFtZXMiOlsiQ29sbGFib3JhdGlvbkNsaWVudCIsIm9QYWdlRGVmaW5pdGlvbiIsInNBcHBJZCIsImFwcElkIiwic0NvbXBvbmVudElkIiwiY29tcG9uZW50SWQiLCJ2aWV3SWQiLCJhY3Rpb25zIiwiaUVudGVyRHJhZnQiLCJ1c2VySUQiLCJ1c2VyTmFtZSIsIk9wYUJ1aWxkZXIiLCJjcmVhdGUiLCJoYXNJZCIsImRvIiwidmlldyIsIm9Db250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJDb2xsYWJvcmF0aW9uQVBJIiwiZW50ZXJEcmFmdCIsImRlc2NyaXB0aW9uIiwiZXhlY3V0ZSIsImlMZWF2ZURyYWZ0IiwibGVhdmVEcmFmdCIsImlMb2NrUHJvcGVydHlGb3JFZGl0aW9uIiwic1Byb3BlcnR5UGF0aCIsInN0YXJ0TGl2ZUNoYW5nZSIsImlVbmxvY2tQcm9wZXJ0eUZvckVkaXRpb24iLCJ1bmRvQ2hhbmdlIiwiaVVwZGF0ZVByb3BlcnR5VmFsdWUiLCJ2YWx1ZSIsInVwZGF0ZVByb3BlcnR5VmFsdWUiLCJpRGlzY2FyZERyYWZ0IiwiZGlzY2FyZERyYWZ0IiwiaURlbGV0ZURyYWZ0IiwiZGVsZXRlRHJhZnQiLCJhc3NlcnRpb25zIiwiaUNoZWNrRGVmYXVsdFVzZXJDaGFuZ2VkVmFsdWUiLCJjaGVjayIsImNoZWNrUmVjZWl2ZWQiLCJ1c2VyQWN0aW9uIiwiQWN0aXZpdHkiLCJDaGFuZ2UiLCJjbGllbnRDb250ZW50IiwiaUNoZWNrRGVmYXVsdFVzZXJMZWZ0RHJhZnQiLCJMZWF2ZSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7O0FBR0EsV0FBU0EsbUJBQVQsQ0FBNkJDLGVBQTdCLEVBQXNGO0FBQ3JGLFFBQU1DLE1BQU0sR0FBR0QsZUFBZSxDQUFDRSxLQUEvQjtBQUFBLFFBQ0NDLFlBQVksR0FBR0gsZUFBZSxDQUFDSSxXQURoQztBQUFBLFFBRUNDLE1BQU0sR0FBR0osTUFBTSxH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RSxjQUQ2QjtBQUVyQytCLGNBQUFBLFVBQVUsRUFBRUMsUUFBUSxDQUFDQyxNQUZnQjtBQUdyQ0MsY0FBQUEsYUFBYSxFQUFFbEI7QUFIc0IsYUFBL0IsQ0FBUDtBQUtBLFdBUEssRUFRTEwsV0FSSyxDQVFPLG9EQUFvREssYUFBcEQsR0FBb0UsVUFSM0UsRUFTTEosT0FUSyxFQUFQO0FBVUEsU0FaVTtBQWNYdUIsUUFBQUEsMEJBQTBCLEVBQUUsWUFBWTtBQUN2QyxpQkFBT2pDLFVBQVUsQ0FBQ0MsTUFBWCxDQUFrQixJQUFsQixFQUNMMEIsS0FESyxDQUNDLFlBQVk7QUFDbEIsbUJBQU9wQixnQkFBZ0IsQ0FBQ3FCLGFBQWpCLENBQStCO0FBQUU5QixjQUFBQSxNQUFNLEVBQUUsY0FBVjtBQUEwQitCLGNBQUFBLFVBQVUsRUFBRUMsUUFBUSxDQUFDSTtBQUEvQyxhQUEvQixDQUFQO0FBQ0EsV0FISyxFQUlMekIsV0FKSyxDQUlPLGdGQUpQLEVBS0xDLE9BTEssRUFBUDtBQU1BO0FBckJVO0FBcEVOLEtBQVA7QUE0RkE7O1NBRWNyQixtQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbkFQSSBmcm9tIFwic2FwL2ZlL3Rlc3QvYXBpL0NvbGxhYm9yYXRpb25BUElcIjtcbmltcG9ydCBPcGE1IGZyb20gXCJzYXAvdWkvdGVzdC9PcGE1XCI7XG5pbXBvcnQgT3BhQnVpbGRlciBmcm9tIFwic2FwL3VpL3Rlc3QvT3BhQnVpbGRlclwiO1xuXG5mdW5jdGlvbiBDb2xsYWJvcmF0aW9uQ2xpZW50KG9QYWdlRGVmaW5pdGlvbjogeyBhcHBJZDogc3RyaW5nOyBjb21wb25lbnRJZDogc3RyaW5nIH0pIHtcblx0Y29uc3Qgc0FwcElkID0gb1BhZ2VEZWZpbml0aW9uLmFwcElkLFxuXHRcdHNDb21wb25lbnRJZCA9IG9QYWdlRGVmaW5pdGlvbi5jb21wb25lbnRJZCxcblx0XHR2aWV3SWQgPSBzQXBwSWQgKyBcIjo6XCIgKyBzQ29tcG9uZW50SWQ7XG5cblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiB7XG5cdFx0XHRpRW50ZXJEcmFmdDogZnVuY3Rpb24gKHVzZXJJRDogc3RyaW5nLCB1c2VyTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIGFueSBhcyBPcGE1KVxuXHRcdFx0XHRcdC5oYXNJZCh2aWV3SWQpXG5cdFx0XHRcdFx0LmRvKGZ1bmN0aW9uICh2aWV3OiBhbnkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRcdFx0Q29sbGFib3JhdGlvbkFQSS5lbnRlckRyYWZ0KG9Db250ZXh0LCB1c2VySUQsIHVzZXJOYW1lKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC52aWV3SWQoXCJcIilcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oXCJSZW1vdGUgc2Vzc2lvbiBlbnRlcmluZyBkcmFmdFwiKVxuXHRcdFx0XHRcdC5leGVjdXRlKCk7XG5cdFx0XHR9LFxuXG5cdFx0XHRpTGVhdmVEcmFmdDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyBhbnkgYXMgT3BhNSlcblx0XHRcdFx0XHQuZG8oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Q29sbGFib3JhdGlvbkFQSS5sZWF2ZURyYWZ0KCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oXCJSZW1vdGUgc2Vzc2lvbiBsZWF2aW5nIGRyYWZ0XCIpXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH0sXG5cblx0XHRcdGlMb2NrUHJvcGVydHlGb3JFZGl0aW9uOiBmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIGFueSBhcyBPcGE1KVxuXHRcdFx0XHRcdC5kbyhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRDb2xsYWJvcmF0aW9uQVBJLnN0YXJ0TGl2ZUNoYW5nZShzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5kZXNjcmlwdGlvbihcIlJlbW90ZSBzZXNzaW9uIGxvY2tpbmcgcHJvcGVydHkgXCIgKyBzUHJvcGVydHlQYXRoKVxuXHRcdFx0XHRcdC5leGVjdXRlKCk7XG5cdFx0XHR9LFxuXG5cdFx0XHRpVW5sb2NrUHJvcGVydHlGb3JFZGl0aW9uOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBPcGFCdWlsZGVyLmNyZWF0ZSh0aGlzIGFzIGFueSBhcyBPcGE1KVxuXHRcdFx0XHRcdC5kbyhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRDb2xsYWJvcmF0aW9uQVBJLnVuZG9DaGFuZ2UoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5kZXNjcmlwdGlvbihcIlJlbW90ZSBzZXNzaW9uIHVubG9ja2luZyBwcm9wZXJ0eSBcIilcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblxuXHRcdFx0aVVwZGF0ZVByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmRvKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdENvbGxhYm9yYXRpb25BUEkudXBkYXRlUHJvcGVydHlWYWx1ZShzUHJvcGVydHlQYXRoLCB2YWx1ZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oXCJSZW1vdGUgc2Vzc2lvbiB1cGRhdGluZyBwcm9wZXJ0eSBcIiArIHNQcm9wZXJ0eVBhdGggKyBcIiB3aXRoIFwiICsgdmFsdWUpXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH0sXG5cblx0XHRcdGlEaXNjYXJkRHJhZnQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmRvKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdENvbGxhYm9yYXRpb25BUEkuZGlzY2FyZERyYWZ0KCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oXCJSZW1vdGUgc2Vzc2lvbiBkaXNjYXJkaW5nIGRyYWZ0XCIpXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH0sXG5cblx0XHRcdGlEZWxldGVEcmFmdDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gT3BhQnVpbGRlci5jcmVhdGUodGhpcyBhcyBhbnkgYXMgT3BhNSlcblx0XHRcdFx0XHQuZG8oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Q29sbGFib3JhdGlvbkFQSS5kZWxldGVEcmFmdCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKFwiUmVtb3RlIHNlc3Npb24gZGVsZXRpbmcgZHJhZnRcIilcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0YXNzZXJ0aW9uczoge1xuXHRcdFx0aUNoZWNrRGVmYXVsdFVzZXJDaGFuZ2VkVmFsdWU6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmNoZWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBDb2xsYWJvcmF0aW9uQVBJLmNoZWNrUmVjZWl2ZWQoe1xuXHRcdFx0XHRcdFx0XHR1c2VySUQ6IFwiREVGQVVMVF9VU0VSXCIsXG5cdFx0XHRcdFx0XHRcdHVzZXJBY3Rpb246IEFjdGl2aXR5LkNoYW5nZSxcblx0XHRcdFx0XHRcdFx0Y2xpZW50Q29udGVudDogc1Byb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZGVzY3JpcHRpb24oXCJSZW1vdGUgc2Vzc2lvbiByZWNlaXZlZCBjaGFuZ2Ugbm90aWZpY2F0aW9uIGZvclwiICsgc1Byb3BlcnR5UGF0aCArIFwiIGNoYW5nZWRcIilcblx0XHRcdFx0XHQuZXhlY3V0ZSgpO1xuXHRcdFx0fSxcblxuXHRcdFx0aUNoZWNrRGVmYXVsdFVzZXJMZWZ0RHJhZnQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIE9wYUJ1aWxkZXIuY3JlYXRlKHRoaXMgYXMgYW55IGFzIE9wYTUpXG5cdFx0XHRcdFx0LmNoZWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBDb2xsYWJvcmF0aW9uQVBJLmNoZWNrUmVjZWl2ZWQoeyB1c2VySUQ6IFwiREVGQVVMVF9VU0VSXCIsIHVzZXJBY3Rpb246IEFjdGl2aXR5LkxlYXZlIH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uKFwiUmVtb3RlIHNlc3Npb24gcmVjZWl2ZWQgbm90aWZpY2F0aW9uIG9uIGRlZmF1bHQgdXNlciBsZWF2aW5nIHRoZSBkcmFmdCBzZXNzaW9uXCIpXG5cdFx0XHRcdFx0LmV4ZWN1dGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhYm9yYXRpb25DbGllbnQ7XG4iXX0=
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { Activity } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
|
|
2
|
+
import CollaborationAPI from "sap/fe/test/api/CollaborationAPI";
|
|
3
|
+
import Opa5 from "sap/ui/test/Opa5";
|
|
4
|
+
import OpaBuilder from "sap/ui/test/OpaBuilder";
|
|
5
|
+
|
|
6
|
+
function CollaborationClient(oPageDefinition: { appId: string; componentId: string }) {
|
|
7
|
+
const sAppId = oPageDefinition.appId,
|
|
8
|
+
sComponentId = oPageDefinition.componentId,
|
|
9
|
+
viewId = sAppId + "::" + sComponentId;
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
actions: {
|
|
13
|
+
iEnterDraft: function (userID: string, userName: string) {
|
|
14
|
+
return OpaBuilder.create(this as any as Opa5)
|
|
15
|
+
.hasId(viewId)
|
|
16
|
+
.do(function (view: any) {
|
|
17
|
+
const oContext = view.getBindingContext();
|
|
18
|
+
CollaborationAPI.enterDraft(oContext, userID, userName);
|
|
19
|
+
})
|
|
20
|
+
.viewId("")
|
|
21
|
+
.description("Remote session entering draft")
|
|
22
|
+
.execute();
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
iLeaveDraft: function () {
|
|
26
|
+
return OpaBuilder.create(this as any as Opa5)
|
|
27
|
+
.do(function () {
|
|
28
|
+
CollaborationAPI.leaveDraft();
|
|
29
|
+
})
|
|
30
|
+
.description("Remote session leaving draft")
|
|
31
|
+
.execute();
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
iLockPropertyForEdition: function (sPropertyPath: string) {
|
|
35
|
+
return OpaBuilder.create(this as any as Opa5)
|
|
36
|
+
.do(function () {
|
|
37
|
+
CollaborationAPI.startLiveChange(sPropertyPath);
|
|
38
|
+
})
|
|
39
|
+
.description("Remote session locking property " + sPropertyPath)
|
|
40
|
+
.execute();
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
iUnlockPropertyForEdition: function () {
|
|
44
|
+
return OpaBuilder.create(this as any as Opa5)
|
|
45
|
+
.do(function () {
|
|
46
|
+
CollaborationAPI.undoChange();
|
|
47
|
+
})
|
|
48
|
+
.description("Remote session unlocking property ")
|
|
49
|
+
.execute();
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
iUpdatePropertyValue: function (sPropertyPath: string, value: any) {
|
|
53
|
+
return OpaBuilder.create(this as any as Opa5)
|
|
54
|
+
.do(function () {
|
|
55
|
+
CollaborationAPI.updatePropertyValue(sPropertyPath, value);
|
|
56
|
+
})
|
|
57
|
+
.description("Remote session updating property " + sPropertyPath + " with " + value)
|
|
58
|
+
.execute();
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
iDiscardDraft: function () {
|
|
62
|
+
return OpaBuilder.create(this as any as Opa5)
|
|
63
|
+
.do(function () {
|
|
64
|
+
CollaborationAPI.discardDraft();
|
|
65
|
+
})
|
|
66
|
+
.description("Remote session discarding draft")
|
|
67
|
+
.execute();
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
iDeleteDraft: function () {
|
|
71
|
+
return OpaBuilder.create(this as any as Opa5)
|
|
72
|
+
.do(function () {
|
|
73
|
+
CollaborationAPI.deleteDraft();
|
|
74
|
+
})
|
|
75
|
+
.description("Remote session deleting draft")
|
|
76
|
+
.execute();
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
assertions: {
|
|
80
|
+
iCheckDefaultUserChangedValue: function (sPropertyPath: string) {
|
|
81
|
+
return OpaBuilder.create(this as any as Opa5)
|
|
82
|
+
.check(function () {
|
|
83
|
+
return CollaborationAPI.checkReceived({
|
|
84
|
+
userID: "DEFAULT_USER",
|
|
85
|
+
userAction: Activity.Change,
|
|
86
|
+
clientContent: sPropertyPath
|
|
87
|
+
});
|
|
88
|
+
})
|
|
89
|
+
.description("Remote session received change notification for" + sPropertyPath + " changed")
|
|
90
|
+
.execute();
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
iCheckDefaultUserLeftDraft: function () {
|
|
94
|
+
return OpaBuilder.create(this as any as Opa5)
|
|
95
|
+
.check(function () {
|
|
96
|
+
return CollaborationAPI.checkReceived({ userID: "DEFAULT_USER", userAction: Activity.Leave });
|
|
97
|
+
})
|
|
98
|
+
.description("Remote session received notification on default user leaving the draft session")
|
|
99
|
+
.execute();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export default CollaborationClient;
|
|
@@ -63,4 +63,4 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
|
|
|
63
63
|
_exports.mockFilterBar = mockFilterBar;
|
|
64
64
|
return _exports;
|
|
65
65
|
}, false);
|
|
66
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZlTW9ja3MudHMiXSwibmFtZXMiOlsibW9ja0xpc3RSZXBvcnRDb250cm9sbGVyIiwibGlzdFJlcG9ydCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiamVzdCIsImZuIiwiX2dldENvbnRyb2xzIiwiX2lzRmlsdGVyQmFySGlkZGVuIiwiX2lzTXVsdGlNb2RlIiwiX3NldENvdW50c091dERhdGVkIiwiX2dldEN1cnJlbnRDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJfaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRUYWJsZSIsImdldEV4dGVuc2lvbkFQSSIsIl9lZGl0RmxvdyIsIm1vY2siLCJJbnRlcm5hbEVkaXRGbG93IiwiT2JqZWN0IiwiYXNzaWduIiwiUGFnZUNvbnRyb2xsZXIiLCJtb2NrT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJvYmplY3RQYWdlIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJtb2NrQ29udGV4dEZvckV4dGVuc2lvbiIsImV4dGVuc2lvbiIsImNvbnRyb2xsZXIiLCJiYXNlIiwidmlldyIsImdldFZpZXciLCJtb2NrZWRCYXNlIiwibW9ja0ZpbHRlckJhciIsImZpbHRlckJhciIsIkZpbHRlckJhciIsIndhaXRGb3JJbml0aWFsaXphdGlvbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7OztBQTBCTyxXQUFTQSx3QkFBVCxHQUE2SDtBQUNuSTtBQUNBLFFBQU1DLFVBQTJFLEdBQUc7QUFDbkZDLE1BQUFBLG9CQUFvQixFQUFFQyxJQUFJLENBQUNDLEVBQUwsRUFENkQ7QUFFbkZDLE1BQUFBLFlBQVksRUFBRUYsSUFBSSxDQUFDQyxFQUFMLEVBRnFFO0FBR25GRSxNQUFBQSxrQkFBa0IsRUFBRUgsSUFBSSxDQUFDQyxFQUFMLEVBSCtEO0FBSW5GRyxNQUFBQSxZQUFZLEVBQUVKLElBQUksQ0FBQ0MsRUFBTCxFQUpxRTtBQUtuRkksTUFBQUEsa0JBQWtCLEVBQUVMLElBQUksQ0FBQ0MsRUFBTCxFQUwrRDtBQU1uRkssTUFBQUEsa0JBQWtCLEVBQUVOLElBQUksQ0FBQ0MsRUFBTCxFQU4rRDtBQU9uRk0sTUFBQUEsb0JBQW9CLEVBQUVQLElBQUksQ0FBQ0MsRUFBTCxFQVA2RDtBQVFuRk8sTUFBQUEsdUJBQXVCLEVBQUVSLElBQUksQ0FBQ0MsRUFBTCxFQVIwRDtBQVNuRlEsTUFBQUEsd0JBQXdCLEVBQUVULElBQUksQ0FBQ0MsRUFBTCxFQVR5RDtBQVVuRlMsTUFBQUEsU0FBUyxFQUFFVixJQUFJLENBQUNDLEVBQUwsRUFWd0U7QUFXbkZVLE1BQUFBLGVBQWUsRUFBRVgsSUFBSSxDQUFDQyxFQUFMLEVBWGtFO0FBWW5GVyxNQUFBQSxTQUFTLEVBQUVDLElBQUksQ0FBQ0MsZ0JBQUQ7QUFab0UsS0FBcEY7QUFjQSxXQUFPQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0gsSUFBSSxDQUFDSSxjQUFELENBQWxCLEVBQTJDbkIsVUFBM0MsQ0FBUDtBQUdBOzs7O0FBRU0sV0FBU29CLHdCQUFULEdBQTZIO0FBQ25JO0FBQ0EsUUFBTUMsVUFBMkUsR0FBRztBQUNuRkMsTUFBQUEsaUJBQWlCLEVBQUVwQixJQUFJLENBQUNDLEVBQUwsRUFEZ0U7QUFFbkZVLE1BQUFBLGVBQWUsRUFBRVgsSUFBSSxDQUFDQyxFQUFMLEVBRmtFO0FBR25GVyxNQUFBQSxTQUFTLEVBQUVDLElBQUksQ0FBQ0MsZ0JBQUQ7QUFIb0UsS0FBcEY7QUFLQSxXQUFPQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0gsSUFBSSxDQUFDSSxjQUFELENBQWxCLEVBQTJDRSxVQUEzQyxDQUFQO0FBR0E7Ozs7QUFFTSxXQUFTRSx1QkFBVCxDQUNOQyxTQURNLEVBRU5DLFVBRk0sRUFHTkMsSUFITSxFQUlrQztBQUN4QyxRQUFNQyxJQUFJLEdBQUdGLFVBQVUsQ0FBQ0csT0FBWCxFQUFiOztBQUNDSixJQUFBQSxTQUFELENBQW1CSSxPQUFuQixHQUE2QjtBQUFBLGFBQU1ELElBQU47QUFBQSxLQUE3Qjs7QUFDQSxRQUFNRSxVQUFVLEdBQUdkLElBQUksQ0FBQ1csSUFBSSxJQUFJLEVBQVQsQ0FBdkI7QUFDQSxXQUFPVCxNQUFNLENBQUNDLE1BQVAsQ0FBY1csVUFBZCxFQUEwQkwsU0FBMUIsQ0FBUDtBQUNBOzs7O0FBRU0sV0FBU00sYUFBVCxHQUVMO0FBQ0QsUUFBTUMsU0FBUyxHQUFHaEIsSUFBSSxDQUFDaUIsU0FBRCxDQUF0QjtBQUdBRCxJQUFBQSxTQUFTLENBQUNoQixJQUFWLENBQWVrQixxQkFBZixHQUF1Qy9CLElBQUksQ0FBQ0MsRUFBTCxFQUF2QztBQUNBLFdBQU80QixTQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vY2ssIE1vY2tlZEluc3RhbmNlLCBVSTVJbnN0YW5jZVR5cGUsIFdpdGhNb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCBJbnRlcm5hbEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEVkaXRGbG93XCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5cbmludGVyZmFjZSBDb21tb25Db250cm9sbGVyVHlwZSB7XG5cdGdldEV4dGVuc2lvbkFQSTogYW55O1xuXHRfZWRpdEZsb3c6IFdpdGhNb2NrPEludGVybmFsRWRpdEZsb3c+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSB7XG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sOiBhbnk7XG5cdF9nZXRDb250cm9sczogYW55O1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW46IGFueTtcblx0X2lzTXVsdGlNb2RlOiBhbnk7XG5cdF9zZXRDb3VudHNPdXREYXRlZDogYW55O1xuXHRfZ2V0Q3VycmVudENvbnRyb2w6IGFueTtcblx0X2dldE11bHRpTW9kZUNvbnRyb2w6IGFueTtcblx0X2hhc011bHRpVmlzdWFsaXphdGlvbnM6IGFueTtcblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoOiBhbnk7XG5cdF9nZXRUYWJsZTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFBhZ2VDb250cm9sbGVyVHlwZSB7XG5cdGdldFN0aWNreUVkaXRNb2RlOiBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrTGlzdFJlcG9ydENvbnRyb2xsZXIoKTogV2l0aE1vY2s8Q29udHJvbGxlciAmIFBhZ2VDb250cm9sbGVyICYgTGlzdFJlcG9ydENvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGU+IHtcblx0Ly8gbWFudWFsbHkgYWRkIExpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIgZnVuY3Rpb25zIHNpbmNlIEkgYW0gdW5hYmxlIHRvIGltcG9ydCB0aGUgcHJvdG90eXBlXG5cdGNvbnN0IGxpc3RSZXBvcnQ6IE1vY2tlZEluc3RhbmNlPExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlPiA9IHtcblx0XHRfZ2V0RmlsdGVyQmFyQ29udHJvbDogamVzdC5mbigpLFxuXHRcdF9nZXRDb250cm9sczogamVzdC5mbigpLFxuXHRcdF9pc0ZpbHRlckJhckhpZGRlbjogamVzdC5mbigpLFxuXHRcdF9pc011bHRpTW9kZTogamVzdC5mbigpLFxuXHRcdF9zZXRDb3VudHNPdXREYXRlZDogamVzdC5mbigpLFxuXHRcdF9nZXRDdXJyZW50Q29udHJvbDogamVzdC5mbigpLFxuXHRcdF9nZXRNdWx0aU1vZGVDb250cm9sOiBqZXN0LmZuKCksXG5cdFx0X2hhc011bHRpVmlzdWFsaXphdGlvbnM6IGplc3QuZm4oKSxcblx0XHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2g6IGplc3QuZm4oKSxcblx0XHRfZ2V0VGFibGU6IGplc3QuZm4oKSxcblx0XHRnZXRFeHRlbnNpb25BUEk6IGplc3QuZm4oKSxcblx0XHRfZWRpdEZsb3c6IG1vY2soSW50ZXJuYWxFZGl0RmxvdykgYXMgYW55XG5cdH07XG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1vY2soUGFnZUNvbnRyb2xsZXIpIGFzIGFueSwgbGlzdFJlcG9ydCkgYXMgV2l0aE1vY2s8XG5cdFx0Q29udHJvbGxlciAmIFBhZ2VDb250cm9sbGVyICYgTGlzdFJlcG9ydENvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGVcblx0Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tPYmplY3RQYWdlQ29udHJvbGxlcigpOiBXaXRoTW9jazxDb250cm9sbGVyICYgUGFnZUNvbnRyb2xsZXIgJiBPYmplY3RQYWdlQ29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZT4ge1xuXHQvLyBtYW51YWxseSBhZGQgTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlciBmdW5jdGlvbnMgc2luY2UgSSBhbSB1bmFibGUgdG8gaW1wb3J0IHRoZSBwcm90b3R5cGVcblx0Y29uc3Qgb2JqZWN0UGFnZTogTW9ja2VkSW5zdGFuY2U8T2JqZWN0UGFnZUNvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGU+ID0ge1xuXHRcdGdldFN0aWNreUVkaXRNb2RlOiBqZXN0LmZuKCksXG5cdFx0Z2V0RXh0ZW5zaW9uQVBJOiBqZXN0LmZuKCksXG5cdFx0X2VkaXRGbG93OiBtb2NrKEludGVybmFsRWRpdEZsb3cpIGFzIFdpdGhNb2NrPEludGVybmFsRWRpdEZsb3c+IGFzIGFueVxuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihtb2NrKFBhZ2VDb250cm9sbGVyKSBhcyBhbnksIG9iamVjdFBhZ2UpIGFzIFdpdGhNb2NrPFxuXHRcdENvbnRyb2xsZXIgJiBQYWdlQ29udHJvbGxlciAmIE9iamVjdFBhZ2VDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlXG5cdD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrQ29udGV4dEZvckV4dGVuc2lvbjxFWFQgZXh0ZW5kcyBvYmplY3QsIEJBU0UgZXh0ZW5kcyBvYmplY3Q+KFxuXHRleHRlbnNpb246IEVYVCxcblx0Y29udHJvbGxlcjogV2l0aE1vY2s8Q29udHJvbGxlcj4sXG5cdGJhc2U/OiBCQVNFXG4pOiBXaXRoTW9jazxFWFQgJiBVSTVJbnN0YW5jZVR5cGU8QkFTRT4+IHtcblx0Y29uc3QgdmlldyA9IGNvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHQoZXh0ZW5zaW9uIGFzIGFueSkuZ2V0VmlldyA9ICgpID0+IHZpZXc7XG5cdGNvbnN0IG1vY2tlZEJhc2UgPSBtb2NrKGJhc2UgfHwge30pO1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihtb2NrZWRCYXNlLCBleHRlbnNpb24pIGFzIFdpdGhNb2NrPEVYVCAmIFVJNUluc3RhbmNlVHlwZTxCQVNFPj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrRmlsdGVyQmFyKCk6IFdpdGhNb2NrPFxuXHRGaWx0ZXJCYXIgJiB7IHdhaXRGb3JJbml0aWFsaXphdGlvbjogRnVuY3Rpb247IF9iU2VhcmNoVHJpZ2dlcmVkOiBCb29sZWFuOyBfZ2V0Q29uZGl0aW9uTW9kZWw6IEZ1bmN0aW9uIH1cbj4ge1xuXHRjb25zdCBmaWx0ZXJCYXIgPSBtb2NrKEZpbHRlckJhcikgYXMgV2l0aE1vY2s8XG5cdFx0RmlsdGVyQmFyICYgeyB3YWl0Rm9ySW5pdGlhbGl6YXRpb246IEZ1bmN0aW9uOyBfYlNlYXJjaFRyaWdnZXJlZDogQm9vbGVhbjsgX2dldENvbmRpdGlvbk1vZGVsOiBGdW5jdGlvbiB9XG5cdD47XG5cdGZpbHRlckJhci5tb2NrLndhaXRGb3JJbml0aWFsaXphdGlvbiA9IGplc3QuZm4oKTtcblx0cmV0dXJuIGZpbHRlckJhcjtcbn1cbiJdfQ==
|
|
@@ -70,8 +70,12 @@ export function mockContextForExtension<EXT extends object, BASE extends object>
|
|
|
70
70
|
return Object.assign(mockedBase, extension) as WithMock<EXT & UI5InstanceType<BASE>>;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
export function mockFilterBar(): WithMock<
|
|
74
|
-
|
|
73
|
+
export function mockFilterBar(): WithMock<
|
|
74
|
+
FilterBar & { waitForInitialization: Function; _bSearchTriggered: Boolean; _getConditionModel: Function }
|
|
75
|
+
> {
|
|
76
|
+
const filterBar = mock(FilterBar) as WithMock<
|
|
77
|
+
FilterBar & { waitForInitialization: Function; _bSearchTriggered: Boolean; _getConditionModel: Function }
|
|
78
|
+
>;
|
|
75
79
|
filterBar.mock.waitForInitialization = jest.fn();
|
|
76
80
|
return filterBar;
|
|
77
81
|
}
|
|
@@ -2,14 +2,12 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "sap/base/util/merge", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/converters/ConverterContext", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/core/TemplateModel", "sap/ui/base/BindingParser", "sap/ui/core/InvisibleText", "sap/ui/core/util/XMLPreprocessor", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "sap/ui/model/odata/v4/ODataMetaModel", "xpath"], function (
|
|
5
|
+
sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "sap/base/util/merge", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/converters/ConverterContext", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/core/TemplateModel", "sap/ui/base/BindingParser", "sap/ui/core/InvisibleText", "sap/ui/core/util/XMLPreprocessor", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "sap/ui/model/odata/v4/ODataMetaModel", "xpath"], function (compiler, fs, path, prettier, Log, merge, BuildingBlockRuntime, ConverterContext, SideEffectsFactory, TemplateModel, BindingParser, InvisibleText, XMLPreprocessor, JSONModel, _MetadataRequestor, ODataMetaModel, xpath) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var registerBuildingBlock = BuildingBlockRuntime.registerBuildingBlock;
|
|
10
10
|
var format = prettier.format;
|
|
11
|
-
var to = cds_compiler.to;
|
|
12
|
-
var compileSources = cds_compiler.compileSources;
|
|
13
11
|
|
|
14
12
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function () {}; return { s: F, n: function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (e) { throw e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function () { it = it.call(o); }, n: function () { var step = it.next(); normalCompletion = step.done; return step; }, e: function (e) { didErr = true; err = e; }, f: function () { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
15
13
|
|
|
@@ -25,6 +23,12 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
25
23
|
|
|
26
24
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
27
25
|
|
|
26
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
27
|
+
|
|
28
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
29
|
+
|
|
30
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
31
|
+
|
|
28
32
|
/**
|
|
29
33
|
* Process the requested XML fragment with the provided data.
|
|
30
34
|
*
|
|
@@ -159,6 +163,18 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
159
163
|
});
|
|
160
164
|
_exports.runXPathQuery = runXPathQuery;
|
|
161
165
|
|
|
166
|
+
var formatBuildingBlockXML = function (xmlString) {
|
|
167
|
+
if (Array.isArray(xmlString)) {
|
|
168
|
+
xmlString = xmlString.join("");
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
var xmlFormatted = formatXML(xmlString);
|
|
172
|
+
xmlFormatted = xmlFormatted.replace(/uid--id-[0-9]{13}-[0-9]/g, "uid--id");
|
|
173
|
+
return xmlFormatted;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
_exports.formatBuildingBlockXML = formatBuildingBlockXML;
|
|
177
|
+
|
|
162
178
|
var getControlAttribute = function (controlSelector, attributeName, xmlDom) {
|
|
163
179
|
var selector = "string(/root".concat(controlSelector, "/@").concat(attributeName, ")");
|
|
164
180
|
return runXPathQuery(selector, xmlDom);
|
|
@@ -169,6 +185,10 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
169
185
|
var serializeXML = function (xmlDom) {
|
|
170
186
|
var serializer = new window.XMLSerializer();
|
|
171
187
|
var xmlString = serializer.serializeToString(xmlDom);
|
|
188
|
+
return formatXML(xmlString);
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
var formatXML = function (xmlString) {
|
|
172
192
|
return format(xmlString, {
|
|
173
193
|
parser: "xml",
|
|
174
194
|
xmlWhitespaceSensitivity: "ignore"
|
|
@@ -179,30 +199,34 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
179
199
|
/**
|
|
180
200
|
* Compile a CDS file into an EDMX file.
|
|
181
201
|
*
|
|
182
|
-
* @param
|
|
183
|
-
*
|
|
184
|
-
* @
|
|
202
|
+
* @param cdsUrl The path to the file containing the CDS definition. This file must declare the namespace sap.fe.test and a service JestService
|
|
203
|
+
* @param options Options for creating the EDMX output
|
|
204
|
+
* @param edmxFileName Allows you to override the name of the compiled EDMX metadata file
|
|
205
|
+
* @returns The path of the generated EDMX
|
|
185
206
|
*/
|
|
186
207
|
|
|
187
208
|
|
|
188
|
-
|
|
189
|
-
var cdsString = fs.readFileSync(sCDSUrl, "utf-8");
|
|
190
|
-
var edmxContent = cds2edmx(cdsString, "sap.fe.test.JestService");
|
|
191
|
-
var dir = path.resolve(sCDSUrl, "..", "gen");
|
|
192
|
-
var edmxUrl = path.resolve(dir, path.basename(sCDSUrl).replace(".cds", ".xml"));
|
|
193
|
-
|
|
194
|
-
if (!fs.existsSync(dir)) {
|
|
195
|
-
fs.mkdirSync(dir);
|
|
196
|
-
}
|
|
209
|
+
_exports.formatXML = formatXML;
|
|
197
210
|
|
|
198
|
-
|
|
199
|
-
|
|
211
|
+
var compileCDS = function (cdsUrl) {
|
|
212
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
213
|
+
var edmxFileName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : path.basename(cdsUrl).replace(".cds", ".xml");
|
|
214
|
+
var cdsString = fs.readFileSync(cdsUrl, "utf-8");
|
|
215
|
+
var edmxContent = cds2edmx(cdsString, "sap.fe.test.JestService", options);
|
|
216
|
+
var dir = path.resolve(cdsUrl, "..", "gen");
|
|
217
|
+
var edmxFilePath = path.resolve(dir, edmxFileName);
|
|
218
|
+
fs.mkdirSync(dir, {
|
|
219
|
+
recursive: true
|
|
220
|
+
});
|
|
221
|
+
fs.writeFileSync(edmxFilePath, edmxContent);
|
|
222
|
+
return edmxFilePath;
|
|
200
223
|
};
|
|
201
224
|
/**
|
|
202
225
|
* Compile CDS to EDMX.
|
|
203
226
|
*
|
|
204
227
|
* @param cds The CDS model. It must define at least one service.
|
|
205
|
-
* @param service The fully-qualified name of the service to
|
|
228
|
+
* @param service The fully-qualified name of the service to be compiled. Defaults to "sap.fe.test.JestService".
|
|
229
|
+
* @param options Options for creating the EDMX output
|
|
206
230
|
* @returns The compiled service model as EDMX.
|
|
207
231
|
*/
|
|
208
232
|
|
|
@@ -211,16 +235,21 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
211
235
|
|
|
212
236
|
function cds2edmx(cds) {
|
|
213
237
|
var service = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "sap.fe.test.JestService";
|
|
214
|
-
var
|
|
238
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
239
|
+
var csn = compiler.compileSources({
|
|
215
240
|
"string.cds": cds
|
|
216
241
|
}, {});
|
|
217
|
-
|
|
218
|
-
|
|
242
|
+
|
|
243
|
+
var edmxOptions = _objectSpread(_objectSpread({
|
|
219
244
|
odataForeignKeys: true,
|
|
220
245
|
odataFormat: "structured",
|
|
221
246
|
odataContainment: false
|
|
247
|
+
}, options), {}, {
|
|
248
|
+
service: service
|
|
222
249
|
});
|
|
223
250
|
|
|
251
|
+
var edmx = compiler.to.edmx(csn, edmxOptions);
|
|
252
|
+
|
|
224
253
|
if (!edmx) {
|
|
225
254
|
throw new Error("Compilation failed. Hint: Make sure that the CDS model defines service ".concat(service, "."));
|
|
226
255
|
}
|
|
@@ -444,4 +473,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
|
|
|
444
473
|
_exports.getTemplatedXML = getTemplatedXML;
|
|
445
474
|
return _exports;
|
|
446
475
|
}, false);
|
|
447
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzIl0sIm5hbWVzIjpbInByb2Nlc3NGcmFnbWVudCIsIm5hbWUiLCJ0ZXN0RGF0YSIsImlucHV0WG1sIiwicGFyc2VyIiwid2luZG93IiwiRE9NUGFyc2VyIiwiaW5wdXREb2MiLCJwYXJzZUZyb21TdHJpbmciLCJzZXR0aW5ncyIsIm1vZGVscyIsImJpbmRpbmdDb250ZXh0cyIsIm1vZGVsIiwianNvbk1vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImZpcnN0RWxlbWVudENoaWxkIiwicmVzdWx0RG9jIiwiZnJhZ21lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJmcmFnbWVudCIsImlubmVySFRNTCIsInhtbFJlc3VsdCIsImNoaWxkcmVuIiwib3V0ZXJIVE1MIiwiZm9ybWF0WG1sIiwiZmlsdGVyIiwibm9kZSIsInR5cGUiLCJyZXF1aXJlIiwiTG9nIiwic2V0TGV2ZWwiLCJqZXN0Iiwic2V0VGltZW91dCIsIm5hbWVTcGFjZU1hcCIsInNlbGVjdCIsInhwYXRoIiwidXNlTmFtZXNwYWNlcyIsInJlZ2lzdGVyTWFjcm8iLCJtYWNyb01ldGFkYXRhIiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwidW5yZWdpc3Rlck1hY3JvIiwicGx1Z0luIiwibmFtZXNwYWNlIiwicHVibGljTmFtZXNwYWNlIiwicnVuWFBhdGhRdWVyeSIsInNlbGVjdG9yIiwieG1sZG9tIiwiZXhwZWN0IiwiZXh0ZW5kIiwidG9IYXZlQ29udHJvbCIsIm5vZGVzIiwibWVzc2FnZSIsIm91dHB1dFhtbCIsInNlcmlhbGl6ZVhNTCIsInBhc3MiLCJ0b05vdEhhdmVDb250cm9sIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwiWE1MU2VyaWFsaXplciIsInhtbFN0cmluZyIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiZm9ybWF0IiwieG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5IiwiY29tcGlsZUNEUyIsInNDRFNVcmwiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJwYXRoIiwicmVzb2x2ZSIsImVkbXhVcmwiLCJiYXNlbmFtZSIsInJlcGxhY2UiLCJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwid3JpdGVGaWxlU3luYyIsImNkcyIsInNlcnZpY2UiLCJjc24iLCJjb21waWxlU291cmNlcyIsImVkbXgiLCJ0byIsIm9kYXRhRm9yZWlnbktleXMiLCJvZGF0YUZvcm1hdCIsIm9kYXRhQ29udGFpbm1lbnQiLCJFcnJvciIsImdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UiLCJvTWV0YU1vZGVsIiwib1NlcnZpY2VDb250ZXh0Iiwic2NvcGVPYmplY3QiLCJzY29wZVR5cGUiLCJTaWRlRWZmZWN0c0ZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsInRoZW4iLCJvU2VydmljZUluc3RhbmNlIiwib0plc3RTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRJbnRlcmZhY2UiLCJnZXRDb250ZXh0IiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRGYWtlRGlhZ25vc3RpY3MiLCJpc3N1ZXMiLCJhZGRJc3N1ZSIsImlzc3VlQ2F0ZWdvcnkiLCJpc3N1ZVNldmVyaXR5IiwiZGV0YWlscyIsInB1c2giLCJnZXRJc3N1ZXMiLCJjaGVja0lmSXNzdWVFeGlzdHMiLCJmaW5kIiwiaXNzdWUiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCIsImNvbnZlcnRlZFR5cGVzIiwibWFuaWZlc3RTZXR0aW5ncyIsImVudGl0eVNldCIsImVudGl0eVNldHMiLCJlcyIsImRhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkiLCJDb252ZXJ0ZXJDb250ZXh0IiwibWVyZ2UiLCJtZXRhTW9kZWxDYWNoZSIsInNNZXRhZGF0YVVybCIsIm9SZXF1ZXN0b3IiLCJfTWV0YWRhdGFSZXF1ZXN0b3IiLCJjcmVhdGUiLCJPRGF0YU1ldGFNb2RlbCIsInVuZGVmaW5lZCIsImZldGNoRW50aXR5Q29udGFpbmVyIiwicHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiY29udGV4dExvY2F0aW9uIiwiZXZhbHVhdGVCaW5kaW5nIiwiYmluZGluZ1N0cmluZyIsImJpbmRpbmdFbGVtZW50IiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJhcmdzIiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwiLCJtb2RlbENvbnRlbnQiLCJuYW1lZE1vZGVsc0NvbnRlbnQiLCJ0ZXh0IiwiSW52aXNpYmxlVGV4dCIsImJpbmRQcm9wZXJ0eSIsImRlZmF1bHRNb2RlbCIsInNldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJPYmplY3QiLCJlbnRyaWVzIiwiY29udGVudCIsImdldFRleHQiLCJnZXRUZW1wbGF0aW5nUmVzdWx0IiwieG1sSW5wdXQiLCJtQmluZGluZ0NvbnRleHRzIiwibU1vZGVscyIsInRlbXBsYXRlZFhtbCIsInhtbERvYyIsImhhc093blByb3BlcnR5IiwiYXNzaWduIiwiVGVtcGxhdGVNb2RlbCIsImtleXMiLCJmb3JFYWNoIiwic01vZGVsTmFtZSIsImlzVGVtcGxhdGVNb2RlbCIsImRhdGEiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJtZXRhTW9kZWwiLCJzS2V5IiwiZ2V0T2JqZWN0IiwidG9CZURlZmluZWQiLCJvTW9kZWwiLCJnZXRUZW1wbGF0ZWRYTUwiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7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TixDQUE0REUsV0FBNUQ7QUFDQSxjQUFNQyxNQUFNLEdBQUdoQixPQUFPLENBQUNhLElBQUQsQ0FBUCxJQUFpQnhGLFVBQWhDO0FBQ0FzRixVQUFBQSxxQkFBcUIsQ0FBQzdLLGVBQXRCLENBQXNDK0ssSUFBdEMsSUFBOENHLE1BQU0sQ0FBQzdLLG9CQUFQLENBQTRCNEosZ0JBQWdCLENBQUNjLElBQUQsQ0FBNUMsQ0FBOUMsQ0FKcUQsQ0FJOEM7O0FBQ25HRixVQUFBQSxxQkFBcUIsQ0FBQzlLLE1BQXRCLENBQTZCZ0wsSUFBN0IsSUFBcUNHLE1BQXJDO0FBQ0EsU0FORCxFQTdCQyxDQXFDRDs7QUFDQSxZQUFJTCxxQkFBcUIsQ0FBQzlLLE1BQXRCLENBQTZCLE1BQTdCLENBQUosRUFBMEM7QUFDekM4SyxVQUFBQSxxQkFBcUIsQ0FBQzdLLGVBQXRCLENBQXNDLE1BQXRDLElBQWdENksscUJBQXFCLENBQUM5SyxNQUF0QixDQUE2QixNQUE3QixFQUFxQ00sb0JBQXJDLENBQTBELEdBQTFELENBQWhEO0FBQ0E7O0FBRUQsZUFBT0MsZUFBZSxDQUFDQyxPQUFoQixDQUF3QjZKLE1BQU0sQ0FBQzVKLGlCQUEvQixFQUFtRDtBQUFFbEIsVUFBQUEsSUFBSSxFQUFFO0FBQVIsU0FBbkQsRUFBOEV1TCxxQkFBOUUsQ0FBUDtBQTFDQztBQTJDRCxLQWhEK0I7QUFBQTtBQUFBO0FBQUEsR0FBekI7Ozs7QUFrREEsTUFBTU0sZUFBZSxhQUMzQm5CLFFBRDJCLEVBRTNCdEMsWUFGMkIsRUFHM0J1QyxnQkFIMkIsRUFJM0JDLE9BSjJCO0FBQUEsUUFLMUI7QUFBQSw2QkFDMEJILG1CQUFtQixDQUFDQyxRQUFELEVBQVd0QyxZQUFYLEVBQXlCdUMsZ0JBQXpCLEVBQTJDQyxPQUEzQyxDQUQ3QyxPQUVNbkgsWUFGTjtBQUdELEtBUjJCO0FBQUE7QUFBQTtBQUFBLEdBQXJCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbnlBbm5vdGF0aW9uLCBDb252ZXJ0ZXJPdXRwdXQsIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29tcGlsZVNvdXJjZXMsIHRvIH0gZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCwgUmVxdWlyZWRPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tSdW50aW1lXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBmb3JtYXRYbWwgPSByZXF1aXJlKFwieG1sLWZvcm1hdHRlclwiKTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwID0ge1xuXHRcIm1hY3Jvc1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb2RhdGFcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwibG9nXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcInVuaXR0ZXN0XCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdFwiY29udHJvbFwiOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdFwiY29yZVwiOiBcInNhcC51aS5jb3JlXCIsXG5cdFwibVwiOiBcInNhcC5tXCIsXG5cdFwiZlwiOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcImludGVybmFsTWFjcm9cIjogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdFwibWRjXCI6IFwic2FwLnVpLm1kY1wiLFxuXHRcIm1kY2F0XCI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdFwibWRjRmllbGRcIjogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFwibWRjVGFibGVcIjogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdFwidVwiOiBcInNhcC51aS51bmlmaWVkXCIsXG5cdFwibWFjcm9NaWNyb0NoYXJ0XCI6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdFwibWljcm9DaGFydFwiOiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdFwibWFjcm9UYWJsZVwiOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTWFjcm8gPSBmdW5jdGlvbiAobWFjcm9NZXRhZGF0YTogYW55KSB7XG5cdHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhtYWNyb01ldGFkYXRhKTtcbn07XG5leHBvcnQgY29uc3QgdW5yZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEubmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHRpZiAobWFjcm9NZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHR9XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoL3Jvb3Qke2NvbnRyb2xTZWxlY3Rvcn0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG5jb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0Y29uc3QgeG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHRyZXR1cm4gZm9ybWF0KFxuXHRcdHhtbFN0cmluZyxcblx0XHR7IHBhcnNlcjogXCJ4bWxcIiwgeG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5OiBcImlnbm9yZVwiIH0gYXMgUGFydGlhbDxSZXF1aXJlZE9wdGlvbnM+IC8qIG9wdGlvbnMgYnkgdGhlIFByZXR0aWVyIFhNTCBwbHVnaW4gKi9cblx0KTtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBhIENEUyBmaWxlIGludG8gYW4gRURNWCBmaWxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzQ0RTVXJsIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIENEUyBkZWZpbml0aW9uLiBUaGlzIGZpbGUgTVVTVCBkZWNsYXJlIHRoZSBuYW1lc3BhY2VcbiAqIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIG9mIHRoZSBnZW5lcmF0ZWQgRURNWFxuICovXG5leHBvcnQgY29uc3QgY29tcGlsZUNEUyA9IGZ1bmN0aW9uIChzQ0RTVXJsOiBzdHJpbmcpIHtcblx0Y29uc3QgY2RzU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNDRFNVcmwsIFwidXRmLThcIik7XG5cdGNvbnN0IGVkbXhDb250ZW50ID0gY2RzMmVkbXgoY2RzU3RyaW5nLCBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIpO1xuXHRjb25zdCBkaXIgPSBwYXRoLnJlc29sdmUoc0NEU1VybCwgXCIuLlwiLCBcImdlblwiKTtcblx0Y29uc3QgZWRteFVybCA9IHBhdGgucmVzb2x2ZShkaXIsIHBhdGguYmFzZW5hbWUoc0NEU1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCIueG1sXCIpKTtcblxuXHRpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkge1xuXHRcdGZzLm1rZGlyU3luYyhkaXIpO1xuXHR9XG5cblx0ZnMud3JpdGVGaWxlU3luYyhlZG14VXJsLCBlZG14Q29udGVudCk7XG5cdHJldHVybiBlZG14VXJsO1xufTtcblxuLyoqXG4gKiBDb21waWxlIENEUyB0byBFRE1YLlxuICpcbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gY29tcGlsZS4gRGVmYXVsdHMgdG8gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlOiBzdHJpbmcgPSBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIpIHtcblx0Y29uc3QgY3NuID0gY29tcGlsZVNvdXJjZXMoeyBcInN0cmluZy5jZHNcIjogY2RzIH0sIHt9KTtcblx0Y29uc3QgZWRteCA9IHRvLmVkbXgoY3NuLCB7IHNlcnZpY2U6IHNlcnZpY2UsIG9kYXRhRm9yZWlnbktleXM6IHRydWUsIG9kYXRhRm9ybWF0OiBcInN0cnVjdHVyZWRcIiwgb2RhdGFDb250YWlubWVudDogZmFsc2UgfSk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IG9TZXJ2aWNlQ29udGV4dCA9IHsgc2NvcGVPYmplY3Q6IHt9LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9O1xuXHRyZXR1cm4gbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dCkudGhlbihmdW5jdGlvbiAob1NlcnZpY2VJbnN0YW5jZTogYW55KSB7XG5cdFx0Y29uc3Qgb0plc3RTaWRlRWZmZWN0c1NlcnZpY2UgPSBvU2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xuXHRcdG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzY29wZU9iamVjdDoge1xuXHRcdFx0XHRcdGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb01ldGFNb2RlbDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fTtcblx0XHRyZXR1cm4gb0plc3RTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVyT3V0cHV0LFxuXHRtYW5pZmVzdFNldHRpbmdzOiBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzXG4pIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVkVHlwZXMuZW50aXR5U2V0cy5maW5kKChlcykgPT4gZXMubmFtZSA9PT0gbWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KGVudGl0eVNldCBhcyBFbnRpdHlTZXQsIGNvbnZlcnRlZFR5cGVzLCBlbnRpdHlTZXQpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQoY29udmVydGVkVHlwZXMsIG1hbmlmZXN0U2V0dGluZ3MsIGdldEZha2VEaWFnbm9zdGljcygpLCBtZXJnZSwgZGF0YU1vZGVsUGF0aCk7XG59O1xuY29uc3QgbWV0YU1vZGVsQ2FjaGU6IGFueSA9IHt9O1xuZXhwb3J0IGNvbnN0IGdldE1ldGFNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uIChzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwge30pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IChPRGF0YU1ldGFNb2RlbCBhcyBhbnkpKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCBudWxsKTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVyT3V0cHV0LFxuXHRwcm9wZXJ0eT86IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvblxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0dGFyZ2V0UGF0aC5jb250ZXh0TG9jYXRpb24gPSB0YXJnZXRQYXRoO1xuXHRyZXR1cm4gdGFyZ2V0UGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBldmFsdWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ1N0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCk7XG5cblx0aWYgKG5hbWVkTW9kZWxzQ29udGVudCkge1xuXHRcdGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVkTW9kZWxzQ29udGVudCkpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gbmV3IEpTT05Nb2RlbChjb250ZW50KTtcblx0XHRcdHRleHQuc2V0TW9kZWwobW9kZWwsIG5hbWUpO1xuXHRcdFx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCwgbmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRleHQuZ2V0VGV4dCgpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGluZ1Jlc3VsdCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9XG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWG1sID0gYDxyb290PiR7eG1sSW5wdXR9PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGVtcGxhdGVkWG1sLCBcInRleHQveG1sXCIpO1xuXHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBcImNvbnZlcnRlckNvbnRleHRcIjogbmV3IFRlbXBsYXRlTW9kZWwoe30sIG9NZXRhTW9kZWwpIH0pO1xuXHR9XG5cblx0T2JqZWN0LmtleXMobU1vZGVscykuZm9yRWFjaChmdW5jdGlvbiAoc01vZGVsTmFtZSkge1xuXHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRtTW9kZWxzW3NNb2RlbE5hbWVdID0gbmV3IFRlbXBsYXRlTW9kZWwobU1vZGVsc1tzTW9kZWxOYW1lXS5kYXRhLCBvTWV0YU1vZGVsKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5nczogYW55ID0ge1xuXHRcdG1vZGVsczogT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHR9LFxuXHRcdFx0bU1vZGVsc1xuXHRcdCksXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fVxuXHR9O1xuXG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbC5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW3NLZXldID0gb01vZGVsO1xuXHR9KTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdHJldHVybiBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyh4bWxEb2MuZmlyc3RFbGVtZW50Q2hpbGQhLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH1cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KHhtbElucHV0LCBzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMpO1xuXHRyZXR1cm4gc2VyaWFsaXplWE1MKHRlbXBsYXRlZFhNTCk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCBYTUwgZnJhZ21lbnQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IHRlc3REYXRhIFRlc3QgZGF0YSBjb25zaXN0aW5nXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgZnJhZ21lbnQgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJhZ21lbnQobmFtZTogc3RyaW5nLCB0ZXN0RGF0YTogeyBbbW9kZWw6IHN0cmluZ106IG9iamVjdCB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgaW5wdXRYbWwgPSBgPHJvb3Q+PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwiJHtuYW1lfVwiIHR5cGU9XCJYTUxcIiB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIiAvPjwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0O1xuXHR9XG5cblx0Ly8gZXhlY3V0ZSB0aGUgcHJlLXByb2Nlc3NvclxuXHRjb25zdCByZXN1bHREb2MgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhpbnB1dERvYy5maXJzdEVsZW1lbnRDaGlsZCwgeyBuYW1lIH0sIHNldHRpbmdzKTtcblxuXHQvLyBleGNsdWRlIG5lc3RlZCBmcmFnbWVudHMgZnJvbSB0ZXN0IHNuYXBzaG90c1xuXHRjb25zdCBmcmFnbWVudHMgPSByZXN1bHREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb3JlOkZyYWdtZW50XCIpO1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhtbCh4bWxSZXN1bHQsIHtcblx0XHRmaWx0ZXI6IChub2RlOiBhbnkpID0+IG5vZGUudHlwZSAhPT0gXCJDb21tZW50XCJcblx0fSk7XG59XG4iXX0=
|
|
476
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzIl0sIm5hbWVzIjpbInByb2Nlc3NGcmFnbWVudCIsIm5hbWUiLCJ0ZXN0RGF0YSIsImlucHV0WG1sIiwicGFyc2VyIiwid2luZG93IiwiRE9NUGFyc2VyIiwiaW5wdXREb2MiLCJwYXJzZUZyb21TdHJpbmciLCJzZXR0aW5ncyIsIm1vZGVscyIsImJpbmRpbmdDb250ZXh0cyIsIm1vZGVsIiwianNvbk1vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImZpcnN0RWxlbWVudENoaWxkIiwicmVzdWx0RG9jIiwiZnJhZ21lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJmcmFnbWVudCIsImlubmVySFRNTCIsInhtbFJlc3VsdCIsImNoaWxkcmVuIiwib3V0ZXJIVE1MIiwiZm9ybWF0WG1sIiwiZmlsdGVyIiwibm9kZSIsInR5cGUiLCJyZXF1aXJlIiwiTG9nIiwic2V0TGV2ZWwiLCJqZXN0Iiwic2V0VGltZW91dCIsIm5hbWVTcGFjZU1hcCIsInNlbGVjdCIsInhwYXRoIiwidXNlTmFtZXNwYWNlcyIsInJlZ2lzdGVyTWFjcm8iLCJtYWNyb01ldGFkYXRhIiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwidW5yZWdpc3Rlck1hY3JvIiwicGx1Z0luIiwibmFtZXNwYWNlIiwicHVibGljTmFtZXNwYWNlIiwicnVuWFBhdGhRdWVyeSIsInNlbGVjdG9yIiwieG1sZG9tIiwiZXhwZWN0IiwiZXh0ZW5kIiwidG9IYXZlQ29udHJvbCIsIm5vZGVzIiwibWVzc2FnZSIsIm91dHB1dFhtbCIsInNlcmlhbGl6ZVhNTCIsInBhc3MiLCJ0b05vdEhhdmVDb250cm9sIiwiZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCIsInhtbFN0cmluZyIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJ4bWxGb3JtYXR0ZWQiLCJmb3JtYXRYTUwiLCJyZXBsYWNlIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwiWE1MU2VyaWFsaXplciIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiZm9ybWF0IiwieG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5IiwiY29tcGlsZUNEUyIsImNkc1VybCIsIm9wdGlvbnMiLCJlZG14RmlsZU5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJyZXNvbHZlIiwiZWRteEZpbGVQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwid3JpdGVGaWxlU3luYyIsImNkcyIsInNlcnZpY2UiLCJjc24iLCJjb21waWxlciIsImNvbXBpbGVTb3VyY2VzIiwiZWRteE9wdGlvbnMiLCJvZGF0YUZvcmVpZ25LZXlzIiwib2RhdGFGb3JtYXQiLCJvZGF0YUNvbnRhaW5tZW50IiwiZWRteCIsInRvIiwiRXJyb3IiLCJnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlIiwib01ldGFNb2RlbCIsIm9TZXJ2aWNlQ29udGV4dCIsInNjb3BlT2JqZWN0Iiwic2NvcGVUeXBlIiwiU2lkZUVmZmVjdHNGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJ0aGVuIiwib1NlcnZpY2VJbnN0YW5jZSIsIm9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0Q29udGV4dCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJwdXNoIiwiZ2V0SXNzdWVzIiwiY2hlY2tJZklzc3VlRXhpc3RzIiwiZmluZCIsImlzc3VlIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QiLCJjb252ZXJ0ZWRUeXBlcyIsIm1hbmlmZXN0U2V0dGluZ3MiLCJlbnRpdHlTZXQiLCJlbnRpdHlTZXRzIiwiZXMiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwiQ29udmVydGVyQ29udGV4dCIsIm1lcmdlIiwibWV0YU1vZGVsQ2FjaGUiLCJzTWV0YWRhdGFVcmwiLCJvUmVxdWVzdG9yIiwiX01ldGFkYXRhUmVxdWVzdG9yIiwiY3JlYXRlIiwiT0RhdGFNZXRhTW9kZWwiLCJ1bmRlZmluZWQiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsInByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImNvbnRleHRMb2NhdGlvbiIsImV2YWx1YXRlQmluZGluZyIsImJpbmRpbmdTdHJpbmciLCJiaW5kaW5nRWxlbWVudCIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiYXJncyIsImZvcm1hdHRlciIsImFwcGx5IiwiZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsIiwibW9kZWxDb250ZW50IiwibmFtZWRNb2RlbHNDb250ZW50IiwidGV4dCIsIkludmlzaWJsZVRleHQiLCJiaW5kUHJvcGVydHkiLCJkZWZhdWx0TW9kZWwiLCJzZXRNb2RlbCIsInNldEJpbmRpbmdDb250ZXh0IiwiT2JqZWN0IiwiZW50cmllcyIsImNvbnRlbnQiLCJnZXRUZXh0IiwiZ2V0VGVtcGxhdGluZ1Jlc3VsdCIsInhtbElucHV0IiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJ0ZW1wbGF0ZWRYbWwiLCJ4bWxEb2MiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsIlRlbXBsYXRlTW9kZWwiLCJrZXlzIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwibWV0YU1vZGVsIiwic0tleSIsImdldE9iamVjdCIsInRvQmVEZWZpbmVkIiwib01vZGVsIiwiZ2V0VGVtcGxhdGVkWE1MIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BQ3NCQSxlLGFBQWdCQyxJLEVBQWNDLFE7UUFBd0Q7QUFDM0csVUFBTUMsUUFBUSxpREFBeUNGLElBQXpDLHlEQUFkO0FBQ0EsVUFBTUcsTUFBTSxHQUFHLElBQUlDLE1BQU0sQ0FBQ0MsU0FBWCxFQUFmO0FBQ0EsVUFBTUMsUUFBUSxHQUFHSCxNQUFNLENBQUNJLGVBQVAsQ0FBdUJMLFFBQXZCLEVBQWlDLFVBQWpDLENBQWpCLENBSDJHLENBSzNHOztBQUNBLFVBQU1NLFFBQVEsR0FBRztBQUNoQkMsUUFBQUEsTUFBTSxFQUFFLEVBRFE7QUFFaEJDLFFBQUFBLGVBQWUsRUFBRTtBQUZELE9BQWpCOztBQUlBLFdBQUssSUFBTUMsT0FBWCxJQUFvQlYsUUFBcEIsRUFBOEI7QUFDN0IsWUFBTVcsU0FBUyxHQUFHLElBQUlDLFNBQUosRUFBbEI7QUFDQUQsUUFBQUEsU0FBUyxDQUFDRSxPQUFWLENBQWtCYixRQUFRLENBQUNVLE9BQUQsQ0FBMUI7QUFDQUgsUUFBQUEsUUFBUSxDQUFDQyxNQUFULENBQWdCRSxPQUFoQixJQUF5QkMsU0FBekI7QUFDQUosUUFBQUEsUUFBUSxDQUFDRSxlQUFULENBQXlCQyxPQUF6QixJQUFrQ0gsUUFBUSxDQUFDQyxNQUFULENBQWdCRSxPQUFoQixFQUF1Qkksb0JBQXZCLENBQTRDLEdBQTVDLENBQWxDO0FBQ0EsT0FmMEcsQ0FpQjNHOzs7QUFqQjJHLDZCQWtCbkZDLGVBQWUsQ0FBQ0MsT0FBaEIsQ0FBd0JYLFFBQVEsQ0FBQ1ksaUJBQWpDLEVBQW9EO0FBQUVsQixRQUFBQSxJQUFJLEVBQUpBO0FBQUYsT0FBcEQsRUFBOERRLFFBQTlELENBbEJtRixp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TUFBdEIsQ0FBNkIwTCxJQUE3QixJQUFxQ0csTUFBckM7QUFDQSxTQU5ELEVBN0JDLENBcUNEOztBQUNBLFlBQUlMLHFCQUFxQixDQUFDeEwsTUFBdEIsQ0FBNkIsTUFBN0IsQ0FBSixFQUEwQztBQUN6Q3dMLFVBQUFBLHFCQUFxQixDQUFDdkwsZUFBdEIsQ0FBc0MsTUFBdEMsSUFBZ0R1TCxxQkFBcUIsQ0FBQ3hMLE1BQXRCLENBQTZCLE1BQTdCLEVBQXFDTSxvQkFBckMsQ0FBMEQsR0FBMUQsQ0FBaEQ7QUFDQTs7QUFFRCxlQUFPQyxlQUFlLENBQUNDLE9BQWhCLENBQXdCdUssTUFBTSxDQUFDdEssaUJBQS9CLEVBQW1EO0FBQUVsQixVQUFBQSxJQUFJLEVBQUU7QUFBUixTQUFuRCxFQUE4RWlNLHFCQUE5RSxDQUFQO0FBMUNDO0FBMkNELEtBaEQrQjtBQUFBO0FBQUE7QUFBQSxHQUF6Qjs7OztBQWtEQSxNQUFNTSxlQUFlLGFBQzNCbkIsUUFEMkIsRUFFM0J0QyxZQUYyQixFQUczQnVDLGdCQUgyQixFQUkzQkMsT0FKMkI7QUFBQSxRQUsxQjtBQUFBLDZCQUMwQkgsbUJBQW1CLENBQUNDLFFBQUQsRUFBV3RDLFlBQVgsRUFBeUJ1QyxnQkFBekIsRUFBMkNDLE9BQTNDLENBRDdDLE9BRU03SCxZQUZOO0FBR0QsS0FSMkI7QUFBQTtBQUFBO0FBQUEsR0FBckIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFueUFubm90YXRpb24sIENvbnZlcnRlck91dHB1dCwgRW50aXR5U2V0LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCwgUmVxdWlyZWRPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tSdW50aW1lXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBmb3JtYXRYbWwgPSByZXF1aXJlKFwieG1sLWZvcm1hdHRlclwiKTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwID0ge1xuXHRcIm1hY3Jvc1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb2RhdGFcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwibG9nXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcInVuaXR0ZXN0XCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdFwiY29udHJvbFwiOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdFwiY29yZVwiOiBcInNhcC51aS5jb3JlXCIsXG5cdFwibVwiOiBcInNhcC5tXCIsXG5cdFwiZlwiOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcImludGVybmFsTWFjcm9cIjogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdFwibWRjXCI6IFwic2FwLnVpLm1kY1wiLFxuXHRcIm1kY2F0XCI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdFwibWRjRmllbGRcIjogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFwibWRjVGFibGVcIjogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdFwidVwiOiBcInNhcC51aS51bmlmaWVkXCIsXG5cdFwibWFjcm9NaWNyb0NoYXJ0XCI6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdFwibWljcm9DaGFydFwiOiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdFwibWFjcm9UYWJsZVwiOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTWFjcm8gPSBmdW5jdGlvbiAobWFjcm9NZXRhZGF0YTogYW55KSB7XG5cdHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhtYWNyb01ldGFkYXRhKTtcbn07XG5leHBvcnQgY29uc3QgdW5yZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEubmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHRpZiAobWFjcm9NZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHR9XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdGxldCB4bWxGb3JtYXR0ZWQgPSBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcblx0eG1sRm9ybWF0dGVkID0geG1sRm9ybWF0dGVkLnJlcGxhY2UoL3VpZC0taWQtWzAtOV17MTN9LVswLTldL2csIFwidWlkLS1pZFwiKTtcblx0cmV0dXJuIHhtbEZvcm1hdHRlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoL3Jvb3Qke2NvbnRyb2xTZWxlY3Rvcn0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG5jb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0Y29uc3QgeG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nKSB7XG5cdHJldHVybiBmb3JtYXQoXG5cdFx0eG1sU3RyaW5nLFxuXHRcdHsgcGFyc2VyOiBcInhtbFwiLCB4bWxXaGl0ZXNwYWNlU2Vuc2l0aXZpdHk6IFwiaWdub3JlXCIgfSBhcyBQYXJ0aWFsPFJlcXVpcmVkT3B0aW9ucz4gLyogb3B0aW9ucyBieSB0aGUgUHJldHRpZXIgWE1MIHBsdWdpbiAqL1xuXHQpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKlxuICogQHBhcmFtIGNkc1VybCBUaGUgcGF0aCB0byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBDRFMgZGVmaW5pdGlvbi4gVGhpcyBmaWxlIG11c3QgZGVjbGFyZSB0aGUgbmFtZXNwYWNlIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHBhcmFtIGVkbXhGaWxlTmFtZSBBbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZSBuYW1lIG9mIHRoZSBjb21waWxlZCBFRE1YIG1ldGFkYXRhIGZpbGVcbiAqIEByZXR1cm5zIFRoZSBwYXRoIG9mIHRoZSBnZW5lcmF0ZWQgRURNWFxuICovXG5leHBvcnQgY29uc3QgY29tcGlsZUNEUyA9IGZ1bmN0aW9uIChcblx0Y2RzVXJsOiBzdHJpbmcsXG5cdG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9LFxuXHRlZG14RmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGNkc1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCIueG1sXCIpXG4pIHtcblx0Y29uc3QgY2RzU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNkc1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9ucyk7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShjZHNVcmwsIFwiLi5cIiwgXCJnZW5cIik7XG5cblx0Y29uc3QgZWRteEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGRpciwgZWRteEZpbGVOYW1lKTtcblxuXHRmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhGaWxlUGF0aCwgZWRteENvbnRlbnQpO1xuXHRyZXR1cm4gZWRteEZpbGVQYXRoO1xufTtcblxuLyoqXG4gKiBDb21waWxlIENEUyB0byBFRE1YLlxuICpcbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjc24gPSBjb21waWxlci5jb21waWxlU291cmNlcyh7IFwic3RyaW5nLmNkc1wiOiBjZHMgfSwge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogZmFsc2UsXG5cdFx0Li4ub3B0aW9ucyxcblx0XHRzZXJ2aWNlOiBzZXJ2aWNlXG5cdH07XG5cblx0Y29uc3QgZWRteCA9IGNvbXBpbGVyLnRvLmVkbXgoY3NuLCBlZG14T3B0aW9ucyk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IG9TZXJ2aWNlQ29udGV4dCA9IHsgc2NvcGVPYmplY3Q6IHt9LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9O1xuXHRyZXR1cm4gbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dCkudGhlbihmdW5jdGlvbiAob1NlcnZpY2VJbnN0YW5jZTogYW55KSB7XG5cdFx0Y29uc3Qgb0plc3RTaWRlRWZmZWN0c1NlcnZpY2UgPSBvU2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xuXHRcdG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzY29wZU9iamVjdDoge1xuXHRcdFx0XHRcdGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb01ldGFNb2RlbDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fTtcblx0XHRyZXR1cm4gb0plc3RTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVyT3V0cHV0LFxuXHRtYW5pZmVzdFNldHRpbmdzOiBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzXG4pIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVkVHlwZXMuZW50aXR5U2V0cy5maW5kKChlcykgPT4gZXMubmFtZSA9PT0gbWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KGVudGl0eVNldCBhcyBFbnRpdHlTZXQsIGNvbnZlcnRlZFR5cGVzLCBlbnRpdHlTZXQpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQoY29udmVydGVkVHlwZXMsIG1hbmlmZXN0U2V0dGluZ3MsIGdldEZha2VEaWFnbm9zdGljcygpLCBtZXJnZSwgZGF0YU1vZGVsUGF0aCk7XG59O1xuY29uc3QgbWV0YU1vZGVsQ2FjaGU6IGFueSA9IHt9O1xuZXhwb3J0IGNvbnN0IGdldE1ldGFNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uIChzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwge30pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IChPRGF0YU1ldGFNb2RlbCBhcyBhbnkpKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCBudWxsKTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVyT3V0cHV0LFxuXHRwcm9wZXJ0eT86IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvblxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0dGFyZ2V0UGF0aC5jb250ZXh0TG9jYXRpb24gPSB0YXJnZXRQYXRoO1xuXHRyZXR1cm4gdGFyZ2V0UGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBldmFsdWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ1N0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCk7XG5cblx0aWYgKG5hbWVkTW9kZWxzQ29udGVudCkge1xuXHRcdGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVkTW9kZWxzQ29udGVudCkpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gbmV3IEpTT05Nb2RlbChjb250ZW50KTtcblx0XHRcdHRleHQuc2V0TW9kZWwobW9kZWwsIG5hbWUpO1xuXHRcdFx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCwgbmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRleHQuZ2V0VGV4dCgpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGluZ1Jlc3VsdCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9XG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWG1sID0gYDxyb290PiR7eG1sSW5wdXR9PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGVtcGxhdGVkWG1sLCBcInRleHQveG1sXCIpO1xuXHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBcImNvbnZlcnRlckNvbnRleHRcIjogbmV3IFRlbXBsYXRlTW9kZWwoe30sIG9NZXRhTW9kZWwpIH0pO1xuXHR9XG5cblx0T2JqZWN0LmtleXMobU1vZGVscykuZm9yRWFjaChmdW5jdGlvbiAoc01vZGVsTmFtZSkge1xuXHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRtTW9kZWxzW3NNb2RlbE5hbWVdID0gbmV3IFRlbXBsYXRlTW9kZWwobU1vZGVsc1tzTW9kZWxOYW1lXS5kYXRhLCBvTWV0YU1vZGVsKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5nczogYW55ID0ge1xuXHRcdG1vZGVsczogT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHR9LFxuXHRcdFx0bU1vZGVsc1xuXHRcdCksXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fVxuXHR9O1xuXG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbC5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW3NLZXldID0gb01vZGVsO1xuXHR9KTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdHJldHVybiBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyh4bWxEb2MuZmlyc3RFbGVtZW50Q2hpbGQhLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH1cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KHhtbElucHV0LCBzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMpO1xuXHRyZXR1cm4gc2VyaWFsaXplWE1MKHRlbXBsYXRlZFhNTCk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCBYTUwgZnJhZ21lbnQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IHRlc3REYXRhIFRlc3QgZGF0YSBjb25zaXN0aW5nXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgZnJhZ21lbnQgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJhZ21lbnQobmFtZTogc3RyaW5nLCB0ZXN0RGF0YTogeyBbbW9kZWw6IHN0cmluZ106IG9iamVjdCB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgaW5wdXRYbWwgPSBgPHJvb3Q+PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwiJHtuYW1lfVwiIHR5cGU9XCJYTUxcIiB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIiAvPjwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0O1xuXHR9XG5cblx0Ly8gZXhlY3V0ZSB0aGUgcHJlLXByb2Nlc3NvclxuXHRjb25zdCByZXN1bHREb2MgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhpbnB1dERvYy5maXJzdEVsZW1lbnRDaGlsZCwgeyBuYW1lIH0sIHNldHRpbmdzKTtcblxuXHQvLyBleGNsdWRlIG5lc3RlZCBmcmFnbWVudHMgZnJvbSB0ZXN0IHNuYXBzaG90c1xuXHRjb25zdCBmcmFnbWVudHMgPSByZXN1bHREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb3JlOkZyYWdtZW50XCIpO1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhtbCh4bWxSZXN1bHQsIHtcblx0XHRmaWx0ZXI6IChub2RlOiBhbnkpID0+IG5vZGUudHlwZSAhPT0gXCJDb21tZW50XCJcblx0fSk7XG59XG4iXX0=
|