easy-richtextarea 4.0.20 → 4.0.22
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/example.js +176 -75
- package/lib/eventTypes.js +53 -0
- package/lib/example/view.js +14 -10
- package/lib/keyCodes.js +13 -4
- package/lib/richTextarea.js +86 -53
- package/package.json +1 -1
- package/src/eventTypes.js +17 -0
- package/src/example/view.js +13 -9
- package/src/keyCodes.js +1 -0
- package/src/richTextarea.js +78 -41
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
CUT_EVENT_TYPE: function() {
|
|
13
|
+
return CUT_EVENT_TYPE;
|
|
14
|
+
},
|
|
15
|
+
COPY_EVENT_TYPE: function() {
|
|
16
|
+
return COPY_EVENT_TYPE;
|
|
17
|
+
},
|
|
18
|
+
BLUR_EVENT_TYPE: function() {
|
|
19
|
+
return BLUR_EVENT_TYPE;
|
|
20
|
+
},
|
|
21
|
+
PASTE_EVENT_TYPE: function() {
|
|
22
|
+
return PASTE_EVENT_TYPE;
|
|
23
|
+
},
|
|
24
|
+
INPUT_EVENT_TYPE: function() {
|
|
25
|
+
return INPUT_EVENT_TYPE;
|
|
26
|
+
},
|
|
27
|
+
FOCUS_EVENT_TYPE: function() {
|
|
28
|
+
return FOCUS_EVENT_TYPE;
|
|
29
|
+
},
|
|
30
|
+
CHANGE_EVENT_TYPE: function() {
|
|
31
|
+
return CHANGE_EVENT_TYPE;
|
|
32
|
+
},
|
|
33
|
+
SCROLL_EVENT_TYPE: function() {
|
|
34
|
+
return SCROLL_EVENT_TYPE;
|
|
35
|
+
},
|
|
36
|
+
KEYDOWN_EVENT_TYPE: function() {
|
|
37
|
+
return KEYDOWN_EVENT_TYPE;
|
|
38
|
+
},
|
|
39
|
+
CONTEXTMENU_EVENT_TYPE: function() {
|
|
40
|
+
return CONTEXTMENU_EVENT_TYPE;
|
|
41
|
+
},
|
|
42
|
+
SELECTIONCHANGE_EVENT_TYPE: function() {
|
|
43
|
+
return SELECTIONCHANGE_EVENT_TYPE;
|
|
44
|
+
},
|
|
45
|
+
FIND_EVENT_TYPE: function() {
|
|
46
|
+
return FIND_EVENT_TYPE;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
var _easy = require("easy");
|
|
50
|
+
var CUT_EVENT_TYPE = _easy.eventTypes.CUT_EVENT_TYPE, COPY_EVENT_TYPE = _easy.eventTypes.COPY_EVENT_TYPE, BLUR_EVENT_TYPE = _easy.eventTypes.BLUR_EVENT_TYPE, PASTE_EVENT_TYPE = _easy.eventTypes.PASTE_EVENT_TYPE, INPUT_EVENT_TYPE = _easy.eventTypes.INPUT_EVENT_TYPE, FOCUS_EVENT_TYPE = _easy.eventTypes.FOCUS_EVENT_TYPE, CHANGE_EVENT_TYPE = _easy.eventTypes.CHANGE_EVENT_TYPE, SCROLL_EVENT_TYPE = _easy.eventTypes.SCROLL_EVENT_TYPE, KEYDOWN_EVENT_TYPE = _easy.eventTypes.KEYDOWN_EVENT_TYPE, CONTEXTMENU_EVENT_TYPE = _easy.eventTypes.CONTEXTMENU_EVENT_TYPE, SELECTIONCHANGE_EVENT_TYPE = _easy.eventTypes.SELECTIONCHANGE_EVENT_TYPE;
|
|
51
|
+
var FIND_EVENT_TYPE = "find";
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ldmVudFR5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBldmVudFR5cGVzIH0gZnJvbSBcImVhc3lcIjtcblxuZXhwb3J0IGNvbnN0IHsgQ1VUX0VWRU5UX1RZUEUsXG4gICAgICAgICAgICAgICBDT1BZX0VWRU5UX1RZUEUsXG4gICAgICAgICAgICAgICBCTFVSX0VWRU5UX1RZUEUsXG4gICAgICAgICAgICAgICBQQVNURV9FVkVOVF9UWVBFLFxuICAgICAgICAgICAgICAgSU5QVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXG4gICAgICAgICAgICAgICBDSEFOR0VfRVZFTlRfVFlQRSxcbiAgICAgICAgICAgICAgIFNDUk9MTF9FVkVOVF9UWVBFLFxuICAgICAgICAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxuICAgICAgICAgICAgICAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSxcbiAgICAgICAgICAgICAgIFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFIH0gPSBldmVudFR5cGVzO1xuXG5leHBvcnQgY29uc3QgRklORF9FVkVOVF9UWVBFID0gXCJmaW5kXCI7XG4iXSwibmFtZXMiOlsiQ1VUX0VWRU5UX1RZUEUiLCJDT1BZX0VWRU5UX1RZUEUiLCJCTFVSX0VWRU5UX1RZUEUiLCJQQVNURV9FVkVOVF9UWVBFIiwiSU5QVVRfRVZFTlRfVFlQRSIsIkZPQ1VTX0VWRU5UX1RZUEUiLCJDSEFOR0VfRVZFTlRfVFlQRSIsIlNDUk9MTF9FVkVOVF9UWVBFIiwiS0VZRE9XTl9FVkVOVF9UWVBFIiwiQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSIsIlNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFIiwiRklORF9FVkVOVF9UWVBFIiwiZXZlbnRUeXBlcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBSWVBLGNBQWM7ZUFBZEE7O0lBQ0FDLGVBQWU7ZUFBZkE7O0lBQ0FDLGVBQWU7ZUFBZkE7O0lBQ0FDLGdCQUFnQjtlQUFoQkE7O0lBQ0FDLGdCQUFnQjtlQUFoQkE7O0lBQ0FDLGdCQUFnQjtlQUFoQkE7O0lBQ0FDLGlCQUFpQjtlQUFqQkE7O0lBQ0FDLGlCQUFpQjtlQUFqQkE7O0lBQ0FDLGtCQUFrQjtlQUFsQkE7O0lBQ0FDLHNCQUFzQjtlQUF0QkE7O0lBQ0FDLDBCQUEwQjtlQUExQkE7O0lBRUZDLGVBQWU7ZUFBZkE7OztvQkFkYztBQUVwQixJQUFRWCxpQkFVK0JZLGdCQUFVLENBVnpDWixnQkFDQUMsa0JBUytCVyxnQkFBVSxDQVR6Q1gsaUJBQ0FDLGtCQVErQlUsZ0JBQVUsQ0FSekNWLGlCQUNBQyxtQkFPK0JTLGdCQUFVLENBUHpDVCxrQkFDQUMsbUJBTStCUSxnQkFBVSxDQU56Q1Isa0JBQ0FDLG1CQUsrQk8sZ0JBQVUsQ0FMekNQLGtCQUNBQyxvQkFJK0JNLGdCQUFVLENBSnpDTixtQkFDQUMsb0JBRytCSyxnQkFBVSxDQUh6Q0wsbUJBQ0FDLHFCQUUrQkksZ0JBQVUsQ0FGekNKLG9CQUNBQyx5QkFDK0JHLGdCQUFVLENBRHpDSCx3QkFDQUMsNkJBQStCRSxnQkFBVSxDQUF6Q0Y7QUFFUixJQUFNQyxrQkFBa0IifQ==
|
package/lib/example/view.js
CHANGED
|
@@ -15,10 +15,11 @@ function _interopRequireDefault(obj) {
|
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
var content = "", richTextarea = /*#__PURE__*/ React.createElement(_richTextarea.default, {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
onFind: findHandler,
|
|
19
|
+
onBlur: blurHandler,
|
|
20
20
|
onFocus: focusHandler,
|
|
21
|
-
|
|
21
|
+
onChange: changeHandler,
|
|
22
|
+
onScroll: scrollHandler
|
|
22
23
|
});
|
|
23
24
|
richTextarea.setContent(content);
|
|
24
25
|
richTextarea.activate();
|
|
@@ -28,6 +29,15 @@ var View = function(properties) {
|
|
|
28
29
|
}, richTextarea);
|
|
29
30
|
};
|
|
30
31
|
var _default = View;
|
|
32
|
+
function findHandler(event, element) {
|
|
33
|
+
console.log("find");
|
|
34
|
+
}
|
|
35
|
+
function blurHandler(event, element) {
|
|
36
|
+
console.log("blur");
|
|
37
|
+
}
|
|
38
|
+
function focusHandler(event, element) {
|
|
39
|
+
console.log("focus");
|
|
40
|
+
}
|
|
31
41
|
function changeHandler(event, element) {
|
|
32
42
|
var contentChanged = richTextarea.hasContentChanged(), selectionChanged = richTextarea.hasSelectionChanged();
|
|
33
43
|
console.log(contentChanged, selectionChanged);
|
|
@@ -36,11 +46,5 @@ function scrollHandler(event, element) {
|
|
|
36
46
|
var scrollTop = richTextarea.getScrollTop(), scrollLeft = richTextarea.getScrollLeft();
|
|
37
47
|
console.log(scrollTop, scrollLeft);
|
|
38
48
|
}
|
|
39
|
-
function focusHandler(event, element) {
|
|
40
|
-
console.log("focus");
|
|
41
|
-
}
|
|
42
|
-
function blurHandler(event, element) {
|
|
43
|
-
console.log("blur");
|
|
44
|
-
}
|
|
45
49
|
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSaWNoVGV4dGFyZWEgZnJvbSBcIi4vcmljaFRleHRhcmVhXCI7XG5cbmNvbnN0IGNvbnRlbnQgPSBcIlwiLFxuICAgICAgcmljaFRleHRhcmVhID1cblxuICAgICAgICA8UmljaFRleHRhcmVhIG9uRmluZD17ZmluZEhhbmRsZXJ9IG9uQmx1cj17Ymx1ckhhbmRsZXJ9IG9uRm9jdXM9e2ZvY3VzSGFuZGxlcn0gb25DaGFuZ2U9e2NoYW5nZUhhbmRsZXJ9IG9uU2Nyb2xsPXtzY3JvbGxIYW5kbGVyfSAvPlxuXG4gICAgICA7XG5cbnJpY2hUZXh0YXJlYS5zZXRDb250ZW50KGNvbnRlbnQpO1xuXG5yaWNoVGV4dGFyZWEuYWN0aXZhdGUoKTtcblxuY29uc3QgVmlldyA9IChwcm9wZXJ0aWVzKSA9PlxuXG4gIDxkaXYgY2xhc3NOYW1lPVwidmlld1wiPlxuICAgIHtyaWNoVGV4dGFyZWF9XG4gIDwvZGl2PlxuXG47XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXc7XG5cbmZ1bmN0aW9uIGZpbmRIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnNvbGUubG9nKFwiZmluZFwiKVxufVxuXG5mdW5jdGlvbiBibHVySGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zb2xlLmxvZyhcImJsdXJcIilcbn1cblxuZnVuY3Rpb24gZm9jdXNIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnNvbGUubG9nKFwiZm9jdXNcIilcbn1cblxuZnVuY3Rpb24gY2hhbmdlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCBjb250ZW50Q2hhbmdlZCA9IHJpY2hUZXh0YXJlYS5oYXNDb250ZW50Q2hhbmdlZCgpLFxuICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gcmljaFRleHRhcmVhLmhhc1NlbGVjdGlvbkNoYW5nZWQoKTtcblxuICBjb25zb2xlLmxvZyhjb250ZW50Q2hhbmdlZCwgc2VsZWN0aW9uQ2hhbmdlZClcbn1cblxuZnVuY3Rpb24gc2Nyb2xsSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCBzY3JvbGxUb3AgPSByaWNoVGV4dGFyZWEuZ2V0U2Nyb2xsVG9wKCksXG4gICAgICAgIHNjcm9sbExlZnQgPSByaWNoVGV4dGFyZWEuZ2V0U2Nyb2xsTGVmdCgpO1xuXG4gIGNvbnNvbGUubG9nKHNjcm9sbFRvcCwgc2Nyb2xsTGVmdClcbn1cbiJdLCJuYW1lcyI6WyJjb250ZW50IiwicmljaFRleHRhcmVhIiwiUmljaFRleHRhcmVhIiwib25GaW5kIiwiZmluZEhhbmRsZXIiLCJvbkJsdXIiLCJibHVySGFuZGxlciIsIm9uRm9jdXMiLCJmb2N1c0hhbmRsZXIiLCJvbkNoYW5nZSIsImNoYW5nZUhhbmRsZXIiLCJvblNjcm9sbCIsInNjcm9sbEhhbmRsZXIiLCJzZXRDb250ZW50IiwiYWN0aXZhdGUiLCJWaWV3IiwicHJvcGVydGllcyIsImRpdiIsImNsYXNzTmFtZSIsImV2ZW50IiwiZWxlbWVudCIsImNvbnNvbGUiLCJsb2ciLCJjb250ZW50Q2hhbmdlZCIsImhhc0NvbnRlbnRDaGFuZ2VkIiwic2VsZWN0aW9uQ2hhbmdlZCIsImhhc1NlbGVjdGlvbkNoYW5nZWQiLCJzY3JvbGxUb3AiLCJnZXRTY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZ2V0U2Nyb2xsTGVmdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBdUJBOzs7ZUFBQTs7O2lFQXJCeUI7Ozs7OztBQUV6QixJQUFNQSxVQUFVLElBQ1ZDLDZCQUVFLG9CQUFDQyxxQkFBWTtJQUFDQyxRQUFRQztJQUFhQyxRQUFRQztJQUFhQyxTQUFTQztJQUFjQyxVQUFVQztJQUFlQyxVQUFVQzs7QUFJMUhYLGFBQWFZLFVBQVUsQ0FBQ2I7QUFFeEJDLGFBQWFhLFFBQVE7QUFFckIsSUFBTUMsT0FBTyxTQUFDQzt5QkFFWixvQkFBQ0M7UUFBSUMsV0FBVTtPQUNaakI7O0lBS0wsV0FBZWM7QUFFZixTQUFTWCxZQUFZZSxLQUFLLEVBQUVDLE9BQU8sRUFBRTtJQUNuQ0MsUUFBUUMsR0FBRyxDQUFDO0FBQ2Q7QUFFQSxTQUFTaEIsWUFBWWEsS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDbkNDLFFBQVFDLEdBQUcsQ0FBQztBQUNkO0FBRUEsU0FBU2QsYUFBYVcsS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDcENDLFFBQVFDLEdBQUcsQ0FBQztBQUNkO0FBRUEsU0FBU1osY0FBY1MsS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDckMsSUFBTUcsaUJBQWlCdEIsYUFBYXVCLGlCQUFpQixJQUMvQ0MsbUJBQW1CeEIsYUFBYXlCLG1CQUFtQjtJQUV6REwsUUFBUUMsR0FBRyxDQUFDQyxnQkFBZ0JFO0FBQzlCO0FBRUEsU0FBU2IsY0FBY08sS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDckMsSUFBTU8sWUFBWTFCLGFBQWEyQixZQUFZLElBQ3JDQyxhQUFhNUIsYUFBYTZCLGFBQWE7SUFFN0NULFFBQVFDLEdBQUcsQ0FBQ0ssV0FBV0U7QUFDekIifQ==
|
package/lib/keyCodes.js
CHANGED
|
@@ -2,12 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
F_KEY_CODE: function() {
|
|
13
|
+
return F_KEY_CODE;
|
|
14
|
+
},
|
|
15
|
+
Z_KEY_CODE: function() {
|
|
8
16
|
return Z_KEY_CODE;
|
|
9
17
|
}
|
|
10
18
|
});
|
|
19
|
+
var F_KEY_CODE = 70;
|
|
11
20
|
var Z_KEY_CODE = 90;
|
|
12
21
|
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9rZXlDb2Rlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEZfS0VZX0NPREUgPSA3MDtcbmV4cG9ydCBjb25zdCBaX0tFWV9DT0RFID0gOTA7XG4iXSwibmFtZXMiOlsiRl9LRVlfQ09ERSIsIlpfS0VZX0NPREUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQUVhQSxVQUFVO2VBQVZBOztJQUNBQyxVQUFVO2VBQVZBOzs7QUFETixJQUFNRCxhQUFhO0FBQ25CLElBQU1DLGFBQWEifQ==
|
package/lib/richTextarea.js
CHANGED
|
@@ -16,8 +16,9 @@ var _delete = /*#__PURE__*/ _interopRequireDefault(require("./operation/delete")
|
|
|
16
16
|
var _content = /*#__PURE__*/ _interopRequireDefault(require("./transform/content"));
|
|
17
17
|
var _selection1 = /*#__PURE__*/ _interopRequireDefault(require("./transform/selection"));
|
|
18
18
|
var _generate = /*#__PURE__*/ _interopRequireDefault(require("./operations/generate"));
|
|
19
|
-
var _keyCodes = require("./keyCodes");
|
|
20
19
|
var _constants = require("./constants");
|
|
20
|
+
var _keyCodes = require("./keyCodes");
|
|
21
|
+
var _eventTypes = require("./eventTypes");
|
|
21
22
|
function _arrayLikeToArray(arr, len) {
|
|
22
23
|
if (len == null || len > arr.length) len = arr.length;
|
|
23
24
|
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
@@ -203,7 +204,6 @@ function _createSuper(Derived) {
|
|
|
203
204
|
return _possibleConstructorReturn(this, result);
|
|
204
205
|
};
|
|
205
206
|
}
|
|
206
|
-
var CUT_EVENT_TYPE = _easy.eventTypes.CUT_EVENT_TYPE, COPY_EVENT_TYPE = _easy.eventTypes.COPY_EVENT_TYPE, BLUR_EVENT_TYPE = _easy.eventTypes.BLUR_EVENT_TYPE, PASTE_EVENT_TYPE = _easy.eventTypes.PASTE_EVENT_TYPE, INPUT_EVENT_TYPE = _easy.eventTypes.INPUT_EVENT_TYPE, FOCUS_EVENT_TYPE = _easy.eventTypes.FOCUS_EVENT_TYPE, CHANGE_EVENT_TYPE = _easy.eventTypes.CHANGE_EVENT_TYPE, SCROLL_EVENT_TYPE = _easy.eventTypes.SCROLL_EVENT_TYPE, KEYDOWN_EVENT_TYPE = _easy.eventTypes.KEYDOWN_EVENT_TYPE, CONTEXTMENU_EVENT_TYPE = _easy.eventTypes.CONTEXTMENU_EVENT_TYPE, SELECTIONCHANGE_EVENT_TYPE = _easy.eventTypes.SELECTIONCHANGE_EVENT_TYPE;
|
|
207
207
|
var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
208
208
|
_inherits(RichTextarea, Element);
|
|
209
209
|
var _super = _createSuper(RichTextarea);
|
|
@@ -212,7 +212,7 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
212
212
|
var _this;
|
|
213
213
|
_this = _super.call(this, selector);
|
|
214
214
|
_defineProperty(_assertThisInitialized(_this), "intermediateHandler", function(event, element) {
|
|
215
|
-
var undoable = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true, eventType = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : CHANGE_EVENT_TYPE, selectionChanged = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : _this.hasSelectionChanged();
|
|
215
|
+
var undoable = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true, eventType = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : _eventTypes.CHANGE_EVENT_TYPE, selectionChanged = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : _this.hasSelectionChanged();
|
|
216
216
|
if (_this.readOnly) {
|
|
217
217
|
var content = _this.previousContent; ///
|
|
218
218
|
_this.setContent(content);
|
|
@@ -240,14 +240,23 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
240
240
|
event.preventDefault();
|
|
241
241
|
});
|
|
242
242
|
_defineProperty(_assertThisInitialized(_this), "keyDownHandler", function(event, element) {
|
|
243
|
-
var
|
|
244
|
-
if (
|
|
245
|
-
var
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
243
|
+
var ctrlKey = event.ctrlKey, metaKey = event.metaKey;
|
|
244
|
+
if (ctrlKey || metaKey) {
|
|
245
|
+
var keyCode = event.keyCode;
|
|
246
|
+
switch(keyCode){
|
|
247
|
+
case _keyCodes.F_KEY_CODE:
|
|
248
|
+
{
|
|
249
|
+
_this.find(event, element);
|
|
250
|
+
event.preventDefault();
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
case _keyCodes.Z_KEY_CODE:
|
|
254
|
+
{
|
|
255
|
+
var shiftKey = event.shiftKey;
|
|
256
|
+
shiftKey ? _this.redo(event, element) : _this.undo(event, element);
|
|
257
|
+
event.preventDefault();
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
251
260
|
}
|
|
252
261
|
}
|
|
253
262
|
defer(function() {
|
|
@@ -255,19 +264,19 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
255
264
|
});
|
|
256
265
|
});
|
|
257
266
|
_defineProperty(_assertThisInitialized(_this), "scrollHandler", function(event, element) {
|
|
258
|
-
var eventType = SCROLL_EVENT_TYPE;
|
|
267
|
+
var eventType = _eventTypes.SCROLL_EVENT_TYPE;
|
|
259
268
|
_this.callHandlers(eventType, event, element);
|
|
260
269
|
});
|
|
261
270
|
_defineProperty(_assertThisInitialized(_this), "focusHandler", function(event, element) {
|
|
262
271
|
_this.focused = true;
|
|
263
272
|
defer(function() {
|
|
264
|
-
var undoable = true, eventType = FOCUS_EVENT_TYPE, selectionChanged = true;
|
|
273
|
+
var undoable = true, eventType = _eventTypes.FOCUS_EVENT_TYPE, selectionChanged = true;
|
|
265
274
|
_this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
|
|
266
275
|
});
|
|
267
276
|
});
|
|
268
277
|
_defineProperty(_assertThisInitialized(_this), "blurHandler", function(event, element) {
|
|
269
278
|
_this.focused = false;
|
|
270
|
-
var undoable = true, eventType = BLUR_EVENT_TYPE, selectionChanged = true;
|
|
279
|
+
var undoable = true, eventType = _eventTypes.BLUR_EVENT_TYPE, selectionChanged = true;
|
|
271
280
|
_this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
|
|
272
281
|
});
|
|
273
282
|
_defineProperty(_assertThisInitialized(_this), "inputHandler", function(event, element) {
|
|
@@ -437,6 +446,13 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
437
446
|
}
|
|
438
447
|
}
|
|
439
448
|
},
|
|
449
|
+
{
|
|
450
|
+
key: "find",
|
|
451
|
+
value: function find(event, element) {
|
|
452
|
+
var eventType = _eventTypes.FIND_EVENT_TYPE;
|
|
453
|
+
this.callHandlers(eventType, event, element);
|
|
454
|
+
}
|
|
455
|
+
},
|
|
440
456
|
{
|
|
441
457
|
key: "undo",
|
|
442
458
|
value: function undo(event, element) {
|
|
@@ -477,7 +493,7 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
477
493
|
this.setContent(content, setPreviousContent);
|
|
478
494
|
this.setSelection(selection, setPreviousSelection);
|
|
479
495
|
this.undoBuffer.transform(operations);
|
|
480
|
-
var event = null, element = this, undoable = false, eventType = CHANGE_EVENT_TYPE;
|
|
496
|
+
var event = null, element = this, undoable = false, eventType = _eventTypes.CHANGE_EVENT_TYPE;
|
|
481
497
|
this.intermediateHandler(event, element, undoable, eventType);
|
|
482
498
|
}
|
|
483
499
|
},
|
|
@@ -519,112 +535,128 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
519
535
|
{
|
|
520
536
|
key: "activate",
|
|
521
537
|
value: function activate() {
|
|
522
|
-
this.on(KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
|
|
523
|
-
this.on(INPUT_EVENT_TYPE, this.inputHandler, this);
|
|
524
|
-
this.on(SCROLL_EVENT_TYPE, this.scrollHandler, this);
|
|
525
|
-
this.on(FOCUS_EVENT_TYPE, this.focusHandler, this);
|
|
526
|
-
this.on(BLUR_EVENT_TYPE, this.blurHandler, this);
|
|
538
|
+
this.on(_eventTypes.KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
|
|
539
|
+
this.on(_eventTypes.INPUT_EVENT_TYPE, this.inputHandler, this);
|
|
540
|
+
this.on(_eventTypes.SCROLL_EVENT_TYPE, this.scrollHandler, this);
|
|
541
|
+
this.on(_eventTypes.FOCUS_EVENT_TYPE, this.focusHandler, this);
|
|
542
|
+
this.on(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler, this);
|
|
527
543
|
this.addClass("active");
|
|
528
544
|
}
|
|
529
545
|
},
|
|
530
546
|
{
|
|
531
547
|
key: "deactivate",
|
|
532
548
|
value: function deactivate() {
|
|
533
|
-
this.off(KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
|
|
534
|
-
this.off(INPUT_EVENT_TYPE, this.inputHandler, this);
|
|
535
|
-
this.off(SCROLL_EVENT_TYPE, this.scrollHandler, this);
|
|
536
|
-
this.off(FOCUS_EVENT_TYPE, this.focusHandler, this);
|
|
537
|
-
this.off(BLUR_EVENT_TYPE, this.blurHandler, this);
|
|
549
|
+
this.off(_eventTypes.KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
|
|
550
|
+
this.off(_eventTypes.INPUT_EVENT_TYPE, this.inputHandler, this);
|
|
551
|
+
this.off(_eventTypes.SCROLL_EVENT_TYPE, this.scrollHandler, this);
|
|
552
|
+
this.off(_eventTypes.FOCUS_EVENT_TYPE, this.focusHandler, this);
|
|
553
|
+
this.off(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler, this);
|
|
538
554
|
this.removeClass("active");
|
|
539
555
|
}
|
|
540
556
|
},
|
|
557
|
+
{
|
|
558
|
+
key: "onFind",
|
|
559
|
+
value: function onFind(findHandler, element) {
|
|
560
|
+
var eventType = _eventTypes.FIND_EVENT_TYPE, handler = findHandler; ///
|
|
561
|
+
this.addEventListener(eventType, handler, element);
|
|
562
|
+
}
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
key: "offFind",
|
|
566
|
+
value: function offFind(findHandler, element) {
|
|
567
|
+
var eventType = _eventTypes.FIND_EVENT_TYPE, handler = findHandler; ///
|
|
568
|
+
this.removeEventListener(eventType, handler, element);
|
|
569
|
+
}
|
|
570
|
+
},
|
|
541
571
|
{
|
|
542
572
|
key: "onBlur",
|
|
543
573
|
value: function onBlur(blurHandler, element) {
|
|
544
|
-
var eventType = BLUR_EVENT_TYPE, handler = blurHandler; ///
|
|
574
|
+
var eventType = _eventTypes.BLUR_EVENT_TYPE, handler = blurHandler; ///
|
|
545
575
|
this.addEventListener(eventType, handler, element);
|
|
546
576
|
}
|
|
547
577
|
},
|
|
548
578
|
{
|
|
549
579
|
key: "offBlur",
|
|
550
580
|
value: function offBlur(blurHandler, element) {
|
|
551
|
-
var eventType = BLUR_EVENT_TYPE, handler = blurHandler; ///
|
|
581
|
+
var eventType = _eventTypes.BLUR_EVENT_TYPE, handler = blurHandler; ///
|
|
552
582
|
this.removeEventListener(eventType, handler, element);
|
|
553
583
|
}
|
|
554
584
|
},
|
|
555
585
|
{
|
|
556
586
|
key: "onFocus",
|
|
557
587
|
value: function onFocus(blurHandler, element) {
|
|
558
|
-
var eventType = FOCUS_EVENT_TYPE, handler = blurHandler; ///
|
|
588
|
+
var eventType = _eventTypes.FOCUS_EVENT_TYPE, handler = blurHandler; ///
|
|
559
589
|
this.addEventListener(eventType, handler, element);
|
|
560
590
|
}
|
|
561
591
|
},
|
|
562
592
|
{
|
|
563
593
|
key: "offFocus",
|
|
564
594
|
value: function offFocus(blurHandler, element) {
|
|
565
|
-
var eventType = FOCUS_EVENT_TYPE, handler = blurHandler; ///
|
|
595
|
+
var eventType = _eventTypes.FOCUS_EVENT_TYPE, handler = blurHandler; ///
|
|
566
596
|
this.removeEventListener(eventType, handler, element);
|
|
567
597
|
}
|
|
568
598
|
},
|
|
569
599
|
{
|
|
570
600
|
key: "onScroll",
|
|
571
601
|
value: function onScroll(scrollHandler, element) {
|
|
572
|
-
var eventType = SCROLL_EVENT_TYPE, handler = scrollHandler; ///
|
|
602
|
+
var eventType = _eventTypes.SCROLL_EVENT_TYPE, handler = scrollHandler; ///
|
|
573
603
|
this.addEventListener(eventType, handler, element);
|
|
574
604
|
}
|
|
575
605
|
},
|
|
576
606
|
{
|
|
577
607
|
key: "offScroll",
|
|
578
608
|
value: function offScroll(scrollHandler, element) {
|
|
579
|
-
var eventType = SCROLL_EVENT_TYPE, handler = scrollHandler; ///
|
|
609
|
+
var eventType = _eventTypes.SCROLL_EVENT_TYPE, handler = scrollHandler; ///
|
|
580
610
|
this.removeEventListener(eventType, handler, element);
|
|
581
611
|
}
|
|
582
612
|
},
|
|
583
613
|
{
|
|
584
614
|
key: "onChange",
|
|
585
615
|
value: function onChange(changeHandler, element) {
|
|
586
|
-
var eventType = CHANGE_EVENT_TYPE, handler = changeHandler; ///
|
|
616
|
+
var eventType = _eventTypes.CHANGE_EVENT_TYPE, handler = changeHandler; ///
|
|
587
617
|
this.addEventListener(eventType, handler, element);
|
|
588
618
|
}
|
|
589
619
|
},
|
|
590
620
|
{
|
|
591
621
|
key: "offChange",
|
|
592
622
|
value: function offChange(changeHandler, element) {
|
|
593
|
-
var eventType = CHANGE_EVENT_TYPE, handler = changeHandler; ///
|
|
623
|
+
var eventType = _eventTypes.CHANGE_EVENT_TYPE, handler = changeHandler; ///
|
|
594
624
|
this.removeEventListener(eventType, handler, element);
|
|
595
625
|
}
|
|
596
626
|
},
|
|
597
627
|
{
|
|
598
628
|
key: "didMount",
|
|
599
629
|
value: function didMount() {
|
|
600
|
-
var _this_properties = this.properties,
|
|
630
|
+
var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, findHandler = onFind, blurHandler = onBlur, focusHandler = onFocus, changeHandler = onChange, scrollHandler = onScroll; ///
|
|
601
631
|
var content = this.getContent(), selection = this.getSelection();
|
|
602
632
|
this.previousContent = content; ///
|
|
603
633
|
this.previousSelection = selection; ///
|
|
634
|
+
findHandler && this.onFind(findHandler, this);
|
|
635
|
+
blurHandler && this.onBlur(blurHandler, this);
|
|
636
|
+
focusHandler && this.onFocus(focusHandler, this);
|
|
604
637
|
changeHandler && this.onChange(changeHandler, this);
|
|
605
638
|
scrollHandler && this.onScroll(scrollHandler, this);
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
this.on(
|
|
609
|
-
this.on(
|
|
610
|
-
|
|
611
|
-
this.on(CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
|
|
612
|
-
_easy.document.on(SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
|
|
639
|
+
this.on(_eventTypes.CUT_EVENT_TYPE, this.cutHandler);
|
|
640
|
+
this.on(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
|
|
641
|
+
this.on(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
|
|
642
|
+
this.on(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
|
|
643
|
+
_easy.document.on(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
|
|
613
644
|
}
|
|
614
645
|
},
|
|
615
646
|
{
|
|
616
647
|
key: "willUnmount",
|
|
617
648
|
value: function willUnmount() {
|
|
618
|
-
var _this_properties = this.properties,
|
|
649
|
+
var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, findHandler = onFind, blurHandler = onBlur, focusHandler = onFocus, changeHandler = onChange, scrollHandler = onScroll; ///
|
|
650
|
+
findHandler && this.offFind(findHandler, this);
|
|
651
|
+
blurHandler && this.offBlur(blurHandler, this);
|
|
652
|
+
focusHandler && this.offFocus(focusHandler, this);
|
|
619
653
|
changeHandler && this.offChange(changeHandler, this);
|
|
620
654
|
scrollHandler && this.offScroll(scrollHandler, this);
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
this.off(
|
|
624
|
-
this.off(
|
|
625
|
-
|
|
626
|
-
this.off(CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
|
|
627
|
-
_easy.document.off(SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
|
|
655
|
+
this.off(_eventTypes.CUT_EVENT_TYPE, this.cutHandler);
|
|
656
|
+
this.off(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
|
|
657
|
+
this.off(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
|
|
658
|
+
this.off(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
|
|
659
|
+
_easy.document.off(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
|
|
628
660
|
var active = this.isActive();
|
|
629
661
|
if (active) {
|
|
630
662
|
this.deactivate();
|
|
@@ -656,10 +688,11 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
656
688
|
}(_wrapNativeSuper(_easy.Element));
|
|
657
689
|
_defineProperty(RichTextarea, "tagName", "textarea");
|
|
658
690
|
_defineProperty(RichTextarea, "ignoredProperties", [
|
|
659
|
-
"
|
|
660
|
-
"
|
|
691
|
+
"onFind",
|
|
692
|
+
"onBlur",
|
|
661
693
|
"onFocus",
|
|
662
|
-
"
|
|
694
|
+
"onChange",
|
|
695
|
+
"onScroll"
|
|
663
696
|
]);
|
|
664
697
|
_defineProperty(RichTextarea, "defaultProperties", {
|
|
665
698
|
className: "rich"
|
|
@@ -668,4 +701,4 @@ function defer(func) {
|
|
|
668
701
|
setTimeout(func, 0);
|
|
669
702
|
}
|
|
670
703
|
|
|
671
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCwgZXZlbnRUeXBlcyB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XHJcbmltcG9ydCBEZWxldGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtQ29udGVudCBmcm9tIFwiLi90cmFuc2Zvcm0vY29udGVudFwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtU2VsZWN0aW9uIGZyb20gXCIuL3RyYW5zZm9ybS9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IGdlbmVyYXRlT3BlcmF0aW9ucyBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XHJcblxyXG5pbXBvcnQgeyBaX0tFWV9DT0RFIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcclxuaW1wb3J0IHsgVEVYVCwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcblxyXG5jb25zdCB7IENVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgIENPUFlfRVZFTlRfVFlQRSxcclxuICAgICAgICBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgUEFTVEVfRVZFTlRfVFlQRSxcclxuICAgICAgICBJTlBVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgIENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgfSA9IGV2ZW50VHlwZXM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIHByZXZpb3VzQ29udGVudCwgcHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHN1cGVyKHNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy51bmRvQnVmZmVyID0gdW5kb0J1ZmZlcjtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNGb2N1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seTtcclxuICB9XHJcblxyXG4gIGdldFVuZG9CdWZmZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJldm91c0NvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXNlZChmb2N1c2VkKSB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3Rpb24gPSBwcmV2aW91c1NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGludGVybWVkaWF0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlID0gdHJ1ZSwgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZWQgPSB0aGlzLmhhc1NlbGVjdGlvbkNoYW5nZWQoKSkgPT4ge1xyXG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucHJldmlvdXNDb250ZW50OyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodW5kb2FibGUpIHtcclxuICAgICAgaWYgKGNvbnRlbnRDaGFuZ2VkKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGdlbmVyYXRlT3BlcmF0aW9ucyh0aGlzLnByZXZpb3VzQ29udGVudCwgY29udGVudCk7XHJcblxyXG4gICAgICAgIHRoaXMudW5kb0J1ZmZlci5hZGRPcGVyYXRpb25zKG9wZXJhdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udGV4dG1lbnVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsga2V5Q29kZSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGtleUNvZGUgPT09IFpfS0VZX0NPREUpIHtcclxuICAgICAgY29uc3QgeyBjdHJsS2V5LCBtZXRhS2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgIGlmIChjdHJsS2V5IHx8IG1ldGFLZXkpIHtcclxuICAgICAgICBjb25zdCB7IHNoaWZ0S2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgICAgc2hpZnRLZXkgP1xyXG4gICAgICAgICAgdGhpcy5yZWRvKGV2ZW50LCBlbGVtZW50KSA6XHJcbiAgICAgICAgICAgIHRoaXMudW5kbyhldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlZmVyKCgpID0+IHtcclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0hhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCB1bmRvYWJsZSA9IHRydWUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlLCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYmx1ckhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHVuZG9hYmxlID0gdHJ1ZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgdW5kb2FibGUsIGV2ZW50VHlwZSwgc2VsZWN0aW9uQ2hhbmdlZCk7XHJcbiAgfVxyXG5cclxuICBpbnB1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwYXN0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsgY2xpcGJvYXJkRGF0YSB9ID0gZXZlbnQsXHJcbiAgICAgICAgICB0ZXh0RGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YShURVhUKTtcclxuXHJcbiAgICBpZiAodGV4dERhdGEgPT09IEVNUFRZX1NUUklORykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVtcHR5ID0gc2VsZWN0aW9uLmlzRW1wdHkoKTtcclxuXHJcbiAgICBpZiAoIXNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICAgIG9wZXJhdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbjtcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGV4dERhdGEsIC8vL1xyXG4gICAgICAgICAgaW5zZXJ0T3BlcmF0aW9uID0gSW5zZXJ0T3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBpbnNlcnRPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgY29weUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGN1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBkZWxldGVPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmhhc0NsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgIHJldHVybiBhY3RpdmU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZW50KCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgeyB2YWx1ZSB9ID0gZG9tRWxlbWVudCxcclxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgIC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21ET01FbGVtZW50KGRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZENvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgZW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0ZWRDb250ZW50ID0gY29udGVudC5zbGljZShzdGFydCwgZW5kKTtcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgaGFzQ29udGVudENoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBjb250ZW50UHJldmlvdXNDb250ZW50ID0gKGNvbnRlbnQgPT09IHRoaXMucHJldmlvdXNDb250ZW50KSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gIWNvbnRlbnRQcmV2aW91c0NvbnRlbnQ7XHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnRDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgaGFzU2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5pc0VxdWFsVG8odGhpcy5wcmV2aW91c1NlbGVjdGlvbiksXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gIXNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldENvbnRlbnQoY29udGVudCwgc2V0UHJldmlvdXNDb250ZW50ID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHZhbHVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNDb250ZW50KSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gY29udGVudDsgIC8vL1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgZG9tRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5kbyhldmVudCwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgdW5kb09wZXJhdGlvbiA9IHRoaXMudW5kb0J1ZmZlci51bmRvKCk7XHJcblxyXG4gICAgaWYgKHVuZG9PcGVyYXRpb24gIT09IG51bGwpIHtcclxuICAgICAgY29uc3Qgb3BlcmF0aW9uID0gdW5kb09wZXJhdGlvbjsgIC8vL1xyXG5cclxuICAgICAgdGhpcy5yZXZlcnQoZXZlbnQsIGVsZW1lbnQsIG9wZXJhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWRvKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCByZWRvT3BlcmF0aW9uID0gdGhpcy51bmRvQnVmZmVyLnJlZG8oKTtcclxuXHJcbiAgICBpZiAocmVkb09wZXJhdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSByZWRvT3BlcmF0aW9uOyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnJldmVydChldmVudCwgZWxlbWVudCwgb3BlcmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldmVydChldmVudCwgZWxlbWVudCwgb3BlcmF0aW9uKSB7XHJcbiAgICBjb25zdCB1bmRvYWJsZSA9IGZhbHNlLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21PcGVyYXRpb24ob3BlcmF0aW9uKSxcclxuICAgICAgICAgIHNldFByZXZpb3VzU2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5hcHBseU9wZXJhdGlvbihvcGVyYXRpb24pO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgdW5kb2FibGUpO1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtKG9wZXJhdGlvbnMpIHtcclxuICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZENvbnRlbnQgPSB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQsIG9wZXJhdGlvbnMpLFxyXG4gICAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uLCBvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgIHRoaXMudW5kb0J1ZmZlci50cmFuc2Zvcm0ob3BlcmF0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgZXZlbnQgPSBudWxsLFxyXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXMsXHJcbiAgICAgICAgICB1bmRvYWJsZSA9IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlKTtcclxuICB9XHJcblxyXG4gIGNhbGxIYW5kbGVycyhldmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xyXG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xyXG5cclxuICAgIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcclxuICAgICAgbGV0IHsgZWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcjtcclxuXHJcbiAgICAgIGNvbnN0IHsgaGFuZGxlciB9ID0gZXZlbnRMaXN0ZW5lcixcclxuICAgICAgICAgICAgICBoYW5kbGVyRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xyXG5cclxuICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xyXG5cclxuICAgICAgaWYgKChoYW5kbGVyICE9PSB0aGlzLmJsdXJIYW5kbGVyKSAmJiAoaGFuZGxlciAhPT0gdGhpcy5mb2N1c0hhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLnNjcm9sbEhhbmRsZXIpKSB7XHJcbiAgICAgICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbikge1xyXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29udGVudCA9IG9wZXJhdGlvbi50cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQpLFxyXG4gICAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBvcGVyYXRpb24udHJhbnNmb3JtU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcblxyXG4gICAgY29udGVudCA9IHRyYW5zZm9ybWVkQ29udGVudDsgLy8vXHJcblxyXG4gICAgc2VsZWN0aW9uID0gdHJhbnNmb3JtZWRTZWxlY3Rpb247IC8vL1xyXG5cclxuICAgIGNvbnN0IHNldFByZXZpb3VzQ29udGVudCA9IGZhbHNlLFxyXG4gICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCwgc2V0UHJldmlvdXNDb250ZW50KTtcclxuXHJcbiAgICB0aGlzLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIHNldFByZXZpb3VzU2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5vbihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oSU5QVVRfRVZFTlRfVFlQRSwgdGhpcy5pbnB1dEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihCTFVSX0VWRU5UX1RZUEUsIHRoaXMuYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5vZmYoS0VZRE9XTl9FVkVOVF9UWVBFLCB0aGlzLmtleURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoRk9DVVNfRVZFTlRfVFlQRSwgdGhpcy5mb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIG9uQmx1cihibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZCbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkZvY3VzKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gc2Nyb2xsSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGNoYW5nZUhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGRpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyOyAvLy9cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gY29udGVudDsgIC8vL1xyXG5cclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3Rpb24gPSBzZWxlY3Rpb247ICAvLy9cclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9uRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBibHVySGFuZGxlciAmJiB0aGlzLm9uQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihDVVRfRVZFTlRfVFlQRSwgdGhpcy5jdXRIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKENPUFlfRVZFTlRfVFlQRSwgdGhpcy5jb3B5SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihDT05URVhUTUVOVV9FVkVOVF9UWVBFLCB0aGlzLmNvbnRleHRtZW51SGFuZGxlcik7XHJcblxyXG4gICAgZG9jdW1lbnQub24oU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUsIHRoaXMuc2VsZWN0Q2hhbmdlSGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICB3aWxsVW5tb3VudCgpIHtcclxuICAgIGNvbnN0IHsgb25DaGFuZ2UsIG9uU2Nyb2xsLCBvbkZvY3VzLCBvbkJsdXIgfSA9IHRoaXMucHJvcGVydGllcyxcclxuICAgICAgICAgIGNoYW5nZUhhbmRsZXIgPSBvbkNoYW5nZSwgLy8vXHJcbiAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGwsIC8vL1xyXG4gICAgICAgICAgZm9jdXNIYW5kbGVyID0gb25Gb2N1cywgLy8vXHJcbiAgICAgICAgICBibHVySGFuZGxlciA9IG9uQmx1cjsgLy8vXHJcblxyXG4gICAgY2hhbmdlSGFuZGxlciAmJiB0aGlzLm9mZkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBzY3JvbGxIYW5kbGVyICYmIHRoaXMub2ZmU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9mZkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgYmx1ckhhbmRsZXIgJiYgdGhpcy5vZmZCbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihDVVRfRVZFTlRfVFlQRSwgdGhpcy5jdXRIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9mZihDT1BZX0VWRU5UX1RZUEUsIHRoaXMuY29weUhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKFBBU1RFX0VWRU5UX1RZUEUsIHRoaXMucGFzdGVIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9mZihDT05URVhUTUVOVV9FVkVOVF9UWVBFLCB0aGlzLmNvbnRleHRtZW51SGFuZGxlcik7XHJcblxyXG4gICAgZG9jdW1lbnQub2ZmKFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFLCB0aGlzLnNlbGVjdENoYW5nZUhhbmRsZXIpO1xyXG5cclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaXNBY3RpdmUoKTtcclxuXHJcbiAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRhZ05hbWUgPSBcInRleHRhcmVhXCI7XHJcblxyXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcclxuICAgIFwib25DaGFuZ2VcIixcclxuICAgIFwib25TY3JvbGxcIixcclxuICAgIFwib25Gb2N1c1wiLFxyXG4gICAgXCJvbkJsdXJcIlxyXG4gIF07XHJcblxyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcclxuICAgIGNsYXNzTmFtZTogXCJyaWNoXCJcclxuICB9O1xyXG5cclxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcclxuICAgIGNvbnN0IGZvY3VzZWQgPSBmYWxzZSxcclxuICAgICAgICAgIHJlYWRPbmx5ID0gZmFsc2UsXHJcbiAgICAgICAgICB1bmRvQnVmZmVyID0gVW5kb0J1ZmZlci5mcm9tTm90aGluZygpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gbnVsbCxcclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gbnVsbCxcclxuICAgICAgICAgIHJpY2hUZXh0YXJlYSA9IEVsZW1lbnQuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCBmb2N1c2VkLCByZWFkT25seSwgdW5kb0J1ZmZlciwgcHJldmlvdXNDb250ZW50LCBwcmV2aW91c1NlbGVjdGlvbiwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcclxuXHJcbiAgICByZXR1cm4gcmljaFRleHRhcmVhO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZGVmZXIoZnVuYykge1xyXG4gIHNldFRpbWVvdXQoZnVuYywgMCk7XHJcbn1cclxuIl0sIm5hbWVzIjpbIlJpY2hUZXh0YXJlYSIsIkNVVF9FVkVOVF9UWVBFIiwiZXZlbnRUeXBlcyIsIkNPUFlfRVZFTlRfVFlQRSIsIkJMVVJfRVZFTlRfVFlQRSIsIlBBU1RFX0VWRU5UX1RZUEUiLCJJTlBVVF9FVkVOVF9UWVBFIiwiRk9DVVNfRVZFTlRfVFlQRSIsIkNIQU5HRV9FVkVOVF9UWVBFIiwiU0NST0xMX0VWRU5UX1RZUEUiLCJLRVlET1dOX0VWRU5UX1RZUEUiLCJDT05URVhUTUVOVV9FVkVOVF9UWVBFIiwiU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUiLCJzZWxlY3RvciIsImZvY3VzZWQiLCJyZWFkT25seSIsInVuZG9CdWZmZXIiLCJwcmV2aW91c0NvbnRlbnQiLCJwcmV2aW91c1NlbGVjdGlvbiIsImludGVybWVkaWF0ZUhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJ1bmRvYWJsZSIsImV2ZW50VHlwZSIsInNlbGVjdGlvbkNoYW5nZWQiLCJoYXNTZWxlY3Rpb25DaGFuZ2VkIiwiY29udGVudCIsInNldENvbnRlbnQiLCJnZXRDb250ZW50Iiwic2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiY29udGVudENoYW5nZWQiLCJoYXNDb250ZW50Q2hhbmdlZCIsImNoYW5nZWQiLCJjYWxsSGFuZGxlcnMiLCJvcGVyYXRpb25zIiwiZ2VuZXJhdGVPcGVyYXRpb25zIiwiYWRkT3BlcmF0aW9ucyIsInNlbGVjdENoYW5nZUhhbmRsZXIiLCJjb250ZXh0bWVudUhhbmRsZXIiLCJwcmV2ZW50RGVmYXVsdCIsImtleURvd25IYW5kbGVyIiwia2V5Q29kZSIsIlpfS0VZX0NPREUiLCJjdHJsS2V5IiwibWV0YUtleSIsInNoaWZ0S2V5IiwicmVkbyIsInVuZG8iLCJkZWZlciIsInNjcm9sbEhhbmRsZXIiLCJmb2N1c0hhbmRsZXIiLCJibHVySGFuZGxlciIsImlucHV0SGFuZGxlciIsInBhc3RlSGFuZGxlciIsImNsaXBib2FyZERhdGEiLCJ0ZXh0RGF0YSIsImdldERhdGEiLCJURVhUIiwiRU1QVFlfU1RSSU5HIiwic2VsZWN0aW9uRW1wdHkiLCJpc0VtcHR5IiwiZGVsZXRlT3BlcmF0aW9uIiwiRGVsZXRlT3BlcmF0aW9uIiwiZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24iLCJvcGVyYXRpb24iLCJhcHBseU9wZXJhdGlvbiIsImluc2VydE9wZXJhdGlvbiIsIkluc2VydE9wZXJhdGlvbiIsImNvcHlIYW5kbGVyIiwic2VsZWN0ZWRDb250ZW50IiwiZ2V0U2VsZWN0ZWRDb250ZW50IiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwiY3V0SGFuZGxlciIsImlzRm9jdXNlZCIsImlzUmVhZE9ubHkiLCJnZXRVbmRvQnVmZmVyIiwiZ2V0UHJldmlvdXNDb250ZW50IiwicHJldm91c0NvbnRlbnQiLCJnZXRQcmV2aW91c1NlbGVjdGlvbiIsInNldEZvY3VzZWQiLCJzZXRSZWFkT25seSIsInNldFByZXZpb3VzQ29udGVudCIsInNldFByZXZpb3VzU2VsZWN0aW9uIiwiaXNBY3RpdmUiLCJhY3RpdmUiLCJoYXNDbGFzcyIsImRvbUVsZW1lbnQiLCJnZXRET01FbGVtZW50IiwidmFsdWUiLCJTZWxlY3Rpb24iLCJmcm9tRE9NRWxlbWVudCIsImVuZFBvc2l0aW9uIiwiZ2V0RW5kUG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsInN0YXJ0IiwiZW5kIiwic2xpY2UiLCJjb250ZW50UHJldmlvdXNDb250ZW50Iiwic2VsZWN0aW9uUHJldmlvdXNTZWxlY3Rpb24iLCJpc0VxdWFsVG8iLCJPYmplY3QiLCJhc3NpZ24iLCJzZXRTZWxlY3Rpb24iLCJzZWxlY3Rpb25TdGFydFBvc2l0aW9uIiwic2VsZWN0aW9uRW5kUG9zaXRpb24iLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsInNldFNlbGVjdGlvblJhbmdlIiwidW5kb09wZXJhdGlvbiIsInJldmVydCIsInJlZG9PcGVyYXRpb24iLCJmcm9tT3BlcmF0aW9uIiwidHJhbnNmb3JtIiwidHJhbnNmb3JtZWRDb250ZW50IiwidHJhbnNmb3JtQ29udGVudCIsInRyYW5zZm9ybWVkU2VsZWN0aW9uIiwidHJhbnNmb3JtU2VsZWN0aW9uIiwicmVtYWluaW5nQXJndW1lbnRzIiwiZXZlbnRMaXN0ZW5lcnMiLCJmaW5kRXZlbnRMaXN0ZW5lcnMiLCJmb3JFYWNoIiwiZXZlbnRMaXN0ZW5lciIsImhhbmRsZXIiLCJoYW5kbGVyRWxlbWVudCIsImNhbGwiLCJhY3RpdmF0ZSIsIm9uIiwiYWRkQ2xhc3MiLCJkZWFjdGl2YXRlIiwib2ZmIiwicmVtb3ZlQ2xhc3MiLCJvbkJsdXIiLCJhZGRFdmVudExpc3RlbmVyIiwib2ZmQmx1ciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbkZvY3VzIiwib2ZmRm9jdXMiLCJvblNjcm9sbCIsIm9mZlNjcm9sbCIsIm9uQ2hhbmdlIiwiY2hhbmdlSGFuZGxlciIsIm9mZkNoYW5nZSIsImRpZE1vdW50IiwicHJvcGVydGllcyIsImRvY3VtZW50Iiwid2lsbFVubW91bnQiLCJmcm9tQ2xhc3MiLCJDbGFzcyIsIkVsZW1lbnQiLCJVbmRvQnVmZmVyIiwiZnJvbU5vdGhpbmciLCJyaWNoVGV4dGFyZWEiLCJ0YWdOYW1lIiwiaWdub3JlZFByb3BlcnRpZXMiLCJkZWZhdWx0UHJvcGVydGllcyIsImNsYXNzTmFtZSIsImZ1bmMiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQTJCcUJBOzs7b0JBekJ5Qjs4REFFeEI7K0RBQ0M7MkRBQ0s7MkRBQ0E7NERBQ0M7K0RBQ0U7NkRBQ0E7d0JBRUo7eUJBQ1E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuQyxJQUFRQyxpQkFVK0JDLGdCQUFVLENBVnpDRCxnQkFDQUUsa0JBUytCRCxnQkFBVSxDQVR6Q0MsaUJBQ0FDLGtCQVErQkYsZ0JBQVUsQ0FSekNFLGlCQUNBQyxtQkFPK0JILGdCQUFVLENBUHpDRyxrQkFDQUMsbUJBTStCSixnQkFBVSxDQU56Q0ksa0JBQ0FDLG1CQUsrQkwsZ0JBQVUsQ0FMekNLLGtCQUNBQyxvQkFJK0JOLGdCQUFVLENBSnpDTSxtQkFDQUMsb0JBRytCUCxnQkFBVSxDQUh6Q08sbUJBQ0FDLHFCQUUrQlIsZ0JBQVUsQ0FGekNRLG9CQUNBQyx5QkFDK0JULGdCQUFVLENBRHpDUyx3QkFDQUMsNkJBQStCVixnQkFBVSxDQUF6Q1U7QUFFTyxJQUFBLEFBQU1aLDZCQThpQnBCLEFBOWlCYztjQUFNQTs4QkFBQUE7YUFBQUEsYUFDUGEsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsRUFBRUMsVUFBVSxFQUFFQyxlQUFlLEVBQUVDLGlCQUFpQjs4QkFEcEVsQjs7a0NBRVhhO1FBNkNSTSwrQ0FBQUEsdUJBQXNCLFNBQUNDLE9BQU9DLFNBQTJHO2dCQUFsR0MsNEVBQVcsSUFBSSxFQUFFQyw2RUFBWWYsbUJBQW1CZ0Isb0ZBQW1CLE1BQUtDLG1CQUFtQjtZQUNoSSxJQUFJLE1BQUtWLFFBQVEsRUFBRTtnQkFDakIsSUFBTVcsVUFBVSxNQUFLVCxlQUFlLEVBQUcsR0FBRztnQkFFMUMsTUFBS1UsVUFBVSxDQUFDRDtZQUNsQixDQUFDO1lBRUQsSUFBTUEsV0FBVSxNQUFLRSxVQUFVLElBQ3pCQyxZQUFZLE1BQUtDLFlBQVksSUFDN0JDLGlCQUFpQixNQUFLQyxpQkFBaUIsSUFDdkNDLFVBQVdGLGtCQUFrQlA7WUFFbkMsSUFBSVMsU0FBUztnQkFDWCxNQUFLQyxZQUFZLENBQUNYLFdBQVdILE9BQU9DO1lBQ3RDLENBQUM7WUFFRCxJQUFJQyxVQUFVO2dCQUNaLElBQUlTLGdCQUFnQjtvQkFDbEIsSUFBTUksYUFBYUMsSUFBQUEsaUJBQWtCLEVBQUMsTUFBS25CLGVBQWUsRUFBRVM7b0JBRTVELE1BQUtWLFVBQVUsQ0FBQ3FCLGFBQWEsQ0FBQ0Y7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBS2xCLGVBQWUsR0FBR1MsVUFBVSxHQUFHO1lBRXBDLE1BQUtSLGlCQUFpQixHQUFHVyxXQUFZLEdBQUc7UUFDMUM7UUFFQVMsK0NBQUFBLHVCQUFzQixTQUFDbEIsT0FBT0MsU0FBWTtZQUN4QyxJQUFJLE1BQUtQLE9BQU8sRUFBRTtnQkFDaEJPLHlDQUFnQixHQUFHO2dCQUVuQixNQUFLRixtQkFBbUIsQ0FBQ0MsT0FBT0M7WUFDbEMsQ0FBQztRQUNIO1FBRUFrQiwrQ0FBQUEsc0JBQXFCLFNBQUNuQixPQUFPQyxTQUFZO1lBQ3ZDRCxNQUFNb0IsY0FBYztRQUN0QjtRQUVBQywrQ0FBQUEsa0JBQWlCLFNBQUNyQixPQUFPQyxTQUFZO1lBQ25DLElBQU0sQUFBRXFCLFVBQVl0QixNQUFac0I7WUFFUixJQUFJQSxZQUFZQyxvQkFBVSxFQUFFO2dCQUMxQixJQUFRQyxVQUFxQnhCLE1BQXJCd0IsU0FBU0MsVUFBWXpCLE1BQVp5QjtnQkFFakIsSUFBSUQsV0FBV0MsU0FBUztvQkFDdEIsSUFBTSxBQUFFQyxXQUFhMUIsTUFBYjBCO29CQUVSQSxXQUNFLE1BQUtDLElBQUksQ0FBQzNCLE9BQU9DLFdBQ2YsTUFBSzJCLElBQUksQ0FBQzVCLE9BQU9DLFFBQVE7b0JBRTdCRCxNQUFNb0IsY0FBYztvQkFFcEI7Z0JBQ0YsQ0FBQztZQUNILENBQUM7WUFFRFMsTUFBTSxXQUFNO2dCQUNWLE1BQUs5QixtQkFBbUIsQ0FBQ0MsT0FBT0M7WUFDbEM7UUFDRjtRQUVBNkIsK0NBQUFBLGlCQUFnQixTQUFDOUIsT0FBT0MsU0FBWTtZQUNsQyxJQUFNRSxZQUFZZDtZQUVsQixNQUFLeUIsWUFBWSxDQUFDWCxXQUFXSCxPQUFPQztRQUN0QztRQUVBOEIsK0NBQUFBLGdCQUFlLFNBQUMvQixPQUFPQyxTQUFZO1lBQ2pDLE1BQUtQLE9BQU8sR0FBRyxJQUFJO1lBRW5CbUMsTUFBTSxXQUFNO2dCQUNWLElBQU0zQixXQUFXLElBQUksRUFDZkMsWUFBWWhCLGtCQUNaaUIsbUJBQW1CLElBQUk7Z0JBRTdCLE1BQUtMLG1CQUFtQixDQUFDQyxPQUFPQyxTQUFTQyxVQUFVQyxXQUFXQztZQUNoRTtRQUNGO1FBRUE0QiwrQ0FBQUEsZUFBYyxTQUFDaEMsT0FBT0MsU0FBWTtZQUNoQyxNQUFLUCxPQUFPLEdBQUcsS0FBSztZQUVwQixJQUFNUSxXQUFXLElBQUksRUFDZkMsWUFBWW5CLGlCQUNab0IsbUJBQW1CLElBQUk7WUFFN0IsTUFBS0wsbUJBQW1CLENBQUNDLE9BQU9DLFNBQVNDLFVBQVVDLFdBQVdDO1FBQ2hFO1FBRUE2QiwrQ0FBQUEsZ0JBQWUsU0FBQ2pDLE9BQU9DLFNBQVk7WUFDakMsTUFBS0YsbUJBQW1CLENBQUNDLE9BQU9DO1FBQ2xDO1FBRUFpQywrQ0FBQUEsZ0JBQWUsU0FBQ2xDLE9BQU9DLFNBQVk7WUFDakMsSUFBTSxBQUFFa0MsZ0JBQWtCbkMsTUFBbEJtQyxlQUNGQyxXQUFXRCxjQUFjRSxPQUFPLENBQUNDLGVBQUk7WUFFM0MsSUFBSUYsYUFBYUcsdUJBQVksRUFBRTtnQkFDN0I7WUFDRixDQUFDO1lBRUQsSUFBTTlCLFlBQVksTUFBS0MsWUFBWSxJQUM3QjhCLGlCQUFpQi9CLFVBQVVnQyxPQUFPO1lBRXhDLElBQUksQ0FBQ0QsZ0JBQWdCO2dCQUNuQixJQUFNbEMsVUFBVSxNQUFLRSxVQUFVLElBQ3pCa0Msa0JBQWtCQyxlQUFlLENBQUNDLHVCQUF1QixDQUFDdEMsU0FBU0csWUFDbkVvQyxZQUFZSDtnQkFFbEIsTUFBS0ksY0FBYyxDQUFDRDtZQUN0QixDQUFDO1lBRUQsSUFBTXZDLFdBQVU4QixVQUNWVyxrQkFBa0JDLGVBQWUsQ0FBQ0osdUJBQXVCLENBQUN0QyxVQUFTRyxZQUNuRW9DLGFBQVlFLGlCQUFrQixHQUFHO1lBRXZDLE1BQUtELGNBQWMsQ0FBQ0Q7WUFFcEIsTUFBSzlDLG1CQUFtQixDQUFDQyxPQUFPQztZQUVoQ0QsTUFBTW9CLGNBQWM7UUFDdEI7UUFFQTZCLCtDQUFBQSxlQUFjLFNBQUNqRCxPQUFPQyxTQUFZO1lBQ2hDLElBQU1RLFlBQVksTUFBS0MsWUFBWSxJQUM3QjhCLGlCQUFpQi9CLFVBQVVnQyxPQUFPO1lBRXhDLElBQUlELGdCQUFnQjtnQkFDbEI7WUFDRixDQUFDO1lBRUQsSUFBTVUsa0JBQWtCLE1BQUtDLGtCQUFrQjtZQUUvQ0MsVUFBVUMsU0FBUyxDQUFDQyxTQUFTLENBQUNKO1lBRTlCbEQsTUFBTW9CLGNBQWM7UUFDdEI7UUFFQW1DLCtDQUFBQSxjQUFhLFNBQUN2RCxPQUFPQyxTQUFZO1lBQy9CLElBQU1RLFlBQVksTUFBS0MsWUFBWSxJQUM3QjhCLGlCQUFpQi9CLFVBQVVnQyxPQUFPO1lBRXhDLElBQUlELGdCQUFnQjtnQkFDbEI7WUFDRixDQUFDO1lBRUQsSUFBTVUsa0JBQWtCLE1BQUtDLGtCQUFrQjtZQUUvQ0MsVUFBVUMsU0FBUyxDQUFDQyxTQUFTLENBQUNKO1lBRTlCLElBQU01QyxVQUFVLE1BQUtFLFVBQVUsSUFDekJrQyxrQkFBa0JDLGVBQWUsQ0FBQ0MsdUJBQXVCLENBQUN0QyxTQUFTRyxZQUNuRW9DLFlBQVlILGlCQUFrQixHQUFHO1lBRXZDLE1BQUtJLGNBQWMsQ0FBQ0Q7WUFFcEIsTUFBSzlDLG1CQUFtQixDQUFDQyxPQUFPQztZQUVoQ0QsTUFBTW9CLGNBQWM7UUFDdEI7UUE5TUUsTUFBSzFCLE9BQU8sR0FBR0E7UUFDZixNQUFLQyxRQUFRLEdBQUdBO1FBQ2hCLE1BQUtDLFVBQVUsR0FBR0E7UUFDbEIsTUFBS0MsZUFBZSxHQUFHQTtRQUN2QixNQUFLQyxpQkFBaUIsR0FBR0E7OztpQkFSUmxCOztZQVduQjRFLEtBQUFBO21CQUFBQSxTQUFBQSxZQUFZO2dCQUNWLE9BQU8sSUFBSSxDQUFDOUQsT0FBTztZQUNyQjs7O1lBRUErRCxLQUFBQTttQkFBQUEsU0FBQUEsYUFBYTtnQkFDWCxPQUFPLElBQUksQ0FBQzlELFFBQVE7WUFDdEI7OztZQUVBK0QsS0FBQUE7bUJBQUFBLFNBQUFBLGdCQUFnQjtnQkFDZCxPQUFPLElBQUksQ0FBQzlELFVBQVU7WUFDeEI7OztZQUVBK0QsS0FBQUE7bUJBQUFBLFNBQUFBLHFCQUFxQjtnQkFDbkIsT0FBTyxJQUFJLENBQUNDLGNBQWM7WUFDNUI7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsdUJBQXVCO2dCQUNyQixPQUFPLElBQUksQ0FBQy9ELGlCQUFpQjtZQUMvQjs7O1lBRUFnRSxLQUFBQTttQkFBQUEsU0FBQUEsV0FBV3BFLE9BQU8sRUFBRTtnQkFDbEIsSUFBSSxDQUFDQSxPQUFPLEdBQUdBO1lBQ2pCOzs7WUFFQXFFLEtBQUFBO21CQUFBQSxTQUFBQSxZQUFZcEUsUUFBUSxFQUFFO2dCQUNwQixJQUFJLENBQUNBLFFBQVEsR0FBR0E7WUFDbEI7OztZQUVBcUUsS0FBQUE7bUJBQUFBLFNBQUFBLG1CQUFtQm5FLGVBQWUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDQSxlQUFlLEdBQUdBO1lBQ3pCOzs7WUFFQW9FLEtBQUFBO21CQUFBQSxTQUFBQSxxQkFBcUJuRSxpQkFBaUIsRUFBRTtnQkFDdEMsSUFBSSxDQUFDQSxpQkFBaUIsR0FBR0E7WUFDM0I7OztZQXVLQW9FLEtBQUFBO21CQUFBQSxTQUFBQSxXQUFXO2dCQUNULElBQU1DLFNBQVMsSUFBSSxDQUFDQyxRQUFRLENBQUM7Z0JBRTdCLE9BQU9EO1lBQ1Q7OztZQUVBM0QsS0FBQUE7bUJBQUFBLFNBQUFBLGFBQWE7Z0JBQ1gsSUFBTTZELGFBQWEsSUFBSSxDQUFDQyxhQUFhLElBQy9CLEFBQUVDLFFBQVVGLFdBQVZFLE9BQ0ZqRSxVQUFVaUUsT0FBUSxHQUFHO2dCQUUzQixPQUFPakU7WUFDVDs7O1lBRUFJLEtBQUFBO21CQUFBQSxTQUFBQSxlQUFlO2dCQUNiLElBQU0yRCxhQUFhLElBQUksQ0FBQ0MsYUFBYSxJQUMvQjdELFlBQVkrRCxrQkFBUyxDQUFDQyxjQUFjLENBQUNKO2dCQUUzQyxPQUFPNUQ7WUFDVDs7O1lBRUEwQyxLQUFBQTttQkFBQUEsU0FBQUEscUJBQXFCO2dCQUNuQixJQUFNN0MsVUFBVSxJQUFJLENBQUNFLFVBQVUsSUFDekJDLFlBQVksSUFBSSxDQUFDQyxZQUFZLElBQzdCZ0UsY0FBY2pFLFVBQVVrRSxjQUFjLElBQ3RDQyxnQkFBZ0JuRSxVQUFVb0UsZ0JBQWdCLElBQzFDQyxRQUFRRixlQUNSRyxNQUFNTCxhQUNOeEIsa0JBQWtCNUMsUUFBUTBFLEtBQUssQ0FBQ0YsT0FBT0M7Z0JBRTdDLE9BQU83QjtZQUNUOzs7WUFFQXRDLEtBQUFBO21CQUFBQSxTQUFBQSxvQkFBb0I7Z0JBQ2xCLElBQU1OLFVBQVUsSUFBSSxDQUFDRSxVQUFVLElBQ3pCeUUseUJBQTBCM0UsWUFBWSxJQUFJLENBQUNULGVBQWUsRUFDMURjLGlCQUFpQixDQUFDc0U7Z0JBRXhCLE9BQU90RTtZQUNUOzs7WUFFQU4sS0FBQUE7bUJBQUFBLFNBQUFBLHNCQUFzQjtnQkFDcEIsSUFBTUksWUFBWSxJQUFJLENBQUNDLFlBQVksSUFDN0J3RSw2QkFBNkJ6RSxVQUFVMEUsU0FBUyxDQUFDLElBQUksQ0FBQ3JGLGlCQUFpQixHQUN2RU0sbUJBQW1CLENBQUM4RSw0QkFBNEIsR0FBRztnQkFFekQsT0FBTzlFO1lBQ1Q7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsV0FBV0QsT0FBTyxFQUE2QjtvQkFBM0IwRCxxQkFBQUEsaUVBQXFCLElBQUk7Z0JBQzNDLElBQU1PLFFBQVFqRSxTQUNSK0QsYUFBYSxJQUFJLENBQUNDLGFBQWE7Z0JBRXJDYyxPQUFPQyxNQUFNLENBQUNoQixZQUFZO29CQUN4QkUsT0FBQUE7Z0JBQ0Y7Z0JBRUEsSUFBSVAsb0JBQW9CO29CQUN0QixJQUFJLENBQUNuRSxlQUFlLEdBQUdTLFNBQVUsR0FBRztnQkFDdEMsQ0FBQztZQUNIOzs7WUFFQWdGLEtBQUFBO21CQUFBQSxTQUFBQSxhQUFhN0UsU0FBUyxFQUErQjtvQkFBN0J3RCx1QkFBQUEsaUVBQXVCLElBQUk7Z0JBQ2pELElBQU1zQix5QkFBeUI5RSxVQUFVb0UsZ0JBQWdCLElBQ25EVyx1QkFBdUIvRSxVQUFVa0UsY0FBYyxJQUMvQ2MsaUJBQWlCRix3QkFDakJHLGVBQWVGLHNCQUNmbkIsYUFBYSxJQUFJLENBQUNDLGFBQWE7Z0JBRXJDRCxXQUFXc0IsaUJBQWlCLENBQUNGLGdCQUFnQkM7Z0JBRTdDLElBQUl6QixzQkFBc0I7b0JBQ3hCLElBQUksQ0FBQ25FLGlCQUFpQixHQUFHVyxXQUFZLEdBQUc7Z0JBQzFDLENBQUM7WUFDSDs7O1lBRUFtQixLQUFBQTttQkFBQUEsU0FBQUEsS0FBSzVCLEtBQUssRUFBRUMsT0FBTyxFQUFFO2dCQUNuQixJQUFNMkYsZ0JBQWdCLElBQUksQ0FBQ2hHLFVBQVUsQ0FBQ2dDLElBQUk7Z0JBRTFDLElBQUlnRSxrQkFBa0IsSUFBSSxFQUFFO29CQUMxQixJQUFNL0MsWUFBWStDLGVBQWdCLEdBQUc7b0JBRXJDLElBQUksQ0FBQ0MsTUFBTSxDQUFDN0YsT0FBT0MsU0FBUzRDO2dCQUM5QixDQUFDO1lBQ0g7OztZQUVBbEIsS0FBQUE7bUJBQUFBLFNBQUFBLEtBQUszQixLQUFLLEVBQUVDLE9BQU8sRUFBRTtnQkFDbkIsSUFBTTZGLGdCQUFnQixJQUFJLENBQUNsRyxVQUFVLENBQUMrQixJQUFJO2dCQUUxQyxJQUFJbUUsa0JBQWtCLElBQUksRUFBRTtvQkFDMUIsSUFBTWpELFlBQVlpRCxlQUFnQixHQUFHO29CQUVyQyxJQUFJLENBQUNELE1BQU0sQ0FBQzdGLE9BQU9DLFNBQVM0QztnQkFDOUIsQ0FBQztZQUNIOzs7WUFFQWdELEtBQUFBO21CQUFBQSxTQUFBQSxPQUFPN0YsS0FBSyxFQUFFQyxPQUFPLEVBQUU0QyxTQUFTLEVBQUU7Z0JBQ2hDLElBQU0zQyxXQUFXLEtBQUssRUFDaEJPLFlBQVkrRCxrQkFBUyxDQUFDdUIsYUFBYSxDQUFDbEQsWUFDcENvQix1QkFBdUIsS0FBSztnQkFFbEMsSUFBSSxDQUFDbkIsY0FBYyxDQUFDRDtnQkFFcEIsSUFBSSxDQUFDeUMsWUFBWSxDQUFDN0UsV0FBV3dEO2dCQUU3QixJQUFJLENBQUNsRSxtQkFBbUIsQ0FBQ0MsT0FBT0MsU0FBU0M7WUFDM0M7OztZQUVBOEYsS0FBQUE7bUJBQUFBLFNBQUFBLFVBQVVqRixVQUFVLEVBQUU7Z0JBQ3BCLElBQUlULFVBQVUsSUFBSSxDQUFDRSxVQUFVLElBQ3pCQyxZQUFZLElBQUksQ0FBQ0MsWUFBWTtnQkFFakMsSUFBTXVGLHFCQUFxQkMsSUFBQUEsZ0JBQWdCLEVBQUM1RixTQUFTUyxhQUMvQ29GLHVCQUF1QkMsSUFBQUEsbUJBQWtCLEVBQUMzRixXQUFXTTtnQkFFM0RULFVBQVUyRixvQkFBb0IsR0FBRztnQkFFakN4RixZQUFZMEYsc0JBQXNCLEdBQUc7Z0JBRXJDLElBQU1uQyxxQkFBcUIsS0FBSyxFQUMxQkMsdUJBQXVCLEtBQUs7Z0JBRWxDLElBQUksQ0FBQzFELFVBQVUsQ0FBQ0QsU0FBUzBEO2dCQUV6QixJQUFJLENBQUNzQixZQUFZLENBQUM3RSxXQUFXd0Q7Z0JBRTdCLElBQUksQ0FBQ3JFLFVBQVUsQ0FBQ29HLFNBQVMsQ0FBQ2pGO2dCQUUxQixJQUFNZixRQUFRLElBQUksRUFDWkMsVUFBVSxJQUFJLEVBQ2RDLFdBQVcsS0FBSyxFQUNoQkMsWUFBWWY7Z0JBRWxCLElBQUksQ0FBQ1csbUJBQW1CLENBQUNDLE9BQU9DLFNBQVNDLFVBQVVDO1lBQ3JEOzs7WUFFQVcsS0FBQUE7bUJBQUFBLFNBQUFBLGFBQWFYLFNBQVMsRUFBeUI7Z0JBQXZCLElBQUEsSUFBQSxPQUFBLFVBQUEsUUFBQSxBQUFHa0cscUJBQUgsVUFBQSxPQUFBLElBQUEsT0FBQSxLQUFxQixHQUFyQixPQUFBLEdBQUEsT0FBQSxNQUFBLE9BQUE7b0JBQUdBLG1CQUFILE9BQUEsS0FBQSxTQUFBLENBQUEsS0FBcUI7Z0JBQUQ7O2dCQUMxQyxJQUFNQyxpQkFBaUIsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQ3BHO2dCQUUvQ21HLGVBQWVFLE9BQU8sQ0FBQyxTQUFDQyxlQUFrQjtvQkFDeEMsSUFBSSxBQUFFeEcsVUFBWXdHLGNBQVp4RztvQkFFTixJQUFNLEFBQUV5RyxVQUFZRCxjQUFaQyxTQUNBQyxpQkFBaUIxRyxTQUFTLEdBQUc7b0JBRXJDQSxpQkFBZ0IsR0FBRztvQkFFbkIsSUFBSSxBQUFDeUcsWUFBWSxNQUFLMUUsV0FBVyxJQUFNMEUsWUFBWSxNQUFLM0UsWUFBWSxJQUFNMkUsWUFBWSxNQUFLNUUsYUFBYSxFQUFHOzRCQUN6RzRFO3dCQUFBQSxDQUFBQSxXQUFBQSxTQUFRRSxJQUFJLENBQVpGLE1BQUFBLFVBQUFBOzRCQUFhQzt5QkFBK0MsQ0FBNURELE9BQTZCLG1CQUFHTCxxQkFBaENLOzRCQUFvRHpHO3lCQUFRO29CQUM5RCxDQUFDO2dCQUNIO1lBQ0Y7OztZQUVBNkMsS0FBQUE7bUJBQUFBLFNBQUFBLGVBQWVELFNBQVMsRUFBRTtnQkFDeEIsSUFBSXZDLFVBQVUsSUFBSSxDQUFDRSxVQUFVLElBQ3pCQyxZQUFZLElBQUksQ0FBQ0MsWUFBWTtnQkFFakMsSUFBTXVGLHFCQUFxQnBELFVBQVVxRCxnQkFBZ0IsQ0FBQzVGLFVBQ2hENkYsdUJBQXVCdEQsVUFBVXVELGtCQUFrQixDQUFDM0Y7Z0JBRTFESCxVQUFVMkYsb0JBQW9CLEdBQUc7Z0JBRWpDeEYsWUFBWTBGLHNCQUFzQixHQUFHO2dCQUVyQyxJQUFNbkMscUJBQXFCLEtBQUssRUFDMUJDLHVCQUF1QixLQUFLO2dCQUVsQyxJQUFJLENBQUMxRCxVQUFVLENBQUNELFNBQVMwRDtnQkFFekIsSUFBSSxDQUFDc0IsWUFBWSxDQUFDN0UsV0FBV3dEO1lBQy9COzs7WUFFQTRDLEtBQUFBO21CQUFBQSxTQUFBQSxXQUFXO2dCQUNULElBQUksQ0FBQ0MsRUFBRSxDQUFDeEgsb0JBQW9CLElBQUksQ0FBQytCLGNBQWMsRUFBRSxJQUFJO2dCQUVyRCxJQUFJLENBQUN5RixFQUFFLENBQUM1SCxrQkFBa0IsSUFBSSxDQUFDK0MsWUFBWSxFQUFFLElBQUk7Z0JBRWpELElBQUksQ0FBQzZFLEVBQUUsQ0FBQ3pILG1CQUFtQixJQUFJLENBQUN5QyxhQUFhLEVBQUUsSUFBSTtnQkFFbkQsSUFBSSxDQUFDZ0YsRUFBRSxDQUFDM0gsa0JBQWtCLElBQUksQ0FBQzRDLFlBQVksRUFBRSxJQUFJO2dCQUVqRCxJQUFJLENBQUMrRSxFQUFFLENBQUM5SCxpQkFBaUIsSUFBSSxDQUFDZ0QsV0FBVyxFQUFFLElBQUk7Z0JBRS9DLElBQUksQ0FBQytFLFFBQVEsQ0FBQztZQUNoQjs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxhQUFhO2dCQUNYLElBQUksQ0FBQ0MsR0FBRyxDQUFDM0gsb0JBQW9CLElBQUksQ0FBQytCLGNBQWMsRUFBRSxJQUFJO2dCQUV0RCxJQUFJLENBQUM0RixHQUFHLENBQUMvSCxrQkFBa0IsSUFBSSxDQUFDK0MsWUFBWSxFQUFFLElBQUk7Z0JBRWxELElBQUksQ0FBQ2dGLEdBQUcsQ0FBQzVILG1CQUFtQixJQUFJLENBQUN5QyxhQUFhLEVBQUUsSUFBSTtnQkFFcEQsSUFBSSxDQUFDbUYsR0FBRyxDQUFDOUgsa0JBQWtCLElBQUksQ0FBQzRDLFlBQVksRUFBRSxJQUFJO2dCQUVsRCxJQUFJLENBQUNrRixHQUFHLENBQUNqSSxpQkFBaUIsSUFBSSxDQUFDZ0QsV0FBVyxFQUFFLElBQUk7Z0JBRWhELElBQUksQ0FBQ2tGLFdBQVcsQ0FBQztZQUNuQjs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxPQUFPbkYsV0FBVyxFQUFFL0IsT0FBTyxFQUFFO2dCQUMzQixJQUFNRSxZQUFZbkIsaUJBQ1owSCxVQUFVMUUsYUFBYyxHQUFHO2dCQUVqQyxJQUFJLENBQUNvRixnQkFBZ0IsQ0FBQ2pILFdBQVd1RyxTQUFTekc7WUFDNUM7OztZQUVBb0gsS0FBQUE7bUJBQUFBLFNBQUFBLFFBQVFyRixXQUFXLEVBQUUvQixPQUFPLEVBQUU7Z0JBQzVCLElBQU1FLFlBQVluQixpQkFDWjBILFVBQVUxRSxhQUFjLEdBQUc7Z0JBRWpDLElBQUksQ0FBQ3NGLG1CQUFtQixDQUFDbkgsV0FBV3VHLFNBQVN6RztZQUMvQzs7O1lBRUFzSCxLQUFBQTttQkFBQUEsU0FBQUEsUUFBUXZGLFdBQVcsRUFBRS9CLE9BQU8sRUFBRTtnQkFDNUIsSUFBTUUsWUFBWWhCLGtCQUNadUgsVUFBVTFFLGFBQWMsR0FBRztnQkFFakMsSUFBSSxDQUFDb0YsZ0JBQWdCLENBQUNqSCxXQUFXdUcsU0FBU3pHO1lBQzVDOzs7WUFFQXVILEtBQUFBO21CQUFBQSxTQUFBQSxTQUFTeEYsV0FBVyxFQUFFL0IsT0FBTyxFQUFFO2dCQUM3QixJQUFNRSxZQUFZaEIsa0JBQ1p1SCxVQUFVMUUsYUFBYyxHQUFHO2dCQUVqQyxJQUFJLENBQUNzRixtQkFBbUIsQ0FBQ25ILFdBQVd1RyxTQUFTekc7WUFDL0M7OztZQUVBd0gsS0FBQUE7bUJBQUFBLFNBQUFBLFNBQVMzRixhQUFhLEVBQUU3QixPQUFPLEVBQUU7Z0JBQy9CLElBQU1FLFlBQVlkLG1CQUNacUgsVUFBVTVFLGVBQWdCLEdBQUc7Z0JBRW5DLElBQUksQ0FBQ3NGLGdCQUFnQixDQUFDakgsV0FBV3VHLFNBQVN6RztZQUM1Qzs7O1lBRUF5SCxLQUFBQTttQkFBQUEsU0FBQUEsVUFBVTVGLGFBQWEsRUFBRTdCLE9BQU8sRUFBRTtnQkFDaEMsSUFBTUUsWUFBWWQsbUJBQ1pxSCxVQUFVNUUsZUFBZ0IsR0FBRztnQkFFbkMsSUFBSSxDQUFDd0YsbUJBQW1CLENBQUNuSCxXQUFXdUcsU0FBU3pHO1lBQy9DOzs7WUFFQTBILEtBQUFBO21CQUFBQSxTQUFBQSxTQUFTQyxhQUFhLEVBQUUzSCxPQUFPLEVBQUU7Z0JBQy9CLElBQU1FLFlBQVlmLG1CQUNac0gsVUFBVWtCLGVBQWdCLEdBQUc7Z0JBRW5DLElBQUksQ0FBQ1IsZ0JBQWdCLENBQUNqSCxXQUFXdUcsU0FBU3pHO1lBQzVDOzs7WUFFQTRILEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVRCxhQUFhLEVBQUUzSCxPQUFPLEVBQUU7Z0JBQ2hDLElBQU1FLFlBQVlmLG1CQUNac0gsVUFBVWtCLGVBQWdCLEdBQUc7Z0JBRW5DLElBQUksQ0FBQ04sbUJBQW1CLENBQUNuSCxXQUFXdUcsU0FBU3pHO1lBQy9DOzs7WUFFQTZILEtBQUFBO21CQUFBQSxTQUFBQSxXQUFXO2dCQUNULElBQWdELG1CQUFBLElBQUksQ0FBQ0MsVUFBVSxFQUF2REosV0FBd0MsaUJBQXhDQSxVQUFVRixXQUE4QixpQkFBOUJBLFVBQVVGLFVBQW9CLGlCQUFwQkEsU0FBU0osU0FBVyxpQkFBWEEsUUFDL0JTLGdCQUFnQkQsVUFDaEI3RixnQkFBZ0IyRixVQUNoQjFGLGVBQWV3RixTQUNmdkYsY0FBY21GLFFBQVEsR0FBRztnQkFFL0IsSUFBTTdHLFVBQVUsSUFBSSxDQUFDRSxVQUFVLElBQ3pCQyxZQUFZLElBQUksQ0FBQ0MsWUFBWTtnQkFFbkMsSUFBSSxDQUFDYixlQUFlLEdBQUdTLFNBQVUsR0FBRztnQkFFcEMsSUFBSSxDQUFDUixpQkFBaUIsR0FBR1csV0FBWSxHQUFHO2dCQUV4Q21ILGlCQUFpQixJQUFJLENBQUNELFFBQVEsQ0FBQ0MsZUFBZSxJQUFJO2dCQUVsRDlGLGlCQUFpQixJQUFJLENBQUMyRixRQUFRLENBQUMzRixlQUFlLElBQUk7Z0JBRWxEQyxnQkFBZ0IsSUFBSSxDQUFDd0YsT0FBTyxDQUFDeEYsY0FBYyxJQUFJO2dCQUUvQ0MsZUFBZSxJQUFJLENBQUNtRixNQUFNLENBQUNuRixhQUFhLElBQUk7Z0JBRTVDLElBQUksQ0FBQzhFLEVBQUUsQ0FBQ2pJLGdCQUFnQixJQUFJLENBQUMwRSxVQUFVO2dCQUV2QyxJQUFJLENBQUN1RCxFQUFFLENBQUMvSCxpQkFBaUIsSUFBSSxDQUFDa0UsV0FBVztnQkFFekMsSUFBSSxDQUFDNkQsRUFBRSxDQUFDN0gsa0JBQWtCLElBQUksQ0FBQ2lELFlBQVk7Z0JBRTNDLElBQUksQ0FBQzRFLEVBQUUsQ0FBQ3ZILHdCQUF3QixJQUFJLENBQUM0QixrQkFBa0I7Z0JBRXZENkcsY0FBUSxDQUFDbEIsRUFBRSxDQUFDdEgsNEJBQTRCLElBQUksQ0FBQzBCLG1CQUFtQjtZQUNsRTs7O1lBRUErRyxLQUFBQTttQkFBQUEsU0FBQUEsY0FBYztnQkFDWixJQUFnRCxtQkFBQSxJQUFJLENBQUNGLFVBQVUsRUFBdkRKLFdBQXdDLGlCQUF4Q0EsVUFBVUYsV0FBOEIsaUJBQTlCQSxVQUFVRixVQUFvQixpQkFBcEJBLFNBQVNKLFNBQVcsaUJBQVhBLFFBQy9CUyxnQkFBZ0JELFVBQ2hCN0YsZ0JBQWdCMkYsVUFDaEIxRixlQUFld0YsU0FDZnZGLGNBQWNtRixRQUFRLEdBQUc7Z0JBRS9CUyxpQkFBaUIsSUFBSSxDQUFDQyxTQUFTLENBQUNELGVBQWUsSUFBSTtnQkFFbkQ5RixpQkFBaUIsSUFBSSxDQUFDNEYsU0FBUyxDQUFDNUYsZUFBZSxJQUFJO2dCQUVuREMsZ0JBQWdCLElBQUksQ0FBQ3lGLFFBQVEsQ0FBQ3pGLGNBQWMsSUFBSTtnQkFFaERDLGVBQWUsSUFBSSxDQUFDcUYsT0FBTyxDQUFDckYsYUFBYSxJQUFJO2dCQUU3QyxJQUFJLENBQUNpRixHQUFHLENBQUNwSSxnQkFBZ0IsSUFBSSxDQUFDMEUsVUFBVTtnQkFFeEMsSUFBSSxDQUFDMEQsR0FBRyxDQUFDbEksaUJBQWlCLElBQUksQ0FBQ2tFLFdBQVc7Z0JBRTFDLElBQUksQ0FBQ2dFLEdBQUcsQ0FBQ2hJLGtCQUFrQixJQUFJLENBQUNpRCxZQUFZO2dCQUU1QyxJQUFJLENBQUMrRSxHQUFHLENBQUMxSCx3QkFBd0IsSUFBSSxDQUFDNEIsa0JBQWtCO2dCQUV4RDZHLGNBQVEsQ0FBQ2YsR0FBRyxDQUFDekgsNEJBQTRCLElBQUksQ0FBQzBCLG1CQUFtQjtnQkFFakUsSUFBTWlELFNBQVMsSUFBSSxDQUFDRCxRQUFRO2dCQUU1QixJQUFJQyxRQUFRO29CQUNWLElBQUksQ0FBQzZDLFVBQVU7Z0JBQ2pCLENBQUM7WUFDSDs7OztZQWVPa0IsS0FBQUE7bUJBQVAsU0FBT0EsVUFBVUMsS0FBSyxFQUFFSixVQUFVLEVBQXlCO2dCQUF2QixJQUFBLElBQUEsT0FBQSxVQUFBLFFBQUEsQUFBRzFCLHFCQUFILFVBQUEsT0FBQSxJQUFBLE9BQUEsS0FBcUIsR0FBckIsT0FBQSxHQUFBLE9BQUEsTUFBQSxPQUFBO29CQUFHQSxtQkFBSCxPQUFBLEtBQUEsU0FBQSxDQUFBLEtBQXFCO2dCQUFEO29CQU1qQytCO2dCQUxyQixJQUFNMUksVUFBVSxLQUFLLEVBQ2ZDLFdBQVcsS0FBSyxFQUNoQkMsYUFBYXlJLG1CQUFVLENBQUNDLFdBQVcsSUFDbkN6SSxrQkFBa0IsSUFBSSxFQUN0QkMsb0JBQW9CLElBQUksRUFDeEJ5SSxlQUFlSCxDQUFBQSxXQUFBQSxhQUFPLEVBQUNGLFNBQVMsQ0FBakJFLE1BQUFBLFVBQUFBO29CQUFrQkQ7b0JBQU9KO29CQUFZckk7b0JBQVNDO29CQUFVQztvQkFBWUM7b0JBQWlCQztpQkFBeUMsQ0FBOUhzSSxPQUF3RyxtQkFBRy9CO2dCQUVoSSxPQUFPa0M7WUFDVDs7O1dBM2lCbUIzSjttQkFBcUJ3SixhQUFPO0FBcWhCL0MsZ0JBcmhCbUJ4SixjQXFoQlo0SixXQUFVO0FBRWpCLGdCQXZoQm1CNUosY0F1aEJaNkoscUJBQW9CO0lBQ3pCO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFRCxnQkE5aEJtQjdKLGNBOGhCWjhKLHFCQUFvQjtJQUN6QkMsV0FBVztBQUNiO0FBY0YsU0FBUzlHLE1BQU0rRyxJQUFJLEVBQUU7SUFDbkJDLFdBQVdELE1BQU07QUFDbkIifQ==
|
|
704
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XHJcbmltcG9ydCBEZWxldGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtQ29udGVudCBmcm9tIFwiLi90cmFuc2Zvcm0vY29udGVudFwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtU2VsZWN0aW9uIGZyb20gXCIuL3RyYW5zZm9ybS9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IGdlbmVyYXRlT3BlcmF0aW9ucyBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XHJcblxyXG5pbXBvcnQgeyBURVhULCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRl9LRVlfQ09ERSwgWl9LRVlfQ09ERSB9IGZyb20gXCIuL2tleUNvZGVzXCI7XHJcbmltcG9ydCB7IENVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDT1BZX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZJTkRfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBQQVNURV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBJTlBVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEtFWURPV05fRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSxcclxuICAgICAgICAgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIHByZXZpb3VzQ29udGVudCwgcHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHN1cGVyKHNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy51bmRvQnVmZmVyID0gdW5kb0J1ZmZlcjtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNGb2N1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seTtcclxuICB9XHJcblxyXG4gIGdldFVuZG9CdWZmZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJldm91c0NvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXNlZChmb2N1c2VkKSB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3Rpb24gPSBwcmV2aW91c1NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGludGVybWVkaWF0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlID0gdHJ1ZSwgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZWQgPSB0aGlzLmhhc1NlbGVjdGlvbkNoYW5nZWQoKSkgPT4ge1xyXG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucHJldmlvdXNDb250ZW50OyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodW5kb2FibGUpIHtcclxuICAgICAgaWYgKGNvbnRlbnRDaGFuZ2VkKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGdlbmVyYXRlT3BlcmF0aW9ucyh0aGlzLnByZXZpb3VzQ29udGVudCwgY29udGVudCk7XHJcblxyXG4gICAgICAgIHRoaXMudW5kb0J1ZmZlci5hZGRPcGVyYXRpb25zKG9wZXJhdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udGV4dG1lbnVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsgY3RybEtleSwgbWV0YUtleSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGN0cmxLZXkgfHwgbWV0YUtleSkge1xyXG4gICAgICBjb25zdCB7IGtleUNvZGUgfSA9IGV2ZW50O1xyXG5cclxuICAgICAgc3dpdGNoIChrZXlDb2RlKSB7XHJcbiAgICAgICAgY2FzZSBGX0tFWV9DT0RFOiB7XHJcbiAgICAgICAgICB0aGlzLmZpbmQoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSBaX0tFWV9DT0RFOiB7XHJcbiAgICAgICAgICBjb25zdCB7IHNoaWZ0S2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgICAgICBzaGlmdEtleSA/XHJcbiAgICAgICAgICAgIHRoaXMucmVkbyhldmVudCwgZWxlbWVudCkgOlxyXG4gICAgICAgICAgICAgIHRoaXMudW5kbyhldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVmZXIoKCkgPT4ge1xyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGZvY3VzSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBkZWZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHVuZG9hYmxlID0gdHJ1ZSxcclxuICAgICAgICAgICAgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUsIHNlbGVjdGlvbkNoYW5nZWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBibHVySGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgdW5kb2FibGUgPSB0cnVlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlLCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuICB9XHJcblxyXG4gIGlucHV0SGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHBhc3RlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgeyBjbGlwYm9hcmREYXRhIH0gPSBldmVudCxcclxuICAgICAgICAgIHRleHREYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKFRFWFQpO1xyXG5cclxuICAgIGlmICh0ZXh0RGF0YSA9PT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW1wdHkgPSBzZWxlY3Rpb24uaXNFbXB0eSgpO1xyXG5cclxuICAgIGlmICghc2VsZWN0aW9uRW1wdHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSxcclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gZGVsZXRlT3BlcmF0aW9uO1xyXG5cclxuICAgICAgdGhpcy5hcHBseU9wZXJhdGlvbihvcGVyYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXh0RGF0YSwgLy8vXHJcbiAgICAgICAgICBpbnNlcnRPcGVyYXRpb24gPSBJbnNlcnRPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSxcclxuICAgICAgICAgIG9wZXJhdGlvbiA9IGluc2VydE9wZXJhdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBjb3B5SGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVtcHR5ID0gc2VsZWN0aW9uLmlzRW1wdHkoKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0aW9uRW1wdHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkQ29udGVudCA9IHRoaXMuZ2V0U2VsZWN0ZWRDb250ZW50KCk7XHJcblxyXG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoc2VsZWN0ZWRDb250ZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgY3V0SGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVtcHR5ID0gc2VsZWN0aW9uLmlzRW1wdHkoKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0aW9uRW1wdHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkQ29udGVudCA9IHRoaXMuZ2V0U2VsZWN0ZWRDb250ZW50KCk7XHJcblxyXG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoc2VsZWN0ZWRDb250ZW50KTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSxcclxuICAgICAgICAgIG9wZXJhdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBpc0FjdGl2ZSgpIHtcclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaGFzQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgcmV0dXJuIGFjdGl2ZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICB7IHZhbHVlIH0gPSBkb21FbGVtZW50LFxyXG4gICAgICAgICAgY29udGVudCA9IHZhbHVlOyAgLy8vXHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCk7XHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkQ29udGVudCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBzZWxlY3RlZENvbnRlbnQgPSBjb250ZW50LnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3RlZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBoYXNDb250ZW50Q2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIGNvbnRlbnRQcmV2aW91c0NvbnRlbnQgPSAoY29udGVudCA9PT0gdGhpcy5wcmV2aW91c0NvbnRlbnQpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSAhY29udGVudFByZXZpb3VzQ29udGVudDtcclxuXHJcbiAgICByZXR1cm4gY29udGVudENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBoYXNTZWxlY3Rpb25DaGFuZ2VkKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLmlzRXF1YWxUbyh0aGlzLnByZXZpb3VzU2VsZWN0aW9uKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSAhc2VsZWN0aW9uUHJldmlvdXNTZWxlY3Rpb247IC8vL1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQgPSB0cnVlKSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGRvbUVsZW1lbnQsIHtcclxuICAgICAgdmFsdWVcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZXRQcmV2aW91c0NvbnRlbnQpIHtcclxuICAgICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBkb21FbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xyXG5cclxuICAgIGlmIChzZXRQcmV2aW91c1NlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGSU5EX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICB1bmRvKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCB1bmRvT3BlcmF0aW9uID0gdGhpcy51bmRvQnVmZmVyLnVuZG8oKTtcclxuXHJcbiAgICBpZiAodW5kb09wZXJhdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB1bmRvT3BlcmF0aW9uOyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnJldmVydChldmVudCwgZWxlbWVudCwgb3BlcmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZG8oZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IHJlZG9PcGVyYXRpb24gPSB0aGlzLnVuZG9CdWZmZXIucmVkbygpO1xyXG5cclxuICAgIGlmIChyZWRvT3BlcmF0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHJlZG9PcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICAgIHRoaXMucmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbU9wZXJhdGlvbihvcGVyYXRpb24pLFxyXG4gICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm0ob3BlcmF0aW9ucykge1xyXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29udGVudCA9IHRyYW5zZm9ybUNvbnRlbnQoY29udGVudCwgb3BlcmF0aW9ucyksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHRyYW5zZm9ybVNlbGVjdGlvbihzZWxlY3Rpb24sIG9wZXJhdGlvbnMpO1xyXG5cclxuICAgIGNvbnRlbnQgPSB0cmFuc2Zvcm1lZENvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHNlbGVjdGlvbiA9IHRyYW5zZm9ybWVkU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICBjb25zdCBzZXRQcmV2aW91c0NvbnRlbnQgPSBmYWxzZSxcclxuICAgICAgICAgIHNldFByZXZpb3VzU2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQsIHNldFByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy51bmRvQnVmZmVyLnRyYW5zZm9ybShvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb25zdCBldmVudCA9IG51bGwsXHJcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcyxcclxuICAgICAgICAgIHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBsZXQgeyBlbGVtZW50IH0gPSBldmVudExpc3RlbmVyO1xyXG5cclxuICAgICAgY29uc3QgeyBoYW5kbGVyIH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXHJcblxyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKSB7XHJcbiAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRDb250ZW50ID0gb3BlcmF0aW9uLnRyYW5zZm9ybUNvbnRlbnQoY29udGVudCksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IG9wZXJhdGlvbi50cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25GaW5kKGZpbmRIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGSU5EX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gZmluZEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkZpbmQoZmluZEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZJTkRfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBmaW5kSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgZGlkTW91bnQoKSB7XHJcbiAgICBjb25zdCB7IG9uRmluZCwgb25CbHVyLCBvbkZvY3VzLCBvbkNoYW5nZSwgb25TY3JvbGwgfSA9IHRoaXMucHJvcGVydGllcyxcclxuICAgICAgICAgIGZpbmRIYW5kbGVyID0gb25GaW5kLCAvLy9cclxuICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyLCAvLy9cclxuICAgICAgICAgIGZvY3VzSGFuZGxlciA9IG9uRm9jdXMsIC8vL1xyXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbDsgLy8vXHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICB0aGlzLnByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICB0aGlzLnByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcblxyXG4gICAgZmluZEhhbmRsZXIgJiYgdGhpcy5vbkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vbkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgY2hhbmdlSGFuZGxlciAmJiB0aGlzLm9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKENVVF9FVkVOVF9UWVBFLCB0aGlzLmN1dEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKFBBU1RFX0VWRU5UX1RZUEUsIHRoaXMucGFzdGVIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsIHRoaXMuY29udGV4dG1lbnVIYW5kbGVyKTtcclxuXHJcbiAgICBkb2N1bWVudC5vbihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkZpbmQsIG9uQmx1ciwgb25Gb2N1cywgb25DaGFuZ2UsIG9uU2Nyb2xsIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgIGZpbmRIYW5kbGVyID0gb25GaW5kLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXIsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsOyAvLy9cclxuXHJcbiAgICBmaW5kSGFuZGxlciAmJiB0aGlzLm9mZkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub2ZmQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub2ZmRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQ1VUX0VWRU5UX1RZUEUsIHRoaXMuY3V0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9mZihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9mZihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuXHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmlzQWN0aXZlKCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xyXG5cclxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXHJcbiAgICBcIm9uRmluZFwiLFxyXG4gICAgXCJvbkJsdXJcIixcclxuICAgIFwib25Gb2N1c1wiLFxyXG4gICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gIF07XHJcblxyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcclxuICAgIGNsYXNzTmFtZTogXCJyaWNoXCJcclxuICB9O1xyXG5cclxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcclxuICAgIGNvbnN0IGZvY3VzZWQgPSBmYWxzZSxcclxuICAgICAgICAgIHJlYWRPbmx5ID0gZmFsc2UsXHJcbiAgICAgICAgICB1bmRvQnVmZmVyID0gVW5kb0J1ZmZlci5mcm9tTm90aGluZygpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gbnVsbCxcclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gbnVsbCxcclxuICAgICAgICAgIHJpY2hUZXh0YXJlYSA9IEVsZW1lbnQuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCBmb2N1c2VkLCByZWFkT25seSwgdW5kb0J1ZmZlciwgcHJldmlvdXNDb250ZW50LCBwcmV2aW91c1NlbGVjdGlvbiwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcclxuXHJcbiAgICByZXR1cm4gcmljaFRleHRhcmVhO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZGVmZXIoZnVuYykge1xyXG4gIHNldFRpbWVvdXQoZnVuYywgMCk7XHJcbn1cclxuIl0sIm5hbWVzIjpbIlJpY2hUZXh0YXJlYSIsInNlbGVjdG9yIiwiZm9jdXNlZCIsInJlYWRPbmx5IiwidW5kb0J1ZmZlciIsInByZXZpb3VzQ29udGVudCIsInByZXZpb3VzU2VsZWN0aW9uIiwiaW50ZXJtZWRpYXRlSGFuZGxlciIsImV2ZW50IiwiZWxlbWVudCIsInVuZG9hYmxlIiwiZXZlbnRUeXBlIiwiQ0hBTkdFX0VWRU5UX1RZUEUiLCJzZWxlY3Rpb25DaGFuZ2VkIiwiaGFzU2VsZWN0aW9uQ2hhbmdlZCIsImNvbnRlbnQiLCJzZXRDb250ZW50IiwiZ2V0Q29udGVudCIsInNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJjaGFuZ2VkIiwiY2FsbEhhbmRsZXJzIiwib3BlcmF0aW9ucyIsImdlbmVyYXRlT3BlcmF0aW9ucyIsImFkZE9wZXJhdGlvbnMiLCJzZWxlY3RDaGFuZ2VIYW5kbGVyIiwiY29udGV4dG1lbnVIYW5kbGVyIiwicHJldmVudERlZmF1bHQiLCJrZXlEb3duSGFuZGxlciIsImN0cmxLZXkiLCJtZXRhS2V5Iiwia2V5Q29kZSIsIkZfS0VZX0NPREUiLCJmaW5kIiwiWl9LRVlfQ09ERSIsInNoaWZ0S2V5IiwicmVkbyIsInVuZG8iLCJkZWZlciIsInNjcm9sbEhhbmRsZXIiLCJTQ1JPTExfRVZFTlRfVFlQRSIsImZvY3VzSGFuZGxlciIsIkZPQ1VTX0VWRU5UX1RZUEUiLCJibHVySGFuZGxlciIsIkJMVVJfRVZFTlRfVFlQRSIsImlucHV0SGFuZGxlciIsInBhc3RlSGFuZGxlciIsImNsaXBib2FyZERhdGEiLCJ0ZXh0RGF0YSIsImdldERhdGEiLCJURVhUIiwiRU1QVFlfU1RSSU5HIiwic2VsZWN0aW9uRW1wdHkiLCJpc0VtcHR5IiwiZGVsZXRlT3BlcmF0aW9uIiwiRGVsZXRlT3BlcmF0aW9uIiwiZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24iLCJvcGVyYXRpb24iLCJhcHBseU9wZXJhdGlvbiIsImluc2VydE9wZXJhdGlvbiIsIkluc2VydE9wZXJhdGlvbiIsImNvcHlIYW5kbGVyIiwic2VsZWN0ZWRDb250ZW50IiwiZ2V0U2VsZWN0ZWRDb250ZW50IiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwiY3V0SGFuZGxlciIsImlzRm9jdXNlZCIsImlzUmVhZE9ubHkiLCJnZXRVbmRvQnVmZmVyIiwiZ2V0UHJldmlvdXNDb250ZW50IiwicHJldm91c0NvbnRlbnQiLCJnZXRQcmV2aW91c1NlbGVjdGlvbiIsInNldEZvY3VzZWQiLCJzZXRSZWFkT25seSIsInNldFByZXZpb3VzQ29udGVudCIsInNldFByZXZpb3VzU2VsZWN0aW9uIiwiaXNBY3RpdmUiLCJhY3RpdmUiLCJoYXNDbGFzcyIsImRvbUVsZW1lbnQiLCJnZXRET01FbGVtZW50IiwidmFsdWUiLCJTZWxlY3Rpb24iLCJmcm9tRE9NRWxlbWVudCIsImVuZFBvc2l0aW9uIiwiZ2V0RW5kUG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsInN0YXJ0IiwiZW5kIiwic2xpY2UiLCJjb250ZW50UHJldmlvdXNDb250ZW50Iiwic2VsZWN0aW9uUHJldmlvdXNTZWxlY3Rpb24iLCJpc0VxdWFsVG8iLCJPYmplY3QiLCJhc3NpZ24iLCJzZXRTZWxlY3Rpb24iLCJzZWxlY3Rpb25TdGFydFBvc2l0aW9uIiwic2VsZWN0aW9uRW5kUG9zaXRpb24iLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsInNldFNlbGVjdGlvblJhbmdlIiwiRklORF9FVkVOVF9UWVBFIiwidW5kb09wZXJhdGlvbiIsInJldmVydCIsInJlZG9PcGVyYXRpb24iLCJmcm9tT3BlcmF0aW9uIiwidHJhbnNmb3JtIiwidHJhbnNmb3JtZWRDb250ZW50IiwidHJhbnNmb3JtQ29udGVudCIsInRyYW5zZm9ybWVkU2VsZWN0aW9uIiwidHJhbnNmb3JtU2VsZWN0aW9uIiwicmVtYWluaW5nQXJndW1lbnRzIiwiZXZlbnRMaXN0ZW5lcnMiLCJmaW5kRXZlbnRMaXN0ZW5lcnMiLCJmb3JFYWNoIiwiZXZlbnRMaXN0ZW5lciIsImhhbmRsZXIiLCJoYW5kbGVyRWxlbWVudCIsImNhbGwiLCJhY3RpdmF0ZSIsIm9uIiwiS0VZRE9XTl9FVkVOVF9UWVBFIiwiSU5QVVRfRVZFTlRfVFlQRSIsImFkZENsYXNzIiwiZGVhY3RpdmF0ZSIsIm9mZiIsInJlbW92ZUNsYXNzIiwib25GaW5kIiwiZmluZEhhbmRsZXIiLCJhZGRFdmVudExpc3RlbmVyIiwib2ZmRmluZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbkJsdXIiLCJvZmZCbHVyIiwib25Gb2N1cyIsIm9mZkZvY3VzIiwib25TY3JvbGwiLCJvZmZTY3JvbGwiLCJvbkNoYW5nZSIsImNoYW5nZUhhbmRsZXIiLCJvZmZDaGFuZ2UiLCJkaWRNb3VudCIsInByb3BlcnRpZXMiLCJDVVRfRVZFTlRfVFlQRSIsIkNPUFlfRVZFTlRfVFlQRSIsIlBBU1RFX0VWRU5UX1RZUEUiLCJDT05URVhUTUVOVV9FVkVOVF9UWVBFIiwiZG9jdW1lbnQiLCJTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSIsIndpbGxVbm1vdW50IiwiZnJvbUNsYXNzIiwiQ2xhc3MiLCJFbGVtZW50IiwiVW5kb0J1ZmZlciIsImZyb21Ob3RoaW5nIiwicmljaFRleHRhcmVhIiwidGFnTmFtZSIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJmdW5jIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUEyQnFCQTs7O29CQXpCYTs4REFFWjsrREFDQzsyREFDSzsyREFDQTs0REFDQzsrREFDRTs2REFDQTt5QkFFSTt3QkFDSTswQkFZSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTVCLElBQUEsQUFBTUEsNkJBbWxCcEIsQUFubEJjO2NBQU1BOzhCQUFBQTthQUFBQSxhQUNQQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLGVBQWUsRUFBRUMsaUJBQWlCOzhCQURwRU47O2tDQUVYQztRQTZDUk0sK0NBQUFBLHVCQUFzQixTQUFDQyxPQUFPQyxTQUEyRztnQkFBbEdDLDRFQUFXLElBQUksRUFBRUMsNkVBQVlDLDZCQUFpQixFQUFFQyxvRkFBbUIsTUFBS0MsbUJBQW1CO1lBQ2hJLElB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
|