botframework-webchat-api 4.15.8-main.20230328.2c853c8 → 4.15.8-main.20230331.0e770c8
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/lib/hooks/Composer.d.ts +32 -5
- package/lib/hooks/Composer.d.ts.map +1 -1
- package/lib/hooks/Composer.js +93 -33
- package/lib/hooks/index.d.ts +2 -4
- package/lib/hooks/index.d.ts.map +1 -1
- package/lib/hooks/index.js +9 -25
- package/lib/hooks/internal/useTimer.d.ts +5 -0
- package/lib/hooks/internal/useTimer.d.ts.map +1 -0
- package/lib/hooks/internal/useTimer.js +28 -2
- package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.d.ts +4 -2
- package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.d.ts.map +1 -1
- package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.js +11 -8
- package/lib/hooks/useActiveTyping.d.ts.map +1 -1
- package/lib/hooks/useActiveTyping.js +11 -3
- package/lib/hooks/useDateFormatter.d.ts.map +1 -1
- package/lib/hooks/useDateFormatter.js +10 -2
- package/lib/hooks/useDebouncedNotifications.d.ts.map +1 -1
- package/lib/hooks/useDebouncedNotifications.js +8 -3
- package/lib/hooks/usePonyfill.d.ts +3 -0
- package/lib/hooks/usePonyfill.d.ts.map +1 -0
- package/lib/hooks/usePonyfill.js +14 -0
- package/lib/hooks/useRelativeTimeFormatter.d.ts.map +1 -1
- package/lib/hooks/useRelativeTimeFormatter.js +11 -4
- package/lib/hooks/useTrackTiming.d.ts.map +1 -1
- package/lib/hooks/useTrackTiming.js +20 -2
- package/lib/hooks/utils/observableToPromise.d.ts +2 -1
- package/lib/hooks/utils/observableToPromise.d.ts.map +1 -1
- package/lib/hooks/utils/observableToPromise.js +7 -4
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -9
- package/lib/localization/Localize.d.ts +1 -7
- package/lib/localization/Localize.d.ts.map +1 -1
- package/lib/localization/Localize.js +1 -38
- package/lib/providers/ActivitySendStatus/ActivitySendStatusComposer.d.ts.map +1 -1
- package/lib/providers/ActivitySendStatus/ActivitySendStatusComposer.js +12 -3
- package/lib/providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer.d.ts.map +1 -1
- package/lib/providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer.js +18 -6
- package/lib/providers/Ponyfill/PonyfillComposer.d.ts +17 -0
- package/lib/providers/Ponyfill/PonyfillComposer.d.ts.map +1 -0
- package/lib/providers/Ponyfill/PonyfillComposer.js +82 -0
- package/lib/providers/Ponyfill/private/PonyfillContext.d.ts +8 -0
- package/lib/providers/Ponyfill/private/PonyfillContext.d.ts.map +1 -0
- package/lib/providers/Ponyfill/private/PonyfillContext.js +13 -0
- package/lib/providers/Ponyfill/private/useContext.d.ts +6 -0
- package/lib/providers/Ponyfill/private/useContext.d.ts.map +1 -0
- package/lib/providers/Ponyfill/private/useContext.js +23 -0
- package/lib/providers/Ponyfill/usePonyfill.d.ts +3 -0
- package/lib/providers/Ponyfill/usePonyfill.d.ts.map +1 -0
- package/lib/providers/Ponyfill/usePonyfill.js +15 -0
- package/package.json +3 -3
- package/src/hooks/Composer.tsx +94 -28
- package/src/hooks/index.ts +2 -6
- package/src/hooks/internal/{useTimer.js → useTimer.ts} +9 -2
- package/src/hooks/middleware/createDefaultGroupActivitiesMiddleware.ts +11 -4
- package/src/hooks/useActiveTyping.ts +5 -3
- package/src/hooks/useDateFormatter.ts +5 -1
- package/src/hooks/useDebouncedNotifications.ts +4 -2
- package/src/hooks/usePonyfill.ts +3 -0
- package/src/hooks/useRelativeTimeFormatter.ts +6 -2
- package/src/hooks/useTrackTiming.ts +3 -1
- package/src/hooks/utils/observableToPromise.ts +10 -3
- package/src/index.ts +2 -2
- package/src/localization/Localize.spec.js +1 -8
- package/src/localization/Localize.ts +1 -27
- package/src/providers/ActivitySendStatus/ActivitySendStatusComposer.tsx +4 -2
- package/src/providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer.tsx +4 -2
- package/src/providers/Ponyfill/PonyfillComposer.tsx +71 -0
- package/src/providers/Ponyfill/private/PonyfillContext.ts +9 -0
- package/src/providers/Ponyfill/private/useContext.ts +17 -0
- package/src/providers/Ponyfill/usePonyfill.ts +7 -0
- package/lib/hooks/useLastTypingAt.d.ts +0 -5
- package/lib/hooks/useLastTypingAt.d.ts.map +0 -1
- package/lib/hooks/useLastTypingAt.js +0 -24
- package/lib/hooks/useLocalize.d.ts +0 -3
- package/lib/hooks/useLocalize.d.ts.map +0 -1
- package/lib/hooks/useLocalize.js +0 -41
- package/lib/hooks/useLocalizeDate.d.ts +0 -3
- package/lib/hooks/useLocalizeDate.d.ts.map +0 -1
- package/lib/hooks/useLocalizeDate.js +0 -41
- package/lib/localization/getLocaleString.d.ts +0 -2
- package/lib/localization/getLocaleString.d.ts.map +0 -1
- package/lib/localization/getLocaleString.js +0 -18
- package/src/hooks/useLastTypingAt.ts +0 -16
- package/src/hooks/useLocalize.ts +0 -12
- package/src/hooks/useLocalizeDate.ts +0 -20
- package/src/localization/getLocaleString.spec.js +0 -15
- package/src/localization/getLocaleString.ts +0 -7
package/lib/hooks/Composer.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import { default as WebChatAPIContext } from './internal/WebChatAPIContext';
|
|
3
4
|
import ActivityMiddleware from '../types/ActivityMiddleware';
|
|
@@ -14,8 +15,8 @@ import ToastMiddleware from '../types/ToastMiddleware';
|
|
|
14
15
|
import TypingIndicatorMiddleware from '../types/TypingIndicatorMiddleware';
|
|
15
16
|
import type { ActivityStatusMiddleware } from '../types/ActivityStatusMiddleware';
|
|
16
17
|
import type { ContextOf } from '../types/internal/ContextOf';
|
|
17
|
-
import type { DirectLineJSBotConnection, OneOrMany, WebChatActivity } from 'botframework-webchat-core';
|
|
18
|
-
import type {
|
|
18
|
+
import type { DirectLineJSBotConnection, OneOrMany, GlobalScopePonyfill, WebChatActivity } from 'botframework-webchat-core';
|
|
19
|
+
import type { ReactNode } from 'react';
|
|
19
20
|
type ComposerCoreProps = {
|
|
20
21
|
activityMiddleware?: OneOrMany<ActivityMiddleware>;
|
|
21
22
|
activityStatusMiddleware?: OneOrMany<ActivityStatusMiddleware>;
|
|
@@ -64,11 +65,37 @@ type ComposerCoreProps = {
|
|
|
64
65
|
/** @deprecated Please use "typingIndicatorRenderer" instead. */
|
|
65
66
|
typingIndicatorRenderer?: any;
|
|
66
67
|
};
|
|
67
|
-
type
|
|
68
|
-
internalRenderErrorBox?: any;
|
|
68
|
+
type ComposerWithStoreProps = ComposerCoreProps & {
|
|
69
69
|
store?: any;
|
|
70
70
|
};
|
|
71
|
-
|
|
71
|
+
type ComposerProps = ComposerWithStoreProps & {
|
|
72
|
+
internalRenderErrorBox?: any;
|
|
73
|
+
/**
|
|
74
|
+
* Ponyfill to overrides specific global scope members. This prop cannot be changed after initial render.
|
|
75
|
+
*
|
|
76
|
+
* This option is for development use only. Not all features in Web Chat are ponyfilled.
|
|
77
|
+
*
|
|
78
|
+
* To fake timers, `setTimeout` and related functions can be passed to overrides the original global scope members.
|
|
79
|
+
*
|
|
80
|
+
* Please see [#4662](https://github.com/microsoft/BotFramework-WebChat/pull/4662) for details.
|
|
81
|
+
*/
|
|
82
|
+
ponyfill?: Partial<GlobalScopePonyfill>;
|
|
83
|
+
};
|
|
84
|
+
declare const Composer: {
|
|
85
|
+
({ internalRenderErrorBox, onTelemetry, ponyfill, ...props }: ComposerProps): any;
|
|
86
|
+
defaultProps: {
|
|
87
|
+
internalRenderErrorBox: any;
|
|
88
|
+
onTelemetry: any;
|
|
89
|
+
ponyfill: any;
|
|
90
|
+
store: any;
|
|
91
|
+
};
|
|
92
|
+
propTypes: {
|
|
93
|
+
internalRenderErrorBox: PropTypes.Requireable<any>;
|
|
94
|
+
onTelemetry: PropTypes.Requireable<(...args: any[]) => any>;
|
|
95
|
+
ponyfill: PropTypes.Requireable<any>;
|
|
96
|
+
store: PropTypes.Requireable<any>;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
72
99
|
export default Composer;
|
|
73
100
|
export type { ComposerProps };
|
|
74
101
|
//# sourceMappingURL=Composer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../src/hooks/Composer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../src/hooks/Composer.tsx"],"names":[],"mappings":"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"}
|
package/lib/hooks/Composer.js
CHANGED
|
@@ -49,17 +49,22 @@ var _observableToPromise = _interopRequireDefault(require("./utils/observableToP
|
|
|
49
49
|
|
|
50
50
|
var _patchStyleOptionsFromDeprecatedProps = _interopRequireDefault(require("../patchStyleOptionsFromDeprecatedProps"));
|
|
51
51
|
|
|
52
|
+
var _PonyfillComposer = _interopRequireDefault(require("../providers/Ponyfill/PonyfillComposer"));
|
|
53
|
+
|
|
52
54
|
var _Tracker = _interopRequireDefault(require("./internal/Tracker"));
|
|
53
55
|
|
|
54
56
|
var _useMarkAllAsAcknowledged = _interopRequireDefault(require("./useMarkAllAsAcknowledged"));
|
|
55
57
|
|
|
58
|
+
var _usePonyfill5 = _interopRequireDefault(require("../hooks/usePonyfill"));
|
|
59
|
+
|
|
56
60
|
var _WebChatReduxContext = _interopRequireWildcard(require("./internal/WebChatReduxContext"));
|
|
57
61
|
|
|
58
62
|
var _applyMiddleware = _interopRequireWildcard(require("./middleware/applyMiddleware"));
|
|
59
63
|
|
|
60
64
|
var _PrecompiledGlobalize = _interopRequireDefault(require("../external/PrecompiledGlobalize"));
|
|
61
65
|
|
|
62
|
-
var _excluded = ["
|
|
66
|
+
var _excluded = ["onTelemetry", "store"],
|
|
67
|
+
_excluded2 = ["internalRenderErrorBox", "onTelemetry", "ponyfill"];
|
|
63
68
|
|
|
64
69
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
65
70
|
|
|
@@ -69,6 +74,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
69
74
|
|
|
70
75
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
71
76
|
|
|
77
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
78
|
+
|
|
79
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
80
|
+
|
|
81
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
82
|
+
|
|
72
83
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
73
84
|
|
|
74
85
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -77,12 +88,6 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
77
88
|
|
|
78
89
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
79
90
|
|
|
80
|
-
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
81
|
-
|
|
82
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
83
|
-
|
|
84
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
85
|
-
|
|
86
91
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
87
92
|
|
|
88
93
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -129,7 +134,8 @@ function createCardActionContext(_ref) {
|
|
|
129
134
|
var cardActionMiddleware = _ref.cardActionMiddleware,
|
|
130
135
|
directLine = _ref.directLine,
|
|
131
136
|
dispatch = _ref.dispatch,
|
|
132
|
-
markAllAsAcknowledged = _ref.markAllAsAcknowledged
|
|
137
|
+
markAllAsAcknowledged = _ref.markAllAsAcknowledged,
|
|
138
|
+
ponyfill = _ref.ponyfill;
|
|
133
139
|
|
|
134
140
|
var runMiddleware = _applyMiddleware.default.apply(void 0, ['card action'].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(cardActionMiddleware)), [(0, _createDefaultCardActionMiddleware.default)()]))({
|
|
135
141
|
dispatch: dispatch
|
|
@@ -152,7 +158,7 @@ function createCardActionContext(_ref) {
|
|
|
152
158
|
* This is the first place in this project to use async.
|
|
153
159
|
* Thus, we need to add @babel/plugin-transform-runtime and @babel/runtime.
|
|
154
160
|
*/
|
|
155
|
-
return (0, _observableToPromise.default)(directLine.getSessionId()).then(function (sessionId) {
|
|
161
|
+
return (0, _observableToPromise.default)(directLine.getSessionId(), ponyfill).then(function (sessionId) {
|
|
156
162
|
return "".concat(value).concat(encodeURIComponent("&code_challenge=".concat(sessionId)));
|
|
157
163
|
});
|
|
158
164
|
}
|
|
@@ -168,10 +174,12 @@ function createCardActionContext(_ref) {
|
|
|
168
174
|
|
|
169
175
|
function createGroupActivitiesContext(_ref3) {
|
|
170
176
|
var groupActivitiesMiddleware = _ref3.groupActivitiesMiddleware,
|
|
171
|
-
groupTimestamp = _ref3.groupTimestamp
|
|
177
|
+
groupTimestamp = _ref3.groupTimestamp,
|
|
178
|
+
ponyfill = _ref3.ponyfill;
|
|
172
179
|
|
|
173
180
|
var runMiddleware = _applyMiddleware.default.apply(void 0, ['group activities'].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(groupActivitiesMiddleware)), [(0, _createDefaultGroupActivitiesMiddleware.default)({
|
|
174
|
-
groupTimestamp: groupTimestamp
|
|
181
|
+
groupTimestamp: groupTimestamp,
|
|
182
|
+
ponyfill: ponyfill
|
|
175
183
|
})]));
|
|
176
184
|
|
|
177
185
|
return {
|
|
@@ -241,6 +249,11 @@ var ComposerCore = function ComposerCore(_ref4) {
|
|
|
241
249
|
typingIndicatorRenderer = _ref4.typingIndicatorRenderer,
|
|
242
250
|
userID = _ref4.userID,
|
|
243
251
|
username = _ref4.username;
|
|
252
|
+
|
|
253
|
+
var _usePonyfill = (0, _usePonyfill5.default)(),
|
|
254
|
+
_usePonyfill2 = _slicedToArray(_usePonyfill, 1),
|
|
255
|
+
ponyfill = _usePonyfill2[0];
|
|
256
|
+
|
|
244
257
|
var dispatch = (0, _WebChatReduxContext.useDispatch)();
|
|
245
258
|
var telemetryDimensionsRef = (0, _react.useRef)({});
|
|
246
259
|
var patchedDir = (0, _react.useMemo)(function () {
|
|
@@ -283,9 +296,10 @@ var ComposerCore = function ComposerCore(_ref4) {
|
|
|
283
296
|
cardActionMiddleware: cardActionMiddleware,
|
|
284
297
|
directLine: directLine,
|
|
285
298
|
dispatch: dispatch,
|
|
286
|
-
markAllAsAcknowledged: markAllAsAcknowledged
|
|
299
|
+
markAllAsAcknowledged: markAllAsAcknowledged,
|
|
300
|
+
ponyfill: ponyfill
|
|
287
301
|
});
|
|
288
|
-
}, [cardActionMiddleware, directLine, dispatch, markAllAsAcknowledged]);
|
|
302
|
+
}, [cardActionMiddleware, directLine, dispatch, markAllAsAcknowledged, ponyfill]);
|
|
289
303
|
var patchedSelectVoice = (0, _react.useMemo)(function () {
|
|
290
304
|
return selectVoice || _defaultSelectVoice.default.bind(null, {
|
|
291
305
|
language: locale
|
|
@@ -294,9 +308,10 @@ var ComposerCore = function ComposerCore(_ref4) {
|
|
|
294
308
|
var groupActivitiesContext = (0, _react.useMemo)(function () {
|
|
295
309
|
return createGroupActivitiesContext({
|
|
296
310
|
groupActivitiesMiddleware: groupActivitiesMiddleware,
|
|
297
|
-
groupTimestamp: patchedStyleOptions.groupTimestamp
|
|
311
|
+
groupTimestamp: patchedStyleOptions.groupTimestamp,
|
|
312
|
+
ponyfill: ponyfill
|
|
298
313
|
});
|
|
299
|
-
}, [groupActivitiesMiddleware, patchedStyleOptions.groupTimestamp]);
|
|
314
|
+
}, [groupActivitiesMiddleware, patchedStyleOptions.groupTimestamp, ponyfill]);
|
|
300
315
|
var hoistedDispatchers = (0, _react.useMemo)(function () {
|
|
301
316
|
return (0, _mapMap.default)(DISPATCHERS, function (dispatcher) {
|
|
302
317
|
return function () {
|
|
@@ -598,12 +613,61 @@ ComposerCore.propTypes = {
|
|
|
598
613
|
};
|
|
599
614
|
|
|
600
615
|
// We will create a Redux store if it was not passed in
|
|
601
|
-
var
|
|
602
|
-
var
|
|
603
|
-
onTelemetry = _ref10.onTelemetry,
|
|
616
|
+
var ComposerWithStore = function ComposerWithStore(_ref10) {
|
|
617
|
+
var onTelemetry = _ref10.onTelemetry,
|
|
604
618
|
store = _ref10.store,
|
|
605
619
|
props = _objectWithoutProperties(_ref10, _excluded);
|
|
606
620
|
|
|
621
|
+
var _usePonyfill3 = (0, _usePonyfill5.default)(),
|
|
622
|
+
_usePonyfill4 = _slicedToArray(_usePonyfill3, 1),
|
|
623
|
+
ponyfill = _usePonyfill4[0];
|
|
624
|
+
|
|
625
|
+
var memoizedStore = (0, _react.useMemo)(function () {
|
|
626
|
+
var _store$getState$inter;
|
|
627
|
+
|
|
628
|
+
var nextStore = store || (0, _botframeworkWebchatCore.createStoreWithOptions)({
|
|
629
|
+
ponyfill: ponyfill
|
|
630
|
+
});
|
|
631
|
+
var storePonyfill = ((_store$getState$inter = store.getState().internal) === null || _store$getState$inter === void 0 ? void 0 : _store$getState$inter.ponyfill) || {};
|
|
632
|
+
var keys = new Set([].concat(_toConsumableArray(Object.keys(storePonyfill)), _toConsumableArray(Object.keys(ponyfill)))); // Filter out forbidden properties.
|
|
633
|
+
|
|
634
|
+
keys.delete('prototype');
|
|
635
|
+
Object.getOwnPropertyNames(Object.prototype).forEach(function (key) {
|
|
636
|
+
keys.delete(key);
|
|
637
|
+
}); // We have filtered out all forbidden properties.
|
|
638
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
639
|
+
|
|
640
|
+
if (Array.from(keys).some(function (key) {
|
|
641
|
+
return storePonyfill[key] !== ponyfill[key];
|
|
642
|
+
})) {
|
|
643
|
+
console.warn("botframework-webchat: Ponyfill used in store should match the ponyfill passed in props.");
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
return nextStore;
|
|
647
|
+
}, [ponyfill, store]);
|
|
648
|
+
return /*#__PURE__*/_react.default.createElement(_reactRedux.Provider, {
|
|
649
|
+
context: _WebChatReduxContext.default,
|
|
650
|
+
store: memoizedStore
|
|
651
|
+
}, /*#__PURE__*/_react.default.createElement(_ActivityKeyerComposer.default, null, /*#__PURE__*/_react.default.createElement(_ActivityAcknowledgementComposer.default, null, /*#__PURE__*/_react.default.createElement(ComposerCore, _extends({
|
|
652
|
+
onTelemetry: onTelemetry
|
|
653
|
+
}, props)))));
|
|
654
|
+
};
|
|
655
|
+
|
|
656
|
+
ComposerWithStore.defaultProps = {
|
|
657
|
+
onTelemetry: undefined,
|
|
658
|
+
store: undefined
|
|
659
|
+
};
|
|
660
|
+
ComposerWithStore.propTypes = {
|
|
661
|
+
onTelemetry: _propTypes.default.func,
|
|
662
|
+
store: _propTypes.default.any
|
|
663
|
+
};
|
|
664
|
+
|
|
665
|
+
var Composer = function Composer(_ref11) {
|
|
666
|
+
var internalRenderErrorBox = _ref11.internalRenderErrorBox,
|
|
667
|
+
onTelemetry = _ref11.onTelemetry,
|
|
668
|
+
ponyfill = _ref11.ponyfill,
|
|
669
|
+
props = _objectWithoutProperties(_ref11, _excluded2);
|
|
670
|
+
|
|
607
671
|
var _useState = (0, _react.useState)(),
|
|
608
672
|
_useState2 = _slicedToArray(_useState, 2),
|
|
609
673
|
error = _useState2[0],
|
|
@@ -619,32 +683,28 @@ var Composer = function Composer(_ref10) {
|
|
|
619
683
|
}));
|
|
620
684
|
setError(error);
|
|
621
685
|
}, [onTelemetry, setError]);
|
|
622
|
-
var memoizedStore = (0, _react.useMemo)(function () {
|
|
623
|
-
return store || (0, _botframeworkWebchatCore.createStore)();
|
|
624
|
-
}, [store]);
|
|
625
686
|
return error ? !!internalRenderErrorBox && internalRenderErrorBox({
|
|
626
687
|
error: error,
|
|
627
688
|
type: 'uncaught exception'
|
|
628
689
|
}) : /*#__PURE__*/_react.default.createElement(_ErrorBoundary.default, {
|
|
629
690
|
onError: handleError
|
|
630
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
}, /*#__PURE__*/_react.default.createElement(_ActivityKeyerComposer.default, null, /*#__PURE__*/_react.default.createElement(_ActivityAcknowledgementComposer.default, null, /*#__PURE__*/_react.default.createElement(ComposerCore, _extends({
|
|
691
|
+
}, /*#__PURE__*/_react.default.createElement(_PonyfillComposer.default, {
|
|
692
|
+
ponyfill: ponyfill
|
|
693
|
+
}, /*#__PURE__*/_react.default.createElement(ComposerWithStore, _extends({
|
|
634
694
|
onTelemetry: onTelemetry
|
|
635
|
-
}, props))))
|
|
695
|
+
}, props))));
|
|
636
696
|
};
|
|
637
697
|
|
|
638
|
-
Composer.defaultProps = {
|
|
698
|
+
Composer.defaultProps = _objectSpread(_objectSpread({}, ComposerWithStore.defaultProps), {}, {
|
|
639
699
|
internalRenderErrorBox: undefined,
|
|
640
700
|
onTelemetry: undefined,
|
|
641
|
-
|
|
642
|
-
};
|
|
643
|
-
Composer.propTypes = {
|
|
701
|
+
ponyfill: undefined
|
|
702
|
+
});
|
|
703
|
+
Composer.propTypes = _objectSpread(_objectSpread({}, ComposerWithStore.propTypes), {}, {
|
|
644
704
|
internalRenderErrorBox: _propTypes.default.any,
|
|
645
705
|
onTelemetry: _propTypes.default.func,
|
|
646
|
-
|
|
647
|
-
};
|
|
706
|
+
ponyfill: _propTypes.default.any
|
|
707
|
+
});
|
|
648
708
|
var _default = Composer;
|
|
649
709
|
exports.default = _default;
|
|
650
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJESVNQQVRDSEVSUyIsImNsZWFyU3VnZ2VzdGVkQWN0aW9ucyIsImRpc21pc3NOb3RpZmljYXRpb24iLCJlbWl0VHlwaW5nSW5kaWNhdG9yIiwibWFya0FjdGl2aXR5IiwicG9zdEFjdGl2aXR5Iiwic2VuZEV2ZW50Iiwic2VuZEZpbGVzIiwic2VuZE1lc3NhZ2UiLCJzZW5kTWVzc2FnZUJhY2siLCJzZW5kUG9zdEJhY2siLCJzZXREaWN0YXRlSW50ZXJpbXMiLCJzZXREaWN0YXRlU3RhdGUiLCJzZXROb3RpZmljYXRpb24iLCJzZXRTZW5kQm94Iiwic2V0U2VuZFRpbWVvdXQiLCJzdGFydERpY3RhdGUiLCJzdGFydFNwZWFraW5nQWN0aXZpdHkiLCJzdG9wRGljdGF0ZSIsInN0b3BTcGVha2luZ0FjdGl2aXR5Iiwic3VibWl0U2VuZEJveCIsImNyZWF0ZUNhcmRBY3Rpb25Db250ZXh0IiwiY2FyZEFjdGlvbk1pZGRsZXdhcmUiLCJkaXJlY3RMaW5lIiwiZGlzcGF0Y2giLCJtYXJrQWxsQXNBY2tub3dsZWRnZWQiLCJydW5NaWRkbGV3YXJlIiwiYXBwbHlNaWRkbGV3YXJlIiwic2luZ2xlVG9BcnJheSIsImNyZWF0ZURlZmF1bHRDYXJkQWN0aW9uTWlkZGxld2FyZSIsIm9uQ2FyZEFjdGlvbiIsImNhcmRBY3Rpb24iLCJ0YXJnZXQiLCJnZXRTaWduSW5VcmwiLCJ0eXBlIiwidmFsdWUiLCJnZXRTZXNzaW9uSWQiLCJvYnNlcnZhYmxlVG9Qcm9taXNlIiwidGhlbiIsInNlc3Npb25JZCIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvbnNvbGUiLCJ3YXJuIiwiY3JlYXRlR3JvdXBBY3Rpdml0aWVzQ29udGV4dCIsImdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUiLCJncm91cFRpbWVzdGFtcCIsImNyZWF0ZURlZmF1bHRHcm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlIiwiZ3JvdXBBY3Rpdml0aWVzIiwibWVyZ2VTdHJpbmdzT3ZlcnJpZGVzIiwibG9jYWxpemVkU3RyaW5ncyIsImxhbmd1YWdlIiwib3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzIiwibWVyZ2VkIiwiaXNPYmplY3QiLCJFcnJvciIsIkNvbXBvc2VyQ29yZSIsImFjdGl2aXR5TWlkZGxld2FyZSIsImFjdGl2aXR5UmVuZGVyZXIiLCJhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUiLCJhY3Rpdml0eVN0YXR1c1JlbmRlcmVyIiwiYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmUiLCJhdHRhY2htZW50TWlkZGxld2FyZSIsImF0dGFjaG1lbnRSZW5kZXJlciIsImF2YXRhck1pZGRsZXdhcmUiLCJhdmF0YXJSZW5kZXJlciIsImNoaWxkcmVuIiwiZGlyIiwiZGlzYWJsZWQiLCJkb3duc2NhbGVJbWFnZVRvRGF0YVVSTCIsImdyYW1tYXJzIiwiaW50ZXJuYWxFcnJvckJveENsYXNzIiwibG9jYWxlIiwib25UZWxlbWV0cnkiLCJyZW5kZXJNYXJrZG93biIsInNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZSIsInNlbGVjdFZvaWNlIiwic2VuZFRpbWVvdXQiLCJzZW5kVHlwaW5nSW5kaWNhdG9yIiwic3R5bGVPcHRpb25zIiwidG9hc3RNaWRkbGV3YXJlIiwidG9hc3RSZW5kZXJlciIsInR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUiLCJ0eXBpbmdJbmRpY2F0b3JSZW5kZXJlciIsInVzZXJJRCIsInVzZXJuYW1lIiwidXNlRGlzcGF0Y2giLCJ0ZWxlbWV0cnlEaW1lbnNpb25zUmVmIiwidXNlUmVmIiwicGF0Y2hlZERpciIsInVzZU1lbW8iLCJwYXRjaGVkR3JhbW1hcnMiLCJwYXRjaGVkU3R5bGVPcHRpb25zIiwibm9ybWFsaXplU3R5bGVPcHRpb25zIiwicGF0Y2hTdHlsZU9wdGlvbnNGcm9tRGVwcmVjYXRlZFByb3BzIiwidXNlRWZmZWN0Iiwic2V0TGFuZ3VhZ2UiLCJzZXRTZW5kVHlwaW5nSW5kaWNhdG9yIiwiY3JlYXRlQ29ubmVjdEFjdGlvbiIsImRpc2Nvbm5lY3QiLCJ1c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQiLCJjYXJkQWN0aW9uQ29udGV4dCIsInBhdGNoZWRTZWxlY3RWb2ljZSIsImRlZmF1bHRTZWxlY3RWb2ljZSIsImJpbmQiLCJncm91cEFjdGl2aXRpZXNDb250ZXh0IiwiaG9pc3RlZERpc3BhdGNoZXJzIiwibWFwTWFwIiwiZGlzcGF0Y2hlciIsInBhdGNoZWRMb2NhbGl6ZWRTdHJpbmdzIiwiZ2V0QWxsTG9jYWxpemVkU3RyaW5ncyIsIm5vcm1hbGl6ZUxhbmd1YWdlIiwibG9jYWxpemVkR2xvYmFsaXplIiwiR0xPQkFMSVpFIiwiR0xPQkFMSVpFX0xBTkdVQUdFIiwiUHJlY29tcGlsZWRHbG9iYWxpemUiLCJ0cmFja0RpbWVuc2lvbiIsInVzZUNhbGxiYWNrIiwibmFtZSIsImRhdGEiLCJjdXJyZW50IiwidXBkYXRlSW4iLCJwYXRjaGVkQWN0aXZpdHlSZW5kZXJlciIsImFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyIiwic3RyaWN0IiwiYWN0aXZpdHkiLCJwYXRjaGVkQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsInBhdGNoZWRBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXIiLCJhdHRhY2htZW50IiwiY29udGVudFR5cGUiLCJwYXRjaGVkQXR0YWNobWVudFJlbmRlcmVyIiwiYXBwbHlNaWRkbGV3YXJlRm9yTGVnYWN5UmVuZGVyZXIiLCJwYXRjaGVkQXZhdGFyUmVuZGVyZXIiLCJwYXRjaGVkVG9hc3RSZW5kZXJlciIsIm5vdGlmaWNhdGlvbiIsInBhdGNoZWRUeXBpbmdJbmRpY2F0b3JSZW5kZXJlciIsInNjcm9sbFRvRW5kQnV0dG9uUmVuZGVyZXIiLCJjb250ZXh0IiwiYXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyIiwibG9jYWxpemVkR2xvYmFsaXplU3RhdGUiLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJ3aW5kb3ciLCJuYXZpZ2F0b3IiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwiZnVuYyIsImFueSIsIm9uZU9mIiwic2hhcGUiLCJhY3Rpdml0eSQiLCJzdWJzY3JpYmUiLCJpc1JlcXVpcmVkIiwiY29ubmVjdGlvblN0YXR1cyQiLCJlbmQiLCJyZWZlcmVuY2VHcmFtbWFySUQiLCJzdHJpbmciLCJ0b2tlbiIsImJvb2wiLCJudW1iZXIiLCJDb21wb3NlciIsImludGVybmFsUmVuZGVyRXJyb3JCb3giLCJzdG9yZSIsInByb3BzIiwidXNlU3RhdGUiLCJlcnJvciIsInNldEVycm9yIiwiaGFuZGxlRXJyb3IiLCJjcmVhdGVDdXN0b21FdmVudCIsImZhdGFsIiwibWVtb2l6ZWRTdG9yZSIsImNyZWF0ZVN0b3JlIiwiV2ViQ2hhdFJlZHV4Q29udGV4dCJdLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL0NvbXBvc2VyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1cGRhdGVJbiBmcm9tICdzaW1wbGUtdXBkYXRlLWluJztcbmltcG9ydCB7XG4gIGNsZWFyU3VnZ2VzdGVkQWN0aW9ucyxcbiAgY29ubmVjdCBhcyBjcmVhdGVDb25uZWN0QWN0aW9uLFxuICBjcmVhdGVTdG9yZSxcbiAgZGlzY29ubmVjdCxcbiAgZGlzbWlzc05vdGlmaWNhdGlvbixcbiAgZW1pdFR5cGluZ0luZGljYXRvcixcbiAgbWFya0FjdGl2aXR5LFxuICBwb3N0QWN0aXZpdHksXG4gIHNlbmRFdmVudCxcbiAgc2VuZEZpbGVzLFxuICBzZW5kTWVzc2FnZSxcbiAgc2VuZE1lc3NhZ2VCYWNrLFxuICBzZW5kUG9zdEJhY2ssXG4gIHNldERpY3RhdGVJbnRlcmltcyxcbiAgc2V0RGljdGF0ZVN0YXRlLFxuICBzZXRMYW5ndWFnZSxcbiAgc2V0Tm90aWZpY2F0aW9uLFxuICBzZXRTZW5kQm94LFxuICBzZXRTZW5kVGltZW91dCxcbiAgc2V0U2VuZFR5cGluZ0luZGljYXRvcixcbiAgc2luZ2xlVG9BcnJheSxcbiAgc3RhcnREaWN0YXRlLFxuICBzdGFydFNwZWFraW5nQWN0aXZpdHksXG4gIHN0b3BEaWN0YXRlLFxuICBzdG9wU3BlYWtpbmdBY3Rpdml0eSxcbiAgc3VibWl0U2VuZEJveFxufSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcblxuaW1wb3J0IHsgZGVmYXVsdCBhcyBXZWJDaGF0QVBJQ29udGV4dCB9IGZyb20gJy4vaW50ZXJuYWwvV2ViQ2hhdEFQSUNvbnRleHQnO1xuaW1wb3J0IEFjdGl2aXR5QWNrbm93bGVkZ2VtZW50Q29tcG9zZXIgZnJvbSAnLi4vcHJvdmlkZXJzL0FjdGl2aXR5QWNrbm93bGVkZ2VtZW50L0FjdGl2aXR5QWNrbm93bGVkZ2VtZW50Q29tcG9zZXInO1xuaW1wb3J0IEFjdGl2aXR5S2V5ZXJDb21wb3NlciBmcm9tICcuLi9wcm92aWRlcnMvQWN0aXZpdHlLZXllci9BY3Rpdml0eUtleWVyQ29tcG9zZXInO1xuaW1wb3J0IEFjdGl2aXR5TWlkZGxld2FyZSBmcm9tICcuLi90eXBlcy9BY3Rpdml0eU1pZGRsZXdhcmUnO1xuaW1wb3J0IEFjdGl2aXR5U2VuZFN0YXR1c0NvbXBvc2VyIGZyb20gJy4uL3Byb3ZpZGVycy9BY3Rpdml0eVNlbmRTdGF0dXMvQWN0aXZpdHlTZW5kU3RhdHVzQ29tcG9zZXInO1xuaW1wb3J0IEFjdGl2aXR5U2VuZFN0YXR1c1RlbGVtZXRyeUNvbXBvc2VyIGZyb20gJy4uL3Byb3ZpZGVycy9BY3Rpdml0eVNlbmRTdGF0dXNUZWxlbWV0cnkvQWN0aXZpdHlTZW5kU3RhdHVzVGVsZW1ldHJ5Q29tcG9zZXInO1xuaW1wb3J0IEF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlIGZyb20gJy4uL3R5cGVzL0F0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlJztcbmltcG9ydCBBdHRhY2htZW50TWlkZGxld2FyZSBmcm9tICcuLi90eXBlcy9BdHRhY2htZW50TWlkZGxld2FyZSc7XG5pbXBvcnQgQXZhdGFyTWlkZGxld2FyZSBmcm9tICcuLi90eXBlcy9BdmF0YXJNaWRkbGV3YXJlJztcbmltcG9ydCBDYXJkQWN0aW9uTWlkZGxld2FyZSBmcm9tICcuLi90eXBlcy9DYXJkQWN0aW9uTWlkZGxld2FyZSc7XG5pbXBvcnQgY3JlYXRlQ3VzdG9tRXZlbnQgZnJvbSAnLi4vdXRpbHMvY3JlYXRlQ3VzdG9tRXZlbnQnO1xuaW1wb3J0IGNyZWF0ZURlZmF1bHRDYXJkQWN0aW9uTWlkZGxld2FyZSBmcm9tICcuL21pZGRsZXdhcmUvY3JlYXRlRGVmYXVsdENhcmRBY3Rpb25NaWRkbGV3YXJlJztcbmltcG9ydCBjcmVhdGVEZWZhdWx0R3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSBmcm9tICcuL21pZGRsZXdhcmUvY3JlYXRlRGVmYXVsdEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUnO1xuaW1wb3J0IGRlZmF1bHRTZWxlY3RWb2ljZSBmcm9tICcuL2ludGVybmFsL2RlZmF1bHRTZWxlY3RWb2ljZSc7XG5pbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tICcuL3V0aWxzL0Vycm9yQm91bmRhcnknO1xuaW1wb3J0IGdldEFsbExvY2FsaXplZFN0cmluZ3MgZnJvbSAnLi4vbG9jYWxpemF0aW9uL2dldEFsbExvY2FsaXplZFN0cmluZ3MnO1xuaW1wb3J0IEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvR3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi4vdXRpbHMvaXNPYmplY3QnO1xuaW1wb3J0IExvY2FsaXplZFN0cmluZ3MgZnJvbSAnLi4vdHlwZXMvTG9jYWxpemVkU3RyaW5ncyc7XG5pbXBvcnQgbWFwTWFwIGZyb20gJy4uL3V0aWxzL21hcE1hcCc7XG5pbXBvcnQgbm9ybWFsaXplTGFuZ3VhZ2UgZnJvbSAnLi4vdXRpbHMvbm9ybWFsaXplTGFuZ3VhZ2UnO1xuaW1wb3J0IG5vcm1hbGl6ZVN0eWxlT3B0aW9ucyBmcm9tICcuLi9ub3JtYWxpemVTdHlsZU9wdGlvbnMnO1xuaW1wb3J0IG9ic2VydmFibGVUb1Byb21pc2UgZnJvbSAnLi91dGlscy9vYnNlcnZhYmxlVG9Qcm9taXNlJztcbmltcG9ydCBwYXRjaFN0eWxlT3B0aW9uc0Zyb21EZXByZWNhdGVkUHJvcHMgZnJvbSAnLi4vcGF0Y2hTdHlsZU9wdGlvbnNGcm9tRGVwcmVjYXRlZFByb3BzJztcbmltcG9ydCBQcmVjb21waWxlZEdsb2JhbGl6ZVR5cGUgZnJvbSAnLi4vdHlwZXMvUHJlY29tcGlsZWRHbG9iYWxpemUnO1xuaW1wb3J0IFNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZSwgeyBTY3JvbGxUb0VuZEJ1dHRvbkNvbXBvbmVudEZhY3RvcnkgfSBmcm9tICcuLi90eXBlcy9TY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmUnO1xuaW1wb3J0IFN0eWxlT3B0aW9ucyBmcm9tICcuLi9TdHlsZU9wdGlvbnMnO1xuaW1wb3J0IFRlbGVtZXRyeU1lYXN1cmVtZW50RXZlbnQsIHsgVGVsZW1ldHJ5RXhjZXB0aW9uTWVhc3VyZW1lbnRFdmVudCB9IGZyb20gJy4uL3R5cGVzL1RlbGVtZXRyeU1lYXN1cmVtZW50RXZlbnQnO1xuaW1wb3J0IFRvYXN0TWlkZGxld2FyZSBmcm9tICcuLi90eXBlcy9Ub2FzdE1pZGRsZXdhcmUnO1xuaW1wb3J0IFRyYWNrZXIgZnJvbSAnLi9pbnRlcm5hbC9UcmFja2VyJztcbmltcG9ydCBUeXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlIGZyb20gJy4uL3R5cGVzL1R5cGluZ0luZGljYXRvck1pZGRsZXdhcmUnO1xuaW1wb3J0IHVzZU1hcmtBbGxBc0Fja25vd2xlZGdlZCBmcm9tICcuL3VzZU1hcmtBbGxBc0Fja25vd2xlZGdlZCc7XG5pbXBvcnQgV2ViQ2hhdFJlZHV4Q29udGV4dCwgeyB1c2VEaXNwYXRjaCB9IGZyb20gJy4vaW50ZXJuYWwvV2ViQ2hhdFJlZHV4Q29udGV4dCc7XG5cbmltcG9ydCBhcHBseU1pZGRsZXdhcmUsIHtcbiAgZm9yTGVnYWN5UmVuZGVyZXIgYXMgYXBwbHlNaWRkbGV3YXJlRm9yTGVnYWN5UmVuZGVyZXIsXG4gIGZvclJlbmRlcmVyIGFzIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyXG59IGZyb20gJy4vbWlkZGxld2FyZS9hcHBseU1pZGRsZXdhcmUnO1xuXG4vLyBQcmVjb21waWxlR2xvYmFsaXplIGlzIGEgZ2VuZXJhdGVkIGZpbGUgYW5kIGlzIG5vdCBFUyBtb2R1bGUuIFR5cGVTY3JpcHQgZG9uJ3Qgd29yayB3aXRoIFVNRC5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBQcmVjb21waWxlZEdsb2JhbGl6ZSBmcm9tICcuLi9leHRlcm5hbC9QcmVjb21waWxlZEdsb2JhbGl6ZSc7XG5cbmltcG9ydCB0eXBlIHsgQWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlLCBSZW5kZXJBY3Rpdml0eVN0YXR1cyB9IGZyb20gJy4uL3R5cGVzL0FjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRPZiB9IGZyb20gJy4uL3R5cGVzL2ludGVybmFsL0NvbnRleHRPZic7XG5pbXBvcnQgdHlwZSB7IERpcmVjdExpbmVKU0JvdENvbm5lY3Rpb24sIE9uZU9yTWFueSwgV2ViQ2hhdEFjdGl2aXR5IH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtY29yZSc7XG5pbXBvcnQgdHlwZSB7IEZDLCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5cbi8vIExpc3Qgb2YgUmVkdXggYWN0aW9ucyBmYWN0b3J5IHdlIGFyZSBob2lzdGluZyBhcyBXZWIgQ2hhdCBmdW5jdGlvbnNcbmNvbnN0IERJU1BBVENIRVJTID0ge1xuICBjbGVhclN1Z2dlc3RlZEFjdGlvbnMsXG4gIGRpc21pc3NOb3RpZmljYXRpb24sXG4gIGVtaXRUeXBpbmdJbmRpY2F0b3IsXG4gIG1hcmtBY3Rpdml0eSxcbiAgcG9zdEFjdGl2aXR5LFxuICBzZW5kRXZlbnQsXG4gIHNlbmRGaWxlcyxcbiAgc2VuZE1lc3NhZ2UsXG4gIHNlbmRNZXNzYWdlQmFjayxcbiAgc2VuZFBvc3RCYWNrLFxuICBzZXREaWN0YXRlSW50ZXJpbXMsXG4gIHNldERpY3RhdGVTdGF0ZSxcbiAgc2V0Tm90aWZpY2F0aW9uLFxuICBzZXRTZW5kQm94LFxuICBzZXRTZW5kVGltZW91dCxcbiAgc3RhcnREaWN0YXRlLFxuICBzdGFydFNwZWFraW5nQWN0aXZpdHksXG4gIHN0b3BEaWN0YXRlLFxuICBzdG9wU3BlYWtpbmdBY3Rpdml0eSxcbiAgc3VibWl0U2VuZEJveFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQ2FyZEFjdGlvbkNvbnRleHQoeyBjYXJkQWN0aW9uTWlkZGxld2FyZSwgZGlyZWN0TGluZSwgZGlzcGF0Y2gsIG1hcmtBbGxBc0Fja25vd2xlZGdlZCB9KSB7XG4gIGNvbnN0IHJ1bk1pZGRsZXdhcmUgPSBhcHBseU1pZGRsZXdhcmUoXG4gICAgJ2NhcmQgYWN0aW9uJyxcbiAgICAuLi5zaW5nbGVUb0FycmF5KGNhcmRBY3Rpb25NaWRkbGV3YXJlKSxcbiAgICBjcmVhdGVEZWZhdWx0Q2FyZEFjdGlvbk1pZGRsZXdhcmUoKVxuICApKHsgZGlzcGF0Y2ggfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBvbkNhcmRBY3Rpb246IChjYXJkQWN0aW9uLCB7IHRhcmdldCB9OiB7IHRhcmdldD86IGFueSB9ID0ge30pID0+IHtcbiAgICAgIG1hcmtBbGxBc0Fja25vd2xlZGdlZCgpO1xuXG4gICAgICByZXR1cm4gcnVuTWlkZGxld2FyZSh7XG4gICAgICAgIGNhcmRBY3Rpb24sXG4gICAgICAgIGdldFNpZ25JblVybDpcbiAgICAgICAgICBjYXJkQWN0aW9uLnR5cGUgPT09ICdzaWduaW4nXG4gICAgICAgICAgICA/ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBjYXJkQWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdExpbmUuZ2V0U2Vzc2lvbklkKSB7XG4gICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAqIEB0b2RvIFRPRE86IFtQM10gV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIG9uZSB0byBhc3luYy9hd2FpdC5cbiAgICAgICAgICAgICAgICAgICAqICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHRoaXMgcHJvamVjdCB0byB1c2UgYXN5bmMuXG4gICAgICAgICAgICAgICAgICAgKiAgICAgICBUaHVzLCB3ZSBuZWVkIHRvIGFkZCBAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1ydW50aW1lIGFuZCBAYmFiZWwvcnVudGltZS5cbiAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVUb1Byb21pc2UoZGlyZWN0TGluZS5nZXRTZXNzaW9uSWQoKSkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkID0+IGAke3ZhbHVlfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGAmY29kZV9jaGFsbGVuZ2U9JHtzZXNzaW9uSWR9YCl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBPQXV0aCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgRGlyZWN0IExpbmUgYWRhcHRlci4nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB0YXJnZXRcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlR3JvdXBBY3Rpdml0aWVzQ29udGV4dCh7IGdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUsIGdyb3VwVGltZXN0YW1wIH0pIHtcbiAgY29uc3QgcnVuTWlkZGxld2FyZSA9IGFwcGx5TWlkZGxld2FyZShcbiAgICAnZ3JvdXAgYWN0aXZpdGllcycsXG4gICAgLi4uc2luZ2xlVG9BcnJheShncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlKSxcbiAgICBjcmVhdGVEZWZhdWx0R3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSh7IGdyb3VwVGltZXN0YW1wIH0pXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBncm91cEFjdGl2aXRpZXM6IHJ1bk1pZGRsZXdhcmUoe30pXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlU3RyaW5nc092ZXJyaWRlcyhsb2NhbGl6ZWRTdHJpbmdzLCBsYW5ndWFnZSwgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzKSB7XG4gIGlmICghb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzKSB7XG4gICAgcmV0dXJuIGxvY2FsaXplZFN0cmluZ3M7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IG1lcmdlZCA9IG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyhsb2NhbGl6ZWRTdHJpbmdzLCBsYW5ndWFnZSk7XG5cbiAgICBpZiAoIWlzT2JqZWN0KG1lcmdlZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyBmdW5jdGlvbiBtdXN0IHJldHVybiBhbiBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIGlmICghaXNPYmplY3Qob3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyBtdXN0IGJlIGVpdGhlciBhIGZ1bmN0aW9uLCBhbiBvYmplY3QsIG9yIGZhbHN5LicpO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4ubG9jYWxpemVkU3RyaW5ncywgLi4ub3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzIH07XG59XG5cbi8vIEl0IHNlZW1zIFwicmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzXCIgZGlkIG5vdCBwaWNrIHVwIGBDb21wb3NlckNvcmUuZGVmYXVsdFByb3BzYC5cbi8vIEFuZCBpdCBmYWxzZWx5IGNvbXBsYWludCBgb3B0aW9uYWw/OiBzdHJpbmdgIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYENvbXBvc2VyQ29yZS5kZWZhdWx0UHJvcHMub3B0aW9uYWwgPSB1bmRlZmluZWRgLCBldmVuIHdlIGFscmVhZHkgc2V0IGl0IGJlbG93LlxuLy8gU2luY2Ugd2Ugc2V0IGJvdGggVHlwZVNjcmlwdCBgUHJvcHNgIGNsYXNzIGFuZCBgQ29tcG9zZXJDb3JlLnByb3BUeXBlc2AsIHRoaXMgY2hlY2sgd2lsbCBiZSBkb25lIHRoZXJlIGFzIHdlbGwuXG4vLyBJZ25vcmluZyBpdCBpbiBUeXBlU2NyaXB0IHZlcnNpb24gc2hvdWxkIGJlIHNhZmUsIGFzIHdlIGhhdmUgYHByb3BUeXBlc2AgdmVyc2lvbiB0byBwcm90ZWN0IHVzLlxuXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbnR5cGUgQ29tcG9zZXJDb3JlUHJvcHMgPSB7XG4gIGFjdGl2aXR5TWlkZGxld2FyZT86IE9uZU9yTWFueTxBY3Rpdml0eU1pZGRsZXdhcmU+O1xuICBhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmU/OiBPbmVPck1hbnk8QWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlPjtcbiAgYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmU/OiBPbmVPck1hbnk8QXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmU+O1xuICBhdHRhY2htZW50TWlkZGxld2FyZT86IE9uZU9yTWFueTxBdHRhY2htZW50TWlkZGxld2FyZT47XG4gIGF2YXRhck1pZGRsZXdhcmU/OiBPbmVPck1hbnk8QXZhdGFyTWlkZGxld2FyZT47XG4gIGNhcmRBY3Rpb25NaWRkbGV3YXJlPzogT25lT3JNYW55PENhcmRBY3Rpb25NaWRkbGV3YXJlPjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGUgfCAoKGNvbnRleHQ6IENvbnRleHRPZjx0eXBlb2YgV2ViQ2hhdEFQSUNvbnRleHQ+KSA9PiBSZWFjdE5vZGUpO1xuICBkaXI/OiBzdHJpbmc7XG4gIGRpcmVjdExpbmU6IERpcmVjdExpbmVKU0JvdENvbm5lY3Rpb247XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkw/OiAoYmxvYjogQmxvYiwgbWF4V2lkdGg6IG51bWJlciwgbWF4SGVpZ2h0OiBudW1iZXIsIHR5cGU6IHN0cmluZywgcXVhbGl0eTogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIGdyYW1tYXJzPzogYW55O1xuICBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlPzogT25lT3JNYW55PEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmU+O1xuICBpbnRlcm5hbEVycm9yQm94Q2xhc3M/OiBSZWFjdC5Db21wb25lbnQgfCBGdW5jdGlvbjtcbiAgbG9jYWxlPzogc3RyaW5nO1xuICBvblRlbGVtZXRyeT86IChldmVudDogVGVsZW1ldHJ5TWVhc3VyZW1lbnRFdmVudCkgPT4gdm9pZDtcbiAgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzPzogTG9jYWxpemVkU3RyaW5ncyB8ICgoc3RyaW5nczogTG9jYWxpemVkU3RyaW5ncywgbGFuZ3VhZ2U6IHN0cmluZykgPT4gTG9jYWxpemVkU3RyaW5ncyk7XG4gIHJlbmRlck1hcmtkb3duPzogKFxuICAgIG1hcmtkb3duOiBzdHJpbmcsXG4gICAgbmV3TGluZU9wdGlvbnM6IHsgbWFya2Rvd25SZXNwZWN0Q1JMRjogYm9vbGVhbiB9LFxuICAgIGxpbmtPcHRpb25zOiB7IGV4dGVybmFsTGlua0FsdDogc3RyaW5nIH1cbiAgKSA9PiBzdHJpbmc7XG4gIHNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZT86IE9uZU9yTWFueTxTY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmU+O1xuICBzZWxlY3RWb2ljZT86ICh2b2ljZXM6ICh0eXBlb2Ygd2luZG93LlNwZWVjaFN5bnRoZXNpc1ZvaWNlKVtdLCBhY3Rpdml0eTogV2ViQ2hhdEFjdGl2aXR5KSA9PiB2b2lkO1xuICBzZW5kVHlwaW5nSW5kaWNhdG9yPzogYm9vbGVhbjtcbiAgc3R5bGVPcHRpb25zPzogU3R5bGVPcHRpb25zO1xuICB0b2FzdE1pZGRsZXdhcmU/OiBPbmVPck1hbnk8VG9hc3RNaWRkbGV3YXJlPjtcbiAgdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZT86IE9uZU9yTWFueTxUeXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlPjtcbiAgdXNlcklEPzogc3RyaW5nO1xuICB1c2VybmFtZT86IHN0cmluZztcblxuICAvKiogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBcImFjdGl2aXR5TWlkZGxld2FyZVwiIGluc3RlYWQuICovXG4gIGFjdGl2aXR5UmVuZGVyZXI/OiBhbnk7IC8vIFRPRE86IFtQNF0gUmVtb3ZlIG9uIG9yIGFmdGVyIDIwMjItMDYtMTUuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwiYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlXCIgaW5zdGVhZC4gKi9cbiAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcj86IGFueTsgLy8gVE9ETzogW1A0XSBSZW1vdmUgb24gb3IgYWZ0ZXIgMjAyMi0wNi0xNS5cbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgXCJhdHRhY2htZW50TWlkZGxld2FyZVwiIGluc3RlYWQuICovXG4gIGF0dGFjaG1lbnRSZW5kZXJlcj86IGFueTsgLy8gVE9ETzogW1A0XSBSZW1vdmUgb24gb3IgYWZ0ZXIgMjAyMi0wNi0xNS5cbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgXCJhdmF0YXJNaWRkbGV3YXJlXCIgaW5zdGVhZC4gKi9cbiAgYXZhdGFyUmVuZGVyZXI/OiBhbnk7IC8vIFRPRE86IFtQNF0gUmVtb3ZlIG9uIG9yIGFmdGVyIDIwMjItMDYtMTUuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwic3R5bGVPcHRpb25zLmdyb3VwVGltZXN0YW1wXCIgaW5zdGVhZC4gKi9cbiAgZ3JvdXBUaW1lc3RhbXA/OiBib29sZWFuIHwgbnVtYmVyOyAvLyBUT0RPOiBbUDRdIFJlbW92ZSBvbiBvciBhZnRlciAyMDIyLTAxLTAxXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwic3R5bGVPcHRpb25zLnNlbmRUaW1lb3V0XCIgaW5zdGVhZC4gKi9cbiAgc2VuZFRpbWVvdXQ/OiBudW1iZXI7IC8vIFRPRE86IFtQNF0gUmVtb3ZlIG9uIG9yIGFmdGVyIDIwMjItMDEtMDEuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwidG9hc3RNaWRkbGV3YXJlXCIgaW5zdGVhZC4gKi9cbiAgdG9hc3RSZW5kZXJlcj86IGFueTsgLy8gVE9ETzogW1A0XSBSZW1vdmUgb24gb3IgYWZ0ZXIgMjAyMi0wNi0xNS5cbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgXCJ0eXBpbmdJbmRpY2F0b3JSZW5kZXJlclwiIGluc3RlYWQuICovXG4gIHR5cGluZ0luZGljYXRvclJlbmRlcmVyPzogYW55OyAvLyBUT0RPOiBbUDRdIFJlbW92ZSBvbiBvciBhZnRlciAyMDIyLTA2LTE1LlxufTtcbi8qIGVzbGludC1lbmFibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG5cbmNvbnN0IENvbXBvc2VyQ29yZTogRkM8Q29tcG9zZXJDb3JlUHJvcHM+ID0gKHtcbiAgYWN0aXZpdHlNaWRkbGV3YXJlLFxuICBhY3Rpdml0eVJlbmRlcmVyLFxuICBhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUsXG4gIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXIsXG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlLFxuICBhdHRhY2htZW50TWlkZGxld2FyZSxcbiAgYXR0YWNobWVudFJlbmRlcmVyLFxuICBhdmF0YXJNaWRkbGV3YXJlLFxuICBhdmF0YXJSZW5kZXJlcixcbiAgY2FyZEFjdGlvbk1pZGRsZXdhcmUsXG4gIGNoaWxkcmVuLFxuICBkaXIsXG4gIGRpcmVjdExpbmUsXG4gIGRpc2FibGVkLFxuICBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTCxcbiAgZ3JhbW1hcnMsXG4gIGdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUsXG4gIGdyb3VwVGltZXN0YW1wLFxuICBpbnRlcm5hbEVycm9yQm94Q2xhc3MsXG4gIGxvY2FsZSxcbiAgb25UZWxlbWV0cnksXG4gIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyxcbiAgcmVuZGVyTWFya2Rvd24sXG4gIHNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZSxcbiAgc2VsZWN0Vm9pY2UsXG4gIHNlbmRUaW1lb3V0LFxuICBzZW5kVHlwaW5nSW5kaWNhdG9yLFxuICBzdHlsZU9wdGlvbnMsXG4gIHRvYXN0TWlkZGxld2FyZSxcbiAgdG9hc3RSZW5kZXJlcixcbiAgdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSxcbiAgdHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIsXG4gIHVzZXJJRCxcbiAgdXNlcm5hbWVcbn0pID0+IHtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCB0ZWxlbWV0cnlEaW1lbnNpb25zUmVmID0gdXNlUmVmKHt9KTtcblxuICBjb25zdCBwYXRjaGVkRGlyID0gdXNlTWVtbygoKSA9PiAoZGlyID09PSAnbHRyJyB8fCBkaXIgPT09ICdydGwnID8gZGlyIDogJ2F1dG8nKSwgW2Rpcl0pO1xuICBjb25zdCBwYXRjaGVkR3JhbW1hcnMgPSB1c2VNZW1vKCgpID0+IGdyYW1tYXJzIHx8IFtdLCBbZ3JhbW1hcnNdKTtcbiAgY29uc3QgcGF0Y2hlZFN0eWxlT3B0aW9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbm9ybWFsaXplU3R5bGVPcHRpb25zKHBhdGNoU3R5bGVPcHRpb25zRnJvbURlcHJlY2F0ZWRQcm9wcyhzdHlsZU9wdGlvbnMsIHsgZ3JvdXBUaW1lc3RhbXAsIHNlbmRUaW1lb3V0IH0pKSxcbiAgICBbZ3JvdXBUaW1lc3RhbXAsIHNlbmRUaW1lb3V0LCBzdHlsZU9wdGlvbnNdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChzZXRMYW5ndWFnZShsb2NhbGUpKTtcbiAgfSwgW2Rpc3BhdGNoLCBsb2NhbGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHR5cGVvZiBzZW5kVGltZW91dCA9PT0gJ251bWJlcicgJiYgZGlzcGF0Y2goc2V0U2VuZFRpbWVvdXQoc2VuZFRpbWVvdXQpKTtcbiAgfSwgW2Rpc3BhdGNoLCBzZW5kVGltZW91dF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0U2VuZFR5cGluZ0luZGljYXRvcighIXNlbmRUeXBpbmdJbmRpY2F0b3IpKTtcbiAgfSwgW2Rpc3BhdGNoLCBzZW5kVHlwaW5nSW5kaWNhdG9yXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChcbiAgICAgIGNyZWF0ZUNvbm5lY3RBY3Rpb24oe1xuICAgICAgICBkaXJlY3RMaW5lLFxuICAgICAgICB1c2VySUQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBAdG9kbyBUT0RPOiBbUDNdIGRpc2Nvbm5lY3QoKSBpcyBhbiBhc3luYyBjYWxsIChwZW5kaW5nIC0+IGZ1bGZpbGxlZCksIHdlIG5lZWQgdG8gd2FpdCwgb3IgY2hhbmdlIGl0IHRvIHJlY29ubmVjdCgpXG4gICAgICAgKi9cbiAgICAgIGRpc3BhdGNoKGRpc2Nvbm5lY3QoKSk7XG4gICAgfTtcbiAgfSwgW2Rpc3BhdGNoLCBkaXJlY3RMaW5lLCB1c2VySUQsIHVzZXJuYW1lXSk7XG5cbiAgY29uc3QgbWFya0FsbEFzQWNrbm93bGVkZ2VkID0gdXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkKCk7XG5cbiAgY29uc3QgY2FyZEFjdGlvbkNvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+IGNyZWF0ZUNhcmRBY3Rpb25Db250ZXh0KHsgY2FyZEFjdGlvbk1pZGRsZXdhcmUsIGRpcmVjdExpbmUsIGRpc3BhdGNoLCBtYXJrQWxsQXNBY2tub3dsZWRnZWQgfSksXG4gICAgW2NhcmRBY3Rpb25NaWRkbGV3YXJlLCBkaXJlY3RMaW5lLCBkaXNwYXRjaCwgbWFya0FsbEFzQWNrbm93bGVkZ2VkXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRTZWxlY3RWb2ljZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0Vm9pY2UgfHwgZGVmYXVsdFNlbGVjdFZvaWNlLmJpbmQobnVsbCwgeyBsYW5ndWFnZTogbG9jYWxlIH0pLFxuICAgIFtsb2NhbGUsIHNlbGVjdFZvaWNlXVxuICApO1xuXG4gIGNvbnN0IGdyb3VwQWN0aXZpdGllc0NvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBjcmVhdGVHcm91cEFjdGl2aXRpZXNDb250ZXh0KHtcbiAgICAgICAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSxcbiAgICAgICAgZ3JvdXBUaW1lc3RhbXA6IHBhdGNoZWRTdHlsZU9wdGlvbnMuZ3JvdXBUaW1lc3RhbXBcbiAgICAgIH0pLFxuICAgIFtncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlLCBwYXRjaGVkU3R5bGVPcHRpb25zLmdyb3VwVGltZXN0YW1wXVxuICApO1xuXG4gIGNvbnN0IGhvaXN0ZWREaXNwYXRjaGVycyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIG1hcE1hcChcbiAgICAgICAgRElTUEFUQ0hFUlMsXG4gICAgICAgIGRpc3BhdGNoZXIgPT5cbiAgICAgICAgICAoLi4uYXJncykgPT5cbiAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXIoLi4uYXJncykpXG4gICAgICApLFxuICAgIFtkaXNwYXRjaF1cbiAgKTtcblxuICBjb25zdCBwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbWVyZ2VTdHJpbmdzT3ZlcnJpZGVzKGdldEFsbExvY2FsaXplZFN0cmluZ3MoKVtub3JtYWxpemVMYW5ndWFnZShsb2NhbGUpXSwgbG9jYWxlLCBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MpLFxuICAgIFtsb2NhbGUsIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5nc11cbiAgKTtcblxuICBjb25zdCBsb2NhbGl6ZWRHbG9iYWxpemUgPSB1c2VNZW1vPFByZWNvbXBpbGVkR2xvYmFsaXplVHlwZT4oKCkgPT4ge1xuICAgIGNvbnN0IHsgR0xPQkFMSVpFLCBHTE9CQUxJWkVfTEFOR1VBR0UgfSA9IHBhdGNoZWRMb2NhbGl6ZWRTdHJpbmdzIHx8IHt9O1xuXG4gICAgcmV0dXJuIEdMT0JBTElaRSB8fCAoR0xPQkFMSVpFX0xBTkdVQUdFICYmIFByZWNvbXBpbGVkR2xvYmFsaXplKEdMT0JBTElaRV9MQU5HVUFHRSkpIHx8IFByZWNvbXBpbGVkR2xvYmFsaXplKCdlbicpO1xuICB9LCBbcGF0Y2hlZExvY2FsaXplZFN0cmluZ3NdKTtcblxuICBjb25zdCB0cmFja0RpbWVuc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xuICAgICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKCdib3RmcmFtZXdvcmstd2ViY2hhdDogVGVsZW1ldHJ5IGRpbWVuc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgZGF0YTtcblxuICAgICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBUZWxlbWV0cnkgZGltZW5zaW9uIGRhdGEgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQuJyk7XG4gICAgICB9XG5cbiAgICAgIHRlbGVtZXRyeURpbWVuc2lvbnNSZWYuY3VycmVudCA9IHVwZGF0ZUluKFxuICAgICAgICB0ZWxlbWV0cnlEaW1lbnNpb25zUmVmLmN1cnJlbnQsXG4gICAgICAgIFtuYW1lXSxcbiAgICAgICAgdHlwZSA9PT0gJ3VuZGVmaW5lZCcgPyBkYXRhIDogKCkgPT4gZGF0YVxuICAgICAgKTtcbiAgICB9LFxuICAgIFt0ZWxlbWV0cnlEaW1lbnNpb25zUmVmXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRBY3Rpdml0eVJlbmRlcmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgYWN0aXZpdHlSZW5kZXJlciAmJlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwiYWN0aXZpdHlSZW5kZXJlclwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbiAyMDIyLTA2LTE1LCBwbGVhc2UgdXNlIFwiYWN0aXZpdHlNaWRkbGV3YXJlXCIgaW5zdGVhZC4nXG4gICAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGl2aXR5UmVuZGVyZXIgfHxcbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAnYWN0aXZpdHknLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfSxcbiAgICAgICAgLi4uc2luZ2xlVG9BcnJheShhY3Rpdml0eU1pZGRsZXdhcmUpLFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgKHsgYWN0aXZpdHkgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFjdGl2aXR5KSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVuZGVyZXIgZm9yIGFjdGl2aXR5IG9mIHR5cGUgXCIke2FjdGl2aXR5LnR5cGV9XCJgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYWN0aXZpdHkgdG8gcmVuZGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgKSh7fSlcbiAgICApO1xuICB9LCBbYWN0aXZpdHlNaWRkbGV3YXJlLCBhY3Rpdml0eVJlbmRlcmVyXSk7XG5cbiAgY29uc3QgcGF0Y2hlZEFjdGl2aXR5U3RhdHVzUmVuZGVyZXIgPSB1c2VNZW1vPFJlbmRlckFjdGl2aXR5U3RhdHVzPigoKSA9PiB7XG4gICAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlciAmJlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwiYWN0aXZpdHlTdGF0dXNSZW5kZXJlclwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbiAyMDIyLTA2LTE1LCBwbGVhc2UgdXNlIFwiYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlXCIgaW5zdGVhZC4nXG4gICAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXIgfHxcbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAnYWN0aXZpdHkgc3RhdHVzJyxcbiAgICAgICAgeyBzdHJpY3Q6IGZhbHNlIH0sXG4gICAgICAgIC4uLnNpbmdsZVRvQXJyYXkoYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT4gKCkgPT4gKCkgPT4gZmFsc2VcbiAgICAgICkoe30pXG4gICAgKTtcbiAgfSwgW2FjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSwgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcl0pO1xuXG4gIGNvbnN0IHBhdGNoZWRBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXIgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlcihcbiAgICAgICAgJ2F0dGFjaG1lbnQgZm9yIHNjcmVlbiByZWFkZXInLFxuICAgICAgICB7IHN0cmljdDogdHJ1ZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAoKSA9PlxuICAgICAgICAgICh7IGF0dGFjaG1lbnQgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBObyByZW5kZXJlciBmb3IgYXR0YWNobWVudCBmb3Igc2NyZWVuIHJlYWRlciBvZiB0eXBlIFwiJHthdHRhY2htZW50LmNvbnRlbnRUeXBlfVwiYCk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAqIEB0b2RvIFRPRE86IFtQNF0gTWlnaHQgYmUgYWJsZSB0byB0aHJvdyB3aXRob3V0IHJldHVybmluZyBhIGZ1bmN0aW9uIC0tIGludmVzdGlnYXRlIGFuZCBwb3NzaWJseSBmaXhcbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXR0YWNobWVudCB0byByZW5kZXInKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgKSh7fSksXG4gICAgW2F0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRBdHRhY2htZW50UmVuZGVyZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoYXR0YWNobWVudFJlbmRlcmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdXZWIgQ2hhdDogXCJhdHRhY2htZW50UmVuZGVyZXJcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgb24gMjAyMi0wNi0xNSwgcGxlYXNlIHVzZSBcImF0dGFjaG1lbnRNaWRkbGV3YXJlXCIgaW5zdGVhZC4nXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYXR0YWNobWVudFJlbmRlcmVyO1xuICAgIH1cblxuICAgIC8vIEF0dGFjaG1lbnQgcmVuZGVyZXJcbiAgICByZXR1cm4gYXBwbHlNaWRkbGV3YXJlRm9yTGVnYWN5UmVuZGVyZXIoXG4gICAgICAnYXR0YWNobWVudCcsXG4gICAgICAuLi5zaW5nbGVUb0FycmF5KGF0dGFjaG1lbnRNaWRkbGV3YXJlKSxcbiAgICAgICgpID0+XG4gICAgICAgICgpID0+XG4gICAgICAgICh7IGF0dGFjaG1lbnQgfSkgPT4ge1xuICAgICAgICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlbmRlcmVyIGZvciBhdHRhY2htZW50IG9mIHR5cGUgXCIke2F0dGFjaG1lbnQuY29udGVudFR5cGV9XCJgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhdHRhY2htZW50IHRvIHJlbmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICkoe30pO1xuICB9LCBbYXR0YWNobWVudE1pZGRsZXdhcmUsIGF0dGFjaG1lbnRSZW5kZXJlcl0pO1xuXG4gIGNvbnN0IHBhdGNoZWRBdmF0YXJSZW5kZXJlciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGF2YXRhclJlbmRlcmVyICYmXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdXZWIgQ2hhdDogXCJhdmF0YXJSZW5kZXJlclwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbiAyMDIyLTA2LTE1LCBwbGVhc2UgdXNlIFwiYXZhdGFyTWlkZGxld2FyZVwiIGluc3RlYWQuJ1xuICAgICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICBhdmF0YXJSZW5kZXJlciB8fFxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICdhdmF0YXInLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfSxcbiAgICAgICAgLi4uc2luZ2xlVG9BcnJheShhdmF0YXJNaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT4gKCkgPT4gKCkgPT4gZmFsc2VcbiAgICAgICkoe30pXG4gICAgKTtcbiAgfSwgW2F2YXRhck1pZGRsZXdhcmUsIGF2YXRhclJlbmRlcmVyXSk7XG5cbiAgY29uc3QgcGF0Y2hlZFRvYXN0UmVuZGVyZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB0b2FzdFJlbmRlcmVyICYmXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdXZWIgQ2hhdDogXCJ0b2FzdFJlbmRlcmVyXCIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIG9uIDIwMjItMDYtMTUsIHBsZWFzZSB1c2UgXCJ0b2FzdE1pZGRsZXdhcmVcIiBpbnN0ZWFkLidcbiAgICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdG9hc3RSZW5kZXJlciB8fFxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICd0b2FzdCcsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KHRvYXN0TWlkZGxld2FyZSksXG4gICAgICAgICgpID0+XG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAoeyBub3RpZmljYXRpb24gfSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlbmRlcmVyIGZvciBub3RpZmljYXRpb24gb2YgdHlwZSBcIiR7bm90aWZpY2F0aW9uLmNvbnRlbnRUeXBlfVwiYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vdGlmaWNhdGlvbiB0byByZW5kZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICApKHt9KVxuICAgICk7XG4gIH0sIFt0b2FzdE1pZGRsZXdhcmUsIHRvYXN0UmVuZGVyZXJdKTtcblxuICBjb25zdCBwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlciAmJlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwidHlwaW5nSW5kaWNhdG9yUmVuZGVyZXJcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgb24gMjAyMi0wNi0xNSwgcGxlYXNlIHVzZSBcInR5cGluZ0luZGljYXRvck1pZGRsZXdhcmVcIiBpbnN0ZWFkLidcbiAgICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIgfHxcbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAndHlwaW5nIGluZGljYXRvcicsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KHR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUpLFxuICAgICAgICAoKSA9PiAoKSA9PiAoKSA9PiBmYWxzZVxuICAgICAgKSh7fSlcbiAgICApO1xuICB9LCBbdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSwgdHlwaW5nSW5kaWNhdG9yUmVuZGVyZXJdKTtcblxuICBjb25zdCBzY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyOiBTY3JvbGxUb0VuZEJ1dHRvbkNvbXBvbmVudEZhY3RvcnkgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlcihcbiAgICAgICAgJ3Njcm9sbCB0byBlbmQgYnV0dG9uJyxcbiAgICAgICAgeyBzdHJpY3Q6IHRydWUgfSxcbiAgICAgICAgLi4uc2luZ2xlVG9BcnJheShzY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmUpLFxuICAgICAgICAoKSA9PiAoKSA9PiAoKSA9PiBmYWxzZVxuICAgICAgKSgpIGFzIGFueSxcbiAgICBbc2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlXVxuICApO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgaGVhdnkgZnVuY3Rpb24sIGFuZCBpdCBpcyBleHBlY3RlZCB0byBiZSBvbmx5IGNhbGxlZCB3aGVuIHRoZXJlIGlzIGEgbmVlZCB0byByZWNyZWF0ZSBidXNpbmVzcyBsb2dpYywgZS5nLlxuICAgKiAtIFVzZXIgSUQgY2hhbmdlZCwgY2F1c2luZyBhbGwgc2VuZCogZnVuY3Rpb25zIHRvIGJlIHVwZGF0ZWRcbiAgICogLSBzZW5kXG4gICAqIEB0b2RvIFRPRE86IFtQM10gV2Ugc2hvdWxkIHRoaW5rIGFib3V0IGlmIHdlIGFsbG93IHRoZSB1c2VyIHRvIGNoYW5nZSBvblNlbmRCb3hWYWx1ZUNoYW5nZWQvc2VuZEJveFZhbHVlLCBlLmcuXG4gICAqIDEuIFR1cm5zIHRleHQgaW50byBVUFBFUkNBU0VcbiAgICogMi4gRmlsdGVyIG91dCBwcm9mYW5pdHlcbiAgICogQHRvZG8gVE9ETzogW1A0XSBSZXZpc2l0IGFsbCBtZW1iZXJzIG9mIGNvbnRleHRcbiAgICogICAgICAgVGhpcyBjb250ZXh0IHNob3VsZCBjb25zaXN0IG9mIG1lbWJlcnMgdGhhdCBhcmUgbm90IGluIHRoZSBSZWR1eCBzdG9yZVxuICAgKiAgICAgICBpLmUuIG1lbWJlcnMgdGhhdCBhcmUgbm90IGludGVyZXN0ZWQgaW4gb3RoZXIgdHlwZXMgb2YgVUlzXG4gICAqL1xuICBjb25zdCBjb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgLi4uY2FyZEFjdGlvbkNvbnRleHQsXG4gICAgICAuLi5ncm91cEFjdGl2aXRpZXNDb250ZXh0LFxuICAgICAgLi4uaG9pc3RlZERpc3BhdGNoZXJzLFxuICAgICAgYWN0aXZpdHlSZW5kZXJlcjogcGF0Y2hlZEFjdGl2aXR5UmVuZGVyZXIsXG4gICAgICBhY3Rpdml0eVN0YXR1c1JlbmRlcmVyOiBwYXRjaGVkQWN0aXZpdHlTdGF0dXNSZW5kZXJlcixcbiAgICAgIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlcjogcGF0Y2hlZEF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlcixcbiAgICAgIGF0dGFjaG1lbnRSZW5kZXJlcjogcGF0Y2hlZEF0dGFjaG1lbnRSZW5kZXJlcixcbiAgICAgIGF2YXRhclJlbmRlcmVyOiBwYXRjaGVkQXZhdGFyUmVuZGVyZXIsXG4gICAgICBkaXI6IHBhdGNoZWREaXIsXG4gICAgICBkaXJlY3RMaW5lLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTCxcbiAgICAgIGdyYW1tYXJzOiBwYXRjaGVkR3JhbW1hcnMsXG4gICAgICBpbnRlcm5hbEVycm9yQm94Q2xhc3MsXG4gICAgICBsYW5ndWFnZTogbG9jYWxlLFxuICAgICAgbG9jYWxpemVkR2xvYmFsaXplU3RhdGU6IFtsb2NhbGl6ZWRHbG9iYWxpemVdLFxuICAgICAgbG9jYWxpemVkU3RyaW5nczogcGF0Y2hlZExvY2FsaXplZFN0cmluZ3MsXG4gICAgICBvblRlbGVtZXRyeSxcbiAgICAgIHJlbmRlck1hcmtkb3duLFxuICAgICAgc2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlcixcbiAgICAgIHNlbGVjdFZvaWNlOiBwYXRjaGVkU2VsZWN0Vm9pY2UsXG4gICAgICBzZW5kVHlwaW5nSW5kaWNhdG9yLFxuICAgICAgc3R5bGVPcHRpb25zOiBwYXRjaGVkU3R5bGVPcHRpb25zLFxuICAgICAgdGVsZW1ldHJ5RGltZW5zaW9uc1JlZixcbiAgICAgIHRvYXN0UmVuZGVyZXI6IHBhdGNoZWRUb2FzdFJlbmRlcmVyLFxuICAgICAgdHJhY2tEaW1lbnNpb24sXG4gICAgICB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlcjogcGF0Y2hlZFR5cGluZ0luZGljYXRvclJlbmRlcmVyLFxuICAgICAgdXNlcklELFxuICAgICAgdXNlcm5hbWVcbiAgICB9KSxcbiAgICBbXG4gICAgICBjYXJkQWN0aW9uQ29udGV4dCxcbiAgICAgIGRpcmVjdExpbmUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMLFxuICAgICAgZ3JvdXBBY3Rpdml0aWVzQ29udGV4dCxcbiAgICAgIGhvaXN0ZWREaXNwYXRjaGVycyxcbiAgICAgIGludGVybmFsRXJyb3JCb3hDbGFzcyxcbiAgICAgIGxvY2FsZSxcbiAgICAgIGxvY2FsaXplZEdsb2JhbGl6ZSxcbiAgICAgIG9uVGVsZW1ldHJ5LFxuICAgICAgcGF0Y2hlZEFjdGl2aXR5UmVuZGVyZXIsXG4gICAgICBwYXRjaGVkQWN0aXZpdHlTdGF0dXNSZW5kZXJlcixcbiAgICAgIHBhdGNoZWRBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXIsXG4gICAgICBwYXRjaGVkQXR0YWNobWVudFJlbmRlcmVyLFxuICAgICAgcGF0Y2hlZEF2YXRhclJlbmRlcmVyLFxuICAgICAgcGF0Y2hlZERpcixcbiAgICAgIHBhdGNoZWRHcmFtbWFycyxcbiAgICAgIHBhdGNoZWRMb2NhbGl6ZWRTdHJpbmdzLFxuICAgICAgcGF0Y2hlZFNlbGVjdFZvaWNlLFxuICAgICAgcGF0Y2hlZFN0eWxlT3B0aW9ucyxcbiAgICAgIHBhdGNoZWRUb2FzdFJlbmRlcmVyLFxuICAgICAgcGF0Y2hlZFR5cGluZ0luZGljYXRvclJlbmRlcmVyLFxuICAgICAgcmVuZGVyTWFya2Rvd24sXG4gICAgICBzY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyLFxuICAgICAgc2VuZFR5cGluZ0luZGljYXRvcixcbiAgICAgIHRlbGVtZXRyeURpbWVuc2lvbnNSZWYsXG4gICAgICB0cmFja0RpbWVuc2lvbixcbiAgICAgIHVzZXJJRCxcbiAgICAgIHVzZXJuYW1lXG4gICAgXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFdlYkNoYXRBUElDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0fT5cbiAgICAgIDxBY3Rpdml0eVNlbmRTdGF0dXNDb21wb3Nlcj5cbiAgICAgICAge3R5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKGNvbnRleHQpIDogY2hpbGRyZW59XG4gICAgICAgIDxBY3Rpdml0eVNlbmRTdGF0dXNUZWxlbWV0cnlDb21wb3NlciAvPlxuICAgICAgPC9BY3Rpdml0eVNlbmRTdGF0dXNDb21wb3Nlcj5cbiAgICAgIHtvblRlbGVtZXRyeSAmJiA8VHJhY2tlciAvPn1cbiAgICA8L1dlYkNoYXRBUElDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuLyoqXG4gKiBAdG9kbyBUT0RPOiBbUDNdIFdlIHNob3VsZCBjb25zaWRlciBtb3Zpbmcgc29tZSBkYXRhIGZyb20gUmVkdXggc3RvcmUgdG8gcHJvcHNcbiAqICAgICAgIEFsdGhvdWdoIHdlIHVzZSBgY29ubmVjdFRvV2ViQ2hhdGAgdG8gaGlkZSB0aGUgZGV0YWlscyBvZiBhY2Nlc3NvciBvZiBSZWR1eCBzdG9yZSxcbiAqICAgICAgIHdlIHNob3VsZCBjbGVhbiB1cCB0aGUgcmVzcG9uc2liaWxpdHkgYmV0d2VlbiBDb250ZXh0IGFuZCBSZWR1eCBzdG9yZVxuICogICAgICAgV2Ugc2hvdWxkIGRlY2lkZSB3aGljaCBkYXRhIGlzIG5lZWRlZCBmb3IgUmVhY3QgYnV0IG5vdCBpbiBvdGhlciBlbnZpcm9ubWVudCBzdWNoIGFzIENMSS9WU0NvZGVcbiAqL1xuQ29tcG9zZXJDb3JlLmRlZmF1bHRQcm9wcyA9IHtcbiAgYWN0aXZpdHlNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGFjdGl2aXR5UmVuZGVyZXI6IHVuZGVmaW5lZCxcbiAgYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXI6IHVuZGVmaW5lZCxcbiAgYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgYXR0YWNobWVudE1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgYXR0YWNobWVudFJlbmRlcmVyOiB1bmRlZmluZWQsXG4gIGF2YXRhck1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgYXZhdGFyUmVuZGVyZXI6IHVuZGVmaW5lZCxcbiAgY2FyZEFjdGlvbk1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgZGlyOiAnYXV0bycsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkw6IHVuZGVmaW5lZCxcbiAgZ3JhbW1hcnM6IFtdLFxuICBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGdyb3VwVGltZXN0YW1wOiB1bmRlZmluZWQsXG4gIGludGVybmFsRXJyb3JCb3hDbGFzczogdW5kZWZpbmVkLFxuICBsb2NhbGU6IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgJ2VuLVVTJyxcbiAgb25UZWxlbWV0cnk6IHVuZGVmaW5lZCxcbiAgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzOiB1bmRlZmluZWQsXG4gIHJlbmRlck1hcmtkb3duOiB1bmRlZmluZWQsXG4gIHNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBzZWxlY3RWb2ljZTogdW5kZWZpbmVkLFxuICBzZW5kVGltZW91dDogdW5kZWZpbmVkLFxuICBzZW5kVHlwaW5nSW5kaWNhdG9yOiBmYWxzZSxcbiAgc3R5bGVPcHRpb25zOiB7fSxcbiAgdG9hc3RNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIHRvYXN0UmVuZGVyZXI6IHVuZGVmaW5lZCxcbiAgdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlcjogdW5kZWZpbmVkLFxuICB1c2VySUQ6ICcnLFxuICB1c2VybmFtZTogJydcbn07XG5cbkNvbXBvc2VyQ29yZS5wcm9wVHlwZXMgPSB7XG4gIGFjdGl2aXR5TWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBhY3Rpdml0eVJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICBhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBhdHRhY2htZW50TWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBhdHRhY2htZW50UmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICBhdmF0YXJNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIGF2YXRhclJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2FyZEFjdGlvbk1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnksXG4gIGRpcjogUHJvcFR5cGVzLm9uZU9mKFsnYXV0bycsICdsdHInLCAncnRsJ10pLFxuICAvLyBQcm9wVHlwZXMuc2hhcGUoeyAuLi4gfSkgZGlkIG5vdCBob25vciBpc1JlcXVpcmVkIGZvciBpdHMgbWVtYmVycy5cbiAgLy8gQHRzLWlnbm9yZVxuICBkaXJlY3RMaW5lOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFjdGl2aXR5JDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHN1YnNjcmliZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgY29ubmVjdGlvblN0YXR1cyQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBzdWJzY3JpYmU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGVuZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZ2V0U2Vzc2lvbklkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwb3N0QWN0aXZpdHk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcmVmZXJlbmNlR3JhbW1hcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRva2VuOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkw6IFByb3BUeXBlcy5mdW5jLFxuICBncmFtbWFyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIGdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgZ3JvdXBUaW1lc3RhbXA6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gIGludGVybmFsRXJyb3JCb3hDbGFzczogUHJvcFR5cGVzLmZ1bmMsIC8vIFRoaXMgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBXZSBkb24ndCBhbGxvdyBjdXN0b21pemF0aW9uIG9mIGVycm9yIGJveC5cbiAgbG9jYWxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvblRlbGVtZXRyeTogUHJvcFR5cGVzLmZ1bmMsXG4gIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5nczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgcmVuZGVyTWFya2Rvd246IFByb3BUeXBlcy5mdW5jLFxuICBzY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgc2VsZWN0Vm9pY2U6IFByb3BUeXBlcy5mdW5jLFxuICBzZW5kVGltZW91dDogUHJvcFR5cGVzLm51bWJlcixcbiAgc2VuZFR5cGluZ0luZGljYXRvcjogUHJvcFR5cGVzLmJvb2wsXG4gIHN0eWxlT3B0aW9uczogUHJvcFR5cGVzLmFueSxcbiAgdG9hc3RNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIHRvYXN0UmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICB0eXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIHR5cGluZ0luZGljYXRvclJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgdXNlcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB1c2VybmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxudHlwZSBDb21wb3NlclByb3BzID0gQ29tcG9zZXJDb3JlUHJvcHMgJiB7XG4gIGludGVybmFsUmVuZGVyRXJyb3JCb3g/OiBhbnk7XG4gIHN0b3JlPzogYW55O1xufTtcblxuLy8gV2Ugd2lsbCBjcmVhdGUgYSBSZWR1eCBzdG9yZSBpZiBpdCB3YXMgbm90IHBhc3NlZCBpblxuY29uc3QgQ29tcG9zZXI6IEZDPENvbXBvc2VyUHJvcHM+ID0gKHsgaW50ZXJuYWxSZW5kZXJFcnJvckJveCwgb25UZWxlbWV0cnksIHN0b3JlLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoKTtcblxuICBjb25zdCBoYW5kbGVFcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBVbmNhdWdodCBleGNlcHRpb24nLCB7IGVycm9yIH0pO1xuXG4gICAgICBvblRlbGVtZXRyeSAmJlxuICAgICAgICBvblRlbGVtZXRyeShjcmVhdGVDdXN0b21FdmVudCgnZXhjZXB0aW9uJywgeyBlcnJvciwgZmF0YWw6IHRydWUgfSkgYXMgVGVsZW1ldHJ5RXhjZXB0aW9uTWVhc3VyZW1lbnRFdmVudCk7XG4gICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgfSxcbiAgICBbb25UZWxlbWV0cnksIHNldEVycm9yXVxuICApO1xuXG4gIGNvbnN0IG1lbW9pemVkU3RvcmUgPSB1c2VNZW1vKCgpID0+IHN0b3JlIHx8IGNyZWF0ZVN0b3JlKCksIFtzdG9yZV0pO1xuXG4gIHJldHVybiBlcnJvciA/IChcbiAgICAhIWludGVybmFsUmVuZGVyRXJyb3JCb3ggJiYgaW50ZXJuYWxSZW5kZXJFcnJvckJveCh7IGVycm9yLCB0eXBlOiAndW5jYXVnaHQgZXhjZXB0aW9uJyB9KVxuICApIDogKFxuICAgIDxFcnJvckJvdW5kYXJ5IG9uRXJyb3I9e2hhbmRsZUVycm9yfT5cbiAgICAgIDxQcm92aWRlciBjb250ZXh0PXtXZWJDaGF0UmVkdXhDb250ZXh0fSBzdG9yZT17bWVtb2l6ZWRTdG9yZX0+XG4gICAgICAgIDxBY3Rpdml0eUtleWVyQ29tcG9zZXI+XG4gICAgICAgICAgPEFjdGl2aXR5QWNrbm93bGVkZ2VtZW50Q29tcG9zZXI+XG4gICAgICAgICAgICA8Q29tcG9zZXJDb3JlIG9uVGVsZW1ldHJ5PXtvblRlbGVtZXRyeX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgIDwvQWN0aXZpdHlBY2tub3dsZWRnZW1lbnRDb21wb3Nlcj5cbiAgICAgICAgPC9BY3Rpdml0eUtleWVyQ29tcG9zZXI+XG4gICAgICA8L1Byb3ZpZGVyPlxuICAgIDwvRXJyb3JCb3VuZGFyeT5cbiAgKTtcbn07XG5cbkNvbXBvc2VyLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW50ZXJuYWxSZW5kZXJFcnJvckJveDogdW5kZWZpbmVkLFxuICBvblRlbGVtZXRyeTogdW5kZWZpbmVkLFxuICBzdG9yZTogdW5kZWZpbmVkXG59O1xuXG5Db21wb3Nlci5wcm9wVHlwZXMgPSB7XG4gIGludGVybmFsUmVuZGVyRXJyb3JCb3g6IFByb3BUeXBlcy5hbnksXG4gIG9uVGVsZW1ldHJ5OiBQcm9wVHlwZXMuZnVuYyxcbiAgc3RvcmU6IFByb3BUeXBlcy5hbnlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvc2VyO1xuXG5leHBvcnQgdHlwZSB7IENvbXBvc2VyUHJvcHMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQTZCQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFNQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFPQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQTtBQUNBLElBQU1BLFdBQVcsR0FBRztFQUNsQkMscUJBQXFCLEVBQXJCQSw4Q0FEa0I7RUFFbEJDLG1CQUFtQixFQUFuQkEsNENBRmtCO0VBR2xCQyxtQkFBbUIsRUFBbkJBLDRDQUhrQjtFQUlsQkMsWUFBWSxFQUFaQSxxQ0FKa0I7RUFLbEJDLFlBQVksRUFBWkEscUNBTGtCO0VBTWxCQyxTQUFTLEVBQVRBLGtDQU5rQjtFQU9sQkMsU0FBUyxFQUFUQSxrQ0FQa0I7RUFRbEJDLFdBQVcsRUFBWEEsb0NBUmtCO0VBU2xCQyxlQUFlLEVBQWZBLHdDQVRrQjtF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
|
|
710
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJESVNQQVRDSEVSUyIsImNsZWFyU3VnZ2VzdGVkQWN0aW9ucyIsImRpc21pc3NOb3RpZmljYXRpb24iLCJlbWl0VHlwaW5nSW5kaWNhdG9yIiwibWFya0FjdGl2aXR5IiwicG9zdEFjdGl2aXR5Iiwic2VuZEV2ZW50Iiwic2VuZEZpbGVzIiwic2VuZE1lc3NhZ2UiLCJzZW5kTWVzc2FnZUJhY2siLCJzZW5kUG9zdEJhY2siLCJzZXREaWN0YXRlSW50ZXJpbXMiLCJzZXREaWN0YXRlU3RhdGUiLCJzZXROb3RpZmljYXRpb24iLCJzZXRTZW5kQm94Iiwic2V0U2VuZFRpbWVvdXQiLCJzdGFydERpY3RhdGUiLCJzdGFydFNwZWFraW5nQWN0aXZpdHkiLCJzdG9wRGljdGF0ZSIsInN0b3BTcGVha2luZ0FjdGl2aXR5Iiwic3VibWl0U2VuZEJveCIsImNyZWF0ZUNhcmRBY3Rpb25Db250ZXh0IiwiY2FyZEFjdGlvbk1pZGRsZXdhcmUiLCJkaXJlY3RMaW5lIiwiZGlzcGF0Y2giLCJtYXJrQWxsQXNBY2tub3dsZWRnZWQiLCJwb255ZmlsbCIsInJ1bk1pZGRsZXdhcmUiLCJhcHBseU1pZGRsZXdhcmUiLCJzaW5nbGVUb0FycmF5IiwiY3JlYXRlRGVmYXVsdENhcmRBY3Rpb25NaWRkbGV3YXJlIiwib25DYXJkQWN0aW9uIiwiY2FyZEFjdGlvbiIsInRhcmdldCIsImdldFNpZ25JblVybCIsInR5cGUiLCJ2YWx1ZSIsImdldFNlc3Npb25JZCIsIm9ic2VydmFibGVUb1Byb21pc2UiLCJ0aGVuIiwic2Vzc2lvbklkIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY29uc29sZSIsIndhcm4iLCJjcmVhdGVHcm91cEFjdGl2aXRpZXNDb250ZXh0IiwiZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSIsImdyb3VwVGltZXN0YW1wIiwiY3JlYXRlRGVmYXVsdEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUiLCJncm91cEFjdGl2aXRpZXMiLCJtZXJnZVN0cmluZ3NPdmVycmlkZXMiLCJsb2NhbGl6ZWRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MiLCJtZXJnZWQiLCJpc09iamVjdCIsIkVycm9yIiwiQ29tcG9zZXJDb3JlIiwiYWN0aXZpdHlNaWRkbGV3YXJlIiwiYWN0aXZpdHlSZW5kZXJlciIsImFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSIsImFjdGl2aXR5U3RhdHVzUmVuZGVyZXIiLCJhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSIsImF0dGFjaG1lbnRNaWRkbGV3YXJlIiwiYXR0YWNobWVudFJlbmRlcmVyIiwiYXZhdGFyTWlkZGxld2FyZSIsImF2YXRhclJlbmRlcmVyIiwiY2hpbGRyZW4iLCJkaXIiLCJkaXNhYmxlZCIsImRvd25zY2FsZUltYWdlVG9EYXRhVVJMIiwiZ3JhbW1hcnMiLCJpbnRlcm5hbEVycm9yQm94Q2xhc3MiLCJsb2NhbGUiLCJvblRlbGVtZXRyeSIsInJlbmRlck1hcmtkb3duIiwic2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlIiwic2VsZWN0Vm9pY2UiLCJzZW5kVGltZW91dCIsInNlbmRUeXBpbmdJbmRpY2F0b3IiLCJzdHlsZU9wdGlvbnMiLCJ0b2FzdE1pZGRsZXdhcmUiLCJ0b2FzdFJlbmRlcmVyIiwidHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSIsInR5cGluZ0luZGljYXRvclJlbmRlcmVyIiwidXNlcklEIiwidXNlcm5hbWUiLCJ1c2VQb255ZmlsbCIsInVzZURpc3BhdGNoIiwidGVsZW1ldHJ5RGltZW5zaW9uc1JlZiIsInVzZVJlZiIsInBhdGNoZWREaXIiLCJ1c2VNZW1vIiwicGF0Y2hlZEdyYW1tYXJzIiwicGF0Y2hlZFN0eWxlT3B0aW9ucyIsIm5vcm1hbGl6ZVN0eWxlT3B0aW9ucyIsInBhdGNoU3R5bGVPcHRpb25zRnJvbURlcHJlY2F0ZWRQcm9wcyIsInVzZUVmZmVjdCIsInNldExhbmd1YWdlIiwic2V0U2VuZFR5cGluZ0luZGljYXRvciIsImNyZWF0ZUNvbm5lY3RBY3Rpb24iLCJkaXNjb25uZWN0IiwidXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkIiwiY2FyZEFjdGlvbkNvbnRleHQiLCJwYXRjaGVkU2VsZWN0Vm9pY2UiLCJkZWZhdWx0U2VsZWN0Vm9pY2UiLCJiaW5kIiwiZ3JvdXBBY3Rpdml0aWVzQ29udGV4dCIsImhvaXN0ZWREaXNwYXRjaGVycyIsIm1hcE1hcCIsImRpc3BhdGNoZXIiLCJwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyIsImdldEFsbExvY2FsaXplZFN0cmluZ3MiLCJub3JtYWxpemVMYW5ndWFnZSIsImxvY2FsaXplZEdsb2JhbGl6ZSIsIkdMT0JBTElaRSIsIkdMT0JBTElaRV9MQU5HVUFHRSIsIlByZWNvbXBpbGVkR2xvYmFsaXplIiwidHJhY2tEaW1lbnNpb24iLCJ1c2VDYWxsYmFjayIsIm5hbWUiLCJkYXRhIiwiY3VycmVudCIsInVwZGF0ZUluIiwicGF0Y2hlZEFjdGl2aXR5UmVuZGVyZXIiLCJhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlciIsInN0cmljdCIsImFjdGl2aXR5IiwicGF0Y2hlZEFjdGl2aXR5U3RhdHVzUmVuZGVyZXIiLCJwYXRjaGVkQXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyIiwiYXR0YWNobWVudCIsImNvbnRlbnRUeXBlIiwicGF0Y2hlZEF0dGFjaG1lbnRSZW5kZXJlciIsImFwcGx5TWlkZGxld2FyZUZvckxlZ2FjeVJlbmRlcmVyIiwicGF0Y2hlZEF2YXRhclJlbmRlcmVyIiwicGF0Y2hlZFRvYXN0UmVuZGVyZXIiLCJub3RpZmljYXRpb24iLCJwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIiLCJzY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyIiwiY29udGV4dCIsImF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlciIsImxvY2FsaXplZEdsb2JhbGl6ZVN0YXRlIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwid2luZG93IiwibmF2aWdhdG9yIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwib25lT2ZUeXBlIiwiYXJyYXlPZiIsImZ1bmMiLCJhbnkiLCJvbmVPZiIsInNoYXBlIiwiYWN0aXZpdHkkIiwic3Vic2NyaWJlIiwiaXNSZXF1aXJlZCIsImNvbm5lY3Rpb25TdGF0dXMkIiwiZW5kIiwicmVmZXJlbmNlR3JhbW1hcklEIiwic3RyaW5nIiwidG9rZW4iLCJib29sIiwibnVtYmVyIiwiQ29tcG9zZXJXaXRoU3RvcmUiLCJzdG9yZSIsInByb3BzIiwibWVtb2l6ZWRTdG9yZSIsIm5leHRTdG9yZSIsImNyZWF0ZVN0b3JlV2l0aE9wdGlvbnMiLCJzdG9yZVBvbnlmaWxsIiwiZ2V0U3RhdGUiLCJpbnRlcm5hbCIsImtleXMiLCJTZXQiLCJPYmplY3QiLCJkZWxldGUiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvdG90eXBlIiwiZm9yRWFjaCIsImtleSIsIkFycmF5IiwiZnJvbSIsInNvbWUiLCJXZWJDaGF0UmVkdXhDb250ZXh0IiwiQ29tcG9zZXIiLCJpbnRlcm5hbFJlbmRlckVycm9yQm94IiwidXNlU3RhdGUiLCJlcnJvciIsInNldEVycm9yIiwiaGFuZGxlRXJyb3IiLCJjcmVhdGVDdXN0b21FdmVudCIsImZhdGFsIl0sInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvQ29tcG9zZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVwZGF0ZUluIGZyb20gJ3NpbXBsZS11cGRhdGUtaW4nO1xuaW1wb3J0IHtcbiAgY2xlYXJTdWdnZXN0ZWRBY3Rpb25zLFxuICBjb25uZWN0IGFzIGNyZWF0ZUNvbm5lY3RBY3Rpb24sXG4gIGNyZWF0ZVN0b3JlV2l0aE9wdGlvbnMsXG4gIGRpc2Nvbm5lY3QsXG4gIGRpc21pc3NOb3RpZmljYXRpb24sXG4gIGVtaXRUeXBpbmdJbmRpY2F0b3IsXG4gIG1hcmtBY3Rpdml0eSxcbiAgcG9zdEFjdGl2aXR5LFxuICBzZW5kRXZlbnQsXG4gIHNlbmRGaWxlcyxcbiAgc2VuZE1lc3NhZ2UsXG4gIHNlbmRNZXNzYWdlQmFjayxcbiAgc2VuZFBvc3RCYWNrLFxuICBzZXREaWN0YXRlSW50ZXJpbXMsXG4gIHNldERpY3RhdGVTdGF0ZSxcbiAgc2V0TGFuZ3VhZ2UsXG4gIHNldE5vdGlmaWNhdGlvbixcbiAgc2V0U2VuZEJveCxcbiAgc2V0U2VuZFRpbWVvdXQsXG4gIHNldFNlbmRUeXBpbmdJbmRpY2F0b3IsXG4gIHNpbmdsZVRvQXJyYXksXG4gIHN0YXJ0RGljdGF0ZSxcbiAgc3RhcnRTcGVha2luZ0FjdGl2aXR5LFxuICBzdG9wRGljdGF0ZSxcbiAgc3RvcFNwZWFraW5nQWN0aXZpdHksXG4gIHN1Ym1pdFNlbmRCb3hcbn0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtY29yZSc7XG5cbmltcG9ydCB7IGRlZmF1bHQgYXMgV2ViQ2hhdEFQSUNvbnRleHQgfSBmcm9tICcuL2ludGVybmFsL1dlYkNoYXRBUElDb250ZXh0JztcbmltcG9ydCBBY3Rpdml0eUFja25vd2xlZGdlbWVudENvbXBvc2VyIGZyb20gJy4uL3Byb3ZpZGVycy9BY3Rpdml0eUFja25vd2xlZGdlbWVudC9BY3Rpdml0eUFja25vd2xlZGdlbWVudENvbXBvc2VyJztcbmltcG9ydCBBY3Rpdml0eUtleWVyQ29tcG9zZXIgZnJvbSAnLi4vcHJvdmlkZXJzL0FjdGl2aXR5S2V5ZXIvQWN0aXZpdHlLZXllckNvbXBvc2VyJztcbmltcG9ydCBBY3Rpdml0eU1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvQWN0aXZpdHlNaWRkbGV3YXJlJztcbmltcG9ydCBBY3Rpdml0eVNlbmRTdGF0dXNDb21wb3NlciBmcm9tICcuLi9wcm92aWRlcnMvQWN0aXZpdHlTZW5kU3RhdHVzL0FjdGl2aXR5U2VuZFN0YXR1c0NvbXBvc2VyJztcbmltcG9ydCBBY3Rpdml0eVNlbmRTdGF0dXNUZWxlbWV0cnlDb21wb3NlciBmcm9tICcuLi9wcm92aWRlcnMvQWN0aXZpdHlTZW5kU3RhdHVzVGVsZW1ldHJ5L0FjdGl2aXR5U2VuZFN0YXR1c1RlbGVtZXRyeUNvbXBvc2VyJztcbmltcG9ydCBBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSBmcm9tICcuLi90eXBlcy9BdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSc7XG5pbXBvcnQgQXR0YWNobWVudE1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvQXR0YWNobWVudE1pZGRsZXdhcmUnO1xuaW1wb3J0IEF2YXRhck1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvQXZhdGFyTWlkZGxld2FyZSc7XG5pbXBvcnQgQ2FyZEFjdGlvbk1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvQ2FyZEFjdGlvbk1pZGRsZXdhcmUnO1xuaW1wb3J0IGNyZWF0ZUN1c3RvbUV2ZW50IGZyb20gJy4uL3V0aWxzL2NyZWF0ZUN1c3RvbUV2ZW50JztcbmltcG9ydCBjcmVhdGVEZWZhdWx0Q2FyZEFjdGlvbk1pZGRsZXdhcmUgZnJvbSAnLi9taWRkbGV3YXJlL2NyZWF0ZURlZmF1bHRDYXJkQWN0aW9uTWlkZGxld2FyZSc7XG5pbXBvcnQgY3JlYXRlRGVmYXVsdEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUgZnJvbSAnLi9taWRkbGV3YXJlL2NyZWF0ZURlZmF1bHRHcm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlJztcbmltcG9ydCBkZWZhdWx0U2VsZWN0Vm9pY2UgZnJvbSAnLi9pbnRlcm5hbC9kZWZhdWx0U2VsZWN0Vm9pY2UnO1xuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAnLi91dGlscy9FcnJvckJvdW5kYXJ5JztcbmltcG9ydCBnZXRBbGxMb2NhbGl6ZWRTdHJpbmdzIGZyb20gJy4uL2xvY2FsaXphdGlvbi9nZXRBbGxMb2NhbGl6ZWRTdHJpbmdzJztcbmltcG9ydCBHcm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlIGZyb20gJy4uL3R5cGVzL0dyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4uL3V0aWxzL2lzT2JqZWN0JztcbmltcG9ydCBMb2NhbGl6ZWRTdHJpbmdzIGZyb20gJy4uL3R5cGVzL0xvY2FsaXplZFN0cmluZ3MnO1xuaW1wb3J0IG1hcE1hcCBmcm9tICcuLi91dGlscy9tYXBNYXAnO1xuaW1wb3J0IG5vcm1hbGl6ZUxhbmd1YWdlIGZyb20gJy4uL3V0aWxzL25vcm1hbGl6ZUxhbmd1YWdlJztcbmltcG9ydCBub3JtYWxpemVTdHlsZU9wdGlvbnMgZnJvbSAnLi4vbm9ybWFsaXplU3R5bGVPcHRpb25zJztcbmltcG9ydCBvYnNlcnZhYmxlVG9Qcm9taXNlIGZyb20gJy4vdXRpbHMvb2JzZXJ2YWJsZVRvUHJvbWlzZSc7XG5pbXBvcnQgcGF0Y2hTdHlsZU9wdGlvbnNGcm9tRGVwcmVjYXRlZFByb3BzIGZyb20gJy4uL3BhdGNoU3R5bGVPcHRpb25zRnJvbURlcHJlY2F0ZWRQcm9wcyc7XG5pbXBvcnQgUG9ueWZpbGxDb21wb3NlciBmcm9tICcuLi9wcm92aWRlcnMvUG9ueWZpbGwvUG9ueWZpbGxDb21wb3Nlcic7XG5pbXBvcnQgUHJlY29tcGlsZWRHbG9iYWxpemVUeXBlIGZyb20gJy4uL3R5cGVzL1ByZWNvbXBpbGVkR2xvYmFsaXplJztcbmltcG9ydCBTY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmUsIHsgU2Nyb2xsVG9FbmRCdXR0b25Db21wb25lbnRGYWN0b3J5IH0gZnJvbSAnLi4vdHlwZXMvU2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlJztcbmltcG9ydCBTdHlsZU9wdGlvbnMgZnJvbSAnLi4vU3R5bGVPcHRpb25zJztcbmltcG9ydCBUZWxlbWV0cnlNZWFzdXJlbWVudEV2ZW50LCB7IFRlbGVtZXRyeUV4Y2VwdGlvbk1lYXN1cmVtZW50RXZlbnQgfSBmcm9tICcuLi90eXBlcy9UZWxlbWV0cnlNZWFzdXJlbWVudEV2ZW50JztcbmltcG9ydCBUb2FzdE1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvVG9hc3RNaWRkbGV3YXJlJztcbmltcG9ydCBUcmFja2VyIGZyb20gJy4vaW50ZXJuYWwvVHJhY2tlcic7XG5pbXBvcnQgVHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSBmcm9tICcuLi90eXBlcy9UeXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlJztcbmltcG9ydCB1c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQgZnJvbSAnLi91c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQnO1xuaW1wb3J0IHVzZVBvbnlmaWxsIGZyb20gJy4uL2hvb2tzL3VzZVBvbnlmaWxsJztcbmltcG9ydCBXZWJDaGF0UmVkdXhDb250ZXh0LCB7IHVzZURpc3BhdGNoIH0gZnJvbSAnLi9pbnRlcm5hbC9XZWJDaGF0UmVkdXhDb250ZXh0JztcblxuaW1wb3J0IGFwcGx5TWlkZGxld2FyZSwge1xuICBmb3JMZWdhY3lSZW5kZXJlciBhcyBhcHBseU1pZGRsZXdhcmVGb3JMZWdhY3lSZW5kZXJlcixcbiAgZm9yUmVuZGVyZXIgYXMgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXJcbn0gZnJvbSAnLi9taWRkbGV3YXJlL2FwcGx5TWlkZGxld2FyZSc7XG5cbi8vIFByZWNvbXBpbGVHbG9iYWxpemUgaXMgYSBnZW5lcmF0ZWQgZmlsZSBhbmQgaXMgbm90IEVTIG1vZHVsZS4gVHlwZVNjcmlwdCBkb24ndCB3b3JrIHdpdGggVU1ELlxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IFByZWNvbXBpbGVkR2xvYmFsaXplIGZyb20gJy4uL2V4dGVybmFsL1ByZWNvbXBpbGVkR2xvYmFsaXplJztcblxuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUsIFJlbmRlckFjdGl2aXR5U3RhdHVzIH0gZnJvbSAnLi4vdHlwZXMvQWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dE9mIH0gZnJvbSAnLi4vdHlwZXMvaW50ZXJuYWwvQ29udGV4dE9mJztcbmltcG9ydCB0eXBlIHtcbiAgRGlyZWN0TGluZUpTQm90Q29ubmVjdGlvbixcbiAgT25lT3JNYW55LFxuICBHbG9iYWxTY29wZVBvbnlmaWxsLFxuICBXZWJDaGF0QWN0aXZpdHlcbn0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtY29yZSc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcblxuLy8gTGlzdCBvZiBSZWR1eCBhY3Rpb25zIGZhY3Rvcnkgd2UgYXJlIGhvaXN0aW5nIGFzIFdlYiBDaGF0IGZ1bmN0aW9uc1xuY29uc3QgRElTUEFUQ0hFUlMgPSB7XG4gIGNsZWFyU3VnZ2VzdGVkQWN0aW9ucyxcbiAgZGlzbWlzc05vdGlmaWNhdGlvbixcbiAgZW1pdFR5cGluZ0luZGljYXRvcixcbiAgbWFya0FjdGl2aXR5LFxuICBwb3N0QWN0aXZpdHksXG4gIHNlbmRFdmVudCxcbiAgc2VuZEZpbGVzLFxuICBzZW5kTWVzc2FnZSxcbiAgc2VuZE1lc3NhZ2VCYWNrLFxuICBzZW5kUG9zdEJhY2ssXG4gIHNldERpY3RhdGVJbnRlcmltcyxcbiAgc2V0RGljdGF0ZVN0YXRlLFxuICBzZXROb3RpZmljYXRpb24sXG4gIHNldFNlbmRCb3gsXG4gIHNldFNlbmRUaW1lb3V0LFxuICBzdGFydERpY3RhdGUsXG4gIHN0YXJ0U3BlYWtpbmdBY3Rpdml0eSxcbiAgc3RvcERpY3RhdGUsXG4gIHN0b3BTcGVha2luZ0FjdGl2aXR5LFxuICBzdWJtaXRTZW5kQm94XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDYXJkQWN0aW9uQ29udGV4dCh7IGNhcmRBY3Rpb25NaWRkbGV3YXJlLCBkaXJlY3RMaW5lLCBkaXNwYXRjaCwgbWFya0FsbEFzQWNrbm93bGVkZ2VkLCBwb255ZmlsbCB9KSB7XG4gIGNvbnN0IHJ1bk1pZGRsZXdhcmUgPSBhcHBseU1pZGRsZXdhcmUoXG4gICAgJ2NhcmQgYWN0aW9uJyxcbiAgICAuLi5zaW5nbGVUb0FycmF5KGNhcmRBY3Rpb25NaWRkbGV3YXJlKSxcbiAgICBjcmVhdGVEZWZhdWx0Q2FyZEFjdGlvbk1pZGRsZXdhcmUoKVxuICApKHsgZGlzcGF0Y2ggfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBvbkNhcmRBY3Rpb246IChjYXJkQWN0aW9uLCB7IHRhcmdldCB9OiB7IHRhcmdldD86IGFueSB9ID0ge30pID0+IHtcbiAgICAgIG1hcmtBbGxBc0Fja25vd2xlZGdlZCgpO1xuXG4gICAgICByZXR1cm4gcnVuTWlkZGxld2FyZSh7XG4gICAgICAgIGNhcmRBY3Rpb24sXG4gICAgICAgIGdldFNpZ25JblVybDpcbiAgICAgICAgICBjYXJkQWN0aW9uLnR5cGUgPT09ICdzaWduaW4nXG4gICAgICAgICAgICA/ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBjYXJkQWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdExpbmUuZ2V0U2Vzc2lvbklkKSB7XG4gICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAqIEB0b2RvIFRPRE86IFtQM10gV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIG9uZSB0byBhc3luYy9hd2FpdC5cbiAgICAgICAgICAgICAgICAgICAqICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHRoaXMgcHJvamVjdCB0byB1c2UgYXN5bmMuXG4gICAgICAgICAgICAgICAgICAgKiAgICAgICBUaHVzLCB3ZSBuZWVkIHRvIGFkZCBAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1ydW50aW1lIGFuZCBAYmFiZWwvcnVudGltZS5cbiAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVUb1Byb21pc2UoZGlyZWN0TGluZS5nZXRTZXNzaW9uSWQoKSwgcG9ueWZpbGwpLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZCA9PiBgJHt2YWx1ZX0ke2VuY29kZVVSSUNvbXBvbmVudChgJmNvZGVfY2hhbGxlbmdlPSR7c2Vzc2lvbklkfWApfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdib3RmcmFtZXdvcmstd2ViY2hhdDogT0F1dGggaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIERpcmVjdCBMaW5lIGFkYXB0ZXIuJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgdGFyZ2V0XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdyb3VwQWN0aXZpdGllc0NvbnRleHQoeyBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlLCBncm91cFRpbWVzdGFtcCwgcG9ueWZpbGwgfSkge1xuICBjb25zdCBydW5NaWRkbGV3YXJlID0gYXBwbHlNaWRkbGV3YXJlKFxuICAgICdncm91cCBhY3Rpdml0aWVzJyxcbiAgICAuLi5zaW5nbGVUb0FycmF5KGdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUpLFxuICAgIGNyZWF0ZURlZmF1bHRHcm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlKHsgZ3JvdXBUaW1lc3RhbXAsIHBvbnlmaWxsIH0pXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBncm91cEFjdGl2aXRpZXM6IHJ1bk1pZGRsZXdhcmUoe30pXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlU3RyaW5nc092ZXJyaWRlcyhsb2NhbGl6ZWRTdHJpbmdzLCBsYW5ndWFnZSwgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzKSB7XG4gIGlmICghb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzKSB7XG4gICAgcmV0dXJuIGxvY2FsaXplZFN0cmluZ3M7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IG1lcmdlZCA9IG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyhsb2NhbGl6ZWRTdHJpbmdzLCBsYW5ndWFnZSk7XG5cbiAgICBpZiAoIWlzT2JqZWN0KG1lcmdlZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyBmdW5jdGlvbiBtdXN0IHJldHVybiBhbiBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIGlmICghaXNPYmplY3Qob3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyBtdXN0IGJlIGVpdGhlciBhIGZ1bmN0aW9uLCBhbiBvYmplY3QsIG9yIGZhbHN5LicpO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4ubG9jYWxpemVkU3RyaW5ncywgLi4ub3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzIH07XG59XG5cbi8vIEl0IHNlZW1zIFwicmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzXCIgZGlkIG5vdCBwaWNrIHVwIGBDb21wb3NlckNvcmUuZGVmYXVsdFByb3BzYC5cbi8vIEFuZCBpdCBmYWxzZWx5IGNvbXBsYWludCBgb3B0aW9uYWw/OiBzdHJpbmdgIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYENvbXBvc2VyQ29yZS5kZWZhdWx0UHJvcHMub3B0aW9uYWwgPSB1bmRlZmluZWRgLCBldmVuIHdlIGFscmVhZHkgc2V0IGl0IGJlbG93LlxuLy8gU2luY2Ugd2Ugc2V0IGJvdGggVHlwZVNjcmlwdCBgUHJvcHNgIGNsYXNzIGFuZCBgQ29tcG9zZXJDb3JlLnByb3BUeXBlc2AsIHRoaXMgY2hlY2sgd2lsbCBiZSBkb25lIHRoZXJlIGFzIHdlbGwuXG4vLyBJZ25vcmluZyBpdCBpbiBUeXBlU2NyaXB0IHZlcnNpb24gc2hvdWxkIGJlIHNhZmUsIGFzIHdlIGhhdmUgYHByb3BUeXBlc2AgdmVyc2lvbiB0byBwcm90ZWN0IHVzLlxuXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbnR5cGUgQ29tcG9zZXJDb3JlUHJvcHMgPSB7XG4gIGFjdGl2aXR5TWlkZGxld2FyZT86IE9uZU9yTWFueTxBY3Rpdml0eU1pZGRsZXdhcmU+O1xuICBhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmU/OiBPbmVPck1hbnk8QWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlPjtcbiAgYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmU/OiBPbmVPck1hbnk8QXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmU+O1xuICBhdHRhY2htZW50TWlkZGxld2FyZT86IE9uZU9yTWFueTxBdHRhY2htZW50TWlkZGxld2FyZT47XG4gIGF2YXRhck1pZGRsZXdhcmU/OiBPbmVPck1hbnk8QXZhdGFyTWlkZGxld2FyZT47XG4gIGNhcmRBY3Rpb25NaWRkbGV3YXJlPzogT25lT3JNYW55PENhcmRBY3Rpb25NaWRkbGV3YXJlPjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGUgfCAoKGNvbnRleHQ6IENvbnRleHRPZjx0eXBlb2YgV2ViQ2hhdEFQSUNvbnRleHQ+KSA9PiBSZWFjdE5vZGUpO1xuICBkaXI/OiBzdHJpbmc7XG4gIGRpcmVjdExpbmU6IERpcmVjdExpbmVKU0JvdENvbm5lY3Rpb247XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkw/OiAoYmxvYjogQmxvYiwgbWF4V2lkdGg6IG51bWJlciwgbWF4SGVpZ2h0OiBudW1iZXIsIHR5cGU6IHN0cmluZywgcXVhbGl0eTogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIGdyYW1tYXJzPzogYW55O1xuICBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlPzogT25lT3JNYW55PEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmU+O1xuICBpbnRlcm5hbEVycm9yQm94Q2xhc3M/OiBSZWFjdC5Db21wb25lbnQgfCBGdW5jdGlvbjtcbiAgbG9jYWxlPzogc3RyaW5nO1xuICBvblRlbGVtZXRyeT86IChldmVudDogVGVsZW1ldHJ5TWVhc3VyZW1lbnRFdmVudCkgPT4gdm9pZDtcbiAgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzPzogTG9jYWxpemVkU3RyaW5ncyB8ICgoc3RyaW5nczogTG9jYWxpemVkU3RyaW5ncywgbGFuZ3VhZ2U6IHN0cmluZykgPT4gTG9jYWxpemVkU3RyaW5ncyk7XG4gIHJlbmRlck1hcmtkb3duPzogKFxuICAgIG1hcmtkb3duOiBzdHJpbmcsXG4gICAgbmV3TGluZU9wdGlvbnM6IHsgbWFya2Rvd25SZXNwZWN0Q1JMRjogYm9vbGVhbiB9LFxuICAgIGxpbmtPcHRpb25zOiB7IGV4dGVybmFsTGlua0FsdDogc3RyaW5nIH1cbiAgKSA9PiBzdHJpbmc7XG4gIHNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZT86IE9uZU9yTWFueTxTY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmU+O1xuICBzZWxlY3RWb2ljZT86ICh2b2ljZXM6ICh0eXBlb2Ygd2luZG93LlNwZWVjaFN5bnRoZXNpc1ZvaWNlKVtdLCBhY3Rpdml0eTogV2ViQ2hhdEFjdGl2aXR5KSA9PiB2b2lkO1xuICBzZW5kVHlwaW5nSW5kaWNhdG9yPzogYm9vbGVhbjtcbiAgc3R5bGVPcHRpb25zPzogU3R5bGVPcHRpb25zO1xuICB0b2FzdE1pZGRsZXdhcmU/OiBPbmVPck1hbnk8VG9hc3RNaWRkbGV3YXJlPjtcbiAgdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZT86IE9uZU9yTWFueTxUeXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlPjtcbiAgdXNlcklEPzogc3RyaW5nO1xuICB1c2VybmFtZT86IHN0cmluZztcblxuICAvKiogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBcImFjdGl2aXR5TWlkZGxld2FyZVwiIGluc3RlYWQuICovXG4gIGFjdGl2aXR5UmVuZGVyZXI/OiBhbnk7IC8vIFRPRE86IFtQNF0gUmVtb3ZlIG9uIG9yIGFmdGVyIDIwMjItMDYtMTUuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwiYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlXCIgaW5zdGVhZC4gKi9cbiAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcj86IGFueTsgLy8gVE9ETzogW1A0XSBSZW1vdmUgb24gb3IgYWZ0ZXIgMjAyMi0wNi0xNS5cbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgXCJhdHRhY2htZW50TWlkZGxld2FyZVwiIGluc3RlYWQuICovXG4gIGF0dGFjaG1lbnRSZW5kZXJlcj86IGFueTsgLy8gVE9ETzogW1A0XSBSZW1vdmUgb24gb3IgYWZ0ZXIgMjAyMi0wNi0xNS5cbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgXCJhdmF0YXJNaWRkbGV3YXJlXCIgaW5zdGVhZC4gKi9cbiAgYXZhdGFyUmVuZGVyZXI/OiBhbnk7IC8vIFRPRE86IFtQNF0gUmVtb3ZlIG9uIG9yIGFmdGVyIDIwMjItMDYtMTUuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwic3R5bGVPcHRpb25zLmdyb3VwVGltZXN0YW1wXCIgaW5zdGVhZC4gKi9cbiAgZ3JvdXBUaW1lc3RhbXA/OiBib29sZWFuIHwgbnVtYmVyOyAvLyBUT0RPOiBbUDRdIFJlbW92ZSBvbiBvciBhZnRlciAyMDIyLTAxLTAxXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwic3R5bGVPcHRpb25zLnNlbmRUaW1lb3V0XCIgaW5zdGVhZC4gKi9cbiAgc2VuZFRpbWVvdXQ/OiBudW1iZXI7IC8vIFRPRE86IFtQNF0gUmVtb3ZlIG9uIG9yIGFmdGVyIDIwMjItMDEtMDEuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwidG9hc3RNaWRkbGV3YXJlXCIgaW5zdGVhZC4gKi9cbiAgdG9hc3RSZW5kZXJlcj86IGFueTsgLy8gVE9ETzogW1A0XSBSZW1vdmUgb24gb3IgYWZ0ZXIgMjAyMi0wNi0xNS5cbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgXCJ0eXBpbmdJbmRpY2F0b3JSZW5kZXJlclwiIGluc3RlYWQuICovXG4gIHR5cGluZ0luZGljYXRvclJlbmRlcmVyPzogYW55OyAvLyBUT0RPOiBbUDRdIFJlbW92ZSBvbiBvciBhZnRlciAyMDIyLTA2LTE1LlxufTtcbi8qIGVzbGludC1lbmFibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG5cbmNvbnN0IENvbXBvc2VyQ29yZSA9ICh7XG4gIGFjdGl2aXR5TWlkZGxld2FyZSxcbiAgYWN0aXZpdHlSZW5kZXJlcixcbiAgYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlLFxuICBhY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICBhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSxcbiAgYXR0YWNobWVudE1pZGRsZXdhcmUsXG4gIGF0dGFjaG1lbnRSZW5kZXJlcixcbiAgYXZhdGFyTWlkZGxld2FyZSxcbiAgYXZhdGFyUmVuZGVyZXIsXG4gIGNhcmRBY3Rpb25NaWRkbGV3YXJlLFxuICBjaGlsZHJlbixcbiAgZGlyLFxuICBkaXJlY3RMaW5lLFxuICBkaXNhYmxlZCxcbiAgZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkwsXG4gIGdyYW1tYXJzLFxuICBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlLFxuICBncm91cFRpbWVzdGFtcCxcbiAgaW50ZXJuYWxFcnJvckJveENsYXNzLFxuICBsb2NhbGUsXG4gIG9uVGVsZW1ldHJ5LFxuICBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MsXG4gIHJlbmRlck1hcmtkb3duLFxuICBzY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmUsXG4gIHNlbGVjdFZvaWNlLFxuICBzZW5kVGltZW91dCxcbiAgc2VuZFR5cGluZ0luZGljYXRvcixcbiAgc3R5bGVPcHRpb25zLFxuICB0b2FzdE1pZGRsZXdhcmUsXG4gIHRvYXN0UmVuZGVyZXIsXG4gIHR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUsXG4gIHR5cGluZ0luZGljYXRvclJlbmRlcmVyLFxuICB1c2VySUQsXG4gIHVzZXJuYW1lXG59OiBDb21wb3NlckNvcmVQcm9wcykgPT4ge1xuICBjb25zdCBbcG9ueWZpbGxdID0gdXNlUG9ueWZpbGwoKTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCB0ZWxlbWV0cnlEaW1lbnNpb25zUmVmID0gdXNlUmVmKHt9KTtcblxuICBjb25zdCBwYXRjaGVkRGlyID0gdXNlTWVtbygoKSA9PiAoZGlyID09PSAnbHRyJyB8fCBkaXIgPT09ICdydGwnID8gZGlyIDogJ2F1dG8nKSwgW2Rpcl0pO1xuICBjb25zdCBwYXRjaGVkR3JhbW1hcnMgPSB1c2VNZW1vKCgpID0+IGdyYW1tYXJzIHx8IFtdLCBbZ3JhbW1hcnNdKTtcbiAgY29uc3QgcGF0Y2hlZFN0eWxlT3B0aW9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbm9ybWFsaXplU3R5bGVPcHRpb25zKHBhdGNoU3R5bGVPcHRpb25zRnJvbURlcHJlY2F0ZWRQcm9wcyhzdHlsZU9wdGlvbnMsIHsgZ3JvdXBUaW1lc3RhbXAsIHNlbmRUaW1lb3V0IH0pKSxcbiAgICBbZ3JvdXBUaW1lc3RhbXAsIHNlbmRUaW1lb3V0LCBzdHlsZU9wdGlvbnNdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChzZXRMYW5ndWFnZShsb2NhbGUpKTtcbiAgfSwgW2Rpc3BhdGNoLCBsb2NhbGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHR5cGVvZiBzZW5kVGltZW91dCA9PT0gJ251bWJlcicgJiYgZGlzcGF0Y2goc2V0U2VuZFRpbWVvdXQoc2VuZFRpbWVvdXQpKTtcbiAgfSwgW2Rpc3BhdGNoLCBzZW5kVGltZW91dF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0U2VuZFR5cGluZ0luZGljYXRvcighIXNlbmRUeXBpbmdJbmRpY2F0b3IpKTtcbiAgfSwgW2Rpc3BhdGNoLCBzZW5kVHlwaW5nSW5kaWNhdG9yXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChcbiAgICAgIGNyZWF0ZUNvbm5lY3RBY3Rpb24oe1xuICAgICAgICBkaXJlY3RMaW5lLFxuICAgICAgICB1c2VySUQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBAdG9kbyBUT0RPOiBbUDNdIGRpc2Nvbm5lY3QoKSBpcyBhbiBhc3luYyBjYWxsIChwZW5kaW5nIC0+IGZ1bGZpbGxlZCksIHdlIG5lZWQgdG8gd2FpdCwgb3IgY2hhbmdlIGl0IHRvIHJlY29ubmVjdCgpXG4gICAgICAgKi9cbiAgICAgIGRpc3BhdGNoKGRpc2Nvbm5lY3QoKSk7XG4gICAgfTtcbiAgfSwgW2Rpc3BhdGNoLCBkaXJlY3RMaW5lLCB1c2VySUQsIHVzZXJuYW1lXSk7XG5cbiAgY29uc3QgbWFya0FsbEFzQWNrbm93bGVkZ2VkID0gdXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkKCk7XG5cbiAgY29uc3QgY2FyZEFjdGlvbkNvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+IGNyZWF0ZUNhcmRBY3Rpb25Db250ZXh0KHsgY2FyZEFjdGlvbk1pZGRsZXdhcmUsIGRpcmVjdExpbmUsIGRpc3BhdGNoLCBtYXJrQWxsQXNBY2tub3dsZWRnZWQsIHBvbnlmaWxsIH0pLFxuICAgIFtjYXJkQWN0aW9uTWlkZGxld2FyZSwgZGlyZWN0TGluZSwgZGlzcGF0Y2gsIG1hcmtBbGxBc0Fja25vd2xlZGdlZCwgcG9ueWZpbGxdXG4gICk7XG5cbiAgY29uc3QgcGF0Y2hlZFNlbGVjdFZvaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RWb2ljZSB8fCBkZWZhdWx0U2VsZWN0Vm9pY2UuYmluZChudWxsLCB7IGxhbmd1YWdlOiBsb2NhbGUgfSksXG4gICAgW2xvY2FsZSwgc2VsZWN0Vm9pY2VdXG4gICk7XG5cbiAgY29uc3QgZ3JvdXBBY3Rpdml0aWVzQ29udGV4dCA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGNyZWF0ZUdyb3VwQWN0aXZpdGllc0NvbnRleHQoe1xuICAgICAgICBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlLFxuICAgICAgICBncm91cFRpbWVzdGFtcDogcGF0Y2hlZFN0eWxlT3B0aW9ucy5ncm91cFRpbWVzdGFtcCxcbiAgICAgICAgcG9ueWZpbGxcbiAgICAgIH0pLFxuICAgIFtncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlLCBwYXRjaGVkU3R5bGVPcHRpb25zLmdyb3VwVGltZXN0YW1wLCBwb255ZmlsbF1cbiAgKTtcblxuICBjb25zdCBob2lzdGVkRGlzcGF0Y2hlcnMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBtYXBNYXAoXG4gICAgICAgIERJU1BBVENIRVJTLFxuICAgICAgICBkaXNwYXRjaGVyID0+XG4gICAgICAgICAgKC4uLmFyZ3MpID0+XG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVyKC4uLmFyZ3MpKVxuICAgICAgKSxcbiAgICBbZGlzcGF0Y2hdXG4gICk7XG5cbiAgY29uc3QgcGF0Y2hlZExvY2FsaXplZFN0cmluZ3MgPSB1c2VNZW1vKFxuICAgICgpID0+IG1lcmdlU3RyaW5nc092ZXJyaWRlcyhnZXRBbGxMb2NhbGl6ZWRTdHJpbmdzKClbbm9ybWFsaXplTGFuZ3VhZ2UobG9jYWxlKV0sIGxvY2FsZSwgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzKSxcbiAgICBbbG9jYWxlLCBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3NdXG4gICk7XG5cbiAgY29uc3QgbG9jYWxpemVkR2xvYmFsaXplID0gdXNlTWVtbzxQcmVjb21waWxlZEdsb2JhbGl6ZVR5cGU+KCgpID0+IHtcbiAgICBjb25zdCB7IEdMT0JBTElaRSwgR0xPQkFMSVpFX0xBTkdVQUdFIH0gPSBwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyB8fCB7fTtcblxuICAgIHJldHVybiBHTE9CQUxJWkUgfHwgKEdMT0JBTElaRV9MQU5HVUFHRSAmJiBQcmVjb21waWxlZEdsb2JhbGl6ZShHTE9CQUxJWkVfTEFOR1VBR0UpKSB8fCBQcmVjb21waWxlZEdsb2JhbGl6ZSgnZW4nKTtcbiAgfSwgW3BhdGNoZWRMb2NhbGl6ZWRTdHJpbmdzXSk7XG5cbiAgY29uc3QgdHJhY2tEaW1lbnNpb24gPSB1c2VDYWxsYmFjayhcbiAgICAobmFtZTogc3RyaW5nLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybignYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IFRlbGVtZXRyeSBkaW1lbnNpb24gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGE7XG5cbiAgICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJyAmJiB0eXBlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKCdib3RmcmFtZXdvcmstd2ViY2hhdDogVGVsZW1ldHJ5IGRpbWVuc2lvbiBkYXRhIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuXG4gICAgICB0ZWxlbWV0cnlEaW1lbnNpb25zUmVmLmN1cnJlbnQgPSB1cGRhdGVJbihcbiAgICAgICAgdGVsZW1ldHJ5RGltZW5zaW9uc1JlZi5jdXJyZW50LFxuICAgICAgICBbbmFtZV0sXG4gICAgICAgIHR5cGUgPT09ICd1bmRlZmluZWQnID8gZGF0YSA6ICgpID0+IGRhdGFcbiAgICAgICk7XG4gICAgfSxcbiAgICBbdGVsZW1ldHJ5RGltZW5zaW9uc1JlZl1cbiAgKTtcblxuICBjb25zdCBwYXRjaGVkQWN0aXZpdHlSZW5kZXJlciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGFjdGl2aXR5UmVuZGVyZXIgJiZcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1dlYiBDaGF0OiBcImFjdGl2aXR5UmVuZGVyZXJcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgb24gMjAyMi0wNi0xNSwgcGxlYXNlIHVzZSBcImFjdGl2aXR5TWlkZGxld2FyZVwiIGluc3RlYWQuJ1xuICAgICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICBhY3Rpdml0eVJlbmRlcmVyIHx8XG4gICAgICBhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlcihcbiAgICAgICAgJ2FjdGl2aXR5JyxcbiAgICAgICAgeyBzdHJpY3Q6IGZhbHNlIH0sXG4gICAgICAgIC4uLnNpbmdsZVRvQXJyYXkoYWN0aXZpdHlNaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAoKSA9PlxuICAgICAgICAgICh7IGFjdGl2aXR5IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChhY3Rpdml0eSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlbmRlcmVyIGZvciBhY3Rpdml0eSBvZiB0eXBlIFwiJHthY3Rpdml0eS50eXBlfVwiYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjdGl2aXR5IHRvIHJlbmRlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICkoe30pXG4gICAgKTtcbiAgfSwgW2FjdGl2aXR5TWlkZGxld2FyZSwgYWN0aXZpdHlSZW5kZXJlcl0pO1xuXG4gIGNvbnN0IHBhdGNoZWRBY3Rpdml0eVN0YXR1c1JlbmRlcmVyID0gdXNlTWVtbzxSZW5kZXJBY3Rpdml0eVN0YXR1cz4oKCkgPT4ge1xuICAgIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXIgJiZcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1dlYiBDaGF0OiBcImFjdGl2aXR5U3RhdHVzUmVuZGVyZXJcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgb24gMjAyMi0wNi0xNSwgcGxlYXNlIHVzZSBcImFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZVwiIGluc3RlYWQuJ1xuICAgICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICBhY3Rpdml0eVN0YXR1c1JlbmRlcmVyIHx8XG4gICAgICBhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlcihcbiAgICAgICAgJ2FjdGl2aXR5IHN0YXR1cycsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KGFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSksXG4gICAgICAgICgpID0+ICgpID0+ICgpID0+IGZhbHNlXG4gICAgICApKHt9KVxuICAgICk7XG4gIH0sIFthY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUsIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXJdKTtcblxuICBjb25zdCBwYXRjaGVkQXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICdhdHRhY2htZW50IGZvciBzY3JlZW4gcmVhZGVyJyxcbiAgICAgICAgeyBzdHJpY3Q6IHRydWUgfSxcbiAgICAgICAgLi4uc2luZ2xlVG9BcnJheShhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSksXG4gICAgICAgICgpID0+XG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAoeyBhdHRhY2htZW50IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gcmVuZGVyZXIgZm9yIGF0dGFjaG1lbnQgZm9yIHNjcmVlbiByZWFkZXIgb2YgdHlwZSBcIiR7YXR0YWNobWVudC5jb250ZW50VHlwZX1cImApO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgKiBAdG9kbyBUT0RPOiBbUDRdIE1pZ2h0IGJlIGFibGUgdG8gdGhyb3cgd2l0aG91dCByZXR1cm5pbmcgYSBmdW5jdGlvbiAtLSBpbnZlc3RpZ2F0ZSBhbmQgcG9zc2libHkgZml4XG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGF0dGFjaG1lbnQgdG8gcmVuZGVyJyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICkoe30pLFxuICAgIFthdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZV1cbiAgKTtcblxuICBjb25zdCBwYXRjaGVkQXR0YWNobWVudFJlbmRlcmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGF0dGFjaG1lbnRSZW5kZXJlcikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwiYXR0YWNobWVudFJlbmRlcmVyXCIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIG9uIDIwMjItMDYtMTUsIHBsZWFzZSB1c2UgXCJhdHRhY2htZW50TWlkZGxld2FyZVwiIGluc3RlYWQuJ1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGF0dGFjaG1lbnRSZW5kZXJlcjtcbiAgICB9XG5cbiAgICAvLyBBdHRhY2htZW50IHJlbmRlcmVyXG4gICAgcmV0dXJuIGFwcGx5TWlkZGxld2FyZUZvckxlZ2FjeVJlbmRlcmVyKFxuICAgICAgJ2F0dGFjaG1lbnQnLFxuICAgICAgLi4uc2luZ2xlVG9BcnJheShhdHRhY2htZW50TWlkZGxld2FyZSksXG4gICAgICAoKSA9PlxuICAgICAgICAoKSA9PlxuICAgICAgICAoeyBhdHRhY2htZW50IH0pID0+IHtcbiAgICAgICAgICBpZiAoYXR0YWNobWVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZW5kZXJlciBmb3IgYXR0YWNobWVudCBvZiB0eXBlIFwiJHthdHRhY2htZW50LmNvbnRlbnRUeXBlfVwiYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXR0YWNobWVudCB0byByZW5kZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApKHt9KTtcbiAgfSwgW2F0dGFjaG1lbnRNaWRkbGV3YXJlLCBhdHRhY2htZW50UmVuZGVyZXJdKTtcblxuICBjb25zdCBwYXRjaGVkQXZhdGFyUmVuZGVyZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBhdmF0YXJSZW5kZXJlciAmJlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwiYXZhdGFyUmVuZGVyZXJcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgb24gMjAyMi0wNi0xNSwgcGxlYXNlIHVzZSBcImF2YXRhck1pZGRsZXdhcmVcIiBpbnN0ZWFkLidcbiAgICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgYXZhdGFyUmVuZGVyZXIgfHxcbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAnYXZhdGFyJyxcbiAgICAgICAgeyBzdHJpY3Q6IGZhbHNlIH0sXG4gICAgICAgIC4uLnNpbmdsZVRvQXJyYXkoYXZhdGFyTWlkZGxld2FyZSksXG4gICAgICAgICgpID0+ICgpID0+ICgpID0+IGZhbHNlXG4gICAgICApKHt9KVxuICAgICk7XG4gIH0sIFthdmF0YXJNaWRkbGV3YXJlLCBhdmF0YXJSZW5kZXJlcl0pO1xuXG4gIGNvbnN0IHBhdGNoZWRUb2FzdFJlbmRlcmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgdG9hc3RSZW5kZXJlciAmJlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwidG9hc3RSZW5kZXJlclwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbiAyMDIyLTA2LTE1LCBwbGVhc2UgdXNlIFwidG9hc3RNaWRkbGV3YXJlXCIgaW5zdGVhZC4nXG4gICAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHRvYXN0UmVuZGVyZXIgfHxcbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAndG9hc3QnLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfSxcbiAgICAgICAgLi4uc2luZ2xlVG9BcnJheSh0b2FzdE1pZGRsZXdhcmUpLFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgKHsgbm90aWZpY2F0aW9uIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZW5kZXJlciBmb3Igbm90aWZpY2F0aW9uIG9mIHR5cGUgXCIke25vdGlmaWNhdGlvbi5jb250ZW50VHlwZX1cImApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBub3RpZmljYXRpb24gdG8gcmVuZGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgKSh7fSlcbiAgICApO1xuICB9LCBbdG9hc3RNaWRkbGV3YXJlLCB0b2FzdFJlbmRlcmVyXSk7XG5cbiAgY29uc3QgcGF0Y2hlZFR5cGluZ0luZGljYXRvclJlbmRlcmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgdHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIgJiZcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1dlYiBDaGF0OiBcInR5cGluZ0luZGljYXRvclJlbmRlcmVyXCIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIG9uIDIwMjItMDYtMTUsIHBsZWFzZSB1c2UgXCJ0eXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlXCIgaW5zdGVhZC4nXG4gICAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGluZ0luZGljYXRvclJlbmRlcmVyIHx8XG4gICAgICBhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlcihcbiAgICAgICAgJ3R5cGluZyBpbmRpY2F0b3InLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfSxcbiAgICAgICAgLi4uc2luZ2xlVG9BcnJheSh0eXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT4gKCkgPT4gKCkgPT4gZmFsc2VcbiAgICAgICkoe30pXG4gICAgKTtcbiAgfSwgW3R5cGluZ0luZGljYXRvck1pZGRsZXdhcmUsIHR5cGluZ0luZGljYXRvclJlbmRlcmVyXSk7XG5cbiAgY29uc3Qgc2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlcjogU2Nyb2xsVG9FbmRCdXR0b25Db21wb25lbnRGYWN0b3J5ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICdzY3JvbGwgdG8gZW5kIGJ1dHRvbicsXG4gICAgICAgIHsgc3RyaWN0OiB0cnVlIH0sXG4gICAgICAgIC4uLnNpbmdsZVRvQXJyYXkoc2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT4gKCkgPT4gKCkgPT4gZmFsc2VcbiAgICAgICkoKSBhcyBhbnksXG4gICAgW3Njcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZV1cbiAgKTtcblxuICAvKipcbiAgICogVGhpcyBpcyBhIGhlYXZ5IGZ1bmN0aW9uLCBhbmQgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgb25seSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIG5lZWQgdG8gcmVjcmVhdGUgYnVzaW5lc3MgbG9naWMsIGUuZy5cbiAgICogLSBVc2VyIElEIGNoYW5nZWQsIGNhdXNpbmcgYWxsIHNlbmQqIGZ1bmN0aW9ucyB0byBiZSB1cGRhdGVkXG4gICAqIC0gc2VuZFxuICAgKiBAdG9kbyBUT0RPOiBbUDNdIFdlIHNob3VsZCB0aGluayBhYm91dCBpZiB3ZSBhbGxvdyB0aGUgdXNlciB0byBjaGFuZ2Ugb25TZW5kQm94VmFsdWVDaGFuZ2VkL3NlbmRCb3hWYWx1ZSwgZS5nLlxuICAgKiAxLiBUdXJucyB0ZXh0IGludG8gVVBQRVJDQVNFXG4gICAqIDIuIEZpbHRlciBvdXQgcHJvZmFuaXR5XG4gICAqIEB0b2RvIFRPRE86IFtQNF0gUmV2aXNpdCBhbGwgbWVtYmVycyBvZiBjb250ZXh0XG4gICAqICAgICAgIFRoaXMgY29udGV4dCBzaG91bGQgY29uc2lzdCBvZiBtZW1iZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgUmVkdXggc3RvcmVcbiAgICogICAgICAgaS5lLiBtZW1iZXJzIHRoYXQgYXJlIG5vdCBpbnRlcmVzdGVkIGluIG90aGVyIHR5cGVzIG9mIFVJc1xuICAgKi9cbiAgY29uc3QgY29udGV4dCA9IHVzZU1lbW88Q29udGV4dE9mPHR5cGVvZiBXZWJDaGF0QVBJQ29udGV4dD4+KFxuICAgICgpID0+ICh7XG4gICAgICAuLi5jYXJkQWN0aW9uQ29udGV4dCxcbiAgICAgIC4uLmdyb3VwQWN0aXZpdGllc0NvbnRleHQsXG4gICAgICAuLi5ob2lzdGVkRGlzcGF0Y2hlcnMsXG4gICAgICBhY3Rpdml0eVJlbmRlcmVyOiBwYXRjaGVkQWN0aXZpdHlSZW5kZXJlcixcbiAgICAgIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXI6IHBhdGNoZWRBY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICAgICAgYXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyOiBwYXRjaGVkQXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyLFxuICAgICAgYXR0YWNobWVudFJlbmRlcmVyOiBwYXRjaGVkQXR0YWNobWVudFJlbmRlcmVyLFxuICAgICAgYXZhdGFyUmVuZGVyZXI6IHBhdGNoZWRBdmF0YXJSZW5kZXJlcixcbiAgICAgIGRpcjogcGF0Y2hlZERpcixcbiAgICAgIGRpcmVjdExpbmUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMLFxuICAgICAgZ3JhbW1hcnM6IHBhdGNoZWRHcmFtbWFycyxcbiAgICAgIGludGVybmFsRXJyb3JCb3hDbGFzcyxcbiAgICAgIGxhbmd1YWdlOiBsb2NhbGUsXG4gICAgICBsb2NhbGl6ZWRHbG9iYWxpemVTdGF0ZTogW2xvY2FsaXplZEdsb2JhbGl6ZV0sXG4gICAgICBsb2NhbGl6ZWRTdHJpbmdzOiBwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyxcbiAgICAgIG9uVGVsZW1ldHJ5LFxuICAgICAgcmVuZGVyTWFya2Rvd24sXG4gICAgICBzY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyLFxuICAgICAgc2VsZWN0Vm9pY2U6IHBhdGNoZWRTZWxlY3RWb2ljZSxcbiAgICAgIHNlbmRUeXBpbmdJbmRpY2F0b3IsXG4gICAgICBzdHlsZU9wdGlvbnM6IHBhdGNoZWRTdHlsZU9wdGlvbnMsXG4gICAgICB0ZWxlbWV0cnlEaW1lbnNpb25zUmVmLFxuICAgICAgdG9hc3RSZW5kZXJlcjogcGF0Y2hlZFRvYXN0UmVuZGVyZXIsXG4gICAgICB0cmFja0RpbWVuc2lvbixcbiAgICAgIHR5cGluZ0luZGljYXRvclJlbmRlcmVyOiBwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIsXG4gICAgICB1c2VySUQsXG4gICAgICB1c2VybmFtZVxuICAgIH0pLFxuICAgIFtcbiAgICAgIGNhcmRBY3Rpb25Db250ZXh0LFxuICAgICAgZGlyZWN0TGluZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkwsXG4gICAgICBncm91cEFjdGl2aXRpZXNDb250ZXh0LFxuICAgICAgaG9pc3RlZERpc3BhdGNoZXJzLFxuICAgICAgaW50ZXJuYWxFcnJvckJveENsYXNzLFxuICAgICAgbG9jYWxlLFxuICAgICAgbG9jYWxpemVkR2xvYmFsaXplLFxuICAgICAgb25UZWxlbWV0cnksXG4gICAgICBwYXRjaGVkQWN0aXZpdHlSZW5kZXJlcixcbiAgICAgIHBhdGNoZWRBY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICAgICAgcGF0Y2hlZEF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlcixcbiAgICAgIHBhdGNoZWRBdHRhY2htZW50UmVuZGVyZXIsXG4gICAgICBwYXRjaGVkQXZhdGFyUmVuZGVyZXIsXG4gICAgICBwYXRjaGVkRGlyLFxuICAgICAgcGF0Y2hlZEdyYW1tYXJzLFxuICAgICAgcGF0Y2hlZExvY2FsaXplZFN0cmluZ3MsXG4gICAgICBwYXRjaGVkU2VsZWN0Vm9pY2UsXG4gICAgICBwYXRjaGVkU3R5bGVPcHRpb25zLFxuICAgICAgcGF0Y2hlZFRvYXN0UmVuZGVyZXIsXG4gICAgICBwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIsXG4gICAgICByZW5kZXJNYXJrZG93bixcbiAgICAgIHNjcm9sbFRvRW5kQnV0dG9uUmVuZGVyZXIsXG4gICAgICBzZW5kVHlwaW5nSW5kaWNhdG9yLFxuICAgICAgdGVsZW1ldHJ5RGltZW5zaW9uc1JlZixcbiAgICAgIHRyYWNrRGltZW5zaW9uLFxuICAgICAgdXNlcklELFxuICAgICAgdXNlcm5hbWVcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8V2ViQ2hhdEFQSUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICAgICAgPEFjdGl2aXR5U2VuZFN0YXR1c0NvbXBvc2VyPlxuICAgICAgICB7dHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4oY29udGV4dCkgOiBjaGlsZHJlbn1cbiAgICAgICAgPEFjdGl2aXR5U2VuZFN0YXR1c1RlbGVtZXRyeUNvbXBvc2VyIC8+XG4gICAgICA8L0FjdGl2aXR5U2VuZFN0YXR1c0NvbXBvc2VyPlxuICAgICAge29uVGVsZW1ldHJ5ICYmIDxUcmFja2VyIC8+fVxuICAgIDwvV2ViQ2hhdEFQSUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG4vKipcbiAqIEB0b2RvIFRPRE86IFtQM10gV2Ugc2hvdWxkIGNvbnNpZGVyIG1vdmluZyBzb21lIGRhdGEgZnJvbSBSZWR1eCBzdG9yZSB0byBwcm9wc1xuICogICAgICAgQWx0aG91Z2ggd2UgdXNlIGBjb25uZWN0VG9XZWJDaGF0YCB0byBoaWRlIHRoZSBkZXRhaWxzIG9mIGFjY2Vzc29yIG9mIFJlZHV4IHN0b3JlLFxuICogICAgICAgd2Ugc2hvdWxkIGNsZWFuIHVwIHRoZSByZXNwb25zaWJpbGl0eSBiZXR3ZWVuIENvbnRleHQgYW5kIFJlZHV4IHN0b3JlXG4gKiAgICAgICBXZSBzaG91bGQgZGVjaWRlIHdoaWNoIGRhdGEgaXMgbmVlZGVkIGZvciBSZWFjdCBidXQgbm90IGluIG90aGVyIGVudmlyb25tZW50IHN1Y2ggYXMgQ0xJL1ZTQ29kZVxuICovXG5Db21wb3NlckNvcmUuZGVmYXVsdFByb3BzID0ge1xuICBhY3Rpdml0eU1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgYWN0aXZpdHlSZW5kZXJlcjogdW5kZWZpbmVkLFxuICBhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcjogdW5kZWZpbmVkLFxuICBhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBhdHRhY2htZW50TWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBhdHRhY2htZW50UmVuZGVyZXI6IHVuZGVmaW5lZCxcbiAgYXZhdGFyTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBhdmF0YXJSZW5kZXJlcjogdW5kZWZpbmVkLFxuICBjYXJkQWN0aW9uTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICBkaXI6ICdhdXRvJyxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTDogdW5kZWZpbmVkLFxuICBncmFtbWFyczogW10sXG4gIGdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgZ3JvdXBUaW1lc3RhbXA6IHVuZGVmaW5lZCxcbiAgaW50ZXJuYWxFcnJvckJveENsYXNzOiB1bmRlZmluZWQsXG4gIGxvY2FsZTogd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSB8fCAnZW4tVVMnLFxuICBvblRlbGVtZXRyeTogdW5kZWZpbmVkLFxuICBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3M6IHVuZGVmaW5lZCxcbiAgcmVuZGVyTWFya2Rvd246IHVuZGVmaW5lZCxcbiAgc2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIHNlbGVjdFZvaWNlOiB1bmRlZmluZWQsXG4gIHNlbmRUaW1lb3V0OiB1bmRlZmluZWQsXG4gIHNlbmRUeXBpbmdJbmRpY2F0b3I6IGZhbHNlLFxuICBzdHlsZU9wdGlvbnM6IHt9LFxuICB0b2FzdE1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgdG9hc3RSZW5kZXJlcjogdW5kZWZpbmVkLFxuICB0eXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIHR5cGluZ0luZGljYXRvclJlbmRlcmVyOiB1bmRlZmluZWQsXG4gIHVzZXJJRDogJycsXG4gIHVzZXJuYW1lOiAnJ1xufTtcblxuQ29tcG9zZXJDb3JlLnByb3BUeXBlcyA9IHtcbiAgYWN0aXZpdHlNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIGFjdGl2aXR5UmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICBhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIGF0dGFjaG1lbnRNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIGF0dGFjaG1lbnRSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGF2YXRhck1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgYXZhdGFyUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICBjYXJkQWN0aW9uTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLmFueSxcbiAgZGlyOiBQcm9wVHlwZXMub25lT2YoWydhdXRvJywgJ2x0cicsICdydGwnXSksXG4gIC8vIFByb3BUeXBlcy5zaGFwZSh7IC4uLiB9KSBkaWQgbm90IGhvbm9yIGlzUmVxdWlyZWQgZm9yIGl0cyBtZW1iZXJzLlxuICAvLyBAdHMtaWdub3JlXG4gIGRpcmVjdExpbmU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWN0aXZpdHkkOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgc3Vic2NyaWJlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBjb25uZWN0aW9uU3RhdHVzJDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHN1YnNjcmliZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgZW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBnZXRTZXNzaW9uSWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBvc3RBY3Rpdml0eTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZWZlcmVuY2VHcmFtbWFySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdG9rZW46IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTDogUHJvcFR5cGVzLmZ1bmMsXG4gIGdyYW1tYXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBncm91cFRpbWVzdGFtcDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5udW1iZXJdKSxcbiAgaW50ZXJuYWxFcnJvckJveENsYXNzOiBQcm9wVHlwZXMuZnVuYywgLy8gVGhpcyBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuIFdlIGRvbid0IGFsbG93IGN1c3RvbWl6YXRpb24gb2YgZXJyb3IgYm94LlxuICBsb2NhbGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uVGVsZW1ldHJ5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LCBQcm9wVHlwZXMuZnVuY10pLFxuICByZW5kZXJNYXJrZG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIHNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBzZWxlY3RWb2ljZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHNlbmRUaW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLFxuICBzZW5kVHlwaW5nSW5kaWNhdG9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgc3R5bGVPcHRpb25zOiBQcm9wVHlwZXMuYW55LFxuICB0b2FzdE1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgdG9hc3RSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIHR5cGluZ0luZGljYXRvck1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgdHlwaW5nSW5kaWNhdG9yUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICB1c2VySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHVzZXJuYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG50eXBlIENvbXBvc2VyV2l0aFN0b3JlUHJvcHMgPSBDb21wb3NlckNvcmVQcm9wcyAmIHtcbiAgc3RvcmU/OiBhbnk7XG59O1xuXG50eXBlIENvbXBvc2VyUHJvcHMgPSBDb21wb3NlcldpdGhTdG9yZVByb3BzICYge1xuICBpbnRlcm5hbFJlbmRlckVycm9yQm94PzogYW55O1xuXG4gIC8qKlxuICAgKiBQb255ZmlsbCB0byBvdmVycmlkZXMgc3BlY2lmaWMgZ2xvYmFsIHNjb3BlIG1lbWJlcnMuIFRoaXMgcHJvcCBjYW5ub3QgYmUgY2hhbmdlZCBhZnRlciBpbml0aWFsIHJlbmRlci5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgZm9yIGRldmVsb3BtZW50IHVzZSBvbmx5LiBOb3QgYWxsIGZlYXR1cmVzIGluIFdlYiBDaGF0IGFyZSBwb255ZmlsbGVkLlxuICAgKlxuICAgKiBUbyBmYWtlIHRpbWVycywgYHNldFRpbWVvdXRgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIHRvIG92ZXJyaWRlcyB0aGUgb3JpZ2luYWwgZ2xvYmFsIHNjb3BlIG1lbWJlcnMuXG4gICAqXG4gICAqIFBsZWFzZSBzZWUgWyM0NjYyXShodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L0JvdEZyYW1ld29yay1XZWJDaGF0L3B1bGwvNDY2MikgZm9yIGRldGFpbHMuXG4gICAqL1xuICBwb255ZmlsbD86IFBhcnRpYWw8R2xvYmFsU2NvcGVQb255ZmlsbD47XG59O1xuXG4vLyBXZSB3aWxsIGNyZWF0ZSBhIFJlZHV4IHN0b3JlIGlmIGl0IHdhcyBub3QgcGFzc2VkIGluXG5jb25zdCBDb21wb3NlcldpdGhTdG9yZSA9ICh7IG9uVGVsZW1ldHJ5LCBzdG9yZSwgLi4ucHJvcHMgfTogQ29tcG9zZXJXaXRoU3RvcmVQcm9wcykgPT4ge1xuICBjb25zdCBbcG9ueWZpbGxdID0gdXNlUG9ueWZpbGwoKTtcblxuICBjb25zdCBtZW1vaXplZFN0b3JlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgbmV4dFN0b3JlID0gc3RvcmUgfHwgY3JlYXRlU3RvcmVXaXRoT3B0aW9ucyh7IHBvbnlmaWxsIH0pO1xuXG4gICAgY29uc3Qgc3RvcmVQb255ZmlsbCA9IHN0b3JlLmdldFN0YXRlKCkuaW50ZXJuYWw/LnBvbnlmaWxsIHx8IHt9O1xuXG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKHN0b3JlUG9ueWZpbGwpLCAuLi5PYmplY3Qua2V5cyhwb255ZmlsbCldKTtcblxuICAgIC8vIEZpbHRlciBvdXQgZm9yYmlkZGVuIHByb3BlcnRpZXMuXG4gICAga2V5cy5kZWxldGUoJ3Byb3RvdHlwZScpO1xuXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAga2V5cy5kZWxldGUoa2V5KTtcbiAgICB9KTtcblxuICAgIC8vIFdlIGhhdmUgZmlsdGVyZWQgb3V0IGFsbCBmb3JiaWRkZW4gcHJvcGVydGllcy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICBpZiAoQXJyYXkuZnJvbShrZXlzKS5zb21lKGtleSA9PiBzdG9yZVBvbnlmaWxsW2tleV0gIT09IHBvbnlmaWxsW2tleV0pKSB7XG4gICAgICBjb25zb2xlLndhcm4oYGJvdGZyYW1ld29yay13ZWJjaGF0OiBQb255ZmlsbCB1c2VkIGluIHN0b3JlIHNob3VsZCBtYXRjaCB0aGUgcG9ueWZpbGwgcGFzc2VkIGluIHByb3BzLmApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0U3RvcmU7XG4gIH0sIFtwb255ZmlsbCwgc3RvcmVdKTtcblxuICByZXR1cm4gKFxuICAgIDxQcm92aWRlciBjb250ZXh0PXtXZWJDaGF0UmVkdXhDb250ZXh0fSBzdG9yZT17bWVtb2l6ZWRTdG9yZX0+XG4gICAgICA8QWN0aXZpdHlLZXllckNvbXBvc2VyPlxuICAgICAgICA8QWN0aXZpdHlBY2tub3dsZWRnZW1lbnRDb21wb3Nlcj5cbiAgICAgICAgICA8Q29tcG9zZXJDb3JlIG9uVGVsZW1ldHJ5PXtvblRlbGVtZXRyeX0gey4uLnByb3BzfSAvPlxuICAgICAgICA8L0FjdGl2aXR5QWNrbm93bGVkZ2VtZW50Q29tcG9zZXI+XG4gICAgICA8L0FjdGl2aXR5S2V5ZXJDb21wb3Nlcj5cbiAgICA8L1Byb3ZpZGVyPlxuICApO1xufTtcblxuQ29tcG9zZXJXaXRoU3RvcmUuZGVmYXVsdFByb3BzID0ge1xuICBvblRlbGVtZXRyeTogdW5kZWZpbmVkLFxuICBzdG9yZTogdW5kZWZpbmVkXG59O1xuXG5Db21wb3NlcldpdGhTdG9yZS5wcm9wVHlwZXMgPSB7XG4gIG9uVGVsZW1ldHJ5OiBQcm9wVHlwZXMuZnVuYyxcbiAgc3RvcmU6IFByb3BUeXBlcy5hbnlcbn07XG5cbmNvbnN0IENvbXBvc2VyID0gKHsgaW50ZXJuYWxSZW5kZXJFcnJvckJveCwgb25UZWxlbWV0cnksIHBvbnlmaWxsLCAuLi5wcm9wcyB9OiBDb21wb3NlclByb3BzKSA9PiB7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoKTtcblxuICBjb25zdCBoYW5kbGVFcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBVbmNhdWdodCBleGNlcHRpb24nLCB7IGVycm9yIH0pO1xuXG4gICAgICBvblRlbGVtZXRyeSAmJlxuICAgICAgICBvblRlbGVtZXRyeShjcmVhdGVDdXN0b21FdmVudCgnZXhjZXB0aW9uJywgeyBlcnJvciwgZmF0YWw6IHRydWUgfSkgYXMgVGVsZW1ldHJ5RXhjZXB0aW9uTWVhc3VyZW1lbnRFdmVudCk7XG4gICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgfSxcbiAgICBbb25UZWxlbWV0cnksIHNldEVycm9yXVxuICApO1xuXG4gIHJldHVybiBlcnJvciA/IChcbiAgICAhIWludGVybmFsUmVuZGVyRXJyb3JCb3ggJiYgaW50ZXJuYWxSZW5kZXJFcnJvckJveCh7IGVycm9yLCB0eXBlOiAndW5jYXVnaHQgZXhjZXB0aW9uJyB9KVxuICApIDogKFxuICAgIDxFcnJvckJvdW5kYXJ5IG9uRXJyb3I9e2hhbmRsZUVycm9yfT5cbiAgICAgIDxQb255ZmlsbENvbXBvc2VyIHBvbnlmaWxsPXtwb255ZmlsbH0+XG4gICAgICAgIDxDb21wb3NlcldpdGhTdG9yZSBvblRlbGVtZXRyeT17b25UZWxlbWV0cnl9IHsuLi5wcm9wc30gLz5cbiAgICAgIDwvUG9ueWZpbGxDb21wb3Nlcj5cbiAgICA8L0Vycm9yQm91bmRhcnk+XG4gICk7XG59O1xuXG5Db21wb3Nlci5kZWZhdWx0UHJvcHMgPSB7XG4gIC4uLkNvbXBvc2VyV2l0aFN0b3JlLmRlZmF1bHRQcm9wcyxcbiAgaW50ZXJuYWxSZW5kZXJFcnJvckJveDogdW5kZWZpbmVkLFxuICBvblRlbGVtZXRyeTogdW5kZWZpbmVkLFxuICBwb255ZmlsbDogdW5kZWZpbmVkXG59O1xuXG5Db21wb3Nlci5wcm9wVHlwZXMgPSB7XG4gIC4uLkNvbXBvc2VyV2l0aFN0b3JlLnByb3BUeXBlcyxcbiAgaW50ZXJuYWxSZW5kZXJFcnJvckJveDogUHJvcFR5cGVzLmFueSxcbiAgb25UZWxlbWV0cnk6IFByb3BUeXBlcy5mdW5jLFxuICBwb255ZmlsbDogUHJvcFR5cGVzLmFueVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zZXI7XG5cbmV4cG9ydCB0eXBlIHsgQ29tcG9zZXJQcm9wcyB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBNkJBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUtBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BOztBQUVBOztBQUNBOztBQUNBOztBQUVBOztBQU9BOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQTtBQUNBLElBQU1BLFdBQVcsR0FBRztFQUNsQkMscUJBQXFCLEVBQXJCQSw4Q0FEa0I7RUFFbEJDLG1CQUFtQixFQUFuQkEsNENBRmtCO0VBR2xCQyxtQkFBbUIsRUFBbkJBLDRDQUhrQjtFQUlsQkMsWUFBWSxFQUFaQSxxQ0FKa0I7RUFLbEJDLFlBQVksRUFBWkEscUNBTGtCO0VBTWxCQyxTQUFTLEVBQVRBLGtDQU5rQjtFQU9sQkMsU0FBUyxFQUFUQSxrQ0FQa0I7RUFRbEJDLFdBQVcsRUFBWEEsb0NBUmtCO0VBU2xCQyxlQUFlLEVBQWZBLHdDQVRrQjtFQVVsQkMsWUFBWSxFQUFaQSxxQ0FWa0I7RUFXbEJDLGtCQUFrQixFQUFsQkEsMkNBWGtCO0VBWWxCQyxlQUFlLEVBQWZBLHdDQVprQjtFQWFsQkMsZUFBZSxFQUFmQSx3Q0Fia0I7RUFjbEJDLFVBQVUsRUFBVkEsbUNBZGtCO0VBZWxCQyxjQUFjLEVBQWRBLHVDQWZrQjtFQWdCbEJDLFlBQVksRUFBWkEscUNBaEJrQjtFQWlCbEJDLHFCQUFxQixFQUFyQkEsOENBakJrQjtFQWtCbEJDLFdBQVcsRUFBWEEsb0NBbEJrQjtFQW1CbEJDLG9CQUFvQixFQUFwQkEsNkNBbkJrQjtFQW9CbEJDLGFBQWEsRUFBYkE7QUFwQmtCLENBQXBCOztBQXVCQSxT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
|