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.
@@ -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 useScriptureResources from './useScriptureResources';
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("clearChanges() - ".concat(JSON.stringify(reference)));
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("reference changed, reset edit/alignment state variables");
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 = reference === null || reference === void 0 ? void 0 : reference.projectId;
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
- } // get original language for this alignment
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
- if ((originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : (_originalScriptureRes = originalScriptureResource.versesForRef) === null || _originalScriptureRes === void 0 ? void 0 : _originalScriptureRes.length) > 1) {
176
- // if multiple verses, then append them together
177
- var verseObjects = [];
169
+ var verseObjects = [];
178
170
 
179
- var _iterator = _createForOfIteratorHelper(originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.versesForRef),
180
- _step;
171
+ if (originalScriptureBookObjects) {
172
+ // @ts-ignore
173
+ var verses = getVersesForRef(basicReference, originalScriptureBookObjects, originalScriptureBookObjects === null || originalScriptureBookObjects === void 0 ? void 0 : originalScriptureBookObjects.languageId);
181
174
 
182
- try {
183
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
184
- var _verseReference$verse;
175
+ if (verses !== null && verses !== void 0 && verses.length) {
176
+ var _iterator = _createForOfIteratorHelper(verses),
177
+ _step;
185
178
 
186
- var verseReference = _step.value;
187
- var origVerseObjects = verseReference === null || verseReference === void 0 ? void 0 : (_verseReference$verse = verseReference.verseData) === null || _verseReference$verse === void 0 ? void 0 : _verseReference$verse.verseObjects;
179
+ try {
180
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
181
+ var _verseReference$verse;
188
182
 
189
- if (origVerseObjects) {
190
- Array.prototype.push.apply(verseObjects, origVerseObjects);
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 originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.verseObjects;
203
- }, [originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.verseObjects, originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.versesForRef]);
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, originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.verseObjects);
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 (!enableEdit) {
441
- _context2.next = 6;
442
- break;
443
- }
444
-
445
- if (!(editing_ && !editing)) {
446
- _context2.next = 5;
447
- break;
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 6:
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, originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.verseObjects);
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
- originalScriptureResource: originalScriptureResource
556
+ unsavedChanges: unsavedChanges,
557
+ verseTextChanged: verseTextChanged
573
558
  }
574
559
  };
575
560
  }
