single-scripture-rcl 3.3.3 → 3.3.4-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 +788 -354
- package/dist/components/ScripturePane/ScripturePane.js +75 -44
- package/dist/components/VerseSelectorPopup/VerseSelectorPopup.js +104 -0
- package/dist/components/VerseSelectorPopup/index.js +2 -0
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/useScripture.js +388 -112
- package/dist/hooks/useScriptureAlignmentEdit.js +88 -74
- package/dist/hooks/useScriptureResources.js +20 -18
- package/dist/hooks/useScriptureSelector.js +12 -12
- package/dist/hooks/useScriptureSettings.js +35 -39
- package/dist/utils/ScriptureSettings.js +11 -6
- package/dist/utils/index.js +2 -1
- package/dist/utils/maps.js +41 -0
- package/package.json +6 -5
|
@@ -32,7 +32,7 @@ import * as isEqual from 'deep-equal';
|
|
|
32
32
|
import { ScriptureConfig, ScriptureReference, ServerConfig } from '../types';
|
|
33
33
|
import { getScriptureResourceSettings } from '../utils/ScriptureSettings';
|
|
34
34
|
import { ORIGINAL_SOURCE } from '../utils';
|
|
35
|
-
import
|
|
35
|
+
import { getVersesForRef } from './useScripture';
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* determines if alignment is complete based on target USFM and original language verse objects
|
|
@@ -85,6 +85,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
85
85
|
initialVerseText = _ref.initialVerseText,
|
|
86
86
|
isNewTestament = _ref.isNewTestament,
|
|
87
87
|
originalLanguageOwner = _ref.originalLanguageOwner,
|
|
88
|
+
originalScriptureBookObjects = _ref.originalScriptureBookObjects,
|
|
88
89
|
originalRepoUrl = _ref.originalRepoUrl,
|
|
89
90
|
reference = _ref.reference,
|
|
90
91
|
scriptureConfig = _ref.scriptureConfig,
|
|
@@ -116,6 +117,15 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
116
117
|
newVerseText = state.newVerseText,
|
|
117
118
|
updatedVerseObjects = state.updatedVerseObjects,
|
|
118
119
|
verseTextChanged = state.verseTextChanged;
|
|
120
|
+
var chapter = reference === null || reference === void 0 ? void 0 : reference.chapter;
|
|
121
|
+
var verse = reference === null || reference === void 0 ? void 0 : reference.verse;
|
|
122
|
+
var projectId = reference === null || reference === void 0 ? void 0 : reference.projectId;
|
|
123
|
+
var basicReference = {
|
|
124
|
+
// only has the three basic fields
|
|
125
|
+
chapter: chapter,
|
|
126
|
+
verse: verse,
|
|
127
|
+
projectId: projectId
|
|
128
|
+
};
|
|
119
129
|
|
|
120
130
|
function setState(newState) {
|
|
121
131
|
setState_(function (prevState) {
|
|
@@ -124,7 +134,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
124
134
|
}
|
|
125
135
|
|
|
126
136
|
function clearChanges() {
|
|
127
|
-
console.log("clearChanges() - ".concat(JSON.stringify(
|
|
137
|
+
console.log("clearChanges() - ".concat(JSON.stringify(basicReference)));
|
|
128
138
|
|
|
129
139
|
var clearState = _objectSpread(_objectSpread({}, state), {}, {
|
|
130
140
|
alignerData: null,
|
|
@@ -136,7 +146,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
136
146
|
});
|
|
137
147
|
|
|
138
148
|
if (!isEqual(state, clearState)) {
|
|
139
|
-
console.log("reference changed, reset edit/alignment state variables");
|
|
149
|
+
console.log("clearChanges() - reference changed, reset edit/alignment state variables");
|
|
140
150
|
setState(clearState);
|
|
141
151
|
}
|
|
142
152
|
}
|
|
@@ -147,59 +157,47 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
147
157
|
|
|
148
158
|
|
|
149
159
|
httpConfig = httpConfig || {};
|
|
150
|
-
var bookId =
|
|
160
|
+
var bookId = projectId;
|
|
151
161
|
var originalScriptureSettings = getScriptureResourceSettings(bookId, originalScriptureSettings_, isNewTestament, originalRepoUrl);
|
|
152
162
|
|
|
153
163
|
if (!enableAlignment) {
|
|
154
164
|
// if not enabled, then we don't fetch resource
|
|
155
165
|
originalScriptureSettings.resourceLink = null;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
var originalScriptureResource = useScriptureResources({
|
|
160
|
-
bookId: bookId,
|
|
161
|
-
scriptureSettings: originalScriptureSettings,
|
|
162
|
-
chapter: reference === null || reference === void 0 ? void 0 : reference.chapter,
|
|
163
|
-
verse: reference === null || reference === void 0 ? void 0 : reference.verse,
|
|
164
|
-
isNewTestament: isNewTestament,
|
|
165
|
-
originalRepoUrl: originalRepoUrl,
|
|
166
|
-
currentLanguageId: originalScriptureSettings === null || originalScriptureSettings === void 0 ? void 0 : originalScriptureSettings.languageId,
|
|
167
|
-
currentOwner: originalLanguageOwner,
|
|
168
|
-
httpConfig: httpConfig
|
|
169
|
-
});
|
|
170
|
-
var originalVerseObjects = React.useMemo(function () {
|
|
171
|
-
var _originalScriptureRes;
|
|
166
|
+
}
|
|
172
167
|
|
|
168
|
+
var originalVerseObjects = React.useMemo(function () {
|
|
173
169
|
// get the original language verseObjects
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
170
|
+
var verseObjects = [];
|
|
171
|
+
|
|
172
|
+
if (originalScriptureBookObjects) {
|
|
173
|
+
// @ts-ignore
|
|
174
|
+
var verses = getVersesForRef(basicReference, originalScriptureBookObjects, originalScriptureBookObjects === null || originalScriptureBookObjects === void 0 ? void 0 : originalScriptureBookObjects.languageId);
|
|
177
175
|
|
|
178
|
-
|
|
179
|
-
|
|
176
|
+
if (verses !== null && verses !== void 0 && verses.length) {
|
|
177
|
+
var _iterator = _createForOfIteratorHelper(verses),
|
|
178
|
+
_step;
|
|
180
179
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
180
|
+
try {
|
|
181
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
182
|
+
var _verseReference$verse;
|
|
184
183
|
|
|
185
|
-
|
|
186
|
-
|
|
184
|
+
var verseReference = _step.value;
|
|
185
|
+
var origVerseObjects = verseReference === null || verseReference === void 0 ? void 0 : (_verseReference$verse = verseReference.verseData) === null || _verseReference$verse === void 0 ? void 0 : _verseReference$verse.verseObjects;
|
|
187
186
|
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
if (origVerseObjects) {
|
|
188
|
+
Array.prototype.push.apply(verseObjects, origVerseObjects);
|
|
189
|
+
}
|
|
190
190
|
}
|
|
191
|
+
} catch (err) {
|
|
192
|
+
_iterator.e(err);
|
|
193
|
+
} finally {
|
|
194
|
+
_iterator.f();
|
|
191
195
|
}
|
|
192
|
-
} catch (err) {
|
|
193
|
-
_iterator.e(err);
|
|
194
|
-
} finally {
|
|
195
|
-
_iterator.f();
|
|
196
196
|
}
|
|
197
|
-
|
|
198
|
-
return verseObjects;
|
|
199
197
|
}
|
|
200
198
|
|
|
201
|
-
return
|
|
202
|
-
}, [
|
|
199
|
+
return verseObjects;
|
|
200
|
+
}, [originalScriptureBookObjects, chapter, verse, projectId]);
|
|
203
201
|
React.useEffect(function () {
|
|
204
202
|
// update alignment status when aligner is hidden
|
|
205
203
|
var notEmpty = !!initialVerseObjects;
|
|
@@ -386,6 +384,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
386
384
|
setState(newState);
|
|
387
385
|
callSetSavedState(true, newState);
|
|
388
386
|
} else {
|
|
387
|
+
console.log("saveAlignment() - no alignment changes");
|
|
389
388
|
setState({
|
|
390
389
|
alignerData: null,
|
|
391
390
|
editing: false
|
|
@@ -400,7 +399,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
400
399
|
function cancelAlignment() {
|
|
401
400
|
console.log("cancelAlignment()");
|
|
402
401
|
var targetVerseUSFM = getCurrentVerseUsfm(updatedVerseObjects, initialVerseObjects, verseTextChanged, newVerseText);
|
|
403
|
-
var aligned = isUsfmAligned(targetVerseUSFM,
|
|
402
|
+
var aligned = isUsfmAligned(targetVerseUSFM, originalVerseObjects);
|
|
404
403
|
setState({
|
|
405
404
|
alignerData: null,
|
|
406
405
|
aligned: aligned
|
|
@@ -411,6 +410,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
411
410
|
* @param {boolean} editing_ - if true, editor is shown, otherwise editor is hidden
|
|
412
411
|
* @param {string} _newVerseText - optional verse text
|
|
413
412
|
*/
|
|
413
|
+
// eslint-disable-next-line require-await
|
|
414
414
|
|
|
415
415
|
|
|
416
416
|
function setEditing(_x) {
|
|
@@ -427,7 +427,13 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
427
427
|
function _setEditing() {
|
|
428
428
|
_setEditing = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(editing_) {
|
|
429
429
|
var _newVerseText,
|
|
430
|
+
_updatedVerseObjects,
|
|
431
|
+
_verseTextChanged,
|
|
430
432
|
newState,
|
|
433
|
+
verseText,
|
|
434
|
+
_AlignmentHelpers$upd4,
|
|
435
|
+
targetVerseObjects,
|
|
436
|
+
_alignmentsChanged,
|
|
431
437
|
_args2 = arguments;
|
|
432
438
|
|
|
433
439
|
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
@@ -436,31 +442,40 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
436
442
|
case 0:
|
|
437
443
|
_newVerseText = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : newVerseText;
|
|
438
444
|
|
|
439
|
-
if (
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
445
|
+
if (enableEdit) {
|
|
446
|
+
if (editing_ !== editing) {
|
|
447
|
+
_newVerseText = _newVerseText || initialVerseText;
|
|
448
|
+
_updatedVerseObjects = updatedVerseObjects;
|
|
449
|
+
_verseTextChanged = _newVerseText !== initialVerseText;
|
|
450
|
+
newState = {
|
|
451
|
+
editing: editing_,
|
|
452
|
+
newVerseText: _newVerseText,
|
|
453
|
+
verseTextChanged: _verseTextChanged
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
if (!_verseTextChanged) {
|
|
457
|
+
// fallback to make sure text from verseObjects matches current text
|
|
458
|
+
verseText = UsfmFileConversionHelpers.getUsfmForVerseContent({
|
|
459
|
+
verseObjects: currentVerseObjects
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
if (verseText !== _newVerseText) {
|
|
463
|
+
// if text from verse objects does not match latest text
|
|
464
|
+
// apply alignment to current text
|
|
465
|
+
_AlignmentHelpers$upd4 = AlignmentHelpers.updateAlignmentsToTargetVerse(currentVerseObjects, _newVerseText), targetVerseObjects = _AlignmentHelpers$upd4.targetVerseObjects;
|
|
466
|
+
_updatedVerseObjects = targetVerseObjects; // update verseObjects to match current text
|
|
467
|
+
|
|
468
|
+
newState['updatedVerseObjects'] = _updatedVerseObjects;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
setState(newState);
|
|
473
|
+
_alignmentsChanged = _updatedVerseObjects && !isEqual(initialVerseObjects, _updatedVerseObjects);
|
|
474
|
+
callSetSavedState(_verseTextChanged || _alignmentsChanged, newState);
|
|
475
|
+
}
|
|
461
476
|
}
|
|
462
477
|
|
|
463
|
-
case
|
|
478
|
+
case 2:
|
|
464
479
|
case "end":
|
|
465
480
|
return _context2.stop();
|
|
466
481
|
}
|
|
@@ -471,15 +486,13 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
471
486
|
}
|
|
472
487
|
|
|
473
488
|
function setVerseChanged(changed, newVerseText, _initialVerseText) {
|
|
474
|
-
var _AlignmentHelpers$upd3 = AlignmentHelpers.updateAlignmentsToTargetVerse(
|
|
489
|
+
var _AlignmentHelpers$upd3 = AlignmentHelpers.updateAlignmentsToTargetVerse(currentVerseObjects, newVerseText),
|
|
475
490
|
targetVerseText = _AlignmentHelpers$upd3.targetVerseText;
|
|
476
491
|
|
|
477
|
-
var aligned = isUsfmAligned(targetVerseText,
|
|
478
|
-
|
|
479
|
-
var _changed = newVerseText !== initialVerseText;
|
|
480
|
-
|
|
492
|
+
var aligned = isUsfmAligned(targetVerseText, originalVerseObjects);
|
|
493
|
+
var verseTextChanged = newVerseText !== initialVerseText;
|
|
481
494
|
setState({
|
|
482
|
-
verseTextChanged:
|
|
495
|
+
verseTextChanged: verseTextChanged,
|
|
483
496
|
newVerseText: newVerseText,
|
|
484
497
|
aligned: aligned
|
|
485
498
|
});
|
|
@@ -547,6 +560,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
547
560
|
return {
|
|
548
561
|
actions: {
|
|
549
562
|
cancelAlignment: cancelAlignment,
|
|
563
|
+
clearChanges: clearChanges,
|
|
550
564
|
getChanges: getChanges,
|
|
551
565
|
handleAlignmentClick: handleAlignmentClick,
|
|
552
566
|
onAlignmentsChange: onAlignmentsChange,
|
|
@@ -562,13 +576,13 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
562
576
|
initialVerseText: initialVerseText,
|
|
563
577
|
initialVerseObjects: initialVerseObjects,
|
|
564
578
|
newVerseText: newVerseText,
|
|
579
|
+
reference: basicReference,
|
|
565
580
|
sourceLanguage: sourceLanguage,
|
|
566
581
|
targetLanguage: targetLanguage,
|
|
582
|
+
title: title,
|
|
567
583
|
unsavedChanges: unsavedChanges,
|
|
568
|
-
verseTextChanged: verseTextChanged
|
|
569
|
-
reference: reference,
|
|
570
|
-
title: title
|
|
584
|
+
verseTextChanged: verseTextChanged
|
|
571
585
|
}
|
|
572
586
|
};
|
|
573
587
|
}
|
|
574
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0LnRzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIkFsaWdubWVudEhlbHBlcnMiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwidXNmbUhlbHBlcnMiLCJpc0VxdWFsIiwiU2NyaXB0dXJlQ29uZmlnIiwiU2NyaXB0dXJlUmVmZXJlbmNlIiwiU2VydmVyQ29uZmlnIiwiZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyIsIk9SSUdJTkFMX1NPVVJDRSIsInVzZVNjcmlwdHVyZVJlc291cmNlcyIsImlzVXNmbUFsaWduZWQiLCJ0YXJnZXRWZXJzZVVTRk0iLCJvcmlnaW5hbFZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImV4dHJhY3RBbGlnbm1lbnRzRnJvbVRhcmdldFZlcnNlIiwiYWxpZ25tZW50cyIsIndvcmRCYW5rIiwiYXJlQWxnbm1lbnRzQ29tcGxldGUiLCJnZXRDdXJyZW50VmVyc2VVc2ZtIiwidXBkYXRlZFZlcnNlT2JqZWN0cyIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJ2ZXJzZVRleHRDaGFuZ2VkIiwibmV3VmVyc2VUZXh0IiwiY3VycmVudFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlVGV4dCIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJ1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0IiwiY3VycmVudEluZGV4IiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsImh0dHBDb25maWciLCJpbml0aWFsVmVyc2VUZXh0IiwiaXNOZXdUZXN0YW1lbnQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJvcmlnaW5hbFJlcG9VcmwiLCJyZWZlcmVuY2UiLCJzY3JpcHR1cmVDb25maWciLCJzY3JpcHR1cmVTZXR0aW5ncyIsInNldFNhdmVkQ2hhbmdlcyIsInNvdXJjZUxhbmd1YWdlIiwic3RhcnRFZGl0QnJhbmNoIiwidGFyZ2V0TGFuZ3VhZ2UiLCJ0aXRsZSIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsInVzZVN0YXRlIiwiYWxpZ25lZCIsImFsaWduZXJEYXRhIiwiZWRpdGluZyIsIm5ld0FsaWdubWVudHMiLCJzdGF0ZSIsInNldFN0YXRlXyIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJjbGVhckNoYW5nZXMiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFyU3RhdGUiLCJvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzXyIsInJlc291cmNlSWQiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzIiwicmVzb3VyY2VMaW5rIiwib3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZSIsImNoYXB0ZXIiLCJ2ZXJzZSIsImN1cnJlbnRMYW5ndWFnZUlkIiwibGFuZ3VhZ2VJZCIsImN1cnJlbnRPd25lciIsInVzZU1lbW8iLCJ2ZXJzZXNGb3JSZWYiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZVJlZmVyZW5jZSIsIm9yaWdWZXJzZU9iamVjdHMiLCJ2ZXJzZURhdGEiLCJBcnJheSIsInByb3RvdHlwZSIsInB1c2giLCJhcHBseSIsInVzZUVmZmVjdCIsIm5vdEVtcHR5IiwiYWxpZ25lZF8iLCJyZXN1bHRzIiwiZ2V0Q2hhbmdlcyIsIl9uZXdTdGF0ZSIsInVwZGF0ZWRWZXJzZU9iamVjdHNfIiwidXBkYXRlVmVyc2VXaXRoTmV3QWxpZ25tZW50cyIsInRhcmdldFZlcnNlT2JqZWN0cyIsInJlZiIsImhhbmRsZUFsaWdubWVudENsaWNrIiwiX2FsaWduZXJEYXRhIiwib3JpZ2luYWxWZXJzZVVzZm0iLCJwYXJzZVVzZm1Ub1dvcmRBbGlnbmVyRGF0YSIsInRhcmdldFdvcmRzIiwidmVyc2VBbGlnbm1lbnRzIiwiX25ld0FsaWdubWVudHMiLCJ2ZXJzZVVzZm0iLCJhZGRBbGlnbm1lbnRzVG9WZXJzZVVTRk0iLCJhbGlnbmVkVmVyc2VPYmplY3RzIiwidXNmbVZlcnNlVG9Kc29uIiwic2F2ZUFsaWdubWVudCIsImNhbGxTZXRTYXZlZFN0YXRlIiwiY2FuY2VsQWxpZ25tZW50Iiwic2V0RWRpdGluZyIsImVkaXRpbmdfIiwiX25ld1ZlcnNlVGV4dCIsInNldFZlcnNlQ2hhbmdlZCIsImNoYW5nZWQiLCJfaW5pdGlhbFZlcnNlVGV4dCIsIl9jaGFuZ2VkIiwiY3VycmVudFZlcnNlT2JqZWN0cyIsInVuc2F2ZWRDaGFuZ2VzIiwidW5zYXZlZENoYW5nZXNfIiwib25BbGlnbm1lbnRzQ2hhbmdlIiwiYWxpZ25tZW50Q29tcGxldGUiLCJhY3Rpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLE9BQU8sS0FBS0EsS0FBWixNQUF1QixPQUF2QjtBQUNBLFNBQ0VDLGdCQURGLEVBRUVDLHlCQUZGLEVBR0VDLFdBSEYsUUFJTyxrQkFKUDtBQUtBLE9BQU8sS0FBS0MsT0FBWixNQUF5QixZQUF6QjtBQUNBLFNBQ0VDLGVBREYsRUFFRUMsa0JBRkYsRUFHRUMsWUFIRixRQUlPLFVBSlA7QUFLQSxTQUFTQyw0QkFBVCxRQUE2Qyw0QkFBN0M7QUFDQSxTQUFTQyxlQUFULFFBQWdDLFVBQWhDO0FBQ0EsT0FBT0MscUJBQVAsTUFBa0MseUJBQWxDOztBQW1EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsYUFBVCxDQUF1QkMsZUFBdkIsRUFBd0NDLG9CQUF4QyxFQUE4RDtBQUFBOztBQUM1REEsRUFBQUEsb0JBQW9CLEdBQUcseUJBQUFBLG9CQUFvQixVQUFwQiw4REFBc0JDLE1BQXRCLEdBQStCRCxvQkFBL0IsR0FBc0QsSUFBN0UsQ0FENEQsQ0FDc0I7O0FBRHRCLDhCQUUzQlosZ0JBQWdCLENBQUNjLGdDQUFqQixDQUFrREgsZUFBbEQsRUFBbUVDLG9CQUFuRSxDQUYyQjtBQUFBLE1BRXBERyxVQUZvRCx5QkFFcERBLFVBRm9EO0FBQUEsTUFFeENDLFFBRndDLHlCQUV4Q0EsUUFGd0M7O0FBRzVELFNBQU9oQixnQkFBZ0IsQ0FBQ2lCLG9CQUFqQixDQUFzQ0QsUUFBdEMsRUFBZ0RELFVBQWhELENBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTRyxtQkFBVCxDQUE2QkMsbUJBQTdCLEVBQWtEQyxtQkFBbEQsRUFBdUVDLGdCQUF2RSxFQUFrR0MsWUFBbEcsRUFBZ0g7QUFDOUcsTUFBSVgsZUFBZSxHQUFHLElBQXRCO0FBQ0EsTUFBTVksb0JBQW9CLEdBQUdKLG1CQUFtQixJQUFJQyxtQkFBcEQ7O0FBRUEsTUFBSUMsZ0JBQWdCLElBQUlDLFlBQXhCLEVBQXNDO0FBQUEsZ0NBQ1J0QixnQkFBZ0IsQ0FBQ3dCLDZCQUFqQixDQUErQ0Qsb0JBQS9DLEVBQXFFRCxZQUFyRSxDQURRO0FBQUEsUUFDNUJHLGVBRDRCLHlCQUM1QkEsZUFENEI7O0FBRXBDZCxJQUFBQSxlQUFlLEdBQUdjLGVBQWxCO0FBQ0QsR0FIRCxNQUdPO0FBQ0xkLElBQUFBLGVBQWUsR0FBR1YseUJBQXlCLENBQUN5QixzQkFBMUIsQ0FBaURILG9CQUFqRCxDQUFsQjtBQUNEOztBQUNELFNBQU9aLGVBQVA7QUFDRCxDLENBRUQ7OztBQUNBLE9BQU8sU0FBU2dCLHlCQUFULE9BbUIwQjtBQUFBLE1BbEIvQkMsWUFrQitCLFFBbEIvQkEsWUFrQitCO0FBQUEsTUFqQi9CQyxVQWlCK0IsUUFqQi9CQSxVQWlCK0I7QUFBQSxNQWhCL0JDLGVBZ0IrQixRQWhCL0JBLGVBZ0IrQjtBQUFBLE1BZi9CQyxVQWUrQixRQWYvQkEsVUFlK0I7QUFBQSxNQWQvQlgsbUJBYytCLFFBZC9CQSxtQkFjK0I7QUFBQSxNQWIvQlksZ0JBYStCLFFBYi9CQSxnQkFhK0I7QUFBQSxNQVovQkMsY0FZK0IsUUFaL0JBLGNBWStCO0FBQUEsTUFYL0JDLHFCQVcrQixRQVgvQkEscUJBVytCO0FBQUEsTUFWL0JDLGVBVStCLFFBVi9CQSxlQVUrQjtBQUFBLE1BVC9CQyxTQVMrQixRQVQvQkEsU0FTK0I7QUFBQSxNQVIvQkMsZUFRK0IsUUFSL0JBLGVBUStCO0FBQUEsTUFQL0JDLGlCQU8rQixRQVAvQkEsaUJBTytCO0FBQUEsTUFOL0JDLGVBTStCLFFBTi9CQSxlQU0rQjtBQUFBLE1BTC9CQyxjQUsrQixRQUwvQkEsY0FLK0I7QUFBQSxNQUovQkMsZUFJK0IsUUFKL0JBLGVBSStCO0FBQUEsTUFIL0JDLGNBRytCLFFBSC9CQSxjQUcrQjtBQUFBLE1BRi9CQyxLQUUrQixRQUYvQkEsS0FFK0I7QUFBQSxNQUQvQkMscUJBQytCLFFBRC9CQSxxQkFDK0I7O0FBQUEsd0JBQ0o3QyxLQUFLLENBQUM4QyxRQUFOLENBQWU7QUFDeENDLElBQUFBLE9BQU8sRUFBRSxLQUQrQjtBQUV4Q0MsSUFBQUEsV0FBVyxFQUFFLElBRjJCO0FBR3hDQyxJQUFBQSxPQUFPLEVBQUUsS0FIK0I7QUFJeENDLElBQUFBLGFBQWEsRUFBRSxJQUp5QjtBQUt4QzNCLElBQUFBLFlBQVksRUFBRSxJQUwwQjtBQU14Q0gsSUFBQUEsbUJBQW1CLEVBQUUsSUFObUI7QUFPeENFLElBQUFBLGdCQUFnQixFQUFFO0FBUHNCLEdBQWYsQ0FESTtBQUFBO0FBQUEsTUFDeEI2QixLQUR3QjtBQUFBLE1BQ2pCQyxTQURpQjs7QUFBQSxNQVk3QkwsT0FaNkIsR0FtQjNCSSxLQW5CMkIsQ0FZN0JKLE9BWjZCO0FBQUEsTUFhN0JDLFdBYjZCLEdBbUIzQkcsS0FuQjJCLENBYTdCSCxXQWI2QjtBQUFBLE1BYzdCQyxPQWQ2QixHQW1CM0JFLEtBbkIyQixDQWM3QkYsT0FkNkI7QUFBQSxNQWU3QkMsYUFmNkIsR0FtQjNCQyxLQW5CMkIsQ0FlN0JELGFBZjZCO0FBQUEsTUFnQjdCM0IsWUFoQjZCLEdBbUIzQjRCLEtBbkIyQixDQWdCN0I1QixZQWhCNkI7QUFBQSxNQWlCN0JILG1CQWpCNkIsR0FtQjNCK0IsS0FuQjJCLENBaUI3Qi9CLG1CQWpCNkI7QUFBQSxNQWtCN0JFLGdCQWxCNkIsR0FtQjNCNkIsS0FuQjJCLENBa0I3QjdCLGdCQWxCNkI7O0FBcUIvQixXQUFTK0IsUUFBVCxDQUFrQkMsUUFBbEIsRUFBNEI7QUFDMUJGLElBQUFBLFNBQVMsQ0FBQyxVQUFBRyxTQUFTO0FBQUEsNkNBQVVBLFNBQVYsR0FBd0JELFFBQXhCO0FBQUEsS0FBVixDQUFUO0FBQ0Q7O0FBRUQsV0FBU0UsWUFBVCxHQUF3QjtBQUN0QkMsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLDRCQUFnQ0MsSUFBSSxDQUFDQyxTQUFMLENBQWV2QixTQUFmLENBQWhDOztBQUNBLFFBQU13QixVQUFVLG1DQUNYVixLQURXO0FBRWRILE1BQUFBLFdBQVcsRUFBRSxJQUZDO0FBR2RDLE1BQUFBLE9BQU8sRUFBRSxLQUhLO0FBSWRDLE1BQUFBLGFBQWEsRUFBRSxJQUpEO0FBS2QzQixNQUFBQSxZQUFZLEVBQUUsSUFMQTtBQU1kSCxNQUFBQSxtQkFBbUIsRUFBRSxJQU5QO0FBT2RFLE1BQUFBLGdCQUFnQixFQUFFO0FBUEosTUFBaEI7O0FBVUEsUUFBSSxDQUFDbEIsT0FBTyxDQUFDK0MsS0FBRCxFQUFRVSxVQUFSLENBQVosRUFBaUM7QUFDL0JKLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUjtBQUNBTCxNQUFBQSxRQUFRLENBQUNRLFVBQUQsQ0FBUjtBQUNEO0FBQ0Y7O0FBRUQsTUFBTUMsMEJBQTBCLG1DQUMzQnZCLGlCQUQyQjtBQUU5QndCLElBQUFBLFVBQVUsRUFBRXREO0FBRmtCLElBQWhDLENBM0MrQixDQWdEL0I7OztBQUNBdUIsRUFBQUEsVUFBVSxHQUFHQSxVQUFVLElBQUksRUFBM0I7QUFDQSxNQUFNZ0MsTUFBTSxHQUFHM0IsU0FBSCxhQUFHQSxTQUFILHVCQUFHQSxTQUFTLENBQUU0QixTQUExQjtBQUNBLE1BQU1DLHlCQUF5QixHQUFHMUQsNEJBQTRCLENBQzVEd0QsTUFENEQsRUFDcERGLDBCQURvRCxFQUN4QjVCLGNBRHdCLEVBQ1JFLGVBRFEsQ0FBOUQ7O0FBSUEsTUFBSSxDQUFDTCxlQUFMLEVBQXNCO0FBQUU7QUFDdEJtQyxJQUFBQSx5QkFBeUIsQ0FBQ0MsWUFBMUIsR0FBeUMsSUFBekM7QUFDRCxHQXpEOEIsQ0EyRC9COzs7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRzFELHFCQUFxQixDQUFDO0FBQ3REc0QsSUFBQUEsTUFBTSxFQUFOQSxNQURzRDtBQUV0RHpCLElBQUFBLGlCQUFpQixFQUFFMkIseUJBRm1DO0FBR3RERyxJQUFBQSxPQUFPLEVBQUVoQyxTQUFGLGFBQUVBLFNBQUYsdUJBQUVBLFNBQVMsQ0FBRWdDLE9BSGtDO0FBSXREQyxJQUFBQSxLQUFLLEVBQUVqQyxTQUFGLGFBQUVBLFNBQUYsdUJBQUVBLFNBQVMsQ0FBRWlDLEtBSm9DO0FBS3REcEMsSUFBQUEsY0FBYyxFQUFkQSxjQUxzRDtBQU10REUsSUFBQUEsZUFBZSxFQUFmQSxlQU5zRDtBQU90RG1DLElBQUFBLGlCQUFpQixFQUFFTCx5QkFBRixhQUFFQSx5QkFBRix1QkFBRUEseUJBQXlCLENBQUVNLFVBUFE7QUFRdERDLElBQUFBLFlBQVksRUFBRXRDLHFCQVJ3QztBQVN0REgsSUFBQUEsVUFBVSxFQUFWQTtBQVRzRCxHQUFELENBQXZEO0FBWUEsTUFBTW5CLG9CQUFvQixHQUFHYixLQUFLLENBQUMwRSxPQUFOLENBQWMsWUFBTTtBQUFBOztBQUFFO0FBQ2pELFFBQUksQ0FBQU4seUJBQXlCLFNBQXpCLElBQUFBLHlCQUF5QixXQUF6QixxQ0FBQUEseUJBQXlCLENBQUVPLFlBQTNCLGdGQUF5QzdELE1BQXpDLElBQWtELENBQXRELEVBQXlEO0FBQUU7QUFDekQsVUFBTThELFlBQVksR0FBRyxFQUFyQjs7QUFEdUQsaURBRzFCUix5QkFIMEIsYUFHMUJBLHlCQUgwQix1QkFHMUJBLHlCQUF5QixDQUFFTyxZQUhEO0FBQUE7O0FBQUE7QUFHdkQsNERBQXNFO0FBQUE7O0FBQUEsY0FBM0RFLGNBQTJEO0FBQ3BFLGNBQU1DLGdCQUFnQixHQUFHRCxjQUFILGFBQUdBLGNBQUgsZ0RBQUdBLGNBQWMsQ0FBRUUsU0FBbkIsMERBQUcsc0JBQTJCSCxZQUFwRDs7QUFFQSxjQUFJRSxnQkFBSixFQUFzQjtBQUNwQkUsWUFBQUEsS0FBSyxDQUFDQyxTQUFOLENBQWdCQyxJQUFoQixDQUFxQkMsS0FBckIsQ0FBMkJQLFlBQTNCLEVBQXlDRSxnQkFBekM7QUFDRDtBQUNGO0FBVHNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBVXZELGFBQU9GLFlBQVA7QUFDRDs7QUFDRCxXQUFPUix5QkFBUCxhQUFPQSx5QkFBUCx1QkFBT0EseUJBQXlCLENBQUVRLFlBQWxDO0FBQ0QsR0FkNEIsRUFjMUIsQ0FBQ1IseUJBQUQsYUFBQ0EseUJBQUQsdUJBQUNBLHlCQUF5QixDQUFFUSxZQUE1QixFQUEwQ1IseUJBQTFDLGFBQTBDQSx5QkFBMUMsdUJBQTBDQSx5QkFBeUIsQ0FBRU8sWUFBckUsQ0FkMEIsQ0FBN0I7QUFnQkEzRSxFQUFBQSxLQUFLLENBQUNvRixTQUFOLENBQWdCLFlBQU07QUFBRTtBQUN0QixRQUFNQyxRQUFRLEdBQUcsQ0FBQyxDQUFDaEUsbUJBQW5CO0FBQ0EsUUFBSWlFLFFBQVEsR0FBRyxLQUFmOztBQUVBLFFBQUksQ0FBQ3RDLFdBQUwsRUFBa0I7QUFBRTtBQUNsQixVQUFJcUMsUUFBSixFQUFjO0FBQUU7QUFDZCxZQUFNN0Qsb0JBQW9CLEdBQUdKLG1CQUFtQixJQUFJQyxtQkFBcEQ7O0FBRUEsWUFBSSxDQUFDVSxlQUFMLEVBQXNCO0FBQ3BCdUQsVUFBQUEsUUFBUSxHQUFHLElBQVg7QUFDRCxTQUZELE1BRU8sSUFBSS9ELFlBQVksSUFBS0EsWUFBWSxLQUFLVSxnQkFBdEMsRUFBeUQ7QUFDOUQsY0FBTXNELE9BQU8sR0FBR3RGLGdCQUFnQixDQUFDd0IsNkJBQWpCLENBQStDRCxvQkFBL0MsRUFBcUVELFlBQXJFLENBQWhCO0FBQ0ErRCxVQUFBQSxRQUFRLEdBQUczRSxhQUFhLENBQUM0RSxPQUFELGFBQUNBLE9BQUQsdUJBQUNBLE9BQU8sQ0FBRTdELGVBQVYsRUFBMkJiLG9CQUEzQixDQUF4QjtBQUNELFNBSE0sTUFHQTtBQUNMLGNBQU1ELGVBQWUsR0FBR1YseUJBQXlCLENBQUN5QixzQkFBMUIsQ0FBaURILG9CQUFqRCxDQUF4QjtBQUNBOEQsVUFBQUEsUUFBUSxHQUFHM0UsYUFBYSxDQUFDQyxlQUFELEVBQWtCQyxvQkFBbEIsQ0FBeEI7QUFDRDtBQUNGOztBQUVELFVBQUlrQyxPQUFPLEtBQUt1QyxRQUFoQixFQUEwQjtBQUN4QmpDLFFBQUFBLFFBQVEsQ0FBQztBQUFFTixVQUFBQSxPQUFPLEVBQUV1QztBQUFYLFNBQUQsQ0FBUjtBQUNEO0FBQ0Y7QUFDRixHQXZCRCxFQXVCRyxDQUFDakUsbUJBQUQsRUFBc0IyQixXQUF0QixFQUFtQ3pCLFlBQW5DLEVBQWlEVSxnQkFBakQsRUFBbUVGLGVBQW5FLEVBQW9GbEIsb0JBQXBGLENBdkJIO0FBeUJBO0FBQ0Y7QUFDQTtBQUNBOztBQUNFLFdBQVMyRSxVQUFULEdBQW1DO0FBQUEsUUFBZmxDLFFBQWUsdUVBQUosRUFBSTtBQUNqQ0csSUFBQUEsT0FBTyxDQUFDQyxHQUFSLGdDQUFvQzdCLFlBQXBDLHNCQUFtRXlCLFFBQW5FOztBQUNBLFFBQU1tQyxTQUFTO0FBQ2J0QyxNQUFBQSxLQUFLLEVBQUxBO0FBRGEsT0FFVkcsUUFGVSxDQUFmLENBRmlDLENBTWpDOzs7QUFOaUMsUUFTL0JKLGFBVCtCLEdBZ0I3QnVDLFNBaEI2QixDQVMvQnZDLGFBVCtCO0FBQUEsUUFXL0IzQixZQVgrQixHQWdCN0JrRSxTQWhCNkIsQ0FXL0JsRSxZQVgrQjtBQUFBLFFBYS9CSCxtQkFiK0IsR0FnQjdCcUUsU0FoQjZCLENBYS9CckUsbUJBYitCO0FBQUEsUUFlL0JFLGdCQWYrQixHQWdCN0JtRSxTQWhCNkIsQ0FlL0JuRSxnQkFmK0I7QUFpQmpDLFFBQUlvRSxvQkFBb0IsR0FBR3RFLG1CQUEzQjs7QUFFQSxRQUFJOEIsYUFBSixFQUFtQjtBQUFFO0FBQ25CTyxNQUFBQSxPQUFPLENBQUNDLEdBQVI7QUFDQWdDLE1BQUFBLG9CQUFvQixHQUFHQyw0QkFBNEIsRUFBbkQ7QUFDRDs7QUFFRCxRQUFJckUsZ0JBQWdCLElBQUlDLFlBQXhCLEVBQXNDO0FBQ3BDa0MsTUFBQUEsT0FBTyxDQUFDQyxHQUFSLG9DQUErQ25DLFlBQS9DO0FBQ0EsVUFBTUMsb0JBQW9CLEdBQUdrRSxvQkFBb0IsSUFBSXJFLG1CQUFyRDtBQUNBcUUsTUFBQUEsb0JBQW9CLElBQUlqQyxPQUFPLENBQUNDLEdBQVIsNENBQXhCOztBQUhvQyxtQ0FJTHpELGdCQUFnQixDQUFDd0IsNkJBQWpCLENBQStDRCxvQkFBL0MsRUFBcUVELFlBQXJFLENBSks7QUFBQSxVQUk1QnFFLGtCQUo0QiwwQkFJNUJBLGtCQUo0Qjs7QUFLcENGLE1BQUFBLG9CQUFvQixHQUFHRSxrQkFBdkI7QUFDRCxLQU5ELE1BTU87QUFBRTtBQUNQRixNQUFBQSxvQkFBb0IsSUFBSWpDLE9BQU8sQ0FBQ0MsR0FBUiw2Q0FBd0Q7QUFBRW5DLFFBQUFBLFlBQVksRUFBWkEsWUFBRjtBQUFnQm1FLFFBQUFBLG9CQUFvQixFQUFwQkE7QUFBaEIsT0FBeEQsQ0FBeEI7QUFDQUEsTUFBQUEsb0JBQW9CLEdBQUdBLG9CQUFvQixJQUFJckUsbUJBQS9DO0FBQ0Q7O0FBRUQsUUFBSXFFLG9CQUFKLEVBQTBCO0FBQUE7O0FBQ3hCLFVBQU1HLEdBQUcsR0FBR3ZELGVBQUgsYUFBR0EsZUFBSCxnREFBR0EsZUFBZSxDQUFFcUMsWUFBcEIsMERBQUcsc0JBQWdDOUMsWUFBaEMsQ0FBWjtBQUNBLGFBQU87QUFDTE4sUUFBQUEsWUFBWSxFQUFaQSxZQURLO0FBRUxzRSxRQUFBQSxHQUFHLEVBQUhBLEdBRks7QUFHTHpFLFFBQUFBLG1CQUFtQixFQUFFc0U7QUFIaEIsT0FBUDtBQUtEOztBQUVELFdBQU8sRUFBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBOzs7QUF0S2lDLFdBdUtoQkksb0JBdktnQjtBQUFBO0FBQUE7QUFtTS9CO0FBQ0Y7QUFDQTtBQUNBOzs7QUF0TWlDO0FBQUEsb0ZBdUsvQjtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQ00vRCxlQUROO0FBQUE7QUFBQTtBQUFBOztBQUVRZ0UsY0FBQUEsWUFGUixHQUV1QixJQUZ2QjtBQUFBO0FBQUEscUJBR1VyRCxlQUFlLEVBSHpCOztBQUFBO0FBS0ksa0JBQUksQ0FBQ00sV0FBTCxFQUFrQjtBQUFFO0FBQ2xCUyxnQkFBQUEsT0FBTyxDQUFDQyxHQUFSO0FBQ005QyxnQkFBQUEsZUFGVSxHQUVRTyxtQkFBbUIsQ0FBQ0MsbUJBQUQsRUFBc0JDLG1CQUF0QixFQUEyQ0MsZ0JBQTNDLEVBQTZEQyxZQUE3RCxDQUYzQjtBQUdaeUUsZ0JBQUFBLGlCQUhZLEdBR1EsSUFIUjs7QUFLaEIsb0JBQUluRixvQkFBSixFQUEwQjtBQUN4Qm1GLGtCQUFBQSxpQkFBaUIsR0FBRzlGLHlCQUF5QixDQUFDeUIsc0JBQTFCLENBQWlEZCxvQkFBakQsQ0FBcEI7QUFDRDs7QUFQZSx3Q0FZWlosZ0JBQWdCLENBQUNnRywwQkFBakIsQ0FBNENyRixlQUE1QyxFQUE2RG9GLGlCQUE3RCxDQVpZLEVBVUQvRSxRQVZDLHlCQVVkaUYsV0FWYyxFQVdHbEYsVUFYSCx5QkFXZG1GLGVBWGM7QUFhaEJKLGdCQUFBQSxZQUFZLEdBQUc7QUFBRTlFLGtCQUFBQSxRQUFRLEVBQVJBLFFBQUY7QUFBWUQsa0JBQUFBLFVBQVUsRUFBVkE7QUFBWixpQkFBZjtBQUNELGVBZEQsTUFjTztBQUFFO0FBQ1B5QyxnQkFBQUEsT0FBTyxDQUFDQyxHQUFSO0FBQ0FxQyxnQkFBQUEsWUFBWSxHQUFHL0MsV0FBZjtBQUNEOztBQUNESyxjQUFBQSxRQUFRLENBQUM7QUFBRUwsZ0JBQUFBLFdBQVcsRUFBRStDO0FBQWYsZUFBRCxDQUFSO0FBQ0F0QyxjQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWXFDLFlBQVo7O0FBeEJKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBdksrQjtBQUFBO0FBQUE7O0FBdU0vQixXQUFTSiw0QkFBVCxHQUFzRTtBQUFBLFFBQWhDUyxjQUFnQyx1RUFBZmxELGFBQWU7O0FBQ3BFLFFBQU0xQixvQkFBb0IsR0FBR0osbUJBQW1CLElBQUlDLG1CQUFwRDtBQUNBLFFBQU1LLGVBQWUsR0FBR0gsWUFBWSxJQUFJckIseUJBQXlCLENBQUN5QixzQkFBMUIsQ0FBaURILG9CQUFqRCxDQUF4QztBQUNBLFFBQU02RSxTQUFTLEdBQUdwRyxnQkFBZ0IsQ0FBQ3FHLHdCQUFqQixDQUEwQ0YsY0FBYyxDQUFDRixXQUF6RCxFQUFzRUUsY0FBYyxDQUFDRCxlQUFyRixFQUFzR3pFLGVBQXRHLENBQWxCO0FBQ0EsUUFBTTZFLG1CQUFtQixHQUFHcEcsV0FBVyxDQUFDcUcsZUFBWixDQUE0QkgsU0FBNUIsQ0FBNUI7QUFDQSxXQUFPRSxtQkFBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7OztBQUNFLFdBQVNFLGFBQVQsR0FBdUQ7QUFBQSxRQUFoQ0wsY0FBZ0MsdUVBQWZsRCxhQUFlOztBQUNyRE8sSUFBQUEsT0FBTyxDQUFDQyxHQUFSLG9DQUErQzBDLGNBQS9DOztBQUVBLFFBQUlBLGNBQUosRUFBb0I7QUFDbEIsVUFBTUcsbUJBQW1CLEdBQUdaLDRCQUE0QixDQUFDUyxjQUFELENBQXhEO0FBQ0EzQyxNQUFBQSxPQUFPLENBQUNDLEdBQVIsMENBQXFENkMsbUJBQXJEO0FBQ0EsVUFBTWpELFFBQVEsR0FBRztBQUNmTixRQUFBQSxXQUFXLEVBQUUsSUFERTtBQUVmQyxRQUFBQSxPQUFPLEVBQUUsS0FGTTtBQUdmQyxRQUFBQSxhQUFhLEVBQUUsSUFIQTtBQUlmOUIsUUFBQUEsbUJBQW1CLEVBQUVtRjtBQUpOLE9BQWpCO0FBTUFsRCxNQUFBQSxRQUFRLENBQUNDLFFBQUQsQ0FBUjtBQUNBb0QsTUFBQUEsaUJBQWlCLENBQUMsSUFBRCxFQUFPcEQsUUFBUCxDQUFqQjtBQUNELEtBWEQsTUFXTztBQUNMRCxNQUFBQSxRQUFRLENBQUM7QUFDUEwsUUFBQUEsV0FBVyxFQUFFLElBRE47QUFFUEMsUUFBQUEsT0FBTyxFQUFFO0FBRkYsT0FBRCxDQUFSO0FBSUQ7QUFDRjtBQUVEO0FBQ0Y7QUFDQTs7O0FBQ0UsV0FBUzBELGVBQVQsR0FBMkI7QUFDekJsRCxJQUFBQSxPQUFPLENBQUNDLEdBQVI7QUFDQSxRQUFNOUMsZUFBZSxHQUFHTyxtQkFBbUIsQ0FBQ0MsbUJBQUQsRUFBc0JDLG1CQUF0QixFQUEyQ0MsZ0JBQTNDLEVBQTZEQyxZQUE3RCxDQUEzQztBQUNBLFFBQU13QixPQUFPLEdBQUdwQyxhQUFhLENBQUNDLGVBQUQsRUFBa0J3RCx5QkFBbEIsYUFBa0JBLHlCQUFsQix1QkFBa0JBLHlCQUF5QixDQUFFUSxZQUE3QyxDQUE3QjtBQUNBdkIsSUFBQUEsUUFBUSxDQUFDO0FBQUVMLE1BQUFBLFdBQVcsRUFBRSxJQUFmO0FBQXFCRCxNQUFBQSxPQUFPLEVBQVBBO0FBQXJCLEtBQUQsQ0FBUjtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O0FBdlBpQyxXQXdQaEI2RCxVQXhQZ0I7QUFBQTtBQUFBO0FBdVEvQjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQTVRaUM7QUFBQSwwRUF3UC9CLGtCQUEwQkMsUUFBMUI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBb0NDLGNBQUFBLGFBQXBDLDhEQUFvRHZGLFlBQXBEOztBQUFBLG1CQUNNTyxVQUROO0FBQUE7QUFBQTtBQUFBOztBQUFBLG9CQUVRK0UsUUFBUSxJQUFJLENBQUM1RCxPQUZyQjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHFCQUdZUCxlQUFlLEVBSDNCOztBQUFBO0FBTUksa0JBQUltRSxRQUFRLEtBQUs1RCxPQUFqQixFQUEwQjtBQUN4QjZELGdCQUFBQSxhQUFhLEdBQUdBLGFBQWEsSUFBSTdFLGdCQUFqQztBQUNNcUIsZ0JBQUFBLFFBRmtCLEdBRVA7QUFBRUwsa0JBQUFBLE9BQU8sRUFBRTRELFFBQVg7QUFBcUJ0RixrQkFBQUEsWUFBWSxFQUFFdUY7QUFBbkMsaUJBRk87QUFHeEJ6RCxnQkFBQUEsUUFBUSxDQUFDQyxRQUFELENBQVI7QUFDQW9ELGdCQUFBQSxpQkFBaUIsQ0FBRUksYUFBYSxLQUFLN0UsZ0JBQXBCLEVBQXVDcUIsUUFBdkMsQ0FBakI7QUFDRDs7QUFYTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQXhQK0I7QUFBQTtBQUFBOztBQTZRL0IsV0FBU3lELGVBQVQsQ0FBeUJDLE9BQXpCLEVBQWtDekYsWUFBbEMsRUFBZ0QwRixpQkFBaEQsRUFBbUU7QUFBQSxpQ0FDckNoSCxnQkFBZ0IsQ0FBQ3dCLDZCQUFqQixDQUErQ0osbUJBQS9DLEVBQW9FRSxZQUFwRSxDQURxQztBQUFBLFFBQ3pERyxlQUR5RCwwQkFDekRBLGVBRHlEOztBQUVqRSxRQUFNcUIsT0FBTyxHQUFHcEMsYUFBYSxDQUFDZSxlQUFELEVBQWtCMEMseUJBQWxCLGFBQWtCQSx5QkFBbEIsdUJBQWtCQSx5QkFBeUIsQ0FBRVEsWUFBN0MsQ0FBN0I7O0FBQ0EsUUFBTXNDLFFBQVEsR0FBRzNGLFlBQVksS0FBS1UsZ0JBQWxDOztBQUVBb0IsSUFBQUEsUUFBUSxDQUFDO0FBQ1AvQixNQUFBQSxnQkFBZ0IsRUFBRTRGLFFBRFg7QUFFUDNGLE1BQUFBLFlBQVksRUFBWkEsWUFGTztBQUdQd0IsTUFBQUEsT0FBTyxFQUFQQTtBQUhPLEtBQUQsQ0FBUjtBQUtEOztBQUVELE1BQU1vRSxtQkFBbUIsR0FBR25ILEtBQUssQ0FBQzBFLE9BQU4sQ0FBZSxZQUFNO0FBQUU7QUFDakQsUUFBSXJELG1CQUFKLEVBQXlCO0FBQ3ZCLFVBQU1ULGVBQWUsR0FBR08sbUJBQW1CLENBQUNDLG1CQUFELEVBQXNCQyxtQkFBdEIsRUFBMkNDLGdCQUEzQyxFQUE2REMsWUFBN0QsQ0FBM0M7QUFDQSxVQUFNQyxvQkFBb0IsR0FBR3JCLFdBQVcsQ0FBQ3FHLGVBQVosQ0FBNEI1RixlQUE1QixDQUE3QjtBQUNBLGFBQU9ZLG9CQUFQO0FBQ0Q7O0FBQ0QsV0FBT0gsbUJBQVA7QUFDRCxHQVAyQixFQU96QixDQUFDRCxtQkFBRCxFQUFzQkMsbUJBQXRCLEVBQTJDQyxnQkFBM0MsRUFBNkRDLFlBQTdELENBUHlCLENBQTVCO0FBU0EsTUFBTTZGLGNBQXNCLEdBQUdwSCxLQUFLLENBQUMwRSxPQUFOLENBQWUsWUFBTTtBQUFFO0FBQ3BELFFBQU1zQyxPQUFPLEdBQUcxRixnQkFBZ0IsSUFBS0YsbUJBQW1CLElBQUksQ0FBQ2hCLE9BQU8sQ0FBQ2lCLG1CQUFELEVBQXNCRCxtQkFBdEIsQ0FBcEU7QUFDQSxXQUFPNEYsT0FBUDtBQUNELEdBSDhCLEVBRzVCLENBQUM1RixtQkFBRCxFQUFzQkMsbUJBQXRCLEVBQTJDQyxnQkFBM0MsQ0FINEIsQ0FBL0I7QUFLQTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUNFLFdBQVNvRixpQkFBVCxDQUEyQlcsZUFBM0IsRUFBNkQ7QUFBQSxRQUFqQi9ELFFBQWlCLHVFQUFOLEVBQU07O0FBQzNELFFBQU1tQyxTQUFTLG1DQUNWdEMsS0FEVSxHQUVWRyxRQUZVLENBQWYsQ0FEMkQsQ0FLM0Q7OztBQUNBZCxJQUFBQSxlQUFlLElBQUlBLGVBQWUsQ0FBQ1gsWUFBRCxFQUFlLENBQUN3RixlQUFoQixFQUFpQztBQUFFN0IsTUFBQUEsVUFBVSxFQUFWQSxVQUFGO0FBQWNoQyxNQUFBQSxZQUFZLEVBQVpBLFlBQWQ7QUFBNEJMLE1BQUFBLEtBQUssRUFBRXNDO0FBQW5DLEtBQWpDLENBQWxDO0FBQ0Q7O0FBRUR6RixFQUFBQSxLQUFLLENBQUNvRixTQUFOLENBQWdCLFlBQU07QUFBRTtBQUN0QixRQUFNaUMsZUFBZSxHQUFHRCxjQUFjLElBQUlwRSxXQUExQztBQUNBMEQsSUFBQUEsaUJBQWlCLENBQUNXLGVBQUQsQ0FBakI7QUFDRCxHQUhELEVBR0csQ0FBQ0QsY0FBRCxFQUFpQnBFLFdBQWpCLENBSEg7QUFLQTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUNFLFdBQVNzRSxrQkFBVCxDQUE0Qi9CLE9BQTVCLEVBQXFDO0FBQ25DOUIsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLHNEQUFpRTZCLE9BQWpFLEVBRG1DLENBQ3VDOztBQUR2QyxRQUUzQlcsV0FGMkIsR0FFTVgsT0FGTixDQUUzQlcsV0FGMkI7QUFBQSxRQUVkQyxlQUZjLEdBRU1aLE9BRk4sQ0FFZFksZUFGYztBQUduQyxRQUFNb0IsaUJBQWlCLEdBQUd0SCxnQkFBZ0IsQ0FBQ2lCLG9CQUFqQixDQUFzQ2dGLFdBQXRDLEVBQW1EQyxlQUFuRCxDQUExQjtBQUNBMUMsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLDBCQUE4QjZELGlCQUFpQixHQUFHLFdBQUgsR0FBaUIsWUFBaEU7QUFDQWxFLElBQUFBLFFBQVEsQ0FBQztBQUFFSCxNQUFBQSxhQUFhLEVBQUVxQyxPQUFqQjtBQUEwQnhDLE1BQUFBLE9BQU8sRUFBRXdFO0FBQW5DLEtBQUQsQ0FBUjtBQUNBLFdBQU9BLGlCQUFQO0FBQ0Q7O0FBRUQsU0FBTztBQUNMQyxJQUFBQSxPQUFPLEVBQUU7QUFDUGIsTUFBQUEsZUFBZSxFQUFmQSxlQURPO0FBRVBuQixNQUFBQSxVQUFVLEVBQVZBLFVBRk87QUFHUE0sTUFBQUEsb0JBQW9CLEVBQXBCQSxvQkFITztBQUlQd0IsTUFBQUEsa0JBQWtCLEVBQWxCQSxrQkFKTztBQUtQYixNQUFBQSxhQUFhLEVBQWJBLGFBTE87QUFNUEcsTUFBQUEsVUFBVSxFQUFWQSxVQU5PO0FBT1BHLE1BQUFBLGVBQWUsRUFBZkE7QUFQTyxLQURKO0FBVUw1RCxJQUFBQSxLQUFLLEVBQUU7QUFDTEosTUFBQUEsT0FBTyxFQUFQQSxPQURLO0FBRUxDLE1BQUFBLFdBQVcsRUFBWEEsV0FGSztBQUdMbUUsTUFBQUEsbUJBQW1CLEVBQW5CQSxtQkFISztBQUlMbEUsTUFBQUEsT0FBTyxFQUFQQSxPQUpLO0FBS0xoQixNQUFBQSxnQkFBZ0IsRUFBaEJBLGdCQUxLO0FBTUxaLE1BQUFBLG1CQUFtQixFQUFuQkEsbUJBTks7QUFPTEUsTUFBQUEsWUFBWSxFQUFaQSxZQVBLO0FBUUxrQixNQUFBQSxjQUFjLEVBQWRBLGNBUks7QUFTTEUsTUFBQUEsY0FBYyxFQUFkQSxjQVRLO0FBVUx5RSxNQUFBQSxjQUFjLEVBQWRBLGNBVks7QUFXTDlGLE1BQUFBLGdCQUFnQixFQUFoQkEsZ0JBWEs7QUFZTGUsTUFBQUEsU0FBUyxFQUFUQSxTQVpLO0FBYUxPLE1BQUFBLEtBQUssRUFBTEE7QUFiSztBQVZGLEdBQVA7QUEwQkQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIEFsaWdubWVudEhlbHBlcnMsXG4gIFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMsXG4gIHVzZm1IZWxwZXJzLFxufSBmcm9tICd3b3JkLWFsaWduZXItcmNsJ1xuaW1wb3J0ICogYXMgaXNFcXVhbCBmcm9tICdkZWVwLWVxdWFsJ1xuaW1wb3J0IHtcbiAgU2NyaXB0dXJlQ29uZmlnLFxuICBTY3JpcHR1cmVSZWZlcmVuY2UsXG4gIFNlcnZlckNvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXRTY3JpcHR1cmVSZXNvdXJjZVNldHRpbmdzIH0gZnJvbSAnLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQgeyBPUklHSU5BTF9TT1VSQ0UgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB1c2VTY3JpcHR1cmVSZXNvdXJjZXMgZnJvbSAnLi91c2VTY3JpcHR1cmVSZXNvdXJjZXMnXG5cbmludGVyZmFjZSBTdGFydEVkaXQge1xuICAoKTogUHJvbWlzZTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdHVyZUFMaWdubWVudEVkaXRQcm9wcyB7XG4gIC8vIGN1cnJlbnQgdmVyc2Ugc2VsZWN0ZWQgZnJvbSBpbml0aWFsVmVyc2VPYmplY3RzW11cbiAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gIC8vIHJlZmVyZW5jZSBmb3IgdmVyc2Ugc2VsZWN0ZWQgZm9yIGFsaWdubWVudFxuICBjdXJyZW50VmVyc2VSZWY6IFNjcmlwdHVyZVJlZmVyZW5jZSxcbiAgLy8gaWYgdHJ1ZSB0aGVuIGVkaXRpbmcgaXMgYWxsb3dlZFxuICBlbmFibGVFZGl0OiBib29sZWFuLFxuICAvLyBpZiB0cnVlIHRoZW4gYWxpZ25tZW50IGlzIGFsbG93ZWRcbiAgZW5hYmxlQWxpZ25tZW50OiBib29sZWFuLFxuICAvLyBjb25maWd1cmF0aW9uIHRvIHVzZSBmb3IgaHR0cCBjb21tdW5pY2F0aW9uXG4gIGh0dHBDb25maWc6IFNlcnZlckNvbmZpZyxcbiAgLy8gYXJyYXkgb2YgZWFjaCB2ZXJzZSBmb3IgaW4gcmVmZXJlbmNlIHJhbmdlXG4gIGluaXRpYWxWZXJzZU9iamVjdHM6IFtdLFxuICAvLyBpbml0aWFsIHRleHQgZm9yIHZlcnNlXG4gIGluaXRpYWxWZXJzZVRleHQ6IHN0cmluZyxcbiAgLy8gZmxhZyB0aGF0IHdlIGFyZSB3b3JraW5nIG9uIE5UIGJvb2tcbiAgaXNOZXdUZXN0YW1lbnQ6IGJvb2xlYW4sXG4gIC8vIHVzZXIgbmFtZSBvZiBsb2dnZWQgaW4gdXNlclxuICBsb2dnZWRJblVzZXI6IHN0cmluZyxcbiAgLy8gb3duZXIgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgb3JpZ2luYWwgbGFuZ3VhZ2UgcmVzb3VyY2VzXG4gIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogc3RyaW5nLFxuICAvLyB1cmwgZm9yIHRoZSBvcmlnaW5hbCBsYW5ndWFnZSByZXBvXG4gIG9yaWdpbmFsUmVwb1VybDogc3RyaW5nLFxuICAvKiogY3VycmVudCByZWZlcmVuY2UgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvLyBkZXRhaWxzIGFib3V0IHRoZSBjdXJyZW50IHNjcmlwdHVyZSBsb2FkZWRcbiAgc2NyaXB0dXJlQ29uZmlnOiBTY3JpcHR1cmVDb25maWcsXG4gIC8vIHNldHRpbmdzIHRvIGJlIHVzZWQgZm9yIHNjcmlwdHVyZVxuICBzY3JpcHR1cmVTZXR0aW5nczogeyB9LFxuICAvLyBjYWxsYmFjayB0byBzYXZlIGN1cnJlbnQgdmVyc2UgZWRpdCBhbmQgYWxpZ25tZW50IGNoYW5nZXNcbiAgc2V0U2F2ZWRDaGFuZ2VzOiBGdW5jdGlvbixcbiAgLy8gY2FsbGJhY2sgdG8gY3JlYXRlIGEgdXNlciBicmFuY2ggZm9yIHNhdmluZyBlZGl0IGRhdGFcbiAgc3RhcnRFZGl0QnJhbmNoOiBTdGFydEVkaXQsXG4gIC8vIGluZGV4IHRvIHVzZSBmb3IgYm9vayAoZS5nLiBgMDFgIGZvciBgR0VOYClcbiAgYm9va0luZGV4OiBzdHJpbmcsXG4gIC8vIGJyYW5jaCBuYW1lIGN1cnJlbnRseSBiZWluZyB1c2VkIChlLmcuIGBtYXN0ZXJgIG9yIHVzZXIgYnJhbmNoKVxuICB3b3JraW5nUmVzb3VyY2VCcmFuY2g6IHN0cmluZyxcbiAgLy8gY3VycmVudCB0YXJnZXQgbGFuZ3VhZ2VcbiAgdGFyZ2V0TGFuZ3VhZ2U6IG9iamVjdCxcbiAgLy8gc291cmNlIGxhbmd1YWdlXG4gIHNvdXJjZUxhbmd1YWdlOiBzdHJpbmcsXG4gIC8vIHRpdGxlIHRvIHNob3cgaW4gYWxpZ25tZW50XG4gIHRpdGxlOiBzdHJpbmcsXG59XG5cbi8qKlxuICogZGV0ZXJtaW5lcyBpZiBhbGlnbm1lbnQgaXMgY29tcGxldGUgYmFzZWQgb24gdGFyZ2V0IFVTRk0gYW5kIG9yaWdpbmFsIGxhbmd1YWdlIHZlcnNlIG9iamVjdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRWZXJzZVVTRk1cbiAqIEBwYXJhbSB7b2JqZWN0W119IG9yaWdpbmFsVmVyc2VPYmplY3RzXG4gKi9cbmZ1bmN0aW9uIGlzVXNmbUFsaWduZWQodGFyZ2V0VmVyc2VVU0ZNLCBvcmlnaW5hbFZlcnNlT2JqZWN0cykge1xuICBvcmlnaW5hbFZlcnNlT2JqZWN0cyA9IG9yaWdpbmFsVmVyc2VPYmplY3RzPy5sZW5ndGggPyBvcmlnaW5hbFZlcnNlT2JqZWN0cyA6IG51bGwgLy8gbWFrZSBzdXJlIG5vdCBwYXNzaW5nIGVtcHR5IEFycmF5XG4gIGNvbnN0IHsgYWxpZ25tZW50cywgd29yZEJhbmsgfSA9IEFsaWdubWVudEhlbHBlcnMuZXh0cmFjdEFsaWdubWVudHNGcm9tVGFyZ2V0VmVyc2UodGFyZ2V0VmVyc2VVU0ZNLCBvcmlnaW5hbFZlcnNlT2JqZWN0cylcbiAgcmV0dXJuIEFsaWdubWVudEhlbHBlcnMuYXJlQWxnbm1lbnRzQ29tcGxldGUod29yZEJhbmssIGFsaWdubWVudHMpXG59XG5cbi8qKlxuICogZ2V0IHRoZSB1cGRhdGVkIFVTRk0gZm9yIHRhcmdldCB2ZXJzZSBmcm9tIHRoZSB1cGRhdGVkIHZlcnNlIG9iamVjdHMgYW5kIGxhdGVzdCB0ZXh0XG4gKiBAcGFyYW0ge29iamVjdFtdfSB1cGRhdGVkVmVyc2VPYmplY3RzXG4gKiBAcGFyYW0ge29iamVjdFtdfSBpbml0aWFsVmVyc2VPYmplY3RzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZlcnNlVGV4dENoYW5nZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWZXJzZVRleHRcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudFZlcnNlVXNmbSh1cGRhdGVkVmVyc2VPYmplY3RzLCBpbml0aWFsVmVyc2VPYmplY3RzLCB2ZXJzZVRleHRDaGFuZ2VkOiBib29sZWFuLCBuZXdWZXJzZVRleHQpIHtcbiAgbGV0IHRhcmdldFZlcnNlVVNGTSA9IG51bGxcbiAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcblxuICBpZiAodmVyc2VUZXh0Q2hhbmdlZCAmJiBuZXdWZXJzZVRleHQpIHtcbiAgICBjb25zdCB7IHRhcmdldFZlcnNlVGV4dCB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZShjdXJyZW50VmVyc2VPYmplY3RzXywgbmV3VmVyc2VUZXh0KVxuICAgIHRhcmdldFZlcnNlVVNGTSA9IHRhcmdldFZlcnNlVGV4dFxuICB9IGVsc2Uge1xuICAgIHRhcmdldFZlcnNlVVNGTSA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShjdXJyZW50VmVyc2VPYmplY3RzXylcbiAgfVxuICByZXR1cm4gdGFyZ2V0VmVyc2VVU0ZNXG59XG5cbi8vIG1hbmFnZSB2ZXJzZSBlZGl0IGFuZCBhbGlnbm1lbnQgc3RhdGVzXG5leHBvcnQgZnVuY3Rpb24gdXNlU2NyaXB0dXJlQWxpZ25tZW50RWRpdCh7XG4gIGN1cnJlbnRJbmRleCxcbiAgZW5hYmxlRWRpdCxcbiAgZW5hYmxlQWxpZ25tZW50LFxuICBodHRwQ29uZmlnLFxuICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICBpbml0aWFsVmVyc2VUZXh0LFxuICBpc05ld1Rlc3RhbWVudCxcbiAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICBvcmlnaW5hbFJlcG9VcmwsXG4gIHJlZmVyZW5jZSxcbiAgc2NyaXB0dXJlQ29uZmlnLFxuICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgc2V0U2F2ZWRDaGFuZ2VzLFxuICBzb3VyY2VMYW5ndWFnZSxcbiAgc3RhcnRFZGl0QnJhbmNoLFxuICB0YXJnZXRMYW5ndWFnZSxcbiAgdGl0bGUsXG4gIHdvcmtpbmdSZXNvdXJjZUJyYW5jaCxcbn0gOiBTY3JpcHR1cmVBTGlnbm1lbnRFZGl0UHJvcHMpIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGFsaWduZWQ6IGZhbHNlLFxuICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgIG5ld0FsaWdubWVudHM6IG51bGwsXG4gICAgbmV3VmVyc2VUZXh0OiBudWxsLFxuICAgIHVwZGF0ZWRWZXJzZU9iamVjdHM6IG51bGwsXG4gICAgdmVyc2VUZXh0Q2hhbmdlZDogZmFsc2UsXG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIGFsaWduZWQsXG4gICAgYWxpZ25lckRhdGEsXG4gICAgZWRpdGluZyxcbiAgICBuZXdBbGlnbm1lbnRzLFxuICAgIG5ld1ZlcnNlVGV4dCxcbiAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgIHZlcnNlVGV4dENoYW5nZWQsXG4gIH0gPSBzdGF0ZVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJDaGFuZ2VzKCkge1xuICAgIGNvbnNvbGUubG9nKGBjbGVhckNoYW5nZXMoKSAtICR7SlNPTi5zdHJpbmdpZnkocmVmZXJlbmNlKX1gKVxuICAgIGNvbnN0IGNsZWFyU3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICBuZXdBbGlnbm1lbnRzOiBudWxsLFxuICAgICAgbmV3VmVyc2VUZXh0OiBudWxsLFxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogbnVsbCxcbiAgICAgIHZlcnNlVGV4dENoYW5nZWQ6IGZhbHNlLFxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChzdGF0ZSwgY2xlYXJTdGF0ZSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGByZWZlcmVuY2UgY2hhbmdlZCwgcmVzZXQgZWRpdC9hbGlnbm1lbnQgc3RhdGUgdmFyaWFibGVzYClcbiAgICAgIHNldFN0YXRlKGNsZWFyU3RhdGUpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5nc18gPSB7XG4gICAgLi4uc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgcmVzb3VyY2VJZDogT1JJR0lOQUxfU09VUkNFLFxuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBodHRwQ29uZmlnID0gaHR0cENvbmZpZyB8fCB7fVxuICBjb25zdCBib29rSWQgPSByZWZlcmVuY2U/LnByb2plY3RJZFxuICBjb25zdCBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzID0gZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyhcbiAgICBib29rSWQsIG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3NfLCBpc05ld1Rlc3RhbWVudCwgb3JpZ2luYWxSZXBvVXJsLFxuICApXG5cbiAgaWYgKCFlbmFibGVBbGlnbm1lbnQpIHsgLy8gaWYgbm90IGVuYWJsZWQsIHRoZW4gd2UgZG9uJ3QgZmV0Y2ggcmVzb3VyY2VcbiAgICBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzLnJlc291cmNlTGluayA9IG51bGxcbiAgfVxuXG4gIC8vIGdldCBvcmlnaW5hbCBsYW5ndWFnZSBmb3IgdGhpcyBhbGlnbm1lbnRcbiAgY29uc3Qgb3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZSA9IHVzZVNjcmlwdHVyZVJlc291cmNlcyh7XG4gICAgYm9va0lkLFxuICAgIHNjcmlwdHVyZVNldHRpbmdzOiBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzLFxuICAgIGNoYXB0ZXI6IHJlZmVyZW5jZT8uY2hhcHRlcixcbiAgICB2ZXJzZTogcmVmZXJlbmNlPy52ZXJzZSxcbiAgICBpc05ld1Rlc3RhbWVudCxcbiAgICBvcmlnaW5hbFJlcG9VcmwsXG4gICAgY3VycmVudExhbmd1YWdlSWQ6IG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3M/Lmxhbmd1YWdlSWQsXG4gICAgY3VycmVudE93bmVyOiBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgaHR0cENvbmZpZyxcbiAgfSlcblxuICBjb25zdCBvcmlnaW5hbFZlcnNlT2JqZWN0cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4geyAvLyBnZXQgdGhlIG9yaWdpbmFsIGxhbmd1YWdlIHZlcnNlT2JqZWN0c1xuICAgIGlmIChvcmlnaW5hbFNjcmlwdHVyZVJlc291cmNlPy52ZXJzZXNGb3JSZWY/Lmxlbmd0aCA+IDEpIHsgLy8gaWYgbXVsdGlwbGUgdmVyc2VzLCB0aGVuIGFwcGVuZCB0aGVtIHRvZ2V0aGVyXG4gICAgICBjb25zdCB2ZXJzZU9iamVjdHMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IHZlcnNlUmVmZXJlbmNlIG9mIG9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2U/LnZlcnNlc0ZvclJlZikge1xuICAgICAgICBjb25zdCBvcmlnVmVyc2VPYmplY3RzID0gdmVyc2VSZWZlcmVuY2U/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzXG5cbiAgICAgICAgaWYgKG9yaWdWZXJzZU9iamVjdHMpIHtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh2ZXJzZU9iamVjdHMsIG9yaWdWZXJzZU9iamVjdHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2ZXJzZU9iamVjdHNcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2U/LnZlcnNlT2JqZWN0c1xuICB9LCBbb3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZT8udmVyc2VPYmplY3RzLCBvcmlnaW5hbFNjcmlwdHVyZVJlc291cmNlPy52ZXJzZXNGb3JSZWZdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBhbGlnbm1lbnQgc3RhdHVzIHdoZW4gYWxpZ25lciBpcyBoaWRkZW5cbiAgICBjb25zdCBub3RFbXB0eSA9ICEhaW5pdGlhbFZlcnNlT2JqZWN0c1xuICAgIGxldCBhbGlnbmVkXyA9IGZhbHNlXG5cbiAgICBpZiAoIWFsaWduZXJEYXRhKSB7IC8vIHNraXAgaWYgYWxpZ25lciBpcyBiZWluZyBzaG93blxuICAgICAgaWYgKG5vdEVtcHR5KSB7IC8vIHNraXAgaWYgZW1wdHlcbiAgICAgICAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcblxuICAgICAgICBpZiAoIWVuYWJsZUFsaWdubWVudCkge1xuICAgICAgICAgIGFsaWduZWRfID0gdHJ1ZVxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZlcnNlVGV4dCAmJiAobmV3VmVyc2VUZXh0ICE9PSBpbml0aWFsVmVyc2VUZXh0KSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGN1cnJlbnRWZXJzZU9iamVjdHNfLCBuZXdWZXJzZVRleHQpXG4gICAgICAgICAgYWxpZ25lZF8gPSBpc1VzZm1BbGlnbmVkKHJlc3VsdHM/LnRhcmdldFZlcnNlVGV4dCwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0VmVyc2VVU0ZNID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKGN1cnJlbnRWZXJzZU9iamVjdHNfKVxuICAgICAgICAgIGFsaWduZWRfID0gaXNVc2ZtQWxpZ25lZCh0YXJnZXRWZXJzZVVTRk0sIG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGlnbmVkICE9PSBhbGlnbmVkXykge1xuICAgICAgICBzZXRTdGF0ZSh7IGFsaWduZWQ6IGFsaWduZWRfIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbaW5pdGlhbFZlcnNlT2JqZWN0cywgYWxpZ25lckRhdGEsIG5ld1ZlcnNlVGV4dCwgaW5pdGlhbFZlcnNlVGV4dCwgZW5hYmxlQWxpZ25tZW50LCBvcmlnaW5hbFZlcnNlT2JqZWN0c10pXG5cbiAgLyoqXG4gICAqIGdldCBjaGFuZ2VzIGZvciBzYXZpbmdcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlIC0gb3B0aW9uYWxseSBwYXNzIGluIG5ldyBzdGF0ZSAodG8gb3ZlcnJpZGUgc3RhdGUpXG4gICAqL1xuICBmdW5jdGlvbiBnZXRDaGFuZ2VzKG5ld1N0YXRlID0ge30pIHtcbiAgICBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIHN0YXJ0ZWQgJHtjdXJyZW50SW5kZXh9IC0gcGFzc2VkIHN0YXRlYCwgbmV3U3RhdGUpXG4gICAgY29uc3QgX25ld1N0YXRlID0ge1xuICAgICAgc3RhdGUsXG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG5ld0FsaWdubWVudHMsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdmVyc2VUZXh0Q2hhbmdlZCxcbiAgICB9ID0gX25ld1N0YXRlXG4gICAgbGV0IHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c1xuXG4gICAgaWYgKG5ld0FsaWdubWVudHMpIHsgLy8gaWYgdW5zYXZlZCBhbGlnbm1lbnQgY2hhbmdlcywgYXBwbHkgdGhlbVxuICAgICAgY29uc29sZS5sb2coYGdldENoYW5nZXMgLSBhcHBseWluZyB1bnNhdmVkIGFsaWdubWVudHN9YClcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdXBkYXRlVmVyc2VXaXRoTmV3QWxpZ25tZW50cygpXG4gICAgfVxuXG4gICAgaWYgKHZlcnNlVGV4dENoYW5nZWQgJiYgbmV3VmVyc2VUZXh0KSB7XG4gICAgICBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIGFwcGx5aW5nIG5ldyB0ZXh0OmAsIG5ld1ZlcnNlVGV4dClcbiAgICAgIGNvbnN0IGN1cnJlbnRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c18gfHwgaW5pdGlhbFZlcnNlT2JqZWN0c1xuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0c18gJiYgY29uc29sZS5sb2coYGdldENoYW5nZXMgLSBhcHBseWluZyB1cGRhdGVkIGFsaWdubWVudHNgKVxuICAgICAgY29uc3QgeyB0YXJnZXRWZXJzZU9iamVjdHMgfSA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoY3VycmVudFZlcnNlT2JqZWN0c18sIG5ld1ZlcnNlVGV4dClcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdGFyZ2V0VmVyc2VPYmplY3RzXG4gICAgfSBlbHNlIHsgLy8gb25seSBhbGlnbm1lbnQgY2hhbmdlcyB0byB1cGxvYWRcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfICYmIGNvbnNvbGUubG9nKGBnZXRDaGFuZ2VzIC0gYXBwbHlpbmcgdXBkYXRlZCBhbGlnbm1lbnRzYCwgeyBuZXdWZXJzZVRleHQsIHVwZGF0ZWRWZXJzZU9iamVjdHNfIH0pXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNfIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0c18pIHtcbiAgICAgIGNvbnN0IHJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmPy5bY3VycmVudEluZGV4XVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV3VmVyc2VUZXh0LFxuICAgICAgICByZWYsXG4gICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHM6IHVwZGF0ZWRWZXJzZU9iamVjdHNfLFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7fVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBhbGlnbm1lbnQgYnV0dG9uIC0gd2lsbCBzaG93IGlmIG5vdCBhbHJlYWR5IHNob3duXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVBbGlnbm1lbnRDbGljaygpIHtcbiAgICBpZiAoZW5hYmxlQWxpZ25tZW50KSB7XG4gICAgICBsZXQgX2FsaWduZXJEYXRhID0gbnVsbFxuICAgICAgYXdhaXQgc3RhcnRFZGl0QnJhbmNoKClcblxuICAgICAgaWYgKCFhbGlnbmVyRGF0YSkgeyAvLyBpZiB3b3JkIGFsaWduZXIgbm90IHNob3duXG4gICAgICAgIGNvbnNvbGUubG9nKGBoYW5kbGVBbGlnbm1lbnRDbGljayAtIHRvZ2dsZSBPTiBhbGlnbm1lbnRgKVxuICAgICAgICBjb25zdCB0YXJnZXRWZXJzZVVTRk0gPSBnZXRDdXJyZW50VmVyc2VVc2ZtKHVwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgbGV0IG9yaWdpbmFsVmVyc2VVc2ZtID0gbnVsbFxuXG4gICAgICAgIGlmIChvcmlnaW5hbFZlcnNlT2JqZWN0cykge1xuICAgICAgICAgIG9yaWdpbmFsVmVyc2VVc2ZtID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHRhcmdldFdvcmRzOiB3b3JkQmFuayxcbiAgICAgICAgICB2ZXJzZUFsaWdubWVudHM6IGFsaWdubWVudHMsXG4gICAgICAgIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnBhcnNlVXNmbVRvV29yZEFsaWduZXJEYXRhKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZVVzZm0pXG4gICAgICAgIF9hbGlnbmVyRGF0YSA9IHsgd29yZEJhbmssIGFsaWdubWVudHMgfVxuICAgICAgfSBlbHNlIHsgLy8gd29yZCBhbGlnbmVyIGN1cnJlbnRseSBzaG93blxuICAgICAgICBjb25zb2xlLmxvZyhgaGFuZGxlQWxpZ25tZW50Q2xpY2sgLSBhbGlnbm1lbnQgYWxyZWFkeSBzaG93bmApXG4gICAgICAgIF9hbGlnbmVyRGF0YSA9IGFsaWduZXJEYXRhXG4gICAgICB9XG4gICAgICBzZXRTdGF0ZSh7IGFsaWduZXJEYXRhOiBfYWxpZ25lckRhdGEgfSlcbiAgICAgIGNvbnNvbGUubG9nKF9hbGlnbmVyRGF0YSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHVwZGF0ZWQgdmVyc2Ugb2JqZWN0cyBhZnRlciBhbGlnbm1lbnRzIGNoYW5nZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IF9uZXdBbGlnbm1lbnRzIC0gcmVzdWx0cyBvZiBhbGlnbmVyXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzKF9uZXdBbGlnbm1lbnRzID0gbmV3QWxpZ25tZW50cykge1xuICAgIGNvbnN0IGN1cnJlbnRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0cyB8fCBpbml0aWFsVmVyc2VPYmplY3RzXG4gICAgY29uc3QgdGFyZ2V0VmVyc2VUZXh0ID0gbmV3VmVyc2VUZXh0IHx8IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShjdXJyZW50VmVyc2VPYmplY3RzXylcbiAgICBjb25zdCB2ZXJzZVVzZm0gPSBBbGlnbm1lbnRIZWxwZXJzLmFkZEFsaWdubWVudHNUb1ZlcnNlVVNGTShfbmV3QWxpZ25tZW50cy50YXJnZXRXb3JkcywgX25ld0FsaWdubWVudHMudmVyc2VBbGlnbm1lbnRzLCB0YXJnZXRWZXJzZVRleHQpXG4gICAgY29uc3QgYWxpZ25lZFZlcnNlT2JqZWN0cyA9IHVzZm1IZWxwZXJzLnVzZm1WZXJzZVRvSnNvbih2ZXJzZVVzZm0pXG4gICAgcmV0dXJuIGFsaWduZWRWZXJzZU9iamVjdHNcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayBmb3Igd2hlbiB1c2VyIGNsaWNrZWQgb24gYnV0dG9uIHRvIHNhdmUgY3VycmVudCBhbGlnbm1lbnRzIGluIHdvcmQgYWxpZ25lci4gIEdlbmVyYXRlcyBuZXcgdmVyc2UgY29udGVudCBhbmQgc2F2ZXMgaW4gc3RhdGUuIENsb3NlcyBhbGlnbmVyIGRpc3BsYXlcbiAgICogQHBhcmFtIHtvYmplY3R9IF9uZXdBbGlnbm1lbnRzIC0gcmVzdWx0cyBvZiBhbGlnbmVyXG4gICAqL1xuICBmdW5jdGlvbiBzYXZlQWxpZ25tZW50KF9uZXdBbGlnbm1lbnRzID0gbmV3QWxpZ25tZW50cykge1xuICAgIGNvbnNvbGUubG9nKGBzYXZlQWxpZ25tZW50KCkgLSBuZXdBbGlnbm1lbnRzYCwgX25ld0FsaWdubWVudHMpXG5cbiAgICBpZiAoX25ld0FsaWdubWVudHMpIHtcbiAgICAgIGNvbnN0IGFsaWduZWRWZXJzZU9iamVjdHMgPSB1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzKF9uZXdBbGlnbm1lbnRzKVxuICAgICAgY29uc29sZS5sb2coYHNhdmVBbGlnbm1lbnQoKSAtIGFsaWduZWRWZXJzZU9iamVjdHNgLCBhbGlnbmVkVmVyc2VPYmplY3RzKVxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgbmV3QWxpZ25tZW50czogbnVsbCxcbiAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogYWxpZ25lZFZlcnNlT2JqZWN0cyxcbiAgICAgIH1cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgICAgY2FsbFNldFNhdmVkU3RhdGUodHJ1ZSwgbmV3U3RhdGUgKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTdGF0ZSh7XG4gICAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBidXR0b24gdG8gY2FuY2VsIHdvcmsgaW4gd29yZCBhbGlnbmVyLiAgQ2FsY3VsYXRlcyBhbmQgZGlzcGxheXMgY3VycmVudCBhbGlnbm1lbnQgdmFsaWQgc3RhdGUuIENsb3NlcyBhbGlnbmVyIGRpc3BsYXlcbiAgICovXG4gIGZ1bmN0aW9uIGNhbmNlbEFsaWdubWVudCgpIHtcbiAgICBjb25zb2xlLmxvZyhgY2FuY2VsQWxpZ25tZW50KClgKVxuICAgIGNvbnN0IHRhcmdldFZlcnNlVVNGTSA9IGdldEN1cnJlbnRWZXJzZVVzZm0odXBkYXRlZFZlcnNlT2JqZWN0cywgaW5pdGlhbFZlcnNlT2JqZWN0cywgdmVyc2VUZXh0Q2hhbmdlZCwgbmV3VmVyc2VUZXh0KVxuICAgIGNvbnN0IGFsaWduZWQgPSBpc1VzZm1BbGlnbmVkKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZT8udmVyc2VPYmplY3RzKVxuICAgIHNldFN0YXRlKHsgYWxpZ25lckRhdGE6IG51bGwsIGFsaWduZWQgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayBmb3IgYnV0dG9uIHRvIHNldCBlZGl0aW5nIHN0YXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZWRpdGluZ18gLSBpZiB0cnVlLCBlZGl0b3IgaXMgc2hvd24sIG90aGVyd2lzZSBlZGl0b3IgaXMgaGlkZGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfbmV3VmVyc2VUZXh0IC0gb3B0aW9uYWwgdmVyc2UgdGV4dFxuICAgKi9cbiAgYXN5bmMgZnVuY3Rpb24gc2V0RWRpdGluZyhlZGl0aW5nXywgX25ld1ZlcnNlVGV4dCA9IG5ld1ZlcnNlVGV4dCkge1xuICAgIGlmIChlbmFibGVFZGl0KSB7XG4gICAgICBpZiAoZWRpdGluZ18gJiYgIWVkaXRpbmcpIHtcbiAgICAgICAgYXdhaXQgc3RhcnRFZGl0QnJhbmNoKClcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRpbmdfICE9PSBlZGl0aW5nKSB7XG4gICAgICAgIF9uZXdWZXJzZVRleHQgPSBfbmV3VmVyc2VUZXh0IHx8IGluaXRpYWxWZXJzZVRleHRcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IGVkaXRpbmc6IGVkaXRpbmdfLCBuZXdWZXJzZVRleHQ6IF9uZXdWZXJzZVRleHQgfVxuICAgICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcbiAgICAgICAgY2FsbFNldFNhdmVkU3RhdGUoKF9uZXdWZXJzZVRleHQgIT09IGluaXRpYWxWZXJzZVRleHQpLCBuZXdTdGF0ZSApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZyb20gdGhlIGVkaXQgb25DaGFuZ2UgZXZlbnQgdG8gdXBkYXRlIGVkaXQgc3RhdGUgdmFyaWFibGVzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hhbmdlZCAtIHRydWUgaWYgdGhlIG5ld1ZlcnNlVGV4dCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgaW5pdGlhbFZlcnNlVGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmVyc2VUZXh0IC0gY3VycmVudCBjaGFuZ2VkIHZlcnNlIHRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IF9pbml0aWFsVmVyc2VUZXh0IC0gaW5pdGlhbCB2ZXJzZSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBzZXRWZXJzZUNoYW5nZWQoY2hhbmdlZCwgbmV3VmVyc2VUZXh0LCBfaW5pdGlhbFZlcnNlVGV4dCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VUZXh0IH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGluaXRpYWxWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICBjb25zdCBhbGlnbmVkID0gaXNVc2ZtQWxpZ25lZCh0YXJnZXRWZXJzZVRleHQsIG9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2U/LnZlcnNlT2JqZWN0cylcbiAgICBjb25zdCBfY2hhbmdlZCA9IG5ld1ZlcnNlVGV4dCAhPT0gaW5pdGlhbFZlcnNlVGV4dFxuXG4gICAgc2V0U3RhdGUoe1xuICAgICAgdmVyc2VUZXh0Q2hhbmdlZDogX2NoYW5nZWQsXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICBhbGlnbmVkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzID0gUmVhY3QudXNlTWVtbyggKCkgPT4geyAvLyBpZiB2ZXJzZSBoYXMgYmVlbiBlZGl0ZWQgb3IgYWxpZ25tZW50IGNoYW5nZWQsIHRoZW4gZ2VuZXJhdGUgbmV3IHZlcnNlT2JqZWN0cyB0byBkaXNwbGF5IGluIFNjcmlwdHVyZVBhbmVcbiAgICBpZiAoaW5pdGlhbFZlcnNlT2JqZWN0cykge1xuICAgICAgY29uc3QgdGFyZ2V0VmVyc2VVU0ZNID0gZ2V0Q3VycmVudFZlcnNlVXNmbSh1cGRhdGVkVmVyc2VPYmplY3RzLCBpbml0aWFsVmVyc2VPYmplY3RzLCB2ZXJzZVRleHRDaGFuZ2VkLCBuZXdWZXJzZVRleHQpXG4gICAgICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzXyA9IHVzZm1IZWxwZXJzLnVzZm1WZXJzZVRvSnNvbih0YXJnZXRWZXJzZVVTRk0pXG4gICAgICByZXR1cm4gY3VycmVudFZlcnNlT2JqZWN0c19cbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxWZXJzZU9iamVjdHNcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQsIG5ld1ZlcnNlVGV4dF0pXG5cbiAgY29uc3QgdW5zYXZlZENoYW5nZXM6Ym9vbGVhbiA9IFJlYWN0LnVzZU1lbW8oICgpID0+IHsgLy8gaWYgdmVyc2UgaGFzIGJlZW4gZWRpdGVkIG9yIGFsaWdubWVudCBjaGFuZ2VkLCB0aGVuIGluZGljYXRlIHdlIGhhdmUgdW5zYXZlZCBjaGFuZ2VzXG4gICAgY29uc3QgY2hhbmdlZCA9IHZlcnNlVGV4dENoYW5nZWQgfHwgKHVwZGF0ZWRWZXJzZU9iamVjdHMgJiYgIWlzRXF1YWwoaW5pdGlhbFZlcnNlT2JqZWN0cywgdXBkYXRlZFZlcnNlT2JqZWN0cykpXG4gICAgcmV0dXJuIGNoYW5nZWRcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWRdKVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayB0byBzY3JpcHR1cmUgY2FyZCB0byB1cGRhdGVkIHdpdGggbGF0ZXN0IHN0YXRlIGZvciBzYXZpbmdcbiAgICogQHBhcmFtIHtib29sZWFufSB1bnNhdmVkQ2hhbmdlc19cbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlXG4gICAqL1xuICBmdW5jdGlvbiBjYWxsU2V0U2F2ZWRTdGF0ZSh1bnNhdmVkQ2hhbmdlc18sIG5ld1N0YXRlID0geyB9ICkge1xuICAgIGNvbnN0IF9uZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGBjYWxsU2V0U2F2ZWRTdGF0ZSAtIG5ldyBzdGF0ZWAsIF9uZXdTdGF0ZSlcbiAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKGN1cnJlbnRJbmRleCwgIXVuc2F2ZWRDaGFuZ2VzXywgeyBnZXRDaGFuZ2VzLCBjbGVhckNoYW5nZXMsIHN0YXRlOiBfbmV3U3RhdGUgfSlcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHNldCBzYXZlZCBjaGFuZ2VzIHdoZW5ldmVyIHVzZXIgZWRpdHMgdmVyc2UgdGV4dCBvciBhbGlnbm1lbnRzIG9yIGlmIGFsaWdubWVudHMgYXJlIG9wZW5cbiAgICBjb25zdCB1bnNhdmVkQ2hhbmdlc18gPSB1bnNhdmVkQ2hhbmdlcyB8fCBhbGlnbmVyRGF0YVxuICAgIGNhbGxTZXRTYXZlZFN0YXRlKHVuc2F2ZWRDaGFuZ2VzXylcbiAgfSwgW3Vuc2F2ZWRDaGFuZ2VzLCBhbGlnbmVyRGF0YV0pXG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIGFsaWdubWVudHMgYXJlIGJlaW5nIGNoYW5nZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlc3VsdHNcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBhbGlnbm1lbnQgaXMgY29tcGxldGVcbiAgICovXG4gIGZ1bmN0aW9uIG9uQWxpZ25tZW50c0NoYW5nZShyZXN1bHRzKSB7XG4gICAgY29uc29sZS5sb2coYG9uQWxpZ25tZW50c0NoYW5nZSgpIC0gYWxpZ25tZW50IGNoYW5nZWQsIHJlc3VsdHNgLCByZXN1bHRzKSAvLyBtZXJnZSBhbGlnbm1lbnRzIGludG8gdGFyZ2V0IHZlcnNlIGFuZCBjb252ZXJ0IHRvIFVTRk1cbiAgICBjb25zdCB7IHRhcmdldFdvcmRzLCB2ZXJzZUFsaWdubWVudHMgfSA9IHJlc3VsdHNcbiAgICBjb25zdCBhbGlnbm1lbnRDb21wbGV0ZSA9IEFsaWdubWVudEhlbHBlcnMuYXJlQWxnbm1lbnRzQ29tcGxldGUodGFyZ2V0V29yZHMsIHZlcnNlQWxpZ25tZW50cylcbiAgICBjb25zb2xlLmxvZyhgQWxpZ25tZW50cyBhcmUgJHthbGlnbm1lbnRDb21wbGV0ZSA/ICdDT01QTEVURSEnIDogJ2luY29tcGxldGUnfWApXG4gICAgc2V0U3RhdGUoeyBuZXdBbGlnbm1lbnRzOiByZXN1bHRzLCBhbGlnbmVkOiBhbGlnbm1lbnRDb21wbGV0ZSB9KVxuICAgIHJldHVybiBhbGlnbm1lbnRDb21wbGV0ZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3Rpb25zOiB7XG4gICAgICBjYW5jZWxBbGlnbm1lbnQsXG4gICAgICBnZXRDaGFuZ2VzLFxuICAgICAgaGFuZGxlQWxpZ25tZW50Q2xpY2ssXG4gICAgICBvbkFsaWdubWVudHNDaGFuZ2UsXG4gICAgICBzYXZlQWxpZ25tZW50LFxuICAgICAgc2V0RWRpdGluZyxcbiAgICAgIHNldFZlcnNlQ2hhbmdlZCxcbiAgICB9LFxuICAgIHN0YXRlOiB7XG4gICAgICBhbGlnbmVkLFxuICAgICAgYWxpZ25lckRhdGEsXG4gICAgICBjdXJyZW50VmVyc2VPYmplY3RzLFxuICAgICAgZWRpdGluZyxcbiAgICAgIGluaXRpYWxWZXJzZVRleHQsXG4gICAgICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICAgICAgbmV3VmVyc2VUZXh0LFxuICAgICAgc291cmNlTGFuZ3VhZ2UsXG4gICAgICB0YXJnZXRMYW5ndWFnZSxcbiAgICAgIHVuc2F2ZWRDaGFuZ2VzLFxuICAgICAgdmVyc2VUZXh0Q2hhbmdlZCxcbiAgICAgIHJlZmVyZW5jZSxcbiAgICAgIHRpdGxlLFxuICAgIH0sXG4gIH1cbn1cbiJdfQ==
|
|
588
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0LnRzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIkFsaWdubWVudEhlbHBlcnMiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwidXNmbUhlbHBlcnMiLCJpc0VxdWFsIiwiU2NyaXB0dXJlQ29uZmlnIiwiU2NyaXB0dXJlUmVmZXJlbmNlIiwiU2VydmVyQ29uZmlnIiwiZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyIsIk9SSUdJTkFMX1NPVVJDRSIsImdldFZlcnNlc0ZvclJlZiIsImlzVXNmbUFsaWduZWQiLCJ0YXJnZXRWZXJzZVVTRk0iLCJvcmlnaW5hbFZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImV4dHJhY3RBbGlnbm1lbnRzRnJvbVRhcmdldFZlcnNlIiwiYWxpZ25tZW50cyIsIndvcmRCYW5rIiwiYXJlQWxnbm1lbnRzQ29tcGxldGUiLCJnZXRDdXJyZW50VmVyc2VVc2ZtIiwidXBkYXRlZFZlcnNlT2JqZWN0cyIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJ2ZXJzZVRleHRDaGFuZ2VkIiwibmV3VmVyc2VUZXh0IiwiY3VycmVudFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlVGV4dCIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJ1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0IiwiY3VycmVudEluZGV4IiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsImh0dHBDb25maWciLCJpbml0aWFsVmVyc2VUZXh0IiwiaXNOZXdUZXN0YW1lbnQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzIiwib3JpZ2luYWxSZXBvVXJsIiwicmVmZXJlbmNlIiwic2NyaXB0dXJlQ29uZmlnIiwic2NyaXB0dXJlU2V0dGluZ3MiLCJzZXRTYXZlZENoYW5nZXMiLCJzb3VyY2VMYW5ndWFnZSIsInN0YXJ0RWRpdEJyYW5jaCIsInRhcmdldExhbmd1YWdlIiwidGl0bGUiLCJ3b3JraW5nUmVzb3VyY2VCcmFuY2giLCJ1c2VTdGF0ZSIsImFsaWduZWQiLCJhbGlnbmVyRGF0YSIsImVkaXRpbmciLCJuZXdBbGlnbm1lbnRzIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJjaGFwdGVyIiwidmVyc2UiLCJwcm9qZWN0SWQiLCJiYXNpY1JlZmVyZW5jZSIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJjbGVhckNoYW5nZXMiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFyU3RhdGUiLCJvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzXyIsInJlc291cmNlSWQiLCJib29rSWQiLCJvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzIiwicmVzb3VyY2VMaW5rIiwidXNlTWVtbyIsInZlcnNlT2JqZWN0cyIsInZlcnNlcyIsImxhbmd1YWdlSWQiLCJ2ZXJzZVJlZmVyZW5jZSIsIm9yaWdWZXJzZU9iamVjdHMiLCJ2ZXJzZURhdGEiLCJBcnJheSIsInByb3RvdHlwZSIsInB1c2giLCJhcHBseSIsInVzZUVmZmVjdCIsIm5vdEVtcHR5IiwiYWxpZ25lZF8iLCJyZXN1bHRzIiwiZ2V0Q2hhbmdlcyIsIl9uZXdTdGF0ZSIsInVwZGF0ZWRWZXJzZU9iamVjdHNfIiwidXBkYXRlVmVyc2VXaXRoTmV3QWxpZ25tZW50cyIsInRhcmdldFZlcnNlT2JqZWN0cyIsInJlZiIsInZlcnNlc0ZvclJlZiIsImhhbmRsZUFsaWdubWVudENsaWNrIiwiX2FsaWduZXJEYXRhIiwib3JpZ2luYWxWZXJzZVVzZm0iLCJwYXJzZVVzZm1Ub1dvcmRBbGlnbmVyRGF0YSIsInRhcmdldFdvcmRzIiwidmVyc2VBbGlnbm1lbnRzIiwiX25ld0FsaWdubWVudHMiLCJ2ZXJzZVVzZm0iLCJhZGRBbGlnbm1lbnRzVG9WZXJzZVVTRk0iLCJhbGlnbmVkVmVyc2VPYmplY3RzIiwidXNmbVZlcnNlVG9Kc29uIiwic2F2ZUFsaWdubWVudCIsImNhbGxTZXRTYXZlZFN0YXRlIiwiY2FuY2VsQWxpZ25tZW50Iiwic2V0RWRpdGluZyIsImVkaXRpbmdfIiwiX25ld1ZlcnNlVGV4dCIsIl91cGRhdGVkVmVyc2VPYmplY3RzIiwidmVyc2VUZXh0IiwiZ2V0VXNmbUZvclZlcnNlQ29udGVudCIsImN1cnJlbnRWZXJzZU9iamVjdHMiLCJfYWxpZ25tZW50c0NoYW5nZWQiLCJzZXRWZXJzZUNoYW5nZWQiLCJjaGFuZ2VkIiwiX2luaXRpYWxWZXJzZVRleHQiLCJ1bnNhdmVkQ2hhbmdlcyIsInVuc2F2ZWRDaGFuZ2VzXyIsIm9uQWxpZ25tZW50c0NoYW5nZSIsImFsaWdubWVudENvbXBsZXRlIiwiYWN0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQSxPQUFPLEtBQUtBLEtBQVosTUFBdUIsT0FBdkI7QUFDQSxTQUNFQyxnQkFERixFQUVFQyx5QkFGRixFQUdFQyxXQUhGLFFBSU8sa0JBSlA7QUFLQSxPQUFPLEtBQUtDLE9BQVosTUFBeUIsWUFBekI7QUFDQSxTQUNFQyxlQURGLEVBRUVDLGtCQUZGLEVBR0VDLFlBSEYsUUFJTyxVQUpQO0FBS0EsU0FBU0MsNEJBQVQsUUFBNkMsNEJBQTdDO0FBQ0EsU0FBU0MsZUFBVCxRQUFnQyxVQUFoQztBQUNBLFNBQVNDLGVBQVQsUUFBZ0MsZ0JBQWhDOztBQXFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsYUFBVCxDQUF1QkMsZUFBdkIsRUFBd0NDLG9CQUF4QyxFQUE4RDtBQUFBOztBQUM1REEsRUFBQUEsb0JBQW9CLEdBQUcseUJBQUFBLG9CQUFvQixVQUFwQiw4REFBc0JDLE1BQXRCLEdBQStCRCxvQkFBL0IsR0FBc0QsSUFBN0UsQ0FENEQsQ0FDc0I7O0FBRHRCLDhCQUUzQlosZ0JBQWdCLENBQUNjLGdDQUFqQixDQUFrREgsZUFBbEQsRUFBbUVDLG9CQUFuRSxDQUYyQjtBQUFBLE1BRXBERyxVQUZvRCx5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QVhBLFdBRks7QUFHTGlFLE1BQUFBLG1CQUFtQixFQUFuQkEsbUJBSEs7QUFJTGhFLE1BQUFBLE9BQU8sRUFBUEEsT0FKSztBQUtMakIsTUFBQUEsZ0JBQWdCLEVBQWhCQSxnQkFMSztBQU1MWixNQUFBQSxtQkFBbUIsRUFBbkJBLG1CQU5LO0FBT0xFLE1BQUFBLFlBQVksRUFBWkEsWUFQSztBQVFMZSxNQUFBQSxTQUFTLEVBQUVtQixjQVJOO0FBU0xmLE1BQUFBLGNBQWMsRUFBZEEsY0FUSztBQVVMRSxNQUFBQSxjQUFjLEVBQWRBLGNBVks7QUFXTEMsTUFBQUEsS0FBSyxFQUFMQSxLQVhLO0FBWUwwRSxNQUFBQSxjQUFjLEVBQWRBLGNBWks7QUFhTGpHLE1BQUFBLGdCQUFnQixFQUFoQkE7QUFiSztBQVhGLEdBQVA7QUEyQkQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIEFsaWdubWVudEhlbHBlcnMsXG4gIFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMsXG4gIHVzZm1IZWxwZXJzLFxufSBmcm9tICd3b3JkLWFsaWduZXItcmNsJ1xuaW1wb3J0ICogYXMgaXNFcXVhbCBmcm9tICdkZWVwLWVxdWFsJ1xuaW1wb3J0IHtcbiAgU2NyaXB0dXJlQ29uZmlnLFxuICBTY3JpcHR1cmVSZWZlcmVuY2UsXG4gIFNlcnZlckNvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXRTY3JpcHR1cmVSZXNvdXJjZVNldHRpbmdzIH0gZnJvbSAnLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQgeyBPUklHSU5BTF9TT1VSQ0UgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IGdldFZlcnNlc0ZvclJlZiB9IGZyb20gJy4vdXNlU2NyaXB0dXJlJ1xuXG5pbnRlcmZhY2UgU3RhcnRFZGl0IHtcbiAgKCk6IFByb21pc2U8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHR1cmVBTGlnbm1lbnRFZGl0UHJvcHMge1xuICAvLyBpbmRleCB0byB1c2UgZm9yIGJvb2sgKGUuZy4gYDAxYCBmb3IgYEdFTmApXG4gIGJvb2tJbmRleDogc3RyaW5nLFxuICAvLyBjdXJyZW50IHZlcnNlIHNlbGVjdGVkIGZyb20gaW5pdGlhbFZlcnNlT2JqZWN0c1tdXG4gIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICAvLyByZWZlcmVuY2UgZm9yIHZlcnNlIHNlbGVjdGVkIGZvciBhbGlnbm1lbnRcbiAgY3VycmVudFZlcnNlUmVmOiBTY3JpcHR1cmVSZWZlcmVuY2UsXG4gIC8vIGlmIHRydWUgdGhlbiBlZGl0aW5nIGlzIGFsbG93ZWRcbiAgZW5hYmxlRWRpdDogYm9vbGVhbixcbiAgLy8gaWYgdHJ1ZSB0aGVuIGFsaWdubWVudCBpcyBhbGxvd2VkXG4gIGVuYWJsZUFsaWdubWVudDogYm9vbGVhbixcbiAgLy8gY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIGh0dHAgY29tbXVuaWNhdGlvblxuICBodHRwQ29uZmlnOiBTZXJ2ZXJDb25maWcsXG4gIC8vIGFycmF5IG9mIGVhY2ggdmVyc2UgZm9yIGluIHJlZmVyZW5jZSByYW5nZVxuICBpbml0aWFsVmVyc2VPYmplY3RzOiBbXSxcbiAgLy8gaW5pdGlhbCB0ZXh0IGZvciB2ZXJzZVxuICBpbml0aWFsVmVyc2VUZXh0OiBzdHJpbmcsXG4gIC8vIGZsYWcgdGhhdCB3ZSBhcmUgd29ya2luZyBvbiBOVCBib29rXG4gIGlzTmV3VGVzdGFtZW50OiBib29sZWFuLFxuICAvLyB1c2VyIG5hbWUgb2YgbG9nZ2VkIGluIHVzZXJcbiAgbG9nZ2VkSW5Vc2VyOiBzdHJpbmcsXG4gIC8vIG93bmVyIHRvIHVzZSB3aGVuIGZldGNoaW5nIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlc1xuICBvcmlnaW5hbExhbmd1YWdlT3duZXI6IHN0cmluZyxcbiAgLy8gdXJsIGZvciB0aGUgb3JpZ2luYWwgbGFuZ3VhZ2UgcmVwb1xuICBvcmlnaW5hbFJlcG9Vcmw6IHN0cmluZyxcbiAgLy8gb3JpZ2luYWwgc2NyaXB0dXJlIGJvb2tPYmplY3RzIGZvciBjdXJyZW50IGJvb2tcbiAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0czogb2JqZWN0LFxuICAvKiogY3VycmVudCByZWZlcmVuY2UgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvLyBkZXRhaWxzIGFib3V0IHRoZSBjdXJyZW50IHNjcmlwdHVyZSBsb2FkZWRcbiAgc2NyaXB0dXJlQ29uZmlnOiBTY3JpcHR1cmVDb25maWcsXG4gIC8vIHNldHRpbmdzIHRvIGJlIHVzZWQgZm9yIHNjcmlwdHVyZVxuICBzY3JpcHR1cmVTZXR0aW5nczogeyB9LFxuICAvLyBjYWxsYmFjayB0byBzYXZlIGN1cnJlbnQgdmVyc2UgZWRpdCBhbmQgYWxpZ25tZW50IGNoYW5nZXNcbiAgc2V0U2F2ZWRDaGFuZ2VzOiBGdW5jdGlvbixcbiAgLy8gc291cmNlIGxhbmd1YWdlXG4gIHNvdXJjZUxhbmd1YWdlOiBzdHJpbmcsXG4gIC8vIGNhbGxiYWNrIHRvIGNyZWF0ZSBhIHVzZXIgYnJhbmNoIGZvciBzYXZpbmcgZWRpdCBkYXRhXG4gIHN0YXJ0RWRpdEJyYW5jaDogU3RhcnRFZGl0LFxuICAvLyBjdXJyZW50IHRhcmdldCBsYW5ndWFnZVxuICB0YXJnZXRMYW5ndWFnZTogb2JqZWN0LFxuICAvLyB0aXRsZSB0byBzaG93IGluIGFsaWdubWVudFxuICB0aXRsZTogc3RyaW5nLFxuICAgLy8gYnJhbmNoIG5hbWUgY3VycmVudGx5IGJlaW5nIHVzZWQgKGUuZy4gYG1hc3RlcmAgb3IgdXNlciBicmFuY2gpXG4gIHdvcmtpbmdSZXNvdXJjZUJyYW5jaDogc3RyaW5nLFxufVxuXG4vKipcbiAqIGRldGVybWluZXMgaWYgYWxpZ25tZW50IGlzIGNvbXBsZXRlIGJhc2VkIG9uIHRhcmdldCBVU0ZNIGFuZCBvcmlnaW5hbCBsYW5ndWFnZSB2ZXJzZSBvYmplY3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0VmVyc2VVU0ZNXG4gKiBAcGFyYW0ge29iamVjdFtdfSBvcmlnaW5hbFZlcnNlT2JqZWN0c1xuICovXG5mdW5jdGlvbiBpc1VzZm1BbGlnbmVkKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZU9iamVjdHMpIHtcbiAgb3JpZ2luYWxWZXJzZU9iamVjdHMgPSBvcmlnaW5hbFZlcnNlT2JqZWN0cz8ubGVuZ3RoID8gb3JpZ2luYWxWZXJzZU9iamVjdHMgOiBudWxsIC8vIG1ha2Ugc3VyZSBub3QgcGFzc2luZyBlbXB0eSBBcnJheVxuICBjb25zdCB7IGFsaWdubWVudHMsIHdvcmRCYW5rIH0gPSBBbGlnbm1lbnRIZWxwZXJzLmV4dHJhY3RBbGlnbm1lbnRzRnJvbVRhcmdldFZlcnNlKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gIHJldHVybiBBbGlnbm1lbnRIZWxwZXJzLmFyZUFsZ25tZW50c0NvbXBsZXRlKHdvcmRCYW5rLCBhbGlnbm1lbnRzKVxufVxuXG4vKipcbiAqIGdldCB0aGUgdXBkYXRlZCBVU0ZNIGZvciB0YXJnZXQgdmVyc2UgZnJvbSB0aGUgdXBkYXRlZCB2ZXJzZSBvYmplY3RzIGFuZCBsYXRlc3QgdGV4dFxuICogQHBhcmFtIHtvYmplY3RbXX0gdXBkYXRlZFZlcnNlT2JqZWN0c1xuICogQHBhcmFtIHtvYmplY3RbXX0gaW5pdGlhbFZlcnNlT2JqZWN0c1xuICogQHBhcmFtIHtib29sZWFufSB2ZXJzZVRleHRDaGFuZ2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3VmVyc2VUZXh0XG4gKi9cbmZ1bmN0aW9uIGdldEN1cnJlbnRWZXJzZVVzZm0odXBkYXRlZFZlcnNlT2JqZWN0cywgaW5pdGlhbFZlcnNlT2JqZWN0cywgdmVyc2VUZXh0Q2hhbmdlZDogYm9vbGVhbiwgbmV3VmVyc2VUZXh0KSB7XG4gIGxldCB0YXJnZXRWZXJzZVVTRk0gPSBudWxsXG4gIGNvbnN0IGN1cnJlbnRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0cyB8fCBpbml0aWFsVmVyc2VPYmplY3RzXG5cbiAgaWYgKHZlcnNlVGV4dENoYW5nZWQgJiYgbmV3VmVyc2VUZXh0KSB7XG4gICAgY29uc3QgeyB0YXJnZXRWZXJzZVRleHQgfSA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoY3VycmVudFZlcnNlT2JqZWN0c18sIG5ld1ZlcnNlVGV4dClcbiAgICB0YXJnZXRWZXJzZVVTRk0gPSB0YXJnZXRWZXJzZVRleHRcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRWZXJzZVVTRk0gPSBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLmNvbnZlcnRWZXJzZURhdGFUb1VTRk0oY3VycmVudFZlcnNlT2JqZWN0c18pXG4gIH1cbiAgcmV0dXJuIHRhcmdldFZlcnNlVVNGTVxufVxuXG4vLyBtYW5hZ2UgdmVyc2UgZWRpdCBhbmQgYWxpZ25tZW50IHN0YXRlc1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNjcmlwdHVyZUFsaWdubWVudEVkaXQoe1xuICBjdXJyZW50SW5kZXgsXG4gIGVuYWJsZUVkaXQsXG4gIGVuYWJsZUFsaWdubWVudCxcbiAgaHR0cENvbmZpZyxcbiAgaW5pdGlhbFZlcnNlT2JqZWN0cyxcbiAgaW5pdGlhbFZlcnNlVGV4dCxcbiAgaXNOZXdUZXN0YW1lbnQsXG4gIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cyxcbiAgb3JpZ2luYWxSZXBvVXJsLFxuICByZWZlcmVuY2UsXG4gIHNjcmlwdHVyZUNvbmZpZyxcbiAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gIHNldFNhdmVkQ2hhbmdlcyxcbiAgc291cmNlTGFuZ3VhZ2UsXG4gIHN0YXJ0RWRpdEJyYW5jaCxcbiAgdGFyZ2V0TGFuZ3VhZ2UsXG4gIHRpdGxlLFxuICB3b3JraW5nUmVzb3VyY2VCcmFuY2gsXG59IDogU2NyaXB0dXJlQUxpZ25tZW50RWRpdFByb3BzKSB7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVfXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBhbGlnbmVkOiBmYWxzZSxcbiAgICBhbGlnbmVyRGF0YTogbnVsbCxcbiAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICBuZXdBbGlnbm1lbnRzOiBudWxsLFxuICAgIG5ld1ZlcnNlVGV4dDogbnVsbCxcbiAgICB1cGRhdGVkVmVyc2VPYmplY3RzOiBudWxsLFxuICAgIHZlcnNlVGV4dENoYW5nZWQ6IGZhbHNlLFxuICB9KVxuXG4gIGNvbnN0IHtcbiAgICBhbGlnbmVkLFxuICAgIGFsaWduZXJEYXRhLFxuICAgIGVkaXRpbmcsXG4gICAgbmV3QWxpZ25tZW50cyxcbiAgICBuZXdWZXJzZVRleHQsXG4gICAgdXBkYXRlZFZlcnNlT2JqZWN0cyxcbiAgICB2ZXJzZVRleHRDaGFuZ2VkLFxuICB9ID0gc3RhdGVcbiAgY29uc3QgY2hhcHRlciA9IHJlZmVyZW5jZT8uY2hhcHRlclxuICBjb25zdCB2ZXJzZSA9IHJlZmVyZW5jZT8udmVyc2VcbiAgY29uc3QgcHJvamVjdElkID0gcmVmZXJlbmNlPy5wcm9qZWN0SWRcbiAgY29uc3QgYmFzaWNSZWZlcmVuY2UgPSB7IC8vIG9ubHkgaGFzIHRoZSB0aHJlZSBiYXNpYyBmaWVsZHNcbiAgICBjaGFwdGVyLFxuICAgIHZlcnNlLFxuICAgIHByb2plY3RJZCxcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJDaGFuZ2VzKCkge1xuICAgIGNvbnNvbGUubG9nKGBjbGVhckNoYW5nZXMoKSAtICR7SlNPTi5zdHJpbmdpZnkoYmFzaWNSZWZlcmVuY2UpfWApXG4gICAgY29uc3QgY2xlYXJTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYWxpZ25lckRhdGE6IG51bGwsXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIG5ld0FsaWdubWVudHM6IG51bGwsXG4gICAgICBuZXdWZXJzZVRleHQ6IG51bGwsXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzOiBudWxsLFxuICAgICAgdmVyc2VUZXh0Q2hhbmdlZDogZmFsc2UsXG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKHN0YXRlLCBjbGVhclN0YXRlKSkge1xuICAgICAgY29uc29sZS5sb2coYGNsZWFyQ2hhbmdlcygpIC0gcmVmZXJlbmNlIGNoYW5nZWQsIHJlc2V0IGVkaXQvYWxpZ25tZW50IHN0YXRlIHZhcmlhYmxlc2ApXG4gICAgICBzZXRTdGF0ZShjbGVhclN0YXRlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3NfID0ge1xuICAgIC4uLnNjcmlwdHVyZVNldHRpbmdzLFxuICAgIHJlc291cmNlSWQ6IE9SSUdJTkFMX1NPVVJDRSxcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cENvbmZpZyA9IGh0dHBDb25maWcgfHwge31cbiAgY29uc3QgYm9va0lkID0gcHJvamVjdElkXG4gIGNvbnN0IG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3MgPSBnZXRTY3JpcHR1cmVSZXNvdXJjZVNldHRpbmdzKFxuICAgIGJvb2tJZCwgb3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5nc18sIGlzTmV3VGVzdGFtZW50LCBvcmlnaW5hbFJlcG9VcmwsXG4gIClcblxuICBpZiAoIWVuYWJsZUFsaWdubWVudCkgeyAvLyBpZiBub3QgZW5hYmxlZCwgdGhlbiB3ZSBkb24ndCBmZXRjaCByZXNvdXJjZVxuICAgIG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3MucmVzb3VyY2VMaW5rID0gbnVsbFxuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxWZXJzZU9iamVjdHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHsgLy8gZ2V0IHRoZSBvcmlnaW5hbCBsYW5ndWFnZSB2ZXJzZU9iamVjdHNcbiAgICBjb25zdCB2ZXJzZU9iamVjdHMgPSBbXVxuXG4gICAgaWYgKG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IHZlcnNlcyA9IGdldFZlcnNlc0ZvclJlZihiYXNpY1JlZmVyZW5jZSwgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cywgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz8ubGFuZ3VhZ2VJZClcblxuICAgICAgaWYgKHZlcnNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmVyc2VSZWZlcmVuY2Ugb2YgdmVyc2VzKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ1ZlcnNlT2JqZWN0cyA9IHZlcnNlUmVmZXJlbmNlPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0c1xuXG4gICAgICAgICAgaWYgKG9yaWdWZXJzZU9iamVjdHMpIHtcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHZlcnNlT2JqZWN0cywgb3JpZ1ZlcnNlT2JqZWN0cylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZlcnNlT2JqZWN0c1xuICB9LCBbb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cywgY2hhcHRlciwgdmVyc2UsIHByb2plY3RJZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gdXBkYXRlIGFsaWdubWVudCBzdGF0dXMgd2hlbiBhbGlnbmVyIGlzIGhpZGRlblxuICAgIGNvbnN0IG5vdEVtcHR5ID0gISFpbml0aWFsVmVyc2VPYmplY3RzXG4gICAgbGV0IGFsaWduZWRfID0gZmFsc2VcblxuICAgIGlmICghYWxpZ25lckRhdGEpIHsgLy8gc2tpcCBpZiBhbGlnbmVyIGlzIGJlaW5nIHNob3duXG4gICAgICBpZiAobm90RW1wdHkpIHsgLy8gc2tpcCBpZiBlbXB0eVxuICAgICAgICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHMgfHwgaW5pdGlhbFZlcnNlT2JqZWN0c1xuXG4gICAgICAgIGlmICghZW5hYmxlQWxpZ25tZW50KSB7XG4gICAgICAgICAgYWxpZ25lZF8gPSB0cnVlXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmVyc2VUZXh0ICYmIChuZXdWZXJzZVRleHQgIT09IGluaXRpYWxWZXJzZVRleHQpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoY3VycmVudFZlcnNlT2JqZWN0c18sIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgICBhbGlnbmVkXyA9IGlzVXNmbUFsaWduZWQocmVzdWx0cz8udGFyZ2V0VmVyc2VUZXh0LCBvcmlnaW5hbFZlcnNlT2JqZWN0cylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRWZXJzZVVTRk0gPSBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLmNvbnZlcnRWZXJzZURhdGFUb1VTRk0oY3VycmVudFZlcnNlT2JqZWN0c18pXG4gICAgICAgICAgYWxpZ25lZF8gPSBpc1VzZm1BbGlnbmVkKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFsaWduZWQgIT09IGFsaWduZWRfKSB7XG4gICAgICAgIHNldFN0YXRlKHsgYWxpZ25lZDogYWxpZ25lZF8gfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpbml0aWFsVmVyc2VPYmplY3RzLCBhbGlnbmVyRGF0YSwgbmV3VmVyc2VUZXh0LCBpbml0aWFsVmVyc2VUZXh0LCBlbmFibGVBbGlnbm1lbnQsIG9yaWdpbmFsVmVyc2VPYmplY3RzXSlcblxuICAvKipcbiAgICogZ2V0IGNoYW5nZXMgZm9yIHNhdmluZ1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3U3RhdGUgLSBvcHRpb25hbGx5IHBhc3MgaW4gbmV3IHN0YXRlICh0byBvdmVycmlkZSBzdGF0ZSlcbiAgICovXG4gIGZ1bmN0aW9uIGdldENoYW5nZXMobmV3U3RhdGUgPSB7fSkge1xuICAgIGNvbnNvbGUubG9nKGBnZXRDaGFuZ2VzIC0gc3RhcnRlZCAke2N1cnJlbnRJbmRleH0gLSBwYXNzZWQgc3RhdGVgLCBuZXdTdGF0ZSlcbiAgICBjb25zdCBfbmV3U3RhdGUgPSB7XG4gICAgICBzdGF0ZSxcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgIH1cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3Qge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgbmV3QWxpZ25tZW50cyxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG5ld1ZlcnNlVGV4dCxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB2ZXJzZVRleHRDaGFuZ2VkLFxuICAgIH0gPSBfbmV3U3RhdGVcbiAgICBsZXQgdXBkYXRlZFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzXG5cbiAgICBpZiAobmV3QWxpZ25tZW50cykgeyAvLyBpZiB1bnNhdmVkIGFsaWdubWVudCBjaGFuZ2VzLCBhcHBseSB0aGVtXG4gICAgICBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIGFwcGx5aW5nIHVuc2F2ZWQgYWxpZ25tZW50c31gKVxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0c18gPSB1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzKClcbiAgICB9XG5cbiAgICBpZiAodmVyc2VUZXh0Q2hhbmdlZCAmJiBuZXdWZXJzZVRleHQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBnZXRDaGFuZ2VzIC0gYXBwbHlpbmcgbmV3IHRleHQ6YCwgbmV3VmVyc2VUZXh0KVxuICAgICAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzXyB8fCBpbml0aWFsVmVyc2VPYmplY3RzXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzXyAmJiBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIGFwcGx5aW5nIHVwZGF0ZWQgYWxpZ25tZW50c2ApXG4gICAgICBjb25zdCB7IHRhcmdldFZlcnNlT2JqZWN0cyB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZShjdXJyZW50VmVyc2VPYmplY3RzXywgbmV3VmVyc2VUZXh0KVxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0c18gPSB0YXJnZXRWZXJzZU9iamVjdHNcbiAgICB9IGVsc2UgeyAvLyBvbmx5IGFsaWdubWVudCBjaGFuZ2VzIHRvIHVwbG9hZFxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0c18gJiYgY29uc29sZS5sb2coYGdldENoYW5nZXMgLSBhcHBseWluZyB1cGRhdGVkIGFsaWdubWVudHNgLCB7IG5ld1ZlcnNlVGV4dCwgdXBkYXRlZFZlcnNlT2JqZWN0c18gfSlcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c18gfHwgaW5pdGlhbFZlcnNlT2JqZWN0c1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzXykge1xuICAgICAgY29uc3QgcmVmID0gc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWY/LltjdXJyZW50SW5kZXhdXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgIHJlZixcbiAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogdXBkYXRlZFZlcnNlT2JqZWN0c18sXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGJhY2sgZm9yIHdoZW4gdXNlciBjbGlja2VkIG9uIGFsaWdubWVudCBidXR0b24gLSB3aWxsIHNob3cgaWYgbm90IGFscmVhZHkgc2hvd25cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUFsaWdubWVudENsaWNrKCkge1xuICAgIGlmIChlbmFibGVBbGlnbm1lbnQpIHtcbiAgICAgIGxldCBfYWxpZ25lckRhdGEgPSBudWxsXG4gICAgICBhd2FpdCBzdGFydEVkaXRCcmFuY2goKVxuXG4gICAgICBpZiAoIWFsaWduZXJEYXRhKSB7IC8vIGlmIHdvcmQgYWxpZ25lciBub3Qgc2hvd25cbiAgICAgICAgY29uc29sZS5sb2coYGhhbmRsZUFsaWdubWVudENsaWNrIC0gdG9nZ2xlIE9OIGFsaWdubWVudGApXG4gICAgICAgIGNvbnN0IHRhcmdldFZlcnNlVVNGTSA9IGdldEN1cnJlbnRWZXJzZVVzZm0odXBkYXRlZFZlcnNlT2JqZWN0cywgaW5pdGlhbFZlcnNlT2JqZWN0cywgdmVyc2VUZXh0Q2hhbmdlZCwgbmV3VmVyc2VUZXh0KVxuICAgICAgICBsZXQgb3JpZ2luYWxWZXJzZVVzZm0gPSBudWxsXG5cbiAgICAgICAgaWYgKG9yaWdpbmFsVmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgb3JpZ2luYWxWZXJzZVVzZm0gPSBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLmNvbnZlcnRWZXJzZURhdGFUb1VTRk0ob3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgdGFyZ2V0V29yZHM6IHdvcmRCYW5rLFxuICAgICAgICAgIHZlcnNlQWxpZ25tZW50czogYWxpZ25tZW50cyxcbiAgICAgICAgfSA9IEFsaWdubWVudEhlbHBlcnMucGFyc2VVc2ZtVG9Xb3JkQWxpZ25lckRhdGEodGFyZ2V0VmVyc2VVU0ZNLCBvcmlnaW5hbFZlcnNlVXNmbSlcbiAgICAgICAgX2FsaWduZXJEYXRhID0geyB3b3JkQmFuaywgYWxpZ25tZW50cyB9XG4gICAgICB9IGVsc2UgeyAvLyB3b3JkIGFsaWduZXIgY3VycmVudGx5IHNob3duXG4gICAgICAgIGNvbnNvbGUubG9nKGBoYW5kbGVBbGlnbm1lbnRDbGljayAtIGFsaWdubWVudCBhbHJlYWR5IHNob3duYClcbiAgICAgICAgX2FsaWduZXJEYXRhID0gYWxpZ25lckRhdGFcbiAgICAgIH1cbiAgICAgIHNldFN0YXRlKHsgYWxpZ25lckRhdGE6IF9hbGlnbmVyRGF0YSB9KVxuICAgICAgY29uc29sZS5sb2coX2FsaWduZXJEYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdXBkYXRlZCB2ZXJzZSBvYmplY3RzIGFmdGVyIGFsaWdubWVudHMgY2hhbmdlZFxuICAgKiBAcGFyYW0ge29iamVjdH0gX25ld0FsaWdubWVudHMgLSByZXN1bHRzIG9mIGFsaWduZXJcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZVZlcnNlV2l0aE5ld0FsaWdubWVudHMoX25ld0FsaWdubWVudHMgPSBuZXdBbGlnbm1lbnRzKSB7XG4gICAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcbiAgICBjb25zdCB0YXJnZXRWZXJzZVRleHQgPSBuZXdWZXJzZVRleHQgfHwgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKGN1cnJlbnRWZXJzZU9iamVjdHNfKVxuICAgIGNvbnN0IHZlcnNlVXNmbSA9IEFsaWdubWVudEhlbHBlcnMuYWRkQWxpZ25tZW50c1RvVmVyc2VVU0ZNKF9uZXdBbGlnbm1lbnRzLnRhcmdldFdvcmRzLCBfbmV3QWxpZ25tZW50cy52ZXJzZUFsaWdubWVudHMsIHRhcmdldFZlcnNlVGV4dClcbiAgICBjb25zdCBhbGlnbmVkVmVyc2VPYmplY3RzID0gdXNmbUhlbHBlcnMudXNmbVZlcnNlVG9Kc29uKHZlcnNlVXNmbSlcbiAgICByZXR1cm4gYWxpZ25lZFZlcnNlT2JqZWN0c1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBidXR0b24gdG8gc2F2ZSBjdXJyZW50IGFsaWdubWVudHMgaW4gd29yZCBhbGlnbmVyLiAgR2VuZXJhdGVzIG5ldyB2ZXJzZSBjb250ZW50IGFuZCBzYXZlcyBpbiBzdGF0ZS4gQ2xvc2VzIGFsaWduZXIgZGlzcGxheVxuICAgKiBAcGFyYW0ge29iamVjdH0gX25ld0FsaWdubWVudHMgLSByZXN1bHRzIG9mIGFsaWduZXJcbiAgICovXG4gIGZ1bmN0aW9uIHNhdmVBbGlnbm1lbnQoX25ld0FsaWdubWVudHMgPSBuZXdBbGlnbm1lbnRzKSB7XG4gICAgY29uc29sZS5sb2coYHNhdmVBbGlnbm1lbnQoKSAtIG5ld0FsaWdubWVudHNgLCBfbmV3QWxpZ25tZW50cylcblxuICAgIGlmIChfbmV3QWxpZ25tZW50cykge1xuICAgICAgY29uc3QgYWxpZ25lZFZlcnNlT2JqZWN0cyA9IHVwZGF0ZVZlcnNlV2l0aE5ld0FsaWdubWVudHMoX25ld0FsaWdubWVudHMpXG4gICAgICBjb25zb2xlLmxvZyhgc2F2ZUFsaWdubWVudCgpIC0gYWxpZ25lZFZlcnNlT2JqZWN0c2AsIGFsaWduZWRWZXJzZU9iamVjdHMpXG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgYWxpZ25lckRhdGE6IG51bGwsXG4gICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBuZXdBbGlnbm1lbnRzOiBudWxsLFxuICAgICAgICB1cGRhdGVkVmVyc2VPYmplY3RzOiBhbGlnbmVkVmVyc2VPYmplY3RzLFxuICAgICAgfVxuICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgICBjYWxsU2V0U2F2ZWRTdGF0ZSh0cnVlLCBuZXdTdGF0ZSApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGBzYXZlQWxpZ25tZW50KCkgLSBubyBhbGlnbm1lbnQgY2hhbmdlc2ApXG4gICAgICBzZXRTdGF0ZSh7XG4gICAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBidXR0b24gdG8gY2FuY2VsIHdvcmsgaW4gd29yZCBhbGlnbmVyLiAgQ2FsY3VsYXRlcyBhbmQgZGlzcGxheXMgY3VycmVudCBhbGlnbm1lbnQgdmFsaWQgc3RhdGUuIENsb3NlcyBhbGlnbmVyIGRpc3BsYXlcbiAgICovXG4gIGZ1bmN0aW9uIGNhbmNlbEFsaWdubWVudCgpIHtcbiAgICBjb25zb2xlLmxvZyhgY2FuY2VsQWxpZ25tZW50KClgKVxuICAgIGNvbnN0IHRhcmdldFZlcnNlVVNGTSA9IGdldEN1cnJlbnRWZXJzZVVzZm0odXBkYXRlZFZlcnNlT2JqZWN0cywgaW5pdGlhbFZlcnNlT2JqZWN0cywgdmVyc2VUZXh0Q2hhbmdlZCwgbmV3VmVyc2VUZXh0KVxuICAgIGNvbnN0IGFsaWduZWQgPSBpc1VzZm1BbGlnbmVkKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgc2V0U3RhdGUoeyBhbGlnbmVyRGF0YTogbnVsbCwgYWxpZ25lZCB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciBidXR0b24gdG8gc2V0IGVkaXRpbmcgc3RhdGVcbiAgICogQHBhcmFtIHtib29sZWFufSBlZGl0aW5nXyAtIGlmIHRydWUsIGVkaXRvciBpcyBzaG93biwgb3RoZXJ3aXNlIGVkaXRvciBpcyBoaWRkZW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IF9uZXdWZXJzZVRleHQgLSBvcHRpb25hbCB2ZXJzZSB0ZXh0XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuICBhc3luYyBmdW5jdGlvbiBzZXRFZGl0aW5nKGVkaXRpbmdfLCBfbmV3VmVyc2VUZXh0ID0gbmV3VmVyc2VUZXh0KSB7XG4gICAgaWYgKGVuYWJsZUVkaXQpIHtcbiAgICAgIGlmIChlZGl0aW5nXyAhPT0gZWRpdGluZykge1xuICAgICAgICBfbmV3VmVyc2VUZXh0ID0gX25ld1ZlcnNlVGV4dCB8fCBpbml0aWFsVmVyc2VUZXh0XG4gICAgICAgIGxldCBfdXBkYXRlZFZlcnNlT2JqZWN0cyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNcbiAgICAgICAgY29uc3QgdmVyc2VUZXh0Q2hhbmdlZCA9IF9uZXdWZXJzZVRleHQgIT09IGluaXRpYWxWZXJzZVRleHRcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgZWRpdGluZzogZWRpdGluZ18sXG4gICAgICAgICAgbmV3VmVyc2VUZXh0OiBfbmV3VmVyc2VUZXh0LFxuICAgICAgICAgIHZlcnNlVGV4dENoYW5nZWQsXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZlcnNlVGV4dENoYW5nZWQpIHtcbiAgICAgICAgICAvLyBmYWxsYmFjayB0byBtYWtlIHN1cmUgdGV4dCBmcm9tIHZlcnNlT2JqZWN0cyBtYXRjaGVzIGN1cnJlbnQgdGV4dFxuICAgICAgICAgIGNvbnN0IHZlcnNlVGV4dCA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuZ2V0VXNmbUZvclZlcnNlQ29udGVudCh7IHZlcnNlT2JqZWN0czogY3VycmVudFZlcnNlT2JqZWN0cyB9IClcblxuICAgICAgICAgIGlmICh2ZXJzZVRleHQgIT09IF9uZXdWZXJzZVRleHQpIHsgLy8gaWYgdGV4dCBmcm9tIHZlcnNlIG9iamVjdHMgZG9lcyBub3QgbWF0Y2ggbGF0ZXN0IHRleHRcbiAgICAgICAgICAgIC8vIGFwcGx5IGFsaWdubWVudCB0byBjdXJyZW50IHRleHRcbiAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VPYmplY3RzIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGN1cnJlbnRWZXJzZU9iamVjdHMsIF9uZXdWZXJzZVRleHQpXG4gICAgICAgICAgICBfdXBkYXRlZFZlcnNlT2JqZWN0cyA9IHRhcmdldFZlcnNlT2JqZWN0cyAvLyB1cGRhdGUgdmVyc2VPYmplY3RzIHRvIG1hdGNoIGN1cnJlbnQgdGV4dFxuICAgICAgICAgICAgbmV3U3RhdGVbJ3VwZGF0ZWRWZXJzZU9iamVjdHMnXSA9IF91cGRhdGVkVmVyc2VPYmplY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgICAgIGNvbnN0IF9hbGlnbm1lbnRzQ2hhbmdlZCA9IChfdXBkYXRlZFZlcnNlT2JqZWN0cyAmJiAhaXNFcXVhbChpbml0aWFsVmVyc2VPYmplY3RzLCBfdXBkYXRlZFZlcnNlT2JqZWN0cykpXG4gICAgICAgIGNhbGxTZXRTYXZlZFN0YXRlKHZlcnNlVGV4dENoYW5nZWQgfHwgX2FsaWdubWVudHNDaGFuZ2VkLCBuZXdTdGF0ZSApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZyb20gdGhlIGVkaXQgb25DaGFuZ2UgZXZlbnQgdG8gdXBkYXRlIGVkaXQgc3RhdGUgdmFyaWFibGVzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hhbmdlZCAtIHRydWUgaWYgdGhlIG5ld1ZlcnNlVGV4dCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgaW5pdGlhbFZlcnNlVGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmVyc2VUZXh0IC0gY3VycmVudCBjaGFuZ2VkIHZlcnNlIHRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IF9pbml0aWFsVmVyc2VUZXh0IC0gaW5pdGlhbCB2ZXJzZSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBzZXRWZXJzZUNoYW5nZWQoY2hhbmdlZCwgbmV3VmVyc2VUZXh0LCBfaW5pdGlhbFZlcnNlVGV4dCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VUZXh0IH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGN1cnJlbnRWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICBjb25zdCBhbGlnbmVkID0gaXNVc2ZtQWxpZ25lZCh0YXJnZXRWZXJzZVRleHQsIG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICAgIGNvbnN0IHZlcnNlVGV4dENoYW5nZWQgPSBuZXdWZXJzZVRleHQgIT09IGluaXRpYWxWZXJzZVRleHRcblxuICAgIHNldFN0YXRlKHtcbiAgICAgIHZlcnNlVGV4dENoYW5nZWQsXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICBhbGlnbmVkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzID0gUmVhY3QudXNlTWVtbyggKCkgPT4geyAvLyBpZiB2ZXJzZSBoYXMgYmVlbiBlZGl0ZWQgb3IgYWxpZ25tZW50IGNoYW5nZWQsIHRoZW4gZ2VuZXJhdGUgbmV3IHZlcnNlT2JqZWN0cyB0byBkaXNwbGF5IGluIFNjcmlwdHVyZVBhbmVcbiAgICBpZiAoaW5pdGlhbFZlcnNlT2JqZWN0cykge1xuICAgICAgY29uc3QgdGFyZ2V0VmVyc2VVU0ZNID0gZ2V0Q3VycmVudFZlcnNlVXNmbSh1cGRhdGVkVmVyc2VPYmplY3RzLCBpbml0aWFsVmVyc2VPYmplY3RzLCB2ZXJzZVRleHRDaGFuZ2VkLCBuZXdWZXJzZVRleHQpXG4gICAgICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzXyA9IHVzZm1IZWxwZXJzLnVzZm1WZXJzZVRvSnNvbih0YXJnZXRWZXJzZVVTRk0pXG4gICAgICByZXR1cm4gY3VycmVudFZlcnNlT2JqZWN0c19cbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxWZXJzZU9iamVjdHNcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQsIG5ld1ZlcnNlVGV4dF0pXG5cbiAgY29uc3QgdW5zYXZlZENoYW5nZXM6Ym9vbGVhbiA9IFJlYWN0LnVzZU1lbW8oICgpID0+IHsgLy8gaWYgdmVyc2UgaGFzIGJlZW4gZWRpdGVkIG9yIGFsaWdubWVudCBjaGFuZ2VkLCB0aGVuIGluZGljYXRlIHdlIGhhdmUgdW5zYXZlZCBjaGFuZ2VzXG4gICAgY29uc3QgY2hhbmdlZCA9IHZlcnNlVGV4dENoYW5nZWQgfHwgKHVwZGF0ZWRWZXJzZU9iamVjdHMgJiYgIWlzRXF1YWwoaW5pdGlhbFZlcnNlT2JqZWN0cywgdXBkYXRlZFZlcnNlT2JqZWN0cykpXG4gICAgcmV0dXJuIGNoYW5nZWRcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWRdKVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayB0byBzY3JpcHR1cmUgY2FyZCB0byB1cGRhdGVkIHdpdGggbGF0ZXN0IHN0YXRlIGZvciBzYXZpbmdcbiAgICogQHBhcmFtIHtib29sZWFufSB1bnNhdmVkQ2hhbmdlc19cbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlXG4gICAqL1xuICBmdW5jdGlvbiBjYWxsU2V0U2F2ZWRTdGF0ZSh1bnNhdmVkQ2hhbmdlc18sIG5ld1N0YXRlID0geyB9ICkge1xuICAgIGNvbnN0IF9uZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coYGNhbGxTZXRTYXZlZFN0YXRlIC0gbmV3IHN0YXRlYCwgX25ld1N0YXRlKVxuICAgIHNldFNhdmVkQ2hhbmdlcyAmJiBzZXRTYXZlZENoYW5nZXMoY3VycmVudEluZGV4LCAhdW5zYXZlZENoYW5nZXNfLCB7XG4gICAgICBnZXRDaGFuZ2VzLFxuICAgICAgY2xlYXJDaGFuZ2VzLFxuICAgICAgc3RhdGU6IF9uZXdTdGF0ZSxcbiAgICB9KVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2V0IHNhdmVkIGNoYW5nZXMgd2hlbmV2ZXIgdXNlciBlZGl0cyB2ZXJzZSB0ZXh0IG9yIGFsaWdubWVudHMgb3IgaWYgYWxpZ25tZW50cyBhcmUgb3BlblxuICAgIGNvbnN0IHVuc2F2ZWRDaGFuZ2VzXyA9IHVuc2F2ZWRDaGFuZ2VzIHx8IGFsaWduZXJEYXRhXG4gICAgY2FsbFNldFNhdmVkU3RhdGUodW5zYXZlZENoYW5nZXNfKVxuICB9LCBbdW5zYXZlZENoYW5nZXMsIGFsaWduZXJEYXRhXSlcblxuICAvKipcbiAgICogY2FsbGJhY2sgZm9yIHdoZW4gYWxpZ25tZW50cyBhcmUgYmVpbmcgY2hhbmdlZFxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0c1xuICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGFsaWdubWVudCBpcyBjb21wbGV0ZVxuICAgKi9cbiAgZnVuY3Rpb24gb25BbGlnbm1lbnRzQ2hhbmdlKHJlc3VsdHMpIHtcbiAgICBjb25zb2xlLmxvZyhgb25BbGlnbm1lbnRzQ2hhbmdlKCkgLSBhbGlnbm1lbnQgY2hhbmdlZCwgcmVzdWx0c2AsIHJlc3VsdHMpIC8vIG1lcmdlIGFsaWdubWVudHMgaW50byB0YXJnZXQgdmVyc2UgYW5kIGNvbnZlcnQgdG8gVVNGTVxuICAgIGNvbnN0IHsgdGFyZ2V0V29yZHMsIHZlcnNlQWxpZ25tZW50cyB9ID0gcmVzdWx0c1xuICAgIGNvbnN0IGFsaWdubWVudENvbXBsZXRlID0gQWxpZ25tZW50SGVscGVycy5hcmVBbGdubWVudHNDb21wbGV0ZSh0YXJnZXRXb3JkcywgdmVyc2VBbGlnbm1lbnRzKVxuICAgIGNvbnNvbGUubG9nKGBBbGlnbm1lbnRzIGFyZSAke2FsaWdubWVudENvbXBsZXRlID8gJ0NPTVBMRVRFIScgOiAnaW5jb21wbGV0ZSd9YClcbiAgICBzZXRTdGF0ZSh7IG5ld0FsaWdubWVudHM6IHJlc3VsdHMsIGFsaWduZWQ6IGFsaWdubWVudENvbXBsZXRlIH0pXG4gICAgcmV0dXJuIGFsaWdubWVudENvbXBsZXRlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGlvbnM6IHtcbiAgICAgIGNhbmNlbEFsaWdubWVudCxcbiAgICAgIGNsZWFyQ2hhbmdlcyxcbiAgICAgIGdldENoYW5nZXMsXG4gICAgICBoYW5kbGVBbGlnbm1lbnRDbGljayxcbiAgICAgIG9uQWxpZ25tZW50c0NoYW5nZSxcbiAgICAgIHNhdmVBbGlnbm1lbnQsXG4gICAgICBzZXRFZGl0aW5nLFxuICAgICAgc2V0VmVyc2VDaGFuZ2VkLFxuICAgIH0sXG4gICAgc3RhdGU6IHtcbiAgICAgIGFsaWduZWQsXG4gICAgICBhbGlnbmVyRGF0YSxcbiAgICAgIGN1cnJlbnRWZXJzZU9iamVjdHMsXG4gICAgICBlZGl0aW5nLFxuICAgICAgaW5pdGlhbFZlcnNlVGV4dCxcbiAgICAgIGluaXRpYWxWZXJzZU9iamVjdHMsXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICByZWZlcmVuY2U6IGJhc2ljUmVmZXJlbmNlLFxuICAgICAgc291cmNlTGFuZ3VhZ2UsXG4gICAgICB0YXJnZXRMYW5ndWFnZSxcbiAgICAgIHRpdGxlLFxuICAgICAgdW5zYXZlZENoYW5nZXMsXG4gICAgICB2ZXJzZVRleHRDaGFuZ2VkLFxuICAgIH0sXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import "core-js/modules/es.array.concat.js";
|
|
1
2
|
import "core-js/modules/es.object.define-property.js";
|
|
2
3
|
|
|
3
4
|
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; }
|
|
@@ -6,14 +7,13 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
6
7
|
|
|
7
8
|
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; }
|
|
8
9
|
|
|
10
|
+
import { useEffect } from 'react';
|
|
9
11
|
import { useScripture } from '..';
|
|
10
12
|
import { getScriptureResourceSettings } from '../utils/ScriptureSettings';
|
|
11
13
|
/**
|
|
12
14
|
* hook to get a scripture resource
|
|
13
|
-
* @param {string} bookId
|
|
14
15
|
* @param {object} scriptureSettings - info about the scripture being referenced
|
|
15
|
-
* @param {
|
|
16
|
-
* @param {string} verse
|
|
16
|
+
* @param {object} reference
|
|
17
17
|
* @param {boolean} isNewTestament
|
|
18
18
|
* @param {string} originalRepoUrl - optional path to repo for original language
|
|
19
19
|
* @param {string} currentLanguageId - optional over-ride for transient case where language in scripture settings have not yet updated
|
|
@@ -21,25 +21,27 @@ import { getScriptureResourceSettings } from '../utils/ScriptureSettings';
|
|
|
21
21
|
* @param {object} httpConfig - optional config settings for fetches (timeout, cache, etc.)
|
|
22
22
|
* @param {string} appRef - app default, points to specific ref that could be a branch or tag
|
|
23
23
|
* @param {boolean} wholeBook - if true then fetch the entire book
|
|
24
|
+
* @param {boolean} readyForFetch - true if ready for fetching
|
|
24
25
|
*/
|
|
25
26
|
|
|
26
27
|
export function useScriptureResources(_ref) {
|
|
27
|
-
var
|
|
28
|
-
|
|
29
|
-
chapter = _ref.chapter,
|
|
30
|
-
verse = _ref.verse,
|
|
31
|
-
isNewTestament = _ref.isNewTestament,
|
|
32
|
-
originalRepoUrl = _ref.originalRepoUrl,
|
|
28
|
+
var _ref$appRef = _ref.appRef,
|
|
29
|
+
appRef = _ref$appRef === void 0 ? 'master' : _ref$appRef,
|
|
33
30
|
_ref$currentLanguageI = _ref.currentLanguageId,
|
|
34
31
|
currentLanguageId = _ref$currentLanguageI === void 0 ? null : _ref$currentLanguageI,
|
|
35
32
|
_ref$currentOwner = _ref.currentOwner,
|
|
36
33
|
currentOwner = _ref$currentOwner === void 0 ? null : _ref$currentOwner,
|
|
37
34
|
_ref$httpConfig = _ref.httpConfig,
|
|
38
35
|
httpConfig = _ref$httpConfig === void 0 ? {} : _ref$httpConfig,
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
isNewTestament = _ref.isNewTestament,
|
|
37
|
+
originalRepoUrl = _ref.originalRepoUrl,
|
|
38
|
+
_ref$readyForFetch = _ref.readyForFetch,
|
|
39
|
+
readyForFetch = _ref$readyForFetch === void 0 ? false : _ref$readyForFetch,
|
|
40
|
+
reference = _ref.reference,
|
|
41
|
+
scriptureSettings = _ref.scriptureSettings,
|
|
41
42
|
_ref$wholeBook = _ref.wholeBook,
|
|
42
43
|
wholeBook = _ref$wholeBook === void 0 ? false : _ref$wholeBook;
|
|
44
|
+
var bookId = reference === null || reference === void 0 ? void 0 : reference.projectId;
|
|
43
45
|
|
|
44
46
|
if (appRef !== scriptureSettings.ref) {
|
|
45
47
|
scriptureSettings = _objectSpread(_objectSpread({}, scriptureSettings), {}, {
|
|
@@ -47,14 +49,13 @@ export function useScriptureResources(_ref) {
|
|
|
47
49
|
});
|
|
48
50
|
}
|
|
49
51
|
|
|
52
|
+
useEffect(function () {
|
|
53
|
+
console.log("useScriptureResources: appRef changed to scriptureSettings.ref=".concat(scriptureSettings.ref, " and appRef=").concat(appRef));
|
|
54
|
+
}, [appRef, scriptureSettings.ref]);
|
|
50
55
|
var scriptureSettings_ = getScriptureResourceSettings(bookId, scriptureSettings, isNewTestament, originalRepoUrl, currentLanguageId, currentOwner); // convert any default settings strings
|
|
51
56
|
|
|
52
57
|
var scriptureConfig_ = {
|
|
53
|
-
reference:
|
|
54
|
-
projectId: bookId,
|
|
55
|
-
chapter: chapter,
|
|
56
|
-
verse: verse
|
|
57
|
-
},
|
|
58
|
+
reference: reference,
|
|
58
59
|
resource: {
|
|
59
60
|
languageId: scriptureSettings_.languageId,
|
|
60
61
|
projectId: scriptureSettings_.resourceId,
|
|
@@ -66,7 +67,8 @@ export function useScriptureResources(_ref) {
|
|
|
66
67
|
server: scriptureSettings_.server
|
|
67
68
|
}, httpConfig),
|
|
68
69
|
disableWordPopover: scriptureSettings_.disableWordPopover,
|
|
69
|
-
wholeBook: wholeBook
|
|
70
|
+
wholeBook: wholeBook,
|
|
71
|
+
readyForFetch: readyForFetch
|
|
70
72
|
}; // @ts-ignore
|
|
71
73
|
|
|
72
74
|
var scriptureResource = useScripture(scriptureConfig_); // restore any default settings
|
|
@@ -81,4 +83,4 @@ export function useScriptureResources(_ref) {
|
|
|
81
83
|
return scriptureResource;
|
|
82
84
|
}
|
|
83
85
|
export default useScriptureResources;
|
|
84
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmVSZXNvdXJjZXMudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVNjcmlwdHVyZSIsImdldFNjcmlwdHVyZVJlc291cmNlU2V0dGluZ3MiLCJ1c2VTY3JpcHR1cmVSZXNvdXJjZXMiLCJhcHBSZWYiLCJjdXJyZW50TGFuZ3VhZ2VJZCIsImN1cnJlbnRPd25lciIsImh0dHBDb25maWciLCJpc05ld1Rlc3RhbWVudCIsIm9yaWdpbmFsUmVwb1VybCIsInJlYWR5Rm9yRmV0Y2giLCJyZWZlcmVuY2UiLCJzY3JpcHR1cmVTZXR0aW5ncyIsIndob2xlQm9vayIsImJvb2tJZCIsInByb2plY3RJZCIsInJlZiIsImNvbnNvbGUiLCJsb2ciLCJzY3JpcHR1cmVTZXR0aW5nc18iLCJzY3JpcHR1cmVDb25maWdfIiwicmVzb3VyY2UiLCJsYW5ndWFnZUlkIiwicmVzb3VyY2VJZCIsIm93bmVyIiwiYnJhbmNoIiwicmVzb3VyY2VMaW5rIiwiY29uZmlnIiwic2VydmVyIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwic2NyaXB0dXJlUmVzb3VyY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLFNBQVNBLFNBQVQsUUFBMEIsT0FBMUI7QUFDQSxTQUFTQyxZQUFULFFBQTZCLElBQTdCO0FBQ0EsU0FBU0MsNEJBQVQsUUFBNkMsNEJBQTdDO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxTQUFTQyxxQkFBVCxPQVdKO0FBQUEseUJBVkRDLE1BVUM7QUFBQSxNQVZEQSxNQVVDLDRCQVZRLFFBVVI7QUFBQSxtQ0FUREMsaUJBU0M7QUFBQSxNQVREQSxpQkFTQyxzQ0FUbUIsSUFTbkI7QUFBQSwrQkFSREMsWUFRQztBQUFBLE1BUkRBLFlBUUMsa0NBUmMsSUFRZDtBQUFBLDZCQVBEQyxVQU9DO0FBQUEsTUFQREEsVUFPQyxnQ0FQWSxFQU9aO0FBQUEsTUFOREMsY0FNQyxRQU5EQSxjQU1DO0FBQUEsTUFMREMsZUFLQyxRQUxEQSxlQUtDO0FBQUEsZ0NBSkRDLGFBSUM7QUFBQSxNQUpEQSxhQUlDLG1DQUplLEtBSWY7QUFBQSxNQUhEQyxTQUdDLFFBSERBLFNBR0M7QUFBQSxNQUZEQyxpQkFFQyxRQUZEQSxpQkFFQztBQUFBLDRCQUREQyxTQUNDO0FBQUEsTUFEREEsU0FDQywrQkFEVyxLQUNYO0FBQ0QsTUFBTUMsTUFBTSxHQUFHSCxTQUFILGFBQUdBLFNBQUgsdUJBQUdBLFNBQVMsQ0FBRUksU0FBMUI7O0FBRUEsTUFBSVgsTUFBTSxLQUFLUSxpQkFBaUIsQ0FBQ0ksR0FBakMsRUFBc0M7QUFDcENKLElBQUFBLGlCQUFpQixtQ0FBUUEsaUJBQVI7QUFBMkJJLE1BQUFBLEdBQUcsRUFBRVo7QUFBaEMsTUFBakI7QUFDRDs7QUFFREosRUFBQUEsU0FBUyxDQUFDLFlBQU07QUFDZGlCLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUiwwRUFBOEVOLGlCQUFpQixDQUFDSSxHQUFoRyx5QkFBa0haLE1BQWxIO0FBQ0QsR0FGUSxFQUVOLENBQUNBLE1BQUQsRUFBU1EsaUJBQWlCLENBQUNJLEdBQTNCLENBRk0sQ0FBVDtBQUlBLE1BQU1HLGtCQUFrQixHQUFHakIsNEJBQTRCLENBQUNZLE1BQUQsRUFBU0YsaUJBQVQsRUFBNEJKLGNBQTVCLEVBQ3JEQyxlQURxRCxFQUNwQ0osaUJBRG9DLEVBQ2pCQyxZQURpQixDQUF2RCxDQVhDLENBWW1EOztBQUVwRCxNQUFNYyxnQkFBZ0IsR0FBRztBQUN2QlQsSUFBQUEsU0FBUyxFQUFUQSxTQUR1QjtBQUV2QlUsSUFBQUEsUUFBUSxFQUFFO0FBQ1JDLE1BQUFBLFVBQVUsRUFBRUgsa0JBQWtCLENBQUNHLFVBRHZCO0FBRVJQLE1BQUFBLFNBQVMsRUFBRUksa0JBQWtCLENBQUNJLFVBRnRCO0FBR1JDLE1BQUFBLEtBQUssRUFBRUwsa0JBQWtCLENBQUNLLEtBSGxCO0FBSVJSLE1BQUFBLEdBQUcsRUFBRUcsa0JBQWtCLENBQUNILEdBQW5CLElBQTBCRyxrQkFBa0IsQ0FBQ00sTUFBN0MsSUFBdURyQjtBQUpwRCxLQUZhO0FBUXZCc0IsSUFBQUEsWUFBWSxFQUFFUCxrQkFBa0IsQ0FBQ08sWUFSVjtBQVN2QkMsSUFBQUEsTUFBTTtBQUNKQyxNQUFBQSxNQUFNLEVBQUVULGtCQUFrQixDQUFDUztBQUR2QixPQUVEckIsVUFGQyxDQVRpQjtBQWF2QnNCLElBQUFBLGtCQUFrQixFQUFFVixrQkFBa0IsQ0FBQ1Usa0JBYmhCO0FBY3ZCaEIsSUFBQUEsU0FBUyxFQUFUQSxTQWR1QjtBQWV2QkgsSUFBQUEsYUFBYSxFQUFiQTtBQWZ1QixHQUF6QixDQWRDLENBZ0NEOztBQUNBLE1BQU1vQixpQkFBaUIsR0FBRzdCLFlBQVksQ0FBQ21CLGdCQUFELENBQXRDLENBakNDLENBa0NEOztBQUNBVSxFQUFBQSxpQkFBaUIsQ0FBQ0osWUFBbEIsR0FBaUNkLGlCQUFpQixDQUFDYyxZQUFuRDs7QUFFQSxNQUFJLENBQUNJLGlCQUFpQixDQUFDLFVBQUQsQ0FBdEIsRUFBb0M7QUFBRTtBQUNwQ0EsSUFBQUEsaUJBQWlCLENBQUMsVUFBRCxDQUFqQixHQUFnQ1YsZ0JBQWdCLENBQUNDLFFBQWpEO0FBQ0Q7O0FBRUQsU0FBT1MsaUJBQVA7QUFDRDtBQUVELGVBQWUzQixxQkFBZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU2NyaXB0dXJlIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyBnZXRTY3JpcHR1cmVSZXNvdXJjZVNldHRpbmdzIH0gZnJvbSAnLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5cbi8qKlxuICogaG9vayB0byBnZXQgYSBzY3JpcHR1cmUgcmVzb3VyY2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY3JpcHR1cmVTZXR0aW5ncyAtIGluZm8gYWJvdXQgdGhlIHNjcmlwdHVyZSBiZWluZyByZWZlcmVuY2VkXG4gKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzTmV3VGVzdGFtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxSZXBvVXJsIC0gb3B0aW9uYWwgcGF0aCB0byByZXBvIGZvciBvcmlnaW5hbCBsYW5ndWFnZVxuICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRMYW5ndWFnZUlkIC0gb3B0aW9uYWwgb3Zlci1yaWRlIGZvciB0cmFuc2llbnQgY2FzZSB3aGVyZSBsYW5ndWFnZSBpbiBzY3JpcHR1cmUgc2V0dGluZ3MgaGF2ZSBub3QgeWV0IHVwZGF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50T3duZXIgLSBvcHRpb25hbCBvdmVyLXJpZGUgZm9yIHRyYW5zaWVudCBjYXNlIHdoZXJlIG93bmVyIGluIHNjcmlwdHVyZSBzZXR0aW5ncyBoYXZlIG5vdCB5ZXQgdXBkYXRlZFxuICogQHBhcmFtIHtvYmplY3R9IGh0dHBDb25maWcgLSBvcHRpb25hbCBjb25maWcgc2V0dGluZ3MgZm9yIGZldGNoZXMgKHRpbWVvdXQsIGNhY2hlLCBldGMuKVxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFJlZiAtIGFwcCBkZWZhdWx0LCBwb2ludHMgdG8gc3BlY2lmaWMgcmVmIHRoYXQgY291bGQgYmUgYSBicmFuY2ggb3IgdGFnXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHdob2xlQm9vayAtIGlmIHRydWUgdGhlbiBmZXRjaCB0aGUgZW50aXJlIGJvb2tcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhZHlGb3JGZXRjaCAtIHRydWUgaWYgcmVhZHkgZm9yIGZldGNoaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTY3JpcHR1cmVSZXNvdXJjZXMoe1xuICBhcHBSZWYgPSAnbWFzdGVyJyxcbiAgY3VycmVudExhbmd1YWdlSWQgPSBudWxsLFxuICBjdXJyZW50T3duZXIgPSBudWxsLFxuICBodHRwQ29uZmlnID0ge30sXG4gIGlzTmV3VGVzdGFtZW50LFxuICBvcmlnaW5hbFJlcG9VcmwsXG4gIHJlYWR5Rm9yRmV0Y2ggPSBmYWxzZSxcbiAgcmVmZXJlbmNlLFxuICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgd2hvbGVCb29rID0gZmFsc2UsXG59KSB7XG4gIGNvbnN0IGJvb2tJZCA9IHJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgaWYgKGFwcFJlZiAhPT0gc2NyaXB0dXJlU2V0dGluZ3MucmVmKSB7XG4gICAgc2NyaXB0dXJlU2V0dGluZ3MgPSB7IC4uLnNjcmlwdHVyZVNldHRpbmdzLCByZWY6IGFwcFJlZiB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmVSZXNvdXJjZXM6IGFwcFJlZiBjaGFuZ2VkIHRvIHNjcmlwdHVyZVNldHRpbmdzLnJlZj0ke3NjcmlwdHVyZVNldHRpbmdzLnJlZn0gYW5kIGFwcFJlZj0ke2FwcFJlZn1gKVxuICB9LCBbYXBwUmVmLCBzY3JpcHR1cmVTZXR0aW5ncy5yZWZdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZVNldHRpbmdzXyA9IGdldFNjcmlwdHVyZVJlc291cmNlU2V0dGluZ3MoYm9va0lkLCBzY3JpcHR1cmVTZXR0aW5ncywgaXNOZXdUZXN0YW1lbnQsXG4gICAgb3JpZ2luYWxSZXBvVXJsLCBjdXJyZW50TGFuZ3VhZ2VJZCwgY3VycmVudE93bmVyKSAvLyBjb252ZXJ0IGFueSBkZWZhdWx0IHNldHRpbmdzIHN0cmluZ3NcblxuICBjb25zdCBzY3JpcHR1cmVDb25maWdfID0ge1xuICAgIHJlZmVyZW5jZSxcbiAgICByZXNvdXJjZToge1xuICAgICAgbGFuZ3VhZ2VJZDogc2NyaXB0dXJlU2V0dGluZ3NfLmxhbmd1YWdlSWQsXG4gICAgICBwcm9qZWN0SWQ6IHNjcmlwdHVyZVNldHRpbmdzXy5yZXNvdXJjZUlkLFxuICAgICAgb3duZXI6IHNjcmlwdHVyZVNldHRpbmdzXy5vd25lcixcbiAgICAgIHJlZjogc2NyaXB0dXJlU2V0dGluZ3NfLnJlZiB8fCBzY3JpcHR1cmVTZXR0aW5nc18uYnJhbmNoIHx8IGFwcFJlZixcbiAgICB9LFxuICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlU2V0dGluZ3NfLnJlc291cmNlTGluayxcbiAgICBjb25maWc6IHtcbiAgICAgIHNlcnZlcjogc2NyaXB0dXJlU2V0dGluZ3NfLnNlcnZlcixcbiAgICAgIC4uLmh0dHBDb25maWcsXG4gICAgfSxcbiAgICBkaXNhYmxlV29yZFBvcG92ZXI6IHNjcmlwdHVyZVNldHRpbmdzXy5kaXNhYmxlV29yZFBvcG92ZXIsXG4gICAgd2hvbGVCb29rLFxuICAgIHJlYWR5Rm9yRmV0Y2gsXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHNjcmlwdHVyZVJlc291cmNlID0gdXNlU2NyaXB0dXJlKHNjcmlwdHVyZUNvbmZpZ18pXG4gIC8vIHJlc3RvcmUgYW55IGRlZmF1bHQgc2V0dGluZ3NcbiAgc2NyaXB0dXJlUmVzb3VyY2UucmVzb3VyY2VMaW5rID0gc2NyaXB0dXJlU2V0dGluZ3MucmVzb3VyY2VMaW5rXG5cbiAgaWYgKCFzY3JpcHR1cmVSZXNvdXJjZVsncmVzb3VyY2UnXSkgeyAvLyBrZWVwIHJlc291cmNlIGlmIG5vdCByZXR1cm5lZFxuICAgIHNjcmlwdHVyZVJlc291cmNlWydyZXNvdXJjZSddID0gc2NyaXB0dXJlQ29uZmlnXy5yZXNvdXJjZVxuICB9XG5cbiAgcmV0dXJuIHNjcmlwdHVyZVJlc291cmNlXG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVNjcmlwdHVyZVJlc291cmNlc1xuIl19
|