single-scripture-rcl 3.3.3 → 3.3.4-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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,
@@ -116,6 +117,15 @@ export function useScriptureAlignmentEdit(_ref) {
116
117
  newVerseText = state.newVerseText,
117
118
  updatedVerseObjects = state.updatedVerseObjects,
118
119
  verseTextChanged = state.verseTextChanged;
120
+ var chapter = reference === null || reference === void 0 ? void 0 : reference.chapter;
121
+ var verse = reference === null || reference === void 0 ? void 0 : reference.verse;
122
+ var projectId = reference === null || reference === void 0 ? void 0 : reference.projectId;
123
+ var basicReference = {
124
+ // only has the three basic fields
125
+ chapter: chapter,
126
+ verse: verse,
127
+ projectId: projectId
128
+ };
119
129
 
120
130
  function setState(newState) {
121
131
  setState_(function (prevState) {
@@ -124,7 +134,7 @@ export function useScriptureAlignmentEdit(_ref) {
124
134
  }
125
135
 
126
136
  function clearChanges() {
127
- console.log("clearChanges() - ".concat(JSON.stringify(reference)));
137
+ console.log("clearChanges() - ".concat(JSON.stringify(basicReference)));
128
138
 
129
139
  var clearState = _objectSpread(_objectSpread({}, state), {}, {
130
140
  alignerData: null,
@@ -136,7 +146,7 @@ export function useScriptureAlignmentEdit(_ref) {
136
146
  });
137
147
 
138
148
  if (!isEqual(state, clearState)) {
139
- console.log("reference changed, reset edit/alignment state variables");
149
+ console.log("clearChanges() - reference changed, reset edit/alignment state variables");
140
150
  setState(clearState);
141
151
  }
142
152
  }
@@ -147,59 +157,47 @@ export function useScriptureAlignmentEdit(_ref) {
147
157
 
148
158
 
149
159
  httpConfig = httpConfig || {};
150
- var bookId = reference === null || reference === void 0 ? void 0 : reference.projectId;
160
+ var bookId = projectId;
151
161
  var originalScriptureSettings = getScriptureResourceSettings(bookId, originalScriptureSettings_, isNewTestament, originalRepoUrl);
152
162
 
153
163
  if (!enableAlignment) {
154
164
  // if not enabled, then we don't fetch resource
155
165
  originalScriptureSettings.resourceLink = null;
156
- } // get original language for this alignment
157
-
158
-
159
- var originalScriptureResource = useScriptureResources({
160
- bookId: bookId,
161
- scriptureSettings: originalScriptureSettings,
162
- chapter: reference === null || reference === void 0 ? void 0 : reference.chapter,
163
- verse: reference === null || reference === void 0 ? void 0 : reference.verse,
164
- isNewTestament: isNewTestament,
165
- originalRepoUrl: originalRepoUrl,
166
- currentLanguageId: originalScriptureSettings === null || originalScriptureSettings === void 0 ? void 0 : originalScriptureSettings.languageId,
167
- currentOwner: originalLanguageOwner,
168
- httpConfig: httpConfig
169
- });
170
- var originalVerseObjects = React.useMemo(function () {
171
- var _originalScriptureRes;
166
+ }
172
167
 
168
+ var originalVerseObjects = React.useMemo(function () {
173
169
  // get the original language verseObjects
174
- if ((originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : (_originalScriptureRes = originalScriptureResource.versesForRef) === null || _originalScriptureRes === void 0 ? void 0 : _originalScriptureRes.length) > 1) {
175
- // if multiple verses, then append them together
176
- var verseObjects = [];
170
+ var verseObjects = [];
171
+
172
+ if (originalScriptureBookObjects) {
173
+ // @ts-ignore
174
+ var verses = getVersesForRef(basicReference, originalScriptureBookObjects, originalScriptureBookObjects === null || originalScriptureBookObjects === void 0 ? void 0 : originalScriptureBookObjects.languageId);
177
175
 
178
- var _iterator = _createForOfIteratorHelper(originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.versesForRef),
179
- _step;
176
+ if (verses !== null && verses !== void 0 && verses.length) {
177
+ var _iterator = _createForOfIteratorHelper(verses),
178
+ _step;
180
179
 
181
- try {
182
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
183
- var _verseReference$verse;
180
+ try {
181
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
182
+ var _verseReference$verse;
184
183
 
185
- var verseReference = _step.value;
186
- var origVerseObjects = verseReference === null || verseReference === void 0 ? void 0 : (_verseReference$verse = verseReference.verseData) === null || _verseReference$verse === void 0 ? void 0 : _verseReference$verse.verseObjects;
184
+ var verseReference = _step.value;
185
+ var origVerseObjects = verseReference === null || verseReference === void 0 ? void 0 : (_verseReference$verse = verseReference.verseData) === null || _verseReference$verse === void 0 ? void 0 : _verseReference$verse.verseObjects;
187
186
 
188
- if (origVerseObjects) {
189
- Array.prototype.push.apply(verseObjects, origVerseObjects);
187
+ if (origVerseObjects) {
188
+ Array.prototype.push.apply(verseObjects, origVerseObjects);
189
+ }
190
190
  }
191
+ } catch (err) {
192
+ _iterator.e(err);
193
+ } finally {
194
+ _iterator.f();
191
195
  }
192
- } catch (err) {
193
- _iterator.e(err);
194
- } finally {
195
- _iterator.f();
196
196
  }
197
-
198
- return verseObjects;
199
197
  }
200
198
 
201
- return originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.verseObjects;
202
- }, [originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.verseObjects, originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.versesForRef]);
199
+ return verseObjects;
200
+ }, [originalScriptureBookObjects, chapter, verse, projectId]);
203
201
  React.useEffect(function () {
204
202
  // update alignment status when aligner is hidden
205
203
  var notEmpty = !!initialVerseObjects;
@@ -386,6 +384,7 @@ export function useScriptureAlignmentEdit(_ref) {
386
384
  setState(newState);
387
385
  callSetSavedState(true, newState);
388
386
  } else {
387
+ console.log("saveAlignment() - no alignment changes");
389
388
  setState({
390
389
  alignerData: null,
391
390
  editing: false
@@ -400,7 +399,7 @@ export function useScriptureAlignmentEdit(_ref) {
400
399
  function cancelAlignment() {
401
400
  console.log("cancelAlignment()");
402
401
  var targetVerseUSFM = getCurrentVerseUsfm(updatedVerseObjects, initialVerseObjects, verseTextChanged, newVerseText);
403
- var aligned = isUsfmAligned(targetVerseUSFM, originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.verseObjects);
402
+ var aligned = isUsfmAligned(targetVerseUSFM, originalVerseObjects);
404
403
  setState({
405
404
  alignerData: null,
406
405
  aligned: aligned
@@ -411,6 +410,7 @@ export function useScriptureAlignmentEdit(_ref) {
411
410
  * @param {boolean} editing_ - if true, editor is shown, otherwise editor is hidden
412
411
  * @param {string} _newVerseText - optional verse text
413
412
  */
413
+ // eslint-disable-next-line require-await
414
414
 
415
415
 
416
416
  function setEditing(_x) {
@@ -427,7 +427,13 @@ export function useScriptureAlignmentEdit(_ref) {
427
427
  function _setEditing() {
428
428
  _setEditing = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(editing_) {
429
429
  var _newVerseText,
430
+ _updatedVerseObjects,
431
+ _verseTextChanged,
430
432
  newState,
433
+ verseText,
434
+ _AlignmentHelpers$upd4,
435
+ targetVerseObjects,
436
+ _alignmentsChanged,
431
437
  _args2 = arguments;
432
438
 
433
439
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
@@ -436,31 +442,40 @@ export function useScriptureAlignmentEdit(_ref) {
436
442
  case 0:
437
443
  _newVerseText = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : newVerseText;
438
444
 
439
- if (!enableEdit) {
440
- _context2.next = 6;
441
- break;
442
- }
443
-
444
- if (!(editing_ && !editing)) {
445
- _context2.next = 5;
446
- break;
447
- }
448
-
449
- _context2.next = 5;
450
- return startEditBranch();
451
-
452
- case 5:
453
- if (editing_ !== editing) {
454
- _newVerseText = _newVerseText || initialVerseText;
455
- newState = {
456
- editing: editing_,
457
- newVerseText: _newVerseText
458
- };
459
- setState(newState);
460
- callSetSavedState(_newVerseText !== initialVerseText, newState);
445
+ if (enableEdit) {
446
+ if (editing_ !== editing) {
447
+ _newVerseText = _newVerseText || initialVerseText;
448
+ _updatedVerseObjects = updatedVerseObjects;
449
+ _verseTextChanged = _newVerseText !== initialVerseText;
450
+ newState = {
451
+ editing: editing_,
452
+ newVerseText: _newVerseText,
453
+ verseTextChanged: _verseTextChanged
454
+ };
455
+
456
+ if (!_verseTextChanged) {
457
+ // fallback to make sure text from verseObjects matches current text
458
+ verseText = UsfmFileConversionHelpers.getUsfmForVerseContent({
459
+ verseObjects: currentVerseObjects
460
+ });
461
+
462
+ if (verseText !== _newVerseText) {
463
+ // if text from verse objects does not match latest text
464
+ // apply alignment to current text
465
+ _AlignmentHelpers$upd4 = AlignmentHelpers.updateAlignmentsToTargetVerse(currentVerseObjects, _newVerseText), targetVerseObjects = _AlignmentHelpers$upd4.targetVerseObjects;
466
+ _updatedVerseObjects = targetVerseObjects; // update verseObjects to match current text
467
+
468
+ newState['updatedVerseObjects'] = _updatedVerseObjects;
469
+ }
470
+ }
471
+
472
+ setState(newState);
473
+ _alignmentsChanged = _updatedVerseObjects && !isEqual(initialVerseObjects, _updatedVerseObjects);
474
+ callSetSavedState(_verseTextChanged || _alignmentsChanged, newState);
475
+ }
461
476
  }
462
477
 
463
- case 6:
478
+ case 2:
464
479
  case "end":
465
480
  return _context2.stop();
466
481
  }
@@ -471,15 +486,13 @@ export function useScriptureAlignmentEdit(_ref) {
471
486
  }
472
487
 
473
488
  function setVerseChanged(changed, newVerseText, _initialVerseText) {
474
- var _AlignmentHelpers$upd3 = AlignmentHelpers.updateAlignmentsToTargetVerse(initialVerseObjects, newVerseText),
489
+ var _AlignmentHelpers$upd3 = AlignmentHelpers.updateAlignmentsToTargetVerse(currentVerseObjects, newVerseText),
475
490
  targetVerseText = _AlignmentHelpers$upd3.targetVerseText;
476
491
 
477
- var aligned = isUsfmAligned(targetVerseText, originalScriptureResource === null || originalScriptureResource === void 0 ? void 0 : originalScriptureResource.verseObjects);
478
-
479
- var _changed = newVerseText !== initialVerseText;
480
-
492
+ var aligned = isUsfmAligned(targetVerseText, originalVerseObjects);
493
+ var verseTextChanged = newVerseText !== initialVerseText;
481
494
  setState({
482
- verseTextChanged: _changed,
495
+ verseTextChanged: verseTextChanged,
483
496
  newVerseText: newVerseText,
484
497
  aligned: aligned
485
498
  });
@@ -547,6 +560,7 @@ export function useScriptureAlignmentEdit(_ref) {
547
560
  return {
548
561
  actions: {
549
562
  cancelAlignment: cancelAlignment,
563
+ clearChanges: clearChanges,
550
564
  getChanges: getChanges,
551
565
  handleAlignmentClick: handleAlignmentClick,
552
566
  onAlignmentsChange: onAlignmentsChange,
@@ -562,13 +576,13 @@ export function useScriptureAlignmentEdit(_ref) {
562
576
  initialVerseText: initialVerseText,
563
577
  initialVerseObjects: initialVerseObjects,
564
578
  newVerseText: newVerseText,
579
+ reference: basicReference,
565
580
  sourceLanguage: sourceLanguage,
566
581
  targetLanguage: targetLanguage,
582
+ title: title,
567
583
  unsavedChanges: unsavedChanges,
568
- verseTextChanged: verseTextChanged,
569
- reference: reference,
570
- title: title
584
+ verseTextChanged: verseTextChanged
571
585
  }
572
586
  };
573
587
  }
574
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0LnRzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIkFsaWdubWVudEhlbHBlcnMiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwidXNmbUhlbHBlcnMiLCJpc0VxdWFsIiwiU2NyaXB0dXJlQ29uZmlnIiwiU2NyaXB0dXJlUmVmZXJlbmNlIiwiU2VydmVyQ29uZmlnIiwiZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyIsIk9SSUdJTkFMX1NPVVJDRSIsInVzZVNjcmlwdHVyZVJlc291cmNlcyIsImlzVXNmbUFsaWduZWQiLCJ0YXJnZXRWZXJzZVVTRk0iLCJvcmlnaW5hbFZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImV4dHJhY3RBbGlnbm1lbnRzRnJvbVRhcmdldFZlcnNlIiwiYWxpZ25tZW50cyIsIndvcmRCYW5rIiwiYXJlQWxnbm1lbnRzQ29tcGxldGUiLCJnZXRDdXJyZW50VmVyc2VVc2ZtIiwidXBkYXRlZFZlcnNlT2JqZWN0cyIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJ2ZXJzZVRleHRDaGFuZ2VkIiwibmV3VmVyc2VUZXh0IiwiY3VycmVudFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlVGV4dCIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJ1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0IiwiY3VycmVudEluZGV4IiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsImh0dHBDb25maWciLCJpbml0aWFsVmVyc2VUZXh0IiwiaXNOZXdUZXN0YW1lbnQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJvcmlnaW5hbFJlcG9VcmwiLCJyZWZlcmVuY2UiLCJzY3JpcHR1cmVDb25maWciLCJzY3JpcHR1cmVTZXR0aW5ncyIsInNldFNhdmVkQ2hhbmdlcyIsInNvdXJjZUxhbmd1YWdlIiwic3RhcnRFZGl0QnJhbmNoIiwidGFyZ2V0TGFuZ3VhZ2UiLCJ0aXRsZSIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsInVzZVN0YXRlIiwiYWxpZ25lZCIsImFsaWduZXJEYXRhIiwiZWRpdGluZyIsIm5ld0FsaWdubWVudHMiLCJzdGF0ZSIsInNldFN0YXRlXyIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJjbGVhckNoYW5nZXMiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFyU3RhdGUiLCJvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzXyIsInJlc291cmNlSWQiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzIiwicmVzb3VyY2VMaW5rIiwib3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZSIsImNoYXB0ZXIiLCJ2ZXJzZSIsImN1cnJlbnRMYW5ndWFnZUlkIiwibGFuZ3VhZ2VJZCIsImN1cnJlbnRPd25lciIsInVzZU1lbW8iLCJ2ZXJzZXNGb3JSZWYiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZVJlZmVyZW5jZSIsIm9yaWdWZXJzZU9iamVjdHMiLCJ2ZXJzZURhdGEiLCJBcnJheSIsInByb3RvdHlwZSIsInB1c2giLCJhcHBseSIsInVzZUVmZmVjdCIsIm5vdEVtcHR5IiwiYWxpZ25lZF8iLCJyZXN1bHRzIiwiZ2V0Q2hhbmdlcyIsIl9uZXdTdGF0ZSIsInVwZGF0ZWRWZXJzZU9iamVjdHNfIiwidXBkYXRlVmVyc2VXaXRoTmV3QWxpZ25tZW50cyIsInRhcmdldFZlcnNlT2JqZWN0cyIsInJlZiIsImhhbmRsZUFsaWdubWVudENsaWNrIiwiX2FsaWduZXJEYXRhIiwib3JpZ2luYWxWZXJzZVVzZm0iLCJwYXJzZVVzZm1Ub1dvcmRBbGlnbmVyRGF0YSIsInRhcmdldFdvcmRzIiwidmVyc2VBbGlnbm1lbnRzIiwiX25ld0FsaWdubWVudHMiLCJ2ZXJzZVVzZm0iLCJhZGRBbGlnbm1lbnRzVG9WZXJzZVVTRk0iLCJhbGlnbmVkVmVyc2VPYmplY3RzIiwidXNmbVZlcnNlVG9Kc29uIiwic2F2ZUFsaWdubWVudCIsImNhbGxTZXRTYXZlZFN0YXRlIiwiY2FuY2VsQWxpZ25tZW50Iiwic2V0RWRpdGluZyIsImVkaXRpbmdfIiwiX25ld1ZlcnNlVGV4dCIsInNldFZlcnNlQ2hhbmdlZCIsImNoYW5nZWQiLCJfaW5pdGlhbFZlcnNlVGV4dCIsIl9jaGFuZ2VkIiwiY3VycmVudFZlcnNlT2JqZWN0cyIsInVuc2F2ZWRDaGFuZ2VzIiwidW5zYXZlZENoYW5nZXNfIiwib25BbGlnbm1lbnRzQ2hhbmdlIiwiYWxpZ25tZW50Q29tcGxldGUiLCJhY3Rpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLE9BQU8sS0FBS0EsS0FBWixNQUF1QixPQUF2QjtBQUNBLFNBQ0VDLGdCQURGLEVBRUVDLHlCQUZGLEVBR0VDLFdBSEYsUUFJTyxrQkFKUDtBQUtBLE9BQU8sS0FBS0MsT0FBWixNQUF5QixZQUF6QjtBQUNBLFNBQ0VDLGVBREYsRUFFRUMsa0JBRkYsRUFHRUMsWUFIRixRQUlPLFVBSlA7QUFLQSxTQUFTQyw0QkFBVCxRQUE2Qyw0QkFBN0M7QUFDQSxTQUFTQyxlQUFULFFBQWdDLFVBQWhDO0FBQ0EsT0FBT0MscUJBQVAsTUFBa0MseUJBQWxDOztBQW1EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsYUFBVCxDQUF1QkMsZUFBdkIsRUFBd0NDLG9CQUF4QyxFQUE4RDtBQUFBOztBQUM1REEsRUFBQUEsb0JBQW9CLEdBQUcseUJBQUFBLG9CQUFvQixVQUFwQiw4REFBc0JDLE1BQXRCLEdBQStCRCxvQkFBL0IsR0FBc0QsSUFBN0UsQ0FENEQsQ0FDc0I7O0FBRHRCLDhCQUUzQlosZ0JBQWdCLENBQUNjLGdDQUFqQixDQUFrREgsZUFBbEQsRUFBbUVDLG9CQUFuRSxDQUYyQjtBQUFBLE1BRXBERyxVQUZvRCx5QkFFcERBLFVBRm9EO0FBQUEsTUFFeENDLFFBRndDLHlCQUV4Q0EsUUFGd0M7O0FBRzVELFNBQU9o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dHMtaWdub3JlXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIEFsaWdubWVudEhlbHBlcnMsXG4gIFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMsXG4gIHVzZm1IZWxwZXJzLFxufSBmcm9tICd3b3JkLWFsaWduZXItcmNsJ1xuaW1wb3J0ICogYXMgaXNFcXVhbCBmcm9tICdkZWVwLWVxdWFsJ1xuaW1wb3J0IHtcbiAgU2NyaXB0dXJlQ29uZmlnLFxuICBTY3JpcHR1cmVSZWZlcmVuY2UsXG4gIFNlcnZlckNvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXRTY3JpcHR1cmVSZXNvdXJjZVNldHRpbmdzIH0gZnJvbSAnLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQgeyBPUklHSU5BTF9TT1VSQ0UgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB1c2VTY3JpcHR1cmVSZXNvdXJjZXMgZnJvbSAnLi91c2VTY3JpcHR1cmVSZXNvdXJjZXMnXG5cbmludGVyZmFjZSBTdGFydEVkaXQge1xuICAoKTogUHJvbWlzZTxzdHJpbmc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdHVyZUFMaWdubWVudEVkaXRQcm9wcyB7XG4gIC8vIGN1cnJlbnQgdmVyc2Ugc2VsZWN0ZWQgZnJvbSBpbml0aWFsVmVyc2VPYmplY3RzW11cbiAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gIC8vIHJlZmVyZW5jZSBmb3IgdmVyc2Ugc2VsZWN0ZWQgZm9yIGFsaWdubWVudFxuICBjdXJyZW50VmVyc2VSZWY6IFNjcmlwdHVyZVJlZmVyZW5jZSxcbiAgLy8gaWYgdHJ1ZSB0aGVuIGVkaXRpbmcgaXMgYWxsb3dlZFxuICBlbmFibGVFZGl0OiBib29sZWFuLFxuICAvLyBpZiB0cnVlIHRoZW4gYWxpZ25tZW50IGlzIGFsbG93ZWRcbiAgZW5hYmxlQWxpZ25tZW50OiBib29sZWFuLFxuICAvLyBjb25maWd1cmF0aW9uIHRvIHVzZSBmb3IgaHR0cCBjb21tdW5pY2F0aW9uXG4gIGh0dHBDb25maWc6IFNlcnZlckNvbmZpZyxcbiAgLy8gYXJyYXkgb2YgZWFjaCB2ZXJzZSBmb3IgaW4gcmVmZXJlbmNlIHJhbmdlXG4gIGluaXRpYWxWZXJzZU9iamVjdHM6IFtdLFxuICAvLyBpbml0aWFsIHRleHQgZm9yIHZlcnNlXG4gIGluaXRpYWxWZXJzZVRleHQ6IHN0cmluZyxcbiAgLy8gZmxhZyB0aGF0IHdlIGFyZSB3b3JraW5nIG9uIE5UIGJvb2tcbiAgaXNOZXdUZXN0YW1lbnQ6IGJvb2xlYW4sXG4gIC8vIHVzZXIgbmFtZSBvZiBsb2dnZWQgaW4gdXNlclxuICBsb2dnZWRJblVzZXI6IHN0cmluZyxcbiAgLy8gb3duZXIgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgb3JpZ2luYWwgbGFuZ3VhZ2UgcmVzb3VyY2VzXG4gIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogc3RyaW5nLFxuICAvLyB1cmwgZm9yIHRoZSBvcmlnaW5hbCBsYW5ndWFnZSByZXBvXG4gIG9yaWdpbmFsUmVwb1VybDogc3RyaW5nLFxuICAvKiogY3VycmVudCByZWZlcmVuY2UgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvLyBkZXRhaWxzIGFib3V0IHRoZSBjdXJyZW50IHNjcmlwdHVyZSBsb2FkZWRcbiAgc2NyaXB0dXJlQ29uZmlnOiBTY3JpcHR1cmVDb25maWcsXG4gIC8vIHNldHRpbmdzIHRvIGJlIHVzZWQgZm9yIHNjcmlwdHVyZVxuICBzY3JpcHR1cmVTZXR0aW5nczogeyB9LFxuICAvLyBjYWxsYmFjayB0byBzYXZlIGN1cnJlbnQgdmVyc2UgZWRpdCBhbmQgYWxpZ25tZW50IGNoYW5nZXNcbiAgc2V0U2F2ZWRDaGFuZ2VzOiBGdW5jdGlvbixcbiAgLy8gY2FsbGJhY2sgdG8gY3JlYXRlIGEgdXNlciBicmFuY2ggZm9yIHNhdmluZyBlZGl0IGRhdGFcbiAgc3RhcnRFZGl0QnJhbmNoOiBTdGFydEVkaXQsXG4gIC8vIGluZGV4IHRvIHVzZSBmb3IgYm9vayAoZS5nLiBgMDFgIGZvciBgR0VOYClcbiAgYm9va0luZGV4OiBzdHJpbmcsXG4gIC8vIGJyYW5jaCBuYW1lIGN1cnJlbnRseSBiZWluZyB1c2VkIChlLmcuIGBtYXN0ZXJgIG9yIHVzZXIgYnJhbmNoKVxuICB3b3JraW5nUmVzb3VyY2VCcmFuY2g6IHN0cmluZyxcbiAgLy8gY3VycmVudCB0YXJnZXQgbGFuZ3VhZ2VcbiAgdGFyZ2V0TGFuZ3VhZ2U6IG9iamVjdCxcbiAgLy8gc291cmNlIGxhbmd1YWdlXG4gIHNvdXJjZUxhbmd1YWdlOiBzdHJpbmcsXG4gIC8vIHRpdGxlIHRvIHNob3cgaW4gYWxpZ25tZW50XG4gIHRpdGxlOiBzdHJpbmcsXG59XG5cbi8qKlxuICogZGV0ZXJtaW5lcyBpZiBhbGlnbm1lbnQgaXMgY29tcGxldGUgYmFzZWQgb24gdGFyZ2V0IFVTRk0gYW5kIG9yaWdpbmFsIGxhbmd1YWdlIHZlcnNlIG9iamVjdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRWZXJzZVVTRk1cbiAqIEBwYXJhbSB7b2JqZWN0W119IG9yaWdpbmFsVmVyc2VPYmplY3RzXG4gKi9cbmZ1bmN0aW9uIGlzVXNmbUFsaWduZWQodGFyZ2V0VmVyc2VVU0ZNLCBvcmlnaW5hbFZlcnNlT2JqZWN0cykge1xuICBvcmlnaW5hbFZlcnNlT2JqZWN0cyA9IG9yaWdpbmFsVmVyc2VPYmplY3RzPy5sZW5ndGggPyBvcmlnaW5hbFZlcnNlT2JqZWN0cyA6IG51bGwgLy8gbWFrZSBzdXJlIG5vdCBwYXNzaW5nIGVtcHR5IEFycmF5XG4gIGNvbnN0IHsgYWxpZ25tZW50cywgd29yZEJhbmsgfSA9IEFsaWdubWVudEhlbHBlcnMuZXh0cmFjdEFsaWdubWVudHNGcm9tVGFyZ2V0VmVyc2UodGFyZ2V0VmVyc2VVU0ZNLCBvcmlnaW5hbFZlcnNlT2JqZWN0cylcbiAgcmV0dXJuIEFsaWdubWVudEhlbHBlcnMuYXJlQWxnbm1lbnRzQ29tcGxldGUod29yZEJhbmssIGFsaWdubWVudHMpXG59XG5cbi8qKlxuICogZ2V0IHRoZSB1cGRhdGVkIFVTRk0gZm9yIHRhcmdldCB2ZXJzZSBmcm9tIHRoZSB1cGRhdGVkIHZlcnNlIG9iamVjdHMgYW5kIGxhdGVzdCB0ZXh0XG4gKiBAcGFyYW0ge29iamVjdFtdfSB1cGRhdGVkVmVyc2VPYmplY3RzXG4gKiBAcGFyYW0ge29iamVjdFtdfSBpbml0aWFsVmVyc2VPYmplY3RzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZlcnNlVGV4dENoYW5nZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdWZXJzZVRleHRcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudFZlcnNlVXNmbSh1cGRhdGVkVmVyc2VPYmplY3RzLCBpbml0aWFsVmVyc2VPYmplY3RzLCB2ZXJzZVRleHRDaGFuZ2VkOiBib29sZWFuLCBuZXdWZXJzZVRleHQpIHtcbiAgbGV0IHRhcmdldFZlcnNlVVNGTSA9IG51bGxcbiAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcblxuICBpZiAodmVyc2VUZXh0Q2hhbmdlZCAmJiBuZXdWZXJzZVRleHQpIHtcbiAgICBjb25zdCB7IHRhcmdldFZlcnNlVGV4dCB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZShjdXJyZW50VmVyc2VPYmplY3RzXywgbmV3VmVyc2VUZXh0KVxuICAgIHRhcmdldFZlcnNlVVNGTSA9IHRhcmdldFZlcnNlVGV4dFxuICB9IGVsc2Uge1xuICAgIHRhcmdldFZlcnNlVVNGTSA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShjdXJyZW50VmVyc2VPYmplY3RzXylcbiAgfVxuICByZXR1cm4gdGFyZ2V0VmVyc2VVU0ZNXG59XG5cbi8vIG1hbmFnZSB2ZXJzZSBlZGl0IGFuZCBhbGlnbm1lbnQgc3RhdGVzXG5leHBvcnQgZnVuY3Rpb24gdXNlU2NyaXB0dXJlQWxpZ25tZW50RWRpdCh7XG4gIGN1cnJlbnRJbmRleCxcbiAgZW5hYmxlRWRpdCxcbiAgZW5hYmxlQWxpZ25tZW50LFxuICBodHRwQ29uZmlnLFxuICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICBpbml0aWFsVmVyc2VUZXh0LFxuICBpc05ld1Rlc3RhbWVudCxcbiAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICBvcmlnaW5hbFJlcG9VcmwsXG4gIHJlZmVyZW5jZSxcbiAgc2NyaXB0dXJlQ29uZmlnLFxuICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgc2V0U2F2ZWRDaGFuZ2VzLFxuICBzb3VyY2VMYW5ndWFnZSxcbiAgc3RhcnRFZGl0QnJhbmNoLFxuICB0YXJnZXRMYW5ndWFnZSxcbiAgdGl0bGUsXG4gIHdvcmtpbmdSZXNvdXJjZUJyYW5jaCxcbn0gOiBTY3JpcHR1cmVBTGlnbm1lbnRFZGl0UHJvcHMpIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGFsaWduZWQ6IGZhbHNlLFxuICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgIG5ld0FsaWdubWVudHM6IG51bGwsXG4gICAgbmV3VmVyc2VUZXh0OiBudWxsLFxuICAgIHVwZGF0ZWRWZXJzZU9iamVjdHM6IG51bGwsXG4gICAgdmVyc2VUZXh0Q2hhbmdlZDogZmFsc2UsXG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIGFsaWduZWQsXG4gICAgYWxpZ25lckRhdGEsXG4gICAgZWRpdGluZyxcbiAgICBuZXdBbGlnbm1lbnRzLFxuICAgIG5ld1ZlcnNlVGV4dCxcbiAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgIHZlcnNlVGV4dENoYW5nZWQsXG4gIH0gPSBzdGF0ZVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJDaGFuZ2VzKCkge1xuICAgIGNvbnNvbGUubG9nKGBjbGVhckNoYW5nZXMoKSAtICR7SlNPTi5zdHJpbmdpZnkocmVmZXJlbmNlKX1gKVxuICAgIGNvbnN0IGNsZWFyU3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICBuZXdBbGlnbm1lbnRzOiBudWxsLFxuICAgICAgbmV3VmVyc2VUZXh0OiBudWxsLFxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogbnVsbCxcbiAgICAgIHZlcnNlVGV4dENoYW5nZWQ6IGZhbHNlLFxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChzdGF0ZSwgY2xlYXJTdGF0ZSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGByZWZlcmVuY2UgY2hhbmdlZCwgcmVzZXQgZWRpdC9hbGlnbm1lbnQgc3RhdGUgdmFyaWFibGVzYClcbiAgICAgIHNldFN0YXRlKGNsZWFyU3RhdGUpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5nc18gPSB7XG4gICAgLi4uc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgcmVzb3VyY2VJZDogT1JJR0lOQUxfU09VUkNFLFxuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBodHRwQ29uZmlnID0gaHR0cENvbmZpZyB8fCB7fVxuICBjb25zdCBib29rSWQgPSByZWZlcmVuY2U/LnByb2plY3RJZFxuICBjb25zdCBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzID0gZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyhcbiAgICBib29rSWQsIG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3NfLCBpc05ld1Rlc3RhbWVudCwgb3JpZ2luYWxSZXBvVXJsLFxuICApXG5cbiAgaWYgKCFlbmFibGVBbGlnbm1lbnQpIHsgLy8gaWYgbm90IGVuYWJsZWQsIHRoZW4gd2UgZG9uJ3QgZmV0Y2ggcmVzb3VyY2VcbiAgICBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzLnJlc291cmNlTGluayA9IG51bGxcbiAgfVxuXG4gIC8vIGdldCBvcmlnaW5hbCBsYW5ndWFnZSBmb3IgdGhpcyBhbGlnbm1lbnRcbiAgY29uc3Qgb3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZSA9IHVzZVNjcmlwdHVyZVJlc291cmNlcyh7XG4gICAgYm9va0lkLFxuICAgIHNjcmlwdHVyZVNldHRpbmdzOiBvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzLFxuICAgIGNoYXB0ZXI6IHJlZmVyZW5jZT8uY2hhcHRlcixcbiAgICB2ZXJzZTogcmVmZXJlbmNlPy52ZXJzZSxcbiAgICBpc05ld1Rlc3RhbWVudCxcbiAgICBvcmlnaW5hbFJlcG9VcmwsXG4gICAgY3VycmVudExhbmd1YWdlSWQ6IG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3M/Lmxhbmd1YWdlSWQsXG4gICAgY3VycmVudE93bmVyOiBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgaHR0cENvbmZpZyxcbiAgfSlcblxuICBjb25zdCBvcmlnaW5hbFZlcnNlT2JqZWN0cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4geyAvLyBnZXQgdGhlIG9yaWdpbmFsIGxhbmd1YWdlIHZlcnNlT2JqZWN0c1xuICAgIGlmIChvcmlnaW5hbFNjcmlwdHVyZVJlc291cmNlPy52ZXJzZXNGb3JSZWY/Lmxlbmd0aCA+IDEpIHsgLy8gaWYgbXVsdGlwbGUgdmVyc2VzLCB0aGVuIGFwcGVuZCB0aGVtIHRvZ2V0aGVyXG4gICAgICBjb25zdCB2ZXJzZU9iamVjdHMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IHZlcnNlUmVmZXJlbmNlIG9mIG9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2U/LnZlcnNlc0ZvclJlZikge1xuICAgICAgICBjb25zdCBvcmlnVmVyc2VPYmplY3RzID0gdmVyc2VSZWZlcmVuY2U/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzXG5cbiAgICAgICAgaWYgKG9yaWdWZXJzZU9iamVjdHMpIHtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh2ZXJzZU9iamVjdHMsIG9yaWdWZXJzZU9iamVjdHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2ZXJzZU9iamVjdHNcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2U/LnZlcnNlT2JqZWN0c1xuICB9LCBbb3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZT8udmVyc2VPYmplY3RzLCBvcmlnaW5hbFNjcmlwdHVyZVJlc291cmNlPy52ZXJzZXNGb3JSZWZdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBhbGlnbm1lbnQgc3RhdHVzIHdoZW4gYWxpZ25lciBpcyBoaWRkZW5cbiAgICBjb25zdCBub3RFbXB0eSA9ICEhaW5pdGlhbFZlcnNlT2JqZWN0c1xuICAgIGxldCBhbGlnbmVkXyA9IGZhbHNlXG5cbiAgICBpZiAoIWFsaWduZXJEYXRhKSB7IC8vIHNraXAgaWYgYWxpZ25lciBpcyBiZWluZyBzaG93blxuICAgICAgaWYgKG5vdEVtcHR5KSB7IC8vIHNraXAgaWYgZW1wdHlcbiAgICAgICAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcblxuICAgICAgICBpZiAoIWVuYWJsZUFsaWdubWVudCkge1xuICAgICAgICAgIGFsaWduZWRfID0gdHJ1ZVxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZlcnNlVGV4dCAmJiAobmV3VmVyc2VUZXh0ICE9PSBpbml0aWFsVmVyc2VUZXh0KSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGN1cnJlbnRWZXJzZU9iamVjdHNfLCBuZXdWZXJzZVRleHQpXG4gICAgICAgICAgYWxpZ25lZF8gPSBpc1VzZm1BbGlnbmVkKHJlc3VsdHM/LnRhcmdldFZlcnNlVGV4dCwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0VmVyc2VVU0ZNID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKGN1cnJlbnRWZXJzZU9iamVjdHNfKVxuICAgICAgICAgIGFsaWduZWRfID0gaXNVc2ZtQWxpZ25lZCh0YXJnZXRWZXJzZVVTRk0sIG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGlnbmVkICE9PSBhbGlnbmVkXykge1xuICAgICAgICBzZXRTdGF0ZSh7IGFsaWduZWQ6IGFsaWduZWRfIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbaW5pdGlhbFZlcnNlT2JqZWN0cywgYWxpZ25lckRhdGEsIG5ld1ZlcnNlVGV4dCwgaW5pdGlhbFZlcnNlVGV4dCwgZW5hYmxlQWxpZ25tZW50LCBvcmlnaW5hbFZlcnNlT2JqZWN0c10pXG5cbiAgLyoqXG4gICAqIGdldCBjaGFuZ2VzIGZvciBzYXZpbmdcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlIC0gb3B0aW9uYWxseSBwYXNzIGluIG5ldyBzdGF0ZSAodG8gb3ZlcnJpZGUgc3RhdGUpXG4gICAqL1xuICBmdW5jdGlvbiBnZXRDaGFuZ2VzKG5ld1N0YXRlID0ge30pIHtcbiAgICBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIHN0YXJ0ZWQgJHtjdXJyZW50SW5kZXh9IC0gcGFzc2VkIHN0YXRlYCwgbmV3U3RhdGUpXG4gICAgY29uc3QgX25ld1N0YXRlID0ge1xuICAgICAgc3RhdGUsXG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG5ld0FsaWdubWVudHMsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdmVyc2VUZXh0Q2hhbmdlZCxcbiAgICB9ID0gX25ld1N0YXRlXG4gICAgbGV0IHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c1xuXG4gICAgaWYgKG5ld0FsaWdubWVudHMpIHsgLy8gaWYgdW5zYXZlZCBhbGlnbm1lbnQgY2hhbmdlcywgYXBwbHkgdGhlbVxuICAgICAgY29uc29sZS5sb2coYGdldENoYW5nZXMgLSBhcHBseWluZyB1bnNhdmVkIGFsaWdubWVudHN9YClcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdXBkYXRlVmVyc2VXaXRoTmV3QWxpZ25tZW50cygpXG4gICAgfVxuXG4gICAgaWYgKHZlcnNlVGV4dENoYW5nZWQgJiYgbmV3VmVyc2VUZXh0KSB7XG4gICAgICBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIGFwcGx5aW5nIG5ldyB0ZXh0OmAsIG5ld1ZlcnNlVGV4dClcbiAgICAgIGNvbnN0IGN1cnJlbnRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c18gfHwgaW5pdGlhbFZlcnNlT2JqZWN0c1xuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0c18gJiYgY29uc29sZS5sb2coYGdldENoYW5nZXMgLSBhcHBseWluZyB1cGRhdGVkIGFsaWdubWVudHNgKVxuICAgICAgY29uc3QgeyB0YXJnZXRWZXJzZU9iamVjdHMgfSA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoY3VycmVudFZlcnNlT2JqZWN0c18sIG5ld1ZlcnNlVGV4dClcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdGFyZ2V0VmVyc2VPYmplY3RzXG4gICAgfSBlbHNlIHsgLy8gb25seSBhbGlnbm1lbnQgY2hhbmdlcyB0byB1cGxvYWRcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfICYmIGNvbnNvbGUubG9nKGBnZXRDaGFuZ2VzIC0gYXBwbHlpbmcgdXBkYXRlZCBhbGlnbm1lbnRzYCwgeyBuZXdWZXJzZVRleHQsIHVwZGF0ZWRWZXJzZU9iamVjdHNfIH0pXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNfIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0c18pIHtcbiAgICAgIGNvbnN0IHJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmPy5bY3VycmVudEluZGV4XVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV3VmVyc2VUZXh0LFxuICAgICAgICByZWYsXG4gICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHM6IHVwZGF0ZWRWZXJzZU9iamVjdHNfLFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7fVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBhbGlnbm1lbnQgYnV0dG9uIC0gd2lsbCBzaG93IGlmIG5vdCBhbHJlYWR5IHNob3duXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVBbGlnbm1lbnRDbGljaygpIHtcbiAgICBpZiAoZW5hYmxlQWxpZ25tZW50KSB7XG4gICAgICBsZXQgX2FsaWduZXJEYXRhID0gbnVsbFxuICAgICAgYXdhaXQgc3RhcnRFZGl0QnJhbmNoKClcblxuICAgICAgaWYgKCFhbGlnbmVyRGF0YSkgeyAvLyBpZiB3b3JkIGFsaWduZXIgbm90IHNob3duXG4gICAgICAgIGNvbnNvbGUubG9nKGBoYW5kbGVBbGlnbm1lbnRDbGljayAtIHRvZ2dsZSBPTiBhbGlnbm1lbnRgKVxuICAgICAgICBjb25zdCB0YXJnZXRWZXJzZVVTRk0gPSBnZXRDdXJyZW50VmVyc2VVc2ZtKHVwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgbGV0IG9yaWdpbmFsVmVyc2VVc2ZtID0gbnVsbFxuXG4gICAgICAgIGlmIChvcmlnaW5hbFZlcnNlT2JqZWN0cykge1xuICAgICAgICAgIG9yaWdpbmFsVmVyc2VVc2ZtID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHRhcmdldFdvcmRzOiB3b3JkQmFuayxcbiAgICAgICAgICB2ZXJzZUFsaWdubWVudHM6IGFsaWdubWVudHMsXG4gICAgICAgIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnBhcnNlVXNmbVRvV29yZEFsaWduZXJEYXRhKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZVVzZm0pXG4gICAgICAgIF9hbGlnbmVyRGF0YSA9IHsgd29yZEJhbmssIGFsaWdubWVudHMgfVxuICAgICAgfSBlbHNlIHsgLy8gd29yZCBhbGlnbmVyIGN1cnJlbnRseSBzaG93blxuICAgICAgICBjb25zb2xlLmxvZyhgaGFuZGxlQWxpZ25tZW50Q2xpY2sgLSBhbGlnbm1lbnQgYWxyZWFkeSBzaG93bmApXG4gICAgICAgIF9hbGlnbmVyRGF0YSA9IGFsaWduZXJEYXRhXG4gICAgICB9XG4gICAgICBzZXRTdGF0ZSh7IGFsaWduZXJEYXRhOiBfYWxpZ25lckRhdGEgfSlcbiAgICAgIGNvbnNvbGUubG9nKF9hbGlnbmVyRGF0YSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHVwZGF0ZWQgdmVyc2Ugb2JqZWN0cyBhZnRlciBhbGlnbm1lbnRzIGNoYW5nZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IF9uZXdBbGlnbm1lbnRzIC0gcmVzdWx0cyBvZiBhbGlnbmVyXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzKF9uZXdBbGlnbm1lbnRzID0gbmV3QWxpZ25tZW50cykge1xuICAgIGNvbnN0IGN1cnJlbnRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0cyB8fCBpbml0aWFsVmVyc2VPYmplY3RzXG4gICAgY29uc3QgdGFyZ2V0VmVyc2VUZXh0ID0gbmV3VmVyc2VUZXh0IHx8IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShjdXJyZW50VmVyc2VPYmplY3RzXylcbiAgICBjb25zdCB2ZXJzZVVzZm0gPSBBbGlnbm1lbnRIZWxwZXJzLmFkZEFsaWdubWVudHNUb1ZlcnNlVVNGTShfbmV3QWxpZ25tZW50cy50YXJnZXRXb3JkcywgX25ld0FsaWdubWVudHMudmVyc2VBbGlnbm1lbnRzLCB0YXJnZXRWZXJzZVRleHQpXG4gICAgY29uc3QgYWxpZ25lZFZlcnNlT2JqZWN0cyA9IHVzZm1IZWxwZXJzLnVzZm1WZXJzZVRvSnNvbih2ZXJzZVVzZm0pXG4gICAgcmV0dXJuIGFsaWduZWRWZXJzZU9iamVjdHNcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayBmb3Igd2hlbiB1c2VyIGNsaWNrZWQgb24gYnV0dG9uIHRvIHNhdmUgY3VycmVudCBhbGlnbm1lbnRzIGluIHdvcmQgYWxpZ25lci4gIEdlbmVyYXRlcyBuZXcgdmVyc2UgY29udGVudCBhbmQgc2F2ZXMgaW4gc3RhdGUuIENsb3NlcyBhbGlnbmVyIGRpc3BsYXlcbiAgICogQHBhcmFtIHtvYmplY3R9IF9uZXdBbGlnbm1lbnRzIC0gcmVzdWx0cyBvZiBhbGlnbmVyXG4gICAqL1xuICBmdW5jdGlvbiBzYXZlQWxpZ25tZW50KF9uZXdBbGlnbm1lbnRzID0gbmV3QWxpZ25tZW50cykge1xuICAgIGNvbnNvbGUubG9nKGBzYXZlQWxpZ25tZW50KCkgLSBuZXdBbGlnbm1lbnRzYCwgX25ld0FsaWdubWVudHMpXG5cbiAgICBpZiAoX25ld0FsaWdubWVudHMpIHtcbiAgICAgIGNvbnN0IGFsaWduZWRWZXJzZU9iamVjdHMgPSB1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzKF9uZXdBbGlnbm1lbnRzKVxuICAgICAgY29uc29sZS5sb2coYHNhdmVBbGlnbm1lbnQoKSAtIGFsaWduZWRWZXJzZU9iamVjdHNgLCBhbGlnbmVkVmVyc2VPYmplY3RzKVxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgbmV3QWxpZ25tZW50czogbnVsbCxcbiAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogYWxpZ25lZFZlcnNlT2JqZWN0cyxcbiAgICAgIH1cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgICAgY2FsbFNldFNhdmVkU3RhdGUodHJ1ZSwgbmV3U3RhdGUgKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTdGF0ZSh7XG4gICAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBidXR0b24gdG8gY2FuY2VsIHdvcmsgaW4gd29yZCBhbGlnbmVyLiAgQ2FsY3VsYXRlcyBhbmQgZGlzcGxheXMgY3VycmVudCBhbGlnbm1lbnQgdmFsaWQgc3RhdGUuIENsb3NlcyBhbGlnbmVyIGRpc3BsYXlcbiAgICovXG4gIGZ1bmN0aW9uIGNhbmNlbEFsaWdubWVudCgpIHtcbiAgICBjb25zb2xlLmxvZyhgY2FuY2VsQWxpZ25tZW50KClgKVxuICAgIGNvbnN0IHRhcmdldFZlcnNlVVNGTSA9IGdldEN1cnJlbnRWZXJzZVVzZm0odXBkYXRlZFZlcnNlT2JqZWN0cywgaW5pdGlhbFZlcnNlT2JqZWN0cywgdmVyc2VUZXh0Q2hhbmdlZCwgbmV3VmVyc2VUZXh0KVxuICAgIGNvbnN0IGFsaWduZWQgPSBpc1VzZm1BbGlnbmVkKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxTY3JpcHR1cmVSZXNvdXJjZT8udmVyc2VPYmplY3RzKVxuICAgIHNldFN0YXRlKHsgYWxpZ25lckRhdGE6IG51bGwsIGFsaWduZWQgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayBmb3IgYnV0dG9uIHRvIHNldCBlZGl0aW5nIHN0YXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZWRpdGluZ18gLSBpZiB0cnVlLCBlZGl0b3IgaXMgc2hvd24sIG90aGVyd2lzZSBlZGl0b3IgaXMgaGlkZGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfbmV3VmVyc2VUZXh0IC0gb3B0aW9uYWwgdmVyc2UgdGV4dFxuICAgKi9cbiAgYXN5bmMgZnVuY3Rpb24gc2V0RWRpdGluZyhlZGl0aW5nXywgX25ld1ZlcnNlVGV4dCA9IG5ld1ZlcnNlVGV4dCkge1xuICAgIGlmIChlbmFibGVFZGl0KSB7XG4gICAgICBpZiAoZWRpdGluZ18gJiYgIWVkaXRpbmcpIHtcbiAgICAgICAgYXdhaXQgc3RhcnRFZGl0QnJhbmNoKClcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRpbmdfICE9PSBlZGl0aW5nKSB7XG4gICAgICAgIF9uZXdWZXJzZVRleHQgPSBfbmV3VmVyc2VUZXh0IHx8IGluaXRpYWxWZXJzZVRleHRcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IGVkaXRpbmc6IGVkaXRpbmdfLCBuZXdWZXJzZVRleHQ6IF9uZXdWZXJzZVRleHQgfVxuICAgICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcbiAgICAgICAgY2FsbFNldFNhdmVkU3RhdGUoKF9uZXdWZXJzZVRleHQgIT09IGluaXRpYWxWZXJzZVRleHQpLCBuZXdTdGF0ZSApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZyb20gdGhlIGVkaXQgb25DaGFuZ2UgZXZlbnQgdG8gdXBkYXRlIGVkaXQgc3RhdGUgdmFyaWFibGVzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hhbmdlZCAtIHRydWUgaWYgdGhlIG5ld1ZlcnNlVGV4dCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgaW5pdGlhbFZlcnNlVGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmVyc2VUZXh0IC0gY3VycmVudCBjaGFuZ2VkIHZlcnNlIHRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IF9pbml0aWFsVmVyc2VUZXh0IC0gaW5pdGlhbCB2ZXJzZSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBzZXRWZXJzZUNoYW5nZWQoY2hhbmdlZCwgbmV3VmVyc2VUZXh0LCBfaW5pdGlhbFZlcnNlVGV4dCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VUZXh0IH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGluaXRpYWxWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICBjb25zdCBhbGlnbmVkID0gaXNVc2ZtQWxpZ25lZCh0YXJnZXRWZXJzZVRleHQsIG9yaWdpbmFsU2NyaXB0dXJlUmVzb3VyY2U/LnZlcnNlT2JqZWN0cylcbiAgICBjb25zdCBfY2hhbmdlZCA9IG5ld1ZlcnNlVGV4dCAhPT0gaW5pdGlhbFZlcnNlVGV4dFxuXG4gICAgc2V0U3RhdGUoe1xuICAgICAgdmVyc2VUZXh0Q2hhbmdlZDogX2NoYW5nZWQsXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICBhbGlnbmVkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzID0gUmVhY3QudXNlTWVtbyggKCkgPT4geyAvLyBpZiB2ZXJzZSBoYXMgYmVlbiBlZGl0ZWQgb3IgYWxpZ25tZW50IGNoYW5nZWQsIHRoZW4gZ2VuZXJhdGUgbmV3IHZlcnNlT2JqZWN0cyB0byBkaXNwbGF5IGluIFNjcmlwdHVyZVBhbmVcbiAgICBpZiAoaW5pdGlhbFZlcnNlT2JqZWN0cykge1xuICAgICAgY29uc3QgdGFyZ2V0VmVyc2VVU0ZNID0gZ2V0Q3VycmVudFZlcnNlVXNmbSh1cGRhdGVkVmVyc2VPYmplY3RzLCBpbml0aWFsVmVyc2VPYmplY3RzLCB2ZXJzZVRleHRDaGFuZ2VkLCBuZXdWZXJzZVRleHQpXG4gICAgICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzXyA9IHVzZm1IZWxwZXJzLnVzZm1WZXJzZVRvSnNvbih0YXJnZXRWZXJzZVVTRk0pXG4gICAgICByZXR1cm4gY3VycmVudFZlcnNlT2JqZWN0c19cbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxWZXJzZU9iamVjdHNcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQsIG5ld1ZlcnNlVGV4dF0pXG5cbiAgY29uc3QgdW5zYXZlZENoYW5nZXM6Ym9vbGVhbiA9IFJlYWN0LnVzZU1lbW8oICgpID0+IHsgLy8gaWYgdmVyc2UgaGFzIGJlZW4gZWRpdGVkIG9yIGFsaWdubWVudCBjaGFuZ2VkLCB0aGVuIGluZGljYXRlIHdlIGhhdmUgdW5zYXZlZCBjaGFuZ2VzXG4gICAgY29uc3QgY2hhbmdlZCA9IHZlcnNlVGV4dENoYW5nZWQgfHwgKHVwZGF0ZWRWZXJzZU9iamVjdHMgJiYgIWlzRXF1YWwoaW5pdGlhbFZlcnNlT2JqZWN0cywgdXBkYXRlZFZlcnNlT2JqZWN0cykpXG4gICAgcmV0dXJuIGNoYW5nZWRcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWRdKVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayB0byBzY3JpcHR1cmUgY2FyZCB0byB1cGRhdGVkIHdpdGggbGF0ZXN0IHN0YXRlIGZvciBzYXZpbmdcbiAgICogQHBhcmFtIHtib29sZWFufSB1bnNhdmVkQ2hhbmdlc19cbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlXG4gICAqL1xuICBmdW5jdGlvbiBjYWxsU2V0U2F2ZWRTdGF0ZSh1bnNhdmVkQ2hhbmdlc18sIG5ld1N0YXRlID0geyB9ICkge1xuICAgIGNvbnN0IF9uZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGBjYWxsU2V0U2F2ZWRTdGF0ZSAtIG5ldyBzdGF0ZWAsIF9uZXdTdGF0ZSlcbiAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKGN1cnJlbnRJbmRleCwgIXVuc2F2ZWRDaGFuZ2VzXywgeyBnZXRDaGFuZ2VzLCBjbGVhckNoYW5nZXMsIHN0YXRlOiBfbmV3U3RhdGUgfSlcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHNldCBzYXZlZCBjaGFuZ2VzIHdoZW5ldmVyIHVzZXIgZWRpdHMgdmVyc2UgdGV4dCBvciBhbGlnbm1lbnRzIG9yIGlmIGFsaWdubWVudHMgYXJlIG9wZW5cbiAgICBjb25zdCB1bnNhdmVkQ2hhbmdlc18gPSB1bnNhdmVkQ2hhbmdlcyB8fCBhbGlnbmVyRGF0YVxuICAgIGNhbGxTZXRTYXZlZFN0YXRlKHVuc2F2ZWRDaGFuZ2VzXylcbiAgfSwgW3Vuc2F2ZWRDaGFuZ2VzLCBhbGlnbmVyRGF0YV0pXG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIGFsaWdubWVudHMgYXJlIGJlaW5nIGNoYW5nZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlc3VsdHNcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBhbGlnbm1lbnQgaXMgY29tcGxldGVcbiAgICovXG4gIGZ1bmN0aW9uIG9uQWxpZ25tZW50c0NoYW5nZShyZXN1bHRzKSB7XG4gICAgY29uc29sZS5sb2coYG9uQWxpZ25tZW50c0NoYW5nZSgpIC0gYWxpZ25tZW50IGNoYW5nZWQsIHJlc3VsdHNgLCByZXN1bHRzKSAvLyBtZXJnZSBhbGlnbm1lbnRzIGludG8gdGFyZ2V0IHZlcnNlIGFuZCBjb252ZXJ0IHRvIFVTRk1cbiAgICBjb25zdCB7IHRhcmdldFdvcmRzLCB2ZXJzZUFsaWdubWVudHMgfSA9IHJlc3VsdHNcbiAgICBjb25zdCBhbGlnbm1lbnRDb21wbGV0ZSA9IEFsaWdubWVudEhlbHBlcnMuYXJlQWxnbm1lbnRzQ29tcGxldGUodGFyZ2V0V29yZHMsIHZlcnNlQWxpZ25tZW50cylcbiAgICBjb25zb2xlLmxvZyhgQWxpZ25tZW50cyBhcmUgJHthbGlnbm1lbnRDb21wbGV0ZSA/ICdDT01QTEVURSEnIDogJ2luY29tcGxldGUnfWApXG4gICAgc2V0U3RhdGUoeyBuZXdBbGlnbm1lbnRzOiByZXN1bHRzLCBhbGlnbmVkOiBhbGlnbm1lbnRDb21wbGV0ZSB9KVxuICAgIHJldHVybiBhbGlnbm1lbnRDb21wbGV0ZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3Rpb25zOiB7XG4gICAgICBjYW5jZWxBbGlnbm1lbnQsXG4gICAgICBnZXRDaGFuZ2VzLFxuICAgICAgaGFuZGxlQWxpZ25tZW50Q2xpY2ssXG4gICAgICBvbkFsaWdubWVudHNDaGFuZ2UsXG4gICAgICBzYXZlQWxpZ25tZW50LFxuICAgICAgc2V0RWRpdGluZyxcbiAgICAgIHNldFZlcnNlQ2hhbmdlZCxcbiAgICB9LFxuICAgIHN0YXRlOiB7XG4gICAgICBhbGlnbmVkLFxuICAgICAgYWxpZ25lckRhdGEsXG4gICAgICBjdXJyZW50VmVyc2VPYmplY3RzLFxuICAgICAgZWRpdGluZyxcbiAgICAgIGluaXRpYWxWZXJzZVRleHQsXG4gICAgICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICAgICAgbmV3VmVyc2VUZXh0LFxuICAgICAgc291cmNlTGFuZ3VhZ2UsXG4gICAgICB0YXJnZXRMYW5ndWFnZSxcbiAgICAgIHVuc2F2ZWRDaGFuZ2VzLFxuICAgICAgdmVyc2VUZXh0Q2hhbmdlZCxcbiAgICAgIHJlZmVyZW5jZSxcbiAgICAgIHRpdGxlLFxuICAgIH0sXG4gIH1cbn1cbiJdfQ==
588
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0LnRzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIkFsaWdubWVudEhlbHBlcnMiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwidXNmbUhlbHBlcnMiLCJpc0VxdWFsIiwiU2NyaXB0dXJlQ29uZmlnIiwiU2NyaXB0dXJlUmVmZXJlbmNlIiwiU2VydmVyQ29uZmlnIiwiZ2V0U2NyaXB0dXJlUmVzb3VyY2VTZXR0aW5ncyIsIk9SSUdJTkFMX1NPVVJDRSIsImdldFZlcnNlc0ZvclJlZiIsImlzVXNmbUFsaWduZWQiLCJ0YXJnZXRWZXJzZVVTRk0iLCJvcmlnaW5hbFZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImV4dHJhY3RBbGlnbm1lbnRzRnJvbVRhcmdldFZlcnNlIiwiYWxpZ25tZW50cyIsIndvcmRCYW5rIiwiYXJlQWxnbm1lbnRzQ29tcGxldGUiLCJnZXRDdXJyZW50VmVyc2VVc2ZtIiwidXBkYXRlZFZlcnNlT2JqZWN0cyIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJ2ZXJzZVRleHRDaGFuZ2VkIiwibmV3VmVyc2VUZXh0IiwiY3VycmVudFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlVGV4dCIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJ1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0IiwiY3VycmVudEluZGV4IiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsImh0dHBDb25maWciLCJpbml0aWFsVmVyc2VUZXh0IiwiaXNOZXdUZXN0YW1lbnQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzIiwib3JpZ2luYWxSZXBvVXJsIiwicmVmZXJlbmNlIiwic2NyaXB0dXJlQ29uZmlnIiwic2NyaXB0dXJlU2V0dGluZ3MiLCJzZXRTYXZlZENoYW5nZXMiLCJzb3VyY2VMYW5ndWFnZSIsInN0YXJ0RWRpdEJyYW5jaCIsInRhcmdldExhbmd1YWdlIiwidGl0bGUiLCJ3b3JraW5nUmVzb3VyY2VCcmFuY2giLCJ1c2VTdGF0ZSIsImFsaWduZWQiLCJhbGlnbmVyRGF0YSIsImVkaXRpbmciLCJuZXdBbGlnbm1lbnRzIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJjaGFwdGVyIiwidmVyc2UiLCJwcm9qZWN0SWQiLCJiYXNpY1JlZmVyZW5jZSIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJjbGVhckNoYW5nZXMiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFyU3RhdGUiLCJvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzXyIsInJlc291cmNlSWQiLCJib29rSWQiLCJvcmlnaW5hbFNjcmlwdHVyZVNldHRpbmdzIiwicmVzb3VyY2VMaW5rIiwidXNlTWVtbyIsInZlcnNlT2JqZWN0cyIsInZlcnNlcyIsImxhbmd1YWdlSWQiLCJ2ZXJzZVJlZmVyZW5jZSIsIm9yaWdWZXJzZU9iamVjdHMiLCJ2ZXJzZURhdGEiLCJBcnJheSIsInByb3RvdHlwZSIsInB1c2giLCJhcHBseSIsInVzZUVmZmVjdCIsIm5vdEVtcHR5IiwiYWxpZ25lZF8iLCJyZXN1bHRzIiwiZ2V0Q2hhbmdlcyIsIl9uZXdTdGF0ZSIsInVwZGF0ZWRWZXJzZU9iamVjdHNfIiwidXBkYXRlVmVyc2VXaXRoTmV3QWxpZ25tZW50cyIsInRhcmdldFZlcnNlT2JqZWN0cyIsInJlZiIsInZlcnNlc0ZvclJlZiIsImhhbmRsZUFsaWdubWVudENsaWNrIiwiX2FsaWduZXJEYXRhIiwib3JpZ2luYWxWZXJzZVVzZm0iLCJwYXJzZVVzZm1Ub1dvcmRBbGlnbmVyRGF0YSIsInRhcmdldFdvcmRzIiwidmVyc2VBbGlnbm1lbnRzIiwiX25ld0FsaWdubWVudHMiLCJ2ZXJzZVVzZm0iLCJhZGRBbGlnbm1lbnRzVG9WZXJzZVVTRk0iLCJhbGlnbmVkVmVyc2VPYmplY3RzIiwidXNmbVZlcnNlVG9Kc29uIiwic2F2ZUFsaWdubWVudCIsImNhbGxTZXRTYXZlZFN0YXRlIiwiY2FuY2VsQWxpZ25tZW50Iiwic2V0RWRpdGluZyIsImVkaXRpbmdfIiwiX25ld1ZlcnNlVGV4dCIsIl91cGRhdGVkVmVyc2VPYmplY3RzIiwidmVyc2VUZXh0IiwiZ2V0VXNmbUZvclZlcnNlQ29udGVudCIsImN1cnJlbnRWZXJzZU9iamVjdHMiLCJfYWxpZ25tZW50c0NoYW5nZWQiLCJzZXRWZXJzZUNoYW5nZWQiLCJjaGFuZ2VkIiwiX2luaXRpYWxWZXJzZVRleHQiLCJ1bnNhdmVkQ2hhbmdlcyIsInVuc2F2ZWRDaGFuZ2VzXyIsIm9uQWxpZ25tZW50c0NoYW5nZSIsImFsaWdubWVudENvbXBsZXRlIiwiYWN0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQSxPQUFPLEtBQUtBLEtBQVosTUFBdUIsT0FBdkI7QUFDQSxTQUNFQyxnQkFERixFQUVFQyx5QkFGRixFQUdFQyxXQUhGLFFBSU8sa0JBSlA7QUFLQSxPQUFPLEtBQUtDLE9BQVosTUFBeUIsWUFBekI7QUFDQSxTQUNFQyxlQURGLEVBRUVDLGtCQUZGLEVBR0VDLFlBSEYsUUFJTyxVQUpQO0FBS0EsU0FBU0MsNEJBQVQsUUFBNkMsNEJBQTdDO0FBQ0EsU0FBU0MsZUFBVCxRQUFnQyxVQUFoQztBQUNBLFNBQVNDLGVBQVQsUUFBZ0MsZ0JBQWhDOztBQXFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsYUFBVCxDQUF1QkMsZUFBdkIsRUFBd0NDLG9CQUF4QyxFQUE4RDtBQUFBOztBQUM1REEsRUFBQUEsb0JBQW9CLEdBQUcseUJBQUFBLG9CQUFvQixVQUFwQiw4REFBc0JDLE1BQXRCLEdBQStCRCxvQkFBL0IsR0FBc0QsSUFBN0UsQ0FENEQsQ0FDc0I7O0FBRHRCLDhCQUUzQlosZ0JBQWdCLENBQUNjLGdDQUFqQixDQUFrREgsZUFBbEQsRUFBbUVDLG9CQUFuRSxDQUYyQjtBQUFBLE1BRXBERyxVQUZvRCx5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QVhBLFdBRks7QUFHTGlFLE1BQUFBLG1CQUFtQixFQUFuQkEsbUJBSEs7QUFJTGhFLE1BQUFBLE9BQU8sRUFBUEEsT0FKSztBQUtMakIsTUFBQUEsZ0JBQWdCLEVBQWhCQSxnQkFMSztBQU1MWixNQUFBQSxtQkFBbUIsRUFBbkJBLG1CQU5LO0FBT0xFLE1BQUFBLFlBQVksRUFBWkEsWUFQSztBQVFMZSxNQUFBQSxTQUFTLEVBQUVtQixjQVJOO0FBU0xmLE1BQUFBLGNBQWMsRUFBZEEsY0FUSztBQVVMRSxNQUFBQSxjQUFjLEVBQWRBLGNBVks7QUFXTEMsTUFBQUEsS0FBSyxFQUFMQSxLQVhLO0FBWUwwRSxNQUFBQSxjQUFjLEVBQWRBLGNBWks7QUFhTGpHLE1BQUFBLGdCQUFnQixFQUFoQkE7QUFiSztBQVhGLEdBQVA7QUEyQkQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIEFsaWdubWVudEhlbHBlcnMsXG4gIFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMsXG4gIHVzZm1IZWxwZXJzLFxufSBmcm9tICd3b3JkLWFsaWduZXItcmNsJ1xuaW1wb3J0ICogYXMgaXNFcXVhbCBmcm9tICdkZWVwLWVxdWFsJ1xuaW1wb3J0IHtcbiAgU2NyaXB0dXJlQ29uZmlnLFxuICBTY3JpcHR1cmVSZWZlcmVuY2UsXG4gIFNlcnZlckNvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXRTY3JpcHR1cmVSZXNvdXJjZVNldHRpbmdzIH0gZnJvbSAnLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQgeyBPUklHSU5BTF9TT1VSQ0UgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IGdldFZlcnNlc0ZvclJlZiB9IGZyb20gJy4vdXNlU2NyaXB0dXJlJ1xuXG5pbnRlcmZhY2UgU3RhcnRFZGl0IHtcbiAgKCk6IFByb21pc2U8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHR1cmVBTGlnbm1lbnRFZGl0UHJvcHMge1xuICAvLyBpbmRleCB0byB1c2UgZm9yIGJvb2sgKGUuZy4gYDAxYCBmb3IgYEdFTmApXG4gIGJvb2tJbmRleDogc3RyaW5nLFxuICAvLyBjdXJyZW50IHZlcnNlIHNlbGVjdGVkIGZyb20gaW5pdGlhbFZlcnNlT2JqZWN0c1tdXG4gIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICAvLyByZWZlcmVuY2UgZm9yIHZlcnNlIHNlbGVjdGVkIGZvciBhbGlnbm1lbnRcbiAgY3VycmVudFZlcnNlUmVmOiBTY3JpcHR1cmVSZWZlcmVuY2UsXG4gIC8vIGlmIHRydWUgdGhlbiBlZGl0aW5nIGlzIGFsbG93ZWRcbiAgZW5hYmxlRWRpdDogYm9vbGVhbixcbiAgLy8gaWYgdHJ1ZSB0aGVuIGFsaWdubWVudCBpcyBhbGxvd2VkXG4gIGVuYWJsZUFsaWdubWVudDogYm9vbGVhbixcbiAgLy8gY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIGh0dHAgY29tbXVuaWNhdGlvblxuICBodHRwQ29uZmlnOiBTZXJ2ZXJDb25maWcsXG4gIC8vIGFycmF5IG9mIGVhY2ggdmVyc2UgZm9yIGluIHJlZmVyZW5jZSByYW5nZVxuICBpbml0aWFsVmVyc2VPYmplY3RzOiBbXSxcbiAgLy8gaW5pdGlhbCB0ZXh0IGZvciB2ZXJzZVxuICBpbml0aWFsVmVyc2VUZXh0OiBzdHJpbmcsXG4gIC8vIGZsYWcgdGhhdCB3ZSBhcmUgd29ya2luZyBvbiBOVCBib29rXG4gIGlzTmV3VGVzdGFtZW50OiBib29sZWFuLFxuICAvLyB1c2VyIG5hbWUgb2YgbG9nZ2VkIGluIHVzZXJcbiAgbG9nZ2VkSW5Vc2VyOiBzdHJpbmcsXG4gIC8vIG93bmVyIHRvIHVzZSB3aGVuIGZldGNoaW5nIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlc1xuICBvcmlnaW5hbExhbmd1YWdlT3duZXI6IHN0cmluZyxcbiAgLy8gdXJsIGZvciB0aGUgb3JpZ2luYWwgbGFuZ3VhZ2UgcmVwb1xuICBvcmlnaW5hbFJlcG9Vcmw6IHN0cmluZyxcbiAgLy8gb3JpZ2luYWwgc2NyaXB0dXJlIGJvb2tPYmplY3RzIGZvciBjdXJyZW50IGJvb2tcbiAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0czogb2JqZWN0LFxuICAvKiogY3VycmVudCByZWZlcmVuY2UgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvLyBkZXRhaWxzIGFib3V0IHRoZSBjdXJyZW50IHNjcmlwdHVyZSBsb2FkZWRcbiAgc2NyaXB0dXJlQ29uZmlnOiBTY3JpcHR1cmVDb25maWcsXG4gIC8vIHNldHRpbmdzIHRvIGJlIHVzZWQgZm9yIHNjcmlwdHVyZVxuICBzY3JpcHR1cmVTZXR0aW5nczogeyB9LFxuICAvLyBjYWxsYmFjayB0byBzYXZlIGN1cnJlbnQgdmVyc2UgZWRpdCBhbmQgYWxpZ25tZW50IGNoYW5nZXNcbiAgc2V0U2F2ZWRDaGFuZ2VzOiBGdW5jdGlvbixcbiAgLy8gc291cmNlIGxhbmd1YWdlXG4gIHNvdXJjZUxhbmd1YWdlOiBzdHJpbmcsXG4gIC8vIGNhbGxiYWNrIHRvIGNyZWF0ZSBhIHVzZXIgYnJhbmNoIGZvciBzYXZpbmcgZWRpdCBkYXRhXG4gIHN0YXJ0RWRpdEJyYW5jaDogU3RhcnRFZGl0LFxuICAvLyBjdXJyZW50IHRhcmdldCBsYW5ndWFnZVxuICB0YXJnZXRMYW5ndWFnZTogb2JqZWN0LFxuICAvLyB0aXRsZSB0byBzaG93IGluIGFsaWdubWVudFxuICB0aXRsZTogc3RyaW5nLFxuICAgLy8gYnJhbmNoIG5hbWUgY3VycmVudGx5IGJlaW5nIHVzZWQgKGUuZy4gYG1hc3RlcmAgb3IgdXNlciBicmFuY2gpXG4gIHdvcmtpbmdSZXNvdXJjZUJyYW5jaDogc3RyaW5nLFxufVxuXG4vKipcbiAqIGRldGVybWluZXMgaWYgYWxpZ25tZW50IGlzIGNvbXBsZXRlIGJhc2VkIG9uIHRhcmdldCBVU0ZNIGFuZCBvcmlnaW5hbCBsYW5ndWFnZSB2ZXJzZSBvYmplY3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0VmVyc2VVU0ZNXG4gKiBAcGFyYW0ge29iamVjdFtdfSBvcmlnaW5hbFZlcnNlT2JqZWN0c1xuICovXG5mdW5jdGlvbiBpc1VzZm1BbGlnbmVkKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZU9iamVjdHMpIHtcbiAgb3JpZ2luYWxWZXJzZU9iamVjdHMgPSBvcmlnaW5hbFZlcnNlT2JqZWN0cz8ubGVuZ3RoID8gb3JpZ2luYWxWZXJzZU9iamVjdHMgOiBudWxsIC8vIG1ha2Ugc3VyZSBub3QgcGFzc2luZyBlbXB0eSBBcnJheVxuICBjb25zdCB7IGFsaWdubWVudHMsIHdvcmRCYW5rIH0gPSBBbGlnbm1lbnRIZWxwZXJzLmV4dHJhY3RBbGlnbm1lbnRzRnJvbVRhcmdldFZlcnNlKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gIHJldHVybiBBbGlnbm1lbnRIZWxwZXJzLmFyZUFsZ25tZW50c0NvbXBsZXRlKHdvcmRCYW5rLCBhbGlnbm1lbnRzKVxufVxuXG4vKipcbiAqIGdldCB0aGUgdXBkYXRlZCBVU0ZNIGZvciB0YXJnZXQgdmVyc2UgZnJvbSB0aGUgdXBkYXRlZCB2ZXJzZSBvYmplY3RzIGFuZCBsYXRlc3QgdGV4dFxuICogQHBhcmFtIHtvYmplY3RbXX0gdXBkYXRlZFZlcnNlT2JqZWN0c1xuICogQHBhcmFtIHtvYmplY3RbXX0gaW5pdGlhbFZlcnNlT2JqZWN0c1xuICogQHBhcmFtIHtib29sZWFufSB2ZXJzZVRleHRDaGFuZ2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3VmVyc2VUZXh0XG4gKi9cbmZ1bmN0aW9uIGdldEN1cnJlbnRWZXJzZVVzZm0odXBkYXRlZFZlcnNlT2JqZWN0cywgaW5pdGlhbFZlcnNlT2JqZWN0cywgdmVyc2VUZXh0Q2hhbmdlZDogYm9vbGVhbiwgbmV3VmVyc2VUZXh0KSB7XG4gIGxldCB0YXJnZXRWZXJzZVVTRk0gPSBudWxsXG4gIGNvbnN0IGN1cnJlbnRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0cyB8fCBpbml0aWFsVmVyc2VPYmplY3RzXG5cbiAgaWYgKHZlcnNlVGV4dENoYW5nZWQgJiYgbmV3VmVyc2VUZXh0KSB7XG4gICAgY29uc3QgeyB0YXJnZXRWZXJzZVRleHQgfSA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoY3VycmVudFZlcnNlT2JqZWN0c18sIG5ld1ZlcnNlVGV4dClcbiAgICB0YXJnZXRWZXJzZVVTRk0gPSB0YXJnZXRWZXJzZVRleHRcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRWZXJzZVVTRk0gPSBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLmNvbnZlcnRWZXJzZURhdGFUb1VTRk0oY3VycmVudFZlcnNlT2JqZWN0c18pXG4gIH1cbiAgcmV0dXJuIHRhcmdldFZlcnNlVVNGTVxufVxuXG4vLyBtYW5hZ2UgdmVyc2UgZWRpdCBhbmQgYWxpZ25tZW50IHN0YXRlc1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNjcmlwdHVyZUFsaWdubWVudEVkaXQoe1xuICBjdXJyZW50SW5kZXgsXG4gIGVuYWJsZUVkaXQsXG4gIGVuYWJsZUFsaWdubWVudCxcbiAgaHR0cENvbmZpZyxcbiAgaW5pdGlhbFZlcnNlT2JqZWN0cyxcbiAgaW5pdGlhbFZlcnNlVGV4dCxcbiAgaXNOZXdUZXN0YW1lbnQsXG4gIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cyxcbiAgb3JpZ2luYWxSZXBvVXJsLFxuICByZWZlcmVuY2UsXG4gIHNjcmlwdHVyZUNvbmZpZyxcbiAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gIHNldFNhdmVkQ2hhbmdlcyxcbiAgc291cmNlTGFuZ3VhZ2UsXG4gIHN0YXJ0RWRpdEJyYW5jaCxcbiAgdGFyZ2V0TGFuZ3VhZ2UsXG4gIHRpdGxlLFxuICB3b3JraW5nUmVzb3VyY2VCcmFuY2gsXG59IDogU2NyaXB0dXJlQUxpZ25tZW50RWRpdFByb3BzKSB7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVfXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBhbGlnbmVkOiBmYWxzZSxcbiAgICBhbGlnbmVyRGF0YTogbnVsbCxcbiAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICBuZXdBbGlnbm1lbnRzOiBudWxsLFxuICAgIG5ld1ZlcnNlVGV4dDogbnVsbCxcbiAgICB1cGRhdGVkVmVyc2VPYmplY3RzOiBudWxsLFxuICAgIHZlcnNlVGV4dENoYW5nZWQ6IGZhbHNlLFxuICB9KVxuXG4gIGNvbnN0IHtcbiAgICBhbGlnbmVkLFxuICAgIGFsaWduZXJEYXRhLFxuICAgIGVkaXRpbmcsXG4gICAgbmV3QWxpZ25tZW50cyxcbiAgICBuZXdWZXJzZVRleHQsXG4gICAgdXBkYXRlZFZlcnNlT2JqZWN0cyxcbiAgICB2ZXJzZVRleHRDaGFuZ2VkLFxuICB9ID0gc3RhdGVcbiAgY29uc3QgY2hhcHRlciA9IHJlZmVyZW5jZT8uY2hhcHRlclxuICBjb25zdCB2ZXJzZSA9IHJlZmVyZW5jZT8udmVyc2VcbiAgY29uc3QgcHJvamVjdElkID0gcmVmZXJlbmNlPy5wcm9qZWN0SWRcbiAgY29uc3QgYmFzaWNSZWZlcmVuY2UgPSB7IC8vIG9ubHkgaGFzIHRoZSB0aHJlZSBiYXNpYyBmaWVsZHNcbiAgICBjaGFwdGVyLFxuICAgIHZlcnNlLFxuICAgIHByb2plY3RJZCxcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFN0YXRlKG5ld1N0YXRlKSB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoeyAuLi5wcmV2U3RhdGUsIC4uLm5ld1N0YXRlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJDaGFuZ2VzKCkge1xuICAgIGNvbnNvbGUubG9nKGBjbGVhckNoYW5nZXMoKSAtICR7SlNPTi5zdHJpbmdpZnkoYmFzaWNSZWZlcmVuY2UpfWApXG4gICAgY29uc3QgY2xlYXJTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYWxpZ25lckRhdGE6IG51bGwsXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIG5ld0FsaWdubWVudHM6IG51bGwsXG4gICAgICBuZXdWZXJzZVRleHQ6IG51bGwsXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzOiBudWxsLFxuICAgICAgdmVyc2VUZXh0Q2hhbmdlZDogZmFsc2UsXG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKHN0YXRlLCBjbGVhclN0YXRlKSkge1xuICAgICAgY29uc29sZS5sb2coYGNsZWFyQ2hhbmdlcygpIC0gcmVmZXJlbmNlIGNoYW5nZWQsIHJlc2V0IGVkaXQvYWxpZ25tZW50IHN0YXRlIHZhcmlhYmxlc2ApXG4gICAgICBzZXRTdGF0ZShjbGVhclN0YXRlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3NfID0ge1xuICAgIC4uLnNjcmlwdHVyZVNldHRpbmdzLFxuICAgIHJlc291cmNlSWQ6IE9SSUdJTkFMX1NPVVJDRSxcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cENvbmZpZyA9IGh0dHBDb25maWcgfHwge31cbiAgY29uc3QgYm9va0lkID0gcHJvamVjdElkXG4gIGNvbnN0IG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3MgPSBnZXRTY3JpcHR1cmVSZXNvdXJjZVNldHRpbmdzKFxuICAgIGJvb2tJZCwgb3JpZ2luYWxTY3JpcHR1cmVTZXR0aW5nc18sIGlzTmV3VGVzdGFtZW50LCBvcmlnaW5hbFJlcG9VcmwsXG4gIClcblxuICBpZiAoIWVuYWJsZUFsaWdubWVudCkgeyAvLyBpZiBub3QgZW5hYmxlZCwgdGhlbiB3ZSBkb24ndCBmZXRjaCByZXNvdXJjZVxuICAgIG9yaWdpbmFsU2NyaXB0dXJlU2V0dGluZ3MucmVzb3VyY2VMaW5rID0gbnVsbFxuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxWZXJzZU9iamVjdHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHsgLy8gZ2V0IHRoZSBvcmlnaW5hbCBsYW5ndWFnZSB2ZXJzZU9iamVjdHNcbiAgICBjb25zdCB2ZXJzZU9iamVjdHMgPSBbXVxuXG4gICAgaWYgKG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IHZlcnNlcyA9IGdldFZlcnNlc0ZvclJlZihiYXNpY1JlZmVyZW5jZSwgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cywgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz8ubGFuZ3VhZ2VJZClcblxuICAgICAgaWYgKHZlcnNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmVyc2VSZWZlcmVuY2Ugb2YgdmVyc2VzKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ1ZlcnNlT2JqZWN0cyA9IHZlcnNlUmVmZXJlbmNlPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0c1xuXG4gICAgICAgICAgaWYgKG9yaWdWZXJzZU9iamVjdHMpIHtcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHZlcnNlT2JqZWN0cywgb3JpZ1ZlcnNlT2JqZWN0cylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZlcnNlT2JqZWN0c1xuICB9LCBbb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cywgY2hhcHRlciwgdmVyc2UsIHByb2plY3RJZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gdXBkYXRlIGFsaWdubWVudCBzdGF0dXMgd2hlbiBhbGlnbmVyIGlzIGhpZGRlblxuICAgIGNvbnN0IG5vdEVtcHR5ID0gISFpbml0aWFsVmVyc2VPYmplY3RzXG4gICAgbGV0IGFsaWduZWRfID0gZmFsc2VcblxuICAgIGlmICghYWxpZ25lckRhdGEpIHsgLy8gc2tpcCBpZiBhbGlnbmVyIGlzIGJlaW5nIHNob3duXG4gICAgICBpZiAobm90RW1wdHkpIHsgLy8gc2tpcCBpZiBlbXB0eVxuICAgICAgICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHMgfHwgaW5pdGlhbFZlcnNlT2JqZWN0c1xuXG4gICAgICAgIGlmICghZW5hYmxlQWxpZ25tZW50KSB7XG4gICAgICAgICAgYWxpZ25lZF8gPSB0cnVlXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmVyc2VUZXh0ICYmIChuZXdWZXJzZVRleHQgIT09IGluaXRpYWxWZXJzZVRleHQpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoY3VycmVudFZlcnNlT2JqZWN0c18sIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgICBhbGlnbmVkXyA9IGlzVXNmbUFsaWduZWQocmVzdWx0cz8udGFyZ2V0VmVyc2VUZXh0LCBvcmlnaW5hbFZlcnNlT2JqZWN0cylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRWZXJzZVVTRk0gPSBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLmNvbnZlcnRWZXJzZURhdGFUb1VTRk0oY3VycmVudFZlcnNlT2JqZWN0c18pXG4gICAgICAgICAgYWxpZ25lZF8gPSBpc1VzZm1BbGlnbmVkKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFsaWduZWQgIT09IGFsaWduZWRfKSB7XG4gICAgICAgIHNldFN0YXRlKHsgYWxpZ25lZDogYWxpZ25lZF8gfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpbml0aWFsVmVyc2VPYmplY3RzLCBhbGlnbmVyRGF0YSwgbmV3VmVyc2VUZXh0LCBpbml0aWFsVmVyc2VUZXh0LCBlbmFibGVBbGlnbm1lbnQsIG9yaWdpbmFsVmVyc2VPYmplY3RzXSlcblxuICAvKipcbiAgICogZ2V0IGNoYW5nZXMgZm9yIHNhdmluZ1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3U3RhdGUgLSBvcHRpb25hbGx5IHBhc3MgaW4gbmV3IHN0YXRlICh0byBvdmVycmlkZSBzdGF0ZSlcbiAgICovXG4gIGZ1bmN0aW9uIGdldENoYW5nZXMobmV3U3RhdGUgPSB7fSkge1xuICAgIGNvbnNvbGUubG9nKGBnZXRDaGFuZ2VzIC0gc3RhcnRlZCAke2N1cnJlbnRJbmRleH0gLSBwYXNzZWQgc3RhdGVgLCBuZXdTdGF0ZSlcbiAgICBjb25zdCBfbmV3U3RhdGUgPSB7XG4gICAgICBzdGF0ZSxcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgIH1cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3Qge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgbmV3QWxpZ25tZW50cyxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG5ld1ZlcnNlVGV4dCxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB2ZXJzZVRleHRDaGFuZ2VkLFxuICAgIH0gPSBfbmV3U3RhdGVcbiAgICBsZXQgdXBkYXRlZFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzXG5cbiAgICBpZiAobmV3QWxpZ25tZW50cykgeyAvLyBpZiB1bnNhdmVkIGFsaWdubWVudCBjaGFuZ2VzLCBhcHBseSB0aGVtXG4gICAgICBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIGFwcGx5aW5nIHVuc2F2ZWQgYWxpZ25tZW50c31gKVxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0c18gPSB1cGRhdGVWZXJzZVdpdGhOZXdBbGlnbm1lbnRzKClcbiAgICB9XG5cbiAgICBpZiAodmVyc2VUZXh0Q2hhbmdlZCAmJiBuZXdWZXJzZVRleHQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBnZXRDaGFuZ2VzIC0gYXBwbHlpbmcgbmV3IHRleHQ6YCwgbmV3VmVyc2VUZXh0KVxuICAgICAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzXyB8fCBpbml0aWFsVmVyc2VPYmplY3RzXG4gICAgICB1cGRhdGVkVmVyc2VPYmplY3RzXyAmJiBjb25zb2xlLmxvZyhgZ2V0Q2hhbmdlcyAtIGFwcGx5aW5nIHVwZGF0ZWQgYWxpZ25tZW50c2ApXG4gICAgICBjb25zdCB7IHRhcmdldFZlcnNlT2JqZWN0cyB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZShjdXJyZW50VmVyc2VPYmplY3RzXywgbmV3VmVyc2VUZXh0KVxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0c18gPSB0YXJnZXRWZXJzZU9iamVjdHNcbiAgICB9IGVsc2UgeyAvLyBvbmx5IGFsaWdubWVudCBjaGFuZ2VzIHRvIHVwbG9hZFxuICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0c18gJiYgY29uc29sZS5sb2coYGdldENoYW5nZXMgLSBhcHBseWluZyB1cGRhdGVkIGFsaWdubWVudHNgLCB7IG5ld1ZlcnNlVGV4dCwgdXBkYXRlZFZlcnNlT2JqZWN0c18gfSlcbiAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c18gfHwgaW5pdGlhbFZlcnNlT2JqZWN0c1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzXykge1xuICAgICAgY29uc3QgcmVmID0gc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWY/LltjdXJyZW50SW5kZXhdXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgIHJlZixcbiAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0czogdXBkYXRlZFZlcnNlT2JqZWN0c18sXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGJhY2sgZm9yIHdoZW4gdXNlciBjbGlja2VkIG9uIGFsaWdubWVudCBidXR0b24gLSB3aWxsIHNob3cgaWYgbm90IGFscmVhZHkgc2hvd25cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUFsaWdubWVudENsaWNrKCkge1xuICAgIGlmIChlbmFibGVBbGlnbm1lbnQpIHtcbiAgICAgIGxldCBfYWxpZ25lckRhdGEgPSBudWxsXG4gICAgICBhd2FpdCBzdGFydEVkaXRCcmFuY2goKVxuXG4gICAgICBpZiAoIWFsaWduZXJEYXRhKSB7IC8vIGlmIHdvcmQgYWxpZ25lciBub3Qgc2hvd25cbiAgICAgICAgY29uc29sZS5sb2coYGhhbmRsZUFsaWdubWVudENsaWNrIC0gdG9nZ2xlIE9OIGFsaWdubWVudGApXG4gICAgICAgIGNvbnN0IHRhcmdldFZlcnNlVVNGTSA9IGdldEN1cnJlbnRWZXJzZVVzZm0odXBkYXRlZFZlcnNlT2JqZWN0cywgaW5pdGlhbFZlcnNlT2JqZWN0cywgdmVyc2VUZXh0Q2hhbmdlZCwgbmV3VmVyc2VUZXh0KVxuICAgICAgICBsZXQgb3JpZ2luYWxWZXJzZVVzZm0gPSBudWxsXG5cbiAgICAgICAgaWYgKG9yaWdpbmFsVmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgb3JpZ2luYWxWZXJzZVVzZm0gPSBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLmNvbnZlcnRWZXJzZURhdGFUb1VTRk0ob3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgdGFyZ2V0V29yZHM6IHdvcmRCYW5rLFxuICAgICAgICAgIHZlcnNlQWxpZ25tZW50czogYWxpZ25tZW50cyxcbiAgICAgICAgfSA9IEFsaWdubWVudEhlbHBlcnMucGFyc2VVc2ZtVG9Xb3JkQWxpZ25lckRhdGEodGFyZ2V0VmVyc2VVU0ZNLCBvcmlnaW5hbFZlcnNlVXNmbSlcbiAgICAgICAgX2FsaWduZXJEYXRhID0geyB3b3JkQmFuaywgYWxpZ25tZW50cyB9XG4gICAgICB9IGVsc2UgeyAvLyB3b3JkIGFsaWduZXIgY3VycmVudGx5IHNob3duXG4gICAgICAgIGNvbnNvbGUubG9nKGBoYW5kbGVBbGlnbm1lbnRDbGljayAtIGFsaWdubWVudCBhbHJlYWR5IHNob3duYClcbiAgICAgICAgX2FsaWduZXJEYXRhID0gYWxpZ25lckRhdGFcbiAgICAgIH1cbiAgICAgIHNldFN0YXRlKHsgYWxpZ25lckRhdGE6IF9hbGlnbmVyRGF0YSB9KVxuICAgICAgY29uc29sZS5sb2coX2FsaWduZXJEYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdXBkYXRlZCB2ZXJzZSBvYmplY3RzIGFmdGVyIGFsaWdubWVudHMgY2hhbmdlZFxuICAgKiBAcGFyYW0ge29iamVjdH0gX25ld0FsaWdubWVudHMgLSByZXN1bHRzIG9mIGFsaWduZXJcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZVZlcnNlV2l0aE5ld0FsaWdubWVudHMoX25ld0FsaWdubWVudHMgPSBuZXdBbGlnbm1lbnRzKSB7XG4gICAgY29uc3QgY3VycmVudFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzIHx8IGluaXRpYWxWZXJzZU9iamVjdHNcbiAgICBjb25zdCB0YXJnZXRWZXJzZVRleHQgPSBuZXdWZXJzZVRleHQgfHwgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKGN1cnJlbnRWZXJzZU9iamVjdHNfKVxuICAgIGNvbnN0IHZlcnNlVXNmbSA9IEFsaWdubWVudEhlbHBlcnMuYWRkQWxpZ25tZW50c1RvVmVyc2VVU0ZNKF9uZXdBbGlnbm1lbnRzLnRhcmdldFdvcmRzLCBfbmV3QWxpZ25tZW50cy52ZXJzZUFsaWdubWVudHMsIHRhcmdldFZlcnNlVGV4dClcbiAgICBjb25zdCBhbGlnbmVkVmVyc2VPYmplY3RzID0gdXNmbUhlbHBlcnMudXNmbVZlcnNlVG9Kc29uKHZlcnNlVXNmbSlcbiAgICByZXR1cm4gYWxpZ25lZFZlcnNlT2JqZWN0c1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBidXR0b24gdG8gc2F2ZSBjdXJyZW50IGFsaWdubWVudHMgaW4gd29yZCBhbGlnbmVyLiAgR2VuZXJhdGVzIG5ldyB2ZXJzZSBjb250ZW50IGFuZCBzYXZlcyBpbiBzdGF0ZS4gQ2xvc2VzIGFsaWduZXIgZGlzcGxheVxuICAgKiBAcGFyYW0ge29iamVjdH0gX25ld0FsaWdubWVudHMgLSByZXN1bHRzIG9mIGFsaWduZXJcbiAgICovXG4gIGZ1bmN0aW9uIHNhdmVBbGlnbm1lbnQoX25ld0FsaWdubWVudHMgPSBuZXdBbGlnbm1lbnRzKSB7XG4gICAgY29uc29sZS5sb2coYHNhdmVBbGlnbm1lbnQoKSAtIG5ld0FsaWdubWVudHNgLCBfbmV3QWxpZ25tZW50cylcblxuICAgIGlmIChfbmV3QWxpZ25tZW50cykge1xuICAgICAgY29uc3QgYWxpZ25lZFZlcnNlT2JqZWN0cyA9IHVwZGF0ZVZlcnNlV2l0aE5ld0FsaWdubWVudHMoX25ld0FsaWdubWVudHMpXG4gICAgICBjb25zb2xlLmxvZyhgc2F2ZUFsaWdubWVudCgpIC0gYWxpZ25lZFZlcnNlT2JqZWN0c2AsIGFsaWduZWRWZXJzZU9iamVjdHMpXG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgYWxpZ25lckRhdGE6IG51bGwsXG4gICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBuZXdBbGlnbm1lbnRzOiBudWxsLFxuICAgICAgICB1cGRhdGVkVmVyc2VPYmplY3RzOiBhbGlnbmVkVmVyc2VPYmplY3RzLFxuICAgICAgfVxuICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgICBjYWxsU2V0U2F2ZWRTdGF0ZSh0cnVlLCBuZXdTdGF0ZSApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGBzYXZlQWxpZ25tZW50KCkgLSBubyBhbGlnbm1lbnQgY2hhbmdlc2ApXG4gICAgICBzZXRTdGF0ZSh7XG4gICAgICAgIGFsaWduZXJEYXRhOiBudWxsLFxuICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciB3aGVuIHVzZXIgY2xpY2tlZCBvbiBidXR0b24gdG8gY2FuY2VsIHdvcmsgaW4gd29yZCBhbGlnbmVyLiAgQ2FsY3VsYXRlcyBhbmQgZGlzcGxheXMgY3VycmVudCBhbGlnbm1lbnQgdmFsaWQgc3RhdGUuIENsb3NlcyBhbGlnbmVyIGRpc3BsYXlcbiAgICovXG4gIGZ1bmN0aW9uIGNhbmNlbEFsaWdubWVudCgpIHtcbiAgICBjb25zb2xlLmxvZyhgY2FuY2VsQWxpZ25tZW50KClgKVxuICAgIGNvbnN0IHRhcmdldFZlcnNlVVNGTSA9IGdldEN1cnJlbnRWZXJzZVVzZm0odXBkYXRlZFZlcnNlT2JqZWN0cywgaW5pdGlhbFZlcnNlT2JqZWN0cywgdmVyc2VUZXh0Q2hhbmdlZCwgbmV3VmVyc2VUZXh0KVxuICAgIGNvbnN0IGFsaWduZWQgPSBpc1VzZm1BbGlnbmVkKHRhcmdldFZlcnNlVVNGTSwgb3JpZ2luYWxWZXJzZU9iamVjdHMpXG4gICAgc2V0U3RhdGUoeyBhbGlnbmVyRGF0YTogbnVsbCwgYWxpZ25lZCB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZvciBidXR0b24gdG8gc2V0IGVkaXRpbmcgc3RhdGVcbiAgICogQHBhcmFtIHtib29sZWFufSBlZGl0aW5nXyAtIGlmIHRydWUsIGVkaXRvciBpcyBzaG93biwgb3RoZXJ3aXNlIGVkaXRvciBpcyBoaWRkZW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IF9uZXdWZXJzZVRleHQgLSBvcHRpb25hbCB2ZXJzZSB0ZXh0XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuICBhc3luYyBmdW5jdGlvbiBzZXRFZGl0aW5nKGVkaXRpbmdfLCBfbmV3VmVyc2VUZXh0ID0gbmV3VmVyc2VUZXh0KSB7XG4gICAgaWYgKGVuYWJsZUVkaXQpIHtcbiAgICAgIGlmIChlZGl0aW5nXyAhPT0gZWRpdGluZykge1xuICAgICAgICBfbmV3VmVyc2VUZXh0ID0gX25ld1ZlcnNlVGV4dCB8fCBpbml0aWFsVmVyc2VUZXh0XG4gICAgICAgIGxldCBfdXBkYXRlZFZlcnNlT2JqZWN0cyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNcbiAgICAgICAgY29uc3QgdmVyc2VUZXh0Q2hhbmdlZCA9IF9uZXdWZXJzZVRleHQgIT09IGluaXRpYWxWZXJzZVRleHRcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgZWRpdGluZzogZWRpdGluZ18sXG4gICAgICAgICAgbmV3VmVyc2VUZXh0OiBfbmV3VmVyc2VUZXh0LFxuICAgICAgICAgIHZlcnNlVGV4dENoYW5nZWQsXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZlcnNlVGV4dENoYW5nZWQpIHtcbiAgICAgICAgICAvLyBmYWxsYmFjayB0byBtYWtlIHN1cmUgdGV4dCBmcm9tIHZlcnNlT2JqZWN0cyBtYXRjaGVzIGN1cnJlbnQgdGV4dFxuICAgICAgICAgIGNvbnN0IHZlcnNlVGV4dCA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuZ2V0VXNmbUZvclZlcnNlQ29udGVudCh7IHZlcnNlT2JqZWN0czogY3VycmVudFZlcnNlT2JqZWN0cyB9IClcblxuICAgICAgICAgIGlmICh2ZXJzZVRleHQgIT09IF9uZXdWZXJzZVRleHQpIHsgLy8gaWYgdGV4dCBmcm9tIHZlcnNlIG9iamVjdHMgZG9lcyBub3QgbWF0Y2ggbGF0ZXN0IHRleHRcbiAgICAgICAgICAgIC8vIGFwcGx5IGFsaWdubWVudCB0byBjdXJyZW50IHRleHRcbiAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VPYmplY3RzIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGN1cnJlbnRWZXJzZU9iamVjdHMsIF9uZXdWZXJzZVRleHQpXG4gICAgICAgICAgICBfdXBkYXRlZFZlcnNlT2JqZWN0cyA9IHRhcmdldFZlcnNlT2JqZWN0cyAvLyB1cGRhdGUgdmVyc2VPYmplY3RzIHRvIG1hdGNoIGN1cnJlbnQgdGV4dFxuICAgICAgICAgICAgbmV3U3RhdGVbJ3VwZGF0ZWRWZXJzZU9iamVjdHMnXSA9IF91cGRhdGVkVmVyc2VPYmplY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgICAgIGNvbnN0IF9hbGlnbm1lbnRzQ2hhbmdlZCA9IChfdXBkYXRlZFZlcnNlT2JqZWN0cyAmJiAhaXNFcXVhbChpbml0aWFsVmVyc2VPYmplY3RzLCBfdXBkYXRlZFZlcnNlT2JqZWN0cykpXG4gICAgICAgIGNhbGxTZXRTYXZlZFN0YXRlKHZlcnNlVGV4dENoYW5nZWQgfHwgX2FsaWdubWVudHNDaGFuZ2VkLCBuZXdTdGF0ZSApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxiYWNrIGZyb20gdGhlIGVkaXQgb25DaGFuZ2UgZXZlbnQgdG8gdXBkYXRlIGVkaXQgc3RhdGUgdmFyaWFibGVzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hhbmdlZCAtIHRydWUgaWYgdGhlIG5ld1ZlcnNlVGV4dCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgaW5pdGlhbFZlcnNlVGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmVyc2VUZXh0IC0gY3VycmVudCBjaGFuZ2VkIHZlcnNlIHRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IF9pbml0aWFsVmVyc2VUZXh0IC0gaW5pdGlhbCB2ZXJzZSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBzZXRWZXJzZUNoYW5nZWQoY2hhbmdlZCwgbmV3VmVyc2VUZXh0LCBfaW5pdGlhbFZlcnNlVGV4dCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VUZXh0IH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKGN1cnJlbnRWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICBjb25zdCBhbGlnbmVkID0gaXNVc2ZtQWxpZ25lZCh0YXJnZXRWZXJzZVRleHQsIG9yaWdpbmFsVmVyc2VPYmplY3RzKVxuICAgIGNvbnN0IHZlcnNlVGV4dENoYW5nZWQgPSBuZXdWZXJzZVRleHQgIT09IGluaXRpYWxWZXJzZVRleHRcblxuICAgIHNldFN0YXRlKHtcbiAgICAgIHZlcnNlVGV4dENoYW5nZWQsXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICBhbGlnbmVkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzID0gUmVhY3QudXNlTWVtbyggKCkgPT4geyAvLyBpZiB2ZXJzZSBoYXMgYmVlbiBlZGl0ZWQgb3IgYWxpZ25tZW50IGNoYW5nZWQsIHRoZW4gZ2VuZXJhdGUgbmV3IHZlcnNlT2JqZWN0cyB0byBkaXNwbGF5IGluIFNjcmlwdHVyZVBhbmVcbiAgICBpZiAoaW5pdGlhbFZlcnNlT2JqZWN0cykge1xuICAgICAgY29uc3QgdGFyZ2V0VmVyc2VVU0ZNID0gZ2V0Q3VycmVudFZlcnNlVXNmbSh1cGRhdGVkVmVyc2VPYmplY3RzLCBpbml0aWFsVmVyc2VPYmplY3RzLCB2ZXJzZVRleHRDaGFuZ2VkLCBuZXdWZXJzZVRleHQpXG4gICAgICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzXyA9IHVzZm1IZWxwZXJzLnVzZm1WZXJzZVRvSnNvbih0YXJnZXRWZXJzZVVTRk0pXG4gICAgICByZXR1cm4gY3VycmVudFZlcnNlT2JqZWN0c19cbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxWZXJzZU9iamVjdHNcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWQsIG5ld1ZlcnNlVGV4dF0pXG5cbiAgY29uc3QgdW5zYXZlZENoYW5nZXM6Ym9vbGVhbiA9IFJlYWN0LnVzZU1lbW8oICgpID0+IHsgLy8gaWYgdmVyc2UgaGFzIGJlZW4gZWRpdGVkIG9yIGFsaWdubWVudCBjaGFuZ2VkLCB0aGVuIGluZGljYXRlIHdlIGhhdmUgdW5zYXZlZCBjaGFuZ2VzXG4gICAgY29uc3QgY2hhbmdlZCA9IHZlcnNlVGV4dENoYW5nZWQgfHwgKHVwZGF0ZWRWZXJzZU9iamVjdHMgJiYgIWlzRXF1YWwoaW5pdGlhbFZlcnNlT2JqZWN0cywgdXBkYXRlZFZlcnNlT2JqZWN0cykpXG4gICAgcmV0dXJuIGNoYW5nZWRcbiAgfSwgW3VwZGF0ZWRWZXJzZU9iamVjdHMsIGluaXRpYWxWZXJzZU9iamVjdHMsIHZlcnNlVGV4dENoYW5nZWRdKVxuXG4gIC8qKlxuICAgKiBjYWxsYmFjayB0byBzY3JpcHR1cmUgY2FyZCB0byB1cGRhdGVkIHdpdGggbGF0ZXN0IHN0YXRlIGZvciBzYXZpbmdcbiAgICogQHBhcmFtIHtib29sZWFufSB1bnNhdmVkQ2hhbmdlc19cbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1N0YXRlXG4gICAqL1xuICBmdW5jdGlvbiBjYWxsU2V0U2F2ZWRTdGF0ZSh1bnNhdmVkQ2hhbmdlc18sIG5ld1N0YXRlID0geyB9ICkge1xuICAgIGNvbnN0IF9uZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coYGNhbGxTZXRTYXZlZFN0YXRlIC0gbmV3IHN0YXRlYCwgX25ld1N0YXRlKVxuICAgIHNldFNhdmVkQ2hhbmdlcyAmJiBzZXRTYXZlZENoYW5nZXMoY3VycmVudEluZGV4LCAhdW5zYXZlZENoYW5nZXNfLCB7XG4gICAgICBnZXRDaGFuZ2VzLFxuICAgICAgY2xlYXJDaGFuZ2VzLFxuICAgICAgc3RhdGU6IF9uZXdTdGF0ZSxcbiAgICB9KVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2V0IHNhdmVkIGNoYW5nZXMgd2hlbmV2ZXIgdXNlciBlZGl0cyB2ZXJzZSB0ZXh0IG9yIGFsaWdubWVudHMgb3IgaWYgYWxpZ25tZW50cyBhcmUgb3BlblxuICAgIGNvbnN0IHVuc2F2ZWRDaGFuZ2VzXyA9IHVuc2F2ZWRDaGFuZ2VzIHx8IGFsaWduZXJEYXRhXG4gICAgY2FsbFNldFNhdmVkU3RhdGUodW5zYXZlZENoYW5nZXNfKVxuICB9LCBbdW5zYXZlZENoYW5nZXMsIGFsaWduZXJEYXRhXSlcblxuICAvKipcbiAgICogY2FsbGJhY2sgZm9yIHdoZW4gYWxpZ25tZW50cyBhcmUgYmVpbmcgY2hhbmdlZFxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0c1xuICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGFsaWdubWVudCBpcyBjb21wbGV0ZVxuICAgKi9cbiAgZnVuY3Rpb24gb25BbGlnbm1lbnRzQ2hhbmdlKHJlc3VsdHMpIHtcbiAgICBjb25zb2xlLmxvZyhgb25BbGlnbm1lbnRzQ2hhbmdlKCkgLSBhbGlnbm1lbnQgY2hhbmdlZCwgcmVzdWx0c2AsIHJlc3VsdHMpIC8vIG1lcmdlIGFsaWdubWVudHMgaW50byB0YXJnZXQgdmVyc2UgYW5kIGNvbnZlcnQgdG8gVVNGTVxuICAgIGNvbnN0IHsgdGFyZ2V0V29yZHMsIHZlcnNlQWxpZ25tZW50cyB9ID0gcmVzdWx0c1xuICAgIGNvbnN0IGFsaWdubWVudENvbXBsZXRlID0gQWxpZ25tZW50SGVscGVycy5hcmVBbGdubWVudHNDb21wbGV0ZSh0YXJnZXRXb3JkcywgdmVyc2VBbGlnbm1lbnRzKVxuICAgIGNvbnNvbGUubG9nKGBBbGlnbm1lbnRzIGFyZSAke2FsaWdubWVudENvbXBsZXRlID8gJ0NPTVBMRVRFIScgOiAnaW5jb21wbGV0ZSd9YClcbiAgICBzZXRTdGF0ZSh7IG5ld0FsaWdubWVudHM6IHJlc3VsdHMsIGFsaWduZWQ6IGFsaWdubWVudENvbXBsZXRlIH0pXG4gICAgcmV0dXJuIGFsaWdubWVudENvbXBsZXRlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGlvbnM6IHtcbiAgICAgIGNhbmNlbEFsaWdubWVudCxcbiAgICAgIGNsZWFyQ2hhbmdlcyxcbiAgICAgIGdldENoYW5nZXMsXG4gICAgICBoYW5kbGVBbGlnbm1lbnRDbGljayxcbiAgICAgIG9uQWxpZ25tZW50c0NoYW5nZSxcbiAgICAgIHNhdmVBbGlnbm1lbnQsXG4gICAgICBzZXRFZGl0aW5nLFxuICAgICAgc2V0VmVyc2VDaGFuZ2VkLFxuICAgIH0sXG4gICAgc3RhdGU6IHtcbiAgICAgIGFsaWduZWQsXG4gICAgICBhbGlnbmVyRGF0YSxcbiAgICAgIGN1cnJlbnRWZXJzZU9iamVjdHMsXG4gICAgICBlZGl0aW5nLFxuICAgICAgaW5pdGlhbFZlcnNlVGV4dCxcbiAgICAgIGluaXRpYWxWZXJzZU9iamVjdHMsXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICByZWZlcmVuY2U6IGJhc2ljUmVmZXJlbmNlLFxuICAgICAgc291cmNlTGFuZ3VhZ2UsXG4gICAgICB0YXJnZXRMYW5ndWFnZSxcbiAgICAgIHRpdGxlLFxuICAgICAgdW5zYXZlZENoYW5nZXMsXG4gICAgICB2ZXJzZVRleHRDaGFuZ2VkLFxuICAgIH0sXG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import "core-js/modules/es.array.concat.js";
1
2
  import "core-js/modules/es.object.define-property.js";
2
3
 
3
4
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
@@ -6,14 +7,13 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
6
7
 
7
8
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
9
 
10
+ import { useEffect } from 'react';
9
11
  import { useScripture } from '..';
10
12
  import { getScriptureResourceSettings } from '../utils/ScriptureSettings';
11
13
  /**
12
14
  * hook to get a scripture resource
13
- * @param {string} bookId
14
15
  * @param {object} scriptureSettings - info about the scripture being referenced
15
- * @param {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