576
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0LnRzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIkFsaWdubWVudEhlbHBlcnMiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwidXNmbUhlbHBlcnMiLCJpc0VxdWFsIiwiU2NyaXB0dXJlQ29uZmlnIiwiU2NyaXB0dXJlUmVmZXJlbmNlIiwiU2VydmVyQ29uZmlnIiwiZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyIsIk9SSUdJTkFMX1NPVVJDRSIsInVzZVNjcmlwdHVyZVJlc291cmNlcyIsImlzVXNmbUFsaWduZWQiLCJ0YXJnZXRWZXJzZVVTRk0iLCJvcmlnaW5hbFZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImV4dHJhY3RBbGlnbm1lbnRzRnJvbVRhcmdldFZlcnNlIiwiYWxpZ25tZW50cyIsIndvcmRCYW5rIiwiYXJlQWxnbm1lbnRzQ29tcGxldGUiLCJnZXRDdXJyZW50VmVyc2VVc2ZtIiwidXBkYXRlZFZlcnNlT2JqZWN0cyIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJ2ZXJzZVRleHRDaGFuZ2VkIiwibmV3VmVyc2VUZXh0IiwiY3VycmVudFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlVGV4dCIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJ1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0IiwiY3VycmVudEluZGV4IiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsImh0dHBDb25maWciLCJpbml0aWFsVmVyc2VUZXh0IiwiaXNOZXdUZXN0YW1lbnQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJvcmlnaW5hbFJlcG9VcmwiLCJyZWZlcmVuY2UiLCJzY3JpcHR1cmVDb25maWciLCJzY3JpcHR1cmVTZXR0aW5ncyIsInNldFNhdmVkQ2hhbmdlcyIsInNvdXJjZUxhbmd1YWdlIiwic3RhcnRFZGl0QnJhbmNoIiwidGFyZ2V0TGFuZ3VhZ2UiLCJ0aXRsZSIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsInNldE9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2UiLCJ1c2VTdGF0ZSIsImFsaWduZWQiLCJhbGlnbmVyRGF0YSIsImVkaXRpbmciLCJuZXdBbGlnbm1lbnRzIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJzZXRTdGF0ZSIsIm5ld1N0YXRlIiwicHJldlN0YXRlIiwiY2xlYXJDaGFuZ2VzIiwiY29uc29sZSIsImxvZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjbGVhclN0YXRlIiwib3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5nc18iLCJyZXNvdXJjZUlkIiwiYm9va0lkIiwicHJvamVjdElkIiwib3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5ncyIsInJlc291cmNlTGluayIsIm9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2UiLCJjaGFwdGVyIiwidmVyc2UiLCJjdXJyZW50TGFuZ3VhZ2VJZCIsImxhbmd1YWdlSWQiLCJjdXJyZW50T3duZXIiLCJ1c2VNZW1vIiwidmVyc2VzRm9yUmVmIiwidmVyc2VPYmplY3RzIiwidmVyc2VSZWZlcmVuY2UiLCJvcmlnVmVyc2VPYmplY3RzIiwidmVyc2VEYXRhIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJwdXNoIiwiYXBwbHkiLCJ1c2VFZmZlY3QiLCJub3RFbXB0eSIsImFsaWduZWRfIiwicmVzdWx0cyIsImdldENoYW5nZXMiLCJfbmV3U3RhdGUiLCJ1cGRhdGVkVmVyc2VPYmplY3RzXyIsInVwZGF0ZVZlcnNlV2l0aE5ld0FsaWdubWVudHMiLCJ0YXJnZXRWZXJzZU9iamVjdHMiLCJyZWYiLCJoYW5kbGVBbGlnbm1lbnRDbGljayIsIl9hbGlnbmVyRGF0YSIsIm9yaWdpbmFsVmVyc2VVc2ZtIiwicGFyc2VVc2ZtVG9Xb3JkQWxpZ25lckRhdGEiLCJ0YXJnZXRXb3JkcyIsInZlcnNlQWxpZ25tZW50cyIsIl9uZXdBbGlnbm1lbnRzIiwidmVyc2VVc2ZtIiwiYWRkQWxpZ25tZW50c1RvVmVyc2VVU0ZNIiwiYWxpZ25lZFZlcnNlT2JqZWN0cyIsInVzZm1WZXJzZVRvSnNvbiIsInNhdmVBbGlnbm1lbnQiLCJjYWxsU2V0U2F2ZWRTdGF0ZSIsImNhbmNlbEFsaWdubWVudCIsInNldEVkaXRpbmciLCJlZGl0aW5nXyIsIl9uZXdWZXJzZVRleHQiLCJzZXRWZXJzZUNoYW5nZWQiLCJjaGFuZ2VkIiwiX2luaXRpYWxWZXJzZVRleHQiLCJfY2hhbmdlZCIsImN1cnJlbnRWZXJzZU9iamVjdHMiLCJ1bnNhdmVkQ2hhbmdlcyIsInVuc2F2ZWRDaGFuZ2VzXyIsIm9uQWxpZ25tZW50c0NoYW5nZSIsImFsaWdubWVudENvbXBsZXRlIiwiYWN0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQSxPQUFPLEtBQUtBLEtBQVosTUFBdUIsT0FBdkI7QUFDQSxTQUNFQyxnQkFERixFQUVFQyx5QkFGRixFQUdFQyxXQUhGLFFBSU8sa0JBSlA7QUFLQSxPQUFPLEtBQUtDLE9BQVosTUFBeUIsWUFBekI7QUFDQSxTQUNFQyxlQURGLEVBRUVDLGtCQUZGLEVBR0VDLFlBSEYsUUFJTyxVQUpQO0FBS0EsU0FBU0MsNEJBQVQsUUFBNkMsNEJBQTdDO0FBQ0EsU0FBU0MsZUFBVCxRQUFnQyxVQUFoQztBQUNBLE9BQU9DLHFCQUFQLE1BQWtDLHlCQUFsQzs7QUFxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLGFBQVQsQ0FBdUJDLGVBQXZCLEVBQXdDQyxvQkFBeEMsRUFBOEQ7QUFBQTs7QUFDNURBLEVBQUFBLG9CQUFvQixHQUFHLHlCQUFBQSxvQkFBb0IsVUFBcEIsOERBQXNCQyxNQUF0QixHQUErQkQsb0JBQS9CLEdBQXNELElBQTdFLENBRDRELENBQ3NCOztBQUR0Qiw4QkFFM0JaLGdCQUFnQixDQUFDYyxnQ0FBakIsQ0FBa0RILGVBQWxELEVBQW1FQyxvQkFBbkUsQ0FGMkI7QUFBQSxNQUVwREcsVUFGb0QseUJBRXBEQSxVQUZvRDtBQUFBLE1BRXhDQyxR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QUFhTE8sTUFBQUEsS0FBSyxFQUFMQSxLQWJLO0FBY0x5QixNQUFBQSx5QkFBeUIsRUFBekJBO0FBZEs7QUFWRixHQUFQO0FBMkJEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBBbGlnbm1lbnRIZWxwZXJzLFxuICBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLFxuICB1c2ZtSGVscGVycyxcbn0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7XG4gIFNjcmlwdHVyZUNvbmZpZyxcbiAgU2NyaXB0dXJlUmVmZXJlbmNlLFxuICBTZXJ2ZXJDb25maWcsXG59IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyB9IGZyb20gJy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHsgT1JJR0lOQUxfU09VUkNFIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgdXNlU2NyaXB0dXJlUmVzb3VyY2VzIGZyb20gJy4vdXNlU2NyaXB0dXJlUmVzb3VyY2VzJ1xuXG5pbnRlcmZhY2UgU3RhcnRFZGl0IHtcbiAgKCk6IFByb21pc2U8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHR1cmVBTGlnbm1lbnRFZGl0UHJvcHMge1xuICAvLyBjdXJyZW50IHZlcnNlIHNlbGVjdGVkIGZyb20gaW5pdGlhbFZlcnNlT2JqZWN0c1tdXG4gIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICAvLyByZWZlcmVuY2UgZm9yIHZlcnNlIHNlbGVjdGVkIGZvciBhbGlnbm1lbnRcbiAgY3VycmVudFZlcnNlUmVmOiBTY3JpcHR1cmVSZWZlcmVuY2UsXG4gIC8vIGlmIHRydWUgdGhlbiBlZGl0aW5nIGlzIGFsbG93ZWRcbiAgZW5hYmxlRWRpdDogYm9vbGVhbixcbiAgLy8gaWYgdHJ1ZSB0aGVuIGFsaWdubWVudCBpcyBhbGxvd2VkXG4gIGVuYWJsZUFsaWdubWVudDogYm9vbGVhbixcbiAgLy8gY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIGh0dHAgY29tbXVuaWNhdGlvblxuICBodHRwQ29uZmlnOiBTZXJ2ZXJDb25maWcsXG4gIC8vIGFycmF5IG9mIGVhY2ggdmVyc2UgZm9yIGluIHJlZmVyZW5jZSByYW5nZVxuICBpbml0aWFsVmVyc2VPYmplY3RzOiBbXSxcbiAgLy8gaW5pdGlhbCB0ZXh0IGZvciB2ZXJzZVxuICBpbml0aWFsVmVyc2VUZXh0OiBzdHJpbmcsXG4gIC8vIGZsYWcgdGhhdCB3ZSBhcmUgd29ya2luZyBvbiBOVCBib29rXG4gIGlzTmV3VGVzdGFtZW50OiBib29sZWFuLFxuICAvLyB1c2VyIG5hbWUgb2YgbG9nZ2VkIGluIHVzZXJcbiAgbG9nZ2VkSW5Vc2VyOiBzdHJpbmcsXG4gIC8vIG93bmVyIHRvIHVzZSB3aGVuIGZldGNoaW5nIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlc1xuICBvcmlnaW5hbExhbmd1YWdlT3duZXI6IHN0cmluZyxcbiAgLy8gdXJsIGZvciB0aGUgb3JpZ2luYWwgbGFuZ3VhZ2UgcmVwb1xuICBvcmlnaW5hbFJlcG9Vcmw6IHN0cmluZyxcbiAgLyoqIGN1cnJlbnQgcmVmZXJlbmNlICoqL1xuICByZWZlcmVuY2U6IFNjcmlwdHVyZVJlZmVyZW5jZTtcbiAgLy8gZGV0YWlscyBhYm91dCB0aGUgY3VycmVudCBzY3JpcHR1cmUgbG9hZGVkXG4gIHNjcmlwdHVyZUNvbmZpZzogU2NyaXB0dXJlQ29uZmlnLFxuICAvLyBzZXR0aW5ncyB0byBiZSB1c2VkIGZvciBzY3JpcHR1cmVcbiAgc2NyaXB0dXJlU2V0dGluZ3M6IHsgfSxcbiAgLy8gY2FsbGJhY2sgdG8gc2F2ZSBjdXJyZW50IHZlcnNlIGVkaXQgYW5kIGFsaWdubWVudCBjaGFuZ2VzXG4gIHNldFNhdmVkQ2hhbmdlczogRnVuY3Rpb24sXG4gIC8vIGNhbGxiYWNrIHRvIGNyZWF0ZSBhIHVzZXIgYnJhbmNoIGZvciBzYXZpbmcgZWRpdCBkYXRhXG4gIHN0YXJ0RWRpdEJyYW5jaDogU3RhcnRFZGl0LFxuICAvLyBpbmRleCB0byB1c2UgZm9yIGJvb2sgKGUuZy4gYDAxYCBmb3IgYEdFTmApXG4gIGJvb2tJbmRleDogc3RyaW5nLFxuICAvLyBicmFuY2ggbmFtZSBjdXJyZW50bHkgYmVpbmcgdXNlZCAoZS5nLiBgbWFzdGVyYCBvciB1c2VyIGJyYW5jaClcbiAgd29ya2luZ1Jlc291cmNlQnJhbmNoOiBzdHJpbmcsXG4gIC8vIGN1cnJlbnQgdGFyZ2V0IGxhbmd1YWdlXG4gIHRhcmdldExhbmd1YWdlOiBvYmplY3QsXG4gIC8vIHNvdXJjZSBsYW5ndWFnZVxuICBzb3VyY2VMYW5ndWFnZTogc3RyaW5nLFxuICAvLyB0aXRsZSB0byBzaG93IGluIGFsaWdubWVudFxuICB0aXRsZTogc3RyaW5nLFxuICAvLyBjYWxsYmFjayB0byByZXR1cm4gdGhlIG9yaWdpbmFsIHNjcmlwdHVyZSBmb3IgdGhlIGJvb2tcbiAgc2V0T3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZTogRnVuY3Rpb24sXG59XG5cbi8qKlxuICogZGV0ZXJtaW5lcyBpZiBhbGlnbm1lbnQgaXMgY29tcGxldGUgYmFzZWQgb24gdGFyZ2V0IFVTRk0gYW5kIG9yaWdpbmFsIGxhbmd1YWdlIHZlcnNlIG9iamVjdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRWZXJzZVVTRk1cbiAqIEBwYXJhbSB7b2JqZWN0W119IG9yaWdpbmFsVmVyc2VPYmplY3RzXG4gKi9cbmZ1bmN0aW9uIGlzVXNmbUFsaWduZWQodGFyZ2V0VmVyc2VVU0ZNLCBvcmlnaW5hbFZlcnNlT2JqZWN0cykge1xuICBvcmlnaW5hbFZlcnNlT2JqZWN0cyA9IG9yaWdpbmFsVmVyc2VPYmplY3RzPy5sZW5ndGggPyBvcmlnaW5hbFZlcnNlT2JqZWN0cyA6IG51bGwgLy8gbWFrZSBzdXJlIG5vdCBwYXNzaW5nIGVtcHR5IEFycmF5XG4gIGNvbnN0IHsgYWxpZ25tZW50cywgd29yZEJhbmsgfSA9IEFsaWdubWVudEhlbHBlcnMuZXh0cmFjdEFsaWdubWVudHNGcm9tVGFyZ2V0VmVyc2UodGFyZ2V0VmVyc2VVU0ZNLCBvcmlnaW5hbFZlcnNlT2JqZWN0cylcbiAgcmV0dXJuIEFsaWdubWVudEhlbHBlcnMuYXJlQWxnbm1lbnRzQ29tcGxldGUod29yZEJhbmssIGFsaWdubWVudHMpXG59XG5cbi8qKlxuICogZ2V0IHRoZSB1cGRhdGVkIFVTRk0gZm9yIHRhcmdldCB2ZXJzZSBmcm9tIHRoZSB1cGRhdGVkIHZlcnNlIG9iamVjdHMgYW5kIGxhdGVzdCB0ZXh0XG4gKiBAcGFyYW0ge29iamVjdFtdfSB1cGRhdGVkVmVyc2VPYmplY3RzXG4gKiBAcGFyYW0ge29iamVjdFtdfSBpbml0aWFsVmVyc2VPYmplY3RzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZlcnNlVGV4dENoYW5nZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWZXJzZVRleHRcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudFZlcnNlVXNmbSh1cGRhdGVkVmVyc2VPYmplY3RzLCBpbml0aWFsVmVyc2VPYmplY3RzLCB2ZXJzZVRleHRDaGFuZ2VkOiBib29sZWFuLCBuZXdWZXJzZVRleHQpIHtcbiAgbGV0IHRhcmdldFZlcnNlVVNGTSA9IG51bGxcbiAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcblxuICBpZiAodmVyc2VUZXh0Q2hhbmdlZCAmJiBuZXdWZXJzZVRleHQpIHtcbiAgICBjb25zdCB7IHRhcmdldFZlcnNlVGV4dCB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZShjdXJyZW50VmVyc2VPYmplY3RzXywgbmV3VmVyc2VUZXh0KVxuICAgIHRhcmdldFZlcnNlVVNGTSA9IHRhcmdldFZlcnNlVGV4dFxuICB9IGVsc2Uge1xuICAgIHRhcmdldFZlcnNlVVNGTSA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShjdXJyZW50VmVyc2VPYmplY3RzXylcbiAgfVxuICByZXR1cm4gdGFyZ2V0VmVyc2VVU0ZNXG59XG5cbi8vIG1hbmFnZSB2ZXJzZSBlZGl0IGFuZCBhbGlnbm1lbnQgc3RhdGVzXG5leHBvcnQgZnVuY3Rpb24gdXNlU2NyaXB0dXJlQWxpZ25tZW50RWRpdCh7XG4gIGN1cnJlbnRJbmRleCxcbiAgZW5hYmxlRWRpdCxcbiAgZW5hYmxlQWxpZ25tZW50LFxuICBodHRwQ29uZmlnLFxuICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICBpbml0aWFsVmVyc2VUZXh0LFxuICBpc05ld1Rlc3RhbWVudCxcbiAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICBvcmlnaW5hbFJlcG9VcmwsXG4gIHJlZmVyZW5jZSxcbiAgc2NyaXB0dXJlQ29uZmlnLFxuICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgc2V0U2F2ZWRDaGFuZ2VzLFxuICBzb3VyY2VMYW5ndWFnZSxcbiAgc3RhcnRFZGl0QnJhbmNoLFxuICB0YXJnZXRMYW5ndWFnZSxcbiAgdGl0bGUsXG4gIHdvcmtpbmdSZXNvdXJjZUJyYW5jaCxcbiAgc2V0T3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZSxcbn0gOiBTY3JpcHR1cmVBTGlnbm1lbnRFZGl0UHJvcHMpIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGFsaWduZWQ6IGZhbHNlLFxuICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgIG5ld0FsaWdubWVudHM6IG51bGwsXG4gICAgbmV3VmVyc2VUZXh0OiBudWxsLFxuICAgIHVwZGF0ZWRWZXJzZU9iamVjdHM6IG51bGwsXG4gICAgdmVyc2VUZXh0Q2hhbmdlZDogZmFsc2UsXG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIGFsaWduZWQsXG4gICAgYWxpZ25lckRhdGEsXG4gICAgZWRpdGluZyxcbiAgICBuZXdBbGlnbm1lbnRzLFxuICAgIG5ld1ZlcnNlVGV4dCxcbiAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgIHZlcnNlVGV4dENoYW5nZWQsXG4gIH0gPSBzdGF0ZVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJDaGFuZ2VzKCkge1xuICAgIGNvbnNvbGUubG9nKGBjbGVhckNoYW5nZXMoKSAtICR7SlNPTi5zdHJpbmdpZnkocmVmZXJlbmNlKX1gKVxuICAgIGNvbnN0IGNsZWFyU3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICBuZXdBbGlnbm1lbnRzOiBudWxsLFxuICAgICAgbmV3VmVyc2VUZXh0OiBudWxsLFxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogbnVsbCxcbiAgICAgIHZlcnNlVGV4dENoYW5nZWQ6IGZhbHNlLFxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChzdGF0ZSwgY2xlYXJTdGF0ZSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGByZWZlcmVuY2UgY2hhbmdlZCwgcmVzZXQgZWRpdC9hbGlnbm1lbnQgc3RhdGUgdmFyaWFibGVzYClcbiAgICAgIHNldFN0YXRlKGNsZWFyU3RhdGUpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5nc18gPSB7XG4gICAgLi4uc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgcmVzb3VyY2VJZDogT1JJR0lOQUxfU09VUkNFLFxuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBodHRwQ29uZmlnID0gaHR0cENvbmZpZyB8fCB7fVxuICBjb25zdCBib29rSWQgPSByZWZlcmVuY2U/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 {string} chapter
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 bookId = _ref.bookId,
28
- scriptureSettings = _ref.scriptureSettings,
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
- _ref$appRef = _ref.appRef,
40
- appRef = _ref$appRef === void 0 ? 'master' : _ref$appRef,
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmVSZXNvdXJjZXMudHN4Il0sIm5hbWVzIjpbInVzZVNjcmlwdHVyZSIsImdldFNjcmlwdHVyZVJlc291cmNlU2V0dGluZ3MiLCJ1c2VTY3JpcHR1cmVSZXNvdXJjZXMiLCJib29rSWQiLCJzY3JpcHR1cmVTZXR0aW5ncyIsImNoYXB0ZXIiLCJ2ZXJzZSIsImlzTmV3VGVzdGFtZW50Iiwib3JpZ2luYWxSZXBvVXJsIiwiY3VycmVudExhbmd1YWdlSWQiLCJjdXJyZW50T3duZXIiLCJodHRwQ29uZmlnIiwiYXBwUmVmIiwid2hvbGVCb29rIiwicmVmIiwic2NyaXB0dXJlU2V0dGluZ3NfIiwic2NyaXB0dXJlQ29uZmlnXyIsInJlZmVyZW5jZSIsInByb2plY3RJZCIsInJlc291cmNlIiwibGFuZ3VhZ2VJZCIsInJlc291cmNlSWQiLCJvd25lciIsImJyYW5jaCIsInJlc291cmNlTGluayIsImNvbmZpZyIsInNlcnZlciIsImRpc2FibGVXb3JkUG9wb3ZlciIsInNjcmlwdHVyZVJlc291cmNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLFNBQVNBLFlBQVQsUUFBNkIsSUFBN0I7QUFDQSxTQUFTQyw0QkFBVCxRQUE2Qyw0QkFBN0M7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE9BQU8sU0FBU0MscUJBQVQsT0FZSjtBQUFBLE1BWERDLE1BV0MsUUFYREEsTUFXQztBQUFBLE1BVkRDLGlCQVVDLFFBVkRBLGlCQVVDO0FBQUEsTUFUREMsT0FTQyxRQVREQSxPQVNDO0FBQUEsTUFSREMsS0FRQyxRQVJEQSxLQVFDO0FBQUEsTUFQREMsY0FPQyxRQVBEQSxjQU9DO0FBQUEsTUFOREMsZUFNQyxRQU5EQSxlQU1DO0FBQUEsbUNBTERDLGlCQUtDO0FBQUEsTUFMREEsaUJBS0Msc0NBTG1CLElBS25CO0FBQUEsK0JBSkRDLFlBSUM7QUFBQSxNQUpEQSxZQUlDLGtDQUpjLElBSWQ7QUFBQSw2QkFIREMsVUFHQztBQUFBLE1BSERBLFVBR0MsZ0NBSFksRUFHWjtBQUFBLHlCQUZEQyxNQUVDO0FBQUEsTUFGREEsTUFFQyw0QkFGUSxRQUVSO0FBQUEsNEJBRERDLFNBQ0M7QUFBQSxNQUREQSxTQUNDLCtCQURXLEtBQ1g7O0FBQ0QsTUFBSUQsTUFBTSxLQUFLUixpQkFBaUIsQ0FBQ1UsR0FBakMsRUFBc0M7QUFDcENWLElBQUFBLGlCQUFpQixtQ0FBUUEsaUJBQVI7QUFBMkJVLE1BQUFBLEdBQUcsRUFBRUY7QUFBaEMsTUFBakI7QUFDRDs7QUFFRCxNQUFNRyxrQkFBa0IsR0FBR2QsNEJBQTRCLENBQUNFLE1BQUQsRUFBU0MsaUJBQVQsRUFBNEJHLGNBQTVCLEVBQ3JEQyxlQURxRCxFQUNwQ0MsaUJBRG9DLEVBQ2pCQyxZQURpQixDQUF2RCxDQUxDLENBTW1EOztBQUVwRCxNQUFNTSxnQkFBZ0IsR0FBRztBQUN2QkMsSUFBQUEsU0FBUyxFQUFFO0FBQ1RDLE1BQUFBLFNBQVMsRUFBRWYsTUFERjtBQUVURSxNQUFBQSxPQUFPLEVBQUVBLE9BRkE7QUFHVEMsTUFBQUEsS0FBSyxFQUFFQTtBQUhFLEtBRFk7QUFNdkJhLElBQUFBLFFBQVEsRUFBRTtBQUNSQyxNQUFBQSxVQUFVLEVBQUVMLGtCQUFrQixDQUFDSyxVQUR2QjtBQUVSRixNQUFBQSxTQUFTLEVBQUVILGtCQUFrQixDQUFDTSxVQUZ0QjtBQUdSQyxNQUFBQSxLQUFLLEVBQUVQLGtCQUFrQixDQUFDTyxLQUhsQjtBQUlSUixNQUFBQSxHQUFHLEVBQUVDLGtCQUFrQixDQUFDRCxHQUFuQixJQUEwQkMsa0JBQWtCLENBQUNRLE1BQTdDLElBQXVEWDtBQUpwRCxLQU5hO0FBWXZCWSxJQUFBQSxZQUFZLEVBQUVULGtCQUFrQixDQUFDUyxZQVpWO0FBYXZCQyxJQUFBQSxNQUFNO0FBQ0pDLE1BQUFBLE1BQU0sRUFBRVgsa0JBQWtCLENBQUNXO0FBRHZCLE9BRURmLFVBRkMsQ0FiaUI7QUFpQnZCZ0IsSUFBQUEsa0JBQWtCLEVBQUVaLGtCQUFrQixDQUFDWSxrQkFqQmhCO0FBa0J2QmQsSUFBQUEsU0FBUyxFQUFUQTtBQWxCdUIsR0FBekIsQ0FSQyxDQTZCRDs7QUFDQSxNQUFNZSxpQkFBaUIsR0FBRzVCLFlBQVksQ0FBQ2dCLGdCQUFELENBQXRDLENBOUJDLENBK0JEOztBQUNBWSxFQUFBQSxpQkFBaUIsQ0FBQ0osWUFBbEIsR0FBaUNwQixpQkFBaUIsQ0FBQ29CLFlBQW5EOztBQUVBLE1BQUksQ0FBQ0ksaUJBQWlCLENBQUMsVUFBRCxDQUF0QixFQUFvQztBQUFFO0FBQ3BDQSxJQUFBQSxpQkFBaUIsQ0FBQyxVQUFELENBQWpCLEdBQWdDWixnQkFBZ0IsQ0FBQ0csUUFBakQ7QUFDRDs7QUFFRCxTQUFPUyxpQkFBUDtBQUNEO0FBRUQsZUFBZTFCLHFCQUFmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU2NyaXB0dXJlIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyBnZXRTY3JpcHR1cmVSZXNvdXJjZVNldHRpbmdzIH0gZnJvbSAnLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5cbi8qKlxuICogaG9vayB0byBnZXQgYSBzY3JpcHR1cmUgcmVzb3VyY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBib29rSWRcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY3JpcHR1cmVTZXR0aW5ncyAtIGluZm8gYWJvdXQgdGhlIHNjcmlwdHVyZSBiZWluZyByZWZlcmVuY2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcHRlclxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzTmV3VGVzdGFtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxSZXBvVXJsIC0gb3B0aW9uYWwgcGF0aCB0byByZXBvIGZvciBvcmlnaW5hbCBsYW5ndWFnZVxuICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRMYW5ndWFnZUlkIC0gb3B0aW9uYWwgb3Zlci1yaWRlIGZvciB0cmFuc2llbnQgY2FzZSB3aGVyZSBsYW5ndWFnZSBpbiBzY3JpcHR1cmUgc2V0dGluZ3MgaGF2ZSBub3QgeWV0IHVwZGF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50T3duZXIgLSBvcHRpb25hbCBvdmVyLXJpZGUgZm9yIHRyYW5zaWVudCBjYXNlIHdoZXJlIG93bmVyIGluIHNjcmlwdHVyZSBzZXR0aW5ncyBoYXZlIG5vdCB5ZXQgdXBkYXRlZFxuICogQHBhcmFtIHtvYmplY3R9IGh0dHBDb25maWcgLSBvcHRpb25hbCBjb25maWcgc2V0dGluZ3MgZm9yIGZldGNoZXMgKHRpbWVvdXQsIGNhY2hlLCBldGMuKVxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFJlZiAtIGFwcCBkZWZhdWx0LCBwb2ludHMgdG8gc3BlY2lmaWMgcmVmIHRoYXQgY291bGQgYmUgYSBicmFuY2ggb3IgdGFnXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHdob2xlQm9vayAtIGlmIHRydWUgdGhlbiBmZXRjaCB0aGUgZW50aXJlIGJvb2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNjcmlwdHVyZVJlc291cmNlcyh7XG4gIGJvb2tJZCxcbiAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gIGNoYXB0ZXIsXG4gIHZlcnNlLFxuICBpc05ld1Rlc3RhbWVudCxcbiAgb3JpZ2luYWxSZXBvVXJsLFxuICBjdXJyZW50TGFuZ3VhZ2VJZCA9IG51bGwsXG4gIGN1cnJlbnRPd25lciA9IG51bGwsXG4gIGh0dHBDb25maWcgPSB7fSxcbiAgYXBwUmVmID0gJ21hc3RlcicsXG4gIHdob2xlQm9vayA9IGZhbHNlLFxufSkge1xuICBpZiAoYXBwUmVmICE9PSBzY3JpcHR1cmVTZXR0aW5ncy5yZWYpIHtcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyA9IHsgLi4uc2NyaXB0dXJlU2V0dGluZ3MsIHJlZjogYXBwUmVmIH1cbiAgfVxuXG4gIGNvbnN0IHNjcmlwdHVyZVNldHRpbmdzXyA9IGdldFNjcmlwdHVyZVJlc291cmNlU2V0dGluZ3MoYm9va0lkLCBzY3JpcHR1cmVTZXR0aW5ncywgaXNOZXdUZXN0YW1lbnQsXG4gICAgb3JpZ2luYWxSZXBvVXJsLCBjdXJyZW50TGFuZ3VhZ2VJZCwgY3VycmVudE93bmVyKSAvLyBjb252ZXJ0IGFueSBkZWZhdWx0IHNldHRpbmdzIHN0cmluZ3NcblxuICBjb25zdCBzY3JpcHR1cmVDb25maWdfID0ge1xuICAgIHJlZmVyZW5jZToge1xuICAgICAgcHJvamVjdElkOiBib29rSWQsXG4gICAgICBjaGFwdGVyOiBjaGFwdGVyLFxuICAgICAgdmVyc2U6IHZlcnNlLFxuICAgIH0sXG4gICAgcmVzb3VyY2U6IHtcbiAgICAgIGxhbmd1YWdlSWQ6IHNjcmlwdHVyZVNldHRpbmdzXy5sYW5ndWFnZUlkLFxuICAgICAgcHJvamVjdElkOiBzY3JpcHR1cmVTZXR0aW5nc18ucmVzb3VyY2VJZCxcbiAgICAgIG93bmVyOiBzY3JpcHR1cmVTZXR0aW5nc18ub3duZXIsXG4gICAgICByZWY6IHNjcmlwdHVyZVNldHRpbmdzXy5yZWYgfHwgc2NyaXB0dXJlU2V0dGluZ3NfLmJyYW5jaCB8fCBhcHBSZWYsXG4gICAgfSxcbiAgICByZXNvdXJjZUxpbms6IHNjcmlwdHVyZVNldHRpbmdzXy5yZXNvdXJjZUxpbmssXG4gICAgY29uZmlnOiB7XG4gICAgICBzZXJ2ZXI6IHNjcmlwdHVyZVNldHRpbmdzXy5zZXJ2ZXIsXG4gICAgICAuLi5odHRwQ29uZmlnLFxuICAgIH0sXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyOiBzY3JpcHR1cmVTZXR0aW5nc18uZGlzYWJsZVdvcmRQb3BvdmVyLFxuICAgIHdob2xlQm9vayxcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3Qgc2NyaXB0dXJlUmVzb3VyY2UgPSB1c2VTY3JpcHR1cmUoc2NyaXB0dXJlQ29uZmlnXylcbiAgLy8gcmVzdG9yZSBhbnkgZGVmYXVsdCBzZXR0aW5nc1xuICBzY3JpcHR1cmVSZXNvdXJjZS5yZXNvdXJjZUxpbmsgPSBzY3JpcHR1cmVTZXR0aW5ncy5yZXNvdXJjZUxpbmtcblxuICBpZiAoIXNjcmlwdHVyZVJlc291cmNlWydyZXNvdXJjZSddKSB7IC8vIGtlZXAgcmVzb3VyY2UgaWYgbm90IHJldHVybmVkXG4gICAgc2NyaXB0dXJlUmVzb3VyY2VbJ3Jlc291cmNlJ10gPSBzY3JpcHR1cmVDb25maWdfLnJlc291cmNlXG4gIH1cblxuICByZXR1cm4gc2NyaXB0dXJlUmVzb3VyY2Vcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlU2NyaXB0dXJlUmVzb3VyY2VzXG4iXX0=
86
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmVSZXNvdXJjZXMudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVNjcmlwdHVyZSIsImdldFNjcmlwdHVyZVJlc291cmNlU2V0dGluZ3MiLCJ1c2VTY3JpcHR1cmVSZXNvdXJjZXMiLCJhcHBSZWYiLCJjdXJyZW50TGFuZ3VhZ2VJZCIsImN1cnJlbnRPd25lciIsImh0dHBDb25maWciLCJpc05ld1Rlc3RhbWVudCIsIm9yaWdpbmFsUmVwb1VybCIsInJlYWR5Rm9yRmV0Y2giLCJyZWZlcmVuY2UiLCJzY3JpcHR1cmVTZXR0aW5ncyIsIndob2xlQm9vayIsImJvb2tJZCIsInByb2plY3RJZCIsInJlZiIsImNvbnNvbGUiLCJsb2ciLCJzY3JpcHR1cmVTZXR0aW5nc18iLCJzY3JpcHR1cmVDb25maWdfIiwicmVzb3VyY2UiLCJsYW5ndWFnZUlkIiwicmVzb3VyY2VJZCIsIm93bmVyIiwiYnJhbmNoIiwicmVzb3VyY2VMaW5rIiwiY29uZmlnIiwic2VydmVyIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwic2NyaXB0dXJlUmVzb3VyY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLFNBQVNBLFNBQVQsUUFBMEIsT0FBMUI7QUFDQSxTQUFTQyxZQUFULFFBQTZCLElBQTdCO0FBQ0EsU0FBU0MsNEJBQVQsUUFBNkMsNEJBQTdDO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxTQUFTQyxxQkFBVCxPQVdKO0FBQUEseUJBVkRDLE1BVUM7QUFBQSxNQVZEQSxNQVVDLDRCQVZRLFFBVVI7QUFBQSxtQ0FUREMsaUJBU0M7QUFBQSxNQVREQSxpQkFTQyxzQ0FUbUIsSUFTbkI7QUFBQSwrQkFSREMsWUFRQztBQUFBLE1BUkRBLFlBUUMsa0NBUmMsSUFRZDtBQUFBLDZCQVBEQyxVQU9DO0FBQUEsTUFQREEsVUFPQyxnQ0FQWSxFQU9aO0FBQUEsTUFOREMsY0FNQyxRQU5EQSxjQU1DO0FBQUEsTUFMREMsZUFLQyxRQUxEQSxlQUtDO0FBQUEsZ0NBSkRDLGFBSUM7QUFBQSxNQUpEQSxhQUlDLG1DQUplLEtBSWY7QUFBQSxNQUhEQyxTQUdDLFFBSERBLFNBR0M7QUFBQSxNQUZEQyxpQkFFQyxRQUZEQSxpQkFFQztBQUFBLDRCQUREQyxTQUNDO0FBQUEsTUFEREEsU0FDQywrQkFEVyxLQUNYO0FBQ0QsTUFBTUMsTUFBTSxHQUFHSCxTQUFILGFBQUdBLFNBQUgsdUJBQUdBLFNBQVMsQ0FBRUksU0FBMUI7O0FBRUEsTUFBSVgsTUFBTSxLQUFLUSxpQkFBaUIsQ0FBQ0ksR0FBakMsRUFBc0M7QUFDcENKLElBQUFBLGlCQUFpQixtQ0FBUUEsaUJBQVI7QUFBMkJJLE1BQUFBLEdBQUcsRUFBRVo7QUFBaEMsTUFBakI7QUFDRDs7QUFFREosRUFBQUEsU0FBUyxDQUFDLFlBQU07QUFDZGlCLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUiwwRUFBOEVOLGlCQUFpQixDQUFDSSxHQUFoRyx5QkFBa0haLE1BQWxIO0FBQ0QsR0FGUSxFQUVOLENBQUNBLE1BQUQsRUFBU1EsaUJBQWlCLENBQUNJLEdBQTNCLENBRk0sQ0FBVDtBQUlBLE1BQU1HLGtCQUFrQixHQUFHakIsNEJBQTRCLENBQUNZLE1BQUQsRUFBU0YsaUJBQVQsRUFBNEJKLGNBQTVCLEVBQ3JEQyxlQURxRCxFQUNwQ0osaUJBRG9DLEVBQ2pCQyxZQURpQixDQUF2RCxDQVhDLENBWW1EOztBQUVwRCxNQUFNYyxnQkFBZ0IsR0FBRztBQUN2QlQsSUFBQUEsU0FBUyxFQUFUQSxTQUR1QjtBQUV2QlUsSUFBQUEsUUFBUSxFQUFFO0FBQ1JDLE1BQUFBLFVBQVUsRUFBRUgsa0JBQWtCLENBQUNHLFVBRHZCO0FBRVJQLE1BQUFBLFNBQVMsRUFBRUksa0JBQWtCLENBQUNJLFVBRnRCO0FBR1JDLE1BQUFBLEtBQUssRUFBRUwsa0JBQWtCLENBQUNLLEtBSGxCO0FBSVJSLE1BQUFBLEdBQUcsRUFBRUcsa0JBQWtCLENBQUNILEdBQW5CLElBQTBCRyxrQkFBa0IsQ0FBQ00sTUFBN0MsSUFBdURyQjtBQUpwRCxLQUZhO0FBUXZCc0IsSUFBQUEsWUFBWSxFQUFFUCxrQkFBa0IsQ0FBQ08sWUFSVjtBQVN2QkMsSUFBQUEsTUFBTTtBQUNKQyxNQUFBQSxNQUFNLEVBQUVULGtCQUFrQixDQUFDUztBQUR2QixPQUVEckIsVUFGQyxDQVRpQjtBQWF2QnNCLElBQUFBLGtCQUFrQixFQUFFVixrQkFBa0IsQ0FBQ1Usa0JBYmhCO0FBY3ZCaEIsSUFBQUEsU0FBUyxFQUFUQSxTQWR1QjtBQWV2QkgsSUFBQUEsYUFBYSxFQUFiQTtBQWZ1QixHQUF6QixDQWRDLENBZ0NEOztBQUNBLE1BQU1vQixpQkFBaUIsR0FBRzdCLFlBQVksQ0FBQ21CLGdCQUFELENBQXRDLENBakNDLENBa0NEOztBQUNBVSxFQUFBQSxpQkFBaUIsQ0FBQ0osWUFBbEIsR0FBaUNkLGlCQUFpQixDQUFDYyxZQUFuRDs7QUFFQSxNQUFJLENBQUNJLGlCQUFpQixDQUFDLFVBQUQsQ0FBdEIsRUFBb0M7QUFBRTtBQUNwQ0EsSUFBQUEsaUJBQWlCLENBQUMsVUFBRCxDQUFqQixHQUFnQ1YsZ0JBQWdCLENBQUNDLFFBQWpEO0FBQ0Q7O0FBRUQsU0FBT1MsaUJBQVA7QUFDRDtBQUVELGVBQWUzQixxQkFBZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU2NyaXB0dXJlIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyBnZXRTY3JpcHR1cmVSZXNvdXJjZVNldHRpbmdzIH0gZnJvbSAnLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5cbi8qKlxuICogaG9vayB0byBnZXQgYSBzY3JpcHR1cmUgcmVzb3VyY2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY3JpcHR1cmVTZXR0aW5ncyAtIGluZm8gYWJvdXQgdGhlIHNjcmlwdHVyZSBiZWluZyByZWZlcmVuY2VkXG4gKiBAcGFyYW0ge29iamVjdH0gcmVmZXJlbmNlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzTmV3VGVzdGFtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxSZXBvVXJsIC0gb3B0aW9uYWwgcGF0aCB0byByZXBvIGZvciBvcmlnaW5hbCBsYW5ndWFnZVxuICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRMYW5ndWFnZUlkIC0gb3B0aW9uYWwgb3Zlci1yaWRlIGZvciB0cmFuc2llbnQgY2FzZSB3aGVyZSBsYW5ndWFnZSBpbiBzY3JpcHR1cmUgc2V0dGluZ3MgaGF2ZSBub3QgeWV0IHVwZGF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50T3duZXIgLSBvcHRpb25hbCBvdmVyLXJpZGUgZm9yIHRyYW5zaWVudCBjYXNlIHdoZXJlIG93bmVyIGluIHNjcmlwdHVyZSBzZXR0aW5ncyBoYXZlIG5vdCB5ZXQgdXBkYXRlZFxuICogQHBhcmFtIHtvYmplY3R9IGh0dHBDb25maWcgLSBvcHRpb25hbCBjb25maWcgc2V0dGluZ3MgZm9yIGZldGNoZXMgKHRpbWVvdXQsIGNhY2hlLCBldGMuKVxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFJlZiAtIGFwcCBkZWZhdWx0LCBwb2ludHMgdG8gc3BlY2lmaWMgcmVmIHRoYXQgY291bGQgYmUgYSBicmFuY2ggb3IgdGFnXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHdob2xlQm9vayAtIGlmIHRydWUgdGhlbiBmZXRjaCB0aGUgZW50aXJlIGJvb2tcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhZHlGb3JGZXRjaCAtIHRydWUgaWYgcmVhZHkgZm9yIGZldGNoaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTY3JpcHR1cmVSZXNvdXJjZXMoe1xuICBhcHBSZWYgPSAnbWFzdGVyJyxcbiAgY3VycmVudExhbmd1YWdlSWQgPSBudWxsLFxuICBjdXJyZW50T3duZXIgPSBudWxsLFxuICBodHRwQ29uZmlnID0ge30sXG4gIGlzTmV3VGVzdGFtZW50LFxuICBvcmlnaW5hbFJlcG9VcmwsXG4gIHJlYWR5Rm9yRmV0Y2ggPSBmYWxzZSxcbiAgcmVmZXJlbmNlLFxuICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgd2hvbGVCb29rID0gZmFsc2UsXG59KSB7XG4gIGNvbnN0IGJvb2tJZCA9IHJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgaWYgKGFwcFJlZiAhPT0gc2NyaXB0dXJlU2V0dGluZ3MucmVmKSB7XG4gICAgc2NyaXB0dXJlU2V0dGluZ3MgPSB7IC4uLnNjcmlwdHVyZVNldHRpbmdzLCByZWY6IGFwcFJlZiB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmVSZXNvdXJjZXM6IGFwcFJlZiBjaGFuZ2VkIHRvIHNjcmlwdHVyZVNldHRpbmdzLnJlZj0ke3NjcmlwdHVyZVNldHRpbmdzLnJlZn0gYW5kIGFwcFJlZj0ke2FwcFJlZn1gKVxuICB9LCBbYXBwUmVmLCBzY3JpcHR1cmVTZXR0aW5ncy5yZWZdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZVNldHRpbmdzXyA9IGdldFNjcmlwdHVyZVJlc291cmNlU2V0dGluZ3MoYm9va0lkLCBzY3JpcHR1cmVTZXR0aW5ncywgaXNOZXdUZXN0YW1lbnQsXG4gICAgb3JpZ2luYWxSZXBvVXJsLCBjdXJyZW50TGFuZ3VhZ2VJZCwgY3VycmVudE93bmVyKSAvLyBjb252ZXJ0IGFueSBkZWZhdWx0IHNldHRpbmdzIHN0cmluZ3NcblxuICBjb25zdCBzY3JpcHR1cmVDb25maWdfID0ge1xuICAgIHJlZmVyZW5jZSxcbiAgICByZXNvdXJjZToge1xuICAgICAgbGFuZ3VhZ2VJZDogc2NyaXB0dXJlU2V0dGluZ3NfLmxhbmd1YWdlSWQsXG4gICAgICBwcm9qZWN0SWQ6IHNjcmlwdHVyZVNldHRpbmdzXy5yZXNvdXJjZUlkLFxuICAgICAgb3duZXI6IHNjcmlwdHVyZVNldHRpbmdzXy5vd25lcixcbiAgICAgIHJlZjogc2NyaXB0dXJlU2V0dGluZ3NfLnJlZiB8fCBzY3JpcHR1cmVTZXR0aW5nc18uYnJhbmNoIHx8IGFwcFJlZixcbiAgICB9LFxuICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlU2V0dGluZ3NfLnJlc291cmNlTGluayxcbiAgICBjb25maWc6IHtcbiAgICAgIHNlcnZlcjogc2NyaXB0dXJlU2V0dGluZ3NfLnNlcnZlcixcbiAgICAgIC4uLmh0dHBDb25maWcsXG4gICAgfSxcbiAgICBkaXNhYmxlV29yZFBvcG92ZXI6IHNjcmlwdHVyZVNldHRpbmdzXy5kaXNhYmxlV29yZFBvcG92ZXIsXG4gICAgd2hvbGVCb29rLFxuICAgIHJlYWR5Rm9yRmV0Y2gsXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHNjcmlwdHVyZVJlc291cmNlID0gdXNlU2NyaXB0dXJlKHNjcmlwdHVyZUNvbmZpZ18pXG4gIC8vIHJlc3RvcmUgYW55IGRlZmF1bHQgc2V0dGluZ3NcbiAgc2NyaXB0dXJlUmVzb3VyY2UucmVzb3VyY2VMaW5rID0gc2NyaXB0dXJlU2V0dGluZ3MucmVzb3VyY2VMaW5rXG5cbiAgaWYgKCFzY3JpcHR1cmVSZXNvdXJjZVsncmVzb3VyY2UnXSkgeyAvLyBrZWVwIHJlc291cmNlIGlmIG5vdCByZXR1cm5lZFxuICAgIHNjcmlwdHVyZVJlc291cmNlWydyZXNvdXJjZSddID0gc2NyaXB0dXJlQ29uZmlnXy5yZXNvdXJjZVxuICB9XG5cbiAgcmV0dXJuIHNjcmlwdHVyZVJlc291cmNlXG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVNjcmlwdHVyZVJlc291cmNlc1xuIl19