single-scripture-rcl 3.2.6 → 3.3.0-beta
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/dist/components/ScriptureCard/ScriptureCard.js +294 -39
- package/dist/components/ScripturePane/ScripturePane.js +82 -5
- package/dist/hooks/useScripture.js +105 -7
- package/dist/hooks/useScriptureAlignmentEdit.js +633 -0
- package/dist/hooks/useScriptureResources.js +14 -3
- package/dist/hooks/useScriptureSettings.js +9 -4
- package/dist/utils/ScriptureSettings.js +47 -1
- package/package.json +19 -4
|
@@ -4,18 +4,26 @@ import "core-js/modules/es.array.is-array.js";
|
|
|
4
4
|
import "core-js/modules/es.string.includes.js";
|
|
5
5
|
import "regenerator-runtime/runtime.js";
|
|
6
6
|
|
|
7
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
8
|
+
|
|
9
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
+
|
|
11
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
|
|
12
|
+
|
|
13
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
14
|
+
|
|
7
15
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
8
16
|
|
|
9
17
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
10
18
|
|
|
19
|
+
function _extends() { _extends = Object.assign || 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); }
|
|
20
|
+
|
|
11
21
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
12
22
|
|
|
13
23
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
14
24
|
|
|
15
25
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
16
26
|
|
|
17
|
-
function _extends() { _extends = Object.assign || 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); }
|
|
18
|
-
|
|
19
27
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
20
28
|
|
|
21
29
|
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."); }
|
|
@@ -30,11 +38,18 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
30
38
|
|
|
31
39
|
import * as React from 'react';
|
|
32
40
|
import * as PropTypes from 'prop-types';
|
|
33
|
-
import {
|
|
41
|
+
import { RxLink2, RxLinkBreak2 } from 'react-icons/rx';
|
|
42
|
+
import { Card, useCardState, useUserBranch, ERROR_STATE, MANIFEST_NOT_LOADED_ERROR } from 'translation-helps-rcl';
|
|
43
|
+
import { WordAligner } from 'word-aligner-rcl';
|
|
44
|
+
import CheckOutlinedIcon from '@mui/icons-material/CheckOutlined';
|
|
45
|
+
import CancelOutlinedIcon from '@mui/icons-material/CancelOutlined';
|
|
46
|
+
import { IconButton } from '@mui/material';
|
|
34
47
|
import { ScripturePane, ScriptureSelector } from '..';
|
|
35
48
|
import { useScriptureSettings } from '../../hooks/useScriptureSettings';
|
|
36
49
|
import { getResourceLink, getResourceMessage, getScriptureVersionSettings, isOriginalBible } from '../../utils/ScriptureSettings';
|
|
37
50
|
import { Title } from '../ScripturePane/styled';
|
|
51
|
+
import { NT_ORIG_LANG, ORIGINAL_SOURCE, OT_ORIG_LANG } from '../../utils';
|
|
52
|
+
import { useScriptureAlignmentEdit } from '../../hooks/useScriptureAlignmentEdit';
|
|
38
53
|
var KEY_FONT_SIZE_BASE = 'scripturePaneFontSize_';
|
|
39
54
|
var label = 'Version';
|
|
40
55
|
var style = {
|
|
@@ -42,7 +57,7 @@ var style = {
|
|
|
42
57
|
width: '500px'
|
|
43
58
|
};
|
|
44
59
|
export default function ScriptureCard(_ref) {
|
|
45
|
-
var _scriptureConfig$reso2, _scriptureConfig$
|
|
60
|
+
var _scriptureConfig$reso, _scriptureConfig$vers, _currentVerseData_$ve, _scriptureConfig$reso2, _scriptureConfig$reso4, _scriptureConfig$reso5, _scriptureConfig$reso6;
|
|
46
61
|
|
|
47
62
|
var id = _ref.id,
|
|
48
63
|
isNT = _ref.isNT,
|
|
@@ -72,25 +87,56 @@ export default function ScriptureCard(_ref) {
|
|
|
72
87
|
fetchGlossesForVerse = _ref.fetchGlossesForVerse,
|
|
73
88
|
translate = _ref.translate,
|
|
74
89
|
onMinimize = _ref.onMinimize,
|
|
90
|
+
loggedInUser = _ref.loggedInUser,
|
|
91
|
+
authentication = _ref.authentication,
|
|
92
|
+
setSavedChanges = _ref.setSavedChanges,
|
|
93
|
+
bookIndex = _ref.bookIndex,
|
|
75
94
|
addVerseRange = _ref.addVerseRange;
|
|
76
95
|
|
|
77
|
-
var _React$useState = React.useState(
|
|
96
|
+
var _React$useState = React.useState({
|
|
97
|
+
currentVerseNum: 0,
|
|
98
|
+
//TODO will be used in future when need to support multiple verses in card
|
|
99
|
+
ref: appRef,
|
|
100
|
+
urlError: null,
|
|
101
|
+
usingUserBranch: false
|
|
102
|
+
}),
|
|
78
103
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
79
|
-
|
|
80
|
-
|
|
104
|
+
state = _React$useState2[0],
|
|
105
|
+
setState_ = _React$useState2[1];
|
|
106
|
+
|
|
107
|
+
var currentVerseNum = state.currentVerseNum,
|
|
108
|
+
ref = state.ref,
|
|
109
|
+
urlError = state.urlError,
|
|
110
|
+
usingUserBranch = state.usingUserBranch;
|
|
81
111
|
|
|
82
112
|
var _useUserLocalStorage = useUserLocalStorage(KEY_FONT_SIZE_BASE + cardNum, 100),
|
|
83
113
|
_useUserLocalStorage2 = _slicedToArray(_useUserLocalStorage, 2),
|
|
84
114
|
fontSize = _useUserLocalStorage2[0],
|
|
85
115
|
setFontSize = _useUserLocalStorage2[1];
|
|
86
116
|
|
|
117
|
+
var isNT_ = isNT(bookId);
|
|
118
|
+
|
|
119
|
+
function setState(newState) {
|
|
120
|
+
setState_(function (prevState) {
|
|
121
|
+
return _objectSpread(_objectSpread({}, prevState), newState);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (usingUserBranch) {
|
|
126
|
+
httpConfig = _objectSpread(_objectSpread({}, httpConfig), {}, {
|
|
127
|
+
cache: {
|
|
128
|
+
maxAge: 0
|
|
129
|
+
}
|
|
130
|
+
}); // disable http caching
|
|
131
|
+
}
|
|
132
|
+
|
|
87
133
|
var _useScriptureSettings = useScriptureSettings({
|
|
88
134
|
isNT: isNT,
|
|
89
135
|
title: title,
|
|
90
136
|
verse: verse,
|
|
91
137
|
owner: owner,
|
|
92
138
|
bookId: bookId,
|
|
93
|
-
appRef:
|
|
139
|
+
appRef: ref,
|
|
94
140
|
server: server,
|
|
95
141
|
cardNum: cardNum,
|
|
96
142
|
chapter: chapter,
|
|
@@ -100,20 +146,77 @@ export default function ScriptureCard(_ref) {
|
|
|
100
146
|
useUserLocalStorage: useUserLocalStorage,
|
|
101
147
|
disableWordPopover: disableWordPopover,
|
|
102
148
|
originalLanguageOwner: originalLanguageOwner,
|
|
103
|
-
setUrlError: setUrlError
|
|
149
|
+
setUrlError: function setUrlError(error) {
|
|
150
|
+
return setState({
|
|
151
|
+
urlError: error
|
|
152
|
+
});
|
|
153
|
+
},
|
|
104
154
|
httpConfig: httpConfig,
|
|
105
155
|
greekRepoUrl: greekRepoUrl,
|
|
106
|
-
hebrewRepoUrl: hebrewRepoUrl
|
|
156
|
+
hebrewRepoUrl: hebrewRepoUrl,
|
|
157
|
+
wholeBook: true
|
|
107
158
|
}),
|
|
159
|
+
isNewTestament = _useScriptureSettings.isNewTestament,
|
|
108
160
|
scriptureConfig = _useScriptureSettings.scriptureConfig,
|
|
109
161
|
setScripture = _useScriptureSettings.setScripture,
|
|
110
|
-
|
|
162
|
+
scriptureSettings = _useScriptureSettings.scriptureSettings,
|
|
163
|
+
scriptureVersionHist = _useScriptureSettings.scriptureVersionHist; // @ts-ignore
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
var cardResourceId = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso = scriptureConfig.resource) === null || _scriptureConfig$reso === void 0 ? void 0 : _scriptureConfig$reso.projectId) || resourceId;
|
|
167
|
+
var currentVerseData_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$vers = scriptureConfig.versesForRef) === null || _scriptureConfig$vers === void 0 ? void 0 : _scriptureConfig$vers[currentVerseNum]) || null;
|
|
168
|
+
var initialVerseObjects = (currentVerseData_ === null || currentVerseData_ === void 0 ? void 0 : (_currentVerseData_$ve = currentVerseData_.verseData) === null || _currentVerseData_$ve === void 0 ? void 0 : _currentVerseData_$ve.verseObjects) || null; // @ts-ignore
|
|
169
|
+
|
|
170
|
+
var ref_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso2 = scriptureConfig.resource) === null || _scriptureConfig$reso2 === void 0 ? void 0 : _scriptureConfig$reso2.ref) || appRef;
|
|
171
|
+
var canUseEditBranch = loggedInUser && authentication && resourceId !== ORIGINAL_SOURCE && (ref_ === 'master' || ref_.substring(0, loggedInUser.length) === loggedInUser); // not tag
|
|
172
|
+
|
|
173
|
+
var _useUserBranch = useUserBranch({
|
|
174
|
+
owner: owner,
|
|
175
|
+
server: server,
|
|
176
|
+
appRef: appRef,
|
|
177
|
+
languageId: languageId,
|
|
178
|
+
cardId: id,
|
|
179
|
+
loggedInUser: canUseEditBranch ? loggedInUser : null,
|
|
180
|
+
authentication: canUseEditBranch ? authentication : null,
|
|
181
|
+
cardResourceId: cardResourceId,
|
|
182
|
+
onResourceError: onResourceError,
|
|
183
|
+
useUserLocalStorage: useUserLocalStorage
|
|
184
|
+
}),
|
|
185
|
+
_useUserBranch$state = _useUserBranch.state,
|
|
186
|
+
workingResourceBranch = _useUserBranch$state.workingResourceBranch,
|
|
187
|
+
usingUserBranch_ = _useUserBranch$state.usingUserBranch,
|
|
188
|
+
startEditBranch = _useUserBranch.actions.startEdit;
|
|
111
189
|
|
|
190
|
+
var workingRef = canUseEditBranch ? workingResourceBranch : appRef;
|
|
191
|
+
var reference_ = {
|
|
192
|
+
bookId: bookId,
|
|
193
|
+
chapter: chapter,
|
|
194
|
+
verse: verse
|
|
195
|
+
};
|
|
112
196
|
var scriptureTitle;
|
|
113
197
|
React.useEffect(function () {
|
|
114
|
-
|
|
198
|
+
// select correct working ref - could be master, user branch, or release
|
|
199
|
+
if (usingUserBranch_ !== usingUserBranch) {
|
|
200
|
+
setState({
|
|
201
|
+
usingUserBranch: usingUserBranch_
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}, [usingUserBranch_, usingUserBranch]);
|
|
205
|
+
React.useEffect(function () {
|
|
206
|
+
// select correct working ref - could be master, user branch, or release
|
|
207
|
+
var workingRef_ = workingRef || appRef;
|
|
115
208
|
|
|
116
|
-
|
|
209
|
+
if (ref !== workingRef_) {
|
|
210
|
+
setState({
|
|
211
|
+
ref: workingRef_
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}, [workingRef, ref, appRef]);
|
|
215
|
+
React.useEffect(function () {
|
|
216
|
+
var _scriptureConfig$reso3;
|
|
217
|
+
|
|
218
|
+
// update display status if error
|
|
219
|
+
var error = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso3 = scriptureConfig.resourceStatus) === null || _scriptureConfig$reso3 === void 0 ? void 0 : _scriptureConfig$reso3[ERROR_STATE];
|
|
117
220
|
|
|
118
221
|
if (error) {
|
|
119
222
|
// if error was found do callback
|
|
@@ -121,11 +224,11 @@ export default function ScriptureCard(_ref) {
|
|
|
121
224
|
|
|
122
225
|
var _resourceLink = getResourceLink(scriptureConfig);
|
|
123
226
|
|
|
124
|
-
var message = getResourceMessage(resourceStatus, server, _resourceLink,
|
|
227
|
+
var message = getResourceMessage(resourceStatus, server, _resourceLink, isNT_);
|
|
125
228
|
var isAccessError = resourceStatus[MANIFEST_NOT_LOADED_ERROR];
|
|
126
229
|
onResourceError && onResourceError(message, isAccessError, resourceStatus);
|
|
127
230
|
}
|
|
128
|
-
}, [scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$
|
|
231
|
+
}, [scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso4 = scriptureConfig.resourceStatus) === null || _scriptureConfig$reso4 === void 0 ? void 0 : _scriptureConfig$reso4[ERROR_STATE], onResourceError]);
|
|
129
232
|
|
|
130
233
|
if (scriptureConfig.title && scriptureConfig.version) {
|
|
131
234
|
scriptureTitle = "".concat(scriptureConfig.title, " v").concat(scriptureConfig.version);
|
|
@@ -151,11 +254,13 @@ export default function ScriptureCard(_ref) {
|
|
|
151
254
|
|
|
152
255
|
function onMenuClose() {
|
|
153
256
|
// console.log(`onMenuClose()`)
|
|
154
|
-
|
|
257
|
+
setState({
|
|
258
|
+
urlError: null
|
|
259
|
+
});
|
|
155
260
|
} // @ts-ignore
|
|
156
261
|
|
|
157
262
|
|
|
158
|
-
var languageId_ = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$
|
|
263
|
+
var languageId_ = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso5 = scriptureConfig.resource) === null || _scriptureConfig$reso5 === void 0 ? void 0 : _scriptureConfig$reso5.languageId;
|
|
159
264
|
var language = getLanguage({
|
|
160
265
|
languageId: languageId_
|
|
161
266
|
});
|
|
@@ -188,40 +293,42 @@ export default function ScriptureCard(_ref) {
|
|
|
188
293
|
setItemIndex = _useCardState$actions.setItemIndex,
|
|
189
294
|
setMarkdownView = _useCardState$actions.setMarkdownView;
|
|
190
295
|
|
|
191
|
-
var refStyle = {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
296
|
+
var refStyle = React.useMemo(function () {
|
|
297
|
+
return {
|
|
298
|
+
fontFamily: 'Noto Sans',
|
|
299
|
+
fontSize: "".concat(Math.round(scaledFontSize * 0.9), "%")
|
|
300
|
+
};
|
|
301
|
+
}, [scaledFontSize]);
|
|
302
|
+
var contentStyle = React.useMemo(function () {
|
|
303
|
+
return {
|
|
304
|
+
fontFamily: 'Noto Sans',
|
|
305
|
+
fontSize: "".concat(scaledFontSize, "%")
|
|
306
|
+
};
|
|
307
|
+
}, [scaledFontSize]);
|
|
199
308
|
var scriptureLabel = /*#__PURE__*/React.createElement(Title, null, scriptureTitle);
|
|
200
309
|
var disableWordPopover_ = disableWordPopover;
|
|
310
|
+
var usingOriginalBible = isOriginalBible((_scriptureConfig$reso6 = scriptureConfig['resource']) === null || _scriptureConfig$reso6 === void 0 ? void 0 : _scriptureConfig$reso6.projectId);
|
|
201
311
|
|
|
202
312
|
if (disableWordPopover === undefined) {
|
|
203
|
-
var _scriptureConfig$reso4;
|
|
204
|
-
|
|
205
313
|
// if not specified, then determine if original language resource
|
|
206
|
-
disableWordPopover_ = !
|
|
314
|
+
disableWordPopover_ = !usingOriginalBible;
|
|
207
315
|
}
|
|
208
316
|
|
|
209
317
|
React.useEffect(function () {
|
|
318
|
+
// pre-cache glosses on verse change
|
|
210
319
|
var fetchGlossDataForVerse = /*#__PURE__*/function () {
|
|
211
320
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
212
|
-
var _scriptureConfig$vers;
|
|
213
|
-
|
|
214
321
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
215
322
|
while (1) {
|
|
216
323
|
switch (_context.prev = _context.next) {
|
|
217
324
|
case 0:
|
|
218
|
-
if (!(!disableWordPopover &&
|
|
325
|
+
if (!(!disableWordPopover && initialVerseObjects && fetchGlossesForVerse)) {
|
|
219
326
|
_context.next = 3;
|
|
220
327
|
break;
|
|
221
328
|
}
|
|
222
329
|
|
|
223
330
|
_context.next = 3;
|
|
224
|
-
return fetchGlossesForVerse(
|
|
331
|
+
return fetchGlossesForVerse(initialVerseObjects, languageId_);
|
|
225
332
|
|
|
226
333
|
case 3:
|
|
227
334
|
case "end":
|
|
@@ -237,7 +344,82 @@ export default function ScriptureCard(_ref) {
|
|
|
237
344
|
}();
|
|
238
345
|
|
|
239
346
|
fetchGlossDataForVerse();
|
|
240
|
-
}, [
|
|
347
|
+
}, [initialVerseObjects, disableWordPopover, languageId_, fetchGlossesForVerse]);
|
|
348
|
+
var enableEdit = !usingOriginalBible;
|
|
349
|
+
var enableAlignment = !usingOriginalBible;
|
|
350
|
+
var originalRepoUrl = isNewTestament ? greekRepoUrl : hebrewRepoUrl;
|
|
351
|
+
|
|
352
|
+
var _useScriptureAlignmen = useScriptureAlignmentEdit({
|
|
353
|
+
authentication: canUseEditBranch ? authentication : null,
|
|
354
|
+
enableEdit: enableEdit,
|
|
355
|
+
enableAlignment: enableAlignment,
|
|
356
|
+
httpConfig: httpConfig,
|
|
357
|
+
initialVerseObjects: initialVerseObjects,
|
|
358
|
+
isNewTestament: isNewTestament,
|
|
359
|
+
// @ts-ignore
|
|
360
|
+
loggedInUser: canUseEditBranch ? loggedInUser : null,
|
|
361
|
+
originalLanguageOwner: originalLanguageOwner,
|
|
362
|
+
originalRepoUrl: originalRepoUrl,
|
|
363
|
+
// @ts-ignore
|
|
364
|
+
scriptureConfig: scriptureConfig,
|
|
365
|
+
scriptureSettings: scriptureSettings,
|
|
366
|
+
startEditBranch: startEditBranch,
|
|
367
|
+
bookIndex: bookIndex,
|
|
368
|
+
workingResourceBranch: ref,
|
|
369
|
+
currentVerseNum: currentVerseNum
|
|
370
|
+
}),
|
|
371
|
+
_useScriptureAlignmen2 = _useScriptureAlignmen.actions,
|
|
372
|
+
cancelAlignment = _useScriptureAlignmen2.cancelAlignment,
|
|
373
|
+
currentVerseObjects = _useScriptureAlignmen2.currentVerseObjects,
|
|
374
|
+
handleAlignmentClick = _useScriptureAlignmen2.handleAlignmentClick,
|
|
375
|
+
onAlignmentsChange = _useScriptureAlignmen2.onAlignmentsChange,
|
|
376
|
+
saveAlignment = _useScriptureAlignmen2.saveAlignment,
|
|
377
|
+
setEditing = _useScriptureAlignmen2.setEditing,
|
|
378
|
+
setVerseChanged = _useScriptureAlignmen2.setVerseChanged,
|
|
379
|
+
saveChangesToCloud = _useScriptureAlignmen2.saveChangesToCloud,
|
|
380
|
+
_useScriptureAlignmen3 = _useScriptureAlignmen.state,
|
|
381
|
+
aligned = _useScriptureAlignmen3.aligned,
|
|
382
|
+
alignerData = _useScriptureAlignmen3.alignerData,
|
|
383
|
+
editing = _useScriptureAlignmen3.editing,
|
|
384
|
+
unsavedChanges = _useScriptureAlignmen3.unsavedChanges;
|
|
385
|
+
|
|
386
|
+
React.useEffect(function () {
|
|
387
|
+
// set saved changes whenever user edits verse text or alignments or if alignments are open
|
|
388
|
+
var unsavedChanges_ = unsavedChanges || alignerData;
|
|
389
|
+
setSavedChanges && setSavedChanges(resourceId, !unsavedChanges_);
|
|
390
|
+
}, [unsavedChanges, alignerData]);
|
|
391
|
+
|
|
392
|
+
function showPopover(PopoverTitle, wordDetails, positionCoord, rawData) {
|
|
393
|
+
// TODO: make show popover pretty
|
|
394
|
+
console.log("showPopover", rawData);
|
|
395
|
+
window.prompt("User clicked on ".concat(JSON.stringify(rawData.token)));
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
var checkingState = aligned ? 'valid' : 'invalid';
|
|
399
|
+
var titleText = checkingState === 'valid' ? 'Alignment is Valid' : 'Alignment is Invalid';
|
|
400
|
+
|
|
401
|
+
var onRenderToolbar = function onRenderToolbar(_ref3) {
|
|
402
|
+
var items = _ref3.items;
|
|
403
|
+
return [].concat(_toConsumableArray(items), [/*#__PURE__*/React.createElement(IconButton, {
|
|
404
|
+
className: classes.margin,
|
|
405
|
+
key: "checking-button",
|
|
406
|
+
onClick: function onClick() {
|
|
407
|
+
return handleAlignmentClick();
|
|
408
|
+
},
|
|
409
|
+
title: titleText,
|
|
410
|
+
"aria-label": titleText,
|
|
411
|
+
style: {
|
|
412
|
+
cursor: 'pointer'
|
|
413
|
+
}
|
|
414
|
+
}, checkingState === 'valid' ? /*#__PURE__*/React.createElement(RxLink2, {
|
|
415
|
+
id: "valid_icon",
|
|
416
|
+
color: "#BBB"
|
|
417
|
+
}) : /*#__PURE__*/React.createElement(RxLinkBreak2, {
|
|
418
|
+
id: "invalid_icon",
|
|
419
|
+
color: "#000"
|
|
420
|
+
}))]);
|
|
421
|
+
};
|
|
422
|
+
|
|
241
423
|
React.useEffect(function () {
|
|
242
424
|
// check for verse range
|
|
243
425
|
var _verse = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.matchedVerse;
|
|
@@ -271,11 +453,69 @@ export default function ScriptureCard(_ref) {
|
|
|
271
453
|
onMenuClose: onMenuClose,
|
|
272
454
|
onMinimize: onMinimize ? function () {
|
|
273
455
|
return onMinimize(id);
|
|
274
|
-
} : null
|
|
275
|
-
|
|
456
|
+
} : null,
|
|
457
|
+
editable: enableEdit || enableAlignment,
|
|
458
|
+
saved: !unsavedChanges,
|
|
459
|
+
onSaveEdit: saveChangesToCloud,
|
|
460
|
+
onBlur: function onBlur() {
|
|
461
|
+
return setEditing(false);
|
|
462
|
+
},
|
|
463
|
+
onRenderToolbar: onRenderToolbar
|
|
464
|
+
}, alignerData ? /*#__PURE__*/React.createElement("div", {
|
|
465
|
+
style: {
|
|
466
|
+
flexDirection: 'column'
|
|
467
|
+
}
|
|
468
|
+
}, /*#__PURE__*/React.createElement(WordAligner, {
|
|
469
|
+
style: {
|
|
470
|
+
maxHeight: '450px',
|
|
471
|
+
overflowY: 'auto'
|
|
472
|
+
},
|
|
473
|
+
verseAlignments: alignerData.alignments,
|
|
474
|
+
targetWords: alignerData.wordBank,
|
|
475
|
+
translate: translate,
|
|
476
|
+
contextId: {
|
|
477
|
+
reference: reference_
|
|
478
|
+
},
|
|
479
|
+
targetLanguage: language,
|
|
480
|
+
targetLanguageFont: '',
|
|
481
|
+
sourceLanguage: isNT_ ? NT_ORIG_LANG : OT_ORIG_LANG,
|
|
482
|
+
showPopover: showPopover,
|
|
483
|
+
lexicons: {},
|
|
484
|
+
loadLexiconEntry: getLexiconData,
|
|
485
|
+
onChange: function onChange(results) {
|
|
486
|
+
return onAlignmentsChange(results);
|
|
487
|
+
}
|
|
488
|
+
}), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("div", {
|
|
489
|
+
style: {
|
|
490
|
+
width: '100%'
|
|
491
|
+
}
|
|
492
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
493
|
+
disabled: false,
|
|
494
|
+
className: classes.margin,
|
|
495
|
+
key: "alignment-save",
|
|
496
|
+
onClick: function onClick() {
|
|
497
|
+
return saveAlignment();
|
|
498
|
+
},
|
|
499
|
+
"aria-label": 'Alignment Save'
|
|
500
|
+
}, /*#__PURE__*/React.createElement(CheckOutlinedIcon, {
|
|
501
|
+
id: "alignment-save-icon",
|
|
502
|
+
htmlColor: "#000"
|
|
503
|
+
})), /*#__PURE__*/React.createElement(IconButton, {
|
|
504
|
+
disabled: false,
|
|
505
|
+
className: classes.margin,
|
|
506
|
+
key: "alignment-cancel",
|
|
507
|
+
onClick: function onClick() {
|
|
508
|
+
return cancelAlignment();
|
|
509
|
+
},
|
|
510
|
+
"aria-label": 'Alignment Cancel'
|
|
511
|
+
}, /*#__PURE__*/React.createElement(CancelOutlinedIcon, {
|
|
512
|
+
id: "alignment-cancel-icon",
|
|
513
|
+
htmlColor: "#000"
|
|
514
|
+
})))) : /*#__PURE__*/React.createElement(ScripturePane, _extends({
|
|
276
515
|
refStyle: refStyle
|
|
277
516
|
}, scriptureConfig, {
|
|
278
|
-
|
|
517
|
+
verseObjects: currentVerseObjects,
|
|
518
|
+
isNT: isNT_,
|
|
279
519
|
server: server,
|
|
280
520
|
reference: reference,
|
|
281
521
|
direction: direction,
|
|
@@ -283,11 +523,14 @@ export default function ScriptureCard(_ref) {
|
|
|
283
523
|
fontSize: fontSize,
|
|
284
524
|
disableWordPopover: disableWordPopover_,
|
|
285
525
|
getLexiconData: getLexiconData,
|
|
286
|
-
translate: translate
|
|
526
|
+
translate: translate,
|
|
527
|
+
editing: editing,
|
|
528
|
+
setEditing: setEditing,
|
|
529
|
+
setVerseChanged: setVerseChanged
|
|
287
530
|
})));
|
|
288
531
|
}
|
|
289
532
|
ScriptureCard.propTypes = {
|
|
290
|
-
/** identifier to use for card */
|
|
533
|
+
/** html identifier to use for card */
|
|
291
534
|
id: PropTypes.string,
|
|
292
535
|
|
|
293
536
|
/** method to determine if NT or OT */
|
|
@@ -372,7 +615,19 @@ ScriptureCard.propTypes = {
|
|
|
372
615
|
/** function to minimize the card (optional) */
|
|
373
616
|
onMinimize: PropTypes.func,
|
|
374
617
|
|
|
618
|
+
/** user-name */
|
|
619
|
+
loggedInUser: PropTypes.string,
|
|
620
|
+
|
|
621
|
+
/** authentication info */
|
|
622
|
+
authentication: PropTypes.object,
|
|
623
|
+
|
|
624
|
+
/** function to set state in app that there are unsaved changes */
|
|
625
|
+
setSavedChanges: PropTypes.func,
|
|
626
|
+
|
|
627
|
+
/** index for current book (e.g. '01' for 'gen')*/
|
|
628
|
+
bookIndex: PropTypes.string,
|
|
629
|
+
|
|
375
630
|
/** callback to indicate that we are using a verse range here */
|
|
376
631
|
addVerseRange: PropTypes.func
|
|
377
632
|
};
|
|
378
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJDYXJkIiwidXNlQ2FyZFN0YXRlIiwiRVJST1JfU1RBVEUiLCJNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJnZXRSZXNvdXJjZUxpbmsiLCJnZXRSZXNvdXJjZU1lc3NhZ2UiLCJnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3MiLCJpc09yaWdpbmFsQmlibGUiLCJUaXRsZSIsIktFWV9GT05UX1NJWkVfQkFTRSIsImxhYmVsIiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3aWR0aCIsIlNjcmlwdHVyZUNhcmQiLCJpZCIsImlzTlQiLCJ0aXRsZSIsInNlcnZlciIsImFwcFJlZiIsImNhcmROdW0iLCJjbGFzc2VzIiwicmVzb3VyY2UiLCJvd25lciIsImxhbmd1YWdlSWQiLCJyZXNvdXJjZUlkIiwib3JpZ2luYWxMYW5ndWFnZU93bmVyIiwiZ2V0TGFuZ3VhZ2UiLCJyZWZlcmVuY2UiLCJ2ZXJzZSIsImNoYXB0ZXIiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJyZXNvdXJjZUxpbmsiLCJ1c2VVc2VyTG9jYWxTdG9yYWdlIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwib25SZXNvdXJjZUVycm9yIiwiaHR0cENvbmZpZyIsImdyZWVrUmVwb1VybCIsImhlYnJld1JlcG9VcmwiLCJnZXRMZXhpY29uRGF0YSIsImZldGNoR2xvc3Nlc0ZvclZlcnNlIiwidHJhbnNsYXRlIiwib25NaW5pbWl6ZSIsImFkZFZlcnNlUmFuZ2UiLCJ1c2VTdGF0ZSIsInVybEVycm9yIiwic2V0VXJsRXJyb3IiLCJmb250U2l6ZSIsInNldEZvbnRTaXplIiwic2NyaXB0dXJlQ29uZmlnIiwic2V0U2NyaXB0dXJlIiwic2NyaXB0dXJlVmVyc2lvbkhpc3QiLCJzY3JpcHR1cmVUaXRsZSIsInVzZUVmZmVjdCIsImVycm9yIiwicmVzb3VyY2VTdGF0dXMiLCJtZXNzYWdlIiwiaXNBY2Nlc3NFcnJvciIsInZlcnNpb24iLCJ1cGRhdGVUaXRsZSIsImdldFNjcmlwdHVyZVNlbGVjdG9yIiwic2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnIiwib25NZW51Q2xvc2UiLCJsYW5ndWFnZUlkXyIsImxhbmd1YWdlIiwiZGlyZWN0aW9uIiwiaXNIZWJyZXciLCJmb250RmFjdG9yIiwic2NhbGVkRm9udFNpemUiLCJtYXRjaGVkVmVyc2UiLCJpdGVtcyIsInN0YXRlIiwiaGVhZGVycyIsImZpbHRlcnMiLCJpdGVtSW5kZXgiLCJtYXJrZG93blZpZXciLCJhY3Rpb25zIiwic2V0RmlsdGVycyIsInNldEl0ZW1JbmRleCIsInNldE1hcmtkb3duVmlldyIsInJlZlN0eWxlIiwiZm9udEZhbWlseSIsIk1hdGgiLCJyb3VuZCIsImNvbnRlbnRTdHlsZSIsInNjcmlwdHVyZUxhYmVsIiwiZGlzYWJsZVdvcmRQb3BvdmVyXyIsInVuZGVmaW5lZCIsImZldGNoR2xvc3NEYXRhRm9yVmVyc2UiLCJ2ZXJzZU9iamVjdHMiLCJsZW5ndGgiLCJfdmVyc2UiLCJpbmNsdWRlcyIsInByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJib29sIiwib2JqZWN0IiwiYW55Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUtBLEtBQVosTUFBdUIsT0FBdkI7QUFDQSxPQUFPLEtBQUtDLFNBQVosTUFBMkIsWUFBM0I7QUFDQSxTQUNFQyxJQURGLEVBRUVDLFlBRkYsRUFHRUMsV0FIRixFQUlFQyx5QkFKRixRQUtPLHVCQUxQO0FBTUEsU0FBU0MsYUFBVCxFQUF3QkMsaUJBQXhCLFFBQWlELElBQWpEO0FBQ0EsU0FBU0Msb0JBQVQsUUFBcUMsa0NBQXJD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QkFBb0IsRUFBRTdDLFNBQVMsQ0FBQ29HLElBeERSOztBQXlEeEI7QUFDQXRELEVBQUFBLFNBQVMsRUFBRTlDLFNBQVMsQ0FBQ29HLElBMURHOztBQTJEeEI7QUFDQXJELEVBQUFBLFVBQVUsRUFBRS9DLFNBQVMsQ0FBQ29HLElBNURFOztBQTZEeEI7QUFDQXBELEVBQUFBLGFBQWEsRUFBRWhELFNBQVMsQ0FBQ29HO0FBOURELENBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7XG4gIENhcmQsXG4gIHVzZUNhcmRTdGF0ZSxcbiAgRVJST1JfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgZ2V0UmVzb3VyY2VMaW5rLFxuICBnZXRSZXNvdXJjZU1lc3NhZ2UsXG4gIGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyxcbiAgaXNPcmlnaW5hbEJpYmxlLFxufSBmcm9tICcuLi8uLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vU2NyaXB0dXJlUGFuZS9zdHlsZWQnXG5cbmNvbnN0IEtFWV9GT05UX1NJWkVfQkFTRSA9ICdzY3JpcHR1cmVQYW5lRm9udFNpemVfJ1xuY29uc3QgbGFiZWwgPSAnVmVyc2lvbidcbmNvbnN0IHN0eWxlID0geyBtYXJnaW5Ub3A6ICcxNnB4Jywgd2lkdGg6ICc1MDBweCcgfVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTY3JpcHR1cmVDYXJkKHtcbiAgaWQsXG4gIGlzTlQsXG4gIHRpdGxlLFxuICBzZXJ2ZXIsXG4gIGFwcFJlZixcbiAgY2FyZE51bSxcbiAgY2xhc3NlcyxcbiAgcmVzb3VyY2U6IHtcbiAgICBvd25lcixcbiAgICBsYW5ndWFnZUlkLFxuICAgIHJlc291cmNlSWQsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICB9LFxuICBnZXRMYW5ndWFnZSxcbiAgcmVmZXJlbmNlOiB7XG4gICAgdmVyc2UsXG4gICAgY2hhcHRlcixcbiAgICBwcm9qZWN0SWQ6IGJvb2tJZCxcbiAgfSxcbiAgcmVzb3VyY2VMaW5rLFxuICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICBkaXNhYmxlV29yZFBvcG92ZXIsXG4gIG9uUmVzb3VyY2VFcnJvcixcbiAgaHR0cENvbmZpZyxcbiAgZ3JlZWtSZXBvVXJsLFxuICBoZWJyZXdSZXBvVXJsLFxuICBnZXRMZXhpY29uRGF0YSxcbiAgZmV0Y2hHbG9zc2VzRm9yVmVyc2UsXG4gIHRyYW5zbGF0ZSxcbiAgb25NaW5pbWl6ZSxcbiAgYWRkVmVyc2VSYW5nZSxcbn0pIHtcbiAgY29uc3QgW3VybEVycm9yLCBzZXRVcmxFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKVxuICBjb25zdCBbZm9udFNpemUsIHNldEZvbnRTaXplXSA9IHVzZVVzZXJMb2NhbFN0b3JhZ2UoS0VZX0ZPTlRfU0laRV9CQVNFICsgY2FyZE51bSwgMTAwKVxuICBjb25zdCB7XG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNldFNjcmlwdHVyZSxcbiAgICBzY3JpcHR1cmVWZXJzaW9uSGlzdCxcbiAgfSA9IHVzZVNjcmlwdHVyZVNldHRpbmdzKHtcbiAgICBpc05ULFxuICAgIHRpdGxlLFxuICAgIHZlcnNlLFxuICAgIG93bmVyLFxuICAgIGJvb2tJZCxcbiAgICBhcHBSZWYsXG4gICAgc2VydmVyLFxuICAgIGNhcmROdW0sXG4gICAgY2hhcHRlcixcbiAgICBsYW5ndWFnZUlkLFxuICAgIHJlc291cmNlSWQsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICBzZXRVcmxFcnJvcixcbiAgICBodHRwQ29uZmlnLFxuICAgIGdyZWVrUmVwb1VybCxcbiAgICBoZWJyZXdSZXBvVXJsLFxuICB9KVxuXG4gIGxldCBzY3JpcHR1cmVUaXRsZVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdXG5cbiAgICBpZiAoZXJyb3IpIHsgLy8gaWYgZXJyb3Igd2FzIGZvdW5kIGRvIGNhbGxiYWNrXG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXNcbiAgICAgIGNvbnN0IHJlc291cmNlTGluayA9IGdldFJlc291cmNlTGluayhzY3JpcHR1cmVDb25maWcpXG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2V0UmVzb3VyY2VNZXNzYWdlKHJlc291cmNlU3RhdHVzLCBzZXJ2ZXIsIHJlc291cmNlTGluaywgaXNOVChib29rSWQpKVxuICAgICAgY29uc3QgaXNBY2Nlc3NFcnJvciA9IHJlc291cmNlU3RhdHVzW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdXG4gICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG1lc3NhZ2UsIGlzQWNjZXNzRXJyb3IsIHJlc291cmNlU3RhdHVzKVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1dKVxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcudGl0bGUgJiYgc2NyaXB0dXJlQ29uZmlnLnZlcnNpb24pIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGAke3NjcmlwdHVyZUNvbmZpZy50aXRsZX0gdiR7c2NyaXB0dXJlQ29uZmlnLnZlcnNpb259YFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LnVwZGF0ZVRpdGxlKHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssIHNjcmlwdHVyZVRpdGxlKVxuICB9IGVsc2Uge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYFRpdGxlIG1pc3NpbmcgZnJvbSBwcm9qZWN0IG1hbmlmZXN0YFxuICB9XG5cbiAgLyoqIER5bmFtaWNhbGx5IGNyZWF0ZXMgdGhlIHNjcmlwdHVyZSBzZWxlY3Rpb24gZHJvcGRvd24gdG8gYmUgaW5zZXJ0ZWQgaW50byBjYXJkIHNldHRpbmdzICovXG4gIGZ1bmN0aW9uIGdldFNjcmlwdHVyZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IHNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyA9IGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyh7XG4gICAgICBsYWJlbCxcbiAgICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluayxcbiAgICAgIHNldFNjcmlwdHVyZSxcbiAgICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICAgIH0pXG5cbiAgICByZXR1cm4gPFNjcmlwdHVyZVNlbGVjdG9yIHsuLi5zY3JpcHR1cmVTZWxlY3Rpb25Db25maWd9IHN0eWxlPXtzdHlsZX0gZXJyb3JNZXNzYWdlPXt1cmxFcnJvcn0gLz5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBvbk1lbnVDbG9zZSgpYClcbiAgICBzZXRVcmxFcnJvcihudWxsKSAvLyBjbGVhciBhbnkgZXJyb3IgbWVzc2FnZXNcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbGFuZ3VhZ2VJZF8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkXG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoeyBsYW5ndWFnZUlkOiBsYW5ndWFnZUlkXyB9KVxuICBjb25zdCBkaXJlY3Rpb24gPSAobGFuZ3VhZ2U/LmRpcmVjdGlvbikgfHwgJ2x0cidcbiAgY29uc3QgcmVmZXJlbmNlID0geyAuLi5zY3JpcHR1cmVDb25maWcucmVmZXJlbmNlIH1cblxuICBjb25zdCBpc0hlYnJldyA9IChsYW5ndWFnZUlkXyA9PT0gJ2hibycpXG4gIGNvbnN0IGZvbnRGYWN0b3IgPSBpc0hlYnJldyA/IDEuNCA6IDEgLy8gd2UgYXV0b21hdGljYWxseSBzY2FsZSB1cCBmb250IHNpemUgZm9yIEhlYnJld1xuICBjb25zdCBzY2FsZWRGb250U2l6ZSA9IGZvbnRTaXplICogZm9udEZhY3RvclxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcubWF0Y2hlZFZlcnNlKSB7IC8vIHN1cHBvcnQgdmVyc2UgcmFuZ2VzXG4gICAgcmVmZXJlbmNlLnZlcnNlID0gc2NyaXB0dXJlQ29uZmlnLm1hdGNoZWRWZXJzZVxuICB9XG5cbiAgY29uc3QgaXRlbXMgPSBudWxsXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgaGVhZGVycywgZmlsdGVycywgaXRlbUluZGV4LCBtYXJrZG93blZpZXcsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZXRGaWx0ZXJzLCBzZXRJdGVtSW5kZXgsIHNldE1hcmtkb3duVmlldyxcbiAgICB9LFxuICB9ID0gdXNlQ2FyZFN0YXRlKHsgaXRlbXMgfSlcblxuICBjb25zdCByZWZTdHlsZSA9IHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7TWF0aC5yb3VuZChzY2FsZWRGb250U2l6ZSAqIDAuOSl9JWAsXG4gIH1cblxuICBjb25zdCBjb250ZW50U3R5bGUgPSB7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke3NjYWxlZEZvbnRTaXplfSVgLFxuICB9XG5cbiAgY29uc3Qgc2NyaXB0dXJlTGFiZWwgPSA8VGl0bGU+e3NjcmlwdHVyZVRpdGxlfTwvVGl0bGU+XG4gIGxldCBkaXNhYmxlV29yZFBvcG92ZXJfID0gZGlzYWJsZVdvcmRQb3BvdmVyXG5cbiAgaWYgKGRpc2FibGVXb3JkUG9wb3ZlciA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBzcGVjaWZpZWQsIHRoZW4gZGV0ZXJtaW5lIGlmIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyXyA9ICFpc09yaWdpbmFsQmlibGUoc2NyaXB0dXJlQ29uZmlnWydyZXNvdXJjZSddPy5wcm9qZWN0SWQpXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZldGNoR2xvc3NEYXRhRm9yVmVyc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVXb3JkUG9wb3ZlciAmJiBzY3JpcHR1cmVDb25maWc/LnZlcnNlT2JqZWN0cz8ubGVuZ3RoICYmIGZldGNoR2xvc3Nlc0ZvclZlcnNlKSB7XG4gICAgICAgIGF3YWl0IGZldGNoR2xvc3Nlc0ZvclZlcnNlKHNjcmlwdHVyZUNvbmZpZz8udmVyc2VPYmplY3RzLCBsYW5ndWFnZUlkXylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaEdsb3NzRGF0YUZvclZlcnNlKClcbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8udmVyc2VPYmplY3RzXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIGNoZWNrIGZvciB2ZXJzZSByYW5nZVxuICAgIGNvbnN0IF92ZXJzZSA9IHNjcmlwdHVyZUNvbmZpZz8ubWF0Y2hlZFZlcnNlXG5cbiAgICBpZiAoYWRkVmVyc2VSYW5nZSAmJiAodHlwZW9mIF92ZXJzZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpZiAoX3ZlcnNlLmluY2x1ZGVzKCctJykpIHtcbiAgICAgICAgYWRkVmVyc2VSYW5nZShgJHtzY3JpcHR1cmVDb25maWc/LnJlZmVyZW5jZT8uY2hhcHRlcn06JHtfdmVyc2V9YClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzY3JpcHR1cmVDb25maWc/Lm1hdGNoZWRWZXJzZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZFxuICAgICAgaWQ9e2BzY3JpcHR1cmVfY2FyZF8ke2NhcmROdW19YH1cbiAgICAgIHRpdGxlPXtzY3JpcHR1cmVMYWJlbH1cbiAgICAgIHNldHRpbmdzVGl0bGU9e3NjcmlwdHVyZVRpdGxlICsgJyBTZXR0aW5ncyd9XG4gICAgICBpdGVtcz17aXRlbXN9XG4gICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgaGVhZGVycz17aGVhZGVyc31cbiAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICBpdGVtSW5kZXg9e2l0ZW1JbmRleH1cbiAgICAgIHNldEZpbHRlcnM9e3NldEZpbHRlcnN9XG4gICAgICBzZXRGb250U2l6ZT17c2V0Rm9udFNpemV9XG4gICAgICBzZXRJdGVtSW5kZXg9e3NldEl0ZW1JbmRleH1cbiAgICAgIG1hcmtkb3duVmlldz17bWFya2Rvd25WaWV3fVxuICAgICAgc2V0TWFya2Rvd25WaWV3PXtzZXRNYXJrZG93blZpZXd9XG4gICAgICBnZXRDdXN0b21Db21wb25lbnQ9e2dldFNjcmlwdHVyZVNlbGVjdG9yfVxuICAgICAgaGlkZU1hcmtkb3duVG9nZ2xlXG4gICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICBvbk1pbmltaXplPXtvbk1pbmltaXplID8gKCkgPT4gb25NaW5pbWl6ZShpZCkgOiBudWxsfVxuICAgID5cbiAgICAgIDxTY3JpcHR1cmVQYW5lXG4gICAgICAgIHJlZlN0eWxlPXtyZWZTdHlsZX1cbiAgICAgICAgey4uLnNjcmlwdHVyZUNvbmZpZ31cbiAgICAgICAgaXNOVD17aXNOVChib29rSWQpfVxuICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgcmVmZXJlbmNlPXtyZWZlcmVuY2V9XG4gICAgICAgIGRpcmVjdGlvbj17ZGlyZWN0aW9ufVxuICAgICAgICBjb250ZW50U3R5bGU9e2NvbnRlbnRTdHlsZX1cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBkaXNhYmxlV29yZFBvcG92ZXI9e2Rpc2FibGVXb3JkUG9wb3Zlcl99XG4gICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAvPlxuICAgIDwvQ2FyZD5cbiAgKVxufVxuXG5TY3JpcHR1cmVDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqIGlkZW50aWZpZXIgdG8gdXNlIGZvciBjYXJkICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogbWV0aG9kIHRvIGRldGVybWluZSBpZiBOVCBvciBPVCAqL1xuICBpc05UOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogdGl0bGUgZm9yIHNjcmlwdHVyZSBjYXJkICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBnZXQgbGFuZ3VhZ2UgZGV0YWlscyAqL1xuICBnZXRMYW5ndWFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHNjcmlwdHVyZSBjYXJkIG51bWJlciAoMCB0byAyIGZvciBleGFtcGxlKSAqL1xuICBjYXJkTnVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKiByZXNvdXJjZSBvYmplY3QgKi9cbiAgcmVzb3VyY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHJlc291cmNlIGxhbmd1YWdlIHRvIHVzZSAqL1xuICAgIGxhbmd1YWdlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXNvdXJjZUlkIHRvIHVzZSAoZS5nLiB1Z250KSAqL1xuICAgIHJlc291cmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBmb3Igb3JpZ2luYWwgbGFuZ3VhZ2VzIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KSxcbiAgcmVmZXJlbmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiBwcm9qZWN0SWQgKGJvb2tJRCkgdG8gdXNlICovXG4gICAgcHJvamVjdElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgY2hhcHRlciBudW1iZXIgKi9cbiAgICBjaGFwdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCB2ZXJzZSBudW1iZXIgKi9cbiAgICB2ZXJzZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gIH0pLFxuICAvKiogc2VydmVyIChlLmcuICdodHRwczovL2dpdC5kb29yNDMub3JnJykgKi9cbiAgc2VydmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiByZXBvIGJyYW5jaCBvciB0YWcgc3VjaCBhcyBtYXN0ZXIgKi9cbiAgYXBwUmVmOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBpZiB0cnVlIHRoZW4gd29yZCBkYXRhIGhvdmVyIGlzIHNob3duICovXG4gIGRpc2FibGVXb3JkUG9wb3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBDU1MgY2xhc3NlcyAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogcmVzb3VyY2VMaW5rICovXG4gIHJlc291cmNlTGluazogUHJvcFR5cGVzLmFueSxcbiAgLyoqIHVzZSBtZXRob2QgZm9yIHVzaW5nIGxvY2FsIHN0b3JhZ2Ugc3BlY2lmaWMgZm9yIHVzZXIgKi9cbiAgdXNlVXNlckxvY2FsU3RvcmFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIG9wdGlvbmFsIGNhbGxiYWNrIGlmIGVycm9yIGxvYWRpbmcgcmVzb3VyY2UsIHBhcmFtZXRlciByZXR1cm5lZCBhcmU6XG4gICAqICAgICh7c3RyaW5nfSBlcnJvck1lc3NhZ2UsIHtib29sZWFufSBpc0FjY2Vzc0Vycm9yLCB7b2JqZWN0fSByZXNvdXJjZVN0YXR1cylcbiAgICogICAgICAtIGlzQWNjZXNzRXJyb3IgLSBpcyB0cnVlIGlmIHRoaXMgd2FzIGFuIGVycm9yIHRyeWluZyB0byBhY2Nlc3MgZmlsZVxuICAgKiAgICAgIC0gcmVzb3VyY2VTdGF0dXMgLSBpcyBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHByb2JsZW1zIGZldGNoaW5nIHJlc291cmNlICovXG4gIG9uUmVzb3VyY2VFcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBodHRwIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBmZXRjaGluZyByZXNvdXJjZXMsIGRlZmF1bHQgaXMgMCAodmVyeSBsb25nIHdhaXQpICovXG4gIGh0dHBDb25maWc6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGdyZWVrIHJlcG8gKi9cbiAgZ3JlZWtSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBoZWJyZXcgcmVwbyAqL1xuICBoZWJyZXdSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogZnVuY3Rpb24gdG8gZ2V0IGxhdGVzdCBsZXhpY29uIGRhdGEgKi9cbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogZnVuY3Rpb24gdG8gcHJlLWxvYWQgbGV4aWNvbiBkYXRhIGZvciB2ZXJzZSAqL1xuICBmZXRjaEdsb3NzZXNGb3JWZXJzZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBmdW5jdGlvbiBmb3IgbG9jYWxpemF0aW9uICovXG4gIHRyYW5zbGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBtaW5pbWl6ZSB0aGUgY2FyZCAob3B0aW9uYWwpICovXG4gIG9uTWluaW1pemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgdXNpbmcgYSB2ZXJzZSByYW5nZSBoZXJlICovXG4gIGFkZFZlcnNlUmFuZ2U6IFByb3BUeXBlcy5mdW5jLFxufVxuIl19
|
|
633
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJSeExpbmsyIiwiUnhMaW5rQnJlYWsyIiwiQ2FyZCIsInVzZUNhcmRTdGF0ZSIsInVzZVVzZXJCcmFuY2giLCJFUlJPUl9TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJXb3JkQWxpZ25lciIsIkNoZWNrT3V0bGluZWRJY29uIiwiQ2FuY2VsT3V0bGluZWRJY29uIiwiSWNvbkJ1dHRvbiIsIlNjcmlwdHVyZVBhbmUiLCJTY3JpcHR1cmVTZWxlY3RvciIsInVzZVNjcmlwdHVyZVNldHRpbmdzIiwiZ2V0UmVzb3VyY2VMaW5rIiwiZ2V0UmVzb3VyY2VNZXNzYWdlIiwiZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzIiwiaXNPcmlnaW5hbEJpYmxlIiwiVGl0bGUiLCJOVF9PUklHX0xBTkciLCJPUklHSU5BTF9TT1VSQ0UiLCJPVF9PUklHX0xBTkciLCJ1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0IiwiS0VZX0ZPTlRfU0laRV9CQVNFIiwibGFiZWwiLCJzdHlsZSIsIm1hcmdpblRvcCIsIndpZHRoIiwiU2NyaXB0dXJlQ2FyZCIsImlkIiwiaXNOVCIsInRpdGxlIiwic2VydmVyIiwiYXBwUmVmIiwiY2FyZE51bSIsImNsYXNzZXMiLCJyZXNvdXJjZSIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInJlc291cmNlSWQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJnZXRMYW5ndWFnZSIsInJlZmVyZW5jZSIsInZlcnNlIiwiY2hhcHRlciIsImJvb2tJZCIsInByb2plY3RJZCIsInJlc291cmNlTGluayIsInVzZVVzZXJMb2NhbFN0b3JhZ2UiLCJkaXNhYmxlV29yZFBvcG92ZXIiLCJvblJlc291cmNlRXJyb3IiLCJodHRwQ29uZmlnIiwiZ3JlZWtSZXBvVXJsIiwiaGVicmV3UmVwb1VybCIsImdldExleGljb25EYXRhIiwiZmV0Y2hHbG9zc2VzRm9yVmVyc2UiLCJ0cmFuc2xhdGUiLCJvbk1pbmltaXplIiwibG9nZ2VkSW5Vc2VyIiwiYXV0aGVudGljYXRpb24iLCJzZXRTYXZlZENoYW5nZXMiLCJib29rSW5kZXgiLCJhZGRWZXJzZVJhbmdlIiwidXNlU3RhdGUiLCJjdXJyZW50VmVyc2VOdW0iLCJyZWYiLCJ1cmxFcnJvciIsInVzaW5nVXNlckJyYW5jaCIsInN0YXRlIiwic2V0U3RhdGVfIiwiZm9udFNpemUiLCJzZXRGb250U2l6ZSIsImlzTlRfIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNhY2hlIiwibWF4QWdlIiwic2V0VXJsRXJyb3IiLCJlcnJvciIsIndob2xlQm9vayIsImlzTmV3VGVzdGFtZW50Iiwic2NyaXB0dXJlQ29uZmlnIiwic2V0U2NyaXB0dXJlIiwic2NyaXB0dXJlU2V0dGluZ3MiLCJzY3JpcHR1cmVWZXJzaW9uSGlzdCIsImNhcmRSZXNvdXJjZUlkIiwiY3VycmVudFZlcnNlRGF0YV8iLCJ2ZXJzZXNGb3JSZWYiLCJpbml0aWFsVmVyc2VPYmplY3RzIiwidmVyc2VEYXRhIiwidmVyc2VPYmplY3RzIiwicmVmXyIsImNhblVzZUVkaXRCcmFuY2giLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJjYXJkSWQiLCJ3b3JraW5nUmVzb3VyY2VCcmFuY2giLCJ1c2luZ1VzZXJCcmFuY2hfIiwic3RhcnRFZGl0QnJhbmNoIiwiYWN0aW9ucyIsInN0YXJ0RWRpdCIsIndvcmtpbmdSZWYiLCJyZWZlcmVuY2VfIiwic2NyaXB0dXJlVGl0bGUiLCJ1c2VFZmZlY3QiLCJ3b3JraW5nUmVmXyIsInJlc291cmNlU3RhdHVzIiwibWVzc2FnZSIsImlzQWNjZXNzRXJyb3IiLCJ2ZXJzaW9uIiwidXBkYXRlVGl0bGUiLCJnZXRTY3JpcHR1cmVTZWxlY3RvciIsInNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyIsIm9uTWVudUNsb3NlIiwibGFuZ3VhZ2VJZF8iLCJsYW5ndWFnZSIsImRpcmVjdGlvbiIsImlzSGVicmV3IiwiZm9udEZhY3RvciIsInNjYWxlZEZvbnRTaXplIiwibWF0Y2hlZFZlcnNlIiwiaXRlbXMiLCJoZWFkZXJzIiwiZmlsdGVycyIsIml0ZW1JbmRleCIsIm1hcmtkb3duVmlldyIsInNldEZpbHRlcnMiLCJzZXRJdGVtSW5kZXgiLCJzZXRNYXJrZG93blZpZXciLCJyZWZTdHlsZSIsInVzZU1lbW8iLCJmb250RmFtaWx5IiwiTWF0aCIsInJvdW5kIiwiY29udGVudFN0eWxlIiwic2NyaXB0dXJlTGFiZWwiLCJkaXNhYmxlV29yZFBvcG92ZXJfIiwidXNpbmdPcmlnaW5hbEJpYmxlIiwidW5kZWZpbmVkIiwiZmV0Y2hHbG9zc0RhdGFGb3JWZXJzZSIsImVuYWJsZUVkaXQiLCJlbmFibGVBbGlnbm1lbnQiLCJvcmlnaW5hbFJlcG9VcmwiLCJjYW5jZWxBbGlnbm1lbnQiLCJjdXJyZW50VmVyc2VPYmplY3RzIiwiaGFuZGxlQWxpZ25tZW50Q2xpY2siLCJvbkFsaWdubWVudHNDaGFuZ2UiLCJzYXZlQWxpZ25tZW50Iiwic2V0RWRpdGluZyIsInNldFZlcnNlQ2hhbmdlZCIsInNhdmVDaGFuZ2VzVG9DbG91ZCIsImFsaWduZWQiLCJhbGlnbmVyRGF0YSIsImVkaXRpbmciLCJ1bnNhdmVkQ2hhbmdlcyIsInVuc2F2ZWRDaGFuZ2VzXyIsInNob3dQb3BvdmVyIiwiUG9wb3ZlclRpdGxlIiwid29yZERldGFpbHMiLCJwb3NpdGlvbkNvb3JkIiwicmF3RGF0YSIsImNvbnNvbGUiLCJsb2ciLCJ3aW5kb3ciLCJwcm9tcHQiLCJKU09OIiwic3RyaW5naWZ5IiwidG9rZW4iLCJjaGVja2luZ1N0YXRlIiwidGl0bGVUZXh0Iiwib25SZW5kZXJUb29sYmFyIiwibWFyZ2luIiwiY3Vyc29yIiwiX3ZlcnNlIiwiaW5jbHVkZXMiLCJmbGV4RGlyZWN0aW9uIiwibWF4SGVpZ2h0Iiwib3ZlcmZsb3dZIiwiYWxpZ25tZW50cyIsIndvcmRCYW5rIiwicmVzdWx0cyIsInByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJib29sIiwib2JqZWN0IiwiYW55Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBS0EsS0FBWixNQUF1QixPQUF2QjtBQUNBLE9BQU8sS0FBS0MsU0FBWixNQUEyQixZQUEzQjtBQUNBLFNBQVNDLE9BQVQsRUFBa0JDLFlBQWxCLFFBQXNDLGdCQUF0QztBQUVBLFNBQ0VDLElBREYsRUFFRUMsWUFGRixFQUdFQyxhQUhGLEVBSUVDLFdBSkYsRUFLRUMseUJBTEYsUUFNTyx1QkFOUDtBQU9BLFNBQVNDLFdBQVQsUUFBNEIsa0JBQTVCO0FBQ0EsT0FBT0MsaUJBQVAsTUFBOEIsbUNBQTlCO0FBQ0EsT0FBT0Msa0JBQVAsTUFBK0Isb0NBQS9CO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixlQUEzQjtBQUNBLFNBQVNDLGFBQVQsRUFBd0JDLGlCQUF4QixRQUFpRCxJQUFqRDtBQUNBLFNBQVNDLG9CQUFULFFBQXFDLGtDQUFyQztBQUNBLFNBQ0VDLGVBREYsRUFFRUMsa0JBRkYsRUFHRUMsMkJBSEYsRUFJRUMsZUFKRixRQUtPLCtCQUxQO0FBTUEsU0FBU0MsS0FBVCxRQUFzQix5QkFBdEI7QUFDQSxTQUNFQyxZQURGLEVBRUVDLGVBRkYsRUFHRUMsWUFIRixRQUlPLGFBSlA7QUFLQSxTQUFTQyx5QkFBVCxRQUEwQyx1Q0FBMUM7QUFFQSxJQUFNQyxrQkFBa0IsR0FBRyx3QkFBM0I7QUFDQSxJQUFNQyxLQUFLLEdBQUcsU0FBZDtBQUNBLElBQU1DLEtBQUssR0FBRztBQUFFQyxFQUFBQSxTQUFTLEVBQUUsTUFBYjtBQUFxQkMsRUFBQUEsS0FBSyxFQUFFO0FBQTVCLENBQWQ7QUFFQSxlQUFlLFNBQVNDLGFBQVQsT0FvQ1o7QUFBQTs7QUFBQSxNQW5DREMsRUFtQ0MsUUFuQ0RBLEVBbUNDO0FBQUEsTUFsQ0RDLElBa0NDLFFBbENEQSxJ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QUEsWUFBWSxFQUFFM0QsU0FBUyxDQUFDd0wsTUE5REE7O0FBK0R4QjtBQUNBNUgsRUFBQUEsY0FBYyxFQUFFNUQsU0FBUyxDQUFDK0wsTUFoRUY7O0FBaUV4QjtBQUNBbEksRUFBQUEsZUFBZSxFQUFFN0QsU0FBUyxDQUFDeUwsSUFsRUg7O0FBbUV4QjtBQUNBM0gsRUFBQUEsU0FBUyxFQUFFOUQsU0FBUyxDQUFDd0wsTUFwRUc7O0FBcUV4QjtBQUNBekgsRUFBQUEsYUFBYSxFQUFFL0QsU0FBUyxDQUFDeUw7QUF0RUQsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgUnhMaW5rMiwgUnhMaW5rQnJlYWsyIH0gZnJvbSAncmVhY3QtaWNvbnMvcngnXG5cbmltcG9ydCB7XG4gIENhcmQsXG4gIHVzZUNhcmRTdGF0ZSxcbiAgdXNlVXNlckJyYW5jaCxcbiAgRVJST1JfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IFdvcmRBbGlnbmVyIH0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCBDaGVja091dGxpbmVkSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrT3V0bGluZWQnXG5pbXBvcnQgQ2FuY2VsT3V0bGluZWRJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2FuY2VsT3V0bGluZWQnXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgZ2V0UmVzb3VyY2VMaW5rLFxuICBnZXRSZXNvdXJjZU1lc3NhZ2UsXG4gIGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyxcbiAgaXNPcmlnaW5hbEJpYmxlLFxufSBmcm9tICcuLi8uLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vU2NyaXB0dXJlUGFuZS9zdHlsZWQnXG5pbXBvcnQge1xuICBOVF9PUklHX0xBTkcsXG4gIE9SSUdJTkFMX1NPVVJDRSxcbiAgT1RfT1JJR19MQU5HLFxufSBmcm9tICcuLi8uLi91dGlscydcbmltcG9ydCB7IHVzZVNjcmlwdHVyZUFsaWdubWVudEVkaXQgfSBmcm9tICcuLi8uLi9ob29rcy91c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0J1xuXG5jb25zdCBLRVlfRk9OVF9TSVpFX0JBU0UgPSAnc2NyaXB0dXJlUGFuZUZvbnRTaXplXydcbmNvbnN0IGxhYmVsID0gJ1ZlcnNpb24nXG5jb25zdCBzdHlsZSA9IHsgbWFyZ2luVG9wOiAnMTZweCcsIHdpZHRoOiAnNTAwcHgnIH1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2NyaXB0dXJlQ2FyZCh7XG4gIGlkLFxuICBpc05ULFxuICB0aXRsZSxcbiAgc2VydmVyLFxuICBhcHBSZWYsXG4gIGNhcmROdW0sXG4gIGNsYXNzZXMsXG4gIHJlc291cmNlOiB7XG4gICAgb3duZXIsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICByZXNvdXJjZUlkLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgfSxcbiAgZ2V0TGFuZ3VhZ2UsXG4gIHJlZmVyZW5jZToge1xuICAgIHZlcnNlLFxuICAgIGNoYXB0ZXIsXG4gICAgcHJvamVjdElkOiBib29rSWQsXG4gIH0sXG4gIHJlc291cmNlTGluayxcbiAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICBvblJlc291cmNlRXJyb3IsXG4gIGh0dHBDb25maWcsXG4gIGdyZWVrUmVwb1VybCxcbiAgaGVicmV3UmVwb1VybCxcbiAgZ2V0TGV4aWNvbkRhdGEsXG4gIGZldGNoR2xvc3Nlc0ZvclZlcnNlLFxuICB0cmFuc2xhdGUsXG4gIG9uTWluaW1pemUsXG4gIGxvZ2dlZEluVXNlcixcbiAgYXV0aGVudGljYXRpb24sXG4gIHNldFNhdmVkQ2hhbmdlcyxcbiAgYm9va0luZGV4LFxuICBhZGRWZXJzZVJhbmdlLFxufSkge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgY3VycmVudFZlcnNlTnVtOiAwLCAvL1RPRE8gd2lsbCBiZSB1c2VkIGluIGZ1dHVyZSB3aGVuIG5lZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSB2ZXJzZXMgaW4gY2FyZFxuICAgIHJlZjogYXBwUmVmLFxuICAgIHVybEVycm9yOiBudWxsLFxuICAgIHVzaW5nVXNlckJyYW5jaDogZmFsc2UsXG4gIH0pXG4gIGNvbnN0IHtcbiAgICBjdXJyZW50VmVyc2VOdW0sXG4gICAgcmVmLFxuICAgIHVybEVycm9yLFxuICAgIHVzaW5nVXNlckJyYW5jaCxcbiAgfSA9IHN0YXRlXG5cbiAgY29uc3QgW2ZvbnRTaXplLCBzZXRGb250U2l6ZV0gPSB1c2VVc2VyTG9jYWxTdG9yYWdlKEtFWV9GT05UX1NJWkVfQkFTRSArIGNhcmROdW0sIDEwMClcbiAgY29uc3QgaXNOVF8gPSBpc05UKGJvb2tJZClcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIGlmICh1c2luZ1VzZXJCcmFuY2gpIHtcbiAgICBodHRwQ29uZmlnID0geyAuLi5odHRwQ29uZmlnLCBjYWNoZTogeyBtYXhBZ2U6IDAgfSB9IC8vIGRpc2FibGUgaHR0cCBjYWNoaW5nXG4gIH1cblxuICBjb25zdCB7XG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNldFNjcmlwdHVyZSxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzY3JpcHR1cmVWZXJzaW9uSGlzdCxcbiAgfSA9IHVzZVNjcmlwdHVyZVNldHRpbmdzKHtcbiAgICBpc05ULFxuICAgIHRpdGxlLFxuICAgIHZlcnNlLFxuICAgIG93bmVyLFxuICAgIGJvb2tJZCxcbiAgICBhcHBSZWY6IHJlZixcbiAgICBzZXJ2ZXIsXG4gICAgY2FyZE51bSxcbiAgICBjaGFwdGVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByZXNvdXJjZUxpbmssXG4gICAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgICBkaXNhYmxlV29yZFBvcG92ZXIsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICAgIHNldFVybEVycm9yOiAoZXJyb3IpID0+IHNldFN0YXRlKHsgdXJsRXJyb3I6IGVycm9yIH0pLFxuICAgIGh0dHBDb25maWcsXG4gICAgZ3JlZWtSZXBvVXJsLFxuICAgIGhlYnJld1JlcG9VcmwsXG4gICAgd2hvbGVCb29rOiB0cnVlLFxuICB9KVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgY2FyZFJlc291cmNlSWQgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5wcm9qZWN0SWQgfHwgcmVzb3VyY2VJZFxuICBjb25zdCBjdXJyZW50VmVyc2VEYXRhXyA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmPy5bY3VycmVudFZlcnNlTnVtXSB8fCBudWxsXG4gIGNvbnN0IGluaXRpYWxWZXJzZU9iamVjdHMgPSBjdXJyZW50VmVyc2VEYXRhXz8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHMgfHwgbnVsbFxuICAvLyBAdHMtaWdub3JlXG4gIGxldCByZWZfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucmVmIHx8IGFwcFJlZlxuICBjb25zdCBjYW5Vc2VFZGl0QnJhbmNoID0gbG9nZ2VkSW5Vc2VyICYmIGF1dGhlbnRpY2F0aW9uICYmXG4gICAgKHJlc291cmNlSWQgIT09IE9SSUdJTkFMX1NPVVJDRSkgJiZcbiAgICAoKHJlZl8gPT09ICdtYXN0ZXInKSB8fCAocmVmXy5zdWJzdHJpbmcoMCwgbG9nZ2VkSW5Vc2VyLmxlbmd0aCkgPT09IGxvZ2dlZEluVXNlcikgKSAvLyBub3QgdGFnXG5cbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7IHdvcmtpbmdSZXNvdXJjZUJyYW5jaCwgdXNpbmdVc2VyQnJhbmNoOiB1c2luZ1VzZXJCcmFuY2hfIH0sXG4gICAgYWN0aW9uczogeyBzdGFydEVkaXQ6IHN0YXJ0RWRpdEJyYW5jaCB9LFxuICB9ID0gdXNlVXNlckJyYW5jaCh7XG4gICAgb3duZXIsXG4gICAgc2VydmVyLFxuICAgIGFwcFJlZixcbiAgICBsYW5ndWFnZUlkLFxuICAgIGNhcmRJZDogaWQsXG4gICAgbG9nZ2VkSW5Vc2VyOiBjYW5Vc2VFZGl0QnJhbmNoID8gbG9nZ2VkSW5Vc2VyIDogbnVsbCxcbiAgICBhdXRoZW50aWNhdGlvbjogY2FuVXNlRWRpdEJyYW5jaCA/IGF1dGhlbnRpY2F0aW9uIDogbnVsbCxcbiAgICBjYXJkUmVzb3VyY2VJZCxcbiAgICBvblJlc291cmNlRXJyb3IsXG4gICAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgfSlcblxuICBjb25zdCB3b3JraW5nUmVmID0gY2FuVXNlRWRpdEJyYW5jaCA/IHdvcmtpbmdSZXNvdXJjZUJyYW5jaCA6IGFwcFJlZlxuICBjb25zdCByZWZlcmVuY2VfID0geyBib29rSWQsIGNoYXB0ZXIsIHZlcnNlIH1cbiAgbGV0IHNjcmlwdHVyZVRpdGxlXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2VsZWN0IGNvcnJlY3Qgd29ya2luZyByZWYgLSBjb3VsZCBiZSBtYXN0ZXIsIHVzZXIgYnJhbmNoLCBvciByZWxlYXNlXG4gICAgaWYgKHVzaW5nVXNlckJyYW5jaF8gIT09IHVzaW5nVXNlckJyYW5jaCkge1xuICAgICAgc2V0U3RhdGUoeyB1c2luZ1VzZXJCcmFuY2g6IHVzaW5nVXNlckJyYW5jaF8gfSlcbiAgICB9XG4gIH0sIFt1c2luZ1VzZXJCcmFuY2hfLCB1c2luZ1VzZXJCcmFuY2hdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHNlbGVjdCBjb3JyZWN0IHdvcmtpbmcgcmVmIC0gY291bGQgYmUgbWFzdGVyLCB1c2VyIGJyYW5jaCwgb3IgcmVsZWFzZVxuICAgIGxldCB3b3JraW5nUmVmXyA9IHdvcmtpbmdSZWYgfHwgYXBwUmVmXG5cbiAgICBpZiAocmVmICE9PSB3b3JraW5nUmVmXykge1xuICAgICAgc2V0U3RhdGUoeyByZWY6IHdvcmtpbmdSZWZfIH0pXG4gICAgfVxuICB9LCBbd29ya2luZ1JlZiwgcmVmLCBhcHBSZWZdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBkaXNwbGF5IHN0YXR1cyBpZiBlcnJvclxuICAgIGNvbnN0IGVycm9yID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXVxuXG4gICAgaWYgKGVycm9yKSB7IC8vIGlmIGVycm9yIHdhcyBmb3VuZCBkbyBjYWxsYmFja1xuICAgICAgY29uc3QgcmVzb3VyY2VTdGF0dXMgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzXG4gICAgICBjb25zdCByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoc2NyaXB0dXJlQ29uZmlnKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGdldFJlc291cmNlTWVzc2FnZShyZXNvdXJjZVN0YXR1cywgc2VydmVyLCByZXNvdXJjZUxpbmssIGlzTlRfKVxuICAgICAgY29uc3QgaXNBY2Nlc3NFcnJvciA9IHJlc291cmNlU3RhdHVzW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdXG4gICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG1lc3NhZ2UsIGlzQWNjZXNzRXJyb3IsIHJlc291cmNlU3RhdHVzKVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV0sIG9uUmVzb3VyY2VFcnJvcl0pXG5cbiAgaWYgKHNjcmlwdHVyZUNvbmZpZy50aXRsZSAmJiBzY3JpcHR1cmVDb25maWcudmVyc2lvbikge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYCR7c2NyaXB0dXJlQ29uZmlnLnRpdGxlfSB2JHtzY3JpcHR1cmVDb25maWcudmVyc2lvbn1gXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QudXBkYXRlVGl0bGUoc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluaywgc2NyaXB0dXJlVGl0bGUpXG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0dXJlVGl0bGUgPSBgVGl0bGUgbWlzc2luZyBmcm9tIHByb2plY3QgbWFuaWZlc3RgXG4gIH1cblxuICAvKiogRHluYW1pY2FsbHkgY3JlYXRlcyB0aGUgc2NyaXB0dXJlIHNlbGVjdGlvbiBkcm9wZG93biB0byBiZSBpbnNlcnRlZCBpbnRvIGNhcmQgc2V0dGluZ3MgKi9cbiAgZnVuY3Rpb24gZ2V0U2NyaXB0dXJlU2VsZWN0b3IoKSB7XG4gICAgY29uc3Qgc2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnID0gZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzKHtcbiAgICAgIGxhYmVsLFxuICAgICAgcmVzb3VyY2VMaW5rOiBzY3JpcHR1cmVDb25maWcucmVzb3VyY2VMaW5rLFxuICAgICAgc2V0U2NyaXB0dXJlLFxuICAgICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gICAgfSlcblxuICAgIHJldHVybiA8U2NyaXB0dXJlU2VsZWN0b3Igey4uLnNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZ30gc3R5bGU9e3N0eWxlfSBlcnJvck1lc3NhZ2U9e3VybEVycm9yfSAvPlxuICB9XG5cbiAgZnVuY3Rpb24gb25NZW51Q2xvc2UoKSB7XG4gICAgLy8gY29uc29sZS5sb2coYG9uTWVudUNsb3NlKClgKVxuICAgIHNldFN0YXRlKHsgdXJsRXJyb3I6IG51bGwgfSlcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbGFuZ3VhZ2VJZF8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkXG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoeyBsYW5ndWFnZUlkOiBsYW5ndWFnZUlkXyB9KVxuICBjb25zdCBkaXJlY3Rpb24gPSAobGFuZ3VhZ2U/LmRpcmVjdGlvbikgfHwgJ2x0cidcbiAgY29uc3QgcmVmZXJlbmNlID0geyAuLi5zY3JpcHR1cmVDb25maWcucmVmZXJlbmNlIH1cblxuICBjb25zdCBpc0hlYnJldyA9IChsYW5ndWFnZUlkXyA9PT0gJ2hibycpXG4gIGNvbnN0IGZvbnRGYWN0b3IgPSBpc0hlYnJldyA/IDEuNCA6IDEgLy8gd2UgYXV0b21hdGljYWxseSBzY2FsZSB1cCBmb250IHNpemUgZm9yIEhlYnJld1xuICBjb25zdCBzY2FsZWRGb250U2l6ZSA9IGZvbnRTaXplICogZm9udEZhY3RvclxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcubWF0Y2hlZFZlcnNlKSB7IC8vIHN1cHBvcnQgdmVyc2UgcmFuZ2VzXG4gICAgcmVmZXJlbmNlLnZlcnNlID0gc2NyaXB0dXJlQ29uZmlnLm1hdGNoZWRWZXJzZVxuICB9XG5cbiAgY29uc3QgaXRlbXMgPSBudWxsXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgaGVhZGVycywgZmlsdGVycywgaXRlbUluZGV4LCBtYXJrZG93blZpZXcsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZXRGaWx0ZXJzLCBzZXRJdGVtSW5kZXgsIHNldE1hcmtkb3duVmlldyxcbiAgICB9LFxuICB9ID0gdXNlQ2FyZFN0YXRlKHsgaXRlbXMgfSlcblxuICBjb25zdCByZWZTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7TWF0aC5yb3VuZChzY2FsZWRGb250U2l6ZSAqIDAuOSl9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IGNvbnRlbnRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7c2NhbGVkRm9udFNpemV9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZUxhYmVsID0gPFRpdGxlPntzY3JpcHR1cmVUaXRsZX08L1RpdGxlPlxuICBsZXQgZGlzYWJsZVdvcmRQb3BvdmVyXyA9IGRpc2FibGVXb3JkUG9wb3ZlclxuICBjb25zdCB1c2luZ09yaWdpbmFsQmlibGUgPSBpc09yaWdpbmFsQmlibGUoc2NyaXB0dXJlQ29uZmlnWydyZXNvdXJjZSddPy5wcm9qZWN0SWQpXG5cbiAgaWYgKGRpc2FibGVXb3JkUG9wb3ZlciA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBzcGVjaWZpZWQsIHRoZW4gZGV0ZXJtaW5lIGlmIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyXyA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHByZS1jYWNoZSBnbG9zc2VzIG9uIHZlcnNlIGNoYW5nZVxuICAgIGNvbnN0IGZldGNoR2xvc3NEYXRhRm9yVmVyc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVXb3JkUG9wb3ZlciAmJiBpbml0aWFsVmVyc2VPYmplY3RzICYmIGZldGNoR2xvc3Nlc0ZvclZlcnNlKSB7XG4gICAgICAgIGF3YWl0IGZldGNoR2xvc3Nlc0ZvclZlcnNlKGluaXRpYWxWZXJzZU9iamVjdHMsIGxhbmd1YWdlSWRfKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoR2xvc3NEYXRhRm9yVmVyc2UoKVxuICB9LCBbIGluaXRpYWxWZXJzZU9iamVjdHMsIGRpc2FibGVXb3JkUG9wb3ZlciwgbGFuZ3VhZ2VJZF8sIGZldGNoR2xvc3Nlc0ZvclZlcnNlIF0pXG5cbiAgY29uc3QgZW5hYmxlRWRpdCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3QgZW5hYmxlQWxpZ25tZW50ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBvcmlnaW5hbFJlcG9VcmwgPSBpc05ld1Rlc3RhbWVudCA/IGdyZWVrUmVwb1VybCA6IGhlYnJld1JlcG9VcmxcbiAgY29uc3Qge1xuICAgIGFjdGlvbnM6IHtcbiAgICAgIGNhbmNlbEFsaWdubWVudCxcbiAgICAgIGN1cnJlbnRWZXJzZU9iamVjdHMsXG4gICAgICBoYW5kbGVBbGlnbm1lbnRDbGljayxcbiAgICAgIG9uQWxpZ25tZW50c0NoYW5nZSxcbiAgICAgIHNhdmVBbGlnbm1lbnQsXG4gICAgICBzZXRFZGl0aW5nLFxuICAgICAgc2V0VmVyc2VDaGFuZ2VkLFxuICAgICAgc2F2ZUNoYW5nZXNUb0Nsb3VkLFxuICAgIH0sXG4gICAgc3RhdGU6IHtcbiAgICAgIGFsaWduZWQsXG4gICAgICBhbGlnbmVyRGF0YSxcbiAgICAgIGVkaXRpbmcsXG4gICAgICB1bnNhdmVkQ2hhbmdlcyxcbiAgICB9LFxuICB9ID0gdXNlU2NyaXB0dXJlQWxpZ25tZW50RWRpdCh7XG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgZW5hYmxlRWRpdCxcbiAgICBlbmFibGVBbGlnbm1lbnQsXG4gICAgaHR0cENvbmZpZyxcbiAgICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICBvcmlnaW5hbFJlcG9VcmwsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzdGFydEVkaXRCcmFuY2gsXG4gICAgYm9va0luZGV4LFxuICAgIHdvcmtpbmdSZXNvdXJjZUJyYW5jaDogcmVmLFxuICAgIGN1cnJlbnRWZXJzZU51bSxcbiAgfSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZXQgc2F2ZWQgY2hhbmdlcyB3aGVuZXZlciB1c2VyIGVkaXRzIHZlcnNlIHRleHQgb3IgYWxpZ25tZW50cyBvciBpZiBhbGlnbm1lbnRzIGFyZSBvcGVuXG4gICAgY29uc3QgdW5zYXZlZENoYW5nZXNfID0gdW5zYXZlZENoYW5nZXMgfHwgYWxpZ25lckRhdGFcbiAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKHJlc291cmNlSWQsICF1bnNhdmVkQ2hhbmdlc18pXG4gIH0sIFt1bnNhdmVkQ2hhbmdlcywgYWxpZ25lckRhdGFdKVxuXG4gIGZ1bmN0aW9uIHNob3dQb3BvdmVyKFBvcG92ZXJUaXRsZSwgd29yZERldGFpbHMsIHBvc2l0aW9uQ29vcmQsIHJhd0RhdGEpIHtcbiAgICAvLyBUT0RPOiBtYWtlIHNob3cgcG9wb3ZlciBwcmV0dHlcbiAgICBjb25zb2xlLmxvZyhgc2hvd1BvcG92ZXJgLCByYXdEYXRhKVxuICAgIHdpbmRvdy5wcm9tcHQoYFVzZXIgY2xpY2tlZCBvbiAke0pTT04uc3RyaW5naWZ5KHJhd0RhdGEudG9rZW4pfWApXG4gIH1cblxuICBjb25zdCBjaGVja2luZ1N0YXRlID0gYWxpZ25lZCA/ICd2YWxpZCcgOiAnaW52YWxpZCdcbiAgY29uc3QgdGl0bGVUZXh0ID0gY2hlY2tpbmdTdGF0ZSA9PT0gJ3ZhbGlkJyA/ICdBbGlnbm1lbnQgaXMgVmFsaWQnIDogJ0FsaWdubWVudCBpcyBJbnZhbGlkJ1xuICBjb25zdCBvblJlbmRlclRvb2xiYXIgPSAoeyBpdGVtcyB9KSA9PiBbXG4gICAgLi4uaXRlbXMsXG4gICAgPEljb25CdXR0b25cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5tYXJnaW59XG4gICAgICBrZXk9J2NoZWNraW5nLWJ1dHRvbidcbiAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFsaWdubWVudENsaWNrKCl9XG4gICAgICB0aXRsZT17dGl0bGVUZXh0fVxuICAgICAgYXJpYS1sYWJlbD17dGl0bGVUZXh0fVxuICAgICAgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICA+XG4gICAgICB7Y2hlY2tpbmdTdGF0ZSA9PT0gJ3ZhbGlkJyA/IChcbiAgICAgICAgPFJ4TGluazIgaWQ9J3ZhbGlkX2ljb24nIGNvbG9yPScjQkJCJyAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPFJ4TGlua0JyZWFrMiBpZD0naW52YWxpZF9pY29uJyBjb2xvcj0nIzAwMCcgLz5cbiAgICAgICl9XG4gICAgPC9JY29uQnV0dG9uPixcbiAgXVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gY2hlY2sgZm9yIHZlcnNlIHJhbmdlXG4gICAgY29uc3QgX3ZlcnNlID0gc2NyaXB0dXJlQ29uZmlnPy5tYXRjaGVkVmVyc2VcblxuICAgIGlmIChhZGRWZXJzZVJhbmdlICYmICh0eXBlb2YgX3ZlcnNlID09PSAnc3RyaW5nJykpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmIChfdmVyc2UuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICBhZGRWZXJzZVJhbmdlKGAke3NjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlPy5jaGFwdGVyfToke192ZXJzZX1gKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ubWF0Y2hlZFZlcnNlXSlcblxuICByZXR1cm4gKFxuICAgIDxDYXJkXG4gICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgdGl0bGU9e3NjcmlwdHVyZUxhYmVsfVxuICAgICAgc2V0dGluZ3NUaXRsZT17c2NyaXB0dXJlVGl0bGUgKyAnIFNldHRpbmdzJ31cbiAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgIGNsYXNzZXM9e2NsYXNzZXN9XG4gICAgICBoZWFkZXJzPXtoZWFkZXJzfVxuICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgIGZvbnRTaXplPXtmb250U2l6ZX1cbiAgICAgIGl0ZW1JbmRleD17aXRlbUluZGV4fVxuICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgIHNldEZvbnRTaXplPXtzZXRGb250U2l6ZX1cbiAgICAgIHNldEl0ZW1JbmRleD17c2V0SXRlbUluZGV4fVxuICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICBzZXRNYXJrZG93blZpZXc9e3NldE1hcmtkb3duVmlld31cbiAgICAgIGdldEN1c3RvbUNvbXBvbmVudD17Z2V0U2NyaXB0dXJlU2VsZWN0b3J9XG4gICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgIG9uTWluaW1pemU9e29uTWluaW1pemUgPyAoKSA9PiBvbk1pbmltaXplKGlkKSA6IG51bGx9XG4gICAgICBlZGl0YWJsZT17ZW5hYmxlRWRpdCB8fCBlbmFibGVBbGlnbm1lbnR9XG4gICAgICBzYXZlZD17IXVuc2F2ZWRDaGFuZ2VzfVxuICAgICAgb25TYXZlRWRpdD17c2F2ZUNoYW5nZXNUb0Nsb3VkfVxuICAgICAgb25CbHVyPXsoKSA9PiBzZXRFZGl0aW5nKGZhbHNlKX1cbiAgICAgIG9uUmVuZGVyVG9vbGJhcj17b25SZW5kZXJUb29sYmFyfVxuICAgID5cbiAgICAgIHthbGlnbmVyRGF0YSA/XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPFdvcmRBbGlnbmVyXG4gICAgICAgICAgICBzdHlsZT17eyBtYXhIZWlnaHQ6ICc0NTBweCcsIG92ZXJmbG93WTogJ2F1dG8nIH19XG4gICAgICAgICAgICB2ZXJzZUFsaWdubWVudHM9e2FsaWduZXJEYXRhLmFsaWdubWVudHN9XG4gICAgICAgICAgICB0YXJnZXRXb3Jkcz17YWxpZ25lckRhdGEud29yZEJhbmt9XG4gICAgICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgICAgIGNvbnRleHRJZD17eyByZWZlcmVuY2U6IHJlZmVyZW5jZV8gfX1cbiAgICAgICAgICAgIHRhcmdldExhbmd1YWdlPXtsYW5ndWFnZX1cbiAgICAgICAgICAgIHRhcmdldExhbmd1YWdlRm9udD17Jyd9XG4gICAgICAgICAgICBzb3VyY2VMYW5ndWFnZT17aXNOVF8gPyBOVF9PUklHX0xBTkcgOiBPVF9PUklHX0xBTkd9XG4gICAgICAgICAgICBzaG93UG9wb3Zlcj17c2hvd1BvcG92ZXJ9XG4gICAgICAgICAgICBsZXhpY29ucz17e319XG4gICAgICAgICAgICBsb2FkTGV4aWNvbkVudHJ5PXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsocmVzdWx0cykgPT4gb25BbGlnbm1lbnRzQ2hhbmdlKHJlc3VsdHMpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogJzEwMCUnIH19PlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMubWFyZ2lufVxuICAgICAgICAgICAgICBrZXk9J2FsaWdubWVudC1zYXZlJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzYXZlQWxpZ25tZW50KCl9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9eydBbGlnbm1lbnQgU2F2ZSd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxDaGVja091dGxpbmVkSWNvbiBpZD0nYWxpZ25tZW50LXNhdmUtaWNvbicgaHRtbENvbG9yPScjMDAwJyAvPlxuICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMubWFyZ2lufVxuICAgICAgICAgICAgICBrZXk9J2FsaWdubWVudC1jYW5jZWwnXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNhbmNlbEFsaWdubWVudCgpfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXsnQWxpZ25tZW50IENhbmNlbCd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxDYW5jZWxPdXRsaW5lZEljb24gaWQ9J2FsaWdubWVudC1jYW5jZWwtaWNvbicgaHRtbENvbG9yPScjMDAwJyAvPlxuICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgOlxuICAgICAgICA8U2NyaXB0dXJlUGFuZVxuICAgICAgICAgIHJlZlN0eWxlPXtyZWZTdHlsZX1cbiAgICAgICAgICB7Li4uc2NyaXB0dXJlQ29uZmlnfVxuICAgICAgICAgIHZlcnNlT2JqZWN0cz17Y3VycmVudFZlcnNlT2JqZWN0c31cbiAgICAgICAgICBpc05UPXtpc05UX31cbiAgICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgICByZWZlcmVuY2U9e3JlZmVyZW5jZX1cbiAgICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgICBjb250ZW50U3R5bGU9e2NvbnRlbnRTdHlsZX1cbiAgICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgICAgZGlzYWJsZVdvcmRQb3BvdmVyPXtkaXNhYmxlV29yZFBvcG92ZXJffVxuICAgICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgICBlZGl0aW5nPXtlZGl0aW5nfVxuICAgICAgICAgIHNldEVkaXRpbmc9e3NldEVkaXRpbmd9XG4gICAgICAgICAgc2V0VmVyc2VDaGFuZ2VkPXtzZXRWZXJzZUNoYW5nZWR9XG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgPC9DYXJkPlxuICApXG59XG5cblNjcmlwdHVyZUNhcmQucHJvcFR5cGVzID0ge1xuICAvKiogaHRtbCBpZGVudGlmaWVyIHRvIHVzZSBmb3IgY2FyZCAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgTlQgb3IgT1QgKi9cbiAgaXNOVDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHRpdGxlIGZvciBzY3JpcHR1cmUgY2FyZCAqL1xuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogZ2V0IGxhbmd1YWdlIGRldGFpbHMgKi9cbiAgZ2V0TGFuZ3VhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBzY3JpcHR1cmUgY2FyZCBudW1iZXIgKDAgdG8gMiBmb3IgZXhhbXBsZSkgKi9cbiAgY2FyZE51bTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAvKiogcmVzb3VyY2Ugb2JqZWN0ICovXG4gIHJlc291cmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiByZXNvdXJjZSBsYW5ndWFnZSB0byB1c2UgKi9cbiAgICBsYW5ndWFnZUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlcG8gb3duZXIgc3VjaCBhcyB1bmZvbGRpbmdXb3JkICovXG4gICAgb3duZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVzb3VyY2VJZCB0byB1c2UgKGUuZy4gdWdudCkgKi9cbiAgICByZXNvdXJjZUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlcG8gb3duZXIgZm9yIG9yaWdpbmFsIGxhbmd1YWdlcyBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSksXG4gIHJlZmVyZW5jZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKiogcHJvamVjdElkIChib29rSUQpIHRvIHVzZSAqL1xuICAgIHByb2plY3RJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IGNoYXB0ZXIgbnVtYmVyICovXG4gICAgY2hhcHRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgdmVyc2UgbnVtYmVyICovXG4gICAgdmVyc2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICB9KSxcbiAgLyoqIHNlcnZlciAoZS5nLiAnaHR0cHM6Ly9naXQuZG9vcjQzLm9yZycpICovXG4gIHNlcnZlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogcmVwbyBicmFuY2ggb3IgdGFnIHN1Y2ggYXMgbWFzdGVyICovXG4gIGFwcFJlZjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogaWYgdHJ1ZSB0aGVuIHdvcmQgZGF0YSBob3ZlciBpcyBzaG93biAqL1xuICBkaXNhYmxlV29yZFBvcG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKiogQ1NTIGNsYXNzZXMgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIHJlc291cmNlTGluayAqL1xuICByZXNvdXJjZUxpbms6IFByb3BUeXBlcy5hbnksXG4gIC8qKiB1c2UgbWV0aG9kIGZvciB1c2luZyBsb2NhbCBzdG9yYWdlIHNwZWNpZmljIGZvciB1c2VyICovXG4gIHVzZVVzZXJMb2NhbFN0b3JhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBvcHRpb25hbCBjYWxsYmFjayBpZiBlcnJvciBsb2FkaW5nIHJlc291cmNlLCBwYXJhbWV0ZXIgcmV0dXJuZWQgYXJlOlxuICAgKiAgICAoe3N0cmluZ30gZXJyb3JNZXNzYWdlLCB7Ym9vbGVhbn0gaXNBY2Nlc3NFcnJvciwge29iamVjdH0gcmVzb3VyY2VTdGF0dXMpXG4gICAqICAgICAgLSBpc0FjY2Vzc0Vycm9yIC0gaXMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBlcnJvciB0cnlpbmcgdG8gYWNjZXNzIGZpbGVcbiAgICogICAgICAtIHJlc291cmNlU3RhdHVzIC0gaXMgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCBwcm9ibGVtcyBmZXRjaGluZyByZXNvdXJjZSAqL1xuICBvblJlc291cmNlRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgaHR0cCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZmV0Y2hpbmcgcmVzb3VyY2VzLCBkZWZhdWx0IGlzIDAgKHZlcnkgbG9uZyB3YWl0KSAqL1xuICBodHRwQ29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBncmVlayByZXBvICovXG4gIGdyZWVrUmVwb1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG9wdGlvbmFsIHVybCBmb3IgaGVicmV3IHJlcG8gKi9cbiAgaGVicmV3UmVwb1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGZ1bmN0aW9uIHRvIGdldCBsYXRlc3QgbGV4aWNvbiBkYXRhICovXG4gIGdldExleGljb25EYXRhOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGZ1bmN0aW9uIHRvIHByZS1sb2FkIGxleGljb24gZGF0YSBmb3IgdmVyc2UgKi9cbiAgZmV0Y2hHbG9zc2VzRm9yVmVyc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGxvY2FsaXphdGlvbiAqL1xuICB0cmFuc2xhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogZnVuY3Rpb24gdG8gbWluaW1pemUgdGhlIGNhcmQgKG9wdGlvbmFsKSAqL1xuICBvbk1pbmltaXplOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHVzZXItbmFtZSAqL1xuICBsb2dnZWRJblVzZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBhdXRoZW50aWNhdGlvbiBpbmZvICovXG4gIGF1dGhlbnRpY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogZnVuY3Rpb24gdG8gc2V0IHN0YXRlIGluIGFwcCB0aGF0IHRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgKi9cbiAgc2V0U2F2ZWRDaGFuZ2VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGluZGV4IGZvciBjdXJyZW50IGJvb2sgKGUuZy4gJzAxJyBmb3IgJ2dlbicpKi9cbiAgYm9va0luZGV4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogY2FsbGJhY2sgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgdXNpbmcgYSB2ZXJzZSByYW5nZSBoZXJlICovXG4gIGFkZFZlcnNlUmFuZ2U6IFByb3BUeXBlcy5mdW5jLFxufVxuIl19
|