single-scripture-rcl 3.3.3-patch.3 → 3.3.3-patch.4
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 +537 -377
- package/dist/components/ScripturePane/ScripturePane.js +43 -30
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/useScripture.js +388 -112
- package/dist/hooks/useScriptureAlignmentEdit.js +58 -73
- package/dist/hooks/useScriptureResources.js +20 -18
- package/dist/hooks/useScriptureSelector.js +12 -12
- package/dist/hooks/useScriptureSettings.js +35 -39
- package/dist/utils/maps.js +1 -1
- package/package.json +4 -4
|
@@ -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,
|
|
@@ -94,8 +95,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
94
95
|
startEditBranch = _ref.startEditBranch,
|
|
95
96
|
targetLanguage = _ref.targetLanguage,
|
|
96
97
|
title = _ref.title,
|
|
97
|
-
workingResourceBranch = _ref.workingResourceBranch
|
|
98
|
-
setOriginalScriptureResource = _ref.setOriginalScriptureResource;
|
|
98
|
+
workingResourceBranch = _ref.workingResourceBranch;
|
|
99
99
|
|
|
100
100
|
var _React$useState = React.useState({
|
|
101
101
|
aligned: false,
|
|
@@ -117,6 +117,15 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
117
117
|
newVerseText = state.newVerseText,
|
|
118
118
|
updatedVerseObjects = state.updatedVerseObjects,
|
|
119
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
|
+
};
|
|
120
129
|
|
|
121
130
|
function setState(newState) {
|
|
122
131
|
setState_(function (prevState) {
|
|
@@ -125,8 +134,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
125
134
|
}
|
|
126
135
|
|
|
127
136
|
function clearChanges() {
|
|
128
|
-
console.log(
|
|
129
|
-
|
|
137
|
+
// console.log(`clearChanges() - ${JSON.stringify(basicReference)}`)
|
|
130
138
|
var clearState = _objectSpread(_objectSpread({}, state), {}, {
|
|
131
139
|
alignerData: null,
|
|
132
140
|
editing: false,
|
|
@@ -137,7 +145,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
137
145
|
});
|
|
138
146
|
|
|
139
147
|
if (!isEqual(state, clearState)) {
|
|
140
|
-
console.log(
|
|
148
|
+
// console.log(`clearChanges() - reference changed, reset edit/alignment state variables`)
|
|
141
149
|
setState(clearState);
|
|
142
150
|
}
|
|
143
151
|
}
|
|
@@ -148,59 +156,47 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
148
156
|
|
|
149
157
|
|
|
150
158
|
httpConfig = httpConfig || {};
|
|
151
|
-
var bookId =
|
|
159
|
+
var bookId = projectId;
|
|
152
160
|
var originalScriptureSettings = getScriptureResourceSettings(bookId, originalScriptureSettings_, isNewTestament, originalRepoUrl);
|
|
153
161
|
|
|
154
162
|
if (!enableAlignment) {
|
|
155
163
|
// if not enabled, then we don't fetch resource
|
|
156
164
|
originalScriptureSettings.resourceLink = null;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
var originalScriptureResource = useScriptureResources({
|
|
161
|
-
bookId: bookId,
|
|
162
|
-
scriptureSettings: originalScriptureSettings,
|
|
163
|
-
chapter: reference === null || reference === void 0 ? void 0 : reference.chapter,
|
|
164
|
-
verse: reference === null || reference === void 0 ? void 0 : reference.verse,
|
|
165
|
-
isNewTestament: isNewTestament,
|
|
166
|
-
originalRepoUrl: originalRepoUrl,
|
|
167
|
-
currentLanguageId: originalScriptureSettings === null || originalScriptureSettings === void 0 ? void 0 : originalScriptureSettings.languageId,
|
|
168
|
-
currentOwner: originalLanguageOwner,
|
|
169
|
-
httpConfig: httpConfig
|
|
170
|
-
});
|
|
171
|
-
var originalVerseObjects = React.useMemo(function () {
|
|
172
|
-
var _originalScriptureRes;
|
|
165
|
+
}
|
|
173
166
|
|
|
167
|
+
var originalVerseObjects = React.useMemo(function () {
|
|
174
168
|
// get the original language verseObjects
|
|
175
|
-
|
|
176
|
-
// if multiple verses, then append them together
|
|
177
|
-
var verseObjects = [];
|
|
169
|
+
var verseObjects = [];
|
|
178
170
|
|
|
179
|
-
|
|
180
|
-
|
|
171
|
+
if (originalScriptureBookObjects) {
|
|
172
|
+
// @ts-ignore
|
|
173
|
+
var verses = getVersesForRef(basicReference, originalScriptureBookObjects, originalScriptureBookObjects === null || originalScriptureBookObjects === void 0 ? void 0 : originalScriptureBookObjects.languageId);
|
|
181
174
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
175
|
+
if (verses !== null && verses !== void 0 && verses.length) {
|
|
176
|
+
var _iterator = _createForOfIteratorHelper(verses),
|
|
177
|
+
_step;
|
|
185
178
|
|
|
186
|
-
|
|
187
|
-
|
|
179
|
+
try {
|
|
180
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
181
|
+
var _verseReference$verse;
|
|
188
182
|
|
|
189
|
-
|
|
190
|
-
|
|
183
|
+
var verseReference = _step.value;
|
|
184
|
+
var origVerseObjects = verseReference === null || verseReference === void 0 ? void 0 : (_verseReference$verse = verseReference.verseData) === null || _verseReference$verse === void 0 ? void 0 : _verseReference$verse.verseObjects;
|
|
185
|
+
|
|
186
|
+
if (origVerseObjects) {
|
|
187
|
+
Array.prototype.push.apply(verseObjects, origVerseObjects);
|
|
188
|
+
}
|
|
191
189
|
}
|
|
190
|
+
} catch (err) {
|
|
191
|
+
_iterator.e(err);
|
|
192
|
+
} finally {
|
|
193
|
+
_iterator.f();
|
|
192
194
|
}
|
|
193
|
-
} catch (err) {
|
|
194
|
-
_iterator.e(err);
|
|
195
|
-
} finally {
|
|
196
|
-
_iterator.f();
|
|
197
195
|
}
|
|
198
|
-
|
|
199
|
-
return verseObjects;
|
|
200
196
|
}
|
|
201
197
|
|
|
202
|
-
return
|
|
203
|
-
}, [
|
|
198
|
+
return verseObjects;
|
|
199
|
+
}, [originalScriptureBookObjects, chapter, verse, projectId]);
|
|
204
200
|
React.useEffect(function () {
|
|
205
201
|
// update alignment status when aligner is hidden
|
|
206
202
|
var notEmpty = !!initialVerseObjects;
|
|
@@ -401,7 +397,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
401
397
|
function cancelAlignment() {
|
|
402
398
|
console.log("cancelAlignment()");
|
|
403
399
|
var targetVerseUSFM = getCurrentVerseUsfm(updatedVerseObjects, initialVerseObjects, verseTextChanged, newVerseText);
|
|
404
|
-
var aligned = isUsfmAligned(targetVerseUSFM,
|
|
400
|
+
var aligned = isUsfmAligned(targetVerseUSFM, originalVerseObjects);
|
|
405
401
|
setState({
|
|
406
402
|
alignerData: null,
|
|
407
403
|
aligned: aligned
|
|
@@ -412,6 +408,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
412
408
|
* @param {boolean} editing_ - if true, editor is shown, otherwise editor is hidden
|
|
413
409
|
* @param {string} _newVerseText - optional verse text
|
|
414
410
|
*/
|
|
411
|
+
// eslint-disable-next-line require-await
|
|
415
412
|
|
|
416
413
|
|
|
417
414
|
function setEditing(_x) {
|
|
@@ -437,31 +434,19 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
437
434
|
case 0:
|
|
438
435
|
_newVerseText = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : newVerseText;
|
|
439
436
|
|
|
440
|
-
if (
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
_context2.next = 5;
|
|
451
|
-
return startEditBranch();
|
|
452
|
-
|
|
453
|
-
case 5:
|
|
454
|
-
if (editing_ !== editing) {
|
|
455
|
-
_newVerseText = _newVerseText || initialVerseText;
|
|
456
|
-
newState = {
|
|
457
|
-
editing: editing_,
|
|
458
|
-
newVerseText: _newVerseText
|
|
459
|
-
};
|
|
460
|
-
setState(newState);
|
|
461
|
-
callSetSavedState(_newVerseText !== initialVerseText, newState);
|
|
437
|
+
if (enableEdit) {
|
|
438
|
+
if (editing_ !== editing) {
|
|
439
|
+
_newVerseText = _newVerseText || initialVerseText;
|
|
440
|
+
newState = {
|
|
441
|
+
editing: editing_,
|
|
442
|
+
newVerseText: _newVerseText
|
|
443
|
+
};
|
|
444
|
+
setState(newState);
|
|
445
|
+
callSetSavedState(_newVerseText !== initialVerseText, newState);
|
|
446
|
+
}
|
|
462
447
|
}
|
|
463
448
|
|
|
464
|
-
case
|
|
449
|
+
case 2:
|
|
465
450
|
case "end":
|
|
466
451
|
return _context2.stop();
|
|
467
452
|
}
|
|
@@ -475,7 +460,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
475
460
|
var _AlignmentHelpers$upd3 = AlignmentHelpers.updateAlignmentsToTargetVerse(initialVerseObjects, newVerseText),
|
|
476
461
|
targetVerseText = _AlignmentHelpers$upd3.targetVerseText;
|
|
477
462
|
|
|
478
|
-
var aligned = isUsfmAligned(targetVerseText,
|
|
463
|
+
var aligned = isUsfmAligned(targetVerseText, originalVerseObjects);
|
|
479
464
|
|
|
480
465
|
var _changed = newVerseText !== initialVerseText;
|
|
481
466
|
|
|
@@ -548,6 +533,7 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
548
533
|
return {
|
|
549
534
|
actions: {
|
|
550
535
|
cancelAlignment: cancelAlignment,
|
|
536
|
+
clearChanges: clearChanges,
|
|
551
537
|
getChanges: getChanges,
|
|
552
538
|
handleAlignmentClick: handleAlignmentClick,
|
|
553
539
|
onAlignmentsChange: onAlignmentsChange,
|
|
@@ -563,14 +549,13 @@ export function useScriptureAlignmentEdit(_ref) {
|
|
|
563
549
|
initialVerseText: initialVerseText,
|
|
564
550
|
initialVerseObjects: initialVerseObjects,
|
|
565
551
|
newVerseText: newVerseText,
|
|
552
|
+
reference: basicReference,
|
|
566
553
|
sourceLanguage: sourceLanguage,
|
|
567
554
|
targetLanguage: targetLanguage,
|
|
568
|
-
unsavedChanges: unsavedChanges,
|
|
569
|
-
verseTextChanged: verseTextChanged,
|
|
570
|
-
reference: reference,
|
|
571
555
|
title: title,
|
|
572
|
-
|
|
556
|
+
unsavedChanges: unsavedChanges,
|
|
557
|
+
verseTextChanged: verseTextChanged
|
|
573
558
|
}
|
|
574
559
|
};
|
|
575
560
|
}
|
|
576
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0LnRzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIkFsaWdubWVudEhlbHBlcnMiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwidXNmbUhlbHBlcnMiLCJpc0VxdWFsIiwiU2NyaXB0dXJlQ29uZmlnIiwiU2NyaXB0dXJlUmVmZXJlbmNlIiwiU2VydmVyQ29uZmlnIiwiZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyIsIk9SSUdJTkFMX1NPVVJDRSIsInVzZVNjcmlwdHVyZVJlc291cmNlcyIsImlzVXNmbUFsaWduZWQiLCJ0YXJnZXRWZXJzZVVTRk0iLCJvcmlnaW5hbFZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImV4dHJhY3RBbGlnbm1lbnRzRnJvbVRhcmdldFZlcnNlIiwiYWxpZ25tZW50cyIsIndvcmRCYW5rIiwiYXJlQWxnbm1lbnRzQ29tcGxldGUiLCJnZXRDdXJyZW50VmVyc2VVc2ZtIiwidXBkYXRlZFZlcnNlT2JqZWN0cyIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJ2ZXJzZVRleHRDaGFuZ2VkIiwibmV3VmVyc2VUZXh0IiwiY3VycmVudFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlVGV4dCIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJ1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0IiwiY3VycmVudEluZGV4IiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsImh0dHBDb25maWciLCJpbml0aWFsVmVyc2VUZXh0IiwiaXNOZXdUZXN0YW1lbnQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJvcmlnaW5hbFJlcG9VcmwiLCJyZWZlcmVuY2UiLCJzY3JpcHR1cmVDb25maWciLCJzY3JpcHR1cmVTZXR0aW5ncyIsInNldFNhdmVkQ2hhbmdlcyIsInNvdXJjZUxhbmd1YWdlIiwic3RhcnRFZGl0QnJhbmNoIiwidGFyZ2V0TGFuZ3VhZ2UiLCJ0aXRsZSIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsInNldE9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2UiLCJ1c2VTdGF0ZSIsImFsaWduZWQiLCJhbGlnbmVyRGF0YSIsImVkaXRpbmciLCJuZXdBbGlnbm1lbnRzIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJzZXRTdGF0ZSIsIm5ld1N0YXRlIiwicHJldlN0YXRlIiwiY2xlYXJDaGFuZ2VzIiwiY29uc29sZSIsImxvZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjbGVhclN0YXRlIiwib3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5nc18iLCJyZXNvdXJjZUlkIiwiYm9va0lkIiwicHJvamVjdElkIiwib3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5ncyIsInJlc291cmNlTGluayIsIm9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2UiLCJjaGFwdGVyIiwidmVyc2UiLCJjdXJyZW50TGFuZ3VhZ2VJZCIsImxhbmd1YWdlSWQiLCJjdXJyZW50T3duZXIiLCJ1c2VNZW1vIiwidmVyc2VzRm9yUmVmIiwidmVyc2VPYmplY3RzIiwidmVyc2VSZWZlcmVuY2UiLCJvcmlnVmVyc2VPYmplY3RzIiwidmVyc2VEYXRhIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJwdXNoIiwiYXBwbHkiLCJ1c2VFZmZlY3QiLCJub3RFbXB0eSIsImFsaWduZWRfIiwicmVzdWx0cyIsImdldENoYW5nZXMiLCJfbmV3U3RhdGUiLCJ1cGRhdGVkVmVyc2VPYmplY3RzXyIsInVwZGF0ZVZlcnNlV2l0aE5ld0FsaWdubWVudHMiLCJ0YXJnZXRWZXJzZU9iamVjdHMiLCJyZWYiLCJoYW5kbGVBbGlnbm1lbnRDbGljayIsIl9hbGlnbmVyRGF0YSIsIm9yaWdpbmFsVmVyc2VVc2ZtIiwicGFyc2VVc2ZtVG9Xb3JkQWxpZ25lckRhdGEiLCJ0YXJnZXRXb3JkcyIsInZlcnNlQWxpZ25tZW50cyIsIl9uZXdBbGlnbm1lbnRzIiwidmVyc2VVc2ZtIiwiYWRkQWxpZ25tZW50c1RvVmVyc2VVU0ZNIiwiYWxpZ25lZFZlcnNlT2JqZWN0cyIsInVzZm1WZXJzZVRvSnNvbiIsInNhdmVBbGlnbm1lbnQiLCJjYWxsU2V0U2F2ZWRTdGF0ZSIsImNhbmNlbEFsaWdubWVudCIsInNldEVkaXRpbmciLCJlZGl0aW5nXyIsIl9uZXdWZXJzZVRleHQiLCJzZXRWZXJzZUNoYW5nZWQiLCJjaGFuZ2VkIiwiX2luaXRpYWxWZXJzZVRleHQiLCJfY2hhbmdlZCIsImN1cnJlbnRWZXJzZU9iamVjdHMiLCJ1bnNhdmVkQ2hhbmdlcyIsInVuc2F2ZWRDaGFuZ2VzXyIsIm9uQWxpZ25tZW50c0NoYW5nZSIsImFsaWdubWVudENvbXBsZXRlIiwiYWN0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQSxPQUFPLEtBQUtBLEtBQVosTUFBdUIsT0FBdkI7QUFDQSxTQUNFQyxnQkFERixFQUVFQyx5QkFGRixFQUdFQyxXQUhGLFFBSU8sa0JBSlA7QUFLQSxPQUFPLEtBQUtDLE9BQVosTUFBeUIsWUFBekI7QUFDQSxTQUNFQyxlQURGLEVBRUVDLGtCQUZGLEVBR0VDLFlBSEYsUUFJTyxVQUpQO0FBS0EsU0FBU0MsNEJBQVQsUUFBNkMsNEJBQTdDO0FBQ0EsU0FBU0MsZUFBVCxRQUFnQyxVQUFoQztBQUNBLE9BQU9DLHFCQUFQLE1BQWtDLHlCQUFsQzs7QUFxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLGFBQVQsQ0FBdUJDLGVBQXZCLEVBQXdDQyxvQkFBeEMsRUFBOEQ7QUFBQTs7QUFDNURBLEVBQUFBLG9CQUFvQixHQUFHLHlCQUFBQSxvQkFBb0IsVUFBcEIsOERBQXNCQyxNQUF0QixHQUErQkQsb0JBQS9CLEdBQXNELElBQTdFLENBRDRELENBQ3NCOztBQUR0Qiw4QkFFM0JaLGdCQUFnQixDQUFDYyxnQ0FBakIsQ0FBa0RILGVBQWxELEVBQW1FQyxvQkFBbkUsQ0FGMkI7QUFBQSxNQUVwREcsVUFGb0QseUJBRXBEQSxVQUZvRDtBQUFBLE1BRXhDQyxRQUZ3Qyx5QkFFeENBLFFBRndDOztBQUc1RCxTQUFPaEIsZ0JBQWdCLENBQUNpQixvQkFBakIsQ0FBc0NELFFBQXRDLEVBQWdERCxVQUFoRCxDQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU0csbUJBQVQsQ0FBNkJDLG1CQUE3QixFQUFrREMsbUJBQWxELEVBQXVFQyxnQkFBdkUsRUFBa0dDLFlBQWxHLEVBQWdIO0FBQzlHLE1BQUlYLGVBQWUsR0FBRyxJQUF0QjtBQUNBLE1BQU1ZLG9CQUFvQixHQUFHSixtQkFBbUIsSUFBSUMsbUJBQXBEOztBQUVBLE1BQUlDLGdCQUFnQixJQUFJQyxZQUF4QixFQUFzQztBQUFBLGdDQUNSdEIsZ0JBQWdCLENBQUN3Qiw2QkFBakIsQ0FBK0NELG9CQUEvQyxFQUFxRUQsWUFBckUsQ0FEUTtBQUFBLFFBQzVCRyxlQUQ0Qix5QkFDNUJBLGVBRDRCOztBQUVwQ2QsSUFBQUEsZUFBZSxHQUFHYyxlQUFsQjtBQUNELEdBSEQsTUFHTztBQUNMZCxJQUFBQSxlQUFlLEdBQUdWLHlCQUF5QixDQUFDeUIsc0JBQTFCLENBQWlESCxvQkFBakQsQ0FBbEI7QUFDRDs7QUFDRCxTQUFPWixlQUFQO0FBQ0QsQyxDQUVEOzs7QUFDQSxPQUFPLFNBQVNnQix5QkFBVCxPQW9CMEI7QUFBQSxNQW5CL0JDLFlBbUIrQixRQW5CL0JBLFlBbUIrQjtBQUFBLE1BbEIvQkMsVUFrQitCLFFBbEIvQkEsVUFrQitCO0FBQUEsTUFqQi9CQyxlQWlCK0IsUUFqQi9CQSxlQWlCK0I7QUFBQSxNQWhCL0JDLFVBZ0IrQixRQWhCL0JBLFVBZ0IrQjtBQUFBLE1BZi9CWCxtQkFlK0IsUUFmL0JBLG1CQWUrQjtBQUFBLE1BZC9CWSxnQkFjK0IsUUFkL0JBLGdCQWMrQjtBQUFBLE1BYi9CQyxjQWErQixRQWIvQkEsY0FhK0I7QUFBQSxNQVovQkMscUJBWStCLFFBWi9CQSxxQkFZK0I7QUFBQSxNQVgvQkMsZUFXK0IsUUFYL0JBLGVBVytCO0FBQUEsTUFWL0JDLFNBVStCLFFBVi9CQSxTQVUrQjtBQUFBLE1BVC9CQyxlQVMrQixRQVQvQkEsZUFTK0I7QUFBQSxNQVIvQkMsaUJBUStCLFFBUi9CQSxpQkFRK0I7QUFBQSxNQVAvQkMsZUFPK0IsUUFQL0JBLGVBTytCO0FBQUEsTUFOL0JDLGNBTStCLFFBTi9CQSxjQU0rQjtBQUFBLE1BTC9CQyxlQUsrQixRQUwvQkEsZUFLK0I7QUFBQSxNQUovQkMsY0FJK0IsUUFKL0JBLGNBSStCO0FBQUEsTUFIL0JDLEtBRytCLFFBSC9CQSxLQUcrQjtBQUFBLE1BRi9CQyxxQkFFK0IsUUFGL0JBLHFCQUUrQjtBQUFBLE1BRC9CQyw0QkFDK0IsUUFEL0JBLDRCQUMrQjs7QUFBQSx3QkFDSjlDLEtBQUssQ0FBQytDLFFBQU4sQ0FBZTtBQUN4Q0MsSUFBQUEsT0FBTyxFQUFFLEtBRCtCO0FBRXhDQyxJQUFBQSxXQUFXLEVBQUUsSUFGMkI7QUFHeENDLElBQUFBLE9BQU8sRUFBRSxLQUgrQjtBQUl4Q0MsSUFBQUEsYUFBYSxFQUFFLElBSnlCO0FBS3hDNUIsSUFBQUEsWUFBWSxFQUFFLElBTDBCO0FBTXhDSCxJQUFBQSxtQkFBbUIsRUFBRSxJQU5tQjtBQU94Q0UsSUFBQUEsZ0JBQWdCLEVBQUU7QUFQc0IsR0FBZixDQURJO0FBQUE7QUFBQSxNQUN4QjhCLEtBRHdCO0FBQUEsTUFDakJDLFNBRGlCOztBQUFBLE1BWTdCTCxPQVo2QixHQW1CM0JJLEtBbkIyQixDQVk3QkosT0FaNkI7QUFBQSxNQWE3QkMsV0FiNkIsR0FtQjNCRyxLQW5CMkIsQ0FhN0JILFdBYjZCO0FBQUEsTUFjN0JDLE9BZDZCLEdBbUIzQkUsS0FuQjJCLENBYzdCRixPQWQ2QjtBQUFBLE1BZTdCQyxhQWY2QixHQW1CM0JDLEtBbkIyQixDQWU3QkQsYUFmNkI7QUFBQSxNQWdCN0I1QixZQWhCNkIsR0FtQjNCNkIsS0FuQjJCLENBZ0I3QjdCLFlBaEI2QjtBQUFBLE1BaUI3QkgsbUJBakI2QixHQW1CM0JnQyxLQW5CMkIsQ0FpQjdCaEMsbUJBakI2QjtBQUFBLE1Ba0I3QkUsZ0JBbEI2QixHQW1CM0I4QixLQW5CMkIsQ0FrQjdCOUIsZ0JBbEI2Qjs7QUFxQi9CLFdBQVNnQyxRQUFULENBQWtCQyxRQUFsQixFQUE0QjtBQUMxQkYsSUFBQUEsU0FBUyxDQUFDLFVBQUFHLFNBQVM7QUFBQSw2Q0FBVUEsU0FBVixHQUF3QkQsUUFBeEI7QUFBQSxLQUFWLENBQVQ7QUFDRDs7QUFFRCxXQUFTRSxZQUFULEdBQXdCO0FBQ3RCQyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsNEJBQWdDQyxJQUFJLENBQUNDLFNBQUwsQ0FBZXhCLFNBQWYsQ0FBaEM7O0FBQ0EsUUFBTXlCLFVBQVUsbUNBQ1hWLEtBRFc7QUFFZEgsTUFBQUEsV0FBVyxFQUFFLElBRkM7QUFHZEMsTUFBQUEsT0FBTyxFQUFFLEtBSEs7QUFJZEMsTUFBQUEsYUFBYSxFQUFFLElBSkQ7QUFLZDVCLE1BQUFBLFlBQVksRUFBRSxJQUxBO0FBTWRILE1BQUFBLG1CQUFtQixFQUFFLElBTlA7QUFPZEUsTUFBQUEsZ0JBQWdCLEVBQUU7QUFQSixNQUFoQjs7QUFVQSxRQUFJLENBQUNsQixPQUFPLENBQUNnRCxLQUFELEVBQVFVLFVBQVIsQ0FBWixFQUFpQztBQUMvQkosTUFBQUEsT0FBTyxDQUFDQyxHQUFSO0FBQ0FMLE1BQUFBLFFBQVEsQ0FBQ1EsVUFBRCxDQUFSO0FBQ0Q7QUFDRjs7QUFFRCxNQUFNQywwQkFBMEIsbUNBQzNCeEIsaUJBRDJCO0FBRTlCeUIsSUFBQUEsVUFBVSxFQUFFdkQ7QUFGa0IsSUFBaEMsQ0EzQytCLENBZ0QvQjs7O0FBQ0F1QixFQUFBQSxVQUFVLEdBQUdBLFVBQVUsSUFBSSxFQUEzQjtBQUNBLE1BQU1pQyxNQUFNLEdBQUc1QixTQUFILGFBQUdBLFNBQUgsdUJBQUdBLFNBQVMsQ0FBRTZCLFNBQTFCO0FBQ0EsTUFBTUMseUJBQXlCLEdBQUczRCw0QkFBNEIsQ0FDNUR5RCxNQUQ0RCxFQUNwREYsMEJBRG9ELEVBQ3hCN0IsY0FEd0IsRUFDUkUsZUFEUSxDQUE5RDs7QUFJQSxNQUFJLENBQUNMLGVBQUwsRUFBc0I7QUFBRTtBQUN0Qm9DLElBQUFBLHlCQUF5QixDQUFDQyxZQUExQixHQUF5QyxJQUF6QztBQUNELEdBekQ4QixDQTJEL0I7OztBQUNBLE1BQU1DLHlCQUF5QixHQUFHM0QscUJBQXFCLENBQUM7QUFDdER1RCxJQUFBQSxNQUFNLEVBQU5BLE1BRHNEO0FBRXREMUIsSUFBQUEsaUJBQWlCLEVBQUU0Qix5QkFGbUM7QUFHdERHLElBQUFBLE9BQU8sRUFBRWpDLFNBQUYsYUFBRUEsU0FBRix1QkFBRUEsU0FBUyxDQUFFaUMsT0FIa0M7QUFJdERDLElBQUFBLEtBQUssRUFBRWxDLFNBQUYsYUFBRUEsU0FBRix1QkFBRUEsU0FBUyxDQUFFa0MsS0FKb0M7QUFLdERyQyxJQUFBQSxjQUFjLEVBQWRBLGNBTHNEO0FBTXRERSxJQUFBQSxlQUFlLEVBQWZBLGVBTnNEO0FBT3REb0MsSUFBQUEsaUJBQWlCLEVBQUVMLHlCQUFGLGFBQUVBLHlCQUFGLHVCQUFFQSx5QkFBeUIsQ0FBRU0sVUFQUTtBQVF0REMsSUFBQUEsWUFBWSxFQUFFdkMscUJBUndDO0FBU3RESCxJQUFBQSxVQUFVLEVBQVZBO0FBVHNELEdBQUQsQ0FBdkQ7QUFZQSxNQUFNbkIsb0JBQW9CLEdBQUdiLEtBQUssQ0FBQzJFLE9BQU4sQ0FBYyxZQUFNO0FBQUE7O0FBQUU7QUFDakQsUUFBSSxDQUFBTix5QkFBeUIsU0FBekIsSUFBQUEseUJBQXlCLFdBQXpCLHFDQUFBQSx5QkFBeUIsQ0FBRU8sWUFBM0IsZ0ZBQXlDOUQsTUFBekMsSUFBa0QsQ0FBdEQsRUFBeUQ7QUFBRTtBQUN6RCxVQUFNK0QsWUFBWSxHQUFHLEVBQXJCOztBQUR1RCxpREFHMUJSLHlCQUgwQixhQUcxQkEseUJBSDBCLHVCQUcxQkEseUJBQXlCLENBQUVPLFlBSEQ7QUFBQTs7QUFBQTtBQUd2RCw0REFBc0U7QUFBQTs7QUFBQSxjQUEzREUsY0FBMkQ7QUFDcEUsY0FBTUMsZ0JBQWdCLEdBQUdELGNBQUgsYUFBR0EsY0FBSCxnREFBR0EsY0FBYyxDQUFFRSxTQUFuQiwwREFBRyxzQkFBMkJILFlBQXBEOztBQUVBLGNBQUlFLGdCQUFKLEVBQXNCO0FBQ3BCRSxZQUFBQSxLQUFLLENBQUNDLFNBQU4sQ0FBZ0JDLElBQWhCLENBQXFCQyxLQUFyQixDQUEyQlAsWUFBM0IsRUFBeUNFLGdCQUF6QztBQUNEO0FBQ0Y7QUFUc0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFVdkQsYUFBT0YsWUFBUDtBQUNEOztBQUNELFdBQU9SLHlCQUFQLGFBQU9BLHlCQUFQLHVCQUFPQSx5QkFBeUIsQ0FBRVEsWUFBbEM7QUFDRCxHQWQ0QixFQWMxQixDQUFDUix5QkFBRCxhQUFDQSx5QkFBRCx1QkFBQ0EseUJBQXlCLENBQUVRLFlBQTVCLEVBQTBDUix5QkFBMUMsYUFBMENBLHlCQUExQyx1QkFBMENBLHlCQUF5QixDQUFFTyxZQUFyRSxDQWQwQixDQUE3QjtBQWdCQTVFLEVBQUFBLEtBQUssQ0FBQ3FGLFNBQU4sQ0FBZ0IsWUFBTTtBQUFFO0FBQ3RCLFFBQU1DLFFBQVEsR0FBRyxDQUFDLENBQUNqRSxtQkFBbkI7QUFDQSxRQUFJa0UsUUFBUSxHQUFHLEtBQWY7O0FBRUEsUUFBSSxDQUFDdEMsV0FBTCxFQUFrQjtBQUFFO0FBQ2xCLFVBQUlxQyxRQUFKLEVBQWM7QUFBRTtBQUNkLFlBQU05RCxvQkFBb0IsR0FBR0osbUJBQW1CLElBQUlDLG1CQUFwRDs7QUFFQSxZQUFJLENBQUNVLGVBQUwsRUFBc0I7QUFDcEJ3RCxVQUFBQSxRQUFRLEdBQUcsSUFBWDtBQUNELFNBRkQsTUFFTyxJQUFJaEUsWUFBWSxJQUFLQSxZQUFZLEtBQUtVLGdCQUF0QyxFQUF5RDtBQUM5RCxjQUFNdUQsT0FBTyxHQUFHdkYsZ0JBQWdCLENBQUN3Qiw2QkFBakIsQ0FBK0NELG9CQUEvQyxFQUFxRUQsWUFBckUsQ0FBaEI7QUFDQWdFLFVBQUFBLFFBQVEsR0FBRzVFLGFBQWEsQ0FBQzZFLE9BQUQsYUFBQ0EsT0FBRCx1QkFBQ0EsT0FBTyxDQUFFOUQsZUFBVixFQUEyQmIsb0JBQTNCLENBQXhCO0FBQ0QsU0FITSxNQUdBO0FBQ0wsY0FBTUQsZUFBZSxHQUFHVix5QkFBeUIsQ0FBQ3lCLHNCQUExQixDQUFpREgsb0JBQWpELENBQXhCO0FBQ0ErRCxVQUFBQSxRQUFRLEdBQUc1RSxhQUFhLENBQUNDLGVBQUQsRUFBa0JDLG9CQUFsQixDQUF4QjtBQUNEO0FBQ0Y7O0FBRUQsVUFBSW1DLE9BQU8sS0FBS3VDLFFBQWhCLEVBQTBCO0FBQ3hCakMsUUFBQUEsUUFBUSxDQUFDO0FBQUVOLFVBQUFBLE9BQU8sRUFBRXVDO0FBQVgsU0FBRCxDQUFSO0FBQ0Q7QUFDRjtBQUNGLEdBdkJELEVBdUJHLENBQUNsRSxtQkFBRCxFQUFzQjRCLFdBQXRCLEVBQW1DMUIsWUFBbkMsRUFBaURVLGdCQUFqRCxFQUFtRUYsZUFBbkUsRUFBb0ZsQixvQkFBcEYsQ0F2Qkg7QUF5QkE7QUFDRjtBQUNBO0FBQ0E7O0FBQ0UsV0FBUzRFLFVBQVQsR0FBbUM7QUFBQSxRQUFmbEMsUUFBZSx1RUFBSixFQUFJO0FBQ2pDRyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsZ0NBQW9DOUIsWUFBcEMsc0JBQW1FMEIsUUFBbkU7O0FBQ0EsUUFBTW1DLFNBQVM7QUFDYnRDLE1BQUFBLEtBQUssRUFBTEE7QUFEYSxPQUVWRyxRQUZVLENBQWYsQ0FGaUMsQ0FNakM7OztBQU5pQyxRQVMvQkosYUFUK0IsR0FnQjdCdUMsU0FoQjZCLENBUy9CdkMsYUFUK0I7QUFBQSxRQVcvQjVCLFlBWCtCLEdBZ0I3Qm1FLFNBaEI2QixDQVcvQm5FLFlBWCtCO0FBQUEsUUFhL0JILG1CQWIrQixHQWdCN0JzRSxTQWhCNkIsQ0FhL0J0RSxtQkFiK0I7QUFBQSxRQWUvQkUsZ0JBZitCLEdBZ0I3Qm9FLFNBaEI2QixDQWUvQnBFLGdCQWYrQjtBQWlCakMsUUFBSXFFLG9CQUFvQixHQUFHdkUsbUJBQTNCOztBQUVBLFFBQUkrQixhQUFKLEVBQW1CO0FBQUU7QUFDbkJPLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUjtBQUNBZ0MsTUFBQUEsb0JBQW9CLEdBQUdDLDRCQUE0QixFQUFuRDtBQUNEOztBQUVELFFBQUl0RSxnQkFBZ0IsSUFBSUMsWUFBeEIsRUFBc0M7QUFDcENtQyxNQUFBQSxPQUFPLENBQUNDLEdBQVIsb0NBQStDcEMsWUFBL0M7QUFDQSxVQUFNQyxvQkFBb0IsR0FBR21FLG9CQUFvQixJQUFJdEUsbUJBQXJEO0FBQ0FzRSxNQUFBQSxvQkFBb0IsSUFBSWpDLE9BQU8sQ0FBQ0MsR0FBUiw0Q0FBeEI7O0FBSG9DLG1DQUlMMUQsZ0JBQWdCLENBQUN3Qiw2QkFBakIsQ0FBK0NELG9CQUEvQyxFQUFxRUQsWUFBckUsQ0FKSztBQUFBLFVBSTVCc0Usa0JBSjRCLDBCQUk1QkEsa0JBSjRCOztBQUtwQ0YsTUFBQUEsb0JBQW9CLEdBQUdFLGtCQUF2QjtBQUNELEtBTkQsTUFNTztBQUFFO0FBQ1BGLE1BQUFBLG9CQUFvQixJQUFJakMsT0FBTyxDQUFDQyxHQUFSLDZDQUF3RDtBQUFFcEMsUUFBQUEsWUFBWSxFQUFaQSxZQUFGO0FBQWdCb0UsUUFBQUEsb0JBQW9CLEVBQXBCQTtBQUFoQixPQUF4RCxDQUF4QjtBQUNBQSxNQUFBQSxvQkFBb0IsR0FBR0Esb0JBQW9CLElBQUl0RSxtQkFBL0M7QUFDRDs7QUFFRCxRQUFJc0Usb0JBQUosRUFBMEI7QUFBQTs7QUFDeEIsVUFBTUcsR0FBRyxHQUFHeEQsZUFBSCxhQUFHQSxlQUFILGdEQUFHQSxlQUFlLENBQUVzQyxZQUFwQiwwREFBRyxzQkFBZ0MvQyxZQUFoQyxDQUFaO0FBQ0EsYUFBTztBQUNMTixRQUFBQSxZQUFZLEVBQVpBLFlBREs7QUFFTHVFLFFBQUFBLEdBQUcsRUFBSEEsR0FGSztBQUdMMUUsUUFBQUEsbUJBQW1CLEVBQUV1RTtBQUhoQixPQUFQO0FBS0Q7O0FBRUQsV0FBTyxFQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7OztBQXRLaUMsV0F1S2hCSSxvQkF2S2dCO0FBQUE7QUFBQTtBQW1NL0I7QUFDRjtBQUNBO0FBQ0E7OztBQXRNaUM7QUFBQSxvRkF1Sy9CO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFDTWhFLGVBRE47QUFBQTtBQUFBO0FBQUE7O0FBRVFpRSxjQUFBQSxZQUZSLEdBRXVCLElBRnZCO0FBQUE7QUFBQSxxQkFHVXRELGVBQWUsRUFIekI7O0FBQUE7QUFLSSxrQkFBSSxDQUFDTyxXQUFMLEVBQWtCO0FBQUU7QUFDbEJTLGdCQUFBQSxPQUFPLENBQUNDLEdBQVI7QUFDTS9DLGdCQUFBQSxlQUZVLEdBRVFPLG1CQUFtQixDQUFDQyxtQkFBRCxFQUFzQkMsbUJBQXRCLEVBQTJDQyxnQkFBM0MsRUFBNkRDLFlBQTdELENBRjNCO0FBR1owRSxnQkFBQUEsaUJBSFksR0FHUSxJQUhSOztBQUtoQixvQkFBSXBGLG9CQUFKLEVBQTBCO0FBQ3hCb0Ysa0JBQUFBLGlCQUFpQixHQUFHL0YseUJBQXlCLENBQUN5QixzQkFBMUIsQ0FBaURkLG9CQUFqRCxDQUFwQjtBQUNEOztBQVBlLHdDQVlaWixnQkFBZ0IsQ0FBQ2lHLDBCQUFqQixDQUE0Q3RGLGVBQTVDLEVBQTZEcUYsaUJBQTdELENBWlksRUFVRGhGLFFBVkMseUJBVWRrRixXQVZjLEVBV0duRixVQVhILHlCQVdkb0YsZUFYYztBQWFoQkosZ0JBQUFBLFlBQVksR0FBRztBQUFFL0Usa0JBQUFBLFFBQVEsRUFBUkEsUUFBRjtBQUFZRCxrQkFBQUEsVUFBVSxFQUFWQTtBQUFaLGlCQUFmO0FBQ0QsZUFkRCxNQWNPO0FBQUU7QUFDUDBDLGdCQUFBQSxPQUFPLENBQUNDLEdBQVI7QUFDQXFDLGdCQUFBQSxZQUFZLEdBQUcvQyxXQUFmO0FBQ0Q7O0FBQ0RLLGNBQUFBLFFBQVEsQ0FBQztBQUFFTCxnQkFBQUEsV0FBVyxFQUFFK0M7QUFBZixlQUFELENBQVI7QUFDQXRDLGNBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZcUMsWUFBWjs7QUF4Qko7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsS0F2SytCO0FBQUE7QUFBQTs7QUF1TS9CLFdBQVNKLDRCQUFULEdBQXNFO0FBQUEsUUFBaENTLGNBQWdDLHVFQUFmbEQsYUFBZTs7QUFDcEUsUUFBTTNCLG9CQUFvQixHQUFHSixtQkFBbUIsSUFBSUMsbUJBQXBEO0FBQ0EsUUFBTUssZUFBZSxHQUFHSCxZQUFZLElBQUlyQix5QkFBeUIsQ0FBQ3lCLHNCQUExQixDQUFpREgsb0JBQWpELENBQXhDO0FBQ0EsUUFBTThFLFNBQVMsR0FBR3JHLGdCQUFnQixDQUFDc0csd0JBQWpCLENBQTBDRixjQUFjLENBQUNGLFdBQXpELEVBQXNFRSxjQUFjLENBQUNELGVBQXJGLEVBQXNHMUUsZUFBdEcsQ0FBbEI7QUFDQSxRQUFNOEUsbUJBQW1CLEdBQUdyRyxXQUFXLENBQUNzRyxlQUFaLENBQTRCSCxTQUE1QixDQUE1QjtBQUNBLFdBQU9FLG1CQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7O0FBQ0UsV0FBU0UsYUFBVCxHQUF1RDtBQUFBLFFBQWhDTCxjQUFnQyx1RUFBZmxELGFBQWU7O0FBQ3JETyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsb0NBQStDMEMsY0FBL0M7O0FBRUEsUUFBSUEsY0FBSixFQUFvQjtBQUNsQixVQUFNRyxtQkFBbUIsR0FBR1osNEJBQTRCLENBQUNTLGNBQUQsQ0FBeEQ7QUFDQTNDLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUiwwQ0FBcUQ2QyxtQkFBckQ7QUFDQSxVQUFNakQsUUFBUSxHQUFHO0FBQ2ZOLFFBQUFBLFdBQVcsRUFBRSxJQURFO0FBRWZDLFFBQUFBLE9BQU8sRUFBRSxLQUZNO0FBR2ZDLFFBQUFBLGFBQWEsRUFBRSxJQUhBO0FBSWYvQixRQUFBQSxtQkFBbUIsRUFBRW9GO0FBSk4sT0FBakI7QUFNQWxELE1BQUFBLFFBQVEsQ0FBQ0MsUUFBRCxDQUFSO0FBQ0FvRCxNQUFBQSxpQkFBaUIsQ0FBQyxJQUFELEVBQU9wRCxRQUFQLENBQWpCO0FBQ0QsS0FYRCxNQVdPO0FBQ0xELE1BQUFBLFFBQVEsQ0FBQztBQUNQTCxRQUFBQSxXQUFXLEVBQUUsSUFETjtBQUVQQyxRQUFBQSxPQUFPLEVBQUU7QUFGRixPQUFELENBQVI7QUFJRDtBQUNGO0FBRUQ7QUFDRjtBQUNBOzs7QUFDRSxXQUFTMEQsZUFBVCxHQUEyQjtBQUN6QmxELElBQUFBLE9BQU8sQ0FBQ0MsR0FBUjtBQUNBLFFBQU0vQyxlQUFlLEdBQUdPLG1CQUFtQixDQUFDQyxtQkFBRCxFQUFzQkMsbUJBQXRCLEVBQTJDQyxnQkFBM0MsRUFBNkRDLFlBQTdELENBQTNDO0FBQ0EsUUFBTXlCLE9BQU8sR0FBR3JDLGFBQWEsQ0FBQ0MsZUFBRCxFQUFrQnlELHlCQUFsQixhQUFrQkEseUJBQWxCLHVCQUFrQkEseUJBQXlCLENBQUVRLFlBQTdDLENBQTdCO0FBQ0F2QixJQUFBQSxRQUFRLENBQUM7QUFBRUwsTUFBQUEsV0FBVyxFQUFFLElBQWY7QUFBcUJELE1BQUFBLE9BQU8sRUFBUEE7QUFBckIsS0FBRCxDQUFSO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUF2UGlDLFdBd1BoQjZELFVBeFBnQjtBQUFBO0FBQUE7QUF1US9CO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBNVFpQztBQUFBLDBFQXdQL0Isa0JBQTBCQyxRQUExQjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFvQ0MsY0FBQUEsYUFBcEMsOERBQW9EeEYsWUFBcEQ7O0FBQUEsbUJBQ01PLFVBRE47QUFBQTtBQUFBO0FBQUE7O0FBQUEsb0JBRVFnRixRQUFRLElBQUksQ0FBQzVELE9BRnJCO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEscUJBR1lSLGVBQWUsRUFIM0I7O0FBQUE7QUFNSSxrQkFBSW9FLFFBQVEsS0FBSzVELE9BQWpCLEVBQTBCO0FBQ3hCNkQsZ0JBQUFBLGFBQWEsR0FBR0EsYUFBYSxJQUFJOUUsZ0JBQWpDO0FBQ01zQixnQkFBQUEsUUFGa0IsR0FFUDtBQUFFTCxrQkFBQUEsT0FBTyxFQUFFNEQsUUFBWDtBQUFxQnZGLGtCQUFBQSxZQUFZLEVBQUV3RjtBQUFuQyxpQkFGTztBQUd4QnpELGdCQUFBQSxRQUFRLENBQUNDLFFBQUQsQ0FBUjtBQUNBb0QsZ0JBQUFBLGlCQUFpQixDQUFFSSxhQUFhLEtBQUs5RSxnQkFBcEIsRUFBdUNzQixRQUF2QyxDQUFqQjtBQUNEOztBQVhMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBeFArQjtBQUFBO0FBQUE7O0FBNlEvQixXQUFTeUQsZUFBVCxDQUF5QkMsT0FBekIsRUFBa0MxRixZQUFsQyxFQUFnRDJGLGlCQUFoRCxFQUFtRTtBQUFBLGlDQUNyQ2pILGdCQUFnQixDQUFDd0IsNkJBQWpCLENBQStDSixtQkFBL0MsRUFBb0VFLFlBQXBFLENBRHFDO0FBQUEsUUFDekRHLGVBRHlELDBCQUN6REEsZUFEeUQ7O0FBRWpFLFFBQU1zQixPQUFPLEdBQUdyQyxhQUFhLENBQUNlLGVBQUQsRUFBa0IyQyx5QkFBbEIsYUFBa0JBLHlCQUFsQix1QkFBa0JBLHlCQUF5QixDQUFFUSxZQUE3QyxDQUE3Qjs7QUFDQSxRQUFNc0MsUUFBUSxHQUFHNUYsWUFBWSxLQUFLVSxnQkFBbEM7O0FBRUFxQixJQUFBQSxRQUFRLENBQUM7QUFDUGhDLE1BQUFBLGdCQUFnQixFQUFFNkYsUUFEWDtBQUVQNUYsTUFBQUEsWUFBWSxFQUFaQSxZQUZPO0FBR1B5QixNQUFBQSxPQUFPLEVBQVBBO0FBSE8sS0FBRCxDQUFSO0FBS0Q7O0FBRUQsTUFBTW9FLG1CQUFtQixHQUFHcEgsS0FBSyxDQUFDMkUsT0FBTixDQUFlLFlBQU07QUFBRTtBQUNqRCxRQUFJdEQsbUJBQUosRUFBeUI7QUFDdkIsVUFBTVQsZUFBZSxHQUFHTyxtQkFBbUIsQ0FBQ0MsbUJBQUQsRUFBc0JDLG1CQUF0QixFQUEyQ0MsZ0JBQTNDLEVBQTZEQyxZQUE3RCxDQUEzQztBQUNBLFVBQU1DLG9CQUFvQixHQUFHckIsV0FBVyxDQUFDc0csZUFBWixDQUE0QjdGLGVBQTVCLENBQTdCO0FBQ0EsYUFBT1ksb0JBQVA7QUFDRDs7QUFDRCxXQUFPSCxtQkFBUDtBQUNELEdBUDJCLEVBT3pCLENBQUNELG1CQUFELEVBQXNCQyxtQkFBdEIsRUFBMkNDLGdCQUEzQyxFQUE2REMsWUFBN0QsQ0FQeUIsQ0FBNUI7QUFTQSxNQUFNOEYsY0FBc0IsR0FBR3JILEtBQUssQ0FBQzJFLE9BQU4sQ0FBZSxZQUFNO0FBQUU7QUFDcEQsUUFBTXNDLE9BQU8sR0FBRzNGLGdCQUFnQixJQUFLRixtQkFBbUIsSUFBSSxDQUFDaEIsT0FBTyxDQUFDaUIsbUJBQUQsRUFBc0JELG1CQUF0QixDQUFwRTtBQUNBLFdBQU82RixPQUFQO0FBQ0QsR0FIOEIsRUFHNUIsQ0FBQzdGLG1CQUFELEVBQXNCQyxtQkFBdEIsRUFBMkNDLGdCQUEzQyxDQUg0QixDQUEvQjtBQUtBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBQ0UsV0FBU3FGLGlCQUFULENBQTJCVyxlQUEzQixFQUE2RDtBQUFBLFFBQWpCL0QsUUFBaUIsdUVBQU4sRUFBTTs7QUFDM0QsUUFBTW1DLFNBQVMsbUNBQ1Z0QyxLQURVLEdBRVZHLFFBRlUsQ0FBZixDQUQyRCxDQUszRDs7O0FBQ0FmLElBQUFBLGVBQWUsSUFBSUEsZUFBZSxDQUFDWCxZQUFELEVBQWUsQ0FBQ3lGLGVBQWhCLEVBQWlDO0FBQUU3QixNQUFBQSxVQUFVLEVBQVZBLFVBQUY7QUFBY2hDLE1BQUFBLFlBQVksRUFBWkEsWUFBZDtBQUE0QkwsTUFBQUEsS0FBSyxFQUFFc0M7QUFBbkMsS0FBakMsQ0FBbEM7QUFDRDs7QUFFRDFGLEVBQUFBLEtBQUssQ0FBQ3FGLFNBQU4sQ0FBZ0IsWUFBTTtBQUFFO0FBQ3RCLFFBQU1pQyxlQUFlLEdBQUdELGNBQWMsSUFBSXBFLFdBQTFDO0FBQ0EwRCxJQUFBQSxpQkFBaUIsQ0FBQ1csZUFBRCxDQUFqQjtBQUNELEdBSEQsRUFHRyxDQUFDRCxjQUFELEVBQWlCcEUsV0FBakIsQ0FISDtBQUtBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBQ0UsV0FBU3NFLGtCQUFULENBQTRCL0IsT0FBNUIsRUFBcUM7QUFDbkM5QixJQUFBQSxPQUFPLENBQUNDLEdBQVIsc0RBQWlFNkIsT0FBakUsRUFEbUMsQ0FDdUM7O0FBRHZDLFFBRTNCVyxXQUYyQixHQUVNWCxPQUZOLENBRTNCVyxXQUYyQjtBQUFBLFFBRWRDLGVBRmMsR0FFTVosT0FGTixDQUVkWSxlQUZjO0FBR25DLFFBQU1vQixpQkFBaUIsR0FBR3ZILGdCQUFnQixDQUFDaUIsb0JBQWpCLENBQXNDaUYsV0FBdEMsRUFBbURDLGVBQW5ELENBQTFCO0FBQ0ExQyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsMEJBQThCNkQsaUJBQWlCLEdBQUcsV0FBSCxHQUFpQixZQUFoRTtBQUNBbEUsSUFBQUEsUUFBUSxDQUFDO0FBQUVILE1BQUFBLGFBQWEsRUFBRXFDLE9BQWpCO0FBQTBCeEMsTUFBQUEsT0FBTyxFQUFFd0U7QUFBbkMsS0FBRCxDQUFSO0FBQ0EsV0FBT0EsaUJBQVA7QUFDRDs7QUFFRCxTQUFPO0FBQ0xDLElBQUFBLE9BQU8sRUFBRTtBQUNQYixNQUFBQSxlQUFlLEVBQWZBLGVBRE87QUFFUG5CLE1BQUFBLFVBQVUsRUFBVkEsVUFGTztBQUdQTSxNQUFBQSxvQkFBb0IsRUFBcEJBLG9CQUhPO0FBSVB3QixNQUFBQSxrQkFBa0IsRUFBbEJBLGtCQUpPO0FBS1BiLE1BQUFBLGFBQWEsRUFBYkEsYUFMTztBQU1QRyxNQUFBQSxVQUFVLEVBQVZBLFVBTk87QUFPUEcsTUFBQUEsZUFBZSxFQUFmQTtBQVBPLEtBREo7QUFVTDVELElBQUFBLEtBQUssRUFBRTtBQUNMSixNQUFBQSxPQUFPLEVBQVBBLE9BREs7QUFFTEMsTUFBQUEsV0FBVyxFQUFYQSxXQUZLO0FBR0xtRSxNQUFBQSxtQkFBbUIsRUFBbkJBLG1CQUhLO0FBSUxsRSxNQUFBQSxPQUFPLEVBQVBBLE9BSks7QUFLTGpCLE1BQUFBLGdCQUFnQixFQUFoQkEsZ0JBTEs7QUFNTFosTUFBQUEsbUJBQW1CLEVBQW5CQSxtQkFOSztBQU9MRSxNQUFBQSxZQUFZLEVBQVpBLFlBUEs7QUFRTGtCLE1BQUFBLGNBQWMsRUFBZEEsY0FSSztBQVNMRSxNQUFBQSxjQUFjLEVBQWRBLGNBVEs7QUFVTDBFLE1BQUFBLGNBQWMsRUFBZEEsY0FWSztBQVdML0YsTUFBQUEsZ0JBQWdCLEVBQWhCQSxnQkFYSztBQVlMZSxNQUFBQSxTQUFTLEVBQVRBLFNBWks7QUFhTE8sTUFBQUEsS0FBSyxFQUFMQSxLQWJLO0FBY0x5QixNQUFBQSx5QkFBeUIsRUFBekJBO0FBZEs7QUFWRixHQUFQO0FBMkJEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBBbGlnbm1lbnRIZWxwZXJzLFxuICBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLFxuICB1c2ZtSGVscGVycyxcbn0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7XG4gIFNjcmlwdHVyZUNvbmZpZyxcbiAgU2NyaXB0dXJlUmVmZXJlbmNlLFxuICBTZXJ2ZXJDb25maWcsXG59IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyB9IGZyb20gJy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHsgT1JJR0lOQUxfU09VUkNFIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgdXNlU2NyaXB0dXJlUmVzb3VyY2VzIGZyb20gJy4vdXNlU2NyaXB0dXJlUmVzb3VyY2VzJ1xuXG5pbnRlcmZhY2UgU3RhcnRFZGl0IHtcbiAgKCk6IFByb21pc2U8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHR1cmVBTGlnbm1lbnRFZGl0UHJvcHMge1xuICAvLyBjdXJyZW50IHZlcnNlIHNlbGVjdGVkIGZyb20gaW5pdGlhbFZlcnNlT2JqZWN0c1tdXG4gIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICAvLyByZWZlcmVuY2UgZm9yIHZlcnNlIHNlbGVjdGVkIGZvciBhbGlnbm1lbnRcbiAgY3VycmVudFZlcnNlUmVmOiBTY3JpcHR1cmVSZWZlcmVuY2UsXG4gIC8vIGlmIHRydWUgdGhlbiBlZGl0aW5nIGlzIGFsbG93ZWRcbiAgZW5hYmxlRWRpdDogYm9vbGVhbixcbiAgLy8gaWYgdHJ1ZSB0aGVuIGFsaWdubWVudCBpcyBhbGxvd2VkXG4gIGVuYWJsZUFsaWdubWVudDogYm9vbGVhbixcbiAgLy8gY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIGh0dHAgY29tbXVuaWNhdGlvblxuICBodHRwQ29uZmlnOiBTZXJ2ZXJDb25maWcsXG4gIC8vIGFycmF5IG9mIGVhY2ggdmVyc2UgZm9yIGluIHJlZmVyZW5jZSByYW5nZVxuICBpbml0aWFsVmVyc2VPYmplY3RzOiBbXSxcbiAgLy8gaW5pdGlhbCB0ZXh0IGZvciB2ZXJzZVxuICBpbml0aWFsVmVyc2VUZXh0OiBzdHJpbmcsXG4gIC8vIGZsYWcgdGhhdCB3ZSBhcmUgd29ya2luZyBvbiBOVCBib29rXG4gIGlzTmV3VGVzdGFtZW50OiBib29sZWFuLFxuICAvLyB1c2VyIG5hbWUgb2YgbG9nZ2VkIGluIHVzZXJcbiAgbG9nZ2VkSW5Vc2VyOiBzdHJpbmcsXG4gIC8vIG93bmVyIHRvIHVzZSB3aGVuIGZldGNoaW5nIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlc1xuICBvcmlnaW5hbExhbmd1YWdlT3duZXI6IHN0cmluZyxcbiAgLy8gdXJsIGZvciB0aGUgb3JpZ2luYWwgbGFuZ3VhZ2UgcmVwb1xuICBvcmlnaW5hbFJlcG9Vcmw6IHN0cmluZyxcbiAgLyoqIGN1cnJlbnQgcmVmZXJlbmNlICoqL1xuICByZWZlcmVuY2U6IFNjcmlwdHVyZVJlZmVyZW5jZTtcbiAgLy8gZGV0YWlscyBhYm91dCB0aGUgY3VycmVudCBzY3JpcHR1cmUgbG9hZGVkXG4gIHNjcmlwdHVyZUNvbmZpZzogU2NyaXB0dXJlQ29uZmlnLFxuICAvLyBzZXR0aW5ncyB0byBiZSB1c2VkIGZvciBzY3JpcHR1cmVcbiAgc2NyaXB0dXJlU2V0dGluZ3M6IHsgfSxcbiAgLy8gY2FsbGJhY2sgdG8gc2F2ZSBjdXJyZW50IHZlcnNlIGVkaXQgYW5kIGFsaWdubWVudCBjaGFuZ2VzXG4gIHNldFNhdmVkQ2hhbmdlczogRnVuY3Rpb24sXG4gIC8vIGNhbGxiYWNrIHRvIGNyZWF0ZSBhIHVzZXIgYnJhbmNoIGZvciBzYXZpbmcgZWRpdCBkYXRhXG4gIHN0YXJ0RWRpdEJyYW5jaDogU3RhcnRFZGl0LFxuICAvLyBpbmRleCB0byB1c2UgZm9yIGJvb2sgKGUuZy4gYDAxYCBmb3IgYEdFTmApXG4gIGJvb2tJbmRleDogc3RyaW5nLFxuICAvLyBicmFuY2ggbmFtZSBjdXJyZW50bHkgYmVpbmcgdXNlZCAoZS5nLiBgbWFzdGVyYCBvciB1c2VyIGJyYW5jaClcbiAgd29ya2luZ1Jlc291cmNlQnJhbmNoOiBzdHJpbmcsXG4gIC8vIGN1cnJlbnQgdGFyZ2V0IGxhbmd1YWdlXG4gIHRhcmdldExhbmd1YWdlOiBvYmplY3QsXG4gIC8vIHNvdXJjZSBsYW5ndWFnZVxuICBzb3VyY2VMYW5ndWFnZTogc3RyaW5nLFxuICAvLyB0aXRsZSB0byBzaG93IGluIGFsaWdubWVudFxuICB0aXRsZTogc3RyaW5nLFxuICAvLyBjYWxsYmFjayB0byByZXR1cm4gdGhlIG9yaWdpbmFsIHNjcmlwdHVyZSBmb3IgdGhlIGJvb2tcbiAgc2V0T3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZTogRnVuY3Rpb24sXG59XG5cbi8qKlxuICogZGV0ZXJtaW5lcyBpZiBhbGlnbm1lbnQgaXMgY29tcGxldGUgYmFzZWQgb24gdGFyZ2V0IFVTRk0gYW5kIG9yaWdpbmFsIGxhbmd1YWdlIHZlcnNlIG9iamVjdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRWZXJzZVVTRk1cbiAqIEBwYXJhbSB7b2JqZWN0W119IG9yaWdpbmFsVmVyc2VPYmplY3RzXG4gKi9cbmZ1bmN0aW9uIGlzVXNmbUFsaWduZWQodGFyZ2V0VmVyc2VVU0ZNLCBvcmlnaW5hbFZlcnNlT2JqZWN0cykge1xuICBvcmlnaW5hbFZlcnNlT2JqZWN0cyA9IG9yaWdpbmFsVmVyc2VPYmplY3RzPy5sZW5ndGggPyBvcmlnaW5hbFZlcnNlT2JqZWN0cyA6IG51bGwgLy8gbWFrZSBzdXJlIG5vdCBwYXNzaW5nIGVtcHR5IEFycmF5XG4gIGNvbnN0IHsgYWxpZ25tZW50cywgd29yZEJhbmsgfSA9IEFsaWdubWVudEhlbHBlcnMuZXh0cmFjdEFsaWdubWVudHNGcm9tVGFyZ2V0VmVyc2UodGFyZ2V0VmVyc2VVU0ZNLCBvcmlnaW5hbFZlcnNlT2JqZWN0cylcbiAgcmV0dXJuIEFsaWdubWVudEhlbHBlcnMuYXJlQWxnbm1lbnRzQ29tcGxldGUod29yZEJhbmssIGFsaWdubWVudHMpXG59XG5cbi8qKlxuICogZ2V0IHRoZSB1cGRhdGVkIFVTRk0gZm9yIHRhcmdldCB2ZXJzZSBmcm9tIHRoZSB1cGRhdGVkIHZlcnNlIG9iamVjdHMgYW5kIGxhdGVzdCB0ZXh0XG4gKiBAcGFyYW0ge29iamVjdFtdfSB1cGRhdGVkVmVyc2VPYmplY3RzXG4gKiBAcGFyYW0ge29iamVjdFtdfSBpbml0aWFsVmVyc2VPYmplY3RzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZlcnNlVGV4dENoYW5nZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWZXJzZVRleHRcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudFZlcnNlVXNmbSh1cGRhdGVkVmVyc2VPYmplY3RzLCBpbml0aWFsVmVyc2VPYmplY3RzLCB2ZXJzZVRleHRDaGFuZ2VkOiBib29sZWFuLCBuZXdWZXJzZVRleHQpIHtcbiAgbGV0IHRhcmdldFZlcnNlVVNGTSA9IG51bGxcbiAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcblxuICBpZiAodmVyc2VUZXh0Q2hhbmdlZCAmJiBuZXdWZXJzZVRleHQpIHtcbiAgICBjb25zdCB7IHRhcmdldFZlcnNlVGV4dCB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZShjdXJyZW50VmVyc2VPYmplY3RzXywgbmV3VmVyc2VUZXh0KVxuICAgIHRhcmdldFZlcnNlVVNGTSA9IHRhcmdldFZlcnNlVGV4dFxuICB9IGVsc2Uge1xuICAgIHRhcmdldFZlcnNlVVNGTSA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShjdXJyZW50VmVyc2VPYmplY3RzXylcbiAgfVxuICByZXR1cm4gdGFyZ2V0VmVyc2VVU0ZNXG59XG5cbi8vIG1hbmFnZSB2ZXJzZSBlZGl0IGFuZCBhbGlnbm1lbnQgc3RhdGVzXG5leHBvcnQgZnVuY3Rpb24gdXNlU2NyaXB0dXJlQWxpZ25tZW50RWRpdCh7XG4gIGN1cnJlbnRJbmRleCxcbiAgZW5hYmxlRWRpdCxcbiAgZW5hYmxlQWxpZ25tZW50LFxuICBodHRwQ29uZmlnLFxuICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICBpbml0aWFsVmVyc2VUZXh0LFxuICBpc05ld1Rlc3RhbWVudCxcbiAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICBvcmlnaW5hbFJlcG9VcmwsXG4gIHJlZmVyZW5jZSxcbiAgc2NyaXB0dXJlQ29uZmlnLFxuICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgc2V0U2F2ZWRDaGFuZ2VzLFxuICBzb3VyY2VMYW5ndWFnZSxcbiAgc3RhcnRFZGl0QnJhbmNoLFxuICB0YXJnZXRMYW5ndWFnZSxcbiAgdGl0bGUsXG4gIHdvcmtpbmdSZXNvdXJjZUJyYW5jaCxcbiAgc2V0T3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZSxcbn0gOiBTY3JpcHR1cmVBTGlnbm1lbnRFZGl0UHJvcHMpIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGFsaWduZWQ6IGZhbHNlLFxuICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgIG5ld0FsaWdubWVudHM6IG51bGwsXG4gICAgbmV3VmVyc2VUZXh0OiBudWxsLFxuICAgIHVwZGF0ZWRWZXJzZU9iamVjdHM6IG51bGwsXG4gICAgdmVyc2VUZXh0Q2hhbmdlZDogZmFsc2UsXG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIGFsaWduZWQsXG4gICAgYWxpZ25lckRhdGEsXG4gICAgZWRpdGluZyxcbiAgICBuZXdBbGlnbm1lbnRzLFxuICAgIG5ld1ZlcnNlVGV4dCxcbiAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgIHZlcnNlVGV4dENoYW5nZWQsXG4gIH0gPSBzdGF0ZVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJDaGFuZ2VzKCkge1xuICAgIGNvbnNvbGUubG9nKGBjbGVhckNoYW5nZXMoKSAtICR7SlNPTi5zdHJpbmdpZnkocmVmZXJlbmNlKX1gKVxuICAgIGNvbnN0IGNsZWFyU3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICBuZXdBbGlnbm1lbnRzOiBudWxsLFxuICAgICAgbmV3VmVyc2VUZXh0OiBudWxsLFxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogbnVsbCxcbiAgICAgIHZlcnNlVGV4dENoYW5nZWQ6IGZhbHNlLFxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChzdGF0ZSwgY2xlYXJTdGF0ZSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGByZWZlcmVuY2UgY2hhbmdlZCwgcmVzZXQgZWRpdC9hbGlnbm1lbnQgc3RhdGUgdmFyaWFibGVzYClcbiAgICAgIHNldFN0YXRlKGNsZWFyU3RhdGUpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5nc18gPSB7XG4gICAgLi4uc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgcmVzb3VyY2VJZDogT1JJR0lOQUxfU09VUkNFLFxuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBodHRwQ29uZmlnID0gaHR0cENvbmZpZyB8fCB7fVxuICBjb25zdCBib29rSWQgPSByZWZlcmVuY2U/LnByb2plY3RJZFxuICBjb25zdCBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzID0gZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyhcbiAgICBib29rSWQsIG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3NfLCBpc05ld1Rlc3RhbWVudCwgb3JpZ2luYWxSZXBvVXJsLFxuICApXG5cbiAgaWYgKCFlbmFibGVBbGlnbm1lbnQpIHsgLy8gaWYgbm90IGVuYWJsZWQsIHRoZW4gd2UgZG9uJ3QgZmV0Y2ggcmVzb3VyY2VcbiAgICBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzLnJlc291cmNlTGluayA9IG51bGxcbiAgfVxuXG4gIC8vIGdldCBvcmlnaW5hbCBsYW5ndWFnZSBmb3IgdGhpcyBhbGlnbm1lbnRcbiAgY29uc3Qgb3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZSA9IHVzZVNjcmlwdHVyZVJlc291cmNlcyh7XG4gICAgYm9va0lkLFxuICAgIHNjcmlwdHVyZVNldHRpbmdzOiBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzLFxuICAgIGNoYXB0ZXI6IHJlZmVyZW5jZT8uY2hhcHRlcixcbiAgICB2ZXJzZTogcmVmZXJlbmNlPy52ZXJzZSxcbiAgICBpc05ld1Rlc3RhbWVudCxcbiAgICBvcmlnaW5hbFJlcG9VcmwsXG4gICAgY3VycmVudExhbmd1YWdlSWQ6IG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3M/Lmxhbmd1YWdlSWQsXG4gICAgY3VycmVudE93bmVyOiBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgaHR0cENvbmZpZyxcbiAgfSlcblxuICBjb25zdCBvcmlnaW5hbFZlcnNlT2JqZWN0cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4geyAvLyBnZXQgdGhlIG9yaWdpbmFsIGxhbmd1YWdlIHZlcnNlT2JqZWN0c1xuICAgIGlmIChvcmlnaW5hbFNjcmlwdHVyZVJlc291cmNlPy52ZXJzZXNGb3JSZWY/Lmxlbmd0aCA+IDEpIHsgLy8gaWYgbXVsdGlwbGUgdmVyc2VzLCB0aGVuIGFwcGVuZCB0aGVtIHRvZ2V0aGVyXG4gICAgICBjb25zdCB2ZXJzZU9iamVjdHMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IHZlcnNlUmVmZXJlbmNlIG9mIG9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2U/LnZlcnNlc0ZvclJlZikge1xuICAgICAgICBjb25zdCBvcmlnVmVyc2VPYmplY3RzID0gdmVyc2VSZWZlcmVuY2U/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzXG5cbiAgICAgICAgaWYgKG9yaWdWZXJzZU9iamVjdHMpIHtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh2ZXJzZU9iamVjdHMsIG9yaWdWZXJzZU9iamVjdHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2ZXJzZU9iamVjdHNcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2U/LnZlcnNlT2JqZWN0c1xuICB9LCBbb3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZT8udmVyc2VPYmplY3RzLCBvcmlnaW5hbFNjcmlwdHVyZVJlc291cmNlPy52ZXJzZXNGb3JSZWZdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBhbGlnbm1lbnQgc3RhdHVzIHdoZW4gYWxpZ25lciBpcyBoaWRkZW5cbiAgICBjb25zdCBub3RFbXB0eSA9ICEhaW5pdGlhbFZlcnNlT2JqZWN0c1xuICAgIGxldCBhbGlnbmVkXyA9IGZhbHNlXG5cbiAgICBpZiAoIWFsaWduZXJEYXRhKSB7IC8vIHNraXAgaWYgYWxpZ25lciBpcyBiZWluZyBzaG93blxuICAgICAgaWYgKG5vdEVtcHR5KSB7IC8vIHNraXAgaWYgZW1wdHlcbiAgICAgICAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcblxuICAgICAgICBpZiAoIWVuYWJsZUFsaWdubWVudCkge1xuICAgICAgICAgIGFsaWduZWRfID0gdHJ1ZVxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZlcnNlVGV4dCAmJiAobmV3VmVyc2VUZXh0ICE9PSBpbml0aWFsVmVyc2VUZXh0KSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGN1cnJlbnRWZXJzZU9iamVjdHNfLCBuZXdWZXJzZVRleHQpXG4gICAgICAgICAgYWxpZ25lZF8gPSBpc1VzZm1BbGlnbmVkKHJlc3VsdHM/LnRhcmdldFZlcnNlVGV4dCwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0VmVyc2VVU0ZNID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKGN1cnJlbnRWZXJzZU9iamVjdHNfKVxuICAgICAgICAgIGFsaWduZWRfID0gaXNVc2ZtQWxpZ25lZCh0YXJnZXRWZXJzZVVTRk0sIG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGlnbmVkICE9PSBhbGlnbmVkXykge1xuICAgICAgICBzZXRTdGF0ZSh7IGFsaWduZWQ6IGFsaWduZWRfIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbaW5pdGlhbFZlcnNlT2JqZWN0cywgYWxpZ25lckRhdGEsIG5ld1ZlcnNlVGV4dCwgaW5pdGlhbFZlcnNlVGV4dCwgZW5hYmxlQWxpZ25tZW50LCBvcmlnaW5hbFZlcnNlT2JqZWN0c10pXG5cbiAgLyoqXG4gICAqIGdldCBjaGFuZ2VzIGZvciBzYXZpbmdcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlIC0gb3B0aW9uYWxseSBwYXNzIGluIG5ldyBzdGF0ZSAodG8gb3ZlcnJpZGUgc3RhdGUpXG4gICAqL1xuICBmdW5jdGlvbiBnZXRDaGFuZ2VzKG5ld1N0YXRlID0ge30pIHtcbiAgICBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIHN0YXJ0ZWQgJHtjdXJyZW50SW5kZXh9IC0gcGFzc2VkIHN0YXRlYCwgbmV3U3RhdGUpXG4gICAgY29uc3QgX25ld1N0YXRlID0ge1xuICAgICAgc3RhdGUsXG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG5ld0FsaWdubWVudHMsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdmVyc2VUZXh0Q2hhbmdlZCxcbiAgICB9ID0gX25ld1N0YXRlXG4gICAgbGV0IHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c1xuXG4gICAgaWYgKG5ld0FsaWdubWVudHMpIHsgLy8gaWYgdW5zYXZlZCBhbGlnbm1lbnQgY2hhbmdlcywgYXBwbHkgdGhlbVxuICAgICAgY29uc29sZS5sb2coYGdldENoYW5nZXMgLSBhcHBseWluZyB1bnNhdmVkIGFsaWdubWVudHN9YClcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdXBkYXRlVmVyc2VXaXRoTmV3QWxpZ25tZW50cygpXG4gICAgfVxuXG4gICAgaWYgKHZlcnNlVGV4dENoYW5nZWQgJiYgbmV3VmVyc2VUZXh0KSB7XG4gICAgICBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIGFwcGx5aW5nIG5ldyB0ZXh0OmAsIG5ld1ZlcnNlVGV4dClcbiAgICAgIGNvbnN0IGN1cnJlbnRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c18gfHwgaW5pdGlhbFZlcnNlT2JqZWN0c1xuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0c18gJiYgY29uc29sZS5sb2coYGdldENoYW5nZXMgLSBhcHBseWluZyB1cGRhdGVkIGFsaWdubWVudHNgKVxuICAgICAgY29uc3QgeyB0YXJnZXRWZXJzZU9iamVjdHMgfSA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoY3VycmVudFZlcnNlT2JqZWN0c18sIG5ld1ZlcnNlVGV4dClcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdGFyZ2V0VmVyc2VPYmplY3RzXG4gICAgfSBlbHNlIHsgLy8gb25seSBhbGlnbm1lbnQgY2hhbmdlcyB0byB1cGxvYWRcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfICYmIGNvbnNvbGUubG9nKGBnZXRDaGFuZ2VzIC0gYXBwbHlpbmcgdXBkYXRlZCBhbGlnbm1lbnRzYCwgeyBuZXdWZXJzZVRleHQsIHVwZGF0ZWRWZXJzZU9iamVjdHNfIH0pXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNfIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0c18pIHtcbiAgICAgIGNvbnN0IHJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmPy5bY3VycmVudEluZGV4XVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV3VmVyc2VUZXh0LFxuICAgICAgICByZWYsXG4gICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHM6IHVwZGF0ZWRWZXJzZU9iamVjdHNfLFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7fVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBhbGlnbm1lbnQgYnV0dG9uIC0gd2lsbCBzaG93IGlmIG5vdCBhbHJlYWR5IHNob3duXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVBbGlnbm1lbnRDbGljaygpIHtcbiAgICBpZiAoZW5hYmxlQWxpZ25tZW50KSB7XG4gICAgICBsZXQgX2FsaWduZXJEYXRhID0gbnVsbFxuICAgICAgYXdhaXQgc3RhcnRFZGl0QnJhbmNoKClcblxuICAgICAgaWYgKCFhbGlnbmVyRGF0YSkgeyAvLyBpZiB3b3JkIGFsaWduZXIgbm90IHNob3duXG4gICAgICAgIGNvbnNvbGUubG9nKGBoYW5kbGVBbGlnbm1lbnRDbGljayAtIHRvZ2dsZSBPTiBhbGlnbm1lbnRgKVxuICAgICAgICBjb25zdCB0YXJnZXRWZXJzZVVTRk0gPSBnZXRDdXJyZW50VmVyc2VVc2ZtKHVwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgbGV0IG9yaWdpbmFsVmVyc2VVc2ZtID0gbnVsbFxuXG4gICAgICAgIGlmIChvcmlnaW5hbFZlcnNlT2JqZWN0cykge1xuICAgICAgICAgIG9yaWdpbmFsVmVyc2VVc2ZtID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHRhcmdldFdvcmRzOiB3b3JkQmFuayxcbiAgICAgICAgICB2ZXJzZUFsaWdubWVudHM6IGFsaWdubWVudHMsXG4gICAgICAgIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnBhcnNlVXNmbVRvV29yZEFsaWduZXJEYXRhKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZVVzZm0pXG4gICAgICAgIF9hbGlnbmVyRGF0YSA9IHsgd29yZEJhbmssIGFsaWdubWVudHMgfVxuICAgICAgfSBlbHNlIHsgLy8gd29yZCBhbGlnbmVyIGN1cnJlbnRseSBzaG93blxuICAgICAgICBjb25zb2xlLmxvZyhgaGFuZGxlQWxpZ25tZW50Q2xpY2sgLSBhbGlnbm1lbnQgYWxyZWFkeSBzaG93bmApXG4gICAgICAgIF9hbGlnbmVyRGF0YSA9IGFsaWduZXJEYXRhXG4gICAgICB9XG4gICAgICBzZXRTdGF0ZSh7IGFsaWduZXJEYXRhOiBfYWxpZ25lckRhdGEgfSlcbiAgICAgIGNvbnNvbGUubG9nKF9hbGlnbmVyRGF0YSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHVwZGF0ZWQgdmVyc2Ugb2JqZWN0cyBhZnRlciBhbGlnbm1lbnRzIGNoYW5nZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IF9uZXdBbGlnbm1lbnRzIC0gcmVzdWx0cyBvZiBhbGlnbmVyXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzKF9uZXdBbGlnbm1lbnRzID0gbmV3QWxpZ25tZW50cykge1xuICAgIGNvbnN0IGN1cnJlbnRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0cyB8fCBpbml0aWFsVmVyc2VPYmplY3RzXG4gICAgY29uc3QgdGFyZ2V0VmVyc2VUZXh0ID0gbmV3VmVyc2VUZXh0IHx8IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShjdXJyZW50VmVyc2VPYmplY3RzXylcbiAgICBjb25zdCB2ZXJzZVVzZm0gPSBBbGlnbm1lbnRIZWxwZXJzLmFkZEFsaWdubWVudHNUb1ZlcnNlVVNGTShfbmV3QWxpZ25tZW50cy50YXJnZXRXb3JkcywgX25ld0FsaWdubWVudHMudmVyc2VBbGlnbm1lbnRzLCB0YXJnZXRWZXJzZVRleHQpXG4gICAgY29uc3QgYWxpZ25lZFZlcnNlT2JqZWN0cyA9IHVzZm1IZWxwZXJzLnVzZm1WZXJzZVRvSnNvbih2ZXJzZVVzZm0pXG4gICAgcmV0dXJuIGFsaWduZWRWZXJzZU9iamVjdHNcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayBmb3Igd2hlbiB1c2VyIGNsaWNrZWQgb24gYnV0dG9uIHRvIHNhdmUgY3VycmVudCBhbGlnbm1lbnRzIGluIHdvcmQgYWxpZ25lci4gIEdlbmVyYXRlcyBuZXcgdmVyc2UgY29udGVudCBhbmQgc2F2ZXMgaW4gc3RhdGUuIENsb3NlcyBhbGlnbmVyIGRpc3BsYXlcbiAgICogQHBhcmFtIHtvYmplY3R9IF9uZXdBbGlnbm1lbnRzIC0gcmVzdWx0cyBvZiBhbGlnbmVyXG4gICAqL1xuICBmdW5jdGlvbiBzYXZlQWxpZ25tZW50KF9uZXdBbGlnbm1lbnRzID0gbmV3QWxpZ25tZW50cykge1xuICAgIGNvbnNvbGUubG9nKGBzYXZlQWxpZ25tZW50KCkgLSBuZXdBbGlnbm1lbnRzYCwgX25ld0FsaWdubWVudHMpXG5cbiAgICBpZiAoX25ld0FsaWdubWVudHMpIHtcbiAgICAgIGNvbnN0IGFsaWduZWRWZXJzZU9iamVjdHMgPSB1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzKF9uZXdBbGlnbm1lbnRzKVxuICAgICAgY29uc29sZS5sb2coYHNhdmVBbGlnbm1lbnQoKSAtIGFsaWduZWRWZXJzZU9iamVjdHNgLCBhbGlnbmVkVmVyc2VPYmplY3RzKVxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgbmV3QWxpZ25tZW50czogbnVsbCxcbiAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogYWxpZ25lZFZlcnNlT2JqZWN0cyxcbiAgICAgIH1cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgICAgY2FsbFNldFNhdmVkU3RhdGUodHJ1ZSwgbmV3U3RhdGUgKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTdGF0ZSh7XG4gICAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBidXR0b24gdG8gY2FuY2VsIHdvcmsgaW4gd29yZCBhbGlnbmVyLiAgQ2FsY3VsYXRlcyBhbmQgZGlzcGxheXMgY3VycmVudCBhbGlnbm1lbnQgdmFsaWQgc3RhdGUuIENsb3NlcyBhbGlnbmVyIGRpc3BsYXlcbiAgICovXG4gIGZ1bmN0aW9uIGNhbmNlbEFsaWdubWVudCgpIHtcbiAgICBjb25zb2xlLmxvZyhgY2FuY2VsQWxpZ25tZW50KClgKVxuICAgIGNvbnN0IHRhcmdldFZlcnNlVVNGTSA9IGdldEN1cnJlbnRWZXJzZVVzZm0odXBkYXRlZFZlcnNlT2JqZWN0cywgaW5pdGlhbFZlcnNlT2JqZWN0cywgdmVyc2VUZXh0Q2hhbmdlZCwgbmV3VmVyc2VUZXh0KVxuICAgIGNvbnN0IGFsaWduZWQgPSBpc1VzZm1BbGlnbmVkKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZT8udmVyc2VPYmplY3RzKVxuICAgIHNldFN0YXRlKHsgYWxpZ25lckRhdGE6IG51bGwsIGFsaWduZWQgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayBmb3IgYnV0dG9uIHRvIHNldCBlZGl0aW5nIHN0YXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZWRpdGluZ18gLSBpZiB0cnVlLCBlZGl0b3IgaXMgc2hvd24sIG90aGVyd2lzZSBlZGl0b3IgaXMgaGlkZGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfbmV3VmVyc2VUZXh0IC0gb3B0aW9uYWwgdmVyc2UgdGV4dFxuICAgKi9cbiAgYXN5bmMgZnVuY3Rpb24gc2V0RWRpdGluZyhlZGl0aW5nXywgX25ld1ZlcnNlVGV4dCA9IG5ld1ZlcnNlVGV4dCkge1xuICAgIGlmIChlbmFibGVFZGl0KSB7XG4gICAgICBpZiAoZWRpdGluZ18gJiYgIWVkaXRpbmcpIHtcbiAgICAgICAgYXdhaXQgc3RhcnRFZGl0QnJhbmNoKClcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRpbmdfICE9PSBlZGl0aW5nKSB7XG4gICAgICAgIF9uZXdWZXJzZVRleHQgPSBfbmV3VmVyc2VUZXh0IHx8IGluaXRpYWxWZXJzZVRleHRcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IGVkaXRpbmc6IGVkaXRpbmdfLCBuZXdWZXJzZVRleHQ6IF9uZXdWZXJzZVRleHQgfVxuICAgICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcbiAgICAgICAgY2FsbFNldFNhdmVkU3RhdGUoKF9uZXdWZXJzZVRleHQgIT09IGluaXRpYWxWZXJzZVRleHQpLCBuZXdTdGF0ZSApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZyb20gdGhlIGVkaXQgb25DaGFuZ2UgZXZlbnQgdG8gdXBkYXRlIGVkaXQgc3RhdGUgdmFyaWFibGVzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hhbmdlZCAtIHRydWUgaWYgdGhlIG5ld1ZlcnNlVGV4dCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgaW5pdGlhbFZlcnNlVGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmVyc2VUZXh0IC0gY3VycmVudCBjaGFuZ2VkIHZlcnNlIHRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IF9pbml0aWFsVmVyc2VUZXh0IC0gaW5pdGlhbCB2ZXJzZSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBzZXRWZXJzZUNoYW5nZWQoY2hhbmdlZCwgbmV3VmVyc2VUZXh0LCBfaW5pdGlhbFZlcnNlVGV4dCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VUZXh0IH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGluaXRpYWxWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICBjb25zdCBhbGlnbmVkID0gaXNVc2ZtQWxpZ25lZCh0YXJnZXRWZXJzZVRleHQsIG9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2U/LnZlcnNlT2JqZWN0cylcbiAgICBjb25zdCBfY2hhbmdlZCA9IG5ld1ZlcnNlVGV4dCAhPT0gaW5pdGlhbFZlcnNlVGV4dFxuXG4gICAgc2V0U3RhdGUoe1xuICAgICAgdmVyc2VUZXh0Q2hhbmdlZDogX2NoYW5nZWQsXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICBhbGlnbmVkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzID0gUmVhY3QudXNlTWVtbyggKCkgPT4geyAvLyBpZiB2ZXJzZSBoYXMgYmVlbiBlZGl0ZWQgb3IgYWxpZ25tZW50IGNoYW5nZWQsIHRoZW4gZ2VuZXJhdGUgbmV3IHZlcnNlT2JqZWN0cyB0byBkaXNwbGF5IGluIFNjcmlwdHVyZVBhbmVcbiAgICBpZiAoaW5pdGlhbFZlcnNlT2JqZWN0cykge1xuICAgICAgY29uc3QgdGFyZ2V0VmVyc2VVU0ZNID0gZ2V0Q3VycmVudFZlcnNlVXNmbSh1cGRhdGVkVmVyc2VPYmplY3RzLCBpbml0aWFsVmVyc2VPYmplY3RzLCB2ZXJzZVRleHRDaGFuZ2VkLCBuZXdWZXJzZVRleHQpXG4gICAgICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzXyA9IHVzZm1IZWxwZXJzLnVzZm1WZXJzZVRvSnNvbih0YXJnZXRWZXJzZVVTRk0pXG4gICAgICByZXR1cm4gY3VycmVudFZlcnNlT2JqZWN0c19cbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxWZXJzZU9iamVjdHNcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQsIG5ld1ZlcnNlVGV4dF0pXG5cbiAgY29uc3QgdW5zYXZlZENoYW5nZXM6Ym9vbGVhbiA9IFJlYWN0LnVzZU1lbW8oICgpID0+IHsgLy8gaWYgdmVyc2UgaGFzIGJlZW4gZWRpdGVkIG9yIGFsaWdubWVudCBjaGFuZ2VkLCB0aGVuIGluZGljYXRlIHdlIGhhdmUgdW5zYXZlZCBjaGFuZ2VzXG4gICAgY29uc3QgY2hhbmdlZCA9IHZlcnNlVGV4dENoYW5nZWQgfHwgKHVwZGF0ZWRWZXJzZU9iamVjdHMgJiYgIWlzRXF1YWwoaW5pdGlhbFZlcnNlT2JqZWN0cywgdXBkYXRlZFZlcnNlT2JqZWN0cykpXG4gICAgcmV0dXJuIGNoYW5nZWRcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWRdKVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayB0byBzY3JpcHR1cmUgY2FyZCB0byB1cGRhdGVkIHdpdGggbGF0ZXN0IHN0YXRlIGZvciBzYXZpbmdcbiAgICogQHBhcmFtIHtib29sZWFufSB1bnNhdmVkQ2hhbmdlc19cbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlXG4gICAqL1xuICBmdW5jdGlvbiBjYWxsU2V0U2F2ZWRTdGF0ZSh1bnNhdmVkQ2hhbmdlc18sIG5ld1N0YXRlID0geyB9ICkge1xuICAgIGNvbnN0IF9uZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGBjYWxsU2V0U2F2ZWRTdGF0ZSAtIG5ldyBzdGF0ZWAsIF9uZXdTdGF0ZSlcbiAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKGN1cnJlbnRJbmRleCwgIXVuc2F2ZWRDaGFuZ2VzXywgeyBnZXRDaGFuZ2VzLCBjbGVhckNoYW5nZXMsIHN0YXRlOiBfbmV3U3RhdGUgfSlcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHNldCBzYXZlZCBjaGFuZ2VzIHdoZW5ldmVyIHVzZXIgZWRpdHMgdmVyc2UgdGV4dCBvciBhbGlnbm1lbnRzIG9yIGlmIGFsaWdubWVudHMgYXJlIG9wZW5cbiAgICBjb25zdCB1bnNhdmVkQ2hhbmdlc18gPSB1bnNhdmVkQ2hhbmdlcyB8fCBhbGlnbmVyRGF0YVxuICAgIGNhbGxTZXRTYXZlZFN0YXRlKHVuc2F2ZWRDaGFuZ2VzXylcbiAgfSwgW3Vuc2F2ZWRDaGFuZ2VzLCBhbGlnbmVyRGF0YV0pXG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIGFsaWdubWVudHMgYXJlIGJlaW5nIGNoYW5nZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlc3VsdHNcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBhbGlnbm1lbnQgaXMgY29tcGxldGVcbiAgICovXG4gIGZ1bmN0aW9uIG9uQWxpZ25tZW50c0NoYW5nZShyZXN1bHRzKSB7XG4gICAgY29uc29sZS5sb2coYG9uQWxpZ25tZW50c0NoYW5nZSgpIC0gYWxpZ25tZW50IGNoYW5nZWQsIHJlc3VsdHNgLCByZXN1bHRzKSAvLyBtZXJnZSBhbGlnbm1lbnRzIGludG8gdGFyZ2V0IHZlcnNlIGFuZCBjb252ZXJ0IHRvIFVTRk1cbiAgICBjb25zdCB7IHRhcmdldFdvcmRzLCB2ZXJzZUFsaWdubWVudHMgfSA9IHJlc3VsdHNcbiAgICBjb25zdCBhbGlnbm1lbnRDb21wbGV0ZSA9IEFsaWdubWVudEhlbHBlcnMuYXJlQWxnbm1lbnRzQ29tcGxldGUodGFyZ2V0V29yZHMsIHZlcnNlQWxpZ25tZW50cylcbiAgICBjb25zb2xlLmxvZyhgQWxpZ25tZW50cyBhcmUgJHthbGlnbm1lbnRDb21wbGV0ZSA/ICdDT01QTEVURSEnIDogJ2luY29tcGxldGUnfWApXG4gICAgc2V0U3RhdGUoeyBuZXdBbGlnbm1lbnRzOiByZXN1bHRzLCBhbGlnbmVkOiBhbGlnbm1lbnRDb21wbGV0ZSB9KVxuICAgIHJldHVybiBhbGlnbm1lbnRDb21wbGV0ZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3Rpb25zOiB7XG4gICAgICBjYW5jZWxBbGlnbm1lbnQsXG4gICAgICBnZXRDaGFuZ2VzLFxuICAgICAgaGFuZGxlQWxpZ25tZW50Q2xpY2ssXG4gICAgICBvbkFsaWdubWVudHNDaGFuZ2UsXG4gICAgICBzYXZlQWxpZ25tZW50LFxuICAgICAgc2V0RWRpdGluZyxcbiAgICAgIHNldFZlcnNlQ2hhbmdlZCxcbiAgICB9LFxuICAgIHN0YXRlOiB7XG4gICAgICBhbGlnbmVkLFxuICAgICAgYWxpZ25lckRhdGEsXG4gICAgICBjdXJyZW50VmVyc2VPYmplY3RzLFxuICAgICAgZWRpdGluZyxcbiAgICAgIGluaXRpYWxWZXJzZVRleHQsXG4gICAgICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICAgICAgbmV3VmVyc2VUZXh0LFxuICAgICAgc291cmNlTGFuZ3VhZ2UsXG4gICAgICB0YXJnZXRMYW5ndWFnZSxcbiAgICAgIHVuc2F2ZWRDaGFuZ2VzLFxuICAgICAgdmVyc2VUZXh0Q2hhbmdlZCxcbiAgICAgIHJlZmVyZW5jZSxcbiAgICAgIHRpdGxlLFxuICAgICAgb3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZSxcbiAgICB9LFxuICB9XG59XG4iXX0=
|
|
561
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0LnRzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIkFsaWdubWVudEhlbHBlcnMiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwidXNmbUhlbHBlcnMiLCJpc0VxdWFsIiwiU2NyaXB0dXJlQ29uZmlnIiwiU2NyaXB0dXJlUmVmZXJlbmNlIiwiU2VydmVyQ29uZmlnIiwiZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyIsIk9SSUdJTkFMX1NPVVJDRSIsImdldFZlcnNlc0ZvclJlZiIsImlzVXNmbUFsaWduZWQiLCJ0YXJnZXRWZXJzZVVTRk0iLCJvcmlnaW5hbFZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImV4dHJhY3RBbGlnbm1lbnRzRnJvbVRhcmdldFZlcnNlIiwiYWxpZ25tZW50cyIsIndvcmRCYW5rIiwiYXJlQWxnbm1lbnRzQ29tcGxldGUiLCJnZXRDdXJyZW50VmVyc2VVc2ZtIiwidXBkYXRlZFZlcnNlT2JqZWN0cyIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJ2ZXJzZVRleHRDaGFuZ2VkIiwibmV3VmVyc2VUZXh0IiwiY3VycmVudFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlVGV4dCIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJ1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0IiwiY3VycmVudEluZGV4IiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsImh0dHBDb25maWciLCJpbml0aWFsVmVyc2VUZXh0IiwiaXNOZXdUZXN0YW1lbnQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzIiwib3JpZ2luYWxSZXBvVXJsIiwicmVmZXJlbmNlIiwic2NyaXB0dXJlQ29uZmlnIiwic2NyaXB0dXJlU2V0dGluZ3MiLCJzZXRTYXZlZENoYW5nZXMiLCJzb3VyY2VMYW5ndWFnZSIsInN0YXJ0RWRpdEJyYW5jaCIsInRhcmdldExhbmd1YWdlIiwidGl0bGUiLCJ3b3JraW5nUmVzb3VyY2VCcmFuY2giLCJ1c2VTdGF0ZSIsImFsaWduZWQiLCJhbGlnbmVyRGF0YSIsImVkaXRpbmciLCJuZXdBbGlnbm1lbnRzIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJjaGFwdGVyIiwidmVyc2UiLCJwcm9qZWN0SWQiLCJiYXNpY1JlZmVyZW5jZSIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJjbGVhckNoYW5nZXMiLCJjbGVhclN0YXRlIiwib3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5nc18iLCJyZXNvdXJjZUlkIiwiYm9va0lkIiwib3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5ncyIsInJlc291cmNlTGluayIsInVzZU1lbW8iLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZXMiLCJsYW5ndWFnZUlkIiwidmVyc2VSZWZlcmVuY2UiLCJvcmlnVmVyc2VPYmplY3RzIiwidmVyc2VEYXRhIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJwdXNoIiwiYXBwbHkiLCJ1c2VFZmZlY3QiLCJub3RFbXB0eSIsImFsaWduZWRfIiwicmVzdWx0cyIsImdldENoYW5nZXMiLCJjb25zb2xlIiwibG9nIiwiX25ld1N0YXRlIiwidXBkYXRlZFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzIiwidGFyZ2V0VmVyc2VPYmplY3RzIiwicmVmIiwidmVyc2VzRm9yUmVmIiwiaGFuZGxlQWxpZ25tZW50Q2xpY2siLCJfYWxpZ25lckRhdGEiLCJvcmlnaW5hbFZlcnNlVXNmbSIsInBhcnNlVXNmbVRvV29yZEFsaWduZXJEYXRhIiwidGFyZ2V0V29yZHMiLCJ2ZXJzZUFsaWdubWVudHMiLCJfbmV3QWxpZ25tZW50cyIsInZlcnNlVXNmbSIsImFkZEFsaWdubWVudHNUb1ZlcnNlVVNGTSIsImFsaWduZWRWZXJzZU9iamVjdHMiLCJ1c2ZtVmVyc2VUb0pzb24iLCJzYXZlQWxpZ25tZW50IiwiY2FsbFNldFNhdmVkU3RhdGUiLCJjYW5jZWxBbGlnbm1lbnQiLCJzZXRFZGl0aW5nIiwiZWRpdGluZ18iLCJfbmV3VmVyc2VUZXh0Iiwic2V0VmVyc2VDaGFuZ2VkIiwiY2hhbmdlZCIsIl9pbml0aWFsVmVyc2VUZXh0IiwiX2NoYW5nZWQiLCJjdXJyZW50VmVyc2VPYmplY3RzIiwidW5zYXZlZENoYW5nZXMiLCJ1bnNhdmVkQ2hhbmdlc18iLCJvbkFsaWdubWVudHNDaGFuZ2UiLCJhbGlnbm1lbnRDb21wbGV0ZSIsImFjdGlvbnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0EsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsU0FDRUMsZ0JBREYsRUFFRUMseUJBRkYsRUFHRUMsV0FIRixRQUlPLGtCQUpQO0FBS0EsT0FBTyxLQUFLQyxPQUFaLE1BQXlCLFlBQXpCO0FBQ0EsU0FDRUMsZUFERixFQUVFQyxrQkFGRixFQUdFQyxZQUhGLFFBSU8sVUFKUDtBQUtBLFNBQVNDLDRCQUFULFFBQTZDLDRCQUE3QztBQUNBLFNBQVNDLGVBQVQsUUFBZ0MsVUFBaEM7QUFDQSxTQUFTQyxlQUFULFFBQWdDLGdCQUFoQzs7QUFxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLGFBQVQsQ0FBdUJDLGVBQXZCLEVBQXdDQyxvQkFBeEMsRUFBOEQ7QUFBQTs7QUFDNURBLEVBQUFBLG9CQUFvQixHQUFHLHlCQUFBQSxvQkFBb0IsVUFBcEIsOERBQXNCQyxNQUF0QixHQUErQkQsb0JBQS9CLEdBQXNELElBQTdFLENBRDRELENBQ3NCOztBQUR0Qiw4QkFFM0JaLGdCQUFnQixDQUFDYyxnQ0FBakIsQ0FBa0RILGVBQWxELEVBQW1FQyxvQkFBbkUsQ0FGMkI7QUFBQSxNQUVwREcsVUFGb0QseUJBRXBEQSxVQUZvRDtBQUFBLE1BRXhDQyxRQUZ3Qyx5QkFFeENBLFFBRndDOztBQUc1RCxTQUFPaEIsZ0JBQWdCLENBQUNpQixvQkFBakIsQ0FBc0NELFFB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QUFBLEtBQUssRUFBRTtBQUNMSixNQUFBQSxPQUFPLEVBQVBBLE9BREs7QUFFTEMsTUFBQUEsV0FBVyxFQUFYQSxXQUZLO0FBR0xnRSxNQUFBQSxtQkFBbUIsRUFBbkJBLG1CQUhLO0FBSUwvRCxNQUFBQSxPQUFPLEVBQVBBLE9BSks7QUFLTGpCLE1BQUFBLGdCQUFnQixFQUFoQkEsZ0JBTEs7QUFNTFosTUFBQUEsbUJBQW1CLEVBQW5CQSxtQkFOSztBQU9MRSxNQUFBQSxZQUFZLEVBQVpBLFlBUEs7QUFRTGUsTUFBQUEsU0FBUyxFQUFFbUIsY0FSTjtBQVNMZixNQUFBQSxjQUFjLEVBQWRBLGNBVEs7QUFVTEUsTUFBQUEsY0FBYyxFQUFkQSxjQVZLO0FBV0xDLE1BQUFBLEtBQUssRUFBTEEsS0FYSztBQVlMcUUsTUFBQUEsY0FBYyxFQUFkQSxjQVpLO0FBYUw1RixNQUFBQSxnQkFBZ0IsRUFBaEJBO0FBYks7QUFYRixHQUFQO0FBMkJEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBBbGlnbm1lbnRIZWxwZXJzLFxuICBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLFxuICB1c2ZtSGVscGVycyxcbn0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7XG4gIFNjcmlwdHVyZUNvbmZpZyxcbiAgU2NyaXB0dXJlUmVmZXJlbmNlLFxuICBTZXJ2ZXJDb25maWcsXG59IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyB9IGZyb20gJy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHsgT1JJR0lOQUxfU09VUkNFIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgeyBnZXRWZXJzZXNGb3JSZWYgfSBmcm9tICcuL3VzZVNjcmlwdHVyZSdcblxuaW50ZXJmYWNlIFN0YXJ0RWRpdCB7XG4gICgpOiBQcm9taXNlPHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0dXJlQUxpZ25tZW50RWRpdFByb3BzIHtcbiAgLy8gaW5kZXggdG8gdXNlIGZvciBib29rIChlLmcuIGAwMWAgZm9yIGBHRU5gKVxuICBib29rSW5kZXg6IHN0cmluZyxcbiAgLy8gY3VycmVudCB2ZXJzZSBzZWxlY3RlZCBmcm9tIGluaXRpYWxWZXJzZU9iamVjdHNbXVxuICBjdXJyZW50SW5kZXg6IG51bWJlcixcbiAgLy8gcmVmZXJlbmNlIGZvciB2ZXJzZSBzZWxlY3RlZCBmb3IgYWxpZ25tZW50XG4gIGN1cnJlbnRWZXJzZVJlZjogU2NyaXB0dXJlUmVmZXJlbmNlLFxuICAvLyBpZiB0cnVlIHRoZW4gZWRpdGluZyBpcyBhbGxvd2VkXG4gIGVuYWJsZUVkaXQ6IGJvb2xlYW4sXG4gIC8vIGlmIHRydWUgdGhlbiBhbGlnbm1lbnQgaXMgYWxsb3dlZFxuICBlbmFibGVBbGlnbm1lbnQ6IGJvb2xlYW4sXG4gIC8vIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGZvciBodHRwIGNvbW11bmljYXRpb25cbiAgaHR0cENvbmZpZzogU2VydmVyQ29uZmlnLFxuICAvLyBhcnJheSBvZiBlYWNoIHZlcnNlIGZvciBpbiByZWZlcmVuY2UgcmFuZ2VcbiAgaW5pdGlhbFZlcnNlT2JqZWN0czogW10sXG4gIC8vIGluaXRpYWwgdGV4dCBmb3IgdmVyc2VcbiAgaW5pdGlhbFZlcnNlVGV4dDogc3RyaW5nLFxuICAvLyBmbGFnIHRoYXQgd2UgYXJlIHdvcmtpbmcgb24gTlQgYm9va1xuICBpc05ld1Rlc3RhbWVudDogYm9vbGVhbixcbiAgLy8gdXNlciBuYW1lIG9mIGxvZ2dlZCBpbiB1c2VyXG4gIGxvZ2dlZEluVXNlcjogc3RyaW5nLFxuICAvLyBvd25lciB0byB1c2Ugd2hlbiBmZXRjaGluZyBvcmlnaW5hbCBsYW5ndWFnZSByZXNvdXJjZXNcbiAgb3JpZ2luYWxMYW5ndWFnZU93bmVyOiBzdHJpbmcsXG4gIC8vIHVybCBmb3IgdGhlIG9yaWdpbmFsIGxhbmd1YWdlIHJlcG9cbiAgb3JpZ2luYWxSZXBvVXJsOiBzdHJpbmcsXG4gIC8vIG9yaWdpbmFsIHNjcmlwdHVyZSBib29rT2JqZWN0cyBmb3IgY3VycmVudCBib29rXG4gIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHM6IG9iamVjdCxcbiAgLyoqIGN1cnJlbnQgcmVmZXJlbmNlICoqL1xuICByZWZlcmVuY2U6IFNjcmlwdHVyZVJlZmVyZW5jZTtcbiAgLy8gZGV0YWlscyBhYm91dCB0aGUgY3VycmVudCBzY3JpcHR1cmUgbG9hZGVkXG4gIHNjcmlwdHVyZUNvbmZpZzogU2NyaXB0dXJlQ29uZmlnLFxuICAvLyBzZXR0aW5ncyB0byBiZSB1c2VkIGZvciBzY3JpcHR1cmVcbiAgc2NyaXB0dXJlU2V0dGluZ3M6IHsgfSxcbiAgLy8gY2FsbGJhY2sgdG8gc2F2ZSBjdXJyZW50IHZlcnNlIGVkaXQgYW5kIGFsaWdubWVudCBjaGFuZ2VzXG4gIHNldFNhdmVkQ2hhbmdlczogRnVuY3Rpb24sXG4gIC8vIHNvdXJjZSBsYW5ndWFnZVxuICBzb3VyY2VMYW5ndWFnZTogc3RyaW5nLFxuICAvLyBjYWxsYmFjayB0byBjcmVhdGUgYSB1c2VyIGJyYW5jaCBmb3Igc2F2aW5nIGVkaXQgZGF0YVxuICBzdGFydEVkaXRCcmFuY2g6IFN0YXJ0RWRpdCxcbiAgLy8gY3VycmVudCB0YXJnZXQgbGFuZ3VhZ2VcbiAgdGFyZ2V0TGFuZ3VhZ2U6IG9iamVjdCxcbiAgLy8gdGl0bGUgdG8gc2hvdyBpbiBhbGlnbm1lbnRcbiAgdGl0bGU6IHN0cmluZyxcbiAgIC8vIGJyYW5jaCBuYW1lIGN1cnJlbnRseSBiZWluZyB1c2VkIChlLmcuIGBtYXN0ZXJgIG9yIHVzZXIgYnJhbmNoKVxuICB3b3JraW5nUmVzb3VyY2VCcmFuY2g6IHN0cmluZyxcbn1cblxuLyoqXG4gKiBkZXRlcm1pbmVzIGlmIGFsaWdubWVudCBpcyBjb21wbGV0ZSBiYXNlZCBvbiB0YXJnZXQgVVNGTSBhbmQgb3JpZ2luYWwgbGFuZ3VhZ2UgdmVyc2Ugb2JqZWN0c1xuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldFZlcnNlVVNGTVxuICogQHBhcmFtIHtvYmplY3RbXX0gb3JpZ2luYWxWZXJzZU9iamVjdHNcbiAqL1xuZnVuY3Rpb24gaXNVc2ZtQWxpZ25lZCh0YXJnZXRWZXJzZVVTRk0sIG9yaWdpbmFsVmVyc2VPYmplY3RzKSB7XG4gIG9yaWdpbmFsVmVyc2VPYmplY3RzID0gb3JpZ2luYWxWZXJzZU9iamVjdHM/Lmxlbmd0aCA/IG9yaWdpbmFsVmVyc2VPYmplY3RzIDogbnVsbCAvLyBtYWtlIHN1cmUgbm90IHBhc3NpbmcgZW1wdHkgQXJyYXlcbiAgY29uc3QgeyBhbGlnbm1lbnRzLCB3b3JkQmFuayB9ID0gQWxpZ25tZW50SGVscGVycy5leHRyYWN0QWxpZ25tZW50c0Zyb21UYXJnZXRWZXJzZSh0YXJnZXRWZXJzZVVTRk0sIG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICByZXR1cm4gQWxpZ25tZW50SGVscGVycy5hcmVBbGdubWVudHNDb21wbGV0ZSh3b3JkQmFuaywgYWxpZ25tZW50cylcbn1cblxuLyoqXG4gKiBnZXQgdGhlIHVwZGF0ZWQgVVNGTSBmb3IgdGFyZ2V0IHZlcnNlIGZyb20gdGhlIHVwZGF0ZWQgdmVyc2Ugb2JqZWN0cyBhbmQgbGF0ZXN0IHRleHRcbiAqIEBwYXJhbSB7b2JqZWN0W119IHVwZGF0ZWRWZXJzZU9iamVjdHNcbiAqIEBwYXJhbSB7b2JqZWN0W119IGluaXRpYWxWZXJzZU9iamVjdHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmVyc2VUZXh0Q2hhbmdlZFxuICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZlcnNlVGV4dFxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50VmVyc2VVc2ZtKHVwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQ6IGJvb2xlYW4sIG5ld1ZlcnNlVGV4dCkge1xuICBsZXQgdGFyZ2V0VmVyc2VVU0ZNID0gbnVsbFxuICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHMgfHwgaW5pdGlhbFZlcnNlT2JqZWN0c1xuXG4gIGlmICh2ZXJzZVRleHRDaGFuZ2VkICYmIG5ld1ZlcnNlVGV4dCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VUZXh0IH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGN1cnJlbnRWZXJzZU9iamVjdHNfLCBuZXdWZXJzZVRleHQpXG4gICAgdGFyZ2V0VmVyc2VVU0ZNID0gdGFyZ2V0VmVyc2VUZXh0XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0VmVyc2VVU0ZNID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKGN1cnJlbnRWZXJzZU9iamVjdHNfKVxuICB9XG4gIHJldHVybiB0YXJnZXRWZXJzZVVTRk1cbn1cblxuLy8gbWFuYWdlIHZlcnNlIGVkaXQgYW5kIGFsaWdubWVudCBzdGF0ZXNcbmV4cG9ydCBmdW5jdGlvbiB1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0KHtcbiAgY3VycmVudEluZGV4LFxuICBlbmFibGVFZGl0LFxuICBlbmFibGVBbGlnbm1lbnQsXG4gIGh0dHBDb25maWcsXG4gIGluaXRpYWxWZXJzZU9iamVjdHMsXG4gIGluaXRpYWxWZXJzZVRleHQsXG4gIGlzTmV3VGVzdGFtZW50LFxuICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMsXG4gIG9yaWdpbmFsUmVwb1VybCxcbiAgcmVmZXJlbmNlLFxuICBzY3JpcHR1cmVDb25maWcsXG4gIHNjcmlwdHVyZVNldHRpbmdzLFxuICBzZXRTYXZlZENoYW5nZXMsXG4gIHNvdXJjZUxhbmd1YWdlLFxuICBzdGFydEVkaXRCcmFuY2gsXG4gIHRhcmdldExhbmd1YWdlLFxuICB0aXRsZSxcbiAgd29ya2luZ1Jlc291cmNlQnJhbmNoLFxufSA6IFNjcmlwdHVyZUFMaWdubWVudEVkaXRQcm9wcykge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgYWxpZ25lZDogZmFsc2UsXG4gICAgYWxpZ25lckRhdGE6IG51bGwsXG4gICAgZWRpdGluZzogZmFsc2UsXG4gICAgbmV3QWxpZ25tZW50czogbnVsbCxcbiAgICBuZXdWZXJzZVRleHQ6IG51bGwsXG4gICAgdXBkYXRlZFZlcnNlT2JqZWN0czogbnVsbCxcbiAgICB2ZXJzZVRleHRDaGFuZ2VkOiBmYWxzZSxcbiAgfSlcblxuICBjb25zdCB7XG4gICAgYWxpZ25lZCxcbiAgICBhbGlnbmVyRGF0YSxcbiAgICBlZGl0aW5nLFxuICAgIG5ld0FsaWdubWVudHMsXG4gICAgbmV3VmVyc2VUZXh0LFxuICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgdmVyc2VUZXh0Q2hhbmdlZCxcbiAgfSA9IHN0YXRlXG4gIGNvbnN0IGNoYXB0ZXIgPSByZWZlcmVuY2U/LmNoYXB0ZXJcbiAgY29uc3QgdmVyc2UgPSByZWZlcmVuY2U/LnZlcnNlXG4gIGNvbnN0IHByb2plY3RJZCA9IHJlZmVyZW5jZT8ucHJvamVjdElkXG4gIGNvbnN0IGJhc2ljUmVmZXJlbmNlID0geyAvLyBvbmx5IGhhcyB0aGUgdGhyZWUgYmFzaWMgZmllbGRzXG4gICAgY2hhcHRlcixcbiAgICB2ZXJzZSxcbiAgICBwcm9qZWN0SWQsXG4gIH1cblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQ2hhbmdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhgY2xlYXJDaGFuZ2VzKCkgLSAke0pTT04uc3RyaW5naWZ5KGJhc2ljUmVmZXJlbmNlKX1gKVxuICAgIGNvbnN0IGNsZWFyU3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICBuZXdBbGlnbm1lbnRzOiBudWxsLFxuICAgICAgbmV3VmVyc2VUZXh0OiBudWxsLFxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogbnVsbCxcbiAgICAgIHZlcnNlVGV4dENoYW5nZWQ6IGZhbHNlLFxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChzdGF0ZSwgY2xlYXJTdGF0ZSkpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBjbGVhckNoYW5nZXMoKSAtIHJlZmVyZW5jZSBjaGFuZ2VkLCByZXNldCBlZGl0L2FsaWdubWVudCBzdGF0ZSB2YXJpYWJsZXNgKVxuICAgICAgc2V0U3RhdGUoY2xlYXJTdGF0ZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzXyA9IHtcbiAgICAuLi5zY3JpcHR1cmVTZXR0aW5ncyxcbiAgICByZXNvdXJjZUlkOiBPUklHSU5BTF9TT1VSQ0UsXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGh0dHBDb25maWcgPSBodHRwQ29uZmlnIHx8IHt9XG4gIGNvbnN0IGJvb2tJZCA9IHByb2plY3RJZFxuICBjb25zdCBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzID0gZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyhcbiAgICBib29rSWQsIG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3NfLCBpc05ld1Rlc3RhbWVudCwgb3JpZ2luYWxSZXBvVXJsLFxuICApXG5cbiAgaWYgKCFlbmFibGVBbGlnbm1lbnQpIHsgLy8gaWYgbm90IGVuYWJsZWQsIHRoZW4gd2UgZG9uJ3QgZmV0Y2ggcmVzb3VyY2VcbiAgICBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzLnJlc291cmNlTGluayA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsVmVyc2VPYmplY3RzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7IC8vIGdldCB0aGUgb3JpZ2luYWwgbGFuZ3VhZ2UgdmVyc2VPYmplY3RzXG4gICAgY29uc3QgdmVyc2VPYmplY3RzID0gW11cblxuICAgIGlmIChvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCB2ZXJzZXMgPSBnZXRWZXJzZXNGb3JSZWYoYmFzaWNSZWZlcmVuY2UsIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMsIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHM/Lmxhbmd1YWdlSWQpXG5cbiAgICAgIGlmICh2ZXJzZXM/Lmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IHZlcnNlUmVmZXJlbmNlIG9mIHZlcnNlcykge1xuICAgICAgICAgIGNvbnN0IG9yaWdWZXJzZU9iamVjdHMgPSB2ZXJzZVJlZmVyZW5jZT8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHNcblxuICAgICAgICAgIGlmIChvcmlnVmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh2ZXJzZU9iamVjdHMsIG9yaWdWZXJzZU9iamVjdHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2ZXJzZU9iamVjdHNcbiAgfSwgW29yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMsIGNoYXB0ZXIsIHZlcnNlLCBwcm9qZWN0SWRdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBhbGlnbm1lbnQgc3RhdHVzIHdoZW4gYWxpZ25lciBpcyBoaWRkZW5cbiAgICBjb25zdCBub3RFbXB0eSA9ICEhaW5pdGlhbFZlcnNlT2JqZWN0c1xuICAgIGxldCBhbGlnbmVkXyA9IGZhbHNlXG5cbiAgICBpZiAoIWFsaWduZXJEYXRhKSB7IC8vIHNraXAgaWYgYWxpZ25lciBpcyBiZWluZyBzaG93blxuICAgICAgaWYgKG5vdEVtcHR5KSB7IC8vIHNraXAgaWYgZW1wdHlcbiAgICAgICAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcblxuICAgICAgICBpZiAoIWVuYWJsZUFsaWdubWVudCkge1xuICAgICAgICAgIGFsaWduZWRfID0gdHJ1ZVxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZlcnNlVGV4dCAmJiAobmV3VmVyc2VUZXh0ICE9PSBpbml0aWFsVmVyc2VUZXh0KSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGN1cnJlbnRWZXJzZU9iamVjdHNfLCBuZXdWZXJzZVRleHQpXG4gICAgICAgICAgYWxpZ25lZF8gPSBpc1VzZm1BbGlnbmVkKHJlc3VsdHM/LnRhcmdldFZlcnNlVGV4dCwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0VmVyc2VVU0ZNID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKGN1cnJlbnRWZXJzZU9iamVjdHNfKVxuICAgICAgICAgIGFsaWduZWRfID0gaXNVc2ZtQWxpZ25lZCh0YXJnZXRWZXJzZVVTRk0sIG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGlnbmVkICE9PSBhbGlnbmVkXykge1xuICAgICAgICBzZXRTdGF0ZSh7IGFsaWduZWQ6IGFsaWduZWRfIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbaW5pdGlhbFZlcnNlT2JqZWN0cywgYWxpZ25lckRhdGEsIG5ld1ZlcnNlVGV4dCwgaW5pdGlhbFZlcnNlVGV4dCwgZW5hYmxlQWxpZ25tZW50LCBvcmlnaW5hbFZlcnNlT2JqZWN0c10pXG5cbiAgLyoqXG4gICAqIGdldCBjaGFuZ2VzIGZvciBzYXZpbmdcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlIC0gb3B0aW9uYWxseSBwYXNzIGluIG5ldyBzdGF0ZSAodG8gb3ZlcnJpZGUgc3RhdGUpXG4gICAqL1xuICBmdW5jdGlvbiBnZXRDaGFuZ2VzKG5ld1N0YXRlID0ge30pIHtcbiAgICBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIHN0YXJ0ZWQgJHtjdXJyZW50SW5kZXh9IC0gcGFzc2VkIHN0YXRlYCwgbmV3U3RhdGUpXG4gICAgY29uc3QgX25ld1N0YXRlID0ge1xuICAgICAgc3RhdGUsXG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG5ld0FsaWdubWVudHMsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdmVyc2VUZXh0Q2hhbmdlZCxcbiAgICB9ID0gX25ld1N0YXRlXG4gICAgbGV0IHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c1xuXG4gICAgaWYgKG5ld0FsaWdubWVudHMpIHsgLy8gaWYgdW5zYXZlZCBhbGlnbm1lbnQgY2hhbmdlcywgYXBwbHkgdGhlbVxuICAgICAgY29uc29sZS5sb2coYGdldENoYW5nZXMgLSBhcHBseWluZyB1bnNhdmVkIGFsaWdubWVudHN9YClcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdXBkYXRlVmVyc2VXaXRoTmV3QWxpZ25tZW50cygpXG4gICAgfVxuXG4gICAgaWYgKHZlcnNlVGV4dENoYW5nZWQgJiYgbmV3VmVyc2VUZXh0KSB7XG4gICAgICBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIGFwcGx5aW5nIG5ldyB0ZXh0OmAsIG5ld1ZlcnNlVGV4dClcbiAgICAgIGNvbnN0IGN1cnJlbnRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c18gfHwgaW5pdGlhbFZlcnNlT2JqZWN0c1xuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0c18gJiYgY29uc29sZS5sb2coYGdldENoYW5nZXMgLSBhcHBseWluZyB1cGRhdGVkIGFsaWdubWVudHNgKVxuICAgICAgY29uc3QgeyB0YXJnZXRWZXJzZU9iamVjdHMgfSA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoY3VycmVudFZlcnNlT2JqZWN0c18sIG5ld1ZlcnNlVGV4dClcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdGFyZ2V0VmVyc2VPYmplY3RzXG4gICAgfSBlbHNlIHsgLy8gb25seSBhbGlnbm1lbnQgY2hhbmdlcyB0byB1cGxvYWRcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfICYmIGNvbnNvbGUubG9nKGBnZXRDaGFuZ2VzIC0gYXBwbHlpbmcgdXBkYXRlZCBhbGlnbm1lbnRzYCwgeyBuZXdWZXJzZVRleHQsIHVwZGF0ZWRWZXJzZU9iamVjdHNfIH0pXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNfIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0c18pIHtcbiAgICAgIGNvbnN0IHJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmPy5bY3VycmVudEluZGV4XVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV3VmVyc2VUZXh0LFxuICAgICAgICByZWYsXG4gICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHM6IHVwZGF0ZWRWZXJzZU9iamVjdHNfLFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7fVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBhbGlnbm1lbnQgYnV0dG9uIC0gd2lsbCBzaG93IGlmIG5vdCBhbHJlYWR5IHNob3duXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVBbGlnbm1lbnRDbGljaygpIHtcbiAgICBpZiAoZW5hYmxlQWxpZ25tZW50KSB7XG4gICAgICBsZXQgX2FsaWduZXJEYXRhID0gbnVsbFxuICAgICAgYXdhaXQgc3RhcnRFZGl0QnJhbmNoKClcblxuICAgICAgaWYgKCFhbGlnbmVyRGF0YSkgeyAvLyBpZiB3b3JkIGFsaWduZXIgbm90IHNob3duXG4gICAgICAgIGNvbnNvbGUubG9nKGBoYW5kbGVBbGlnbm1lbnRDbGljayAtIHRvZ2dsZSBPTiBhbGlnbm1lbnRgKVxuICAgICAgICBjb25zdCB0YXJnZXRWZXJzZVVTRk0gPSBnZXRDdXJyZW50VmVyc2VVc2ZtKHVwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgbGV0IG9yaWdpbmFsVmVyc2VVc2ZtID0gbnVsbFxuXG4gICAgICAgIGlmIChvcmlnaW5hbFZlcnNlT2JqZWN0cykge1xuICAgICAgICAgIG9yaWdpbmFsVmVyc2VVc2ZtID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHRhcmdldFdvcmRzOiB3b3JkQmFuayxcbiAgICAgICAgICB2ZXJzZUFsaWdubWVudHM6IGFsaWdubWVudHMsXG4gICAgICAgIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnBhcnNlVXNmbVRvV29yZEFsaWduZXJEYXRhKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZVVzZm0pXG4gICAgICAgIF9hbGlnbmVyRGF0YSA9IHsgd29yZEJhbmssIGFsaWdubWVudHMgfVxuICAgICAgfSBlbHNlIHsgLy8gd29yZCBhbGlnbmVyIGN1cnJlbnRseSBzaG93blxuICAgICAgICBjb25zb2xlLmxvZyhgaGFuZGxlQWxpZ25tZW50Q2xpY2sgLSBhbGlnbm1lbnQgYWxyZWFkeSBzaG93bmApXG4gICAgICAgIF9hbGlnbmVyRGF0YSA9IGFsaWduZXJEYXRhXG4gICAgICB9XG4gICAgICBzZXRTdGF0ZSh7IGFsaWduZXJEYXRhOiBfYWxpZ25lckRhdGEgfSlcbiAgICAgIGNvbnNvbGUubG9nKF9hbGlnbmVyRGF0YSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHVwZGF0ZWQgdmVyc2Ugb2JqZWN0cyBhZnRlciBhbGlnbm1lbnRzIGNoYW5nZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IF9uZXdBbGlnbm1lbnRzIC0gcmVzdWx0cyBvZiBhbGlnbmVyXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzKF9uZXdBbGlnbm1lbnRzID0gbmV3QWxpZ25tZW50cykge1xuICAgIGNvbnN0IGN1cnJlbnRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0cyB8fCBpbml0aWFsVmVyc2VPYmplY3RzXG4gICAgY29uc3QgdGFyZ2V0VmVyc2VUZXh0ID0gbmV3VmVyc2VUZXh0IHx8IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShjdXJyZW50VmVyc2VPYmplY3RzXylcbiAgICBjb25zdCB2ZXJzZVVzZm0gPSBBbGlnbm1lbnRIZWxwZXJzLmFkZEFsaWdubWVudHNUb1ZlcnNlVVNGTShfbmV3QWxpZ25tZW50cy50YXJnZXRXb3JkcywgX25ld0FsaWdubWVudHMudmVyc2VBbGlnbm1lbnRzLCB0YXJnZXRWZXJzZVRleHQpXG4gICAgY29uc3QgYWxpZ25lZFZlcnNlT2JqZWN0cyA9IHVzZm1IZWxwZXJzLnVzZm1WZXJzZVRvSnNvbih2ZXJzZVVzZm0pXG4gICAgcmV0dXJuIGFsaWduZWRWZXJzZU9iamVjdHNcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayBmb3Igd2hlbiB1c2VyIGNsaWNrZWQgb24gYnV0dG9uIHRvIHNhdmUgY3VycmVudCBhbGlnbm1lbnRzIGluIHdvcmQgYWxpZ25lci4gIEdlbmVyYXRlcyBuZXcgdmVyc2UgY29udGVudCBhbmQgc2F2ZXMgaW4gc3RhdGUuIENsb3NlcyBhbGlnbmVyIGRpc3BsYXlcbiAgICogQHBhcmFtIHtvYmplY3R9IF9uZXdBbGlnbm1lbnRzIC0gcmVzdWx0cyBvZiBhbGlnbmVyXG4gICAqL1xuICBmdW5jdGlvbiBzYXZlQWxpZ25tZW50KF9uZXdBbGlnbm1lbnRzID0gbmV3QWxpZ25tZW50cykge1xuICAgIGNvbnNvbGUubG9nKGBzYXZlQWxpZ25tZW50KCkgLSBuZXdBbGlnbm1lbnRzYCwgX25ld0FsaWdubWVudHMpXG5cbiAgICBpZiAoX25ld0FsaWdubWVudHMpIHtcbiAgICAgIGNvbnN0IGFsaWduZWRWZXJzZU9iamVjdHMgPSB1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzKF9uZXdBbGlnbm1lbnRzKVxuICAgICAgY29uc29sZS5sb2coYHNhdmVBbGlnbm1lbnQoKSAtIGFsaWduZWRWZXJzZU9iamVjdHNgLCBhbGlnbmVkVmVyc2VPYmplY3RzKVxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgbmV3QWxpZ25tZW50czogbnVsbCxcbiAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogYWxpZ25lZFZlcnNlT2JqZWN0cyxcbiAgICAgIH1cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgICAgY2FsbFNldFNhdmVkU3RhdGUodHJ1ZSwgbmV3U3RhdGUgKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTdGF0ZSh7XG4gICAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBidXR0b24gdG8gY2FuY2VsIHdvcmsgaW4gd29yZCBhbGlnbmVyLiAgQ2FsY3VsYXRlcyBhbmQgZGlzcGxheXMgY3VycmVudCBhbGlnbm1lbnQgdmFsaWQgc3RhdGUuIENsb3NlcyBhbGlnbmVyIGRpc3BsYXlcbiAgICovXG4gIGZ1bmN0aW9uIGNhbmNlbEFsaWdubWVudCgpIHtcbiAgICBjb25zb2xlLmxvZyhgY2FuY2VsQWxpZ25tZW50KClgKVxuICAgIGNvbnN0IHRhcmdldFZlcnNlVVNGTSA9IGdldEN1cnJlbnRWZXJzZVVzZm0odXBkYXRlZFZlcnNlT2JqZWN0cywgaW5pdGlhbFZlcnNlT2JqZWN0cywgdmVyc2VUZXh0Q2hhbmdlZCwgbmV3VmVyc2VUZXh0KVxuICAgIGNvbnN0IGFsaWduZWQgPSBpc1VzZm1BbGlnbmVkKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgc2V0U3RhdGUoeyBhbGlnbmVyRGF0YTogbnVsbCwgYWxpZ25lZCB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciBidXR0b24gdG8gc2V0IGVkaXRpbmcgc3RhdGVcbiAgICogQHBhcmFtIHtib29sZWFufSBlZGl0aW5nXyAtIGlmIHRydWUsIGVkaXRvciBpcyBzaG93biwgb3RoZXJ3aXNlIGVkaXRvciBpcyBoaWRkZW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IF9uZXdWZXJzZVRleHQgLSBvcHRpb25hbCB2ZXJzZSB0ZXh0XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuICBhc3luYyBmdW5jdGlvbiBzZXRFZGl0aW5nKGVkaXRpbmdfLCBfbmV3VmVyc2VUZXh0ID0gbmV3VmVyc2VUZXh0KSB7XG4gICAgaWYgKGVuYWJsZUVkaXQpIHtcbiAgICAgIGlmIChlZGl0aW5nXyAhPT0gZWRpdGluZykge1xuICAgICAgICBfbmV3VmVyc2VUZXh0ID0gX25ld1ZlcnNlVGV4dCB8fCBpbml0aWFsVmVyc2VUZXh0XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0geyBlZGl0aW5nOiBlZGl0aW5nXywgbmV3VmVyc2VUZXh0OiBfbmV3VmVyc2VUZXh0IH1cbiAgICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgICAgIGNhbGxTZXRTYXZlZFN0YXRlKChfbmV3VmVyc2VUZXh0ICE9PSBpbml0aWFsVmVyc2VUZXh0KSwgbmV3U3RhdGUgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayBmcm9tIHRoZSBlZGl0IG9uQ2hhbmdlIGV2ZW50IHRvIHVwZGF0ZSBlZGl0IHN0YXRlIHZhcmlhYmxlc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNoYW5nZWQgLSB0cnVlIGlmIHRoZSBuZXdWZXJzZVRleHQgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGluaXRpYWxWZXJzZVRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZlcnNlVGV4dCAtIGN1cnJlbnQgY2hhbmdlZCB2ZXJzZSB0ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfaW5pdGlhbFZlcnNlVGV4dCAtIGluaXRpYWwgdmVyc2UgdGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gc2V0VmVyc2VDaGFuZ2VkKGNoYW5nZWQsIG5ld1ZlcnNlVGV4dCwgX2luaXRpYWxWZXJzZVRleHQpIHtcbiAgICBjb25zdCB7IHRhcmdldFZlcnNlVGV4dCB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZShpbml0aWFsVmVyc2VPYmplY3RzLCBuZXdWZXJzZVRleHQpXG4gICAgY29uc3QgYWxpZ25lZCA9IGlzVXNmbUFsaWduZWQodGFyZ2V0VmVyc2VUZXh0LCBvcmlnaW5hbFZlcnNlT2JqZWN0cylcbiAgICBjb25zdCBfY2hhbmdlZCA9IG5ld1ZlcnNlVGV4dCAhPT0gaW5pdGlhbFZlcnNlVGV4dFxuXG4gICAgc2V0U3RhdGUoe1xuICAgICAgdmVyc2VUZXh0Q2hhbmdlZDogX2NoYW5nZWQsXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICBhbGlnbmVkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzID0gUmVhY3QudXNlTWVtbyggKCkgPT4geyAvLyBpZiB2ZXJzZSBoYXMgYmVlbiBlZGl0ZWQgb3IgYWxpZ25tZW50IGNoYW5nZWQsIHRoZW4gZ2VuZXJhdGUgbmV3IHZlcnNlT2JqZWN0cyB0byBkaXNwbGF5IGluIFNjcmlwdHVyZVBhbmVcbiAgICBpZiAoaW5pdGlhbFZlcnNlT2JqZWN0cykge1xuICAgICAgY29uc3QgdGFyZ2V0VmVyc2VVU0ZNID0gZ2V0Q3VycmVudFZlcnNlVXNmbSh1cGRhdGVkVmVyc2VPYmplY3RzLCBpbml0aWFsVmVyc2VPYmplY3RzLCB2ZXJzZVRleHRDaGFuZ2VkLCBuZXdWZXJzZVRleHQpXG4gICAgICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzXyA9IHVzZm1IZWxwZXJzLnVzZm1WZXJzZVRvSnNvbih0YXJnZXRWZXJzZVVTRk0pXG4gICAgICByZXR1cm4gY3VycmVudFZlcnNlT2JqZWN0c19cbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxWZXJzZU9iamVjdHNcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQsIG5ld1ZlcnNlVGV4dF0pXG5cbiAgY29uc3QgdW5zYXZlZENoYW5nZXM6Ym9vbGVhbiA9IFJlYWN0LnVzZU1lbW8oICgpID0+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
|