@sapui5/sap.fe.core 1.99.0 → 1.99.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/core/.library +1 -1
- package/src/sap/fe/core/TemplateModel.js +3 -3
- package/src/sap/fe/core/TemplateModel.ts +2 -1
- package/src/sap/fe/core/actions/draft.js +4 -2
- package/src/sap/fe/core/actions/draft.ts +37 -35
- package/src/sap/fe/core/controllerextensions/EditFlow.js +134 -199
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
- package/src/sap/fe/core/library.js +1 -1
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/ui/base/Object", "sap/ui/model/json/JSONModel", "sap/fe/core/helpers/ClassSupport"], function (BaseObject, JSONModel, ClassSupport) {
|
|
5
|
+
sap.ui.define(["sap/ui/base/Object", "sap/ui/model/json/JSONModel", "sap/fe/core/helpers/ClassSupport", "sap/ui/base/Metadata"], function (BaseObject, JSONModel, ClassSupport, Metadata) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _class;
|
|
@@ -29,7 +29,7 @@ sap.ui.define(["sap/ui/base/Object", "sap/ui/model/json/JSONModel", "sap/fe/core
|
|
|
29
29
|
|
|
30
30
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
31
31
|
|
|
32
|
-
var TemplateModel = (_dec = UI5Class("sap.fe.core.TemplateModel"), _dec(_class = /*#__PURE__*/function (_BaseObject) {
|
|
32
|
+
var TemplateModel = (_dec = UI5Class("sap.fe.core.TemplateModel", Metadata), _dec(_class = /*#__PURE__*/function (_BaseObject) {
|
|
33
33
|
_inherits(TemplateModel, _BaseObject);
|
|
34
34
|
|
|
35
35
|
var _super = _createSuper(TemplateModel);
|
|
@@ -96,4 +96,4 @@ sap.ui.define(["sap/ui/base/Object", "sap/ui/model/json/JSONModel", "sap/fe/core
|
|
|
96
96
|
}(BaseObject)) || _class);
|
|
97
97
|
return TemplateModel;
|
|
98
98
|
}, false);
|
|
99
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
99
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlbXBsYXRlTW9kZWwudHMiXSwibmFtZXMiOlsiVGVtcGxhdGVNb2RlbCIsIlVJNUNsYXNzIiwiTWV0YWRhdGEiLCJwYWdlQ29uZmlnIiwib01ldGFNb2RlbCIsIm9Db25maWdNb2RlbCIsIkpTT05Nb2RlbCIsInNldFNpemVMaW1pdCIsIk51bWJlciIsIk1BWF9WQUxVRSIsImJDb25maWdMb2FkZWQiLCJ0aGF0IiwiZm5HZXRPYmplY3QiLCJfZ2V0T2JqZWN0IiwiYmluZCIsInNQYXRoIiwib0NvbnRleHQiLCJzZXREYXRhIiwiZm5DcmVhdGVNZXRhQmluZGluZ0NvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImZuQ3JlYXRlQ29uZmlnQmluZGluZ0NvbnRleHQiLCJtUGFyYW1ldGVycyIsImZuQ2FsbEJhY2siLCJvQmluZGluZ0NvbnRleHQiLCJiTm9SZXNvbHZlIiwibm9SZXNvbHZlIiwic1Jlc29sdmVkUGF0aCIsImdldE9iamVjdCIsImRlc3Ryb3kiLCJwcm90b3R5cGUiLCJhcHBseSIsIkJhc2VPYmplY3QiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFLTUEsYSxXQURMQyxRQUFRLENBQUMsMkJBQUQsRUFBOEJDLFFBQTlCLEM7Ozs7O0FBUVIsMkJBQVlDLFVBQVosRUFBNkJDLFVBQTdCLEVBQXlEO0FBQUE7O0FBQUE7O0FBQ3hEO0FBQ0EsWUFBS0EsVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxZQUFLQyxZQUFMLEdBQW9CLElBQUlDLFNBQUosRUFBcEIsQ0FId0QsQ0FJeEQ7O0FBQ0EsWUFBS0QsWUFBTCxDQUFrQkUsWUFBbEIsQ0FBK0JDLE1BQU0sQ0FBQ0MsU0FBdEM7O0FBQ0EsWUFBS0MsYUFBTCxHQUFxQixLQUFyQixDQU53RCxDQU94RDs7QUFDQSxVQUFNQyxJQUFJLGdDQUFWOztBQUVBLFVBQUksT0FBT1IsVUFBUCxLQUFzQixVQUExQixFQUFzQztBQUNyQyxZQUFNUyxXQUFXLEdBQUcsTUFBS1AsWUFBTCxDQUFrQlEsVUFBbEIsQ0FBNkJDLElBQTdCLENBQWtDLE1BQUtULFlBQXZDLENBQXBCOztBQUNBLGNBQUtBLFlBQUwsQ0FBa0JRLFVBQWxCLEdBQStCLFVBQVNFLEtBQVQsRUFBcUJDLFFBQXJCLEVBQW9DO0FBQ2xFLGNBQUksQ0FBQ0wsSUFBSSxDQUFDRCxhQUFWLEVBQXlCO0FBQ3hCLGlCQUFLTyxPQUFMLENBQWFkLFVBQVUsRUFBdkI7QUFDQVEsWUFBQUEsSUFBSSxDQUFDRCxhQUFMLEdBQXFCLElBQXJCO0FBQ0E7O0FBQ0QsaUJBQU9FLFdBQVcsQ0FBQ0csS0FBRCxFQUFRQyxRQUFSLENBQWxCO0FBQ0EsU0FORDtBQU9BLE9BVEQsTUFTTztBQUNOLGNBQUtYLFlBQUwsQ0FBa0JZLE9BQWxCLENBQTBCZCxVQUExQjtBQUNBOztBQUVELFlBQUtlLDBCQUFMLEdBQWtDLE1BQUtkLFVBQUwsQ0FBZ0JlLG9CQUFoQixDQUFxQ0wsSUFBckMsQ0FBMEMsTUFBS1YsVUFBL0MsQ0FBbEM7QUFDQSxZQUFLZ0IsNEJBQUwsR0FBb0MsTUFBS2YsWUFBTCxDQUFrQmMsb0JBQWxCLENBQXVDTCxJQUF2QyxDQUE0QyxNQUFLVCxZQUFqRCxDQUFwQztBQUVBLFlBQUtBLFlBQUwsQ0FBa0JjLG9CQUFsQixHQUF5QyxNQUFLQSxvQkFBTCxDQUEwQkwsSUFBMUIsK0JBQXpDO0FBQ0EsK0NBQU8sTUFBS1QsWUFBWjtBQUNBOzs7O2FBRUQsOEJBQXFCVSxLQUFyQixFQUFpQ0MsUUFBakMsRUFBZ0RLLFdBQWhELEVBQWtFQyxVQUFsRSxFQUFvRjtBQUNuRixZQUFJQyxlQUFKO0FBQ0EsWUFBTUMsVUFBVSxHQUFHSCxXQUFXLElBQUlBLFdBQVcsQ0FBQ0ksU0FBOUM7QUFFQUYsUUFBQUEsZUFBZSxHQUFHLEtBQUtILDRCQUFMLENBQWtDTCxLQUFsQyxFQUF5Q0MsUUFBekMsRUFBbURLLFdBQW5ELEVBQWdFQyxVQUFoRSxDQUFsQjtBQUNBLFlBQU1JLGFBQWEsR0FBRyxDQUFDRixVQUFELElBQWVELGVBQWUsQ0FBQ0ksU0FBaEIsRUFBckM7O0FBQ0EsWUFBSUQsYUFBYSxJQUFJLE9BQU9BLGFBQVAsS0FBeUIsUUFBOUMsRUFBd0Q7QUFDdkRILFVBQUFBLGVBQWUsR0FBRyxLQUFLTCwwQkFBTCxDQUFnQ1EsYUFBaEMsRUFBK0NWLFFBQS9DLEVBQXlESyxXQUF6RCxFQUFzRUMsVUFBdEUsQ0FBbEI7QUFDQTs7QUFFRCxlQUFPQyxlQUFQO0FBQ0E7OzthQUVELG1CQUFVO0FBQ1QsYUFBS2xCLFlBQUwsQ0FBa0J1QixPQUFsQjtBQUNBdEIsUUFBQUEsU0FBUyxDQUFDdUIsU0FBVixDQUFvQkQsT0FBcEIsQ0FBNEJFLEtBQTVCLENBQWtDLElBQWxDO0FBQ0E7Ozs7SUFyRDBCQyxVO1NBd0RiL0IsYSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgeyBVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWV0YWRhdGFcIjtcblxuQFVJNUNsYXNzKFwic2FwLmZlLmNvcmUuVGVtcGxhdGVNb2RlbFwiLCBNZXRhZGF0YSlcbmNsYXNzIFRlbXBsYXRlTW9kZWwgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcblx0cHVibGljIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXHRwdWJsaWMgb0NvbmZpZ01vZGVsOiBhbnk7XG5cdHB1YmxpYyBiQ29uZmlnTG9hZGVkOiBib29sZWFuO1xuXHRwdWJsaWMgZm5DcmVhdGVNZXRhQmluZGluZ0NvbnRleHQ6IEZ1bmN0aW9uO1xuXHRwdWJsaWMgZm5DcmVhdGVDb25maWdCaW5kaW5nQ29udGV4dDogRnVuY3Rpb247XG5cblx0Y29uc3RydWN0b3IocGFnZUNvbmZpZzogYW55LCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0XHR0aGlzLm9Db25maWdNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHQvLyBkb24ndCBsaW1pdCBhZ2dyZWdhdGlvbiBiaW5kaW5nc1xuXHRcdHRoaXMub0NvbmZpZ01vZGVsLnNldFNpemVMaW1pdChOdW1iZXIuTUFYX1ZBTFVFKTtcblx0XHR0aGlzLmJDb25maWdMb2FkZWQgPSBmYWxzZTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblxuXHRcdGlmICh0eXBlb2YgcGFnZUNvbmZpZyA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRjb25zdCBmbkdldE9iamVjdCA9IHRoaXMub0NvbmZpZ01vZGVsLl9nZXRPYmplY3QuYmluZCh0aGlzLm9Db25maWdNb2RlbCk7XG5cdFx0XHR0aGlzLm9Db25maWdNb2RlbC5fZ2V0T2JqZWN0ID0gZnVuY3Rpb24oc1BhdGg6IGFueSwgb0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRpZiAoIXRoYXQuYkNvbmZpZ0xvYWRlZCkge1xuXHRcdFx0XHRcdHRoaXMuc2V0RGF0YShwYWdlQ29uZmlnKCkpO1xuXHRcdFx0XHRcdHRoYXQuYkNvbmZpZ0xvYWRlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZuR2V0T2JqZWN0KHNQYXRoLCBvQ29udGV4dCk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9Db25maWdNb2RlbC5zZXREYXRhKHBhZ2VDb25maWcpO1xuXHRcdH1cblxuXHRcdHRoaXMuZm5DcmVhdGVNZXRhQmluZGluZ0NvbnRleHQgPSB0aGlzLm9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQuYmluZCh0aGlzLm9NZXRhTW9kZWwpO1xuXHRcdHRoaXMuZm5DcmVhdGVDb25maWdCaW5kaW5nQ29udGV4dCA9IHRoaXMub0NvbmZpZ01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0LmJpbmQodGhpcy5vQ29uZmlnTW9kZWwpO1xuXG5cdFx0dGhpcy5vQ29uZmlnTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQgPSB0aGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0LmJpbmQodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXMub0NvbmZpZ01vZGVsO1xuXHR9XG5cblx0Y3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGg6IGFueSwgb0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgZm5DYWxsQmFjaz86IGFueSkge1xuXHRcdGxldCBvQmluZGluZ0NvbnRleHQ7XG5cdFx0Y29uc3QgYk5vUmVzb2x2ZSA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLm5vUmVzb2x2ZTtcblxuXHRcdG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZm5DcmVhdGVDb25maWdCaW5kaW5nQ29udGV4dChzUGF0aCwgb0NvbnRleHQsIG1QYXJhbWV0ZXJzLCBmbkNhbGxCYWNrKTtcblx0XHRjb25zdCBzUmVzb2x2ZWRQYXRoID0gIWJOb1Jlc29sdmUgJiYgb0JpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGlmIChzUmVzb2x2ZWRQYXRoICYmIHR5cGVvZiBzUmVzb2x2ZWRQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRvQmluZGluZ0NvbnRleHQgPSB0aGlzLmZuQ3JlYXRlTWV0YUJpbmRpbmdDb250ZXh0KHNSZXNvbHZlZFBhdGgsIG9Db250ZXh0LCBtUGFyYW1ldGVycywgZm5DYWxsQmFjayk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9CaW5kaW5nQ29udGV4dDtcblx0fVxuXG5cdGRlc3Ryb3koKSB7XG5cdFx0dGhpcy5vQ29uZmlnTW9kZWwuZGVzdHJveSgpO1xuXHRcdEpTT05Nb2RlbC5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZU1vZGVsO1xuIl19
|
|
@@ -2,8 +2,9 @@ import BaseObject from "sap/ui/base/Object";
|
|
|
2
2
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
3
3
|
import { UI5Class } from "sap/fe/core/helpers/ClassSupport";
|
|
4
4
|
import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
5
|
+
import Metadata from "sap/ui/base/Metadata";
|
|
5
6
|
|
|
6
|
-
@UI5Class("sap.fe.core.TemplateModel")
|
|
7
|
+
@UI5Class("sap.fe.core.TemplateModel", Metadata)
|
|
7
8
|
class TemplateModel extends BaseObject {
|
|
8
9
|
public oMetaModel: ODataMetaModel;
|
|
9
10
|
public oConfigModel: any;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/actions/messageHandling", "sap/fe/core/CommonUtils", "sap/m/Button", "sap/m/Dialog", "sap/m/MessageBox", "sap/m/Text"], function (Log, messageHandling, CommonUtils, Button, Dialog, MessageBox, Text) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -442,6 +442,8 @@ sap.ui.define(["sap/m/Dialog", "sap/m/Button", "sap/m/Text", "sap/m/MessageBox",
|
|
|
442
442
|
return executeDraftEditAction(oContext, bRunPreserveChangesFlow).catch(function (oResponse) {
|
|
443
443
|
//Only call back if error 409
|
|
444
444
|
if (bRunPreserveChangesFlow && oResponse.status === 409) {
|
|
445
|
+
messageHandling.removeBoundTransitionMessages();
|
|
446
|
+
messageHandling.removeUnboundTransitionMessages();
|
|
445
447
|
return Promise.resolve(mParam.fnWhenDecisionToOverwriteDocumentIsRequired ? mParam.fnWhenDecisionToOverwriteDocumentIsRequired() : true).then(overwriteOnDemand);
|
|
446
448
|
} else {
|
|
447
449
|
throw new Error(oResponse);
|
|
@@ -558,4 +560,4 @@ sap.ui.define(["sap/m/Dialog", "sap/m/Button", "sap/m/Text", "sap/m/MessageBox",
|
|
|
558
560
|
|
|
559
561
|
return draft;
|
|
560
562
|
}, false);
|
|
561
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyYWZ0LnRzIl0sIm5hbWVzIjpbImRyYWZ0T3BlcmF0aW9ucyIsIkVESVQiLCJBQ1RJVkFUSU9OIiwiRElTQ0FSRCIsIlBSRVBBUkUiLCJkcmFmdCIsImNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYWN0aXZhdGVEb2N1bWVudCIsImRlbGV0ZURyYWZ0IiwiZ2V0QWN0aW9uTmFtZSIsIm9Db250ZXh0Iiwic09wZXJhdGlvbiIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZ2V0T2JqZWN0IiwiY3JlYXRlT3BlcmF0aW9uIiwib09wdGlvbnMiLCJzT3BlcmF0aW9uTmFtZSIsImJpbmRDb250ZXh0IiwiaGFzUHJlcGFyZUFjdGlvbiIsImV4ZWN1dGVEcmFmdEVkaXRBY3Rpb24iLCJiUHJlc2VydmVDaGFuZ2VzIiwiZ2V0UHJvcGVydHkiLCIkJGluaGVyaXRFeHBhbmRTZWxlY3QiLCJvT3BlcmF0aW9uIiwic2V0UGFyYW1ldGVyIiwic0dyb3VwSWQiLCJvRWRpdFByb21pc2UiLCJleGVjdXRlIiwidGhlbiIsIm9EcmFmdERvY3VtZW50Q29udGV4dCIsInN1Ym1pdEJhdGNoIiwiRXJyb3IiLCJleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uIiwib0FwcENvbXBvbmVudCIsImJIYXNQcmVwYXJlQWN0aW9uIiwiYklnbm9yZUV0YWciLCJvQWN0aXZlRG9jdW1lbnRDb250ZXh0IiwiY2F0Y2giLCJzQWN0aW9uTmFtZSIsIm9TaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJvQmluZGluZ1BhcmFtZXRlcnMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwiYVRhcmdldFBhdGhzIiwicGF0aEV4cHJlc3Npb25zIiwibGVuZ3RoIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJyZXF1ZXN0TWVzc2FnZXMiLCJQcm9taXNlIiwicmVqZWN0IiwiZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24iLCJtUGFyYW1ldGVycyIsIm1QYXJhbXMiLCJncm91cElkIiwiZ2V0R3JvdXBJZCIsIm9QcmVwYXJhdGlvblByb21pc2UiLCJiUHJlcGFyZUZvckVkaXQiLCJnZXRNZXNzYWdlc1BhdGgiLCJzTWVzc2FnZXNQYXRoIiwiJFByb3BlcnR5UGF0aCIsInJlc29sdmUiLCJleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uIiwib0Rpc2NhcmRPcGVyYXRpb24iLCJvRGlzY2FyZFByb21pc2UiLCJtUGFyYW0iLCJsb2NhbEkxOG5SZWYiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyIsIm92ZXJ3cml0ZU9uRGVtYW5kIiwiYk92ZXJ3cml0ZSIsImRyYWZ0RGF0YUNvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvUmVzb3VyY2VCdW5kbGUiLCJvVmlldyIsImdldFJlc291cmNlQnVuZGxlIiwiX29SZXNvdXJjZUJ1bmRsZSIsInJlcXVlc3RPYmplY3QiLCJkcmFmdEFkbWluRGF0YSIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzSW5mbyIsIkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uIiwiSW5Qcm9jZXNzQnlVc2VyIiwic0VudGl0eVNldCIsImdldFZpZXdEYXRhIiwiZW50aXR5U2V0Iiwic0xvY2tlZEJ5VXNlck1zZyIsIkNvbW1vblV0aWxzIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJNZXNzYWdlQm94IiwiQ3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uIiwiQ3JlYXRlZEJ5VXNlciIsInNVbnNhdmVkQ2hhbmdlc01zZyIsInNob3dNZXNzYWdlQm94Iiwib0RpYWxvZyIsIkRpYWxvZyIsInRpdGxlIiwiZ2V0VGV4dCIsInN0YXRlIiwiY29udGVudCIsIlRleHQiLCJ0ZXh0IiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0eXBlIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJmbkJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYkV4ZWN1dGUiLCJvUmVzcG9uc2UiLCJzdGF0dXMiLCJmbldoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkIiwib0RyYWZ0Q29udGV4dCIsImZuQWZ0ZXJDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudCIsImJQcmVwYXJlT25FZGl0IiwiZXhjIiwiZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50Iiwic0JhdGNoR3JvdXAiLCJvUHJlcGFyZVByb21pc2UiLCJvQWN0aXZhdGVQcm9taXNlIiwiYWxsIiwidmFsdWVzIiwiZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQiLCJzRGlzY2FyZEFjdGlvbiIsImJJc0FjdGl2ZUVudGl0eSIsIklzQWN0aXZlRW50aXR5IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiZGVsZXRlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQSxNQUFNQSxlQUFlLEdBQUc7QUFDdkJDLElBQUFBLElBQUksRUFBRSxZQURpQjtBQUV2QkMsSUFBQUEsVUFBVSxFQUFFLGtCQUZXO0FBR3ZCQyxJ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QUFDQyxNQUFSLENBQWUwRSxHQUFmLENBQVA7QUFDQSxLQXBDSyxDQUFQO0FBcUNBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVM1SCxXQUFULENBQXFCRSxRQUFyQixFQUFzRDtBQUNyRCxRQUFNa0ksY0FBYyxHQUFHbkksYUFBYSxDQUFDQyxRQUFELEVBQVdWLGVBQWUsQ0FBQ0csT0FBM0IsQ0FBcEM7QUFBQSxRQUNDMEksZUFBZSxHQUFHbkksUUFBUSxDQUFDUyxTQUFULEdBQXFCMkgsY0FEeEM7O0FBR0EsUUFBSUQsZUFBZSxJQUFLLENBQUNBLGVBQUQsSUFBb0IsQ0FBQ0QsY0FBN0MsRUFBOEQ7QUFDN0Q7QUFDQSxVQUFJbEksUUFBUSxDQUFDcUksaUJBQVQsRUFBSixFQUFrQztBQUNqQyxlQUFPckksUUFBUSxDQUNic0ksVUFESyxHQUVMQyxZQUZLLEdBR0wvRyxJQUhLLENBR0EsWUFBVztBQUNoQixpQkFBT3hCLFFBQVEsQ0FBQ3dJLE1BQVQsRUFBUDtBQUNBLFNBTEssRUFNTHZHLEtBTkssQ0FNQyxVQUFTWSxLQUFULEVBQXFCO0FBQzNCLGlCQUFPRSxPQUFPLENBQUNDLE1BQVIsQ0FBZUgsS0FBZixDQUFQO0FBQ0EsU0FSSyxDQUFQO0FBU0EsT0FWRCxNQVVPO0FBQ04sZUFBTzdDLFFBQVEsQ0FBQ3dJLE1BQVQsRUFBUDtBQUNBO0FBQ0QsS0FmRCxNQWVPO0FBQ047QUFDQSxhQUFPNUUseUJBQXlCLENBQUM1RCxRQUFELENBQWhDO0FBQ0E7QUFDRDs7U0FFY0wsSyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvYWN0aW9ucy9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlXCI7XG5pbXBvcnQgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY2FsbGJhY2tzIHVzZWQgaW4gdGhlIGZ1bmN0aW9uc1xuICpcbiAqXG4gKiBAYXV0aG9yIFNBUCBTRVxuICogQHNpbmNlIDEuNTQuMFxuICogQGludGVyZmFjZVxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBDYWxsYmFjayB0byBhcHByb3ZlIG9yIHJlamVjdCB0aGUgY3JlYXRpb24gb2YgYSBkcmFmdFxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2suYmVmb3JlQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRcbiAqIEBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQGFic3RyYWN0XG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEByZXR1cm5zIHsoYm9vbGVhbnxQcm9taXNlKX0gQXBwcm92YWwgb2YgZHJhZnQgY3JlYXRpb24gW3RydWV8ZmFsc2VdIG9yIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBib29sZWFuIHZhbHVlXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIGFmdGVyIGEgZHJhZnQgd2FzIHN1Y2Nlc3N1bGx5IGNyZWF0ZWRcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLmFmdGVyQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRcbiAqIEBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQGFic3RyYWN0XG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBuZXcgZHJhZnRcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9BY3RpdmVEb2N1bWVudENvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcmV0dXJucyB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9BY3RpdmVEb2N1bWVudENvbnRleHRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogQ2FsbGJhY2sgdG8gYXBwcm92ZSBvciByZWplY3Qgb3ZlcndyaXRpbmcgYW4gdW5zYXZlZCBkcmFmdCBvZiBhbm90aGVyIHVzZXJcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLndoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkXG4gKiBAZnVuY3Rpb25cbiAqIEBwdWJsaWNcbiAqIEBzdGF0aWNcbiAqIEBhYnN0cmFjdFxuICpcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHJldHVybnMgeyhib29sZWFufFByb21pc2UpfSBBcHByb3ZhbCB0byBvdmVyd3JpdGUgdW5zYXZlZCBkcmFmdCBbdHJ1ZXxmYWxzZV0gb3IgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGJvb2xlYW4gdmFsdWVcbiAqXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuLyogQ29uc3RhbnRzIGZvciBkcmFmdCBvcGVyYXRpb25zICovXG5jb25zdCBkcmFmdE9wZXJhdGlvbnMgPSB7XG5cdEVESVQ6IFwiRWRpdEFjdGlvblwiLFxuXHRBQ1RJVkFUSU9OOiBcIkFjdGl2YXRpb25BY3Rpb25cIixcblx0RElTQ0FSRDogXCJEaXNjYXJkQWN0aW9uXCIsXG5cdFBSRVBBUkU6IFwiUHJlcGFyYXRpb25BY3Rpb25cIlxufTtcbi8qKlxuICogU3RhdGljIGZ1bmN0aW9ucyBmb3IgdGhlIGRyYWZ0IHByb2dyYW1taW5nIG1vZGVsXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTQuMFxuICovXG5jb25zdCBkcmFmdCA9IHtcblx0Y3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQ6IGNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50LFxuXHRhY3RpdmF0ZURvY3VtZW50OiBhY3RpdmF0ZURvY3VtZW50LFxuXHRkZWxldGVEcmFmdDogZGVsZXRlRHJhZnRcbn07XG4vKipcbiAqIERldGVybWluZXMgYWN0aW9uIG5hbWUgZm9yIGEgZHJhZnQgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzT3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gbmFtZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGRyYWZ0IG9wZXJhdGlvblxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb25OYW1lKG9Db250ZXh0OiBhbnksIHNPcGVyYXRpb246IHN0cmluZykge1xuXHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0VudGl0eVNldFBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cblx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9cIiArIHNPcGVyYXRpb24pO1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIG9wZXJhdGlvbiBjb250ZXh0IGJpbmRpbmcgZm9yIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBzaG91bGQgYmUgYm91bmQgdG8gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHNPcGVyYXRpb24gVGhlIG9wZXJhdGlvbiAoYWN0aW9uIG9yIGZ1bmN0aW9uIGltcG9ydClcbiAqIEBwYXJhbSBvT3B0aW9ucyBPcHRpb25zIHRvIGNyZWF0ZSB0aGUgb3BlcmF0aW9uIGNvbnRleHRcbiAqIEByZXR1cm5zIHtzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ30gVGhlIGNvbnRleHQgYmluZGluZyBvZiB0aGUgYm91bmQgb3BlcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dDogYW55LCBzT3BlcmF0aW9uOiBzdHJpbmcsIG9PcHRpb25zPzogYW55KSB7XG5cdGNvbnN0IHNPcGVyYXRpb25OYW1lID0gZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgc09wZXJhdGlvbik7XG5cblx0cmV0dXJuIG9Db250ZXh0LmdldE1vZGVsKCkuYmluZENvbnRleHQoc09wZXJhdGlvbk5hbWUgKyBcIiguLi4pXCIsIG9Db250ZXh0LCBvT3B0aW9ucyk7XG59XG4vKipcbiAqIENoZWNrIGlmIG9wdGlvbmFsIGRyYWZ0IHByZXBhcmUgYWN0aW9uIGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBhIGEgcHJlcGFyZSBhY3Rpb24gZXhpc3RzXG4gKi9cbmZ1bmN0aW9uIGhhc1ByZXBhcmVBY3Rpb24ob0NvbnRleHQ6IGFueSkge1xuXHRyZXR1cm4gISFnZXRBY3Rpb25OYW1lKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuUFJFUEFSRSk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZHJhZnQgZnJvbSBhbiBhY3RpdmUgZG9jdW1lbnQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYlByZXNlcnZlQ2hhbmdlcyBJZiB0cnVlIC0gZXhpc3RpbmcgY2hhbmdlcyBmcm9tIGFub3RoZXIgdXNlciB0aGF0IGFyZSBub3QgbG9ja2VkIGFyZSBwcmVzZXJ2ZWQgYW5kIGFuIGVycm9yIG1lc3NhZ2UgKGh0dHAgc3RhdHVzIDQwOSkgaXMgc2VuZCBmcm9tIHRoZSBiYWNrZW5kLCBvdGhlcndpc2UgZmFsc2UgLSBleGlzdGluZyBjaGFuZ2VzIGZyb20gYW5vdGhlciB1c2VyIHRoYXQgYXJlIG5vdCBsb2NrZWQgYXJlIG92ZXJ3cml0dGVuPC9saT5cbiAqIEByZXR1cm5zIHtQcm9taXNlLjxzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dD59IFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEcmFmdEVkaXRBY3Rpb24ob0NvbnRleHQ6IGFueSwgYlByZXNlcnZlQ2hhbmdlczogYm9vbGVhbikge1xuXHRpZiAob0NvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSkge1xuXHRcdGNvbnN0IG9PcHRpb25zID0geyAkJGluaGVyaXRFeHBhbmRTZWxlY3Q6IHRydWUgfTtcblx0XHRjb25zdCBvT3BlcmF0aW9uID0gY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuRURJVCwgb09wdGlvbnMpO1xuXHRcdG9PcGVyYXRpb24uc2V0UGFyYW1ldGVyKFwiUHJlc2VydmVDaGFuZ2VzXCIsIGJQcmVzZXJ2ZUNoYW5nZXMpO1xuXHRcdGNvbnN0IHNHcm91cElkID0gXCJkaXJlY3RcIjtcblx0XHRjb25zdCBvRWRpdFByb21pc2UgPSBvT3BlcmF0aW9uLmV4ZWN1dGUoc0dyb3VwSWQpLnRoZW4oZnVuY3Rpb24ob0RyYWZ0RG9jdW1lbnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdHJldHVybiBvRHJhZnREb2N1bWVudENvbnRleHQ7XG5cdFx0fSk7XG5cdFx0b09wZXJhdGlvbi5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRyZXR1cm4gb0VkaXRQcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIllvdSBjYW5ub3QgZWRpdCB0aGlzIGRyYWZ0IGRvY3VtZW50XCIpO1xuXHR9XG59XG4vKmZ1bmN0aW9uIGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZChvQ29udGV4dDogYW55LCBzR3JvdXBJZDogYW55LCBhTWVzc2FnZXM6IGFueSkgeyAvL1dpbGwgdW5jb21tZW50IHRoaXMgZnVuY3Rpb24gaW4gdGhlIGNvbW1pdCA6IDU1MTM1MTBcblx0aWYgKGFNZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCBzTWVzc2FnZSA9IGFNZXNzYWdlc1swXS5tZXNzYWdlLFxuXHRcdFx0ZGlhbG9nUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9tL01lc3NhZ2VCb3hcIl0sIGZ1bmN0aW9uKE1lc3NhZ2VCb3g6IGFueSkge1xuXHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzTWVzc2FnZSwge1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW01lc3NhZ2VCb3guQWN0aW9uLk9LLCBNZXNzYWdlQm94LkFjdGlvbi5DQU5DRUxdLFxuXHRcdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24oc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzQWN0aW9uID09PSBNZXNzYWdlQm94LkFjdGlvbi5PSykge1xuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gZGlhbG9nUHJvbWlzZTtcblx0fVxufSovXG4vKipcbiAqIEFjdGl2YXRlcyBhIGRyYWZ0IGRvY3VtZW50LiBUaGUgZHJhZnQgd2lsbCByZXBsYWNlIHRoZSBzaWJsaW5nIGVudGl0eSBhbmQgd2lsbCBiZSBkZWxldGVkIGJ5IHRoZSBiYWNrIGVuZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIHtvYmplY3R9IG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIHtzdHJpbmd9IFtzR3JvdXBJZF0gVGhlIG9wdGlvbmFsIGJhdGNoIGdyb3VwIGluIHdoaWNoIHRoZSBvcGVyYXRpb24gaXMgdG8gYmUgZXhlY3V0ZWRcbiAqIEByZXR1cm5zIHtQcm9taXNlLjxzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dD59IFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEcmFmdEFjdGl2YXRpb25BY3Rpb24ob0NvbnRleHQ6IGFueSwgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBzR3JvdXBJZD86IHN0cmluZykge1xuXHRjb25zdCBiSGFzUHJlcGFyZUFjdGlvbiA9IGhhc1ByZXBhcmVBY3Rpb24ob0NvbnRleHQpO1xuXG5cdC8vIEFjY29yZGluZyB0byB0aGUgZHJhZnQgc3BlYyBpZiB0aGUgc2VydmljZSBjb250YWlucyBhIHByZXBhcmUgYWN0aW9uIGFuZCB3ZSB0cmlnZ2VyIGJvdGggcHJlcGFyZSBhbmRcblx0Ly8gYWN0aXZhdGUgaW4gb25lICRiYXRjaCB0aGUgYWN0aXZhdGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRoIGlGLU1hdGNoPSpcblx0Y29uc3QgYklnbm9yZUV0YWcgPSBiSGFzUHJlcGFyZUFjdGlvbjtcblxuXHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvT3BlcmF0aW9uID0gY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuQUNUSVZBVElPTiwgeyAkJGluaGVyaXRFeHBhbmRTZWxlY3Q6IHRydWUgfSk7XG5cdFx0cmV0dXJuIG9PcGVyYXRpb25cblx0XHRcdC5leGVjdXRlKHNHcm91cElkLCBiSWdub3JlRXRhZylcblx0XHRcdC50aGVuKGZ1bmN0aW9uKG9BY3RpdmVEb2N1bWVudENvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0FjdGl2ZURvY3VtZW50Q29udGV4dDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goXG5cdFx0XHRcdC8vaWYgQUNUSVZBVEUgYWN0aW9uIGZhaWxzIHRoZW4gd2UgcmVxdWVzdCBlaXRoZXIgdGhlIHNpZGVFZmZlY3RzIGFnYWluc3QgUFJFUEFSRSBhY3Rpb24gKGlmIGFubm90YXRlZCkgb3IgdGhlIG1lc3NhZ2VzIGFzIGZhbGxiYWNrOlxuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoYkhhc1ByZXBhcmVBY3Rpb24pIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNBY3Rpb25OYW1lID0gZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUpLFxuXHRcdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKSxcblx0XHRcdFx0XHRcdFx0b0JpbmRpbmdQYXJhbWV0ZXJzID0gb1NpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHNBY3Rpb25OYW1lLCBvQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGFUYXJnZXRQYXRocyA9IG9CaW5kaW5nUGFyYW1ldGVycyAmJiBvQmluZGluZ1BhcmFtZXRlcnMucGF0aEV4cHJlc3Npb25zO1xuXHRcdFx0XHRcdFx0aWYgKGFUYXJnZXRQYXRocyAmJiBhVGFyZ2V0UGF0aHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhhVGFyZ2V0UGF0aHMsIG9Db250ZXh0KS5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE1lc3NhZ2VzKG9Db250ZXh0LCBvU2lkZUVmZmVjdHNTZXJ2aWNlKS5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3RpbmcgbWVzc2FnZXNcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBhY3RpdmF0aW9uIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gYW4gYWN0aXZlIGRvY3VtZW50XCIpO1xuXHR9XG59XG4vKipcbiAqIEV4ZWN1dGUgYSBwcmVwYXJhdGlvbiBhY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBtUGFyYW1ldGVycyBUaGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuZ3JvdXBJZF0gVGhlIG9wdGlvbmFsIGJhdGNoIGdyb3VwIHdoZXJlIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgb3BlcmF0aW9uIGluXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iUHJlcGFyZUZvckVkaXRdIFNoYWxsIHRoZSBtZXNzYWdlcyBiZSByZXF1ZXN0ZWQgaWYgc3VwcG9ydGVkIGJ5IHNlcnZpY2VcbiAqIEByZXR1cm5zIHtQcm9taXNlLjxzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dD59IFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uKFxuXHRvQ29udGV4dDogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiB7IGdyb3VwSWQ/OiBzdHJpbmc7IGJQcmVwYXJlRm9yRWRpdD86IGJvb2xlYW4gfVxuKSB7XG5cdGNvbnN0IG1QYXJhbXMgPSBtUGFyYW1ldGVycyB8fCB7fTtcblx0aWYgKCFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUpO1xuXG5cdFx0Ly8gVE9ETzogc2lkZSBlZmZlY3RzIHF1YWxpZmllciBzaGFsbCBiZSBldmVuIGRlcHJlY2F0ZWQgdG8gYmUgY2hlY2tlZFxuXHRcdG9PcGVyYXRpb24uc2V0UGFyYW1ldGVyKFwiU2lkZUVmZmVjdHNRdWFsaWZpZXJcIiwgXCJcIik7XG5cblx0XHRjb25zdCBzR3JvdXBJZCA9IG1QYXJhbXMuZ3JvdXBJZCB8fCBvT3BlcmF0aW9uLmdldEdyb3VwSWQoKTtcblx0XHRjb25zdCBvUHJlcGFyYXRpb25Qcm9taXNlID0gb09wZXJhdGlvblxuXHRcdFx0LmV4ZWN1dGUoc0dyb3VwSWQpXG5cdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKG1QYXJhbXMuYlByZXBhcmVGb3JFZGl0KSB7XG5cdFx0XHRcdFx0Ly8gaWYgUFJFUEFSRSBhY3Rpb24gaXMgdHJpZ2dlcmVkIGFmdGVyIEVkaXQgdGhlbiBlaXRoZXIgdGhlIHNpZGVFZmZlY3RzIChpZiBhbm5vdGF0ZWQgYWdhaW5zdCBQUkVQQVJFKSBhcmUgZXhlY3V0ZWQgb3IgdGhlIG1lc3NhZ2VzIGFyZSByZXF1ZXN0ZWQgYXMgZmFsbGJhY2sgaWYgbm8gc2lkZUVmZmVjdHM6XG5cdFx0XHRcdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBnZXRBY3Rpb25OYW1lKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuUFJFUEFSRSksXG5cdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nUGFyYW1ldGVycyA9IG9TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyhzQWN0aW9uTmFtZSwgb0NvbnRleHQpLFxuXHRcdFx0XHRcdFx0YVRhcmdldFBhdGhzID0gb0JpbmRpbmdQYXJhbWV0ZXJzICYmIG9CaW5kaW5nUGFyYW1ldGVycy5wYXRoRXhwcmVzc2lvbnM7XG5cdFx0XHRcdFx0aWYgKGFUYXJnZXRQYXRocyAmJiBhVGFyZ2V0UGF0aHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoYVRhcmdldFBhdGhzLCBvQ29udGV4dCwgc0dyb3VwSWQpLmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVxdWVzdE1lc3NhZ2VzKG9Db250ZXh0LCBvU2lkZUVmZmVjdHNTZXJ2aWNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9PcGVyYXRpb247XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyB0aGUgb3BlcmF0aW9uXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblxuXHRcdHJldHVybiBvUHJlcGFyYXRpb25Qcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBwcmVwYXJhdGlvbiBhY3Rpb24gY2Fubm90IGJlIGV4ZWN1dGVkIG9uIGFuIGFjdGl2ZSBkb2N1bWVudFwiKTtcblx0fVxufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBtZXNzYWdlIHBhdGggZm9yIGEgY29udGV4dC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBwYXRoIHNoYWxsIGJlIGRldGVybWluZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IE1lc3NhZ2UgcGF0aCwgZW1wdHkgaWYgbm90IGFubm90YXRlZFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlc1BhdGgob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0c0VudGl0eVNldFBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXMvJFBhdGhcIik7XG59XG4vKipcbiAqIFJlcXVlc3RzIHRoZSBtZXNzYWdlcyBpZiBhbm5vdGF0ZWQgZm9yIGEgZ2l2ZW4gY29udGV4dC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBtZXNzYWdlcyBzaGFsbCBiZSByZXF1ZXN0ZWRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvU2lkZUVmZmVjdHNTZXJ2aWNlIFNlcnZpY2UgZm9yIHRoZSBTaWRlRWZmZWN0cyBvbiBTQVAgRmlvcmkgZWxlbWVudHNcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgbWVzc2FnZXMgd2VyZSByZXF1ZXN0ZWRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gcmVxdWVzdE1lc3NhZ2VzKG9Db250ZXh0OiBhbnksIG9TaWRlRWZmZWN0c1NlcnZpY2U6IFNpZGVFZmZlY3RzU2VydmljZSkge1xuXHRjb25zdCBzTWVzc2FnZXNQYXRoID0gZ2V0TWVzc2FnZXNQYXRoKG9Db250ZXh0KTtcblx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRyZXR1cm4gb1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJFByb3BlcnR5UGF0aDogc01lc3NhZ2VzUGF0aCB9XSBhcyBhbnksIG9Db250ZXh0KTtcblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG4vKipcbiAqIEV4ZWN1dGVzIGRpc2NhcmQgb2YgYSBkcmFmdCBmdW5jdGlvbiB1c2luZyBIVFRQIFBvc3QuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEByZXR1cm5zIHtQcm9taXNlLjxzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dD59IFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEcmFmdERpc2NhcmRBY3Rpb24ob0NvbnRleHQ6IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvRGlzY2FyZE9wZXJhdGlvbiA9IGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkRJU0NBUkQpO1xuXHRcdGNvbnN0IG9EaXNjYXJkUHJvbWlzZSA9IG9EaXNjYXJkT3BlcmF0aW9uLmV4ZWN1dGUoXCJkaXJlY3RcIik7XG5cdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChcImRpcmVjdFwiKTtcblx0XHRyZXR1cm4gb0Rpc2NhcmRQcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkaXNjYXJkIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gYW4gYWN0aXZlIGRvY3VtZW50XCIpO1xuXHR9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkcmFmdCBkb2N1bWVudCBmcm9tIGFuIGV4aXN0aW5nIGRvY3VtZW50LlxuICpcbiAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBzZXZlcmFsIGhvb2tzIGFzIHRoZXJlIGlzIGEgY2VydGFpbiBjb3Jlb2dyYXBoeSBkZWZpbmVkLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdCNjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHBhcmFtIHtvYmplY3R9IG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIHtvYmplY3R9IG1QYXJhbWV0ZXJzIFRoZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5vVmlld10gVGhlIHZpZXdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmJQcmVzZXJ2ZUNoYW5nZXNdIFByZXNlcnZlIGNoYW5nZXMgb2YgYW4gZXhpc3RpbmcgZHJhZnQgb2YgYW5vdGhlciB1c2VyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iUHJlcGFyZU9uRWRpdF0gQWxzbyBjYWxsIHByZXBhcmUgd2hlbiBjYWxsaW5nIGRyYWZ0IGNyZWF0aW9uXG4gKiBAcGFyYW0ge3NhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLmJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50fSBbbVBhcmFtZXRlcnMuZm5CZWZvcmVDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudF0gQ2FsbGJhY2sgdGhhdCBhbGxvd3MgdmV0byBiZWZvcmUgY3JlYXRlIHJlcXVlc3QgaXMgZXhlY3V0ZWRcbiAqIEBwYXJhbSB7c2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2suYWZ0ZXJDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudH0gW21QYXJhbWV0ZXJzLmZuQWZ0ZXJDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudF0gQ2FsbGJhY2sgZm9yIHBvc3Rwcm9jZXNzaW9uZyBhZnRlciBkcmFmdCBkb2N1bWVudCB3YXMgY3JlYXRlZFxuICogQHBhcmFtIHtzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay53aGVuRGVjaXNpb25Ub092ZXJ3cml0ZURvY3VtZW50SXNSZXF1aXJlZH0gW21QYXJhbWV0ZXJzLmZuV2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWRdIENhbGxiYWNrIGZvciBkZWNpZGluZyBvbiBvdmVyd3JpdGluZyBhbiB1bnNhdmVkIGNoYW5nZSBieSBhbm90aGVyIHVzZXJcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHJlc29sdmVzIHdpdGggdGhlIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dCBjb250ZXh0fSBvZiB0aGUgbmV3IGRyYWZ0IGRvY3VtZW50XG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50KFxuXHRvQ29udGV4dDogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBvYmplY3QsXG5cdG1QYXJhbWV0ZXJzOiB7XG5cdFx0b1ZpZXc6IFZpZXc7XG5cdFx0YlByZXNlcnZlQ2hhbmdlcz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0YlByZXBhcmVPbkVkaXQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdGZuQmVmb3JlQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQ/OiBhbnk7XG5cdFx0Zm5BZnRlckNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50PzogYW55O1xuXHRcdGZuV2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWQ/OiBhbnk7XG5cdH1cbikge1xuXHRjb25zdCBtUGFyYW0gPSBtUGFyYW1ldGVycyB8fCB7fSxcblx0XHRsb2NhbEkxOG5SZWYgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpIGFzIFJlc291cmNlQnVuZGxlLFxuXHRcdGJSdW5QcmVzZXJ2ZUNoYW5nZXNGbG93ID1cblx0XHRcdHR5cGVvZiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAodHlwZW9mIG1QYXJhbS5iUHJlc2VydmVDaGFuZ2VzID09PSBcImJvb2xlYW5cIiAmJiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyk7IC8vZGVmYXVsdCB0cnVlXG5cblx0LyoqXG5cdCAqIE92ZXJ3cml0ZSBvciByZWplY3QgYmFzZWQgb24gZm5XaGVuRGVjaXNpb25Ub092ZXJ3cml0ZURvY3VtZW50SXNSZXF1aXJlZC5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBiT3ZlcndyaXRlIE92ZXJ3cml0ZSB0aGUgY2hhbmdlIG9yIG5vdFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmVzb2x2ZXMgd2l0aCByZXN1bHQgb2Yge0BsaW5rIHNhcC5mZS5jb3JlLmFjdGlvbnMjZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbn1cblx0ICovXG5cdGZ1bmN0aW9uIG92ZXJ3cml0ZU9uRGVtYW5kKGJPdmVyd3JpdGU6IGFueSkge1xuXHRcdGlmIChiT3ZlcndyaXRlKSB7XG5cdFx0XHQvL092ZXJ3cml0ZSBleGlzdGluZyBjaGFuZ2VzXG5cdFx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgZHJhZnREYXRhQ29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdGxldCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlO1xuXG5cdFx0XHRyZXR1cm4gKChtUGFyYW1ldGVycy5vVmlldy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uKF9vUmVzb3VyY2VCdW5kbGU6IGFueSkge1xuXHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSA9IF9vUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRcdFx0cmV0dXJuIGRyYWZ0RGF0YUNvbnRleHQucmVxdWVzdE9iamVjdCgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbihkcmFmdEFkbWluRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0aWYgKGRyYWZ0QWRtaW5EYXRhKSB7XG5cdFx0XHRcdFx0XHQvLyByZW1vdmUgYWxsIHVuYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcyB3ZSBzaG93IGEgc3BlY2lhbCBkaWFsb2dcblx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRsZXQgc0luZm8gPSBkcmFmdEFkbWluRGF0YS5JblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbiB8fCBkcmFmdEFkbWluRGF0YS5JblByb2Nlc3NCeVVzZXI7XG5cdFx0XHRcdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gKG1QYXJhbWV0ZXJzLm9WaWV3LmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXQ7XG5cdFx0XHRcdFx0XHRpZiAoc0luZm8pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0xvY2tlZEJ5VXNlck1zZyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQ19EUkFGVF9PQkpFQ1RfUEFHRV9EUkFGVF9MT0NLRURfQllfVVNFUlwiLFxuXHRcdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0XHRzSW5mbyxcblx0XHRcdFx0XHRcdFx0XHRzRW50aXR5U2V0XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc0xvY2tlZEJ5VXNlck1zZyk7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihzTG9ja2VkQnlVc2VyTXNnKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHNJbmZvID0gZHJhZnRBZG1pbkRhdGEuQ3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uIHx8IGRyYWZ0QWRtaW5EYXRhLkNyZWF0ZWRCeVVzZXI7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNVbnNhdmVkQ2hhbmdlc01zZyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQ19EUkFGVF9PQkpFQ1RfUEFHRV9EUkFGVF9VTlNBVkVEX0NIQU5HRVNcIixcblx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdFx0c0luZm8sXG5cdFx0XHRcdFx0XHRcdFx0c0VudGl0eVNldFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2hvd01lc3NhZ2VCb3goc1Vuc2F2ZWRDaGFuZ2VzTXNnKS50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBleGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJEcmFmdCBjcmVhdGlvbiBhYm9ydGVkIGZvciBkb2N1bWVudDogXCIgKyBvQ29udGV4dC5nZXRQYXRoKCkpKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNob3dNZXNzYWdlQm94KHNVbnNhdmVkQ2hhbmdlc01zZzogYW55KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdFx0dGl0bGU6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19EUkFGVF9PQkpFQ1RfUEFHRV9XQVJOSU5HXCIpLFxuXHRcdFx0XHRzdGF0ZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IG5ldyBUZXh0KHtcblx0XHRcdFx0XHR0ZXh0OiBzVW5zYXZlZENoYW5nZXNNc2dcblx0XHRcdFx0fSksXG5cdFx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHR0ZXh0OiBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIkNfQ09NTU9OX09CSkVDVF9QQUdFX0VESVRcIiksXG5cdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHRleHQ6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfQ0FOQ0VMXCIpLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdHJlamVjdChcIkRyYWZ0IGNyZWF0aW9uIGFib3J0ZWQgZm9yIGRvY3VtZW50OiBcIiArIG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0b0RpYWxvZy5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCFvQ29udGV4dCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJCaW5kaW5nIGNvbnRleHQgdG8gYWN0aXZlIGRvY3VtZW50IGlzIHJlcXVpcmVkXCIpKTtcblx0fVxuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0bVBhcmFtLmZuQmVmb3JlQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRcblx0XHRcdD8gbVBhcmFtLmZuQmVmb3JlQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQob0NvbnRleHQsIGJSdW5QcmVzZXJ2ZUNoYW5nZXNGbG93KVxuXHRcdFx0OiB0cnVlXG5cdClcblx0XHQudGhlbihmdW5jdGlvbihiRXhlY3V0ZTogYW55KSB7XG5cdFx0XHRpZiAoIWJFeGVjdXRlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkRyYWZ0IGNyZWF0aW9uIHdhcyBhYm9ydGVkIGJ5IGV4dGVuc2lvbiBmb3IgZG9jdW1lbnQ6IFwiICsgb0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBleGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0LCBiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdykuY2F0Y2goZnVuY3Rpb24ob1Jlc3BvbnNlOiBhbnkpIHtcblx0XHRcdFx0Ly9Pbmx5IGNhbGwgYmFjayBpZiBlcnJvciA0MDlcblx0XHRcdFx0aWYgKGJSdW5QcmVzZXJ2ZUNoYW5nZXNGbG93ICYmIG9SZXNwb25zZS5zdGF0dXMgPT09IDQwOSkge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdFx0XHRtUGFyYW0uZm5XaGVuRGVjaXNpb25Ub092ZXJ3cml0ZURvY3VtZW50SXNSZXF1aXJlZCA/IG1QYXJhbS5mbldoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkKCkgOiB0cnVlXG5cdFx0XHRcdFx0KS50aGVuKG92ZXJ3cml0ZU9uRGVtYW5kKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3Iob1Jlc3BvbnNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSlcblx0XHQudGhlbihmdW5jdGlvbihvRHJhZnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdG1QYXJhbS5mbkFmdGVyQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRcblx0XHRcdFx0XHQ/IG1QYXJhbS5mbkFmdGVyQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQob0NvbnRleHQsIG9EcmFmdENvbnRleHQpXG5cdFx0XHRcdFx0OiBvRHJhZnRDb250ZXh0XG5cdFx0XHQpO1xuXHRcdH0pXG5cdFx0LnRoZW4oZnVuY3Rpb24ob0RyYWZ0Q29udGV4dDogYW55KSB7XG5cdFx0XHRpZiAobVBhcmFtLmJQcmVwYXJlT25FZGl0ICYmIGhhc1ByZXBhcmVBY3Rpb24ob0RyYWZ0Q29udGV4dCkpIHtcblx0XHRcdFx0cmV0dXJuIGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uKG9EcmFmdENvbnRleHQsIG9BcHBDb21wb25lbnQsIHsgYlByZXBhcmVGb3JFZGl0OiB0cnVlIH0pLnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9EcmFmdENvbnRleHQ7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9EcmFmdENvbnRleHQ7XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24oZXhjOiBhbnkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChleGMpO1xuXHRcdH0pO1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIGFjdGl2ZSBkb2N1bWVudCBmcm9tIGEgZHJhZnQgZG9jdW1lbnQuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIHNldmVyYWwgaG9va3MgYXMgdGhlcmUgaXMgYSBjZXJ0YWluIGNob3Jlb2dyYXBoeSBkZWZpbmVkLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdCNhY3RpdmF0ZURvY3VtZW50XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdFxuICogQHN0YXRpY1xuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcGFyYW0ge29iamVjdH0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0ge29iamVjdH0gbVBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7c2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2suZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50fSBbbVBhcmFtZXRlcnMuZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50XSBDYWxsYmFjayB0aGF0IGFsbG93cyB2ZXRvIGJlZm9yZSBjcmVhdGUgcmVxdWVzdCBpcyBleGVjdXRlZFxuICogQHBhcmFtIHtzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudH0gW21QYXJhbWV0ZXJzLmZuQWZ0ZXJBY3RpdmF0ZURvY3VtZW50XSBDYWxsYmFjayBmb3IgcG9zdHByb2Nlc3Npb25nIGFmdGVyIGRvY3VtZW50IHdhcyBhY3RpdmF0ZWQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSByZXNvbHZlcyB3aXRoIHRoZSB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQgY29udGV4dH0gb2YgdGhlIG5ldyBkcmFmdCBkb2N1bWVudFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBhY3RpdmF0ZURvY3VtZW50KFxuXHRvQ29udGV4dDogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBvYmplY3QsXG5cdG1QYXJhbWV0ZXJzOiB7IGZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudD86IGFueTsgZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQ/OiBhbnkgfVxuKSB7XG5cdGNvbnN0IG1QYXJhbSA9IG1QYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdGlmICghb0NvbnRleHQpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQmluZGluZyBjb250ZXh0IHRvIGRyYWZ0IGRvY3VtZW50IGlzIHJlcXVpcmVkXCIpKTtcblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1QYXJhbS5mbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQgPyBtUGFyYW0uZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50KG9Db250ZXh0KSA6IHRydWUpXG5cdFx0LnRoZW4oZnVuY3Rpb24oYkV4ZWN1dGU6IGFueSkge1xuXHRcdFx0aWYgKCFiRXhlY3V0ZSkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQWN0aXZhdGlvbiBvZiB0aGUgZG9jdW1lbnQgd2FzIGFib3J0ZWQgYnkgZXh0ZW5zaW9uIGZvciBkb2N1bWVudDogXCIgKyBvQ29udGV4dC5nZXRQYXRoKCkpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFoYXNQcmVwYXJlQWN0aW9uKG9Db250ZXh0KSkge1xuXHRcdFx0XHRyZXR1cm4gZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbihvQ29udGV4dCwgb0FwcENvbXBvbmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGFjdGl2YXRpb24gcmVxdWlyZXMgcHJlcGFyYXRpb24gKi9cblx0XHRcdGNvbnN0IHNCYXRjaEdyb3VwID0gXCJkcmFmdFwiO1xuXHRcdFx0Ly8gd2UgdXNlIHRoZSBzYW1lIGJhdGNoR3JvdXAgdG8gZm9yY2UgcHJlcGFyZSBhbmQgYWN0aXZhdGUgaW4gYSBzYW1lIGJhdGNoIGJ1dCB3aXRoIGRpZmZlcmVudCBjaGFuZ2VzZXRcblx0XHRcdGNvbnN0IG9QcmVwYXJlUHJvbWlzZSA9IGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uKG9Db250ZXh0LCBvQXBwQ29tcG9uZW50LCB7XG5cdFx0XHRcdGdyb3VwSWQ6IHNCYXRjaEdyb3VwLFxuXHRcdFx0XHRiUHJlcGFyZUZvckVkaXQ6IGZhbHNlXG5cdFx0XHR9KTtcblx0XHRcdG9Db250ZXh0LmdldE1vZGVsKCkuc3VibWl0QmF0Y2goc0JhdGNoR3JvdXApO1xuXG5cdFx0XHRjb25zdCBvQWN0aXZhdGVQcm9taXNlID0gZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbihvQ29udGV4dCwgb0FwcENvbXBvbmVudCwgc0JhdGNoR3JvdXApO1xuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW29QcmVwYXJlUHJvbWlzZSwgb0FjdGl2YXRlUHJvbWlzZV0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uKHZhbHVlczogW2FueSwgYW55XSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZXNbMV07XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbihleGM6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChleGMpO1xuXHRcdFx0XHR9KTtcblx0XHR9KVxuXHRcdC50aGVuKGZ1bmN0aW9uKG9BY3RpdmVEb2N1bWVudENvbnRleHQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcblx0XHRcdFx0bVBhcmFtLmZuQWZ0ZXJBY3RpdmF0ZURvY3VtZW50ID8gbVBhcmFtLmZuQWZ0ZXJBY3RpdmF0ZURvY3VtZW50KG9Db250ZXh0LCBvQWN0aXZlRG9jdW1lbnRDb250ZXh0KSA6IG9BY3RpdmVEb2N1bWVudENvbnRleHRcblx0XHRcdCk7XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24oZXhjOiBhbnkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChleGMpO1xuXHRcdH0pO1xufVxuLyoqXG4gKiBIVFRQIFBPU1QgY2FsbCB3aGVuIERyYWZ0QWN0aW9uIGlzIHByZXNlbnQgZm9yIERyYWZ0IERlbGV0ZTsgSFRUUCBERUxFVEUgZm9yIERyYWZ0KHdoZW4gbm8gRHJhZnRBY3Rpb24pXG4gKiBhbmQgQWN0aXZlIEluc3RhbmNlIHVzZXMgREVMRVRFIGFsd2F5cy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQjZGVsZXRlRHJhZnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0XG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSBkaXNjYXJkZWRcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBkZWxldGVEcmFmdChvQ29udGV4dDogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdGNvbnN0IHNEaXNjYXJkQWN0aW9uID0gZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkRJU0NBUkQpLFxuXHRcdGJJc0FjdGl2ZUVudGl0eSA9IG9Db250ZXh0LmdldE9iamVjdCgpLklzQWN0aXZlRW50aXR5O1xuXG5cdGlmIChiSXNBY3RpdmVFbnRpdHkgfHwgKCFiSXNBY3RpdmVFbnRpdHkgJiYgIXNEaXNjYXJkQWN0aW9uKSkge1xuXHRcdC8vVXNlIERlbGV0ZSBpbiBjYXNlIG9mIGFjdGl2ZSBlbnRpdHkgYW5kIG5vIGRpc2NhcmQgYWN0aW9uIGF2YWlsYWJsZSBmb3IgZHJhZnRcblx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0XG5cdFx0XHRcdC5nZXRCaW5kaW5nKClcblx0XHRcdFx0LnJlc2V0Q2hhbmdlcygpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBvQ29udGV4dC5kZWxldGUoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0LmRlbGV0ZSgpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvL1VzZSBEaXNjYXJkIFBvc3QgQWN0aW9uIGlmIGl0IGlzIGEgZHJhZnQgZW50aXR5IGFuZCBkaXNjYXJkIGFjdGlvbiBleGlzdHNcblx0XHRyZXR1cm4gZXhlY3V0ZURyYWZ0RGlzY2FyZEFjdGlvbihvQ29udGV4dCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZHJhZnQ7XG4iXX0=
|
|
563
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRyYWZ0LnRzIl0sIm5hbWVzIjpbImRyYWZ0T3BlcmF0aW9ucyIsIkVESVQiLCJBQ1RJVkFUSU9OIiwiRElTQ0FSRCIsIlBSRVBBUkUiLCJkcmFmdCIsImNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYWN0aXZhdGVEb2N1bWVudCIsImRlbGV0ZURyYWZ0IiwiZ2V0QWN0aW9uTmFtZSIsIm9Db250ZXh0Iiwic09wZXJhdGlvbiIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZ2V0T2JqZWN0IiwiY3JlYXRlT3BlcmF0aW9uIiwib09wdGlvbnMiLCJzT3BlcmF0aW9uTmFtZSIsImJpbmRDb250ZXh0IiwiaGFzUHJlcGFyZUFjdGlvbiIsImV4ZWN1dGVEcmFmdEVkaXRBY3Rpb24iLCJiUHJlc2VydmVDaGFuZ2VzIiwiZ2V0UHJvcGVydHkiLCIkJGluaGVyaXRFeHBhbmRTZWxlY3QiLCJvT3BlcmF0aW9uIiwic2V0UGFyYW1ldGVyIiwic0dyb3VwSWQiLCJvRWRpdFByb21pc2UiLCJleGVjdXRlIiwidGhlbiIsIm9EcmFmdERvY3VtZW50Q29udGV4dCIsInN1Ym1pdEJhdGNoIiwiRXJyb3IiLCJleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uIiwib0FwcENvbXBvbmVudCIsImJIYXNQcmVwYXJlQWN0aW9uIiwiYklnbm9yZUV0YWciLCJvQWN0aXZlRG9jdW1lbnRDb250ZXh0IiwiY2F0Y2giLCJzQWN0aW9uTmFtZSIsIm9TaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJvQmluZGluZ1BhcmFtZXRlcnMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwiYVRhcmdldFBhdGhzIiwicGF0aEV4cHJlc3Npb25zIiwibGVuZ3RoIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJyZXF1ZXN0TWVzc2FnZXMiLCJQcm9taXNlIiwicmVqZWN0IiwiZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24iLCJtUGFyYW1ldGVycyIsIm1QYXJhbXMiLCJncm91cElkIiwiZ2V0R3JvdXBJZCIsIm9QcmVwYXJhdGlvblByb21pc2UiLCJiUHJlcGFyZUZvckVkaXQiLCJnZXRNZXNzYWdlc1BhdGgiLCJzTWVzc2FnZXNQYXRoIiwiJFByb3BlcnR5UGF0aCIsInJlc29sdmUiLCJleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uIiwib0Rpc2NhcmRPcGVyYXRpb24iLCJvRGlzY2FyZFByb21pc2UiLCJtUGFyYW0iLCJsb2NhbEkxOG5SZWYiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyIsIm92ZXJ3cml0ZU9uRGVtYW5kIiwiYk92ZXJ3cml0ZSIsImRyYWZ0RGF0YUNvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvUmVzb3VyY2VCdW5kbGUiLCJvVmlldyIsImdldFJlc291cmNlQnVuZGxlIiwiX29SZXNvdXJjZUJ1bmRsZSIsInJlcXVlc3RPYmplY3QiLCJkcmFmdEFkbWluRGF0YSIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzSW5mbyIsIkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uIiwiSW5Qcm9jZXNzQnlVc2VyIiwic0VudGl0eVNldCIsImdldFZpZXdEYXRhIiwiZW50aXR5U2V0Iiwic0xvY2tlZEJ5VXNlck1zZyIsIkNvbW1vblV0aWxzIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJNZXNzYWdlQm94IiwiQ3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uIiwiQ3JlYXRlZEJ5VXNlciIsInNVbnNhdmVkQ2hhbmdlc01zZyIsInNob3dNZXNzYWdlQm94Iiwib0RpYWxvZyIsIkRpYWxvZyIsInRpdGxlIiwiZ2V0VGV4dCIsInN0YXRlIiwiY29udGVudCIsIlRleHQiLCJ0ZXh0IiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0eXBlIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJmbkJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYkV4ZWN1dGUiLCJvUmVzcG9uc2UiLCJzdGF0dXMiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImZuV2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWQiLCJvRHJhZnRDb250ZXh0IiwiZm5BZnRlckNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwiYlByZXBhcmVPbkVkaXQiLCJleGMiLCJmbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQiLCJzQmF0Y2hHcm91cCIsIm9QcmVwYXJlUHJvbWlzZSIsIm9BY3RpdmF0ZVByb21pc2UiLCJhbGwiLCJ2YWx1ZXMiLCJmbkFmdGVyQWN0aXZhdGVEb2N1bWVudCIsInNEaXNjYXJkQWN0aW9uIiwiYklzQWN0aXZlRW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJkZWxldGUiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBLE1BQU1BLGVBQWUsR0FBRztBQUN2QkMsSUFBQUEsSUFBSSxFQUFFLFlBRGlCO0FBRXZC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ekMsQ0FBakMsR0FBb0dBLHNCQUQ5RixDQUFQO0FBR0EsS0FqQ0ssRUFrQ0xDLEtBbENLLENBa0NDLFVBQVUwRixHQUFWLEVBQW9CO0FBQzFCLGFBQU81RSxPQUFPLENBQUNDLE1BQVIsQ0FBZTJFLEdBQWYsQ0FBUDtBQUNBLEtBcENLLENBQVA7QUFxQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsV0FBUzdILFdBQVQsQ0FBcUJFLFFBQXJCLEVBQXNEO0FBQ3JELFFBQU1tSSxjQUFjLEdBQUdwSSxhQUFhLENBQUNDLFFBQUQsRUFBV1YsZUFBZSxDQUFDRyxPQUEzQixDQUFwQztBQUFBLFFBQ0MySSxlQUFlLEdBQUdwSSxRQUFRLENBQUNTLFNBQVQsR0FBcUI0SCxjQUR4Qzs7QUFHQSxRQUFJRCxlQUFlLElBQUssQ0FBQ0EsZUFBRCxJQUFvQixDQUFDRCxjQUE3QyxFQUE4RDtBQUM3RDtBQUNBLFVBQUluSSxRQUFRLENBQUNzSSxpQkFBVCxFQUFKLEVBQWtDO0FBQ2pDLGVBQU90SSxRQUFRLENBQ2J1SSxVQURLLEdBRUxDLFlBRkssR0FHTGhILElBSEssQ0FHQSxZQUFZO0FBQ2pCLGlCQUFPeEIsUUFBUSxDQUFDeUksTUFBVCxFQUFQO0FBQ0EsU0FMSyxFQU1MeEcsS0FOSyxDQU1DLFVBQVVZLEtBQVYsRUFBc0I7QUFDNUIsaUJBQU9FLE9BQU8sQ0FBQ0MsTUFBUixDQUFlSCxLQUFmLENBQVA7QUFDQSxTQVJLLENBQVA7QUFTQSxPQVZELE1BVU87QUFDTixlQUFPN0MsUUFBUSxDQUFDeUksTUFBVCxFQUFQO0FBQ0E7QUFDRCxLQWZELE1BZU87QUFDTjtBQUNBLGFBQU83RSx5QkFBeUIsQ0FBQzVELFFBQUQsQ0FBaEM7QUFDQTtBQUNEOztTQUVjTCxLIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9hY3Rpb25zL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBjYWxsYmFja3MgdXNlZCBpbiB0aGUgZnVuY3Rpb25zXG4gKlxuICpcbiAqIEBhdXRob3IgU0FQIFNFXG4gKiBAc2luY2UgMS41NC4wXG4gKiBAaW50ZXJmYWNlXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFja1xuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIHRvIGFwcHJvdmUgb3IgcmVqZWN0IHRoZSBjcmVhdGlvbiBvZiBhIGRyYWZ0XG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay5iZWZvcmVDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudFxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAYWJzdHJhY3RcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHJldHVybnMgeyhib29sZWFufFByb21pc2UpfSBBcHByb3ZhbCBvZiBkcmFmdCBjcmVhdGlvbiBbdHJ1ZXxmYWxzZV0gb3IgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGJvb2xlYW4gdmFsdWVcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogQ2FsbGJhY2sgYWZ0ZXIgYSBkcmFmdCB3YXMgc3VjY2Vzc3VsbHkgY3JlYXRlZFxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2suYWZ0ZXJDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudFxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAYWJzdHJhY3RcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIG5ldyBkcmFmdFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0FjdGl2ZURvY3VtZW50Q29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEByZXR1cm5zIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0FjdGl2ZURvY3VtZW50Q29udGV4dFxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBDYWxsYmFjayB0byBhcHByb3ZlIG9yIHJlamVjdCBvdmVyd3JpdGluZyBhbiB1bnNhdmVkIGRyYWZ0IG9mIGFub3RoZXIgdXNlclxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2sud2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWRcbiAqIEBmdW5jdGlvblxuICogQHB1YmxpY1xuICogQHN0YXRpY1xuICogQGFic3RyYWN0XG4gKlxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcmV0dXJucyB7KGJvb2xlYW58UHJvbWlzZSl9IEFwcHJvdmFsIHRvIG92ZXJ3cml0ZSB1bnNhdmVkIGRyYWZ0IFt0cnVlfGZhbHNlXSBvciBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYm9vbGVhbiB2YWx1ZVxuICpcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG4vKiBDb25zdGFudHMgZm9yIGRyYWZ0IG9wZXJhdGlvbnMgKi9cbmNvbnN0IGRyYWZ0T3BlcmF0aW9ucyA9IHtcblx0RURJVDogXCJFZGl0QWN0aW9uXCIsXG5cdEFDVElWQVRJT046IFwiQWN0aXZhdGlvbkFjdGlvblwiLFxuXHRESVNDQVJEOiBcIkRpc2NhcmRBY3Rpb25cIixcblx0UFJFUEFSRTogXCJQcmVwYXJhdGlvbkFjdGlvblwiXG59O1xuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIGZvciB0aGUgZHJhZnQgcHJvZ3JhbW1pbmcgbW9kZWxcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdFxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41NC4wXG4gKi9cbmNvbnN0IGRyYWZ0ID0ge1xuXHRjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudDogY3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQsXG5cdGFjdGl2YXRlRG9jdW1lbnQ6IGFjdGl2YXRlRG9jdW1lbnQsXG5cdGRlbGV0ZURyYWZ0OiBkZWxldGVEcmFmdFxufTtcbi8qKlxuICogRGV0ZXJtaW5lcyBhY3Rpb24gbmFtZSBmb3IgYSBkcmFmdCBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBzaG91bGQgYmUgYm91bmQgdG8gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHNPcGVyYXRpb24gVGhlIG9wZXJhdGlvbiBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgZHJhZnQgb3BlcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGlvbk5hbWUob0NvbnRleHQ6IGFueSwgc09wZXJhdGlvbjogc3RyaW5nKSB7XG5cdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRW50aXR5U2V0UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L1wiICsgc09wZXJhdGlvbik7XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gb3BlcmF0aW9uIGNvbnRleHQgYmluZGluZyBmb3IgdGhlIGdpdmVuIGNvbnRleHQgYW5kIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gc09wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIChhY3Rpb24gb3IgZnVuY3Rpb24gaW1wb3J0KVxuICogQHBhcmFtIG9PcHRpb25zIE9wdGlvbnMgdG8gY3JlYXRlIHRoZSBvcGVyYXRpb24gY29udGV4dFxuICogQHJldHVybnMge3NhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nfSBUaGUgY29udGV4dCBiaW5kaW5nIG9mIHRoZSBib3VuZCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0OiBhbnksIHNPcGVyYXRpb246IHN0cmluZywgb09wdGlvbnM/OiBhbnkpIHtcblx0Y29uc3Qgc09wZXJhdGlvbk5hbWUgPSBnZXRBY3Rpb25OYW1lKG9Db250ZXh0LCBzT3BlcmF0aW9uKTtcblxuXHRyZXR1cm4gb0NvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChzT3BlcmF0aW9uTmFtZSArIFwiKC4uLilcIiwgb0NvbnRleHQsIG9PcHRpb25zKTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgb3B0aW9uYWwgZHJhZnQgcHJlcGFyZSBhY3Rpb24gZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSBvcGVyYXRpb25cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGEgYSBwcmVwYXJlIGFjdGlvbiBleGlzdHNcbiAqL1xuZnVuY3Rpb24gaGFzUHJlcGFyZUFjdGlvbihvQ29udGV4dDogYW55KSB7XG5cdHJldHVybiAhIWdldEFjdGlvbk5hbWUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBkcmFmdCBmcm9tIGFuIGFjdGl2ZSBkb2N1bWVudC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIHtib29sZWFufSBiUHJlc2VydmVDaGFuZ2VzIElmIHRydWUgLSBleGlzdGluZyBjaGFuZ2VzIGZyb20gYW5vdGhlciB1c2VyIHRoYXQgYXJlIG5vdCBsb2NrZWQgYXJlIHByZXNlcnZlZCBhbmQgYW4gZXJyb3IgbWVzc2FnZSAoaHR0cCBzdGF0dXMgNDA5KSBpcyBzZW5kIGZyb20gdGhlIGJhY2tlbmQsIG90aGVyd2lzZSBmYWxzZSAtIGV4aXN0aW5nIGNoYW5nZXMgZnJvbSBhbm90aGVyIHVzZXIgdGhhdCBhcmUgbm90IGxvY2tlZCBhcmUgb3ZlcndyaXR0ZW48L2xpPlxuICogQHJldHVybnMge1Byb21pc2UuPHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0Pn0gUmVzb2x2ZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb250ZXh0IG9mIHRoZSBvcGVyYXRpb25cbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbihvQ29udGV4dDogYW55LCBiUHJlc2VydmVDaGFuZ2VzOiBib29sZWFuKSB7XG5cdGlmIChvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgb09wdGlvbnMgPSB7ICQkaW5oZXJpdEV4cGFuZFNlbGVjdDogdHJ1ZSB9O1xuXHRcdGNvbnN0IG9PcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5FRElULCBvT3B0aW9ucyk7XG5cdFx0b09wZXJhdGlvbi5zZXRQYXJhbWV0ZXIoXCJQcmVzZXJ2ZUNoYW5nZXNcIiwgYlByZXNlcnZlQ2hhbmdlcyk7XG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBcImRpcmVjdFwiO1xuXHRcdGNvbnN0IG9FZGl0UHJvbWlzZSA9IG9PcGVyYXRpb24uZXhlY3V0ZShzR3JvdXBJZCkudGhlbihmdW5jdGlvbiAob0RyYWZ0RG9jdW1lbnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdHJldHVybiBvRHJhZnREb2N1bWVudENvbnRleHQ7XG5cdFx0fSk7XG5cdFx0b09wZXJhdGlvbi5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRyZXR1cm4gb0VkaXRQcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIllvdSBjYW5ub3QgZWRpdCB0aGlzIGRyYWZ0IGRvY3VtZW50XCIpO1xuXHR9XG59XG4vKmZ1bmN0aW9uIGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZChvQ29udGV4dDogYW55LCBzR3JvdXBJZDogYW55LCBhTWVzc2FnZXM6IGFueSkgeyAvL1dpbGwgdW5jb21tZW50IHRoaXMgZnVuY3Rpb24gaW4gdGhlIGNvbW1pdCA6IDU1MTM1MTBcblx0aWYgKGFNZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCBzTWVzc2FnZSA9IGFNZXNzYWdlc1swXS5tZXNzYWdlLFxuXHRcdFx0ZGlhbG9nUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9tL01lc3NhZ2VCb3hcIl0sIGZ1bmN0aW9uKE1lc3NhZ2VCb3g6IGFueSkge1xuXHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzTWVzc2FnZSwge1xuXHRcdFx0XHRcdFx0dGl0bGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdFx0YWN0aW9uczogW01lc3NhZ2VCb3guQWN0aW9uLk9LLCBNZXNzYWdlQm94LkFjdGlvbi5DQU5DRUxdLFxuXHRcdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24oc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzQWN0aW9uID09PSBNZXNzYWdlQm94LkFjdGlvbi5PSykge1xuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gZGlhbG9nUHJvbWlzZTtcblx0fVxufSovXG4vKipcbiAqIEFjdGl2YXRlcyBhIGRyYWZ0IGRvY3VtZW50LiBUaGUgZHJhZnQgd2lsbCByZXBsYWNlIHRoZSBzaWJsaW5nIGVudGl0eSBhbmQgd2lsbCBiZSBkZWxldGVkIGJ5IHRoZSBiYWNrIGVuZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIHtvYmplY3R9IG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIHtzdHJpbmd9IFtzR3JvdXBJZF0gVGhlIG9wdGlvbmFsIGJhdGNoIGdyb3VwIGluIHdoaWNoIHRoZSBvcGVyYXRpb24gaXMgdG8gYmUgZXhlY3V0ZWRcbiAqIEByZXR1cm5zIHtQcm9taXNlLjxzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dD59IFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEcmFmdEFjdGl2YXRpb25BY3Rpb24ob0NvbnRleHQ6IGFueSwgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBzR3JvdXBJZD86IHN0cmluZykge1xuXHRjb25zdCBiSGFzUHJlcGFyZUFjdGlvbiA9IGhhc1ByZXBhcmVBY3Rpb24ob0NvbnRleHQpO1xuXG5cdC8vIEFjY29yZGluZyB0byB0aGUgZHJhZnQgc3BlYyBpZiB0aGUgc2VydmljZSBjb250YWlucyBhIHByZXBhcmUgYWN0aW9uIGFuZCB3ZSB0cmlnZ2VyIGJvdGggcHJlcGFyZSBhbmRcblx0Ly8gYWN0aXZhdGUgaW4gb25lICRiYXRjaCB0aGUgYWN0aXZhdGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRoIGlGLU1hdGNoPSpcblx0Y29uc3QgYklnbm9yZUV0YWcgPSBiSGFzUHJlcGFyZUFjdGlvbjtcblxuXHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvT3BlcmF0aW9uID0gY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuQUNUSVZBVElPTiwgeyAkJGluaGVyaXRFeHBhbmRTZWxlY3Q6IHRydWUgfSk7XG5cdFx0cmV0dXJuIG9PcGVyYXRpb25cblx0XHRcdC5leGVjdXRlKHNHcm91cElkLCBiSWdub3JlRXRhZylcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvQWN0aXZlRG9jdW1lbnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9BY3RpdmVEb2N1bWVudENvbnRleHQ7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKFxuXHRcdFx0XHQvL2lmIEFDVElWQVRFIGFjdGlvbiBmYWlscyB0aGVuIHdlIHJlcXVlc3QgZWl0aGVyIHRoZSBzaWRlRWZmZWN0cyBhZ2FpbnN0IFBSRVBBUkUgYWN0aW9uIChpZiBhbm5vdGF0ZWQpIG9yIHRoZSBtZXNzYWdlcyBhcyBmYWxsYmFjazpcblx0XHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmIChiSGFzUHJlcGFyZUFjdGlvbikge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBnZXRBY3Rpb25OYW1lKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuUFJFUEFSRSksXG5cdFx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLFxuXHRcdFx0XHRcdFx0XHRvQmluZGluZ1BhcmFtZXRlcnMgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMoc0FjdGlvbk5hbWUsIG9Db250ZXh0KSxcblx0XHRcdFx0XHRcdFx0YVRhcmdldFBhdGhzID0gb0JpbmRpbmdQYXJhbWV0ZXJzICYmIG9CaW5kaW5nUGFyYW1ldGVycy5wYXRoRXhwcmVzc2lvbnM7XG5cdFx0XHRcdFx0XHRpZiAoYVRhcmdldFBhdGhzICYmIGFUYXJnZXRQYXRocy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKGFUYXJnZXRQYXRocywgb0NvbnRleHQpLmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVxdWVzdE1lc3NhZ2VzKG9Db250ZXh0LCBvU2lkZUVmZmVjdHNTZXJ2aWNlKS5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIG1lc3NhZ2VzXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYWN0aXZhdGlvbiBhY3Rpb24gY2Fubm90IGJlIGV4ZWN1dGVkIG9uIGFuIGFjdGl2ZSBkb2N1bWVudFwiKTtcblx0fVxufVxuLyoqXG4gKiBFeGVjdXRlIGEgcHJlcGFyYXRpb24gYWN0aW9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0ge29iamVjdH0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0ge29iamVjdH0gbVBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmdyb3VwSWRdIFRoZSBvcHRpb25hbCBiYXRjaCBncm91cCB3aGVyZSB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbiBpblxuICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYlByZXBhcmVGb3JFZGl0XSBTaGFsbCB0aGUgbWVzc2FnZXMgYmUgcmVxdWVzdGVkIGlmIHN1cHBvcnRlZCBieSBzZXJ2aWNlXG4gKiBAcmV0dXJucyB7UHJvbWlzZS48c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQ+fSBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBleGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbihcblx0b0NvbnRleHQ6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogeyBncm91cElkPzogc3RyaW5nOyBiUHJlcGFyZUZvckVkaXQ/OiBib29sZWFuIH1cbikge1xuXHRjb25zdCBtUGFyYW1zID0gbVBhcmFtZXRlcnMgfHwge307XG5cdGlmICghb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSkge1xuXHRcdGNvbnN0IG9PcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKTtcblxuXHRcdC8vIFRPRE86IHNpZGUgZWZmZWN0cyBxdWFsaWZpZXIgc2hhbGwgYmUgZXZlbiBkZXByZWNhdGVkIHRvIGJlIGNoZWNrZWRcblx0XHRvT3BlcmF0aW9uLnNldFBhcmFtZXRlcihcIlNpZGVFZmZlY3RzUXVhbGlmaWVyXCIsIFwiXCIpO1xuXG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBtUGFyYW1zLmdyb3VwSWQgfHwgb09wZXJhdGlvbi5nZXRHcm91cElkKCk7XG5cdFx0Y29uc3Qgb1ByZXBhcmF0aW9uUHJvbWlzZSA9IG9PcGVyYXRpb25cblx0XHRcdC5leGVjdXRlKHNHcm91cElkKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAobVBhcmFtcy5iUHJlcGFyZUZvckVkaXQpIHtcblx0XHRcdFx0XHQvLyBpZiBQUkVQQVJFIGFjdGlvbiBpcyB0cmlnZ2VyZWQgYWZ0ZXIgRWRpdCB0aGVuIGVpdGhlciB0aGUgc2lkZUVmZmVjdHMgKGlmIGFubm90YXRlZCBhZ2FpbnN0IFBSRVBBUkUpIGFyZSBleGVjdXRlZCBvciB0aGUgbWVzc2FnZXMgYXJlIHJlcXVlc3RlZCBhcyBmYWxsYmFjayBpZiBubyBzaWRlRWZmZWN0czpcblx0XHRcdFx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKSxcblx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLFxuXHRcdFx0XHRcdFx0b0JpbmRpbmdQYXJhbWV0ZXJzID0gb1NpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHNBY3Rpb25OYW1lLCBvQ29udGV4dCksXG5cdFx0XHRcdFx0XHRhVGFyZ2V0UGF0aHMgPSBvQmluZGluZ1BhcmFtZXRlcnMgJiYgb0JpbmRpbmdQYXJhbWV0ZXJzLnBhdGhFeHByZXNzaW9ucztcblx0XHRcdFx0XHRpZiAoYVRhcmdldFBhdGhzICYmIGFUYXJnZXRQYXRocy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhhVGFyZ2V0UGF0aHMsIG9Db250ZXh0LCBzR3JvdXBJZCkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVxdWVzdE1lc3NhZ2VzKG9Db250ZXh0LCBvU2lkZUVmZmVjdHNTZXJ2aWNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9PcGVyYXRpb247XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgdGhlIG9wZXJhdGlvblwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm4gb1ByZXBhcmF0aW9uUHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcHJlcGFyYXRpb24gYWN0aW9uIGNhbm5vdCBiZSBleGVjdXRlZCBvbiBhbiBhY3RpdmUgZG9jdW1lbnRcIik7XG5cdH1cbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWVzc2FnZSBwYXRoIGZvciBhIGNvbnRleHQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgcGF0aCBzaGFsbCBiZSBkZXRlcm1pbmVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBNZXNzYWdlIHBhdGgsIGVtcHR5IGlmIG5vdCBhbm5vdGF0ZWRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZXNQYXRoKG9Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdHNFbnRpdHlTZXRQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzLyRQYXRoXCIpO1xufVxuLyoqXG4gKiBSZXF1ZXN0cyB0aGUgbWVzc2FnZXMgaWYgYW5ub3RhdGVkIGZvciBhIGdpdmVuIGNvbnRleHQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgbWVzc2FnZXMgc2hhbGwgYmUgcmVxdWVzdGVkXG4gKiBAcGFyYW0ge29iamVjdH0gb1NpZGVFZmZlY3RzU2VydmljZSBTZXJ2aWNlIGZvciB0aGUgU2lkZUVmZmVjdHMgb24gU0FQIEZpb3JpIGVsZW1lbnRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIG1lc3NhZ2VzIHdlcmUgcmVxdWVzdGVkXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RNZXNzYWdlcyhvQ29udGV4dDogYW55LCBvU2lkZUVmZmVjdHNTZXJ2aWNlOiBTaWRlRWZmZWN0c1NlcnZpY2UpIHtcblx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IGdldE1lc3NhZ2VzUGF0aChvQ29udGV4dCk7XG5cdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0cmV0dXJuIG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICRQcm9wZXJ0eVBhdGg6IHNNZXNzYWdlc1BhdGggfV0gYXMgYW55LCBvQ29udGV4dCk7XG5cdH1cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuLyoqXG4gKiBFeGVjdXRlcyBkaXNjYXJkIG9mIGEgZHJhZnQgZnVuY3Rpb24gdXNpbmcgSFRUUCBQb3N0LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcmV0dXJucyB7UHJvbWlzZS48c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQ+fSBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uKG9Db250ZXh0OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0aWYgKCFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgb0Rpc2NhcmRPcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5ESVNDQVJEKTtcblx0XHRjb25zdCBvRGlzY2FyZFByb21pc2UgPSBvRGlzY2FyZE9wZXJhdGlvbi5leGVjdXRlKFwiZGlyZWN0XCIpO1xuXHRcdG9Db250ZXh0LmdldE1vZGVsKCkuc3VibWl0QmF0Y2goXCJkaXJlY3RcIik7XG5cdFx0cmV0dXJuIG9EaXNjYXJkUHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGlzY2FyZCBhY3Rpb24gY2Fubm90IGJlIGV4ZWN1dGVkIG9uIGFuIGFjdGl2ZSBkb2N1bWVudFwiKTtcblx0fVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgZHJhZnQgZG9jdW1lbnQgZnJvbSBhbiBleGlzdGluZyBkb2N1bWVudC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgc2V2ZXJhbCBob29rcyBhcyB0aGVyZSBpcyBhIGNlcnRhaW4gY29yZW9ncmFwaHkgZGVmaW5lZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQjY3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0XG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBtUGFyYW1ldGVycyBUaGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMub1ZpZXddIFRoZSB2aWV3XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iUHJlc2VydmVDaGFuZ2VzXSBQcmVzZXJ2ZSBjaGFuZ2VzIG9mIGFuIGV4aXN0aW5nIGRyYWZ0IG9mIGFub3RoZXIgdXNlclxuICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuYlByZXBhcmVPbkVkaXRdIEFsc28gY2FsbCBwcmVwYXJlIHdoZW4gY2FsbGluZyBkcmFmdCBjcmVhdGlvblxuICogQHBhcmFtIHtzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay5iZWZvcmVDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudH0gW21QYXJhbWV0ZXJzLmZuQmVmb3JlQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRdIENhbGxiYWNrIHRoYXQgYWxsb3dzIHZldG8gYmVmb3JlIGNyZWF0ZSByZXF1ZXN0IGlzIGV4ZWN1dGVkXG4gKiBAcGFyYW0ge3NhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLmFmdGVyQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnR9IFttUGFyYW1ldGVycy5mbkFmdGVyQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRdIENhbGxiYWNrIGZvciBwb3N0cHJvY2Vzc2lvbmcgYWZ0ZXIgZHJhZnQgZG9jdW1lbnQgd2FzIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2sud2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWR9IFttUGFyYW1ldGVycy5mbldoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkXSBDYWxsYmFjayBmb3IgZGVjaWRpbmcgb24gb3ZlcndyaXRpbmcgYW4gdW5zYXZlZCBjaGFuZ2UgYnkgYW5vdGhlciB1c2VyXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSByZXNvbHZlcyB3aXRoIHRoZSB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQgY29udGV4dH0gb2YgdGhlIG5ldyBkcmFmdCBkb2N1bWVudFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudChcblx0b0NvbnRleHQ6IGFueSxcblx0b0FwcENvbXBvbmVudDogb2JqZWN0LFxuXHRtUGFyYW1ldGVyczoge1xuXHRcdG9WaWV3OiBWaWV3O1xuXHRcdGJQcmVzZXJ2ZUNoYW5nZXM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdGJQcmVwYXJlT25FZGl0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRmbkJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50PzogYW55O1xuXHRcdGZuQWZ0ZXJDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudD86IGFueTtcblx0XHRmbldoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkPzogYW55O1xuXHR9XG4pIHtcblx0Y29uc3QgbVBhcmFtID0gbVBhcmFtZXRlcnMgfHwge30sXG5cdFx0bG9jYWxJMThuUmVmID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSBhcyBSZXNvdXJjZUJ1bmRsZSxcblx0XHRiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyA9XG5cdFx0XHR0eXBlb2YgbVBhcmFtLmJQcmVzZXJ2ZUNoYW5nZXMgPT09IFwidW5kZWZpbmVkXCIgfHwgKHR5cGVvZiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyA9PT0gXCJib29sZWFuXCIgJiYgbVBhcmFtLmJQcmVzZXJ2ZUNoYW5nZXMpOyAvL2RlZmF1bHQgdHJ1ZVxuXG5cdC8qKlxuXHQgKiBPdmVyd3JpdGUgb3IgcmVqZWN0IGJhc2VkIG9uIGZuV2hlbkRlY2lzaW9uVG9PdmVyd3JpdGVEb2N1bWVudElzUmVxdWlyZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYk92ZXJ3cml0ZSBPdmVyd3JpdGUgdGhlIGNoYW5nZSBvciBub3Rcblx0ICogQHJldHVybnMge1Byb21pc2V9IFJlc29sdmVzIHdpdGggcmVzdWx0IG9mIHtAbGluayBzYXAuZmUuY29yZS5hY3Rpb25zI2V4ZWN1dGVEcmFmdEVkaXRBY3Rpb259XG5cdCAqL1xuXHRmdW5jdGlvbiBvdmVyd3JpdGVPbkRlbWFuZChiT3ZlcndyaXRlOiBhbnkpIHtcblx0XHRpZiAoYk92ZXJ3cml0ZSkge1xuXHRcdFx0Ly9PdmVyd3JpdGUgZXhpc3RpbmcgY2hhbmdlc1xuXHRcdFx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IGRyYWZ0RGF0YUNvbnRleHQgPSBvTW9kZWwuYmluZENvbnRleHQob0NvbnRleHQuZ2V0UGF0aCgpICsgXCIvRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIikuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRsZXQgb1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZTtcblxuXHRcdFx0cmV0dXJuICgobVBhcmFtZXRlcnMub1ZpZXcuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoX29SZXNvdXJjZUJ1bmRsZTogYW55KSB7XG5cdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlID0gX29SZXNvdXJjZUJ1bmRsZTtcblx0XHRcdFx0XHRyZXR1cm4gZHJhZnREYXRhQ29udGV4dC5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChkcmFmdEFkbWluRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0aWYgKGRyYWZ0QWRtaW5EYXRhKSB7XG5cdFx0XHRcdFx0XHQvLyByZW1vdmUgYWxsIHVuYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcyB3ZSBzaG93IGEgc3BlY2lhbCBkaWFsb2dcblx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRsZXQgc0luZm8gPSBkcmFmdEFkbWluRGF0YS5JblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbiB8fCBkcmFmdEFkbWluRGF0YS5JblByb2Nlc3NCeVVzZXI7XG5cdFx0XHRcdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gKG1QYXJhbWV0ZXJzLm9WaWV3LmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXQ7XG5cdFx0XHRcdFx0XHRpZiAoc0luZm8pIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0xvY2tlZEJ5VXNlck1zZyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQ19EUkFGVF9PQkpFQ1RfUEFHRV9EUkFGVF9MT0NLRURfQllfVVNFUlwiLFxuXHRcdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0XHRzSW5mbyxcblx0XHRcdFx0XHRcdFx0XHRzRW50aXR5U2V0XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc0xvY2tlZEJ5VXNlck1zZyk7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihzTG9ja2VkQnlVc2VyTXNnKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHNJbmZvID0gZHJhZnRBZG1pbkRhdGEuQ3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uIHx8IGRyYWZ0QWRtaW5EYXRhLkNyZWF0ZWRCeVVzZXI7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNVbnNhdmVkQ2hhbmdlc01zZyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQ19EUkFGVF9PQkpFQ1RfUEFHRV9EUkFGVF9VTlNBVkVEX0NIQU5HRVNcIixcblx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdFx0c0luZm8sXG5cdFx0XHRcdFx0XHRcdFx0c0VudGl0eVNldFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2hvd01lc3NhZ2VCb3goc1Vuc2F2ZWRDaGFuZ2VzTXNnKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbihvQ29udGV4dCwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRHJhZnQgY3JlYXRpb24gYWJvcnRlZCBmb3IgZG9jdW1lbnQ6IFwiICsgb0NvbnRleHQuZ2V0UGF0aCgpKSk7XG5cdH1cblxuXHRmdW5jdGlvbiBzaG93TWVzc2FnZUJveChzVW5zYXZlZENoYW5nZXNNc2c6IGFueSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0XHR0aXRsZTogbG9jYWxJMThuUmVmLmdldFRleHQoXCJDX0RSQUZUX09CSkVDVF9QQUdFX1dBUk5JTkdcIiksXG5cdFx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdFx0Y29udGVudDogbmV3IFRleHQoe1xuXHRcdFx0XHRcdHRleHQ6IHNVbnNhdmVkQ2hhbmdlc01zZ1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHRleHQ6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfRURJVFwiKSxcblx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHRleHQ6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfQ0FOQ0VMXCIpLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRyZWplY3QoXCJEcmFmdCBjcmVhdGlvbiBhYm9ydGVkIGZvciBkb2N1bWVudDogXCIgKyBvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRvRGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdFx0b0RpYWxvZy5vcGVuKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkJpbmRpbmcgY29udGV4dCB0byBhY3RpdmUgZG9jdW1lbnQgaXMgcmVxdWlyZWRcIikpO1xuXHR9XG5cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcblx0XHRtUGFyYW0uZm5CZWZvcmVDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudFxuXHRcdFx0PyBtUGFyYW0uZm5CZWZvcmVDcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudChvQ29udGV4dCwgYlJ1blByZXNlcnZlQ2hhbmdlc0Zsb3cpXG5cdFx0XHQ6IHRydWVcblx0KVxuXHRcdC50aGVuKGZ1bmN0aW9uIChiRXhlY3V0ZTogYW55KSB7XG5cdFx0XHRpZiAoIWJFeGVjdXRlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkRyYWZ0IGNyZWF0aW9uIHdhcyBhYm9ydGVkIGJ5IGV4dGVuc2lvbiBmb3IgZG9jdW1lbnQ6IFwiICsgb0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBleGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0LCBiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdykuY2F0Y2goZnVuY3Rpb24gKG9SZXNwb25zZTogYW55KSB7XG5cdFx0XHRcdC8vT25seSBjYWxsIGJhY2sgaWYgZXJyb3IgNDA5XG5cdFx0XHRcdGlmIChiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyAmJiBvUmVzcG9uc2Uuc3RhdHVzID09PSA0MDkpIHtcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdFx0XHRtUGFyYW0uZm5XaGVuRGVjaXNpb25Ub092ZXJ3cml0ZURvY3VtZW50SXNSZXF1aXJlZCA/IG1QYXJhbS5mbldoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkKCkgOiB0cnVlXG5cdFx0XHRcdFx0KS50aGVuKG92ZXJ3cml0ZU9uRGVtYW5kKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3Iob1Jlc3BvbnNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSlcblx0XHQudGhlbihmdW5jdGlvbiAob0RyYWZ0Q29udGV4dDogYW55KSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRtUGFyYW0uZm5BZnRlckNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50XG5cdFx0XHRcdFx0PyBtUGFyYW0uZm5BZnRlckNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50KG9Db250ZXh0LCBvRHJhZnRDb250ZXh0KVxuXHRcdFx0XHRcdDogb0RyYWZ0Q29udGV4dFxuXHRcdFx0KTtcblx0XHR9KVxuXHRcdC50aGVuKGZ1bmN0aW9uIChvRHJhZnRDb250ZXh0OiBhbnkpIHtcblx0XHRcdGlmIChtUGFyYW0uYlByZXBhcmVPbkVkaXQgJiYgaGFzUHJlcGFyZUFjdGlvbihvRHJhZnRDb250ZXh0KSkge1xuXHRcdFx0XHRyZXR1cm4gZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24ob0RyYWZ0Q29udGV4dCwgb0FwcENvbXBvbmVudCwgeyBiUHJlcGFyZUZvckVkaXQ6IHRydWUgfSkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9EcmFmdENvbnRleHQ7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9EcmFmdENvbnRleHQ7XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKGV4YzogYW55KSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXhjKTtcblx0XHR9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBhY3RpdmUgZG9jdW1lbnQgZnJvbSBhIGRyYWZ0IGRvY3VtZW50LlxuICpcbiAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBzZXZlcmFsIGhvb2tzIGFzIHRoZXJlIGlzIGEgY2VydGFpbiBjaG9yZW9ncmFwaHkgZGVmaW5lZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQjYWN0aXZhdGVEb2N1bWVudFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHBhcmFtIHtvYmplY3R9IG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIHtvYmplY3R9IG1QYXJhbWV0ZXJzIFRoZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge3NhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLmZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudH0gW21QYXJhbWV0ZXJzLmZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudF0gQ2FsbGJhY2sgdGhhdCBhbGxvd3MgdmV0byBiZWZvcmUgY3JlYXRlIHJlcXVlc3QgaXMgZXhlY3V0ZWRcbiAqIEBwYXJhbSB7c2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2suZm5BZnRlckFjdGl2YXRlRG9jdW1lbnR9IFttUGFyYW1ldGVycy5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudF0gQ2FsbGJhY2sgZm9yIHBvc3Rwcm9jZXNzaW9uZyBhZnRlciBkb2N1bWVudCB3YXMgYWN0aXZhdGVkLlxuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgcmVzb2x2ZXMgd2l0aCB0aGUge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0IGNvbnRleHR9IG9mIHRoZSBuZXcgZHJhZnQgZG9jdW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gYWN0aXZhdGVEb2N1bWVudChcblx0b0NvbnRleHQ6IGFueSxcblx0b0FwcENvbXBvbmVudDogb2JqZWN0LFxuXHRtUGFyYW1ldGVyczogeyBmbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQ/OiBhbnk7IGZuQWZ0ZXJBY3RpdmF0ZURvY3VtZW50PzogYW55IH1cbikge1xuXHRjb25zdCBtUGFyYW0gPSBtUGFyYW1ldGVycyB8fCB7fTtcblxuXHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkJpbmRpbmcgY29udGV4dCB0byBkcmFmdCBkb2N1bWVudCBpcyByZXF1aXJlZFwiKSk7XG5cdH1cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShtUGFyYW0uZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50ID8gbVBhcmFtLmZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudChvQ29udGV4dCkgOiB0cnVlKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChiRXhlY3V0ZTogYW55KSB7XG5cdFx0XHRpZiAoIWJFeGVjdXRlKSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBY3RpdmF0aW9uIG9mIHRoZSBkb2N1bWVudCB3YXMgYWJvcnRlZCBieSBleHRlbnNpb24gZm9yIGRvY3VtZW50OiBcIiArIG9Db250ZXh0LmdldFBhdGgoKSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWhhc1ByZXBhcmVBY3Rpb24ob0NvbnRleHQpKSB7XG5cdFx0XHRcdHJldHVybiBleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uKG9Db250ZXh0LCBvQXBwQ29tcG9uZW50KTtcblx0XHRcdH1cblxuXHRcdFx0LyogYWN0aXZhdGlvbiByZXF1aXJlcyBwcmVwYXJhdGlvbiAqL1xuXHRcdFx0Y29uc3Qgc0JhdGNoR3JvdXAgPSBcImRyYWZ0XCI7XG5cdFx0XHQvLyB3ZSB1c2UgdGhlIHNhbWUgYmF0Y2hHcm91cCB0byBmb3JjZSBwcmVwYXJlIGFuZCBhY3RpdmF0ZSBpbiBhIHNhbWUgYmF0Y2ggYnV0IHdpdGggZGlmZmVyZW50IGNoYW5nZXNldFxuXHRcdFx0Y29uc3Qgb1ByZXBhcmVQcm9taXNlID0gZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24ob0NvbnRleHQsIG9BcHBDb21wb25lbnQsIHtcblx0XHRcdFx0Z3JvdXBJZDogc0JhdGNoR3JvdXAsXG5cdFx0XHRcdGJQcmVwYXJlRm9yRWRpdDogZmFsc2Vcblx0XHRcdH0pO1xuXHRcdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzQmF0Y2hHcm91cCk7XG5cblx0XHRcdGNvbnN0IG9BY3RpdmF0ZVByb21pc2UgPSBleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uKG9Db250ZXh0LCBvQXBwQ29tcG9uZW50LCBzQmF0Y2hHcm91cCk7XG5cblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChbb1ByZXBhcmVQcm9taXNlLCBvQWN0aXZhdGVQcm9taXNlXSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKHZhbHVlczogW2FueSwgYW55XSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZXNbMV07XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXhjOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXhjKTtcblx0XHRcdFx0fSk7XG5cdFx0fSlcblx0XHQudGhlbihmdW5jdGlvbiAob0FjdGl2ZURvY3VtZW50Q29udGV4dDogYW55KSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRtUGFyYW0uZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQgPyBtUGFyYW0uZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQob0NvbnRleHQsIG9BY3RpdmVEb2N1bWVudENvbnRleHQpIDogb0FjdGl2ZURvY3VtZW50Q29udGV4dFxuXHRcdFx0KTtcblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAoZXhjOiBhbnkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChleGMpO1xuXHRcdH0pO1xufVxuLyoqXG4gKiBIVFRQIFBPU1QgY2FsbCB3aGVuIERyYWZ0QWN0aW9uIGlzIHByZXNlbnQgZm9yIERyYWZ0IERlbGV0ZTsgSFRUUCBERUxFVEUgZm9yIERyYWZ0KHdoZW4gbm8gRHJhZnRBY3Rpb24pXG4gKiBhbmQgQWN0aXZlIEluc3RhbmNlIHVzZXMgREVMRVRFIGFsd2F5cy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQjZGVsZXRlRHJhZnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0XG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSBkaXNjYXJkZWRcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBkZWxldGVEcmFmdChvQ29udGV4dDogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdGNvbnN0IHNEaXNjYXJkQWN0aW9uID0gZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkRJU0NBUkQpLFxuXHRcdGJJc0FjdGl2ZUVudGl0eSA9IG9Db250ZXh0LmdldE9iamVjdCgpLklzQWN0aXZlRW50aXR5O1xuXG5cdGlmIChiSXNBY3RpdmVFbnRpdHkgfHwgKCFiSXNBY3RpdmVFbnRpdHkgJiYgIXNEaXNjYXJkQWN0aW9uKSkge1xuXHRcdC8vVXNlIERlbGV0ZSBpbiBjYXNlIG9mIGFjdGl2ZSBlbnRpdHkgYW5kIG5vIGRpc2NhcmQgYWN0aW9uIGF2YWlsYWJsZSBmb3IgZHJhZnRcblx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0XG5cdFx0XHRcdC5nZXRCaW5kaW5nKClcblx0XHRcdFx0LnJlc2V0Q2hhbmdlcygpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHQuZGVsZXRlKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRleHQuZGVsZXRlKCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vVXNlIERpc2NhcmQgUG9zdCBBY3Rpb24gaWYgaXQgaXMgYSBkcmFmdCBlbnRpdHkgYW5kIGRpc2NhcmQgYWN0aW9uIGV4aXN0c1xuXHRcdHJldHVybiBleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uKG9Db250ZXh0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBkcmFmdDtcbiJdfQ==
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
import Button from "sap/m/Button";
|
|
3
|
-
import Text from "sap/m/Text";
|
|
4
|
-
import MessageBox from "sap/m/MessageBox";
|
|
5
|
-
import messageHandling from "sap/fe/core/actions/messageHandling";
|
|
6
|
-
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
1
|
+
import ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
7
2
|
import Log from "sap/base/Log";
|
|
8
3
|
import { AppComponent } from "sap/fe/core";
|
|
4
|
+
import messageHandling from "sap/fe/core/actions/messageHandling";
|
|
5
|
+
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
9
6
|
import { SideEffectsService } from "sap/fe/core/services/SideEffectsServiceFactory";
|
|
10
|
-
import
|
|
7
|
+
import Button from "sap/m/Button";
|
|
8
|
+
import Dialog from "sap/m/Dialog";
|
|
9
|
+
import MessageBox from "sap/m/MessageBox";
|
|
10
|
+
import Text from "sap/m/Text";
|
|
11
11
|
import View from "sap/ui/core/mvc/View";
|
|
12
12
|
import Context from "sap/ui/model/odata/v4/Context";
|
|
13
13
|
import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
@@ -135,7 +135,7 @@ function executeDraftEditAction(oContext: any, bPreserveChanges: boolean) {
|
|
|
135
135
|
const oOperation = createOperation(oContext, draftOperations.EDIT, oOptions);
|
|
136
136
|
oOperation.setParameter("PreserveChanges", bPreserveChanges);
|
|
137
137
|
const sGroupId = "direct";
|
|
138
|
-
const oEditPromise = oOperation.execute(sGroupId).then(function(oDraftDocumentContext: any) {
|
|
138
|
+
const oEditPromise = oOperation.execute(sGroupId).then(function (oDraftDocumentContext: any) {
|
|
139
139
|
return oDraftDocumentContext;
|
|
140
140
|
});
|
|
141
141
|
oOperation.getModel().submitBatch(sGroupId);
|
|
@@ -188,23 +188,23 @@ function executeDraftActivationAction(oContext: any, oAppComponent: AppComponent
|
|
|
188
188
|
const oOperation = createOperation(oContext, draftOperations.ACTIVATION, { $$inheritExpandSelect: true });
|
|
189
189
|
return oOperation
|
|
190
190
|
.execute(sGroupId, bIgnoreEtag)
|
|
191
|
-
.then(function(oActiveDocumentContext: any) {
|
|
191
|
+
.then(function (oActiveDocumentContext: any) {
|
|
192
192
|
return oActiveDocumentContext;
|
|
193
193
|
})
|
|
194
194
|
.catch(
|
|
195
195
|
//if ACTIVATE action fails then we request either the sideEffects against PREPARE action (if annotated) or the messages as fallback:
|
|
196
|
-
function() {
|
|
196
|
+
function () {
|
|
197
197
|
if (bHasPrepareAction) {
|
|
198
198
|
const sActionName = getActionName(oContext, draftOperations.PREPARE),
|
|
199
199
|
oSideEffectsService = oAppComponent.getSideEffectsService(),
|
|
200
200
|
oBindingParameters = oSideEffectsService.getODataActionSideEffects(sActionName, oContext),
|
|
201
201
|
aTargetPaths = oBindingParameters && oBindingParameters.pathExpressions;
|
|
202
202
|
if (aTargetPaths && aTargetPaths.length > 0) {
|
|
203
|
-
oSideEffectsService.requestSideEffects(aTargetPaths, oContext).catch(function(oError: any) {
|
|
203
|
+
oSideEffectsService.requestSideEffects(aTargetPaths, oContext).catch(function (oError: any) {
|
|
204
204
|
Log.error("Error while requesting side effects", oError);
|
|
205
205
|
});
|
|
206
206
|
} else {
|
|
207
|
-
requestMessages(oContext, oSideEffectsService).catch(function(oError: any) {
|
|
207
|
+
requestMessages(oContext, oSideEffectsService).catch(function (oError: any) {
|
|
208
208
|
Log.error("Error while requesting messages", oError);
|
|
209
209
|
});
|
|
210
210
|
}
|
|
@@ -244,7 +244,7 @@ function executeDraftPreparationAction(
|
|
|
244
244
|
const sGroupId = mParams.groupId || oOperation.getGroupId();
|
|
245
245
|
const oPreparationPromise = oOperation
|
|
246
246
|
.execute(sGroupId)
|
|
247
|
-
.then(function() {
|
|
247
|
+
.then(function () {
|
|
248
248
|
if (mParams.bPrepareForEdit) {
|
|
249
249
|
// if PREPARE action is triggered after Edit then either the sideEffects (if annotated against PREPARE) are executed or the messages are requested as fallback if no sideEffects:
|
|
250
250
|
const sActionName = getActionName(oContext, draftOperations.PREPARE),
|
|
@@ -252,7 +252,7 @@ function executeDraftPreparationAction(
|
|
|
252
252
|
oBindingParameters = oSideEffectsService.getODataActionSideEffects(sActionName, oContext),
|
|
253
253
|
aTargetPaths = oBindingParameters && oBindingParameters.pathExpressions;
|
|
254
254
|
if (aTargetPaths && aTargetPaths.length > 0) {
|
|
255
|
-
oSideEffectsService.requestSideEffects(aTargetPaths, oContext, sGroupId).catch(function(oError: any) {
|
|
255
|
+
oSideEffectsService.requestSideEffects(aTargetPaths, oContext, sGroupId).catch(function (oError: any) {
|
|
256
256
|
Log.error("Error while requesting side effects", oError);
|
|
257
257
|
});
|
|
258
258
|
} else {
|
|
@@ -261,7 +261,7 @@ function executeDraftPreparationAction(
|
|
|
261
261
|
}
|
|
262
262
|
return oOperation;
|
|
263
263
|
})
|
|
264
|
-
.catch(function(oError: any) {
|
|
264
|
+
.catch(function (oError: any) {
|
|
265
265
|
Log.error("Error while executing the operation", oError);
|
|
266
266
|
});
|
|
267
267
|
|
|
@@ -374,11 +374,11 @@ function createDraftFromActiveDocument(
|
|
|
374
374
|
let oResourceBundle: ResourceBundle;
|
|
375
375
|
|
|
376
376
|
return ((mParameters.oView.getModel("sap.fe.i18n") as ResourceModel).getResourceBundle() as Promise<ResourceBundle>)
|
|
377
|
-
.then(function(_oResourceBundle: any) {
|
|
377
|
+
.then(function (_oResourceBundle: any) {
|
|
378
378
|
oResourceBundle = _oResourceBundle;
|
|
379
379
|
return draftDataContext.requestObject();
|
|
380
380
|
})
|
|
381
|
-
.then(function(draftAdminData: any) {
|
|
381
|
+
.then(function (draftAdminData: any) {
|
|
382
382
|
if (draftAdminData) {
|
|
383
383
|
// remove all unbound transition messages as we show a special dialog
|
|
384
384
|
messageHandling.removeUnboundTransitionMessages();
|
|
@@ -401,7 +401,7 @@ function createDraftFromActiveDocument(
|
|
|
401
401
|
sInfo,
|
|
402
402
|
sEntitySet
|
|
403
403
|
);
|
|
404
|
-
return showMessageBox(sUnsavedChangesMsg).then(function() {
|
|
404
|
+
return showMessageBox(sUnsavedChangesMsg).then(function () {
|
|
405
405
|
return executeDraftEditAction(oContext, false);
|
|
406
406
|
});
|
|
407
407
|
}
|
|
@@ -412,7 +412,7 @@ function createDraftFromActiveDocument(
|
|
|
412
412
|
}
|
|
413
413
|
|
|
414
414
|
function showMessageBox(sUnsavedChangesMsg: any) {
|
|
415
|
-
return new Promise(function(resolve: (value: any) => void, reject: (reason?: any) => void) {
|
|
415
|
+
return new Promise(function (resolve: (value: any) => void, reject: (reason?: any) => void) {
|
|
416
416
|
const oDialog = new Dialog({
|
|
417
417
|
title: localI18nRef.getText("C_DRAFT_OBJECT_PAGE_WARNING"),
|
|
418
418
|
state: "Warning",
|
|
@@ -422,19 +422,19 @@ function createDraftFromActiveDocument(
|
|
|
422
422
|
beginButton: new Button({
|
|
423
423
|
text: localI18nRef.getText("C_COMMON_OBJECT_PAGE_EDIT"),
|
|
424
424
|
type: "Emphasized",
|
|
425
|
-
press: function() {
|
|
425
|
+
press: function () {
|
|
426
426
|
oDialog.close();
|
|
427
427
|
resolve(true);
|
|
428
428
|
}
|
|
429
429
|
}),
|
|
430
430
|
endButton: new Button({
|
|
431
431
|
text: localI18nRef.getText("C_COMMON_OBJECT_PAGE_CANCEL"),
|
|
432
|
-
press: function() {
|
|
432
|
+
press: function () {
|
|
433
433
|
oDialog.close();
|
|
434
434
|
reject("Draft creation aborted for document: " + oContext.getPath());
|
|
435
435
|
}
|
|
436
436
|
}),
|
|
437
|
-
afterClose: function() {
|
|
437
|
+
afterClose: function () {
|
|
438
438
|
oDialog.destroy();
|
|
439
439
|
}
|
|
440
440
|
});
|
|
@@ -452,13 +452,15 @@ function createDraftFromActiveDocument(
|
|
|
452
452
|
? mParam.fnBeforeCreateDraftFromActiveDocument(oContext, bRunPreserveChangesFlow)
|
|
453
453
|
: true
|
|
454
454
|
)
|
|
455
|
-
.then(function(bExecute: any) {
|
|
455
|
+
.then(function (bExecute: any) {
|
|
456
456
|
if (!bExecute) {
|
|
457
457
|
throw new Error("Draft creation was aborted by extension for document: " + oContext.getPath());
|
|
458
458
|
}
|
|
459
|
-
return executeDraftEditAction(oContext, bRunPreserveChangesFlow).catch(function(oResponse: any) {
|
|
459
|
+
return executeDraftEditAction(oContext, bRunPreserveChangesFlow).catch(function (oResponse: any) {
|
|
460
460
|
//Only call back if error 409
|
|
461
461
|
if (bRunPreserveChangesFlow && oResponse.status === 409) {
|
|
462
|
+
messageHandling.removeBoundTransitionMessages();
|
|
463
|
+
messageHandling.removeUnboundTransitionMessages();
|
|
462
464
|
return Promise.resolve(
|
|
463
465
|
mParam.fnWhenDecisionToOverwriteDocumentIsRequired ? mParam.fnWhenDecisionToOverwriteDocumentIsRequired() : true
|
|
464
466
|
).then(overwriteOnDemand);
|
|
@@ -467,22 +469,22 @@ function createDraftFromActiveDocument(
|
|
|
467
469
|
}
|
|
468
470
|
});
|
|
469
471
|
})
|
|
470
|
-
.then(function(oDraftContext: any) {
|
|
472
|
+
.then(function (oDraftContext: any) {
|
|
471
473
|
return Promise.resolve(
|
|
472
474
|
mParam.fnAfterCreateDraftFromActiveDocument
|
|
473
475
|
? mParam.fnAfterCreateDraftFromActiveDocument(oContext, oDraftContext)
|
|
474
476
|
: oDraftContext
|
|
475
477
|
);
|
|
476
478
|
})
|
|
477
|
-
.then(function(oDraftContext: any) {
|
|
479
|
+
.then(function (oDraftContext: any) {
|
|
478
480
|
if (mParam.bPrepareOnEdit && hasPrepareAction(oDraftContext)) {
|
|
479
|
-
return executeDraftPreparationAction(oDraftContext, oAppComponent, { bPrepareForEdit: true }).then(function() {
|
|
481
|
+
return executeDraftPreparationAction(oDraftContext, oAppComponent, { bPrepareForEdit: true }).then(function () {
|
|
480
482
|
return oDraftContext;
|
|
481
483
|
});
|
|
482
484
|
}
|
|
483
485
|
return oDraftContext;
|
|
484
486
|
})
|
|
485
|
-
.catch(function(exc: any) {
|
|
487
|
+
.catch(function (exc: any) {
|
|
486
488
|
return Promise.reject(exc);
|
|
487
489
|
});
|
|
488
490
|
}
|
|
@@ -515,7 +517,7 @@ function activateDocument(
|
|
|
515
517
|
return Promise.reject(new Error("Binding context to draft document is required"));
|
|
516
518
|
}
|
|
517
519
|
return Promise.resolve(mParam.fnBeforeActivateDocument ? mParam.fnBeforeActivateDocument(oContext) : true)
|
|
518
|
-
.then(function(bExecute: any) {
|
|
520
|
+
.then(function (bExecute: any) {
|
|
519
521
|
if (!bExecute) {
|
|
520
522
|
return Promise.reject(new Error("Activation of the document was aborted by extension for document: " + oContext.getPath()));
|
|
521
523
|
}
|
|
@@ -536,19 +538,19 @@ function activateDocument(
|
|
|
536
538
|
const oActivatePromise = executeDraftActivationAction(oContext, oAppComponent, sBatchGroup);
|
|
537
539
|
|
|
538
540
|
return Promise.all([oPreparePromise, oActivatePromise])
|
|
539
|
-
.then(function(values: [any, any]) {
|
|
541
|
+
.then(function (values: [any, any]) {
|
|
540
542
|
return values[1];
|
|
541
543
|
})
|
|
542
|
-
.catch(function(exc: any) {
|
|
544
|
+
.catch(function (exc: any) {
|
|
543
545
|
return Promise.reject(exc);
|
|
544
546
|
});
|
|
545
547
|
})
|
|
546
|
-
.then(function(oActiveDocumentContext: any) {
|
|
548
|
+
.then(function (oActiveDocumentContext: any) {
|
|
547
549
|
return Promise.resolve(
|
|
548
550
|
mParam.fnAfterActivateDocument ? mParam.fnAfterActivateDocument(oContext, oActiveDocumentContext) : oActiveDocumentContext
|
|
549
551
|
);
|
|
550
552
|
})
|
|
551
|
-
.catch(function(exc: any) {
|
|
553
|
+
.catch(function (exc: any) {
|
|
552
554
|
return Promise.reject(exc);
|
|
553
555
|
});
|
|
554
556
|
}
|
|
@@ -575,10 +577,10 @@ function deleteDraft(oContext: any): Promise<boolean> {
|
|
|
575
577
|
return oContext
|
|
576
578
|
.getBinding()
|
|
577
579
|
.resetChanges()
|
|
578
|
-
.then(function() {
|
|
580
|
+
.then(function () {
|
|
579
581
|
return oContext.delete();
|
|
580
582
|
})
|
|
581
|
-
.catch(function(error: any) {
|
|
583
|
+
.catch(function (error: any) {
|
|
582
584
|
return Promise.reject(error);
|
|
583
585
|
});
|
|
584
586
|
} else {
|