single-scripture-rcl 3.4.1 → 3.4.2-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ScriptureCard/ScriptureCard.js +429 -744
- package/dist/components/ScripturePane/ScripturePane.js +27 -57
- package/dist/components/VerseSelectorPopup/index.js +1 -1
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/useScripture.js +112 -388
- package/dist/hooks/useScriptureAlignmentEdit.js +74 -88
- package/dist/hooks/useScriptureResources.js +18 -20
- package/dist/hooks/useScriptureSelector.js +12 -12
- package/dist/hooks/useScriptureSettings.js +39 -35
- package/dist/utils/ScriptureSettings.js +6 -11
- package/dist/utils/index.js +1 -2
- package/package.json +6 -7
- package/dist/utils/maps.js +0 -41
|
@@ -2,23 +2,16 @@ import "core-js/modules/es.array.concat.js";
|
|
|
2
2
|
import "core-js/modules/es.array.every.js";
|
|
3
3
|
import "core-js/modules/es.array.filter.js";
|
|
4
4
|
import "core-js/modules/es.array.find-index.js";
|
|
5
|
-
import "core-js/modules/es.array.for-each.js";
|
|
6
5
|
import "core-js/modules/es.array.includes.js";
|
|
7
6
|
import "core-js/modules/es.array.is-array.js";
|
|
8
|
-
import "core-js/modules/es.array.iterator.js";
|
|
9
7
|
import "core-js/modules/es.array.join.js";
|
|
10
8
|
import "core-js/modules/es.array.map.js";
|
|
11
|
-
import "core-js/modules/es.map.js";
|
|
12
9
|
import "core-js/modules/es.object.keys.js";
|
|
13
|
-
import "core-js/modules/es.object.to-string.js";
|
|
14
10
|
import "core-js/modules/es.object.values.js";
|
|
15
11
|
import "core-js/modules/es.parse-int.js";
|
|
16
12
|
import "core-js/modules/es.regexp.exec.js";
|
|
17
13
|
import "core-js/modules/es.string.includes.js";
|
|
18
|
-
import "core-js/modules/es.string.iterator.js";
|
|
19
14
|
import "core-js/modules/es.string.split.js";
|
|
20
|
-
import "core-js/modules/web.dom-collections.for-each.js";
|
|
21
|
-
import "core-js/modules/web.dom-collections.iterator.js";
|
|
22
15
|
import "regenerator-runtime/runtime.js";
|
|
23
16
|
|
|
24
17
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
@@ -57,24 +50,17 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
57
50
|
|
|
58
51
|
import * as React from 'react';
|
|
59
52
|
import * as PropTypes from 'prop-types';
|
|
60
|
-
import { core
|
|
53
|
+
import { core } from 'scripture-resources-rcl';
|
|
61
54
|
import usfmjs from 'usfm-js';
|
|
62
55
|
import { useEdit } from 'gitea-react-toolkit';
|
|
63
|
-
import { MdUpdateDisabled } from 'react-icons/md';
|
|
64
|
-
import { FiShare } from 'react-icons/fi';
|
|
65
56
|
import { IconButton } from '@mui/material';
|
|
66
57
|
import { RxLink2, RxLinkBreak2 } from 'react-icons/rx';
|
|
67
|
-
import { Card,
|
|
68
|
-
|
|
69
|
-
import { getQuoteMatchesInBookRef } from 'uw-quote-helpers';
|
|
58
|
+
import { Card, useCardState, useUserBranch, useBranchMerger, useContentUpdateProps, useMasterMergeProps, UpdateBranchButton, ErrorDialog, ERROR_STATE, MANIFEST_NOT_LOADED_ERROR } from 'translation-helps-rcl';
|
|
70
59
|
import { AlignmentHelpers, UsfmFileConversionHelpers } from 'word-aligner-rcl';
|
|
71
60
|
import * as isEqual from 'deep-equal';
|
|
72
|
-
import { getVerses } from 'bible-reference-range';
|
|
73
61
|
import { ScripturePane, ScriptureSelector } from '..';
|
|
74
62
|
import { useScriptureSettings } from '../../hooks/useScriptureSettings';
|
|
75
|
-
import {
|
|
76
|
-
import { delay } from '../../utils/delay';
|
|
77
|
-
import { areMapsTheSame } from '../../utils/maps';
|
|
63
|
+
import { getResourceLink, getResourceMessage, getScriptureVersionSettings, isOriginalBible } from '../../utils/ScriptureSettings';
|
|
78
64
|
import { Title } from '../ScripturePane/styled';
|
|
79
65
|
import { NT_ORIG_LANG, ORIGINAL_SOURCE, OT_ORIG_LANG } from '../../utils';
|
|
80
66
|
import { VerseSelectorPopup } from '../VerseSelectorPopup';
|
|
@@ -84,140 +70,80 @@ var style = {
|
|
|
84
70
|
marginTop: '16px',
|
|
85
71
|
width: '500px'
|
|
86
72
|
};
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
return areSame;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
export default function ScriptureCard(_ref2) {
|
|
137
|
-
var _scriptureConfig$reso, _scriptureConfig$reso2, _scriptureConfig$reso3, _scriptureConfig$reso4, _authentication$token, _scriptureConfig$reso6, _scriptureConfig$reso7, _scriptureConfig$reso8, _httpConfig, _httpConfig2, _versesForRef3, _versesForRef4;
|
|
138
|
-
|
|
139
|
-
var appRef = _ref2.appRef,
|
|
140
|
-
authentication = _ref2.authentication,
|
|
141
|
-
bookIndex = _ref2.bookIndex,
|
|
142
|
-
cardNum = _ref2.cardNum,
|
|
143
|
-
classes = _ref2.classes,
|
|
144
|
-
disableWordPopover = _ref2.disableWordPopover,
|
|
145
|
-
getLanguage = _ref2.getLanguage,
|
|
146
|
-
getLexiconData = _ref2.getLexiconData,
|
|
147
|
-
greekRepoUrl = _ref2.greekRepoUrl,
|
|
148
|
-
hebrewRepoUrl = _ref2.hebrewRepoUrl,
|
|
149
|
-
httpConfig = _ref2.httpConfig,
|
|
150
|
-
id = _ref2.id,
|
|
151
|
-
isNT = _ref2.isNT,
|
|
152
|
-
loggedInUser = _ref2.loggedInUser,
|
|
153
|
-
onMinimize = _ref2.onMinimize,
|
|
154
|
-
onResourceError = _ref2.onResourceError,
|
|
155
|
-
originalScriptureBookObjects = _ref2.originalScriptureBookObjects,
|
|
156
|
-
reference = _ref2.reference,
|
|
157
|
-
_ref2$resource = _ref2.resource,
|
|
158
|
-
owner = _ref2$resource.owner,
|
|
159
|
-
languageId = _ref2$resource.languageId,
|
|
160
|
-
resourceId = _ref2$resource.resourceId,
|
|
161
|
-
originalLanguageOwner = _ref2$resource.originalLanguageOwner,
|
|
162
|
-
resourceLink = _ref2.resourceLink,
|
|
163
|
-
selectedQuote = _ref2.selectedQuote,
|
|
164
|
-
server = _ref2.server,
|
|
165
|
-
setCardsLoading = _ref2.setCardsLoading,
|
|
166
|
-
setCardsSaving = _ref2.setCardsSaving,
|
|
167
|
-
setSavedChanges = _ref2.setSavedChanges,
|
|
168
|
-
setWordAlignerStatus = _ref2.setWordAlignerStatus,
|
|
169
|
-
translate = _ref2.translate,
|
|
170
|
-
title = _ref2.title,
|
|
171
|
-
useUserLocalStorage = _ref2.useUserLocalStorage,
|
|
172
|
-
updateMergeState = _ref2.updateMergeState;
|
|
173
|
-
var bookId = reference === null || reference === void 0 ? void 0 : reference.projectId;
|
|
73
|
+
export default function ScriptureCard(_ref) {
|
|
74
|
+
var _scriptureConfig$reso, _scriptureConfig$reso2, _scriptureConfig$reso3, _scriptureConfig$reso4, _authentication$token, _scriptureConfig$reso6, _scriptureConfig$reso7, _scriptureConfig$reso8, _httpConfig, _httpConfig2;
|
|
75
|
+
|
|
76
|
+
var id = _ref.id,
|
|
77
|
+
isNT = _ref.isNT,
|
|
78
|
+
title = _ref.title,
|
|
79
|
+
server = _ref.server,
|
|
80
|
+
appRef = _ref.appRef,
|
|
81
|
+
cardNum = _ref.cardNum,
|
|
82
|
+
classes = _ref.classes,
|
|
83
|
+
_ref$resource = _ref.resource,
|
|
84
|
+
owner = _ref$resource.owner,
|
|
85
|
+
languageId = _ref$resource.languageId,
|
|
86
|
+
resourceId = _ref$resource.resourceId,
|
|
87
|
+
originalLanguageOwner = _ref$resource.originalLanguageOwner,
|
|
88
|
+
getLanguage = _ref.getLanguage,
|
|
89
|
+
_ref$reference = _ref.reference,
|
|
90
|
+
verse = _ref$reference.verse,
|
|
91
|
+
chapter = _ref$reference.chapter,
|
|
92
|
+
bookId = _ref$reference.projectId,
|
|
93
|
+
resourceLink = _ref.resourceLink,
|
|
94
|
+
useUserLocalStorage = _ref.useUserLocalStorage,
|
|
95
|
+
disableWordPopover = _ref.disableWordPopover,
|
|
96
|
+
onResourceError = _ref.onResourceError,
|
|
97
|
+
httpConfig = _ref.httpConfig,
|
|
98
|
+
greekRepoUrl = _ref.greekRepoUrl,
|
|
99
|
+
hebrewRepoUrl = _ref.hebrewRepoUrl,
|
|
100
|
+
getLexiconData = _ref.getLexiconData,
|
|
101
|
+
fetchGlossesForVerse = _ref.fetchGlossesForVerse,
|
|
102
|
+
translate = _ref.translate,
|
|
103
|
+
onMinimize = _ref.onMinimize,
|
|
104
|
+
loggedInUser = _ref.loggedInUser,
|
|
105
|
+
authentication = _ref.authentication,
|
|
106
|
+
setSavedChanges = _ref.setSavedChanges,
|
|
107
|
+
bookIndex = _ref.bookIndex,
|
|
108
|
+
addVerseRange = _ref.addVerseRange,
|
|
109
|
+
setWordAlignerStatus = _ref.setWordAlignerStatus,
|
|
110
|
+
updateMergeState = _ref.updateMergeState,
|
|
111
|
+
setCardsLoadingUpdate = _ref.setCardsLoadingUpdate,
|
|
112
|
+
setCardsLoadingMerge = _ref.setCardsLoadingMerge,
|
|
113
|
+
setCardsSaving = _ref.setCardsSaving;
|
|
174
114
|
|
|
175
115
|
var _React$useState = React.useState({
|
|
176
|
-
checkForEditBranch: 0,
|
|
177
|
-
currentReference: null,
|
|
178
|
-
editBranchReady: false,
|
|
179
116
|
haveUnsavedChanges: false,
|
|
180
|
-
lastSelectedQuote: null,
|
|
181
|
-
readyForFetch: false,
|
|
182
117
|
ref: appRef,
|
|
183
118
|
saveClicked: false,
|
|
184
119
|
saveContent: null,
|
|
185
|
-
selections: new Map(),
|
|
186
120
|
sha: null,
|
|
187
|
-
showAlignmentPopup: false,
|
|
188
121
|
startSave: false,
|
|
189
122
|
urlError: null,
|
|
190
123
|
usingUserBranch: false,
|
|
191
124
|
unsavedChangesList: {},
|
|
192
|
-
versesAlignmentStatus: null,
|
|
193
125
|
versesForRef: null,
|
|
194
|
-
|
|
195
|
-
verseSelectedForAlignment: null
|
|
126
|
+
showAlignmentPopup: false,
|
|
127
|
+
verseSelectedForAlignment: null,
|
|
128
|
+
versesAlignmentStatus: null
|
|
196
129
|
}),
|
|
197
130
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
198
131
|
state = _React$useState2[0],
|
|
199
132
|
setState_ = _React$useState2[1];
|
|
200
133
|
|
|
201
|
-
var
|
|
202
|
-
currentReference = state.currentReference,
|
|
203
|
-
editBranchReady = state.editBranchReady,
|
|
204
|
-
haveUnsavedChanges = state.haveUnsavedChanges,
|
|
205
|
-
lastSelectedQuote = state.lastSelectedQuote,
|
|
206
|
-
readyForFetch = state.readyForFetch,
|
|
207
|
-
ref = state.ref,
|
|
134
|
+
var ref = state.ref,
|
|
208
135
|
saveClicked = state.saveClicked,
|
|
209
136
|
saveContent = state.saveContent,
|
|
210
|
-
selections = state.selections,
|
|
211
137
|
sha = state.sha,
|
|
212
|
-
showAlignmentPopup = state.showAlignmentPopup,
|
|
213
138
|
startSave = state.startSave,
|
|
214
139
|
urlError = state.urlError,
|
|
215
140
|
usingUserBranch = state.usingUserBranch,
|
|
216
141
|
unsavedChangesList = state.unsavedChangesList,
|
|
217
|
-
|
|
142
|
+
haveUnsavedChanges = state.haveUnsavedChanges,
|
|
143
|
+
versesForRef = state.versesForRef,
|
|
144
|
+
showAlignmentPopup = state.showAlignmentPopup,
|
|
218
145
|
verseSelectedForAlignment = state.verseSelectedForAlignment,
|
|
219
|
-
versesAlignmentStatus = state.versesAlignmentStatus
|
|
220
|
-
versesForRef = state.versesForRef;
|
|
146
|
+
versesAlignmentStatus = state.versesAlignmentStatus;
|
|
221
147
|
|
|
222
148
|
var _useUserLocalStorage = useUserLocalStorage(KEY_FONT_SIZE_BASE + cardNum, 100),
|
|
223
149
|
_useUserLocalStorage2 = _slicedToArray(_useUserLocalStorage, 2),
|
|
@@ -236,34 +162,34 @@ export default function ScriptureCard(_ref2) {
|
|
|
236
162
|
httpConfig = _objectSpread(_objectSpread({}, httpConfig), {}, {
|
|
237
163
|
cache: {
|
|
238
164
|
maxAge: 0
|
|
239
|
-
}
|
|
240
|
-
noCache: true
|
|
165
|
+
}
|
|
241
166
|
}); // disable http caching
|
|
242
167
|
}
|
|
243
168
|
|
|
244
169
|
var _useScriptureSettings = useScriptureSettings({
|
|
170
|
+
isNT: isNT,
|
|
171
|
+
title: title,
|
|
172
|
+
verse: verse,
|
|
173
|
+
owner: owner,
|
|
174
|
+
bookId: bookId,
|
|
245
175
|
appRef: ref,
|
|
176
|
+
server: server,
|
|
246
177
|
cardNum: cardNum,
|
|
247
|
-
|
|
248
|
-
greekRepoUrl: greekRepoUrl,
|
|
249
|
-
hebrewRepoUrl: hebrewRepoUrl,
|
|
250
|
-
httpConfig: httpConfig,
|
|
251
|
-
isNT: isNT,
|
|
178
|
+
chapter: chapter,
|
|
252
179
|
languageId: languageId,
|
|
253
|
-
originalLanguageOwner: originalLanguageOwner,
|
|
254
|
-
owner: owner,
|
|
255
|
-
readyForFetch: readyForFetch,
|
|
256
|
-
reference: currentReference || reference,
|
|
257
180
|
resourceId: resourceId,
|
|
258
181
|
resourceLink: resourceLink,
|
|
182
|
+
useUserLocalStorage: useUserLocalStorage,
|
|
183
|
+
disableWordPopover: disableWordPopover,
|
|
184
|
+
originalLanguageOwner: originalLanguageOwner,
|
|
259
185
|
setUrlError: function setUrlError(error) {
|
|
260
186
|
return setState({
|
|
261
187
|
urlError: error
|
|
262
188
|
});
|
|
263
189
|
},
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
190
|
+
httpConfig: httpConfig,
|
|
191
|
+
greekRepoUrl: greekRepoUrl,
|
|
192
|
+
hebrewRepoUrl: hebrewRepoUrl,
|
|
267
193
|
wholeBook: true
|
|
268
194
|
}),
|
|
269
195
|
isNewTestament = _useScriptureSettings.isNewTestament,
|
|
@@ -277,23 +203,14 @@ export default function ScriptureCard(_ref2) {
|
|
|
277
203
|
var repo = "".concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso = scriptureConfig.resource) === null || _scriptureConfig$reso === void 0 ? void 0 : _scriptureConfig$reso.languageId, "_").concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso2 = scriptureConfig.resource) === null || _scriptureConfig$reso2 === void 0 ? void 0 : _scriptureConfig$reso2.projectId);
|
|
278
204
|
var reference_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.reference) || null;
|
|
279
205
|
React.useEffect(function () {
|
|
280
|
-
var _fetchResp_$data
|
|
206
|
+
var _fetchResp_$data;
|
|
281
207
|
|
|
282
208
|
// get the _sha from last scripture download
|
|
283
209
|
var _sha = (fetchResp_ === null || fetchResp_ === void 0 ? void 0 : (_fetchResp_$data = fetchResp_.data) === null || _fetchResp_$data === void 0 ? void 0 : _fetchResp_$data.sha) || null;
|
|
284
210
|
|
|
285
|
-
|
|
286
|
-
var validBranch = true;
|
|
287
|
-
|
|
288
|
-
if (_sha) {
|
|
289
|
-
// TRICKY: since this fetch may be delayed - make sure it was for the current branch before using the sha
|
|
290
|
-
var parts = (url || '').split('/');
|
|
291
|
-
var fetchBranch = parts.length > 7 ? parts[7] : '';
|
|
292
|
-
validBranch = fetchBranch === ref;
|
|
293
|
-
}
|
|
211
|
+
console.log("for ".concat(JSON.stringify(reference_), " new sha is ").concat(_sha));
|
|
294
212
|
|
|
295
|
-
if (
|
|
296
|
-
console.log("ScriptureCard: for ".concat(url, " ").concat(JSON.stringify(reference_), " new sha is ").concat(_sha));
|
|
213
|
+
if (_sha !== sha) {
|
|
297
214
|
setState({
|
|
298
215
|
sha: _sha
|
|
299
216
|
});
|
|
@@ -303,29 +220,27 @@ export default function ScriptureCard(_ref2) {
|
|
|
303
220
|
var cardResourceId = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso3 = scriptureConfig.resource) === null || _scriptureConfig$reso3 === void 0 ? void 0 : _scriptureConfig$reso3.projectId) || resourceId; // @ts-ignore
|
|
304
221
|
|
|
305
222
|
var ref_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso4 = scriptureConfig.resource) === null || _scriptureConfig$reso4 === void 0 ? void 0 : _scriptureConfig$reso4.ref) || appRef;
|
|
306
|
-
var canUseEditBranch =
|
|
307
|
-
ref_ === 'master' || ref_.includes(loggedInUser))); // also make sure not a version tag
|
|
223
|
+
var canUseEditBranch = loggedInUser && authentication && resourceId !== ORIGINAL_SOURCE && (ref_ === 'master' || ref_.substring(0, loggedInUser.length) === loggedInUser); // not tag
|
|
308
224
|
|
|
309
225
|
var _useUserBranch = useUserBranch({
|
|
226
|
+
owner: owner,
|
|
227
|
+
server: server,
|
|
310
228
|
appRef: appRef,
|
|
311
|
-
authentication: canUseEditBranch ? authentication : null,
|
|
312
|
-
bookId: bookId,
|
|
313
|
-
cardId: id,
|
|
314
|
-
cardResourceId: cardResourceId,
|
|
315
|
-
checkForEditBranch: checkForEditBranch,
|
|
316
229
|
languageId: languageId,
|
|
230
|
+
cardId: id,
|
|
317
231
|
loggedInUser: canUseEditBranch ? loggedInUser : null,
|
|
318
|
-
|
|
232
|
+
authentication: canUseEditBranch ? authentication : null,
|
|
233
|
+
cardResourceId: cardResourceId,
|
|
319
234
|
onResourceError: onResourceError,
|
|
320
|
-
server: server,
|
|
321
235
|
useUserLocalStorage: useUserLocalStorage
|
|
322
236
|
}),
|
|
323
237
|
_useUserBranch$state = _useUserBranch.state,
|
|
324
|
-
branchDetermined = _useUserBranch$state.branchDetermined,
|
|
325
|
-
userEditBranchName = _useUserBranch$state.userEditBranchName,
|
|
326
|
-
_usingUserBranch = _useUserBranch$state.usingUserBranch,
|
|
327
238
|
workingResourceBranch = _useUserBranch$state.workingResourceBranch,
|
|
328
|
-
|
|
239
|
+
userEditBranchName = _useUserBranch$state.userEditBranchName,
|
|
240
|
+
usingUserBranch_ = _useUserBranch$state.usingUserBranch,
|
|
241
|
+
_useUserBranch$action = _useUserBranch.actions,
|
|
242
|
+
startEditBranch = _useUserBranch$action.startEdit,
|
|
243
|
+
finishEdit = _useUserBranch$action.finishEdit;
|
|
329
244
|
|
|
330
245
|
var _useBranchMerger = useBranchMerger({
|
|
331
246
|
server: server,
|
|
@@ -337,94 +252,87 @@ export default function ScriptureCard(_ref2) {
|
|
|
337
252
|
|
|
338
253
|
var _useBranchMerger$stat = _useBranchMerger.state,
|
|
339
254
|
mergeToMaster = _useBranchMerger$stat.mergeStatus,
|
|
340
|
-
mergeFromMaster = _useBranchMerger$stat.updateStatus
|
|
341
|
-
_useBranchMerger$acti = _useBranchMerger.actions,
|
|
342
|
-
mergeFromMasterIntoUserBranch = _useBranchMerger$acti.updateUserBranch,
|
|
343
|
-
mergeToMasterFromUserBranch = _useBranchMerger$acti.mergeMasterBranch;
|
|
255
|
+
mergeFromMaster = _useBranchMerger$stat.updateStatus;
|
|
344
256
|
var updateButtonProps = useContentUpdateProps({
|
|
345
257
|
isSaving: startSave,
|
|
346
258
|
useBranchMerger: _useBranchMerger,
|
|
347
|
-
|
|
259
|
+
onUpdate: scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.reloadResource
|
|
348
260
|
});
|
|
349
261
|
var callUpdateUserBranch = updateButtonProps.callUpdateUserBranch,
|
|
350
262
|
isErrorDialogOpen = updateButtonProps.isErrorDialogOpen,
|
|
351
263
|
onCloseErrorDialog = updateButtonProps.onCloseErrorDialog,
|
|
352
|
-
|
|
264
|
+
isUpdateLoading = updateButtonProps.isLoading,
|
|
353
265
|
dialogMessage = updateButtonProps.dialogMessage,
|
|
354
266
|
dialogTitle = updateButtonProps.dialogTitle,
|
|
355
267
|
dialogLink = updateButtonProps.dialogLink,
|
|
356
268
|
dialogLinkTooltip = updateButtonProps.dialogLinkTooltip;
|
|
269
|
+
|
|
270
|
+
var onMerge = function onMerge() {
|
|
271
|
+
finishEdit();
|
|
272
|
+
setState({
|
|
273
|
+
ref: appRef
|
|
274
|
+
}); // scriptureConfig?.reloadResource()
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
var _useMasterMergeProps = useMasterMergeProps({
|
|
278
|
+
isSaving: startSave,
|
|
279
|
+
useBranchMerger: _useBranchMerger,
|
|
280
|
+
onMerge: onMerge
|
|
281
|
+
}),
|
|
282
|
+
isMergeLoading = _useMasterMergeProps.isLoading,
|
|
283
|
+
callMergeUserBranch = _useMasterMergeProps.callMergeUserBranch;
|
|
284
|
+
|
|
357
285
|
React.useEffect(function () {
|
|
358
286
|
if (cardResourceId) {
|
|
359
|
-
updateMergeState && updateMergeState(cardResourceId, mergeFromMaster, mergeToMaster, callUpdateUserBranch,
|
|
287
|
+
updateMergeState && updateMergeState(cardResourceId, mergeFromMaster, mergeToMaster, callUpdateUserBranch, callMergeUserBranch);
|
|
360
288
|
}
|
|
361
289
|
}, [cardResourceId, mergeFromMaster, mergeToMaster]);
|
|
362
290
|
React.useEffect(function () {
|
|
363
|
-
if (
|
|
364
|
-
|
|
291
|
+
if (isUpdateLoading) {
|
|
292
|
+
setCardsLoadingUpdate === null || setCardsLoadingUpdate === void 0 ? void 0 : setCardsLoadingUpdate(function (prevCardsLoading) {
|
|
365
293
|
return [].concat(_toConsumableArray(prevCardsLoading), [cardResourceId]);
|
|
366
294
|
});
|
|
367
295
|
} else {
|
|
368
|
-
|
|
296
|
+
setCardsLoadingUpdate === null || setCardsLoadingUpdate === void 0 ? void 0 : setCardsLoadingUpdate(function (prevCardsLoading) {
|
|
369
297
|
return prevCardsLoading.filter(function (cardId) {
|
|
370
298
|
return cardId !== cardResourceId;
|
|
371
299
|
});
|
|
372
300
|
});
|
|
373
301
|
}
|
|
374
|
-
}, [
|
|
375
|
-
var workingRef = canUseEditBranch ? workingResourceBranch : appRef;
|
|
376
|
-
var scriptureTitle;
|
|
377
|
-
|
|
378
|
-
if (!canUseEditBranch && !readyForFetch) {
|
|
379
|
-
// if bible not eligible for user branch, make sure it's ready
|
|
380
|
-
setState({
|
|
381
|
-
readyForFetch: true
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
|
|
302
|
+
}, [isUpdateLoading]);
|
|
385
303
|
React.useEffect(function () {
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
languageId: languageId,
|
|
390
|
-
resourceId: resourceId
|
|
391
|
-
});
|
|
392
|
-
|
|
393
|
-
if (canUseEditBranch) {
|
|
394
|
-
// if bible eligible for user branch, refresh it
|
|
395
|
-
setState({
|
|
396
|
-
readyForFetch: false,
|
|
397
|
-
checkForEditBranch: checkForEditBranch + 1
|
|
304
|
+
if (isMergeLoading) {
|
|
305
|
+
setCardsLoadingMerge === null || setCardsLoadingMerge === void 0 ? void 0 : setCardsLoadingMerge(function (prevCardsLoading) {
|
|
306
|
+
return [].concat(_toConsumableArray(prevCardsLoading), [cardResourceId]);
|
|
398
307
|
});
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
setState({
|
|
405
|
-
currentReference: reference
|
|
308
|
+
} else {
|
|
309
|
+
setCardsLoadingMerge === null || setCardsLoadingMerge === void 0 ? void 0 : setCardsLoadingMerge(function (prevCardsLoading) {
|
|
310
|
+
return prevCardsLoading.filter(function (cardId) {
|
|
311
|
+
return cardId !== cardResourceId;
|
|
312
|
+
});
|
|
406
313
|
});
|
|
407
314
|
}
|
|
408
|
-
}, [
|
|
315
|
+
}, [isMergeLoading]);
|
|
316
|
+
var workingRef = canUseEditBranch ? workingResourceBranch : appRef;
|
|
317
|
+
var scriptureTitle;
|
|
409
318
|
React.useEffect(function () {
|
|
410
|
-
//
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
if (!readyForFetch && branchDetermined) {
|
|
319
|
+
// select correct working ref - could be master, user branch, or release
|
|
320
|
+
if (usingUserBranch_ !== usingUserBranch) {
|
|
414
321
|
setState({
|
|
415
|
-
|
|
416
|
-
ref: workingRef
|
|
322
|
+
usingUserBranch: usingUserBranch_
|
|
417
323
|
});
|
|
418
324
|
}
|
|
419
|
-
}, [
|
|
325
|
+
}, [usingUserBranch_, usingUserBranch]);
|
|
420
326
|
React.useEffect(function () {
|
|
421
327
|
// select correct working ref - could be master, user branch, or release
|
|
422
|
-
|
|
328
|
+
var workingRef_ = workingRef || appRef;
|
|
329
|
+
|
|
330
|
+
if (ref !== workingRef_) {
|
|
423
331
|
setState({
|
|
424
|
-
|
|
332
|
+
ref: workingRef_
|
|
425
333
|
});
|
|
426
334
|
}
|
|
427
|
-
}, [
|
|
335
|
+
}, [workingRef, ref, appRef]);
|
|
428
336
|
React.useEffect(function () {
|
|
429
337
|
var _scriptureConfig$reso5;
|
|
430
338
|
|
|
@@ -479,7 +387,7 @@ export default function ScriptureCard(_ref2) {
|
|
|
479
387
|
});
|
|
480
388
|
var direction = (language === null || language === void 0 ? void 0 : language.direction) || 'ltr';
|
|
481
389
|
|
|
482
|
-
var
|
|
390
|
+
var reference = _objectSpread({}, scriptureConfig.reference);
|
|
483
391
|
|
|
484
392
|
var isHebrew = languageId_ === 'hbo';
|
|
485
393
|
var fontFactor = isHebrew ? 1.4 : 1; // we automatically scale up font size for Hebrew
|
|
@@ -521,13 +429,66 @@ export default function ScriptureCard(_ref2) {
|
|
|
521
429
|
disableWordPopover_ = !usingOriginalBible;
|
|
522
430
|
}
|
|
523
431
|
|
|
432
|
+
React.useEffect(function () {
|
|
433
|
+
// pre-cache glosses on verse change
|
|
434
|
+
var fetchGlossDataForVerse = /*#__PURE__*/function () {
|
|
435
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
436
|
+
var _verseObjects2;
|
|
437
|
+
|
|
438
|
+
var verseObjects, _iterator, _step, _verseRef$verseData, verseRef, _verseObjects;
|
|
439
|
+
|
|
440
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
441
|
+
while (1) {
|
|
442
|
+
switch (_context.prev = _context.next) {
|
|
443
|
+
case 0:
|
|
444
|
+
verseObjects = []; // get verse objects of all the verses
|
|
445
|
+
|
|
446
|
+
_iterator = _createForOfIteratorHelper((scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef) || []);
|
|
447
|
+
|
|
448
|
+
try {
|
|
449
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
450
|
+
verseRef = _step.value;
|
|
451
|
+
_verseObjects = verseRef === null || verseRef === void 0 ? void 0 : (_verseRef$verseData = verseRef.verseData) === null || _verseRef$verseData === void 0 ? void 0 : _verseRef$verseData.verseObjects;
|
|
452
|
+
verseObjects = verseObjects.concat(_verseObjects);
|
|
453
|
+
}
|
|
454
|
+
} catch (err) {
|
|
455
|
+
_iterator.e(err);
|
|
456
|
+
} finally {
|
|
457
|
+
_iterator.f();
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
if (!(!disableWordPopover && (_verseObjects2 = verseObjects) !== null && _verseObjects2 !== void 0 && _verseObjects2.length && fetchGlossesForVerse)) {
|
|
461
|
+
_context.next = 6;
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
_context.next = 6;
|
|
466
|
+
return fetchGlossesForVerse(verseObjects, languageId_);
|
|
467
|
+
|
|
468
|
+
case 6:
|
|
469
|
+
case "end":
|
|
470
|
+
return _context.stop();
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}, _callee);
|
|
474
|
+
}));
|
|
475
|
+
|
|
476
|
+
return function fetchGlossDataForVerse() {
|
|
477
|
+
return _ref2.apply(this, arguments);
|
|
478
|
+
};
|
|
479
|
+
}();
|
|
480
|
+
|
|
481
|
+
if (usingOriginalBible) {
|
|
482
|
+
fetchGlossDataForVerse();
|
|
483
|
+
}
|
|
484
|
+
}, [versesForRef, languageId_]);
|
|
524
485
|
var enableEdit = !usingOriginalBible;
|
|
525
486
|
var enableAlignment = !usingOriginalBible;
|
|
526
487
|
var originalRepoUrl = isNewTestament ? greekRepoUrl : hebrewRepoUrl;
|
|
527
488
|
var scriptureAlignmentEditConfig = {
|
|
528
489
|
authentication: canUseEditBranch ? authentication : null,
|
|
529
490
|
bookIndex: bookIndex,
|
|
530
|
-
currentVerseRef:
|
|
491
|
+
currentVerseRef: reference,
|
|
531
492
|
enableEdit: enableEdit,
|
|
532
493
|
enableAlignment: enableAlignment,
|
|
533
494
|
httpConfig: httpConfig,
|
|
@@ -621,7 +582,6 @@ export default function ScriptureCard(_ref2) {
|
|
|
621
582
|
function getBookName() {
|
|
622
583
|
var _scriptureConfig$refe;
|
|
623
584
|
|
|
624
|
-
// @ts-ignore
|
|
625
585
|
var bookCaps = scriptureConfig !== null && scriptureConfig !== void 0 && (_scriptureConfig$refe = scriptureConfig.reference) !== null && _scriptureConfig$refe !== void 0 && _scriptureConfig$refe.projectId ? scriptureConfig.reference.projectId.toUpperCase() : '';
|
|
626
586
|
return "".concat(bookIndex, "-").concat(bookCaps, ".usfm");
|
|
627
587
|
}
|
|
@@ -639,8 +599,7 @@ export default function ScriptureCard(_ref2) {
|
|
|
639
599
|
}, authentication === null || authentication === void 0 ? void 0 : authentication.config), {}, {
|
|
640
600
|
token: authentication === null || authentication === void 0 ? void 0 : authentication.token,
|
|
641
601
|
// @ts-ignore
|
|
642
|
-
timeout: ((_httpConfig = httpConfig) === null || _httpConfig === void 0 ? void 0 : _httpConfig.serverTimeOut) || ((_httpConfig2 = httpConfig) === null || _httpConfig2 === void 0 ? void 0 : _httpConfig2.timeout) ||
|
|
643
|
-
server: server
|
|
602
|
+
timeout: ((_httpConfig = httpConfig) === null || _httpConfig === void 0 ? void 0 : _httpConfig.serverTimeOut) || ((_httpConfig2 = httpConfig) === null || _httpConfig2 === void 0 ? void 0 : _httpConfig2.timeout) || 5000
|
|
644
603
|
}),
|
|
645
604
|
author: loggedInUser,
|
|
646
605
|
token: authentication === null || authentication === void 0 ? void 0 : authentication.token,
|
|
@@ -648,64 +607,66 @@ export default function ScriptureCard(_ref2) {
|
|
|
648
607
|
filepath: filepath,
|
|
649
608
|
repo: repo
|
|
650
609
|
}),
|
|
651
|
-
saveError = _useEdit.error,
|
|
652
|
-
isSaveError = _useEdit.isError,
|
|
653
610
|
onSaveEdit = _useEdit.onSaveEdit;
|
|
654
611
|
|
|
655
|
-
React.useEffect(function () {
|
|
656
|
-
// when we get a save saveError
|
|
657
|
-
if (saveError && isSaveError) {
|
|
658
|
-
console.log("save error", saveError); // onResourceError && onResourceError(null, false, null, `Error saving ${languageId_}_${resourceId} ${saveError}`, true)
|
|
659
|
-
}
|
|
660
|
-
}, [saveError, isSaveError]);
|
|
661
612
|
React.useEffect(function () {
|
|
662
613
|
// when startSave goes true, save edits to user branch and then clear startSave
|
|
663
614
|
var _saveEdit = /*#__PURE__*/function () {
|
|
664
|
-
var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function
|
|
665
|
-
|
|
615
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
616
|
+
var branch;
|
|
617
|
+
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
666
618
|
while (1) {
|
|
667
|
-
switch (
|
|
619
|
+
switch (_context2.prev = _context2.next) {
|
|
668
620
|
case 0:
|
|
669
621
|
// begin uploading new USFM
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
622
|
+
branch = workingResourceBranch !== 'master' ? workingResourceBranch : undefined;
|
|
623
|
+
|
|
624
|
+
if (branch) {
|
|
625
|
+
_context2.next = 5;
|
|
626
|
+
break;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
_context2.next = 4;
|
|
630
|
+
return startEditBranch();
|
|
631
|
+
|
|
632
|
+
case 4:
|
|
633
|
+
branch = _context2.sent;
|
|
634
|
+
|
|
635
|
+
case 5:
|
|
636
|
+
_context2.next = 7;
|
|
637
|
+
return onSaveEdit(branch).then(function (success) {
|
|
673
638
|
// push changed to server
|
|
674
639
|
if (success) {
|
|
675
640
|
console.log("saveChangesToCloud() - save scripture edits success");
|
|
641
|
+
setCardsSaving(function (prevCardsSaving) {
|
|
642
|
+
return prevCardsSaving.filter(function (cardId) {
|
|
643
|
+
return cardId !== cardResourceId;
|
|
644
|
+
});
|
|
645
|
+
});
|
|
646
|
+
setState({
|
|
647
|
+
startSave: false
|
|
648
|
+
});
|
|
676
649
|
var unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
677
650
|
|
|
678
651
|
if (unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length) {
|
|
679
|
-
var
|
|
680
|
-
|
|
652
|
+
var _iterator2 = _createForOfIteratorHelper(unsavedCardIndices),
|
|
653
|
+
_step2;
|
|
681
654
|
|
|
682
655
|
try {
|
|
683
|
-
for (
|
|
684
|
-
var cardIndex =
|
|
656
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
657
|
+
var cardIndex = _step2.value;
|
|
685
658
|
var clearChanges = unsavedChangesList[cardIndex].clearChanges;
|
|
686
659
|
clearChanges && clearChanges();
|
|
687
660
|
}
|
|
688
661
|
} catch (err) {
|
|
689
|
-
|
|
662
|
+
_iterator2.e(err);
|
|
690
663
|
} finally {
|
|
691
|
-
|
|
664
|
+
_iterator2.f();
|
|
692
665
|
}
|
|
693
666
|
}
|
|
694
667
|
|
|
695
668
|
console.info('saveChangesToCloud() - Reloading resource');
|
|
696
|
-
|
|
697
|
-
startSave: false,
|
|
698
|
-
readyForFetch: true,
|
|
699
|
-
ref: userEditBranchName
|
|
700
|
-
});
|
|
701
|
-
delay(500).then(function () {
|
|
702
|
-
setCardsSaving(function (prevCardsSaving) {
|
|
703
|
-
return prevCardsSaving.filter(function (cardId) {
|
|
704
|
-
return cardId !== cardResourceId;
|
|
705
|
-
});
|
|
706
|
-
});
|
|
707
|
-
scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.reloadResource(sha);
|
|
708
|
-
});
|
|
669
|
+
scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.reloadResource();
|
|
709
670
|
} else {
|
|
710
671
|
console.error('saveChangesToCloud() - saving changed scripture failed');
|
|
711
672
|
setCardsSaving(function (prevCardsSaving) {
|
|
@@ -719,12 +680,12 @@ export default function ScriptureCard(_ref2) {
|
|
|
719
680
|
}
|
|
720
681
|
});
|
|
721
682
|
|
|
722
|
-
case
|
|
683
|
+
case 7:
|
|
723
684
|
case "end":
|
|
724
|
-
return
|
|
685
|
+
return _context2.stop();
|
|
725
686
|
}
|
|
726
687
|
}
|
|
727
|
-
},
|
|
688
|
+
}, _callee2);
|
|
728
689
|
}));
|
|
729
690
|
|
|
730
691
|
return function _saveEdit() {
|
|
@@ -733,18 +694,14 @@ export default function ScriptureCard(_ref2) {
|
|
|
733
694
|
}();
|
|
734
695
|
|
|
735
696
|
if (startSave) {
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
setCardsSaving(function (prevCardsSaving) {
|
|
741
|
-
return [].concat(_toConsumableArray(prevCardsSaving), [cardResourceId]);
|
|
742
|
-
});
|
|
697
|
+
console.log("saveChangesToCloud - calling _saveEdit()");
|
|
698
|
+
setCardsSaving(function (prevCardsSaving) {
|
|
699
|
+
return [].concat(_toConsumableArray(prevCardsSaving), [cardResourceId]);
|
|
700
|
+
});
|
|
743
701
|
|
|
744
|
-
|
|
745
|
-
}
|
|
702
|
+
_saveEdit();
|
|
746
703
|
}
|
|
747
|
-
}, [startSave
|
|
704
|
+
}, [startSave]);
|
|
748
705
|
/**
|
|
749
706
|
* convert updatedVerseObjects to USFM and merge into the bibleUsfm
|
|
750
707
|
* @param {string} bibleUsfm - USFM of bible
|
|
@@ -779,361 +736,159 @@ export default function ScriptureCard(_ref2) {
|
|
|
779
736
|
}
|
|
780
737
|
|
|
781
738
|
React.useEffect(function () {
|
|
782
|
-
// for each unsaved change, call into
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
var
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
}
|
|
814
|
-
|
|
815
|
-
if (!createEditBranch) {
|
|
816
|
-
_context2.next = 10;
|
|
817
|
-
break;
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
// if not yet using the user branch, create it
|
|
821
|
-
console.log("saveChangesToCloud - creating edit branch");
|
|
822
|
-
setState({
|
|
823
|
-
editBranchReady: false,
|
|
824
|
-
readyForFetch: false,
|
|
825
|
-
sha: null
|
|
826
|
-
}); // we will need a new sha for book/branch
|
|
827
|
-
|
|
828
|
-
_context2.next = 8;
|
|
829
|
-
return startEditBranch();
|
|
830
|
-
|
|
831
|
-
case 8:
|
|
832
|
-
branch = _context2.sent;
|
|
833
|
-
|
|
834
|
-
if (branch) {
|
|
835
|
-
console.log("saveChangesToCloud - edit branch created");
|
|
836
|
-
setState({
|
|
837
|
-
editBranchReady: true,
|
|
838
|
-
readyForFetch: true,
|
|
839
|
-
ref: branch
|
|
840
|
-
});
|
|
841
|
-
} else {
|
|
842
|
-
console.log("saveChangesToCloud - failed to create edit branch");
|
|
843
|
-
}
|
|
844
|
-
|
|
845
|
-
case 10:
|
|
846
|
-
console.log("saveChangesToCloud - getting verse changes");
|
|
847
|
-
unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
848
|
-
|
|
849
|
-
if (!(unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length)) {
|
|
850
|
-
_context2.next = 46;
|
|
851
|
-
break;
|
|
852
|
-
}
|
|
853
|
-
|
|
854
|
-
bibleUsfm = core.getResponseData(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.fetchResponse);
|
|
855
|
-
mergeFail = false;
|
|
856
|
-
_cardNum = 0;
|
|
857
|
-
_iterator2 = _createForOfIteratorHelper(unsavedCardIndices);
|
|
858
|
-
_context2.prev = 17;
|
|
859
|
-
|
|
860
|
-
_iterator2.s();
|
|
861
|
-
|
|
862
|
-
case 19:
|
|
863
|
-
if ((_step2 = _iterator2.n()).done) {
|
|
864
|
-
_context2.next = 35;
|
|
865
|
-
break;
|
|
866
|
-
}
|
|
867
|
-
|
|
868
|
-
_cardIndex = _step2.value;
|
|
869
|
-
_cardNum = parseInt(_cardIndex);
|
|
870
|
-
_unsavedChangesList$_2 = unsavedChangesList[_cardNum], _getChanges2 = _unsavedChangesList$_2.getChanges, _state2 = _unsavedChangesList$_2.state;
|
|
871
|
-
|
|
872
|
-
if (!_getChanges2) {
|
|
873
|
-
_context2.next = 33;
|
|
874
|
-
break;
|
|
875
|
-
}
|
|
876
|
-
|
|
877
|
-
_newUsfm = void 0;
|
|
878
|
-
_getChanges3 = _getChanges2(_state2), _ref6 = _getChanges3.ref, _updatedVerseObjects = _getChanges3.updatedVerseObjects;
|
|
879
|
-
|
|
880
|
-
if (_updatedVerseObjects && bibleUsfm) {
|
|
881
|
-
// just replace verse
|
|
882
|
-
_newUsfm = mergeVerseObjectsIntoBibleUsfm(bibleUsfm, _ref6, _updatedVerseObjects, _cardNum);
|
|
883
|
-
}
|
|
884
|
-
|
|
885
|
-
if (!_newUsfm) {
|
|
886
|
-
_context2.next = 31;
|
|
887
|
-
break;
|
|
888
|
-
}
|
|
739
|
+
// for each unsaved change, call into versePane to get latest changes for verse to save
|
|
740
|
+
if (saveClicked) {
|
|
741
|
+
var unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
742
|
+
|
|
743
|
+
if (unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length) {
|
|
744
|
+
var bibleUsfm = core.getResponseData(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.fetchResponse);
|
|
745
|
+
var mergeFail = false;
|
|
746
|
+
var _cardNum = 0;
|
|
747
|
+
|
|
748
|
+
var _iterator3 = _createForOfIteratorHelper(unsavedCardIndices),
|
|
749
|
+
_step3;
|
|
750
|
+
|
|
751
|
+
try {
|
|
752
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
753
|
+
var _cardIndex = _step3.value;
|
|
754
|
+
_cardNum = parseInt(_cardIndex);
|
|
755
|
+
var _unsavedChangesList$_2 = unsavedChangesList[_cardNum],
|
|
756
|
+
_getChanges2 = _unsavedChangesList$_2.getChanges,
|
|
757
|
+
_state2 = _unsavedChangesList$_2.state;
|
|
758
|
+
|
|
759
|
+
if (_getChanges2) {
|
|
760
|
+
var _newUsfm = void 0;
|
|
761
|
+
|
|
762
|
+
var _getChanges3 = _getChanges2(_state2),
|
|
763
|
+
_ref6 = _getChanges3.ref,
|
|
764
|
+
_updatedVerseObjects = _getChanges3.updatedVerseObjects;
|
|
765
|
+
|
|
766
|
+
if (_updatedVerseObjects && bibleUsfm) {
|
|
767
|
+
// just replace verse
|
|
768
|
+
_newUsfm = mergeVerseObjectsIntoBibleUsfm(bibleUsfm, _ref6, _updatedVerseObjects, _cardNum);
|
|
769
|
+
}
|
|
889
770
|
|
|
771
|
+
if (_newUsfm) {
|
|
890
772
|
bibleUsfm = _newUsfm;
|
|
891
|
-
|
|
892
|
-
break;
|
|
893
|
-
|
|
894
|
-
case 31:
|
|
773
|
+
} else {
|
|
895
774
|
mergeFail = true;
|
|
896
|
-
return _context2.abrupt("break", 35);
|
|
897
|
-
|
|
898
|
-
case 33:
|
|
899
|
-
_context2.next = 19;
|
|
900
775
|
break;
|
|
901
|
-
|
|
902
|
-
case 35:
|
|
903
|
-
_context2.next = 40;
|
|
904
|
-
break;
|
|
905
|
-
|
|
906
|
-
case 37:
|
|
907
|
-
_context2.prev = 37;
|
|
908
|
-
_context2.t0 = _context2["catch"](17);
|
|
909
|
-
|
|
910
|
-
_iterator2.e(_context2.t0);
|
|
911
|
-
|
|
912
|
-
case 40:
|
|
913
|
-
_context2.prev = 40;
|
|
914
|
-
|
|
915
|
-
_iterator2.f();
|
|
916
|
-
|
|
917
|
-
return _context2.finish(40);
|
|
918
|
-
|
|
919
|
-
case 43:
|
|
920
|
-
if (mergeFail) {
|
|
921
|
-
// if we failed to merge, fallback to brute force verse objects to USFM
|
|
922
|
-
console.log("saveChangesToCloud(".concat(_cardNum, ") - verse not found, falling back to inserting verse object"));
|
|
923
|
-
_iterator3 = _createForOfIteratorHelper(unsavedCardIndices);
|
|
924
|
-
|
|
925
|
-
try {
|
|
926
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
927
|
-
cardIndex = _step3.value;
|
|
928
|
-
_cardNum2 = parseInt(cardIndex);
|
|
929
|
-
_unsavedChangesList$_ = unsavedChangesList[_cardNum2], getChanges = _unsavedChangesList$_.getChanges, _state = _unsavedChangesList$_.state;
|
|
930
|
-
|
|
931
|
-
if (getChanges) {
|
|
932
|
-
newUsfm = void 0;
|
|
933
|
-
_getChanges = getChanges(_state), newVerseText = _getChanges.newVerseText, _ref5 = _getChanges.ref, updatedVerseObjects = _getChanges.updatedVerseObjects;
|
|
934
|
-
|
|
935
|
-
if (updatedVerseObjects && !newUsfm) {
|
|
936
|
-
targetVerseObjects_ = null;
|
|
937
|
-
|
|
938
|
-
if (_ref5) {
|
|
939
|
-
if (newVerseText) {
|
|
940
|
-
_AlignmentHelpers$upd = AlignmentHelpers.updateAlignmentsToTargetVerse(updatedVerseObjects, newVerseText), targetVerseObjects = _AlignmentHelpers$upd.targetVerseObjects;
|
|
941
|
-
targetVerseObjects_ = targetVerseObjects;
|
|
942
|
-
} else {
|
|
943
|
-
targetVerseObjects_ = updatedVerseObjects;
|
|
944
|
-
}
|
|
945
|
-
|
|
946
|
-
newBookJson = targetVerseObjects_ && (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.updateVerse(_ref5.chapter, _ref5.verse, {
|
|
947
|
-
verseObjects: targetVerseObjects_
|
|
948
|
-
}));
|
|
949
|
-
}
|
|
950
|
-
}
|
|
951
|
-
}
|
|
952
|
-
}
|
|
953
|
-
} catch (err) {
|
|
954
|
-
_iterator3.e(err);
|
|
955
|
-
} finally {
|
|
956
|
-
_iterator3.f();
|
|
957
|
-
}
|
|
958
|
-
|
|
959
|
-
bibleUsfm = usfmjs.toUSFM(newBookJson, {
|
|
960
|
-
forcedNewLines: true
|
|
961
|
-
});
|
|
962
|
-
}
|
|
963
|
-
|
|
964
|
-
console.log("saveChangesToCloud() - saving new USFM: ".concat(bibleUsfm.substring(0, 100), "..."));
|
|
965
|
-
setState({
|
|
966
|
-
saveContent: bibleUsfm,
|
|
967
|
-
startSave: true,
|
|
968
|
-
saveClicked: false
|
|
969
|
-
});
|
|
970
|
-
|
|
971
|
-
case 46:
|
|
972
|
-
case "end":
|
|
973
|
-
return _context2.stop();
|
|
776
|
+
}
|
|
974
777
|
}
|
|
975
778
|
}
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
getReadyForSave();
|
|
982
|
-
}, [saveClicked]); // @ts-ignore
|
|
983
|
-
|
|
984
|
-
var _ref7 = _reference || {},
|
|
985
|
-
chapter = _ref7.chapter;
|
|
986
|
-
|
|
987
|
-
React.useEffect(function () {
|
|
988
|
-
var _versesForRef = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef;
|
|
989
|
-
|
|
990
|
-
var newSelections = new Map();
|
|
991
|
-
var updateSelections = false;
|
|
992
|
-
var _map = newSelections;
|
|
993
|
-
var originalBookId = originalScriptureBookObjects === null || originalScriptureBookObjects === void 0 ? void 0 : originalScriptureBookObjects.bookId;
|
|
994
|
-
var bookVerseObject = originalScriptureBookObjects === null || originalScriptureBookObjects === void 0 ? void 0 : originalScriptureBookObjects.chapters;
|
|
995
|
-
var newSelectedQuote = null; // if we have everything we need to calculate selections
|
|
779
|
+
} catch (err) {
|
|
780
|
+
_iterator3.e(err);
|
|
781
|
+
} finally {
|
|
782
|
+
_iterator3.f();
|
|
783
|
+
}
|
|
996
784
|
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
var _selectedQuote$refere3;
|
|
785
|
+
if (mergeFail) {
|
|
786
|
+
// if we failed to merge, fallback to brute force verse objects to USFM
|
|
787
|
+
console.log("saveChangesToCloud(".concat(_cardNum, ") - verse not found, falling back to inserting verse object"));
|
|
788
|
+
var newBookJson;
|
|
1002
789
|
|
|
1003
|
-
|
|
1004
|
-
|
|
790
|
+
var _iterator4 = _createForOfIteratorHelper(unsavedCardIndices),
|
|
791
|
+
_step4;
|
|
1005
792
|
|
|
1006
|
-
|
|
793
|
+
try {
|
|
794
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
795
|
+
var cardIndex = _step4.value;
|
|
1007
796
|
|
|
1008
|
-
|
|
1009
|
-
startVerse = parseInt(startVerse);
|
|
1010
|
-
}
|
|
797
|
+
var _cardNum2 = parseInt(cardIndex);
|
|
1011
798
|
|
|
1012
|
-
|
|
799
|
+
var _unsavedChangesList$_ = unsavedChangesList[_cardNum2],
|
|
800
|
+
getChanges = _unsavedChangesList$_.getChanges,
|
|
801
|
+
_state = _unsavedChangesList$_.state;
|
|
1013
802
|
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
var _chapter2 = verseRef.chapter,
|
|
1017
|
-
verse = verseRef.verse; // TRICKY - we remap verses in reference range to a linear series of verses so verse spans don't choke getQuoteMatchesInBookRef
|
|
803
|
+
if (getChanges) {
|
|
804
|
+
var newUsfm = void 0;
|
|
1018
805
|
|
|
1019
|
-
|
|
806
|
+
var _getChanges = getChanges(_state),
|
|
807
|
+
newVerseText = _getChanges.newVerseText,
|
|
808
|
+
_ref5 = _getChanges.ref,
|
|
809
|
+
updatedVerseObjects = _getChanges.updatedVerseObjects;
|
|
1020
810
|
|
|
1021
|
-
|
|
1022
|
-
|
|
811
|
+
if (updatedVerseObjects && !newUsfm) {
|
|
812
|
+
var targetVerseObjects_ = null;
|
|
1023
813
|
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
814
|
+
if (_ref5) {
|
|
815
|
+
if (newVerseText) {
|
|
816
|
+
var _AlignmentHelpers$upd = AlignmentHelpers.updateAlignmentsToTargetVerse(updatedVerseObjects, newVerseText),
|
|
817
|
+
targetVerseObjects = _AlignmentHelpers$upd.targetVerseObjects;
|
|
1027
818
|
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
var _iterator4 = _createForOfIteratorHelper(verses),
|
|
1034
|
-
_step4;
|
|
819
|
+
targetVerseObjects_ = targetVerseObjects;
|
|
820
|
+
} else {
|
|
821
|
+
targetVerseObjects_ = updatedVerseObjects;
|
|
822
|
+
}
|
|
1035
823
|
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
824
|
+
newBookJson = targetVerseObjects_ && (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.updateVerse(_ref5.chapter, _ref5.verse, {
|
|
825
|
+
verseObjects: targetVerseObjects_
|
|
826
|
+
}));
|
|
827
|
+
}
|
|
828
|
+
}
|
|
1041
829
|
}
|
|
1042
|
-
} catch (err) {
|
|
1043
|
-
_iterator4.e(err);
|
|
1044
|
-
} finally {
|
|
1045
|
-
_iterator4.f();
|
|
1046
830
|
}
|
|
1047
|
-
}
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
831
|
+
} catch (err) {
|
|
832
|
+
_iterator4.e(err);
|
|
833
|
+
} finally {
|
|
834
|
+
_iterator4.f();
|
|
1051
835
|
}
|
|
1052
836
|
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
originalVerses[_chapter2][_verse] = {
|
|
1056
|
-
verseObjects: verseObjects
|
|
1057
|
-
};
|
|
1058
|
-
|
|
1059
|
-
_map.set("".concat(_chapter2, ":").concat(verse), verseObjects);
|
|
1060
|
-
}
|
|
1061
|
-
} // create new reference range for new linear verse range
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
var _selectedQuote$refere = selectedQuote === null || selectedQuote === void 0 ? void 0 : (_selectedQuote$refere3 = selectedQuote.reference) === null || _selectedQuote$refere3 === void 0 ? void 0 : _selectedQuote$refere3.split(':'),
|
|
1065
|
-
_selectedQuote$refere2 = _slicedToArray(_selectedQuote$refere, 1),
|
|
1066
|
-
_chapter = _selectedQuote$refere2[0];
|
|
1067
|
-
|
|
1068
|
-
var subRef = "".concat(_chapter, ":").concat(startVerse);
|
|
1069
|
-
|
|
1070
|
-
if (lastVerse != startVerse) {
|
|
1071
|
-
subRef += "-".concat(lastVerse);
|
|
1072
|
-
}
|
|
1073
|
-
|
|
1074
|
-
var quoteMatches = getQuoteMatchesInBookRef({
|
|
1075
|
-
bookObject: originalVerses,
|
|
1076
|
-
ref: subRef,
|
|
1077
|
-
quote: selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.quote,
|
|
1078
|
-
occurrence: selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.occurrence
|
|
1079
|
-
});
|
|
1080
|
-
|
|
1081
|
-
var _selections = new Map();
|
|
1082
|
-
|
|
1083
|
-
if (quoteMatches !== null && quoteMatches !== void 0 && quoteMatches.size) {
|
|
1084
|
-
quoteMatches.forEach(function (words, key) {
|
|
1085
|
-
var _key = substitute[key];
|
|
1086
|
-
|
|
1087
|
-
_selections.set(_key, words.map(function (word) {
|
|
1088
|
-
return _objectSpread(_objectSpread({}, word), {}, {
|
|
1089
|
-
text: core.normalizeString(word.text)
|
|
1090
|
-
});
|
|
1091
|
-
}));
|
|
837
|
+
bibleUsfm = usfmjs.toUSFM(newBookJson, {
|
|
838
|
+
forcedNewLines: true
|
|
1092
839
|
});
|
|
1093
840
|
}
|
|
1094
841
|
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
842
|
+
console.log("saveChangesToCloud() - saving new USFM: ".concat(bibleUsfm.substring(0, 100), "..."));
|
|
843
|
+
setCardsSaving(function (prevCardsSaving) {
|
|
844
|
+
return [].concat(_toConsumableArray(prevCardsSaving), [cardResourceId]);
|
|
845
|
+
});
|
|
846
|
+
setState({
|
|
847
|
+
saveContent: bibleUsfm,
|
|
848
|
+
startSave: true,
|
|
849
|
+
saveClicked: false
|
|
850
|
+
});
|
|
1098
851
|
}
|
|
1099
852
|
}
|
|
853
|
+
}, [saveClicked]);
|
|
854
|
+
React.useEffect(function () {
|
|
855
|
+
if (!isEqual(versesForRef, scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef)) {
|
|
856
|
+
var _versesForRef = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef;
|
|
1100
857
|
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
newState.verseObjectsMap = _map;
|
|
1105
|
-
}
|
|
858
|
+
setState({
|
|
859
|
+
versesForRef: _versesForRef
|
|
860
|
+
});
|
|
1106
861
|
|
|
1107
|
-
|
|
862
|
+
var _iterator5 = _createForOfIteratorHelper(_versesForRef || []),
|
|
863
|
+
_step5;
|
|
1108
864
|
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
865
|
+
try {
|
|
866
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
867
|
+
var verseRef = _step5.value;
|
|
868
|
+
// check for verse range
|
|
869
|
+
var _verse = verseRef.verse;
|
|
1114
870
|
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
871
|
+
if (addVerseRange && typeof _verse === 'string') {
|
|
872
|
+
// @ts-ignore
|
|
873
|
+
if (_verse.includes('-')) {
|
|
874
|
+
var _scriptureConfig$refe2;
|
|
1118
875
|
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
876
|
+
addVerseRange("".concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$refe2 = scriptureConfig.reference) === null || _scriptureConfig$refe2 === void 0 ? void 0 : _scriptureConfig$refe2.chapter, ":").concat(_verse));
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
} catch (err) {
|
|
881
|
+
_iterator5.e(err);
|
|
882
|
+
} finally {
|
|
883
|
+
_iterator5.f();
|
|
1122
884
|
}
|
|
1123
885
|
}
|
|
1124
|
-
|
|
1125
|
-
if (Object.keys(newState).length) {
|
|
1126
|
-
setState(newState);
|
|
1127
|
-
}
|
|
1128
|
-
}, [owner, resourceId, bookId, languageId_, scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef, originalScriptureBookObjects, selectedQuote]);
|
|
886
|
+
}, [scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef]);
|
|
1129
887
|
React.useEffect(function () {
|
|
1130
|
-
// clear settings on verse change
|
|
1131
888
|
setState({
|
|
1132
|
-
versesAlignmentStatus: null
|
|
1133
|
-
unsavedChangesList: {},
|
|
1134
|
-
haveUnsavedChanges: false
|
|
889
|
+
versesAlignmentStatus: null
|
|
1135
890
|
});
|
|
1136
|
-
}, [
|
|
891
|
+
}, [verse]);
|
|
1137
892
|
|
|
1138
893
|
var updateVersesAlignmentStatus = function updateVersesAlignmentStatus(reference, aligned) {
|
|
1139
894
|
setState_(function (prevState) {
|
|
@@ -1143,84 +898,41 @@ export default function ScriptureCard(_ref2) {
|
|
|
1143
898
|
});
|
|
1144
899
|
};
|
|
1145
900
|
|
|
1146
|
-
var
|
|
1147
|
-
|
|
1148
|
-
React.useEffect(function () {
|
|
1149
|
-
var _versesForRef2;
|
|
1150
|
-
|
|
1151
|
-
if ((_versesForRef2 = _versesForRef) !== null && _versesForRef2 !== void 0 && _versesForRef2.length) {
|
|
1152
|
-
var _ref8 = scriptureConfig || {},
|
|
1153
|
-
_reference2 = _ref8.reference,
|
|
1154
|
-
_resourceLink2 = _ref8.resourceLink;
|
|
1155
|
-
|
|
1156
|
-
console.log("ScriptureCard._versesForRef changed", {
|
|
1157
|
-
reference: _reference2,
|
|
1158
|
-
resourceLink: _resourceLink2
|
|
1159
|
-
});
|
|
1160
|
-
}
|
|
1161
|
-
}, [_versesForRef]);
|
|
1162
|
-
|
|
1163
|
-
if (!((_versesForRef3 = _versesForRef) !== null && _versesForRef3 !== void 0 && _versesForRef3.length)) {
|
|
1164
|
-
// if empty of references, create single empty reference
|
|
1165
|
-
_versesForRef = [_objectSpread({}, reference)];
|
|
1166
|
-
}
|
|
1167
|
-
|
|
1168
|
-
var needToMergeFromMaster = mergeFromMaster === null || mergeFromMaster === void 0 ? void 0 : mergeFromMaster.mergeNeeded;
|
|
1169
|
-
var mergeFromMasterHasConflicts = mergeFromMaster === null || mergeFromMaster === void 0 ? void 0 : mergeFromMaster.conflict;
|
|
1170
|
-
var mergeToMasterHasConflicts = mergeToMaster === null || mergeToMaster === void 0 ? void 0 : mergeToMaster.conflict; // eslint-disable-next-line no-nested-ternary
|
|
1171
|
-
|
|
1172
|
-
var mergeFromMasterTitle = mergeFromMasterHasConflicts ? 'Merge Conflicts for update from master' : needToMergeFromMaster ? 'Update from master' : 'No merge conflicts for update with master'; // eslint-disable-next-line no-nested-ternary
|
|
1173
|
-
|
|
1174
|
-
var mergeFromMasterColor = mergeFromMasterHasConflicts ? 'black' : needToMergeFromMaster ? 'black' : 'lightgray';
|
|
1175
|
-
var mergeToMasterTitle = mergeToMasterHasConflicts ? 'Merge Conflicts for share with master' : 'No merge conflicts for share with master';
|
|
1176
|
-
var mergeToMasterColor = mergeToMasterHasConflicts ? 'black' : 'black';
|
|
1177
|
-
var renderedScripturePanes = (_versesForRef4 = _versesForRef) === null || _versesForRef4 === void 0 ? void 0 : _versesForRef4.map(function (_currentVerseData, index) {
|
|
901
|
+
var renderedScripturePanes = versesForRef === null || versesForRef === void 0 ? void 0 : versesForRef.map(function (_currentVerseData, index) {
|
|
1178
902
|
var _currentVerseData$ver;
|
|
1179
903
|
|
|
1180
|
-
var initialVerseObjects = (_currentVerseData === null || _currentVerseData === void 0 ? void 0 : (_currentVerseData$ver = _currentVerseData.verseData) === null || _currentVerseData$ver === void 0 ? void 0 : _currentVerseData$ver.verseObjects) ||
|
|
1181
|
-
|
|
1182
|
-
var _ref9 = _currentVerseData || {},
|
|
1183
|
-
chapter = _ref9.chapter,
|
|
1184
|
-
verse = _ref9.verse;
|
|
904
|
+
var initialVerseObjects = (_currentVerseData === null || _currentVerseData === void 0 ? void 0 : (_currentVerseData$ver = _currentVerseData.verseData) === null || _currentVerseData$ver === void 0 ? void 0 : _currentVerseData$ver.verseObjects) || null; // @ts-ignore
|
|
1185
905
|
|
|
1186
|
-
var
|
|
906
|
+
var _ref7 = _currentVerseData || {},
|
|
907
|
+
chapter = _ref7.chapter,
|
|
908
|
+
verse = _ref7.verse;
|
|
1187
909
|
|
|
1188
|
-
var _reference = _objectSpread(_objectSpread({},
|
|
910
|
+
var _reference = _objectSpread(_objectSpread({}, reference), {}, {
|
|
1189
911
|
chapter: chapter,
|
|
1190
|
-
projectId: projectId,
|
|
1191
912
|
verse: verse
|
|
1192
913
|
});
|
|
1193
914
|
|
|
1194
915
|
var _scriptureAlignmentEditConfig = _objectSpread(_objectSpread({}, scriptureAlignmentEditConfig), {}, {
|
|
1195
916
|
currentIndex: index,
|
|
1196
917
|
initialVerseObjects: initialVerseObjects,
|
|
1197
|
-
reference: _reference
|
|
1198
|
-
isNewTestament: isNewTestament
|
|
918
|
+
reference: _reference
|
|
1199
919
|
});
|
|
1200
920
|
|
|
1201
921
|
var isVerseSelectedForAlignment = false;
|
|
1202
922
|
|
|
1203
923
|
if (verseSelectedForAlignment) {
|
|
1204
|
-
isVerseSelectedForAlignment = verseSelectedForAlignment.chapter
|
|
924
|
+
isVerseSelectedForAlignment = verseSelectedForAlignment.chapter === chapter && verseSelectedForAlignment.verse === verse;
|
|
1205
925
|
}
|
|
1206
926
|
|
|
1207
927
|
return /*#__PURE__*/React.createElement(ScripturePane, _extends({}, scriptureConfig, {
|
|
1208
928
|
contentStyle: contentStyle,
|
|
1209
929
|
currentIndex: index,
|
|
1210
|
-
determiningBranch: !readyForFetch,
|
|
1211
930
|
direction: direction,
|
|
1212
931
|
disableWordPopover: disableWordPopover_,
|
|
1213
932
|
fontSize: fontSize,
|
|
1214
933
|
getLexiconData: getLexiconData,
|
|
1215
934
|
isNT: isNT_,
|
|
1216
|
-
isVerseSelectedForAlignment: isVerseSelectedForAlignment,
|
|
1217
935
|
key: index,
|
|
1218
|
-
onAlignmentFinish: function onAlignmentFinish() {
|
|
1219
|
-
return setState({
|
|
1220
|
-
verseSelectedForAlignment: null
|
|
1221
|
-
});
|
|
1222
|
-
},
|
|
1223
|
-
originalScriptureBookObjects: originalScriptureBookObjects,
|
|
1224
936
|
refStyle: refStyle,
|
|
1225
937
|
reference: _reference,
|
|
1226
938
|
saving: startSave // @ts-ignore
|
|
@@ -1229,6 +941,12 @@ export default function ScriptureCard(_ref2) {
|
|
|
1229
941
|
setWordAlignerStatus: setWordAlignerStatus,
|
|
1230
942
|
server: server,
|
|
1231
943
|
translate: translate,
|
|
944
|
+
isVerseSelectedForAlignment: isVerseSelectedForAlignment,
|
|
945
|
+
onAlignmentFinish: function onAlignmentFinish() {
|
|
946
|
+
return setState({
|
|
947
|
+
verseSelectedForAlignment: null
|
|
948
|
+
});
|
|
949
|
+
},
|
|
1232
950
|
updateVersesAlignmentStatus: updateVersesAlignmentStatus
|
|
1233
951
|
}));
|
|
1234
952
|
});
|
|
@@ -1245,8 +963,8 @@ export default function ScriptureCard(_ref2) {
|
|
|
1245
963
|
}
|
|
1246
964
|
};
|
|
1247
965
|
|
|
1248
|
-
var onRenderToolbar = function onRenderToolbar(
|
|
1249
|
-
var items =
|
|
966
|
+
var onRenderToolbar = function onRenderToolbar(_ref8) {
|
|
967
|
+
var items = _ref8.items;
|
|
1250
968
|
|
|
1251
969
|
var newItems = _toConsumableArray(items);
|
|
1252
970
|
|
|
@@ -1289,47 +1007,20 @@ export default function ScriptureCard(_ref2) {
|
|
|
1289
1007
|
}
|
|
1290
1008
|
|
|
1291
1009
|
newItems.push( /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UpdateBranchButton, _extends({}, updateButtonProps, {
|
|
1292
|
-
isLoading:
|
|
1010
|
+
isLoading: isUpdateLoading || startSave
|
|
1293
1011
|
})), /*#__PURE__*/React.createElement(ErrorDialog, {
|
|
1294
1012
|
title: dialogTitle,
|
|
1295
1013
|
content: dialogMessage,
|
|
1296
1014
|
open: isErrorDialogOpen,
|
|
1297
1015
|
onClose: onCloseErrorDialog,
|
|
1298
|
-
isLoading:
|
|
1016
|
+
isLoading: isUpdateLoading || startSave,
|
|
1299
1017
|
link: dialogLink,
|
|
1300
1018
|
linkTooltip: dialogLinkTooltip
|
|
1301
1019
|
})));
|
|
1302
|
-
|
|
1303
|
-
if (mergeToMaster) {
|
|
1304
|
-
newItems.push( /*#__PURE__*/React.createElement(IconButton, {
|
|
1305
|
-
className: classes.margin,
|
|
1306
|
-
key: "share-to-master",
|
|
1307
|
-
onClick: mergeToMasterFromUserBranch,
|
|
1308
|
-
title: mergeToMasterTitle,
|
|
1309
|
-
"aria-label": mergeToMasterTitle,
|
|
1310
|
-
style: {
|
|
1311
|
-
cursor: 'pointer'
|
|
1312
|
-
}
|
|
1313
|
-
}, mergeToMasterHasConflicts ? /*#__PURE__*/React.createElement(MdUpdateDisabled, {
|
|
1314
|
-
id: "share-to-master-icon",
|
|
1315
|
-
color: mergeToMasterColor
|
|
1316
|
-
}) : /*#__PURE__*/React.createElement(FiShare, {
|
|
1317
|
-
id: "share-to-master-icon",
|
|
1318
|
-
color: mergeToMasterColor
|
|
1319
|
-
})));
|
|
1320
|
-
}
|
|
1321
|
-
|
|
1322
1020
|
return newItems;
|
|
1323
1021
|
};
|
|
1324
1022
|
|
|
1325
|
-
return /*#__PURE__*/React.createElement(
|
|
1326
|
-
selections: selections,
|
|
1327
|
-
onSelections: function onSelections(newSelections) {// console.log('onSelections', newSelections)
|
|
1328
|
-
},
|
|
1329
|
-
quote: selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.quote,
|
|
1330
|
-
occurrence: fixOccurrence(selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.occurrence),
|
|
1331
|
-
verseObjectsMap: verseObjectsMap
|
|
1332
|
-
}, /*#__PURE__*/React.createElement(Card, {
|
|
1023
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Card, {
|
|
1333
1024
|
id: "scripture_card_".concat(cardNum),
|
|
1334
1025
|
title: scriptureLabel,
|
|
1335
1026
|
settingsTitle: scriptureTitle + ' Settings',
|
|
@@ -1379,59 +1070,35 @@ export default function ScriptureCard(_ref2) {
|
|
|
1379
1070
|
}));
|
|
1380
1071
|
}
|
|
1381
1072
|
ScriptureCard.propTypes = {
|
|
1382
|
-
/**
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
/** authentication info */
|
|
1386
|
-
authentication: PropTypes.object,
|
|
1387
|
-
|
|
1388
|
-
/** index for current book (e.g. '01' for 'gen')*/
|
|
1389
|
-
bookIndex: PropTypes.string,
|
|
1390
|
-
|
|
1391
|
-
/** scripture card number (0 to 2 for example) */
|
|
1392
|
-
cardNum: PropTypes.number.isRequired,
|
|
1073
|
+
/** html identifier to use for card */
|
|
1074
|
+
id: PropTypes.string,
|
|
1393
1075
|
|
|
1394
|
-
/**
|
|
1395
|
-
|
|
1076
|
+
/** method to determine if NT or OT */
|
|
1077
|
+
isNT: PropTypes.func.isRequired,
|
|
1396
1078
|
|
|
1397
|
-
/**
|
|
1398
|
-
|
|
1079
|
+
/** title for scripture card */
|
|
1080
|
+
title: PropTypes.string.isRequired,
|
|
1399
1081
|
|
|
1400
1082
|
/** get language details */
|
|
1401
1083
|
getLanguage: PropTypes.func.isRequired,
|
|
1402
1084
|
|
|
1403
|
-
/**
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
/** optional url for greek repo */
|
|
1407
|
-
greekRepoUrl: PropTypes.string,
|
|
1408
|
-
|
|
1409
|
-
/** optional url for hebrew repo */
|
|
1410
|
-
hebrewRepoUrl: PropTypes.string,
|
|
1411
|
-
|
|
1412
|
-
/** optional http timeout in milliseconds for fetching resources, default is 0 (very long wait) */
|
|
1413
|
-
httpConfig: PropTypes.object,
|
|
1414
|
-
|
|
1415
|
-
/** html identifier to use for card */
|
|
1416
|
-
id: PropTypes.string,
|
|
1417
|
-
|
|
1418
|
-
/** method to determine if NT or OT */
|
|
1419
|
-
isNT: PropTypes.func.isRequired,
|
|
1085
|
+
/** scripture card number (0 to 2 for example) */
|
|
1086
|
+
cardNum: PropTypes.number.isRequired,
|
|
1420
1087
|
|
|
1421
|
-
/**
|
|
1422
|
-
|
|
1088
|
+
/** resource object */
|
|
1089
|
+
resource: PropTypes.shape({
|
|
1090
|
+
/** resource language to use */
|
|
1091
|
+
languageId: PropTypes.string.isRequired,
|
|
1423
1092
|
|
|
1424
|
-
|
|
1425
|
-
|
|
1093
|
+
/** repo owner such as unfoldingWord */
|
|
1094
|
+
owner: PropTypes.string.isRequired,
|
|
1426
1095
|
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
* - isAccessError - is true if this was an error trying to access file
|
|
1430
|
-
* - resourceStatus - is object containing details about problems fetching resource */
|
|
1431
|
-
onResourceError: PropTypes.func,
|
|
1096
|
+
/** resourceId to use (e.g. ugnt) */
|
|
1097
|
+
resourceId: PropTypes.string.isRequired,
|
|
1432
1098
|
|
|
1433
|
-
|
|
1434
|
-
|
|
1099
|
+
/** repo owner for original languages such as unfoldingWord */
|
|
1100
|
+
originalLanguageOwner: PropTypes.string.isRequired
|
|
1101
|
+
}),
|
|
1435
1102
|
reference: PropTypes.shape({
|
|
1436
1103
|
/** projectId (bookID) to use */
|
|
1437
1104
|
projectId: PropTypes.string.isRequired,
|
|
@@ -1443,58 +1110,76 @@ ScriptureCard.propTypes = {
|
|
|
1443
1110
|
verse: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired
|
|
1444
1111
|
}),
|
|
1445
1112
|
|
|
1446
|
-
/**
|
|
1447
|
-
|
|
1448
|
-
/** resource language to use */
|
|
1449
|
-
languageId: PropTypes.string.isRequired,
|
|
1113
|
+
/** server (e.g. 'https://git.door43.org') */
|
|
1114
|
+
server: PropTypes.string.isRequired,
|
|
1450
1115
|
|
|
1451
|
-
|
|
1452
|
-
|
|
1116
|
+
/** repo branch or tag such as master */
|
|
1117
|
+
appRef: PropTypes.string.isRequired,
|
|
1453
1118
|
|
|
1454
|
-
|
|
1455
|
-
|
|
1119
|
+
/** if true then word data hover is shown */
|
|
1120
|
+
disableWordPopover: PropTypes.bool,
|
|
1456
1121
|
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
}),
|
|
1122
|
+
/** CSS classes */
|
|
1123
|
+
classes: PropTypes.object,
|
|
1460
1124
|
|
|
1461
1125
|
/** resourceLink */
|
|
1462
1126
|
resourceLink: PropTypes.any,
|
|
1463
1127
|
|
|
1464
|
-
/**
|
|
1465
|
-
|
|
1128
|
+
/** use method for using local storage specific for user */
|
|
1129
|
+
useUserLocalStorage: PropTypes.func.isRequired,
|
|
1466
1130
|
|
|
1467
|
-
/**
|
|
1468
|
-
|
|
1131
|
+
/** optional callback if error loading resource, parameter returned are:
|
|
1132
|
+
* ({string} errorMessage, {boolean} isAccessError, {object} resourceStatus)
|
|
1133
|
+
* - isAccessError - is true if this was an error trying to access file
|
|
1134
|
+
* - resourceStatus - is object containing details about problems fetching resource */
|
|
1135
|
+
onResourceError: PropTypes.func,
|
|
1469
1136
|
|
|
1470
|
-
/**
|
|
1471
|
-
|
|
1137
|
+
/** optional http timeout in milliseconds for fetching resources, default is 0 (very long wait) */
|
|
1138
|
+
httpConfig: PropTypes.object,
|
|
1472
1139
|
|
|
1473
|
-
/**
|
|
1474
|
-
|
|
1140
|
+
/** optional url for greek repo */
|
|
1141
|
+
greekRepoUrl: PropTypes.string,
|
|
1142
|
+
|
|
1143
|
+
/** optional url for hebrew repo */
|
|
1144
|
+
hebrewRepoUrl: PropTypes.string,
|
|
1145
|
+
|
|
1146
|
+
/** function to get latest lexicon data */
|
|
1147
|
+
getLexiconData: PropTypes.func,
|
|
1148
|
+
|
|
1149
|
+
/** function to pre-load lexicon data for verse */
|
|
1150
|
+
fetchGlossesForVerse: PropTypes.func,
|
|
1151
|
+
|
|
1152
|
+
/** optional function for localization */
|
|
1153
|
+
translate: PropTypes.func,
|
|
1154
|
+
|
|
1155
|
+
/** function to minimize the card (optional) */
|
|
1156
|
+
onMinimize: PropTypes.func,
|
|
1475
1157
|
|
|
1476
|
-
/**
|
|
1477
|
-
|
|
1158
|
+
/** user-name */
|
|
1159
|
+
loggedInUser: PropTypes.string,
|
|
1478
1160
|
|
|
1479
|
-
/**
|
|
1480
|
-
|
|
1161
|
+
/** authentication info */
|
|
1162
|
+
authentication: PropTypes.object,
|
|
1481
1163
|
|
|
1482
1164
|
/** function to set state in app that there are unsaved changes */
|
|
1483
1165
|
setSavedChanges: PropTypes.func,
|
|
1484
1166
|
|
|
1485
|
-
/**
|
|
1486
|
-
|
|
1167
|
+
/** index for current book (e.g. '01' for 'gen')*/
|
|
1168
|
+
bookIndex: PropTypes.string,
|
|
1487
1169
|
|
|
1488
|
-
/**
|
|
1489
|
-
|
|
1170
|
+
/** callback to indicate that we are using a verse range here */
|
|
1171
|
+
addVerseRange: PropTypes.func,
|
|
1490
1172
|
|
|
1491
|
-
/**
|
|
1492
|
-
|
|
1173
|
+
/** callback to update word aligner state */
|
|
1174
|
+
setWordAlignerStatus: PropTypes.func,
|
|
1493
1175
|
|
|
1494
1176
|
/** callback to update the card's merge state in app */
|
|
1495
1177
|
updateMergeState: PropTypes.func,
|
|
1496
1178
|
|
|
1497
|
-
/**
|
|
1498
|
-
|
|
1179
|
+
/** callback to update loading state */
|
|
1180
|
+
setAreResourcesLoading: PropTypes.func,
|
|
1181
|
+
|
|
1182
|
+
/** callback to update saving state*/
|
|
1183
|
+
setAreResourcesSaving: PropTypes.func
|
|
1499
1184
|
};
|
|
1500
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwiU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlciIsInVzZm1qcyIsInVzZUVkaXQiLCJNZFVwZGF0ZURpc2FibGVkIiwiRmlTaGFyZSIsIkljb25CdXR0b24iLCJSeExpbmsyIiwiUnhMaW5rQnJlYWsyIiwiQ2FyZCIsIkVycm9yRGlhbG9nIiwiRVJST1JfU1RBVEUiLCJNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SIiwiVXBkYXRlQnJhbmNoQnV0dG9uIiwidXNlQnJhbmNoTWVyZ2VyIiwidXNlQ2FyZFN0YXRlIiwidXNlQ29udGVudFVwZGF0ZVByb3BzIiwidXNlVXNlckJyYW5jaCIsImdldFF1b3RlTWF0Y2hlc0luQm9va1JlZiIsIkFsaWdubWVudEhlbHBlcnMiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwiaXNFcXVhbCIsImdldFZlcnNlcyIsIlNjcmlwdHVyZVBhbmUiLCJTY3JpcHR1cmVTZWxlY3RvciIsInVzZVNjcmlwdHVyZVNldHRpbmdzIiwiY2xlYW51cFZlcnNlT2JqZWN0cyIsImZpeE9jY3VycmVuY2UiLCJnZXRSZXNvdXJjZUxpbmsiLCJnZXRSZXNvdXJjZU1lc3NhZ2UiLCJnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3MiLCJpc09yaWdpbmFsQmlibGUiLCJkZWxheSIsImFyZU1hcHNUaGVTYW1lIiwiVGl0bGUiLCJOVF9PUklHX0xBTkciLCJPUklHSU5BTF9TT1VSQ0UiLCJPVF9PUklHX0xBTkciLCJWZXJzZVNlbGVjdG9yUG9wdXAiLCJLRVlfRk9OVF9TSVpFX0JBU0UiLCJsYWJlbCIsInN0eWxlIiwibWFyZ2luVG9wIiwid2lkdGgiLCJjb21wYXJlT2JqZWN0IiwidmVyc2VSZWYiLCJjaGFwdGVyIiwidmVyc2UiLCJ2ZXJzZURhdGEiLCJ2ZXJzZU9iamVjdHMiLCJsZW5ndGgiLCJhcmVWZXJzZXNTYW1lIiwidmVyc2VzRm9yUmVmMSIsInZlcnNlc0ZvclJlZjIiLCJhcmVTYW1lIiwiaSIsImwiLCJ2ZXJzZTEiLCJ2ZXJzZTIiLCJTY3JpcHR1cmVDYXJkIiwiYXBwUmVmIiwiYXV0aGVudGljYXRpb24iLCJib29rSW5kZXgiLCJjYXJkTnVtIiwiY2xhc3NlcyIsImRpc2FibGVXb3JkUG9wb3ZlciIsImdldExhbmd1YWdlIiwiZ2V0TGV4aWNvbkRhdGEiLCJncmVla1JlcG9VcmwiLCJoZWJyZXdSZXBvVXJsIiwiaHR0cENvbmZpZyIsImlkIiwiaXNOVCIsImxvZ2dlZEluVXNlciIsIm9uTWluaW1pemUiLCJvblJlc291cmNlRXJyb3IiLCJvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzIiwicmVmZXJlbmNlIiwicmVzb3VyY2UiLCJvd25lciIsImxhbmd1YWdlSWQiLCJyZXNvdXJjZUlkIiwib3JpZ2luYWxMYW5ndWFnZU93bmVyIiwicmVzb3VyY2VMaW5rIiwic2VsZWN0ZWRRdW90ZSIsInNlcnZlciIsInNldENhcmRzTG9hZGluZyIsInNldENhcmRzU2F2aW5nIiwic2V0U2F2ZWRDaGFuZ2VzIiwic2V0V29yZEFsaWduZXJTdGF0dXMiLCJ0cmFuc2xhdGUiLCJ0aXRsZSIsInVzZVVzZXJMb2NhbFN0b3JhZ2UiLCJ1cGRhdGVNZXJnZVN0YXRlIiwiYm9va0lkIiwicHJvamVjdElkIiwidXNlU3RhdGUiLCJjaGVja0ZvckVkaXRCcmFuY2giLCJjdXJyZW50UmVmZXJlbmNlIiwiZWRpdEJyYW5jaFJlYWR5IiwiaGF2ZVVuc2F2ZWRDaGFuZ2VzIiwibGFzdFNlbGVjdGVkUXVvdGUiLCJyZWFkeUZvckZldGNoIiwicmVmIiwic2F2ZUNsaWNrZWQiLCJzYXZlQ29udGVudCIsInNlbGVjdGlvbnMiLCJNYXAiLCJzaGEiLCJzaG93QWxpZ25tZW50UG9wdXAiLCJzdGFydFNhdmUiLCJ1cmxFcnJvciIsInVzaW5nVXNlckJyYW5jaCIsInVuc2F2ZWRDaGFuZ2VzTGlzdCIsInZlcnNlc0FsaWdubWVudFN0YXR1cyIsInZlcnNlc0ZvclJlZiIsInZlcnNlT2JqZWN0c01hcCIsInZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQiLCJzdGF0ZSIsInNldFN0YXRlXyIsImZvbnRTaXplIiwic2V0Rm9udFNpemUiLCJpc05UXyIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJjYWNoZSIsIm1heEFnZSIsIm5vQ2FjaGUiLCJzZXRVcmxFcnJvciIsImVycm9yIiwid2hvbGVCb29rIiwiaXNOZXdUZXN0YW1lbnQiLCJzY3JpcHR1cmVDb25maWciLCJzZXRTY3JpcHR1cmUiLCJzY3JpcHR1cmVTZXR0aW5ncyIsInNjcmlwdHVyZVZlcnNpb25IaXN0IiwiZmV0Y2hSZXNwXyIsImZldGNoUmVzcG9uc2UiLCJyZXBvIiwicmVmZXJlbmNlXyIsInVzZUVmZmVjdCIsIl9zaGEiLCJkYXRhIiwidXJsIiwiZG93bmxvYWRfdXJsIiwidmFsaWRCcmFuY2giLCJwYXJ0cyIsInNwbGl0IiwiZmV0Y2hCcmFuY2giLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImNhcmRSZXNvdXJjZUlkIiwicmVmXyIsImNhblVzZUVkaXRCcmFuY2giLCJpbmNsdWRlcyIsImNhcmRJZCIsImJyYW5jaERldGVybWluZWQiLCJ1c2VyRWRpdEJyYW5jaE5hbWUiLCJfdXNpbmdVc2VyQnJhbmNoIiwid29ya2luZ1Jlc291cmNlQnJhbmNoIiwic3RhcnRFZGl0QnJhbmNoIiwiYWN0aW9ucyIsInN0YXJ0RWRpdCIsIl91c2VCcmFuY2hNZXJnZXIiLCJ1c2VyQnJhbmNoIiwidG9rZW5pZCIsInRva2VuIiwic2hhMSIsIm1lcmdlVG9NYXN0ZXIiLCJtZXJnZVN0YXR1cyIsIm1lcmdlRnJvbU1hc3RlciIsInVwZGF0ZVN0YXR1cyIsIm1lcmdlRnJvbU1hc3RlckludG9Vc2VyQnJhbmNoIiwidXBkYXRlVXNlckJyYW5jaCIsIm1lcmdlVG9NYXN0ZXJGcm9tVXNlckJyYW5jaCIsIm1lcmdlTWFzdGVyQnJhbmNoIiwidXBkYXRlQnV0dG9uUHJvcHMiLCJpc1NhdmluZyIsInJlbG9hZENvbnRlbnQiLCJyZWxvYWRSZXNvdXJjZSIsImNhbGxVcGRhdGVVc2VyQnJhbmNoIiwiaXNFcnJvckRpYWxvZ09wZW4iLCJvbkNsb3NlRXJyb3JEaWFsb2ciLCJpc0xvYWRpbmciLCJkaWFsb2dNZXNzYWdlIiwiZGlhbG9nVGl0bGUiLCJkaWFsb2dMaW5rIiwiZGlhbG9nTGlua1Rvb2x0aXAiLCJwcmV2Q2FyZHNMb2FkaW5nIiwiZmlsdGVyIiwid29ya2luZ1JlZiIsInNjcmlwdHVyZVRpdGxlIiwicmVzb3VyY2VTdGF0dXMiLCJtZXNzYWdlIiwiaXNBY2Nlc3NFcnJvciIsInZlcnNpb24iLCJ1cGRhdGVUaXRsZSIsImdldFNjcmlwdHVyZVNlbGVjdG9yIiwic2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnIiwib25NZW51Q2xvc2UiLCJsYW5ndWFnZUlkXyIsImxhbmd1YWdlIiwiZGlyZWN0aW9uIiwiX3JlZmVyZW5jZSIsImlzSGVicmV3IiwiZm9udEZhY3RvciIsInNjYWxlZEZvbnRTaXplIiwiaXRlbXMiLCJoZWFkZXJzIiwiZmlsdGVycyIsIml0ZW1JbmRleCIsIm1hcmtkb3duVmlldyIsInNldEZpbHRlcnMiLCJzZXRJdGVtSW5kZXgiLCJzZXRNYXJrZG93blZpZXciLCJyZWZTdHlsZSIsInVzZU1lbW8iLCJmb250RmFtaWx5IiwiTWF0aCIsInJvdW5kIiwiY29udGVudFN0eWxlIiwic2NyaXB0dXJlTGFiZWwiLCJkaXNhYmxlV29yZFBvcG92ZXJfIiwidXNpbmdPcmlnaW5hbEJpYmxlIiwidW5kZWZpbmVkIiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsIm9yaWdpbmFsUmVwb1VybCIsInNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWciLCJjdXJyZW50VmVyc2VSZWYiLCJfc2V0U2F2ZWRDaGFuZ2VzIiwic291cmNlTGFuZ3VhZ2UiLCJ0YXJnZXRMYW5ndWFnZSIsImN1cnJlbnRJbmRleCIsInNhdmVkIiwiZ2V0Q2hhbmdlcyIsImNsZWFyQ2hhbmdlcyIsIl91bnNhdmVkQ2hhbmdlc0xpc3QiLCJoYXNPd25Qcm9wZXJ0eSIsIl9oYXZlVW5zYXZlZENoYW5nZXMiLCJPYmplY3QiLCJrZXlzIiwiZmluZFJlZkluQXJyYXkiLCJmaW5kSXRlbSIsImNodW5rcyIsInJlZkxlbiIsImluZGV4IiwiZmluZEluZGV4IiwiY2h1bmsiLCJpZHgiLCJzdWJzdHJpbmciLCJuZXh0Q2hhciIsImdldEJvb2tOYW1lIiwiYm9va0NhcHMiLCJ0b1VwcGVyQ2FzZSIsImZpbGVwYXRoIiwiY29udGVudCIsImNvbmZpZyIsInRpbWVvdXQiLCJzZXJ2ZXJUaW1lT3V0IiwiYXV0aG9yIiwiYnJhbmNoIiwic2F2ZUVycm9yIiwiaXNTYXZlRXJyb3IiLCJpc0Vycm9yIiwib25TYXZlRWRpdCIsIl9zYXZlRWRpdCIsImluZm8iLCJ0aGVuIiwic3VjY2VzcyIsInVuc2F2ZWRDYXJkSW5kaWNlcyIsImNhcmRJbmRleCIsInByZXZDYXJkc1NhdmluZyIsIm1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbSIsImJpYmxlVXNmbSIsInVwZGF0ZWRWZXJzZU9iamVjdHMiLCJuZXdVc2ZtIiwiY2hhcHRlckNodW5rcyIsImNoYXB0ZXJJbmRleCIsImN1cnJlbnRDaGFwdGVyIiwidmVyc2VDaHVua3MiLCJ2ZXJzZUluZGV4IiwibmV3VmVyc2VVc2ZtIiwiY29udmVydFZlcnNlRGF0YVRvVVNGTSIsIm9sZFZlcnNlIiwidmVyc2VOdW1MZW4iLCJuZXdDaGFwdGVyIiwiam9pbiIsImdldFJlYWR5Rm9yU2F2ZSIsImNyZWF0ZUVkaXRCcmFuY2giLCJ3YXJuIiwiZ2V0UmVzcG9uc2VEYXRhIiwibWVyZ2VGYWlsIiwicGFyc2VJbnQiLCJuZXdWZXJzZVRleHQiLCJ0YXJnZXRWZXJzZU9iamVjdHNfIiwidXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UiLCJ0YXJnZXRWZXJzZU9iamVjdHMiLCJuZXdCb29rSnNvbiIsInVwZGF0ZVZlcnNlIiwidG9VU0ZNIiwiZm9yY2VkTmV3TGluZXMiLCJfdmVyc2VzRm9yUmVmIiwibmV3U2VsZWN0aW9ucyIsInVwZGF0ZVNlbGVjdGlvbnMiLCJfbWFwIiwib3JpZ2luYWxCb29rSWQiLCJib29rVmVyc2VPYmplY3QiLCJjaGFwdGVycyIsIm5ld1NlbGVjdGVkUXVvdGUiLCJxdW90ZSIsIm9yaWdpbmFsVmVyc2VzIiwic3Vic3RpdHV0ZSIsInN0YXJ0VmVyc2UiLCJsYXN0VmVyc2UiLCJfdmVyc2UiLCJ2ZXJzZXMiLCJ2ZXJzZUl0ZW0iLCJ2byIsImNvbmNhdCIsInNldCIsInN1YlJlZiIsInF1b3RlTWF0Y2hlcyIsImJvb2tPYmplY3QiLCJvY2N1cnJlbmNlIiwic2l6ZSIsImZvckVhY2giLCJ3b3JkcyIsImtleSIsIl9rZXkiLCJtYXAiLCJ3b3JkIiwidGV4dCIsIm5vcm1hbGl6ZVN0cmluZyIsImJvb2tzTm90U2FtZSIsInVwZGF0ZVZlcnNlc0FsaWdubWVudFN0YXR1cyIsImFsaWduZWQiLCJuZWVkVG9NZXJnZUZyb21NYXN0ZXIiLCJtZXJnZU5lZWRlZCIsIm1lcmdlRnJvbU1hc3Rlckhhc0NvbmZsaWN0cyIsImNvbmZsaWN0IiwibWVyZ2VUb01hc3Rlckhhc0NvbmZsaWN0cyIsIm1lcmdlRnJvbU1hc3RlclRpdGxlIiwibWVyZ2VGcm9tTWFzdGVyQ29sb3IiLCJtZXJnZVRvTWFzdGVyVGl0bGUiLCJtZXJnZVRvTWFzdGVyQ29sb3IiLCJyZW5kZXJlZFNjcmlwdHVyZVBhbmVzIiwiX2N1cnJlbnRWZXJzZURhdGEiLCJpbml0aWFsVmVyc2VPYmplY3RzIiwiX3NjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWciLCJpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQiLCJoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrIiwib25SZW5kZXJUb29sYmFyIiwibmV3SXRlbXMiLCJhbGxWZXJzZXNBbGlnbmVkIiwidmFsdWVzIiwiZXZlcnkiLCJhbGlnblN0YXR1cyIsImFsaWduSWNvbiIsImFsaWduQnV0dG9uVGV4dCIsInB1c2giLCJjdXJzb3IiLCJtYXJnaW4iLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwib2JqZWN0IiwibnVtYmVyIiwiYm9vbCIsImZ1bmMiLCJzaGFwZSIsIm9uZU9mVHlwZSIsImFueSIsInNldEFyZVJlc291cmNlc0xvYWRpbmciLCJzZXRBcmVSZXNvdXJjZXNTYXZpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBS0EsS0FBWixNQUF1QixPQUF2QjtBQUNBLE9BQU8sS0FBS0MsU0FBWixNQUEyQixZQUEzQjtBQUNBLFNBQVNDLElBQVQsRUFBZUMseUJBQWYsUUFBZ0QseUJBQWhEO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixTQUFuQjtBQUNBLFNBQVNDLE9BQVQsUUFBd0IscUJBQXhCO0FBQ0EsU0FBU0MsZ0JBQVQsUUFBaUMsZ0JBQWpDO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixnQkFBeEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLGVBQTNCO0FBQ0EsU0FBU0MsT0FBVCxFQUFrQkMsWUFBbEIsUUFBc0MsZ0JBQXRDO0FBQ0EsU0FDRUMsSUFERixFQUVFQyxXQUZGLEVBR0VDLFdBSEYsRUFJRUMseUJBSkYsRUFLRUMsa0JBTEYsRUFNRUMsZUFORixFQU9FQyxZQVBGLEVBUUVDLHFCQVJGLEVBU0VDLGFBVEYsUUFVTyx1QkFWUCxDLENBV0E7O0FBQ0EsU0FBU0Msd0JBQVQsUUFBeUMsa0JBQXpDO0FBQ0EsU0FBU0MsZ0JBQVQsRUFBMkJDLHlCQUEzQixRQUE0RCxrQkFBNUQ7QUFDQSxPQUFPLEtBQUtDLE9BQVosTUFBeUIsWUFBekI7QUFDQSxTQUFTQyxTQUFULFFBQTBCLHVCQUExQjtBQUNBLFNBQVNDLGFBQVQsRUFBd0JDLGlCQUF4QixRQUFpRCxJQUFqRDtBQUNBLFNBQVNDLG9CQUFULFFBQXFDLGtDQUFyQztBQUNBLFNBQ0VDLG1CQURGLEVBRUVDLGFBRkYsRUFHRUMsZUFI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c0IsRUFBRXpYLFNBQVMsQ0FBQ3FYLElBaEVWOztBQWlFeEI7QUFDQUssRUFBQUEscUJBQXFCLEVBQUUxWCxTQUFTLENBQUNxWCxJQWxFVDs7QUFtRXhCO0FBQ0E5UixFQUFBQSxlQUFlLEVBQUV2RixTQUFTLENBQUNxWCxJQXBFSDs7QUFxRXhCO0FBQ0E3UixFQUFBQSxjQUFjLEVBQUV4RixTQUFTLENBQUNxWCxJQXRFRjs7QUF1RXhCO0FBQ0E1UixFQUFBQSxlQUFlLEVBQUV6RixTQUFTLENBQUNxWCxJQXhFSDs7QUF5RXhCO0FBQ0EzUixFQUFBQSxvQkFBb0IsRUFBRTFGLFNBQVMsQ0FBQ3FYLElBMUVSOztBQTJFeEI7QUFDQXpSLEVBQUFBLEtBQUssRUFBRTVGLFNBQVMsQ0FBQ2dYLE1BQVYsQ0FBaUJDLFVBNUVBOztBQTZFeEI7QUFDQXRSLEVBQUFBLFNBQVMsRUFBRTNGLFNBQVMsQ0FBQ3FYLElBOUVHOztBQStFeEI7QUFDQXZSLEVBQUFBLGdCQUFnQixFQUFFOUYsU0FBUyxDQUFDcVgsSUFoRko7O0FBaUZ4QjtBQUNBeFIsRUFBQUEsbUJBQW1CLEVBQUU3RixTQUFTLENBQUNxWCxJQUFWLENBQWVKO0FBbEZaLENBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7IGNvcmUsIFNlbGVjdGlvbnNDb250ZXh0UHJvdmlkZXIgfSBmcm9tICdzY3JpcHR1cmUtcmVzb3VyY2VzLXJjbCdcbmltcG9ydCB1c2ZtanMgZnJvbSAndXNmbS1qcydcbmltcG9ydCB7IHVzZUVkaXQgfSBmcm9tICdnaXRlYS1yZWFjdC10b29sa2l0J1xuaW1wb3J0IHsgTWRVcGRhdGVEaXNhYmxlZCB9IGZyb20gJ3JlYWN0LWljb25zL21kJ1xuaW1wb3J0IHsgRmlTaGFyZSB9IGZyb20gJ3JlYWN0LWljb25zL2ZpJ1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnXG5pbXBvcnQgeyBSeExpbmsyLCBSeExpbmtCcmVhazIgfSBmcm9tICdyZWFjdC1pY29ucy9yeCdcbmltcG9ydCB7XG4gIENhcmQsXG4gIEVycm9yRGlhbG9nLFxuICBFUlJPUl9TVEFURSxcbiAgTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUixcbiAgVXBkYXRlQnJhbmNoQnV0dG9uLFxuICB1c2VCcmFuY2hNZXJnZXIsXG4gIHVzZUNhcmRTdGF0ZSxcbiAgdXNlQ29udGVudFVwZGF0ZVByb3BzLFxuICB1c2VVc2VyQnJhbmNoLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWYgfSBmcm9tICd1dy1xdW90ZS1oZWxwZXJzJ1xuaW1wb3J0IHsgQWxpZ25tZW50SGVscGVycywgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyB9IGZyb20gJ3dvcmQtYWxpZ25lci1yY2wnXG5pbXBvcnQgKiBhcyBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyBnZXRWZXJzZXMgfSBmcm9tICdiaWJsZS1yZWZlcmVuY2UtcmFuZ2UnXG5pbXBvcnQgeyBTY3JpcHR1cmVQYW5lLCBTY3JpcHR1cmVTZWxlY3RvciB9IGZyb20gJy4uJ1xuaW1wb3J0IHsgdXNlU2NyaXB0dXJlU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9ob29rcy91c2VTY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7XG4gIGNsZWFudXBWZXJzZU9iamVjdHMsXG4gIGZpeE9jY3VycmVuY2UsXG4gIGdldFJlc291cmNlTGluayxcbiAgZ2V0UmVzb3VyY2VNZXNzYWdlLFxuICBnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3MsXG4gIGlzT3JpZ2luYWxCaWJsZSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2RlbGF5J1xuaW1wb3J0IHsgYXJlTWFwc1RoZVNhbWUgfSBmcm9tICcuLi8uLi91dGlscy9tYXBzJ1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9TY3JpcHR1cmVQYW5lL3N0eWxlZCdcbmltcG9ydCB7XG4gIE5UX09SSUdfTEFORyxcbiAgT1JJR0lOQUxfU09VUkNFLFxuICBPVF9PUklHX0xBTkcsXG59IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgVmVyc2VTZWxlY3RvclBvcHVwIH0gZnJvbSAnLi4vVmVyc2VTZWxlY3RvclBvcHVwJ1xuXG5jb25zdCBLRVlfRk9OVF9TSVpFX0JBU0UgPSAnc2NyaXB0dXJlUGFuZUZvbnRTaXplXydcbmNvbnN0IGxhYmVsID0gJ1ZlcnNpb24nXG5jb25zdCBzdHlsZSA9IHsgbWFyZ2luVG9wOiAnMTZweCcsIHdpZHRoOiAnNTAwcHgnIH1cblxuLyoqXG4gKiBjcmVhdGUgYSBzaG9ydCBjb21wYXJpc29uIHZlcnNlIHJlZiBvYmplY3Qgd2l0aG91dCBhbGwgdGhlIHZlcnNlRGF0YVxuICogQHBhcmFtIHZlcnNlUmVmXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVPYmplY3QodmVyc2VSZWYpIHtcbiAgY29uc3Qge1xuICAgIGNoYXB0ZXIsXG4gICAgdmVyc2UsXG4gICAgdmVyc2VEYXRhLFxuICB9ID0gdmVyc2VSZWYgfHwge31cbiAgY29uc3QgdmVyc2VPYmplY3RzID0gdmVyc2VEYXRhPy52ZXJzZU9iamVjdHM/Lmxlbmd0aCB8fCAwXG4gIHJldHVybiB7XG4gICAgY2hhcHRlcixcbiAgICB2ZXJzZSxcbiAgICB2ZXJzZU9iamVjdHMsXG4gIH1cbn1cblxuLyoqXG4gKiBjb21wYXJlIHR3byB2ZXJzZSByZWZzIHRvIHNlZSBpZiB0aGV5IGFyZSBzdWJzdGFudGlhbGx5IHNpbWlsYXJcbiAqIEBwYXJhbSB2ZXJzZXNGb3JSZWYxXG4gKiBAcGFyYW0gdmVyc2VzRm9yUmVmMlxuICovXG5mdW5jdGlvbiBhcmVWZXJzZXNTYW1lKHZlcnNlc0ZvclJlZjE6IGFueVtdLCB2ZXJzZXNGb3JSZWYyOiBhbnlbXSkge1xuICB2ZXJzZXNGb3JSZWYxID0gdmVyc2VzRm9yUmVmMSB8fCBbXVxuICB2ZXJzZXNGb3JSZWYyID0gdmVyc2VzRm9yUmVmMiB8fCBbXVxuICBsZXQgYXJlU2FtZSA9IGZhbHNlXG5cbiAgaWYgKHZlcnNlc0ZvclJlZjEubGVuZ3RoID09PSB2ZXJzZXNGb3JSZWYyLmxlbmd0aCkge1xuICAgIGFyZVNhbWUgPSB0cnVlXG5cbiAgICBmb3IgKGxldCBpID0gMCwgbD0gdmVyc2VzRm9yUmVmMS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IHZlcnNlMSA9IGNvbXBhcmVPYmplY3QodmVyc2VzRm9yUmVmMVtpXSlcbiAgICAgIGNvbnN0IHZlcnNlMiA9IGNvbXBhcmVPYmplY3QodmVyc2VzRm9yUmVmMltpXSlcbiAgICAgIGFyZVNhbWUgPSBpc0VxdWFsKHZlcnNlMSwgdmVyc2UyKVxuXG4gICAgICBpZiAoIWFyZVNhbWUpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJlU2FtZVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTY3JpcHR1cmVDYXJkKHtcbiAgYXBwUmVmLFxuICBhdXRoZW50aWNhdGlvbixcbiAgYm9va0luZGV4LFxuICBjYXJkTnVtLFxuICBjbGFzc2VzLFxuICBkaXNhYmxlV29yZFBvcG92ZXIsXG4gIGdldExhbmd1YWdlLFxuICBnZXRMZXhpY29uRGF0YSxcbiAgZ3JlZWtSZXBvVXJsLFxuICBoZWJyZXdSZXBvVXJsLFxuICBodHRwQ29uZmlnLFxuICBpZCxcbiAgaXNOVCxcbiAgbG9nZ2VkSW5Vc2VyLFxuICBvbk1pbmltaXplLFxuICBvblJlc291cmNlRXJyb3IsXG4gIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMsXG4gIHJlZmVyZW5jZSxcbiAgcmVzb3VyY2U6IHtcbiAgICBvd25lcixcbiAgICBsYW5ndWFnZUlkLFxuICAgIHJlc291cmNlSWQsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICB9LFxuICByZXNvdXJjZUxpbmssXG4gIHNlbGVjdGVkUXVvdGUsXG4gIHNlcnZlcixcbiAgc2V0Q2FyZHNMb2FkaW5nLFxuICBzZXRDYXJkc1NhdmluZyxcbiAgc2V0U2F2ZWRDaGFuZ2VzLFxuICBzZXRXb3JkQWxpZ25lclN0YXR1cyxcbiAgdHJhbnNsYXRlLFxuICB0aXRsZSxcbiAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgdXBkYXRlTWVyZ2VTdGF0ZSxcbn0pIHtcbiAgY29uc3QgYm9va0lkID0gcmVmZXJlbmNlPy5wcm9qZWN0SWRcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGNoZWNrRm9yRWRpdEJyYW5jaDogMCxcbiAgICBjdXJyZW50UmVmZXJlbmNlOiBudWxsLFxuICAgIGVkaXRCcmFuY2hSZWFkeTogZmFsc2UsXG4gICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICBsYXN0U2VsZWN0ZWRRdW90ZTogbnVsbCxcbiAgICByZWFkeUZvckZldGNoOiBmYWxzZSxcbiAgICByZWY6IGFwcFJlZixcbiAgICBzYXZlQ2xpY2tlZDogZmFsc2UsXG4gICAgc2F2ZUNvbnRlbnQ6IG51bGwsXG4gICAgc2VsZWN0aW9uczogbmV3IE1hcCgpLFxuICAgIHNoYTogbnVsbCxcbiAgICBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlLFxuICAgIHN0YXJ0U2F2ZTogZmFsc2UsXG4gICAgdXJsRXJyb3I6IG51bGwsXG4gICAgdXNpbmdVc2VyQnJhbmNoOiBmYWxzZSxcbiAgICB1bnNhdmVkQ2hhbmdlc0xpc3Q6IHt9LFxuICAgIHZlcnNlc0FsaWdubWVudFN0YXR1czogbnVsbCxcbiAgICB2ZXJzZXNGb3JSZWY6IG51bGwsXG4gICAgdmVyc2VPYmplY3RzTWFwOiBuZXcgTWFwKCksXG4gICAgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogbnVsbCxcbiAgfSlcbiAgY29uc3Qge1xuICAgIGNoZWNrRm9yRWRpdEJyYW5jaCxcbiAgICBjdXJyZW50UmVmZXJlbmNlLFxuICAgIGVkaXRCcmFuY2hSZWFkeSxcbiAgICBoYXZlVW5zYXZlZENoYW5nZXMsXG4gICAgbGFzdFNlbGVjdGVkUXVvdGUsXG4gICAgcmVhZHlGb3JGZXRjaCxcbiAgICByZWYsXG4gICAgc2F2ZUNsaWNrZWQsXG4gICAgc2F2ZUNvbnRlbnQsXG4gICAgc2VsZWN0aW9ucyxcbiAgICBzaGEsXG4gICAgc2hvd0FsaWdubWVudFBvcHVwLFxuICAgIHN0YXJ0U2F2ZSxcbiAgICB1cmxFcnJvcixcbiAgICB1c2luZ1VzZXJCcmFuY2gsXG4gICAgdW5zYXZlZENoYW5nZXNMaXN0LFxuICAgIHZlcnNlT2JqZWN0c01hcCxcbiAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LFxuICAgIHZlcnNlc0FsaWdubWVudFN0YXR1cyxcbiAgICB2ZXJzZXNGb3JSZWYsXG4gIH0gPSBzdGF0ZVxuXG4gIGNvbnN0IFtmb250U2l6ZSwgc2V0Rm9udFNpemVdID0gdXNlVXNlckxvY2FsU3RvcmFnZShLRVlfRk9OVF9TSVpFX0JBU0UgKyBjYXJkTnVtLCAxMDApXG4gIGNvbnN0IGlzTlRfID0gaXNOVChib29rSWQpXG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBzZXRTdGF0ZV8ocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICBpZiAodXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgaHR0cENvbmZpZyA9IHtcbiAgICAgIC4uLmh0dHBDb25maWcsXG4gICAgICBjYWNoZTogeyBtYXhBZ2U6IDAgfSxcbiAgICAgIG5vQ2FjaGU6IHRydWUsXG4gICAgfSAvLyBkaXNhYmxlIGh0dHAgY2FjaGluZ1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzZXRTY3JpcHR1cmUsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gIH0gPSB1c2VTY3JpcHR1cmVTZXR0aW5ncyh7XG4gICAgYXBwUmVmOiByZWYsXG4gICAgY2FyZE51bSxcbiAgICBkaXNhYmxlV29yZFBvcG92ZXIsXG4gICAgZ3JlZWtSZXBvVXJsLFxuICAgIGhlYnJld1JlcG9VcmwsXG4gICAgaHR0cENvbmZpZyxcbiAgICBpc05ULFxuICAgIGxhbmd1YWdlSWQsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICAgIG93bmVyLFxuICAgIHJlYWR5Rm9yRmV0Y2gsXG4gICAgcmVmZXJlbmNlOiBjdXJyZW50UmVmZXJlbmNlIHx8IHJlZmVyZW5jZSxcbiAgICByZXNvdXJjZUlkLFxuICAgIHJlc291cmNlTGluayxcbiAgICBzZXRVcmxFcnJvcjogKGVycm9yKSA9PiBzZXRTdGF0ZSh7IHVybEVycm9yOiBlcnJvciB9KSxcbiAgICBzZXJ2ZXIsXG4gICAgdGl0bGUsXG4gICAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgICB3aG9sZUJvb2s6IHRydWUsXG4gIH0pXG5cbiAgY29uc3QgZmV0Y2hSZXNwXyA9IHNjcmlwdHVyZUNvbmZpZz8uZmV0Y2hSZXNwb25zZVxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHJlcG8gPSBgJHtzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkfV8ke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZH1gXG4gIGNvbnN0IHJlZmVyZW5jZV8gPSBzY3JpcHR1cmVDb25maWc/LnJlZmVyZW5jZSB8fCBudWxsXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gZ2V0IHRoZSBfc2hhIGZyb20gbGFzdCBzY3JpcHR1cmUgZG93bmxvYWRcbiAgICBjb25zdCBfc2hhID0gZmV0Y2hSZXNwXz8uZGF0YT8uc2hhIHx8IG51bGxcbiAgICBjb25zdCB1cmwgPSBmZXRjaFJlc3BfPy5kYXRhPy5kb3dubG9hZF91cmwgfHwgbnVsbFxuICAgIGxldCB2YWxpZEJyYW5jaCA9IHRydWVcblxuICAgIGlmIChfc2hhKSB7IC8vIFRSSUNLWTogc2luY2UgdGhpcyBmZXRjaCBtYXkgYmUgZGVsYXllZCAtIG1ha2Ugc3VyZSBpdCB3YXMgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCBiZWZvcmUgdXNpbmcgdGhlIHNoYVxuICAgICAgY29uc3QgcGFydHMgPSAodXJsIHx8ICcnKS5zcGxpdCgnLycpXG4gICAgICBjb25zdCBmZXRjaEJyYW5jaCA9IHBhcnRzLmxlbmd0aCA+IDcgPyBwYXJ0c1s3XSA6ICcnXG4gICAgICB2YWxpZEJyYW5jaCA9IGZldGNoQnJhbmNoID09PSByZWZcbiAgICB9XG5cbiAgICBpZiAodmFsaWRCcmFuY2ggJiYgX3NoYSAhPT0gc2hhKSB7XG4gICAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZDogZm9yICR7dXJsfSAke0pTT04uc3RyaW5naWZ5KHJlZmVyZW5jZV8pfSBuZXcgc2hhIGlzICR7X3NoYX1gKVxuICAgICAgc2V0U3RhdGUoeyBzaGE6IF9zaGEgfSlcbiAgICB9XG4gIH0sIFtmZXRjaFJlc3BfXSlcblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGNhcmRSZXNvdXJjZUlkID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkIHx8IHJlc291cmNlSWRcbiAgLy8gQHRzLWlnbm9yZVxuICBsZXQgcmVmXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnJlZiB8fCBhcHBSZWZcbiAgY29uc3QgY2FuVXNlRWRpdEJyYW5jaCA9ICEhKGxvZ2dlZEluVXNlciAmJiBhdXRoZW50aWNhdGlvbiAmJiAocmVzb3VyY2VJZCAhPT0gT1JJR0lOQUxfU09VUkNFKSAmJiAvLyBUUklDS1kgaWYgbm90IG9yaWdpbmFsIGxhbmd1YWdlIGFuZCB3ZSBoYXZlIGxvZ2luIGRhdGEsIHRoZW4gd2UgY2FuIHVzZSB0aGUgZWRpdCBicmFuY2hcbiAgICAoKHJlZl8gPT09ICdtYXN0ZXInKSB8fCAocmVmXy5pbmNsdWRlcyhsb2dnZWRJblVzZXIpKSkpIC8vIGFsc28gbWFrZSBzdXJlIG5vdCBhIHZlcnNpb24gdGFnXG5cbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBicmFuY2hEZXRlcm1pbmVkLFxuICAgICAgdXNlckVkaXRCcmFuY2hOYW1lLFxuICAgICAgdXNpbmdVc2VyQnJhbmNoOiBfdXNpbmdVc2VyQnJhbmNoLFxuICAgICAgd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIH0sXG4gICAgYWN0aW9uczogeyBzdGFydEVkaXQ6IHN0YXJ0RWRpdEJyYW5jaCB9LFxuICB9ID0gdXNlVXNlckJyYW5jaCh7XG4gICAgYXBwUmVmLFxuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGJvb2tJZCxcbiAgICBjYXJkSWQ6IGlkLFxuICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgIGNoZWNrRm9yRWRpdEJyYW5jaCxcbiAgICBsYW5ndWFnZUlkLFxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgb3duZXIsXG4gICAgb25SZXNvdXJjZUVycm9yLFxuICAgIHNlcnZlcixcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICB9KVxuXG4gIGNvbnN0IF91c2VCcmFuY2hNZXJnZXIgPSB1c2VCcmFuY2hNZXJnZXIoeyBzZXJ2ZXIsIG93bmVyLCByZXBvLCB1c2VyQnJhbmNoOiB1c2VyRWRpdEJyYW5jaE5hbWUsIHRva2VuaWQ6IGF1dGhlbnRpY2F0aW9uPy50b2tlbj8uc2hhMSB9KTtcbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBtZXJnZVN0YXR1czogbWVyZ2VUb01hc3RlcixcbiAgICAgIHVwZGF0ZVN0YXR1czogbWVyZ2VGcm9tTWFzdGVyLFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgdXBkYXRlVXNlckJyYW5jaDogbWVyZ2VGcm9tTWFzdGVySW50b1VzZXJCcmFuY2gsXG4gICAgICBtZXJnZU1hc3RlckJyYW5jaDogbWVyZ2VUb01hc3RlckZyb21Vc2VyQnJhbmNoLFxuICAgIH0sXG4gIH0gPSBfdXNlQnJhbmNoTWVyZ2VyXG5cbiAgY29uc3QgdXBkYXRlQnV0dG9uUHJvcHMgPSB1c2VDb250ZW50VXBkYXRlUHJvcHMoe1xuICAgIGlzU2F2aW5nOiBzdGFydFNhdmUsXG4gICAgdXNlQnJhbmNoTWVyZ2VyOiBfdXNlQnJhbmNoTWVyZ2VyLFxuICAgIHJlbG9hZENvbnRlbnQ6IHNjcmlwdHVyZUNvbmZpZz8ucmVsb2FkUmVzb3VyY2VcbiAgfSlcblxuICBjb25zdCB7XG4gICAgY2FsbFVwZGF0ZVVzZXJCcmFuY2gsXG4gICAgaXNFcnJvckRpYWxvZ09wZW4sXG4gICAgb25DbG9zZUVycm9yRGlhbG9nLFxuICAgIGlzTG9hZGluZyxcbiAgICBkaWFsb2dNZXNzYWdlLFxuICAgIGRpYWxvZ1RpdGxlLFxuICAgIGRpYWxvZ0xpbmssXG4gICAgZGlhbG9nTGlua1Rvb2x0aXAsXG4gIH0gPSB1cGRhdGVCdXR0b25Qcm9wc1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNhcmRSZXNvdXJjZUlkKSB7XG4gICAgICB1cGRhdGVNZXJnZVN0YXRlICYmIHVwZGF0ZU1lcmdlU3RhdGUoXG4gICAgICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgICAgICBtZXJnZUZyb21NYXN0ZXIsXG4gICAgICAgIG1lcmdlVG9NYXN0ZXIsXG4gICAgICAgIGNhbGxVcGRhdGVVc2VyQnJhbmNoLFxuICAgICAgICBtZXJnZVRvTWFzdGVyRnJvbVVzZXJCcmFuY2gsXG4gICAgICApXG4gICAgfVxuICB9LFtjYXJkUmVzb3VyY2VJZCwgbWVyZ2VGcm9tTWFzdGVyLCBtZXJnZVRvTWFzdGVyXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIHNldENhcmRzTG9hZGluZyhwcmV2Q2FyZHNMb2FkaW5nID0+IFsuLi5wcmV2Q2FyZHNMb2FkaW5nLCBjYXJkUmVzb3VyY2VJZF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldENhcmRzTG9hZGluZyhwcmV2Q2FyZHNMb2FkaW5nID0+IHByZXZDYXJkc0xvYWRpbmcuZmlsdGVyKGNhcmRJZCA9PiBjYXJkSWQgIT09IGNhcmRSZXNvdXJjZUlkKSlcbiAgICB9XG4gIH0sIFtpc0xvYWRpbmddKVxuXG4gIGNvbnN0IHdvcmtpbmdSZWYgPSBjYW5Vc2VFZGl0QnJhbmNoID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogYXBwUmVmXG4gIGxldCBzY3JpcHR1cmVUaXRsZVxuXG4gIGlmICghY2FuVXNlRWRpdEJyYW5jaCAmJiAhcmVhZHlGb3JGZXRjaCkgeyAvLyBpZiBiaWJsZSBub3QgZWxpZ2libGUgZm9yIHVzZXIgYnJhbmNoLCBtYWtlIHN1cmUgaXQncyByZWFkeVxuICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSB9KVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZCBib29rIGNoYW5nZWRgLCB7IGJvb2tJZCwgb3duZXIsIGxhbmd1YWdlSWQsIHJlc291cmNlSWQgfSlcblxuICAgIGlmIChjYW5Vc2VFZGl0QnJhbmNoKSB7IC8vIGlmIGJpYmxlIGVsaWdpYmxlIGZvciB1c2VyIGJyYW5jaCwgcmVmcmVzaCBpdFxuICAgICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiBmYWxzZSwgY2hlY2tGb3JFZGl0QnJhbmNoOiBjaGVja0ZvckVkaXRCcmFuY2ggKyAxIH0pXG4gICAgfVxuICB9LCBbYm9va0lkLCBvd25lciwgbGFuZ3VhZ2VJZCwgcmVzb3VyY2VJZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXF1YWwocmVmZXJlbmNlLCBjdXJyZW50UmVmZXJlbmNlKSkge1xuICAgICAgLy8gY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgcmVmZXJlbmNlIGNoYW5nZWRgLCByZWZlcmVuY2UpXG4gICAgICBzZXRTdGF0ZSh7IGN1cnJlbnRSZWZlcmVuY2U6IHJlZmVyZW5jZSB9KVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZV0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2FpdGluZyBmb3IgYnJhbmNoIGZldGNoIHRvIGNvbXBsZXRlXG4gICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgYnJhbmNoRGV0ZXJtaW5lZCBpcyAke2JyYW5jaERldGVybWluZWR9IGFuZCB3b3JraW5nUmVmIGlzICR7d29ya2luZ1JlZn0gYW5kIHJlYWR5Rm9yRmV0Y2ggaXMgJHtyZWFkeUZvckZldGNofWApXG5cbiAgICBpZiAoIXJlYWR5Rm9yRmV0Y2ggJiYgYnJhbmNoRGV0ZXJtaW5lZCApIHtcbiAgICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSwgcmVmOiB3b3JraW5nUmVmIH0pXG4gICAgfVxuICB9LCBbYnJhbmNoRGV0ZXJtaW5lZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2VsZWN0IGNvcnJlY3Qgd29ya2luZyByZWYgLSBjb3VsZCBiZSBtYXN0ZXIsIHVzZXIgYnJhbmNoLCBvciByZWxlYXNlXG4gICAgaWYgKF91c2luZ1VzZXJCcmFuY2ggIT09IHVzaW5nVXNlckJyYW5jaCkge1xuICAgICAgc2V0U3RhdGUoeyB1c2luZ1VzZXJCcmFuY2g6IF91c2luZ1VzZXJCcmFuY2ggfSlcbiAgICB9XG4gIH0sIFtfdXNpbmdVc2VyQnJhbmNoLCB1c2luZ1VzZXJCcmFuY2hdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBkaXNwbGF5IHN0YXR1cyBpZiBlcnJvclxuICAgIGNvbnN0IGVycm9yID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXVxuXG4gICAgaWYgKGVycm9yKSB7IC8vIGlmIGVycm9yIHdhcyBmb3VuZCBkbyBjYWxsYmFja1xuICAgICAgY29uc3QgcmVzb3VyY2VTdGF0dXMgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzXG4gICAgICBjb25zdCByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoc2NyaXB0dXJlQ29uZmlnKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGdldFJlc291cmNlTWVzc2FnZShyZXNvdXJjZVN0YXR1cywgc2VydmVyLCByZXNvdXJjZUxpbmssIGlzTlRfKVxuICAgICAgY29uc3QgaXNBY2Nlc3NFcnJvciA9IHJlc291cmNlU3RhdHVzW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdXG4gICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG1lc3NhZ2UsIGlzQWNjZXNzRXJyb3IsIHJlc291cmNlU3RhdHVzKVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1dKVxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcudGl0bGUgJiYgc2NyaXB0dXJlQ29uZmlnLnZlcnNpb24pIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGAke3NjcmlwdHVyZUNvbmZpZy50aXRsZX0gdiR7c2NyaXB0dXJlQ29uZmlnLnZlcnNpb259YFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LnVwZGF0ZVRpdGxlKHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssIHNjcmlwdHVyZVRpdGxlKVxuICB9IGVsc2Uge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYFRpdGxlIG1pc3NpbmcgZnJvbSBwcm9qZWN0IG1hbmlmZXN0YFxuICB9XG5cbiAgLyoqIER5bmFtaWNhbGx5IGNyZWF0ZXMgdGhlIHNjcmlwdHVyZSBzZWxlY3Rpb24gZHJvcGRvd24gdG8gYmUgaW5zZXJ0ZWQgaW50byBjYXJkIHNldHRpbmdzICovXG4gIGZ1bmN0aW9uIGdldFNjcmlwdHVyZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IHNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyA9IGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyh7XG4gICAgICBsYWJlbCxcbiAgICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluayxcbiAgICAgIHNldFNjcmlwdHVyZSxcbiAgICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICAgIH0pXG5cbiAgICByZXR1cm4gPFNjcmlwdHVyZVNlbGVjdG9yIHsuLi5zY3JpcHR1cmVTZWxlY3Rpb25Db25maWd9IHN0eWxlPXtzdHlsZX0gZXJyb3JNZXNzYWdlPXt1cmxFcnJvcn0gLz5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBvbk1lbnVDbG9zZSgpYClcbiAgICBzZXRTdGF0ZSh7IHVybEVycm9yOiBudWxsIH0pXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGxhbmd1YWdlSWRfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZFxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKHsgbGFuZ3VhZ2VJZDogbGFuZ3VhZ2VJZF8gfSlcbiAgY29uc3QgZGlyZWN0aW9uID0gKGxhbmd1YWdlPy5kaXJlY3Rpb24pIHx8ICdsdHInXG4gIGNvbnN0IF9yZWZlcmVuY2UgPSBjdXJyZW50UmVmZXJlbmNlIHx8IHJlZmVyZW5jZVxuXG4gIGNvbnN0IGlzSGVicmV3ID0gKGxhbmd1YWdlSWRfID09PSAnaGJvJylcbiAgY29uc3QgZm9udEZhY3RvciA9IGlzSGVicmV3ID8gMS40IDogMSAvLyB3ZSBhdXRvbWF0aWNhbGx5IHNjYWxlIHVwIGZvbnQgc2l6ZSBmb3IgSGVicmV3XG4gIGNvbnN0IHNjYWxlZEZvbnRTaXplID0gZm9udFNpemUgKiBmb250RmFjdG9yXG5cbiAgY29uc3QgaXRlbXMgPSBudWxsXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgaGVhZGVycywgZmlsdGVycywgaXRlbUluZGV4LCBtYXJrZG93blZpZXcsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZXRGaWx0ZXJzLCBzZXRJdGVtSW5kZXgsIHNldE1hcmtkb3duVmlldyxcbiAgICB9LFxuICB9ID0gdXNlQ2FyZFN0YXRlKHsgaXRlbXMgfSlcblxuICBjb25zdCByZWZTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7TWF0aC5yb3VuZChzY2FsZWRGb250U2l6ZSAqIDAuOSl9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IGNvbnRlbnRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7c2NhbGVkRm9udFNpemV9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZUxhYmVsID0gPFRpdGxlPntzY3JpcHR1cmVUaXRsZX08L1RpdGxlPlxuICBsZXQgZGlzYWJsZVdvcmRQb3BvdmVyXyA9IGRpc2FibGVXb3JkUG9wb3ZlclxuICBjb25zdCB1c2luZ09yaWdpbmFsQmlibGUgPSBpc09yaWdpbmFsQmlibGUoc2NyaXB0dXJlQ29uZmlnWydyZXNvdXJjZSddPy5wcm9qZWN0SWQpXG5cbiAgaWYgKGRpc2FibGVXb3JkUG9wb3ZlciA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBzcGVjaWZpZWQsIHRoZW4gZGV0ZXJtaW5lIGlmIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyXyA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgfVxuXG4gIGNvbnN0IGVuYWJsZUVkaXQgPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIGNvbnN0IGVuYWJsZUFsaWdubWVudCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3Qgb3JpZ2luYWxSZXBvVXJsID0gaXNOZXdUZXN0YW1lbnQgPyBncmVla1JlcG9VcmwgOiBoZWJyZXdSZXBvVXJsXG4gIGNvbnN0IHNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcgPSB7XG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgYm9va0luZGV4LFxuICAgIGN1cnJlbnRWZXJzZVJlZjogX3JlZmVyZW5jZSxcbiAgICBlbmFibGVFZGl0LFxuICAgIGVuYWJsZUFsaWdubWVudCxcbiAgICBodHRwQ29uZmlnLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpc05ld1Rlc3RhbWVudCxcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3JpZ2luYWxSZXBvVXJsLFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzdGFydEVkaXRCcmFuY2gsXG4gICAgc2V0U2F2ZWRDaGFuZ2VzOiBfc2V0U2F2ZWRDaGFuZ2VzLFxuICAgIHNvdXJjZUxhbmd1YWdlOiBpc05UXyA/IE5UX09SSUdfTEFORyA6IE9UX09SSUdfTEFORyxcbiAgICB0YXJnZXRMYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgdGl0bGU6IHNjcmlwdHVyZVRpdGxlLFxuICAgIHdvcmtpbmdSZXNvdXJjZUJyYW5jaDogcmVmLFxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYSBzY3JpcHR1cmUgcGFuZSBoYXMgYSBjaGFuZ2UgaW4gc2F2ZSBzdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudEluZGV4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2F2ZWRcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZ2V0Q2hhbmdlcyAtIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHVzZXIgY2xpY2tzIHNhdmUgYnV0dG9uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNsZWFyQ2hhbmdlcyAtIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHNhdmUgaGFzIGNvbXBsZXRlZFxuICAgKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9mIHdvcmQgYWxpZ25tZW50L2VkaXRcbiAgICovXG4gIGZ1bmN0aW9uIF9zZXRTYXZlZENoYW5nZXMoY3VycmVudEluZGV4LCBzYXZlZCwgeyBnZXRDaGFuZ2VzID0gbnVsbCwgY2xlYXJDaGFuZ2VzID0gbnVsbCwgc3RhdGUgPSBudWxsIH0pIHtcbiAgICBjb25zdCBfdW5zYXZlZENoYW5nZXNMaXN0ID0geyAuLi51bnNhdmVkQ2hhbmdlc0xpc3QgfVxuXG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBpZiAoX3Vuc2F2ZWRDaGFuZ2VzTGlzdC5oYXNPd25Qcm9wZXJ0eShjdXJyZW50SW5kZXgpKSB7XG4gICAgICAgIGRlbGV0ZSBfdW5zYXZlZENoYW5nZXNMaXN0W2N1cnJlbnRJbmRleF1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX3Vuc2F2ZWRDaGFuZ2VzTGlzdFtjdXJyZW50SW5kZXhdID0geyBnZXRDaGFuZ2VzLCBjbGVhckNoYW5nZXMsIHN0YXRlIH0gLy8gdXBkYXRlIHdpdGggbGF0ZXN0XG4gICAgfVxuXG4gICAgY29uc3QgX2hhdmVVbnNhdmVkQ2hhbmdlcyA9ICEhT2JqZWN0LmtleXMoX3Vuc2F2ZWRDaGFuZ2VzTGlzdCkubGVuZ3RoXG5cbiAgICBpZiAoaGF2ZVVuc2F2ZWRDaGFuZ2VzICE9IF9oYXZlVW5zYXZlZENoYW5nZXMpIHtcbiAgICAgIHNldFNhdmVkQ2hhbmdlcyAmJiBzZXRTYXZlZENoYW5nZXMocmVzb3VyY2VJZCwgIV9oYXZlVW5zYXZlZENoYW5nZXMpXG4gICAgICBzZXRTdGF0ZSh7IGhhdmVVbnNhdmVkQ2hhbmdlczogX2hhdmVVbnNhdmVkQ2hhbmdlcyB9KVxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChfdW5zYXZlZENoYW5nZXNMaXN0LCB1bnNhdmVkQ2hhbmdlc0xpc3QpKSB7XG4gICAgICBzZXRTdGF0ZSh7IHVuc2F2ZWRDaGFuZ2VzTGlzdDogX3Vuc2F2ZWRDaGFuZ2VzTGlzdCB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZWFyY2ggY2hhcHRlciBvciB2ZXJzZSBjaHVuayB0byBsaW5lIHRoYXQgc3RhcnRzIHdpdGggZmluZEl0ZW1cbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBmaW5kSXRlbVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBjaHVua3NcbiAgICovXG4gIGZ1bmN0aW9uIGZpbmRSZWZJbkFycmF5KGZpbmRJdGVtLCBjaHVua3MpIHtcbiAgICBjb25zdCByZWZfID0gZmluZEl0ZW0gKyAnJ1xuICAgIGNvbnN0IHJlZkxlbiA9IHJlZl8ubGVuZ3RoXG4gICAgY29uc3QgaW5kZXggPSBjaHVua3MuZmluZEluZGV4KChjaHVuaywgaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4ID4gMCkge1xuICAgICAgICBpZiAoY2h1bmsuc3Vic3RyaW5nKDAsIHJlZkxlbikgPT09IHJlZl8pIHtcbiAgICAgICAgICBjb25zdCBuZXh0Q2hhciA9IGNodW5rW3JlZkxlbl1cblxuICAgICAgICAgIGlmICgobmV4dENoYXIgPiAnOScpIHx8IChuZXh0Q2hhciA8ICcwJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9KVxuICAgIHJldHVybiBpbmRleFxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Qm9va05hbWUoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGJvb2tDYXBzID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LnByb2plY3RJZCA/IHNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UucHJvamVjdElkLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIHJldHVybiBgJHtib29rSW5kZXh9LSR7Ym9va0NhcHN9LnVzZm1gXG4gIH1cblxuICBjb25zdCBmaWxlcGF0aCA9IGdldEJvb2tOYW1lKClcblxuICAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIGVkaXQgc3RhdGVcbiAgY29uc3Qge1xuICAgIGVycm9yOiBzYXZlRXJyb3IsXG4gICAgaXNFcnJvcjogaXNTYXZlRXJyb3IsXG4gICAgb25TYXZlRWRpdCxcbiAgfSA9IHVzZUVkaXQoe1xuICAgIHNoYSxcbiAgICBvd25lcixcbiAgICBjb250ZW50OiBzYXZlQ29udGVudCxcbiAgICBjb25maWc6IHtcbiAgICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgICAgLi4uYXV0aGVudGljYXRpb24/LmNvbmZpZyxcbiAgICAgIHRva2VuOiBhdXRoZW50aWNhdGlvbj8udG9rZW4sXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aW1lb3V0OiBodHRwQ29uZmlnPy5zZXJ2ZXJUaW1lT3V0IHx8IGh0dHBDb25maWc/LnRpbWVvdXQgfHwgMTAwMDAsXG4gICAgICBzZXJ2ZXIsXG4gICAgfSxcbiAgICBhdXRob3I6IGxvZ2dlZEluVXNlcixcbiAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgIGJyYW5jaDogd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIGZpbGVwYXRoLFxuICAgIHJlcG8sXG4gIH0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiB3ZSBnZXQgYSBzYXZlIHNhdmVFcnJvclxuICAgIGlmIChzYXZlRXJyb3IgJiYgaXNTYXZlRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBzYXZlIGVycm9yYCwgc2F2ZUVycm9yKVxuICAgICAgLy8gb25SZXNvdXJjZUVycm9yICYmIG9uUmVzb3VyY2VFcnJvcihudWxsLCBmYWxzZSwgbnVsbCwgYEVycm9yIHNhdmluZyAke2xhbmd1YWdlSWRffV8ke3Jlc291cmNlSWR9ICR7c2F2ZUVycm9yfWAsIHRydWUpXG4gICAgfVxuICB9LCBbc2F2ZUVycm9yLCBpc1NhdmVFcnJvcl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiBzdGFydFNhdmUgZ29lcyB0cnVlLCBzYXZlIGVkaXRzIHRvIHVzZXIgYnJhbmNoIGFuZCB0aGVuIGNsZWFyIHN0YXJ0U2F2ZVxuICAgIGNvbnN0IF9zYXZlRWRpdCA9IGFzeW5jICgpID0+IHsgLy8gYmVnaW4gdXBsb2FkaW5nIG5ldyBVU0ZNXG4gICAgICBjb25zb2xlLmluZm8oYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gVXNpbmcgc2hhOiAke3NoYX1gKVxuICAgICAgYXdhaXQgb25TYXZlRWRpdCh1c2VyRWRpdEJyYW5jaE5hbWUpLnRoZW4oKHN1Y2Nlc3MpID0+IHsgLy8gcHVzaCBjaGFuZ2VkIHRvIHNlcnZlclxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIHNhdmUgc2NyaXB0dXJlIGVkaXRzIHN1Y2Nlc3NgKVxuICAgICAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgICAgIGlmICh1bnNhdmVkQ2FyZEluZGljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xlYXJDaGFuZ2VzIH0gPSB1bnNhdmVkQ2hhbmdlc0xpc3RbY2FyZEluZGV4XVxuICAgICAgICAgICAgICBjbGVhckNoYW5nZXMgJiYgY2xlYXJDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmluZm8oJ3NhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gUmVsb2FkaW5nIHJlc291cmNlJylcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgICAgICAgICAgcmVhZHlGb3JGZXRjaDogdHJ1ZSxcbiAgICAgICAgICAgIHJlZjogdXNlckVkaXRCcmFuY2hOYW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgZGVsYXkoNTAwKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNldENhcmRzU2F2aW5nKHByZXZDYXJkc1NhdmluZyA9PiBwcmV2Q2FyZHNTYXZpbmcuZmlsdGVyKGNhcmRJZCA9PiBjYXJkSWQgIT09IGNhcmRSZXNvdXJjZUlkKSlcbiAgICAgICAgICAgIHNjcmlwdHVyZUNvbmZpZz8ucmVsb2FkUmVzb3VyY2Uoc2hhKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgY2hhbmdlZCBzY3JpcHR1cmUgZmFpbGVkJylcbiAgICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gcHJldkNhcmRzU2F2aW5nLmZpbHRlcihjYXJkSWQgPT4gY2FyZElkICE9PSBjYXJkUmVzb3VyY2VJZCkpXG4gICAgICAgICAgc2V0U3RhdGUoeyBzdGFydFNhdmU6IGZhbHNlIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0U2F2ZSkge1xuICAgICAgaWYgKCFlZGl0QnJhbmNoUmVhZHkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGVkaXQgYnJhbmNoIG5vdCB5ZXQgY3JlYXRlZGApXG4gICAgICB9IGVsc2UgaWYgKCFzaGEpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHNhdmUgc2hhIG5vdCB5ZXQgcmVhZHlgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGNhbGxpbmcgX3NhdmVFZGl0KClgKVxuICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gWy4uLnByZXZDYXJkc1NhdmluZywgY2FyZFJlc291cmNlSWRdKVxuICAgICAgICBfc2F2ZUVkaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3N0YXJ0U2F2ZSwgZWRpdEJyYW5jaFJlYWR5LCBzaGFdKVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHVwZGF0ZWRWZXJzZU9iamVjdHMgdG8gVVNGTSBhbmQgbWVyZ2UgaW50byB0aGUgYmlibGVVc2ZtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiaWJsZVVzZm0gLSBVU0ZNIG9mIGJpYmxlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWYgLSByZWZlcmVuY2Ugb2YgdmVyc2UgdG8gbWVyZ2UgaW5cbiAgICogQHBhcmFtIHtvYmplY3RbXX0gdXBkYXRlZFZlcnNlT2JqZWN0cyAtIG5ldyB2ZXJzZSBpbiB2ZXJzZU9iamVjdCBmb3JtYXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNhcmROdW1cbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbShiaWJsZVVzZm0sIHJlZiwgdXBkYXRlZFZlcnNlT2JqZWN0cywgY2FyZE51bTogbnVtYmVyKSB7XG4gICAgbGV0IG5ld1VzZm1cbiAgICBjb25zdCBjaGFwdGVyQ2h1bmtzID0gYmlibGVVc2ZtPy5zcGxpdCgnXFxcXGMgJylcbiAgICBjb25zdCBjaGFwdGVySW5kZXggPSBmaW5kUmVmSW5BcnJheShyZWY/LmNoYXB0ZXIsIGNoYXB0ZXJDaHVua3MpXG5cbiAgICBpZiAoY2hhcHRlckluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRDaGFwdGVyID0gY2hhcHRlckNodW5rc1tjaGFwdGVySW5kZXhdXG4gICAgICBjb25zdCB2ZXJzZUNodW5rcyA9IGN1cnJlbnRDaGFwdGVyLnNwbGl0KCdcXFxcdiAnKVxuICAgICAgY29uc3QgdmVyc2VJbmRleCA9IGZpbmRSZWZJbkFycmF5KHJlZj8udmVyc2UsIHZlcnNlQ2h1bmtzKVxuXG4gICAgICBpZiAodmVyc2VJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZlcnNlVXNmbSA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTSh1cGRhdGVkVmVyc2VPYmplY3RzKVxuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCR7Y2FyZE51bX0pIC0gbmV3IFVTRk0gZm9yIGNhcmQ6fSAtICR7bmV3VmVyc2VVc2ZtLnN1YnN0cmluZygwLCAxMDApfWApXG4gICAgICAgIGNvbnN0IG9sZFZlcnNlID0gdmVyc2VDaHVua3NbdmVyc2VJbmRleF1cbiAgICAgICAgY29uc3QgdmVyc2VOdW1MZW4gPSAocmVmPy52ZXJzZSArICcnKS5sZW5ndGhcbiAgICAgICAgdmVyc2VDaHVua3NbdmVyc2VJbmRleF0gPSBvbGRWZXJzZS5zdWJzdHJpbmcoMCwgdmVyc2VOdW1MZW4gKyAxKSArIG5ld1ZlcnNlVXNmbVxuICAgICAgICBjb25zdCBuZXdDaGFwdGVyID0gdmVyc2VDaHVua3Muam9pbignXFxcXHYgJylcbiAgICAgICAgY2hhcHRlckNodW5rc1tjaGFwdGVySW5kZXhdID0gbmV3Q2hhcHRlclxuICAgICAgICBuZXdVc2ZtID0gY2hhcHRlckNodW5rcy5qb2luKCdcXFxcYyAnKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3VXNmbVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gZm9yIGVhY2ggdW5zYXZlZCBjaGFuZ2UsIGNhbGwgaW50byBzY3JpcHR1cmVQYW5lIHRvIGdldCBsYXRlc3QgY2hhbmdlcyBmb3IgdmVyc2UgdG8gc2F2ZVxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldFJlYWR5Rm9yU2F2ZSgpIHtcbiAgICAgIGlmIChzYXZlQ2xpY2tlZCkge1xuICAgICAgICBsZXQgY3JlYXRlRWRpdEJyYW5jaCA9ICFfdXNpbmdVc2VyQnJhbmNoXG5cbiAgICAgICAgaWYgKCFjcmVhdGVFZGl0QnJhbmNoKSB7IC8vIGlmIGFscmVhZHkgdXNpbmcgdGhlIHVzZXIgYnJhbmNoXG4gICAgICAgICAgaWYgKHdvcmtpbmdSZXNvdXJjZUJyYW5jaCAhPT0gdXNlckVkaXRCcmFuY2hOYW1lKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHN0YXRlIGNvbmZsaWN0IC0gc2hvdWxkIGJlIGluIHVzZXIgYnJhbmNoICR7dXNlckVkaXRCcmFuY2hOYW1lfSwgYnV0IGFjdHVhbGx5IHVzaW5nICR7d29ya2luZ1Jlc291cmNlQnJhbmNofWApXG4gICAgICAgICAgICBjcmVhdGVFZGl0QnJhbmNoID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gYWxyZWFkeSB1c2luZyBlZGl0IGJyYW5jaDogJHt3b3JraW5nUmVzb3VyY2VCcmFuY2h9YClcbiAgICAgICAgICAgIHNldFN0YXRlKHsgZWRpdEJyYW5jaFJlYWR5OiB0cnVlIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNyZWF0ZUVkaXRCcmFuY2gpIHsgLy8gaWYgbm90IHlldCB1c2luZyB0aGUgdXNlciBicmFuY2gsIGNyZWF0ZSBpdFxuICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBjcmVhdGluZyBlZGl0IGJyYW5jaGApXG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgZWRpdEJyYW5jaFJlYWR5OiBmYWxzZSxcbiAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLFxuICAgICAgICAgICAgc2hhOiBudWxsLFxuICAgICAgICAgIH0pIC8vIHdlIHdpbGwgbmVlZCBhIG5ldyBzaGEgZm9yIGJvb2svYnJhbmNoXG5cbiAgICAgICAgICBjb25zdCBicmFuY2ggPSBhd2FpdCBzdGFydEVkaXRCcmFuY2goKVxuXG4gICAgICAgICAgaWYgKGJyYW5jaCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGVkaXQgYnJhbmNoIGNyZWF0ZWRgKVxuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBlZGl0QnJhbmNoUmVhZHk6IHRydWUsXG4gICAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IHRydWUsXG4gICAgICAgICAgICAgIHJlZjogYnJhbmNoLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGZhaWxlZCB0byBjcmVhdGUgZWRpdCBicmFuY2hgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBnZXR0aW5nIHZlcnNlIGNoYW5nZXNgKVxuICAgICAgICBjb25zdCB1bnNhdmVkQ2FyZEluZGljZXMgPSBPYmplY3Qua2V5cyh1bnNhdmVkQ2hhbmdlc0xpc3QpXG5cbiAgICAgICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgbGV0IGJpYmxlVXNmbSA9IGNvcmUuZ2V0UmVzcG9uc2VEYXRhKHNjcmlwdHVyZUNvbmZpZz8uZmV0Y2hSZXNwb25zZSlcbiAgICAgICAgICBsZXQgbWVyZ2VGYWlsID0gZmFsc2VcbiAgICAgICAgICBsZXQgY2FyZE51bSA9IDBcblxuICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgY2FyZE51bSA9IHBhcnNlSW50KGNhcmRJbmRleClcbiAgICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgICBpZiAoZ2V0Q2hhbmdlcykge1xuICAgICAgICAgICAgICBsZXQgbmV3VXNmbVxuICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmIGJpYmxlVXNmbSkgeyAvLyBqdXN0IHJlcGxhY2UgdmVyc2VcbiAgICAgICAgICAgICAgICBuZXdVc2ZtID0gbWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtKGJpYmxlVXNmbSwgcmVmLCB1cGRhdGVkVmVyc2VPYmplY3RzLCBjYXJkTnVtKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG5ld1VzZm0pIHtcbiAgICAgICAgICAgICAgICBiaWJsZVVzZm0gPSBuZXdVc2ZtXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VGYWlsID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobWVyZ2VGYWlsKSB7IC8vIGlmIHdlIGZhaWxlZCB0byBtZXJnZSwgZmFsbGJhY2sgdG8gYnJ1dGUgZm9yY2UgdmVyc2Ugb2JqZWN0cyB0byBVU0ZNXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCR7Y2FyZE51bX0pIC0gdmVyc2Ugbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gaW5zZXJ0aW5nIHZlcnNlIG9iamVjdGApXG4gICAgICAgICAgICBsZXQgbmV3Qm9va0pzb25cblxuICAgICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhcmROdW0gPSBwYXJzZUludChjYXJkSW5kZXgpXG4gICAgICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgICAgIGlmIChnZXRDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1VzZm1cbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgICAgICAgICAgICByZWYsXG4gICAgICAgICAgICAgICAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRWZXJzZU9iamVjdHMgJiYgIW5ld1VzZm0pIHtcbiAgICAgICAgICAgICAgICAgIGxldCB0YXJnZXRWZXJzZU9iamVjdHNfID0gbnVsbFxuXG4gICAgICAgICAgICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdWZXJzZVRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRhcmdldFZlcnNlT2JqZWN0cyB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSh1cGRhdGVkVmVyc2VPYmplY3RzLCBuZXdWZXJzZVRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHRhcmdldFZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3Qm9va0pzb24gPSB0YXJnZXRWZXJzZU9iamVjdHNfICYmIHNjcmlwdHVyZUNvbmZpZz8udXBkYXRlVmVyc2UocmVmLmNoYXB0ZXIsIHJlZi52ZXJzZSwge3ZlcnNlT2JqZWN0czogdGFyZ2V0VmVyc2VPYmplY3RzX30pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJpYmxlVXNmbSA9IHVzZm1qcy50b1VTRk0obmV3Qm9va0pzb24sIHtmb3JjZWROZXdMaW5lczogdHJ1ZX0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIG5ldyBVU0ZNOiAke2JpYmxlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKVxuICAgICAgICAgIHNldFN0YXRlKHtzYXZlQ29udGVudDogYmlibGVVc2ZtLCBzdGFydFNhdmU6IHRydWUsIHNhdmVDbGlja2VkOiBmYWxzZX0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZWFkeUZvclNhdmUoKVxuICB9LCBbc2F2ZUNsaWNrZWRdKVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgeyBjaGFwdGVyIH0gPSBfcmVmZXJlbmNlIHx8IHt9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBfdmVyc2VzRm9yUmVmID0gc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWZcbiAgICBsZXQgbmV3U2VsZWN0aW9ucyA9IG5ldyBNYXAoKVxuICAgIGxldCB1cGRhdGVTZWxlY3Rpb25zID0gZmFsc2VcbiAgICBjb25zdCBfbWFwID0gbmV3U2VsZWN0aW9uc1xuICAgIGNvbnN0IG9yaWdpbmFsQm9va0lkID0gb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz8uYm9va0lkXG4gICAgY29uc3QgYm9va1ZlcnNlT2JqZWN0ID0gb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz8uY2hhcHRlcnNcbiAgICBsZXQgbmV3U2VsZWN0ZWRRdW90ZSA9IG51bGxcblxuICAgIC8vIGlmIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzZWxlY3Rpb25zXG4gICAgaWYgKF92ZXJzZXNGb3JSZWY/Lmxlbmd0aCAmJlxuICAgICAgYm9va1ZlcnNlT2JqZWN0ICYmXG4gICAgICAoYm9va0lkID09PSBvcmlnaW5hbEJvb2tJZCkgJiZcbiAgICAgIGJvb2tWZXJzZU9iamVjdFtjaGFwdGVyXSAmJiAvLyB3ZSBuZWVkIHRvIGhhdmUgZGF0YSBmb3IgY2hhcHRlclxuICAgICAgc2VsZWN0ZWRRdW90ZT8ucXVvdGVcbiAgICApIHtcbiAgICAgIC8vIGlmIHF1b3RlIGlzIGRpZmZlcmVudCB0aGFuIGxhc3RcbiAgICAgIGlmICghaXNFcXVhbChsYXN0U2VsZWN0ZWRRdW90ZSwgc2VsZWN0ZWRRdW90ZSkgfHxcbiAgICAgICAgIWlzRXF1YWwodmVyc2VzRm9yUmVmLCBfdmVyc2VzRm9yUmVmKSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNlcyA9IHt9XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGUgPSB7fSAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgbGV0IHN0YXJ0VmVyc2UgPSBfdmVyc2VzRm9yUmVmWzBdLnZlcnNlXG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdGFydFZlcnNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHN0YXJ0VmVyc2UgPSBwYXJzZUludChzdGFydFZlcnNlKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RWZXJzZSA9IHN0YXJ0VmVyc2VcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IF92ZXJzZXNGb3JSZWYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdmVyc2VSZWYgPSBfdmVyc2VzRm9yUmVmW2ldXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY2hhcHRlcixcbiAgICAgICAgICAgIHZlcnNlLFxuICAgICAgICAgIH0gPSB2ZXJzZVJlZlxuICAgICAgICAgIC8vIFRSSUNLWSAtIHdlIHJlbWFwIHZlcnNlcyBpbiByZWZlcmVuY2UgcmFuZ2UgdG8gYSBsaW5lYXIgc2VyaWVzIG9mIHZlcnNlcyBzbyB2ZXJzZSBzcGFucyBkb24ndCBjaG9rZSBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWZcbiAgICAgICAgICBsZXQgX3ZlcnNlID0gc3RhcnRWZXJzZSArIGlcbiAgICAgICAgICBsYXN0VmVyc2UgPSBfdmVyc2VcbiAgICAgICAgICBzdWJzdGl0dXRlW2Ake2NoYXB0ZXJ9OiR7X3ZlcnNlfWBdID0gYCR7Y2hhcHRlcn06JHt2ZXJzZX1gXG5cbiAgICAgICAgICBpZiAoIW9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdKSB7XG4gICAgICAgICAgICBvcmlnaW5hbFZlcnNlc1tjaGFwdGVyXSA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHZlcnNlT2JqZWN0cyA9IFtdXG5cbiAgICAgICAgICBpZiAoKHR5cGVvZiB2ZXJzZSA9PT0gJ3N0cmluZycpICYmICh2ZXJzZS5pbmNsdWRlcygnLScpKSkge1xuICAgICAgICAgICAgY29uc3QgdmVyc2VzID0gZ2V0VmVyc2VzKGJvb2tWZXJzZU9iamVjdCwgYCR7Y2hhcHRlcn06JHt2ZXJzZX1gKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZlcnNlSXRlbSBvZiB2ZXJzZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgdm8gPSB2ZXJzZUl0ZW0udmVyc2VEYXRhLnZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHMuY29uY2F0KHZvKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBib29rVmVyc2VPYmplY3RbY2hhcHRlcl1bdmVyc2VdPy52ZXJzZU9iamVjdHNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgICAgICAgICAgIG9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdW192ZXJzZV0gPSB7IHZlcnNlT2JqZWN0cyB9XG4gICAgICAgICAgICBfbWFwLnNldChgJHtjaGFwdGVyfToke3ZlcnNlfWAsIHZlcnNlT2JqZWN0cylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgbmV3IHJlZmVyZW5jZSByYW5nZSBmb3IgbmV3IGxpbmVhciB2ZXJzZSByYW5nZVxuICAgICAgICBjb25zdCBbY2hhcHRlcl0gPSBzZWxlY3RlZFF1b3RlPy5yZWZlcmVuY2U/LnNwbGl0KCc6JylcbiAgICAgICAgbGV0IHN1YlJlZiA9IGAke2NoYXB0ZXJ9OiR7c3RhcnRWZXJzZX1gXG5cbiAgICAgICAgaWYgKGxhc3RWZXJzZSAhPSBzdGFydFZlcnNlKSB7XG4gICAgICAgICAgc3ViUmVmICs9IGAtJHtsYXN0VmVyc2V9YFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVvdGVNYXRjaGVzID0gZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmKHtcbiAgICAgICAgICBib29rT2JqZWN0OiBvcmlnaW5hbFZlcnNlcyxcbiAgICAgICAgICByZWY6IHN1YlJlZixcbiAgICAgICAgICBxdW90ZTogc2VsZWN0ZWRRdW90ZT8ucXVvdGUsXG4gICAgICAgICAgb2NjdXJyZW5jZTogc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gbmV3IE1hcCgpXG5cbiAgICAgICAgaWYgKHF1b3RlTWF0Y2hlcz8uc2l6ZSkge1xuICAgICAgICAgIHF1b3RlTWF0Y2hlcy5mb3JFYWNoKCh3b3Jkcywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfa2V5ID0gc3Vic3RpdHV0ZVtrZXldXG5cbiAgICAgICAgICAgIHNlbGVjdGlvbnMuc2V0KF9rZXksIHdvcmRzLm1hcCh3b3JkID0+IChcbiAgICAgICAgICAgICAgeyAuLi53b3JkLCB0ZXh0OiBjb3JlLm5vcm1hbGl6ZVN0cmluZyh3b3JkLnRleHQpIH1cbiAgICAgICAgICAgICkpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgbmV3U2VsZWN0aW9ucyA9IHNlbGVjdGlvbnNcbiAgICAgICAgbmV3U2VsZWN0ZWRRdW90ZSA9IHNlbGVjdGVkUXVvdGVcbiAgICAgICAgdXBkYXRlU2VsZWN0aW9ucyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdTdGF0ZTogYW55ID0ge31cblxuICAgIC8vIHVwZGF0ZSBzdGF0ZXMgdGhhdCBoYXZlIGNoYW5nZWRcbiAgICBpZiAoIWFyZU1hcHNUaGVTYW1lKHZlcnNlT2JqZWN0c01hcCwgX21hcCkpIHtcbiAgICAgIG5ld1N0YXRlLnZlcnNlT2JqZWN0c01hcCA9IF9tYXBcbiAgICB9XG5cbiAgICBjb25zdCBib29rc05vdFNhbWUgPSByZWZlcmVuY2U/LnByb2plY3RJZCAhPT0gY3VycmVudFJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgICBpZiAoYm9va3NOb3RTYW1lIHx8ICFhcmVWZXJzZXNTYW1lKHZlcnNlc0ZvclJlZiwgX3ZlcnNlc0ZvclJlZikpIHtcbiAgICAgIG5ld1N0YXRlLnZlcnNlc0ZvclJlZiA9IF92ZXJzZXNGb3JSZWZcbiAgICAgIG5ld1N0YXRlLmxhc3RTZWxlY3RlZFF1b3RlID0gbmV3U2VsZWN0ZWRRdW90ZVxuICAgICAgbmV3U3RhdGUuc2VsZWN0aW9ucyA9IG5ld1NlbGVjdGlvbnNcbiAgICB9XG5cbiAgICBpZiAobmV3U2VsZWN0ZWRRdW90ZSkge1xuICAgICAgbmV3U3RhdGUubGFzdFNlbGVjdGVkUXVvdGUgPSBuZXdTZWxlY3RlZFF1b3RlXG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVNlbGVjdGlvbnMpIHtcbiAgICAgIGlmICghYXJlTWFwc1RoZVNhbWUoc2VsZWN0aW9ucyB8fCAobmV3IE1hcCgpKSwgbmV3U2VsZWN0aW9ucykpIHtcbiAgICAgICAgbmV3U3RhdGUuc2VsZWN0aW9ucyA9IG5ld1NlbGVjdGlvbnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobmV3U3RhdGUpLmxlbmd0aCkge1xuICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgfVxuICB9LCBbb3duZXIsIHJlc291cmNlSWQsIGJvb2tJZCwgbGFuZ3VhZ2VJZF8sIHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmLCBvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzLCBzZWxlY3RlZFF1b3RlXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBjbGVhciBzZXR0aW5ncyBvbiB2ZXJzZSBjaGFuZ2VcbiAgICBzZXRTdGF0ZSh7XG4gICAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IG51bGwsXG4gICAgICB1bnNhdmVkQ2hhbmdlc0xpc3Q6IHt9LFxuICAgICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICB9KVxuICB9LCBbX3JlZmVyZW5jZV0pXG5cbiAgY29uc3QgdXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzID0gKHJlZmVyZW5jZSwgYWxpZ25lZCkgPT4ge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHtcbiAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1czogeyAuLi5wcmV2U3RhdGUudmVyc2VzQWxpZ25tZW50U3RhdHVzLCBbYCR7cmVmZXJlbmNlLmNoYXB0ZXJ9OiR7cmVmZXJlbmNlLnZlcnNlfWBdOiBhbGlnbmVkIH0sXG4gICAgfSkpXG4gIH1cblxuICBsZXQgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoX3ZlcnNlc0ZvclJlZj8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCB7IHJlZmVyZW5jZSwgcmVzb3VyY2VMaW5rIH0gPSBzY3JpcHR1cmVDb25maWcgfHwge31cbiAgICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkLl92ZXJzZXNGb3JSZWYgY2hhbmdlZGAsIHsgcmVmZXJlbmNlLCByZXNvdXJjZUxpbmsgfSlcbiAgICB9XG4gIH0sIFtfdmVyc2VzRm9yUmVmXSlcblxuICBpZiAoIV92ZXJzZXNGb3JSZWY/Lmxlbmd0aCkgeyAvLyBpZiBlbXB0eSBvZiByZWZlcmVuY2VzLCBjcmVhdGUgc2luZ2xlIGVtcHR5IHJlZmVyZW5jZVxuICAgIF92ZXJzZXNGb3JSZWYgPSBbeyAuLi5yZWZlcmVuY2UgfV1cbiAgfVxuXG4gIGNvbnN0IG5lZWRUb01lcmdlRnJvbU1hc3RlciA9IG1lcmdlRnJvbU1hc3Rlcj8ubWVyZ2VOZWVkZWRcbiAgY29uc3QgbWVyZ2VGcm9tTWFzdGVySGFzQ29uZmxpY3RzID0gbWVyZ2VGcm9tTWFzdGVyPy5jb25mbGljdFxuICBjb25zdCBtZXJnZVRvTWFzdGVySGFzQ29uZmxpY3RzID0gbWVyZ2VUb01hc3Rlcj8uY29uZmxpY3RcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgY29uc3QgbWVyZ2VGcm9tTWFzdGVyVGl0bGUgPSBtZXJnZUZyb21NYXN0ZXJIYXNDb25mbGljdHMgPyAnTWVyZ2UgQ29uZmxpY3RzIGZvciB1cGRhdGUgZnJvbSBtYXN0ZXInIDogKG5lZWRUb01lcmdlRnJvbU1hc3RlciA/ICdVcGRhdGUgZnJvbSBtYXN0ZXInIDogJ05vIG1lcmdlIGNvbmZsaWN0cyBmb3IgdXBkYXRlIHdpdGggbWFzdGVyJylcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gIGNvbnN0IG1lcmdlRnJvbU1hc3RlckNvbG9yID0gbWVyZ2VGcm9tTWFzdGVySGFzQ29uZmxpY3RzID8gJ2JsYWNrJyA6IChuZWVkVG9NZXJnZUZyb21NYXN0ZXIgPyAnYmxhY2snIDogJ2xpZ2h0Z3JheScpXG4gIGNvbnN0IG1lcmdlVG9NYXN0ZXJUaXRsZSA9IG1lcmdlVG9NYXN0ZXJIYXNDb25mbGljdHMgPyAnTWVyZ2UgQ29uZmxpY3RzIGZvciBzaGFyZSB3aXRoIG1hc3RlcicgOiAnTm8gbWVyZ2UgY29uZmxpY3RzIGZvciBzaGFyZSB3aXRoIG1hc3RlcidcbiAgY29uc3QgbWVyZ2VUb01hc3RlckNvbG9yID0gbWVyZ2VUb01hc3Rlckhhc0NvbmZsaWN0cyA/ICdibGFjaycgOiAnYmxhY2snXG5cbiAgY29uc3QgcmVuZGVyZWRTY3JpcHR1cmVQYW5lcyA9IF92ZXJzZXNGb3JSZWY/Lm1hcCgoX2N1cnJlbnRWZXJzZURhdGEsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbFZlcnNlT2JqZWN0cyA9IF9jdXJyZW50VmVyc2VEYXRhPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0cyB8fCBbXVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7IGNoYXB0ZXIsIHZlcnNlIH0gPSBfY3VycmVudFZlcnNlRGF0YSB8fCB7fVxuICAgIGNvbnN0IHByb2plY3RJZCA9IGN1cnJlbnRSZWZlcmVuY2U/LnByb2plY3RJZCB8fCByZWZlcmVuY2U/LnByb2plY3RJZFxuICAgIGNvbnN0IF9yZWZlcmVuY2UgPSB7XG4gICAgICAuLi5fdmVyc2VzRm9yUmVmLFxuICAgICAgY2hhcHRlcixcbiAgICAgIHByb2plY3RJZCxcbiAgICAgIHZlcnNlLFxuICAgIH1cbiAgICBjb25zdCBfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICAgIC4uLnNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcsXG4gICAgICBjdXJyZW50SW5kZXg6IGluZGV4LFxuICAgICAgaW5pdGlhbFZlcnNlT2JqZWN0cyxcbiAgICAgIHJlZmVyZW5jZTogX3JlZmVyZW5jZSxcbiAgICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIH1cblxuICAgIGxldCBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQgPSBmYWxzZVxuXG4gICAgaWYgKHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQpIHtcbiAgICAgIGlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCA9IHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQuY2hhcHRlciA9PSBjaGFwdGVyICYmIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQudmVyc2UgPT0gdmVyc2VcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNjcmlwdHVyZVBhbmVcbiAgICAgICAgey4uLnNjcmlwdHVyZUNvbmZpZ31cbiAgICAgICAgY29udGVudFN0eWxlPXtjb250ZW50U3R5bGV9XG4gICAgICAgIGN1cnJlbnRJbmRleD17aW5kZXh9XG4gICAgICAgIGRldGVybWluaW5nQnJhbmNoPXshcmVhZHlGb3JGZXRjaH1cbiAgICAgICAgZGlyZWN0aW9uPXtkaXJlY3Rpb259XG4gICAgICAgIGRpc2FibGVXb3JkUG9wb3Zlcj17ZGlzYWJsZVdvcmRQb3BvdmVyX31cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBnZXRMZXhpY29uRGF0YT17Z2V0TGV4aWNvbkRhdGF9XG4gICAgICAgIGlzTlQ9e2lzTlRffVxuICAgICAgICBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ9e2lzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudH1cbiAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgb25BbGlnbm1lbnRGaW5pc2g9eygpID0+IHNldFN0YXRlKHsgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogbnVsbCB9KX1cbiAgICAgICAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz17b3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0c31cbiAgICAgICAgcmVmU3R5bGU9e3JlZlN0eWxlfVxuICAgICAgICByZWZlcmVuY2U9e19yZWZlcmVuY2V9XG4gICAgICAgIHNhdmluZz17c3RhcnRTYXZlfVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWc9e19zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnfVxuICAgICAgICBzZXRXb3JkQWxpZ25lclN0YXR1cz17c2V0V29yZEFsaWduZXJTdGF0dXN9XG4gICAgICAgIHNlcnZlcj17c2VydmVyfVxuICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgdXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzPXt1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXN9XG4gICAgICAvPlxuICAgIClcbiAgfSlcblxuICBjb25zdCBoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrID0gKCkgPT4ge1xuICAgIGlmICh2ZXJzZXNGb3JSZWY/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHNldFN0YXRlKHsgc2hvd0FsaWdubWVudFBvcHVwOiB0cnVlIH0pXG4gICAgfSBlbHNlIGlmICh2ZXJzZXNGb3JSZWY/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgc2V0U3RhdGUoeyB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiB2ZXJzZXNGb3JSZWZbMF0gfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBvblJlbmRlclRvb2xiYXIgPSAoeyBpdGVtcyB9KSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbXMgPSBbLi4uaXRlbXNdXG5cbiAgICBsZXQgYWxsVmVyc2VzQWxpZ25lZCA9IGZhbHNlXG5cbiAgICAvLyBDaGVjayBpZiBhbGwgdmFsdWVzIGluIHZlcnNlc0FsaWdubWVudFN0YXR1cyBhcmUgdHJ1ZVxuICAgIGlmICh2ZXJzZXNBbGlnbm1lbnRTdGF0dXMpIHtcbiAgICAgIGFsbFZlcnNlc0FsaWduZWQgPSBPYmplY3QudmFsdWVzKHZlcnNlc0FsaWdubWVudFN0YXR1cykuZXZlcnkoYWxpZ25TdGF0dXMgPT4gYWxpZ25TdGF0dXMgPT09IHRydWUpXG4gICAgfVxuXG4gICAgbGV0IGFsaWduSWNvbiA9IG51bGxcbiAgICBsZXQgYWxpZ25CdXR0b25UZXh0ID0gJydcblxuICAgIGlmIChhbGxWZXJzZXNBbGlnbmVkKSB7XG4gICAgICBhbGlnbkljb24gPSA8UnhMaW5rMiBpZD17YHZhbGlkX2ljb25fJHtyZXNvdXJjZUlkfWB9IGNvbG9yPScjQkJCJyAvPlxuICAgICAgYWxpZ25CdXR0b25UZXh0ID0gJ0FsaWdubWVudCBpcyBWYWxpZCdcbiAgICB9IGVsc2Uge1xuICAgICAgYWxpZ25JY29uID0gPFJ4TGlua0JyZWFrMiBpZD17YGludmFsaWRfYWxpZ25tZW50X2ljb25fJHtyZXNvdXJjZUlkfWB9IGNvbG9yPScjMDAwJyAvPlxuICAgICAgYWxpZ25CdXR0b25UZXh0ID0gJ0FsaWdubWVudCBpcyBJbnZhbGlkJ1xuICAgIH1cblxuICAgIGlmIChzZXRXb3JkQWxpZ25lclN0YXR1cyAmJiByZXNvdXJjZUlkICE9PSAnT1JJR0lOQUxfU09VUkNFJykge1xuICAgICAgbmV3SXRlbXMucHVzaChcbiAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICBpZD17YGFsaWdubWVudF9pY29uXyR7cmVzb3VyY2VJZH1gfVxuICAgICAgICAgIGtleT0nY2hlY2tpbmctYnV0dG9uJ1xuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUFsaWduQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgdGl0bGU9e2FsaWduQnV0dG9uVGV4dH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXthbGlnbkJ1dHRvblRleHR9XG4gICAgICAgICAgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHthbGlnbkljb259XG4gICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgIClcbiAgICB9XG5cbiAgICBuZXdJdGVtcy5wdXNoKFxuICAgICAgPD5cbiAgICAgICAgPFVwZGF0ZUJyYW5jaEJ1dHRvbiB7Li4udXBkYXRlQnV0dG9uUHJvcHN9IGlzTG9hZGluZz17aXNMb2FkaW5nIHx8IHN0YXJ0U2F2ZX0vPlxuICAgICAgICA8RXJyb3JEaWFsb2cgdGl0bGU9e2RpYWxvZ1RpdGxlfSBjb250ZW50PXtkaWFsb2dNZXNzYWdlfSBvcGVuPXtpc0Vycm9yRGlhbG9nT3Blbn0gb25DbG9zZT17b25DbG9zZUVycm9yRGlhbG9nfSBpc0xvYWRpbmc9eyBpc0xvYWRpbmcgfHwgc3RhcnRTYXZlIH0gbGluaz17ZGlhbG9nTGlua30gbGlua1Rvb2x0aXA9e2RpYWxvZ0xpbmtUb29sdGlwfSAvPlxuICAgICAgPC8+XG4gICAgKVxuXG4gICAgaWYgKG1lcmdlVG9NYXN0ZXIpIHtcbiAgICAgIG5ld0l0ZW1zLnB1c2goXG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLm1hcmdpbn1cbiAgICAgICAgICBrZXk9J3NoYXJlLXRvLW1hc3RlcidcbiAgICAgICAgICBvbkNsaWNrPXttZXJnZVRvTWFzdGVyRnJvbVVzZXJCcmFuY2h9XG4gICAgICAgICAgdGl0bGU9e21lcmdlVG9NYXN0ZXJUaXRsZX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXttZXJnZVRvTWFzdGVyVGl0bGV9XG4gICAgICAgICAgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHttZXJnZVRvTWFzdGVySGFzQ29uZmxpY3RzID9cbiAgICAgICAgICAgIDxNZFVwZGF0ZURpc2FibGVkIGlkPSdzaGFyZS10by1tYXN0ZXItaWNvbicgY29sb3I9e21lcmdlVG9NYXN0ZXJDb2xvcn0gLz5cbiAgICAgICAgICAgIDpcbiAgICAgICAgICAgIDxGaVNoYXJlIGlkPSdzaGFyZS10by1tYXN0ZXItaWNvbicgY29sb3I9e21lcmdlVG9NYXN0ZXJDb2xvcn0gLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3SXRlbXNcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdGlvbnNDb250ZXh0UHJvdmlkZXJcbiAgICAgIHNlbGVjdGlvbnM9e3NlbGVjdGlvbnN9XG4gICAgICBvblNlbGVjdGlvbnM9e25ld1NlbGVjdGlvbnMgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnb25TZWxlY3Rpb25zJywgbmV3U2VsZWN0aW9ucylcbiAgICAgIH19XG4gICAgICBxdW90ZT17c2VsZWN0ZWRRdW90ZT8ucXVvdGV9XG4gICAgICBvY2N1cnJlbmNlPXtmaXhPY2N1cnJlbmNlKHNlbGVjdGVkUXVvdGU/Lm9jY3VycmVuY2UpfVxuICAgICAgdmVyc2VPYmplY3RzTWFwPXt2ZXJzZU9iamVjdHNNYXB9XG4gICAgPlxuICAgICAgPENhcmRcbiAgICAgICAgaWQ9e2BzY3JpcHR1cmVfY2FyZF8ke2NhcmROdW19YH1cbiAgICAgICAgdGl0bGU9e3NjcmlwdHVyZUxhYmVsfVxuICAgICAgICBzZXR0aW5nc1RpdGxlPXtzY3JpcHR1cmVUaXRsZSArICcgU2V0dGluZ3MnfVxuICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgIGNsYXNzZXM9e2NsYXNzZXN9XG4gICAgICAgIGhlYWRlcnM9e2hlYWRlcnN9XG4gICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICAgIGZvbnRTaXplPXtmb250U2l6ZX1cbiAgICAgICAgaXRlbUluZGV4PXtpdGVtSW5kZXh9XG4gICAgICAgIHNldEZpbHRlcnM9e3NldEZpbHRlcnN9XG4gICAgICAgIHNldEZvbnRTaXplPXtzZXRGb250U2l6ZX1cbiAgICAgICAgc2V0SXRlbUluZGV4PXtzZXRJdGVtSW5kZXh9XG4gICAgICAgIG1hcmtkb3duVmlldz17bWFya2Rvd25WaWV3fVxuICAgICAgICBzZXRNYXJrZG93blZpZXc9e3NldE1hcmtkb3duVmlld31cbiAgICAgICAgZ2V0Q3VzdG9tQ29tcG9uZW50PXtnZXRTY3JpcHR1cmVTZWxlY3Rvcn1cbiAgICAgICAgaGlkZU1hcmtkb3duVG9nZ2xlXG4gICAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgICAgb25NaW5pbWl6ZT17b25NaW5pbWl6ZSA/ICgpID0+IG9uTWluaW1pemUoaWQpIDogbnVsbH1cbiAgICAgICAgZWRpdGFibGU9e2VuYWJsZUVkaXQgfHwgZW5hYmxlQWxpZ25tZW50fVxuICAgICAgICBzYXZlZD17c3RhcnRTYXZlIHx8ICFoYXZlVW5zYXZlZENoYW5nZXN9XG4gICAgICAgIG9uU2F2ZUVkaXQ9eygpID0+IHNldFN0YXRlKHsgc2F2ZUNsaWNrZWQ6IHRydWUgfSl9XG4gICAgICAgIG9uUmVuZGVyVG9vbGJhcj17b25SZW5kZXJUb29sYmFyfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGlkPVwic2NyaXB0dXJlLXBhbmUtbGlzdFwiPlxuICAgICAgICAgIHtyZW5kZXJlZFNjcmlwdHVyZVBhbmVzfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvQ2FyZD5cbiAgICAgIDxWZXJzZVNlbGVjdG9yUG9wdXBcbiAgICAgICAgcmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cbiAgICAgICAgb3Blbj17c2hvd0FsaWdubWVudFBvcHVwfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTdGF0ZSh7IHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2UgfSl9XG4gICAgICAgIHZlcnNlc0ZvclJlZj17dmVyc2VzRm9yUmVmfVxuICAgICAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM9e3ZlcnNlc0FsaWdubWVudFN0YXR1c31cbiAgICAgICAgb25WZXJzZVNlbGVjdD17KHZlcnNlKSA9PiBzZXRTdGF0ZSh7XG4gICAgICAgICAgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogdmVyc2UsXG4gICAgICAgICAgc2hvd0FsaWdubWVudFBvcHVwOiBmYWxzZVxuICAgICAgICB9KX1cbiAgICAgIC8+XG4gICAgPC9TZWxlY3Rpb25zQ29udGV4dFByb3ZpZGVyPlxuICApXG59XG5cblNjcmlwdHVyZUNhcmQucHJvcFR5cGVzID0ge1xuICAvKiogcmVwbyBicmFuY2ggb3IgdGFnIHN1Y2ggYXMgbWFzdGVyICovXG4gIGFwcFJlZjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogYXV0aGVudGljYXRpb24gaW5mbyAqL1xuICBhdXRoZW50aWNhdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIGluZGV4IGZvciBjdXJyZW50IGJvb2sgKGUuZy4gJzAxJyBmb3IgJ2dlbicpKi9cbiAgYm9va0luZGV4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogc2NyaXB0dXJlIGNhcmQgbnVtYmVyICgwIHRvIDIgZm9yIGV4YW1wbGUpICovXG4gIGNhcmROdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgLyoqIENTUyBjbGFzc2VzICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBpZiB0cnVlIHRoZW4gd29yZCBkYXRhIGhvdmVyIGlzIHNob3duICovXG4gIGRpc2FibGVXb3JkUG9wb3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBnZXQgbGFuZ3VhZ2UgZGV0YWlscyAqL1xuICBnZXRMYW5ndWFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIGZ1bmN0aW9uIHRvIGdldCBsYXRlc3QgbGV4aWNvbiBkYXRhICovXG4gIGdldExleGljb25EYXRhOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIG9wdGlvbmFsIHVybCBmb3IgZ3JlZWsgcmVwbyAqL1xuICBncmVla1JlcG9Vcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGhlYnJldyByZXBvICovXG4gIGhlYnJld1JlcG9Vcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBvcHRpb25hbCBodHRwIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBmZXRjaGluZyByZXNvdXJjZXMsIGRlZmF1bHQgaXMgMCAodmVyeSBsb25nIHdhaXQpICovXG4gIGh0dHBDb25maWc6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBodG1sIGlkZW50aWZpZXIgdG8gdXNlIGZvciBjYXJkICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogbWV0aG9kIHRvIGRldGVybWluZSBpZiBOVCBvciBPVCAqL1xuICBpc05UOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogdXNlci1uYW1lICovXG4gIGxvZ2dlZEluVXNlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGZ1bmN0aW9uIHRvIG1pbmltaXplIHRoZSBjYXJkIChvcHRpb25hbCkgKi9cbiAgb25NaW5pbWl6ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBjYWxsYmFjayBpZiBlcnJvciBsb2FkaW5nIHJlc291cmNlLCBwYXJhbWV0ZXIgcmV0dXJuZWQgYXJlOlxuICAgKiAgICAoe3N0cmluZ30gZXJyb3JNZXNzYWdlLCB7Ym9vbGVhbn0gaXNBY2Nlc3NFcnJvciwge29iamVjdH0gcmVzb3VyY2VTdGF0dXMpXG4gICAqICAgICAgLSBpc0FjY2Vzc0Vycm9yIC0gaXMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBlcnJvciB0cnlpbmcgdG8gYWNjZXNzIGZpbGVcbiAgICogICAgICAtIHJlc291cmNlU3RhdHVzIC0gaXMgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCBwcm9ibGVtcyBmZXRjaGluZyByZXNvdXJjZSAqL1xuICBvblJlc291cmNlRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogdGhlIG9yaWdpbmFsIHNjcmlwdHVyZSBib29rT2JqZWN0cyBmb3IgY3VycmVudCBib29rICovXG4gIG9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIHJlZmVyZW5jZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKiogcHJvamVjdElkIChib29rSUQpIHRvIHVzZSAqL1xuICAgIHByb2plY3RJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IGNoYXB0ZXIgbnVtYmVyICovXG4gICAgY2hhcHRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgdmVyc2UgbnVtYmVyICovXG4gICAgdmVyc2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICB9KSxcbiAgLyoqIHJlc291cmNlIG9iamVjdCAqL1xuICByZXNvdXJjZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKiogcmVzb3VyY2UgbGFuZ3VhZ2UgdG8gdXNlICovXG4gICAgbGFuZ3VhZ2VJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXBvIG93bmVyIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG93bmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlc291cmNlSWQgdG8gdXNlIChlLmcuIHVnbnQpICovXG4gICAgcmVzb3VyY2VJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXBvIG93bmVyIGZvciBvcmlnaW5hbCBsYW5ndWFnZXMgc3VjaCBhcyB1bmZvbGRpbmdXb3JkICovXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLFxuICAvKiogcmVzb3VyY2VMaW5rICovXG4gIHJlc291cmNlTGluazogUHJvcFR5cGVzLmFueSxcbiAgLyoqVGhpcyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgcXVvdGUgKi9cbiAgc2VsZWN0ZWRRdW90ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIHNlcnZlciAoZS5nLiAnaHR0cHM6Ly9naXQuZG9vcjQzLm9yZycpICovXG4gIHNlcnZlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIGxvYWRpbmcgc3RhdGUgKi9cbiAgc2V0QXJlUmVzb3VyY2VzTG9hZGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBjYWxsYmFjayB0byB1cGRhdGUgc2F2aW5nIHN0YXRlKi9cbiAgc2V0QXJlUmVzb3VyY2VzU2F2aW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGNhbGxiYWNrIHRvIHJlcG9ydCBjYXJkIGxvYWRpbmcgc3RhdHVzICovXG4gIHNldENhcmRzTG9hZGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBjYWxsYmFjayB0byByZXBvcnQgY2FyZCBzYXZpbmdpbmcgc3RhdHVzICovXG4gIHNldENhcmRzU2F2aW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGZ1bmN0aW9uIHRvIHNldCBzdGF0ZSBpbiBhcHAgdGhhdCB0aGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzICovXG4gIHNldFNhdmVkQ2hhbmdlczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBjYWxsYmFjayB0byB1cGRhdGUgd29yZCBhbGlnbmVyIHN0YXRlICovXG4gIHNldFdvcmRBbGlnbmVyU3RhdHVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHRpdGxlIGZvciBzY3JpcHR1cmUgY2FyZCAqL1xuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGxvY2FsaXphdGlvbiAqL1xuICB0cmFuc2xhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHRoZSBjYXJkJ3MgbWVyZ2Ugc3RhdGUgaW4gYXBwICovXG4gIHVwZGF0ZU1lcmdlU3RhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogdXNlIG1ldGhvZCBmb3IgdXNpbmcgbG9jYWwgc3RvcmFnZSBzcGVjaWZpYyBmb3IgdXNlciAqL1xuICB1c2VVc2VyTG9jYWxTdG9yYWdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufVxuIl19
|
|
1185
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwidXNmbWpzIiwidXNlRWRpdCIsIkljb25CdXR0b24iLCJSeExpbmsyIiwiUnhMaW5rQnJlYWsyIiwiQ2FyZCIsInVzZUNhcmRTdGF0ZSIsInVzZVVzZXJCcmFuY2giLCJ1c2VCcmFuY2hNZXJnZXIiLCJ1c2VDb250ZW50VXBkYXRlUHJvcHMiLCJ1c2VNYXN0ZXJNZXJnZVByb3BzIiwiVXBkYXRlQnJhbmNoQnV0dG9uIiwiRXJyb3JEaWFsb2ciLCJFUlJPUl9TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJBbGlnbm1lbnRIZWxwZXJzIiwiVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyIsImlzRXF1YWwiLCJTY3JpcHR1cmVQYW5lIiwiU2NyaXB0dXJlU2VsZWN0b3IiLCJ1c2VTY3JpcHR1cmVTZXR0aW5ncyIsImdldFJlc291cmNlTGluayIsImdldFJlc291cmNlTWVzc2FnZSIsImdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyIsImlzT3JpZ2luYWxCaWJsZSIsIlRpdGxlIiwiTlRfT1JJR19MQU5HIiwiT1JJR0lOQUxfU09VUkNFIiwiT1RfT1JJR19MQU5HIiwiVmVyc2VTZWxlY3RvclBvcHVwIiwiS0VZX0ZPTlRfU0laRV9CQVNFIiwibGFiZWwiLCJzdHlsZSIsIm1hcmdpblRvcCIsIndpZHRoIiwiU2NyaXB0dXJlQ2FyZCIsImlkIiwiaXNOVCIsInRpdGxlIiwic2VydmVyIiwiYXBwUmVmIiwiY2FyZE51bSIsImNsYXNzZXMiLCJyZXNvdXJjZSIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInJlc291cmNlSWQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJnZXRMYW5ndWFnZSIsInJlZmVyZW5jZSIsInZlcnNlIiwiY2hhcHRlciIsImJvb2tJZCIsInByb2plY3RJZCIsInJlc291cmNlTGluayIsInVzZVVzZXJMb2NhbFN0b3JhZ2UiLCJkaXNhYmxlV29yZFBvcG92ZXIiLCJvblJlc291cmNlRXJyb3IiLCJodHRwQ29uZmlnIiwiZ3JlZWtSZXBvVXJsIiwiaGVicmV3UmVwb1VybCIsImdldExleGljb25EYXRhIiwiZmV0Y2hHbG9zc2VzRm9yVmVyc2UiLCJ0cmFuc2xhdGUiLCJvbk1pbmltaXplIiwibG9nZ2VkSW5Vc2VyIiwiYXV0aGVudGljYXRpb24iLCJzZXRTYXZlZENoYW5nZXMiLCJib29rSW5kZXgiLCJhZGRWZXJzZVJhbmdlIiwic2V0V29yZEFsaWduZXJTdGF0dXMiLCJ1cGRhdGVNZXJnZVN0YXRlIiwic2V0Q2FyZHNMb2FkaW5nVXBkYXRlIiwic2V0Q2FyZHNMb2FkaW5nTWVyZ2UiLCJzZXRDYXJkc1NhdmluZyIsInVzZVN0YXRlIiwiaGF2ZVVuc2F2ZWRDaGFuZ2VzIiwicmVmIiwic2F2ZUNsaWNrZWQiLCJzYXZlQ29udGVudCIsInNoYSIsInN0YXJ0U2F2ZSIsInVybEVycm9yIiwidXNpbmdVc2VyQnJhbmNoIiwidW5zYXZlZENoYW5nZXNMaXN0IiwidmVyc2VzRm9yUmVmIiwic2hvd0FsaWdubWVudFBvcHVwIiwidmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsInZlcnNlc0FsaWdubWVudFN0YXR1cyIsInN0YXRlIiwic2V0U3RhdGVfIiwiZm9udFNpemUiLCJzZXRGb250U2l6ZSIsImlzTlRfIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNhY2hlIiwibWF4QWdlIiwic2V0VXJsRXJyb3IiLCJlcnJvciIsIndob2xlQm9vayIsImlzTmV3VGVzdGFtZW50Iiwic2NyaXB0dXJlQ29uZmlnIiwic2V0U2NyaXB0dXJlIiwic2NyaXB0dXJlU2V0dGluZ3MiLCJzY3JpcHR1cmVWZXJzaW9uSGlzdCIsImZldGNoUmVzcF8iLCJmZXRjaFJlc3BvbnNlIiwicmVwbyIsInJlZmVyZW5jZV8iLCJ1c2VFZmZlY3QiLCJfc2hhIiwiZGF0YSIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiY2FyZFJlc291cmNlSWQiLCJyZWZfIiwiY2FuVXNlRWRpdEJyYW5jaCIsInN1YnN0cmluZyIsImxlbmd0aCIsImNhcmRJZCIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsInVzZXJFZGl0QnJhbmNoTmFtZSIsInVzaW5nVXNlckJyYW5jaF8iLCJhY3Rpb25zIiwic3RhcnRFZGl0QnJhbmNoIiwic3RhcnRFZGl0IiwiZmluaXNoRWRpdCIsIl91c2VCcmFuY2hNZXJnZXIiLCJ1c2VyQnJhbmNoIiwidG9rZW5pZCIsInRva2VuIiwic2hhMSIsIm1lcmdlVG9NYXN0ZXIiLCJtZXJnZVN0YXR1cyIsIm1lcmdlRnJvbU1hc3RlciIsInVwZGF0ZVN0YXR1cyIsInVwZGF0ZUJ1dHRvblByb3BzIiwiaXNTYXZpbmciLCJvblVwZGF0ZSIsInJlbG9hZFJlc291cmNlIiwiY2FsbFVwZGF0ZVVzZXJCcmFuY2giLCJpc0Vycm9yRGlhbG9nT3BlbiIsIm9uQ2xvc2VFcnJvckRpYWxvZyIsImlzVXBkYXRlTG9hZGluZyIsImlzTG9hZGluZyIsImRpYWxvZ01lc3NhZ2UiLCJkaWFsb2dUaXRsZSIsImRpYWxvZ0xpbmsiLCJkaWFsb2dMaW5rVG9vbHRpcCIsIm9uTWVyZ2UiLCJpc01lcmdlTG9hZGluZyIsImNhbGxNZXJnZVVzZXJCcmFuY2giLCJwcmV2Q2FyZHNMb2FkaW5nIiwiZmlsdGVyIiwid29ya2luZ1JlZiIsInNjcmlwdHVyZVRpdGxlIiwid29ya2luZ1JlZl8iLCJyZXNvdXJjZVN0YXR1cyIsIm1lc3NhZ2UiLCJpc0FjY2Vzc0Vycm9yIiwidmVyc2lvbiIsInVwZGF0ZVRpdGxlIiwiZ2V0U2NyaXB0dXJlU2VsZWN0b3IiLCJzY3JpcHR1cmVTZWxlY3Rpb25Db25maWciLCJvbk1lbnVDbG9zZSIsImxhbmd1YWdlSWRfIiwibGFuZ3VhZ2UiLCJkaXJlY3Rpb24iLCJpc0hlYnJldyIsImZvbnRGYWN0b3IiLCJzY2FsZWRGb250U2l6ZSIsIml0ZW1zIiwiaGVhZGVycyIsImZpbHRlcnMiLCJpdGVtSW5kZXgiLCJtYXJrZG93blZpZXciLCJzZXRGaWx0ZXJzIiwic2V0SXRlbUluZGV4Iiwic2V0TWFya2Rvd25WaWV3IiwicmVmU3R5bGUiLCJ1c2VNZW1vIiwiZm9udEZhbWlseSIsIk1hdGgiLCJyb3VuZCIsImNvbnRlbnRTdHlsZSIsInNjcmlwdHVyZUxhYmVsIiwiZGlzYWJsZVdvcmRQb3BvdmVyXyIsInVzaW5nT3JpZ2luYWxCaWJsZSIsInVuZGVmaW5lZCIsImZldGNoR2xvc3NEYXRhRm9yVmVyc2UiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZVJlZiIsIl92ZXJzZU9iamVjdHMiLCJ2ZXJzZURhdGEiLCJjb25jYXQiLCJlbmFibGVFZGl0IiwiZW5hYmxlQWxpZ25tZW50Iiwib3JpZ2luYWxSZXBvVXJsIiwic2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyIsImN1cnJlbnRWZXJzZVJlZiIsIl9zZXRTYXZlZENoYW5nZXMiLCJzb3VyY2VMYW5ndWFnZSIsInRhcmdldExhbmd1YWdlIiwiY3VycmVudEluZGV4Iiwic2F2ZWQiLCJnZXRDaGFuZ2VzIiwiY2xlYXJDaGFuZ2VzIiwiX3Vuc2F2ZWRDaGFuZ2VzTGlzdCIsImhhc093blByb3BlcnR5IiwiX2hhdmVVbnNhdmVkQ2hhbmdlcyIsIk9iamVjdCIsImtleXMiLCJmaW5kUmVmSW5BcnJheSIsImZpbmRJdGVtIiwiY2h1bmtzIiwicmVmTGVuIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJjaHVuayIsImlkeCIsIm5leHRDaGFyIiwiZ2V0Qm9va05hbWUiLCJib29rQ2FwcyIsInRvVXBwZXJDYXNlIiwiZmlsZXBhdGgiLCJjb250ZW50IiwiY29uZmlnIiwidGltZW91dCIsInNlcnZlclRpbWVPdXQiLCJhdXRob3IiLCJicmFuY2giLCJvblNhdmVFZGl0IiwiX3NhdmVFZGl0IiwidGhlbiIsInN1Y2Nlc3MiLCJwcmV2Q2FyZHNTYXZpbmciLCJ1bnNhdmVkQ2FyZEluZGljZXMiLCJjYXJkSW5kZXgiLCJpbmZvIiwibWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtIiwiYmlibGVVc2ZtIiwidXBkYXRlZFZlcnNlT2JqZWN0cyIsIm5ld1VzZm0iLCJjaGFwdGVyQ2h1bmtzIiwic3BsaXQiLCJjaGFwdGVySW5kZXgiLCJjdXJyZW50Q2hhcHRlciIsInZlcnNlQ2h1bmtzIiwidmVyc2VJbmRleCIsIm5ld1ZlcnNlVXNmbSIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJvbGRWZXJzZSIsInZlcnNlTnVtTGVuIiwibmV3Q2hhcHRlciIsImpvaW4iLCJnZXRSZXNwb25zZURhdGEiLCJtZXJnZUZhaWwiLCJwYXJzZUludCIsIm5ld0Jvb2tKc29uIiwibmV3VmVyc2VUZXh0IiwidGFyZ2V0VmVyc2VPYmplY3RzXyIsInVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlIiwidGFyZ2V0VmVyc2VPYmplY3RzIiwidXBkYXRlVmVyc2UiLCJ0b1VTRk0iLCJmb3JjZWROZXdMaW5lcyIsIl92ZXJzZSIsImluY2x1ZGVzIiwidXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzIiwiYWxpZ25lZCIsInJlbmRlcmVkU2NyaXB0dXJlUGFuZXMiLCJtYXAiLCJfY3VycmVudFZlcnNlRGF0YSIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJfcmVmZXJlbmNlIiwiX3NjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWciLCJpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQiLCJoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrIiwib25SZW5kZXJUb29sYmFyIiwibmV3SXRlbXMiLCJhbGxWZXJzZXNBbGlnbmVkIiwidmFsdWVzIiwiZXZlcnkiLCJhbGlnblN0YXR1cyIsImFsaWduSWNvbiIsImFsaWduQnV0dG9uVGV4dCIsInB1c2giLCJjdXJzb3IiLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJmdW5jIiwiaXNSZXF1aXJlZCIsIm51bWJlciIsInNoYXBlIiwib25lT2ZUeXBlIiwiYm9vbCIsIm9iamVjdCIsImFueSIsInNldEFyZVJlc291cmNlc0xvYWRpbmci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QjtBQUNBNU8sRUFBQUEsVUFBVSxFQUFFNUQsU0FBUyxDQUFDOFMsTUFoREU7O0FBaUR4QjtBQUNBalAsRUFBQUEsWUFBWSxFQUFFN0QsU0FBUyxDQUFDdVMsTUFsREE7O0FBbUR4QjtBQUNBek8sRUFBQUEsYUFBYSxFQUFFOUQsU0FBUyxDQUFDdVMsTUFwREQ7O0FBcUR4QjtBQUNBeE8sRUFBQUEsY0FBYyxFQUFFL0QsU0FBUyxDQUFDd1MsSUF0REY7O0FBdUR4QjtBQUNBeE8sRUFBQUEsb0JBQW9CLEVBQUVoRSxTQUFTLENBQUN3UyxJQXhEUjs7QUF5RHhCO0FBQ0F2TyxFQUFBQSxTQUFTLEVBQUVqRSxTQUFTLENBQUN3UyxJQTFERzs7QUEyRHhCO0FBQ0F0TyxFQUFBQSxVQUFVLEVBQUVsRSxTQUFTLENBQUN3UyxJQTVERTs7QUE2RHhCO0FBQ0FyTyxFQUFBQSxZQUFZLEVBQUVuRSxTQUFTLENBQUN1UyxNQTlEQTs7QUErRHhCO0FBQ0FuTyxFQUFBQSxjQUFjLEVBQUVwRSxTQUFTLENBQUM4UyxNQWhFRjs7QUFpRXhCO0FBQ0F6TyxFQUFBQSxlQUFlLEVBQUVyRSxTQUFTLENBQUN3UyxJQWxFSDs7QUFtRXhCO0FBQ0FsTyxFQUFBQSxTQUFTLEVBQUV0RSxTQUFTLENBQUN1UyxNQXBFRzs7QUFxRXhCO0FBQ0FoTyxFQUFBQSxhQUFhLEVBQUV2RSxTQUFTLENBQUN3UyxJQXRFRDs7QUF1RXhCO0FBQ0FoTyxFQUFBQSxvQkFBb0IsRUFBRXhFLFNBQVMsQ0FBQ3dTLElBeEVSOztBQXlFeEI7QUFDQS9OLEVBQUFBLGdCQUFnQixFQUFFekUsU0FBUyxDQUFDd1MsSUExRUo7O0FBMkV4QjtBQUNBUSxFQUFBQSxzQkFBc0IsRUFBRWhULFNBQVMsQ0FBQ3dTLElBNUVWOztBQTZFeEI7QUFDQVMsRUFBQUEscUJBQXFCLEVBQUVqVCxTQUFTLENBQUN3UztBQTlFVCxDQUExQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBjb3JlIH0gZnJvbSAnc2NyaXB0dXJlLXJlc291cmNlcy1yY2wnXG5pbXBvcnQgdXNmbWpzIGZyb20gJ3VzZm0tanMnXG5pbXBvcnQgeyB1c2VFZGl0IH0gZnJvbSAnZ2l0ZWEtcmVhY3QtdG9vbGtpdCdcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgUnhMaW5rMiwgUnhMaW5rQnJlYWsyIH0gZnJvbSAncmVhY3QtaWNvbnMvcngnXG5pbXBvcnQge1xuICBDYXJkLFxuICB1c2VDYXJkU3RhdGUsXG4gIHVzZVVzZXJCcmFuY2gsXG4gIHVzZUJyYW5jaE1lcmdlcixcbiAgdXNlQ29udGVudFVwZGF0ZVByb3BzLFxuICB1c2VNYXN0ZXJNZXJnZVByb3BzLFxuICBVcGRhdGVCcmFuY2hCdXR0b24sXG4gIEVycm9yRGlhbG9nLFxuICBFUlJPUl9TVEFURSxcbiAgTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUixcbn0gZnJvbSAndHJhbnNsYXRpb24taGVscHMtcmNsJ1xuaW1wb3J0IHsgQWxpZ25tZW50SGVscGVycywgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyB9IGZyb20gJ3dvcmQtYWxpZ25lci1yY2wnXG5pbXBvcnQgKiBhcyBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyBTY3JpcHR1cmVQYW5lLCBTY3JpcHR1cmVTZWxlY3RvciB9IGZyb20gJy4uJ1xuaW1wb3J0IHsgdXNlU2NyaXB0dXJlU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9ob29rcy91c2VTY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7XG4gIGdldFJlc291cmNlTGluayxcbiAgZ2V0UmVzb3VyY2VNZXNzYWdlLFxuICBnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3MsXG4gIGlzT3JpZ2luYWxCaWJsZSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvU2NyaXB0dXJlU2V0dGluZ3MnXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL1NjcmlwdHVyZVBhbmUvc3R5bGVkJ1xuaW1wb3J0IHtcbiAgTlRfT1JJR19MQU5HLFxuICBPUklHSU5BTF9TT1VSQ0UsXG4gIE9UX09SSUdfTEFORyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBWZXJzZVNlbGVjdG9yUG9wdXAgfSBmcm9tICcuLi9WZXJzZVNlbGVjdG9yUG9wdXAnXG5cbmNvbnN0IEtFWV9GT05UX1NJWkVfQkFTRSA9ICdzY3JpcHR1cmVQYW5lRm9udFNpemVfJ1xuY29uc3QgbGFiZWwgPSAnVmVyc2lvbidcbmNvbnN0IHN0eWxlID0geyBtYXJnaW5Ub3A6ICcxNnB4Jywgd2lkdGg6ICc1MDBweCcgfVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTY3JpcHR1cmVDYXJkKHtcbiAgaWQsXG4gIGlzTlQsXG4gIHRpdGxlLFxuICBzZXJ2ZXIsXG4gIGFwcFJlZixcbiAgY2FyZE51bSxcbiAgY2xhc3NlcyxcbiAgcmVzb3VyY2U6IHtcbiAgICBvd25lcixcbiAgICBsYW5ndWFnZUlkLFxuICAgIHJlc291cmNlSWQsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICB9LFxuICBnZXRMYW5ndWFnZSxcbiAgcmVmZXJlbmNlOiB7XG4gICAgdmVyc2UsXG4gICAgY2hhcHRlcixcbiAgICBwcm9qZWN0SWQ6IGJvb2tJZCxcbiAgfSxcbiAgcmVzb3VyY2VMaW5rLFxuICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICBkaXNhYmxlV29yZFBvcG92ZXIsXG4gIG9uUmVzb3VyY2VFcnJvcixcbiAgaHR0cENvbmZpZyxcbiAgZ3JlZWtSZXBvVXJsLFxuICBoZWJyZXdSZXBvVXJsLFxuICBnZXRMZXhpY29uRGF0YSxcbiAgZmV0Y2hHbG9zc2VzRm9yVmVyc2UsXG4gIHRyYW5zbGF0ZSxcbiAgb25NaW5pbWl6ZSxcbiAgbG9nZ2VkSW5Vc2VyLFxuICBhdXRoZW50aWNhdGlvbixcbiAgc2V0U2F2ZWRDaGFuZ2VzLFxuICBib29rSW5kZXgsXG4gIGFkZFZlcnNlUmFuZ2UsXG4gIHNldFdvcmRBbGlnbmVyU3RhdHVzLFxuICB1cGRhdGVNZXJnZVN0YXRlLFxuICBzZXRDYXJkc0xvYWRpbmdVcGRhdGUsXG4gIHNldENhcmRzTG9hZGluZ01lcmdlLFxuICBzZXRDYXJkc1NhdmluZ1xufSkge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICByZWY6IGFwcFJlZixcbiAgICBzYXZlQ2xpY2tlZDogZmFsc2UsXG4gICAgc2F2ZUNvbnRlbnQ6IG51bGwsXG4gICAgc2hhOiBudWxsLFxuICAgIHN0YXJ0U2F2ZTogZmFsc2UsXG4gICAgdXJsRXJyb3I6IG51bGwsXG4gICAgdXNpbmdVc2VyQnJhbmNoOiBmYWxzZSxcbiAgICB1bnNhdmVkQ2hhbmdlc0xpc3Q6IHt9LFxuICAgIHZlcnNlc0ZvclJlZjogbnVsbCxcbiAgICBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlLFxuICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IG51bGwsXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiBudWxsLFxuICB9KVxuICBjb25zdCB7XG4gICAgcmVmLFxuICAgIHNhdmVDbGlja2VkLFxuICAgIHNhdmVDb250ZW50LFxuICAgIHNoYSxcbiAgICBzdGFydFNhdmUsXG4gICAgdXJsRXJyb3IsXG4gICAgdXNpbmdVc2VyQnJhbmNoLFxuICAgIHVuc2F2ZWRDaGFuZ2VzTGlzdCxcbiAgICBoYXZlVW5zYXZlZENoYW5nZXMsXG4gICAgdmVyc2VzRm9yUmVmLFxuICAgIHNob3dBbGlnbm1lbnRQb3B1cCxcbiAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LFxuICAgIHZlcnNlc0FsaWdubWVudFN0YXR1cyxcbiAgfSA9IHN0YXRlXG5cbiAgY29uc3QgW2ZvbnRTaXplLCBzZXRGb250U2l6ZV0gPSB1c2VVc2VyTG9jYWxTdG9yYWdlKEtFWV9GT05UX1NJWkVfQkFTRSArIGNhcmROdW0sIDEwMClcbiAgY29uc3QgaXNOVF8gPSBpc05UKGJvb2tJZClcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIGlmICh1c2luZ1VzZXJCcmFuY2gpIHtcbiAgICBodHRwQ29uZmlnID0geyAuLi5odHRwQ29uZmlnLCBjYWNoZTogeyBtYXhBZ2U6IDAgfSB9IC8vIGRpc2FibGUgaHR0cCBjYWNoaW5nXG4gIH1cblxuICBjb25zdCB7XG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNldFNjcmlwdHVyZSxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzY3JpcHR1cmVWZXJzaW9uSGlzdCxcbiAgfSA9IHVzZVNjcmlwdHVyZVNldHRpbmdzKHtcbiAgICBpc05ULFxuICAgIHRpdGxlLFxuICAgIHZlcnNlLFxuICAgIG93bmVyLFxuICAgIGJvb2tJZCxcbiAgICBhcHBSZWY6IHJlZixcbiAgICBzZXJ2ZXIsXG4gICAgY2FyZE51bSxcbiAgICBjaGFwdGVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByZXNvdXJjZUxpbmssXG4gICAgdXNlVXNlckxvY2FsU3RvcmFnZSxcbiAgICBkaXNhYmxlV29yZFBvcG92ZXIsXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyLFxuICAgIHNldFVybEVycm9yOiAoZXJyb3IpID0+IHNldFN0YXRlKHsgdXJsRXJyb3I6IGVycm9yIH0pLFxuICAgIGh0dHBDb25maWcsXG4gICAgZ3JlZWtSZXBvVXJsLFxuICAgIGhlYnJld1JlcG9VcmwsXG4gICAgd2hvbGVCb29rOiB0cnVlLFxuICB9KVxuXG4gIGNvbnN0IGZldGNoUmVzcF8gPSBzY3JpcHR1cmVDb25maWc/LmZldGNoUmVzcG9uc2VcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCByZXBvID0gYCR7c2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZH1fJHtzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5wcm9qZWN0SWR9YFxuICBjb25zdCByZWZlcmVuY2VfID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2UgfHwgbnVsbFxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIGdldCB0aGUgX3NoYSBmcm9tIGxhc3Qgc2NyaXB0dXJlIGRvd25sb2FkXG4gICAgY29uc3QgX3NoYSA9IGZldGNoUmVzcF8/LmRhdGE/LnNoYSB8fCBudWxsXG4gICAgY29uc29sZS5sb2coYGZvciAke0pTT04uc3RyaW5naWZ5KHJlZmVyZW5jZV8pfSBuZXcgc2hhIGlzICR7X3NoYX1gKVxuXG4gICAgaWYgKF9zaGEgIT09IHNoYSkge1xuICAgICAgc2V0U3RhdGUoeyBzaGE6IF9zaGEgfSlcbiAgICB9XG4gIH0sIFtmZXRjaFJlc3BfXSlcblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGNhcmRSZXNvdXJjZUlkID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkIHx8IHJlc291cmNlSWRcbiAgLy8gQHRzLWlnbm9yZVxuICBsZXQgcmVmXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnJlZiB8fCBhcHBSZWZcbiAgY29uc3QgY2FuVXNlRWRpdEJyYW5jaCA9IGxvZ2dlZEluVXNlciAmJiBhdXRoZW50aWNhdGlvbiAmJlxuICAgIChyZXNvdXJjZUlkICE9PSBPUklHSU5BTF9TT1VSQ0UpICYmXG4gICAgKChyZWZfID09PSAnbWFzdGVyJykgfHwgKHJlZl8uc3Vic3RyaW5nKDAsIGxvZ2dlZEluVXNlci5sZW5ndGgpID09PSBsb2dnZWRJblVzZXIpICkgLy8gbm90IHRhZ1xuXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgICAgdXNlckVkaXRCcmFuY2hOYW1lLFxuICAgICAgdXNpbmdVc2VyQnJhbmNoOiB1c2luZ1VzZXJCcmFuY2hfLFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgc3RhcnRFZGl0OiBzdGFydEVkaXRCcmFuY2gsXG4gICAgICBmaW5pc2hFZGl0LFxuICAgIH0sXG4gIH0gPSB1c2VVc2VyQnJhbmNoKHtcbiAgICBvd25lcixcbiAgICBzZXJ2ZXIsXG4gICAgYXBwUmVmLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgY2FyZElkOiBpZCxcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgIG9uUmVzb3VyY2VFcnJvcixcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICB9KVxuXG4gIGNvbnN0IF91c2VCcmFuY2hNZXJnZXIgPSB1c2VCcmFuY2hNZXJnZXIoeyBzZXJ2ZXIsIG93bmVyLCByZXBvLCB1c2VyQnJhbmNoOiB1c2VyRWRpdEJyYW5jaE5hbWUsIHRva2VuaWQ6IGF1dGhlbnRpY2F0aW9uPy50b2tlbj8uc2hhMSB9KTtcbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBtZXJnZVN0YXR1czogbWVyZ2VUb01hc3RlcixcbiAgICAgIHVwZGF0ZVN0YXR1czogbWVyZ2VGcm9tTWFzdGVyLFxuICAgIH0sXG4gIH0gPSBfdXNlQnJhbmNoTWVyZ2VyO1xuXG4gIGNvbnN0IHVwZGF0ZUJ1dHRvblByb3BzID0gdXNlQ29udGVudFVwZGF0ZVByb3BzKHtcbiAgICBpc1NhdmluZzogc3RhcnRTYXZlLFxuICAgIHVzZUJyYW5jaE1lcmdlcjogX3VzZUJyYW5jaE1lcmdlcixcbiAgICBvblVwZGF0ZTogc2NyaXB0dXJlQ29uZmlnPy5yZWxvYWRSZXNvdXJjZVxuICB9KTtcbiAgY29uc3Qge1xuICAgIGNhbGxVcGRhdGVVc2VyQnJhbmNoLFxuICAgIGlzRXJyb3JEaWFsb2dPcGVuLFxuICAgIG9uQ2xvc2VFcnJvckRpYWxvZyxcbiAgICBpc0xvYWRpbmc6IGlzVXBkYXRlTG9hZGluZyxcbiAgICBkaWFsb2dNZXNzYWdlLFxuICAgIGRpYWxvZ1RpdGxlLFxuICAgIGRpYWxvZ0xpbmssXG4gICAgZGlhbG9nTGlua1Rvb2x0aXBcbiAgfSA9IHVwZGF0ZUJ1dHRvblByb3BzO1xuXG4gIGNvbnN0IG9uTWVyZ2UgPSAoKSA9PiB7XG4gICAgZmluaXNoRWRpdCgpXG4gICAgc2V0U3RhdGUoeyByZWY6IGFwcFJlZiB9KVxuICAgIC8vIHNjcmlwdHVyZUNvbmZpZz8ucmVsb2FkUmVzb3VyY2UoKVxuICB9XG5cbiAgY29uc3QgeyBpc0xvYWRpbmc6IGlzTWVyZ2VMb2FkaW5nLCBjYWxsTWVyZ2VVc2VyQnJhbmNoIH0gPSB1c2VNYXN0ZXJNZXJnZVByb3BzKHtcbiAgICBpc1NhdmluZzogc3RhcnRTYXZlLFxuICAgIHVzZUJyYW5jaE1lcmdlcjogX3VzZUJyYW5jaE1lcmdlcixcbiAgICBvbk1lcmdlLFxuICB9KVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNhcmRSZXNvdXJjZUlkKSB7XG4gICAgICB1cGRhdGVNZXJnZVN0YXRlICYmIHVwZGF0ZU1lcmdlU3RhdGUoXG4gICAgICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgICAgICBtZXJnZUZyb21NYXN0ZXIsXG4gICAgICAgIG1lcmdlVG9NYXN0ZXIsXG4gICAgICAgIGNhbGxVcGRhdGVVc2VyQnJhbmNoLFxuICAgICAgICBjYWxsTWVyZ2VVc2VyQnJhbmNoLFxuICAgICAgKVxuICAgIH1cbiAgfSxbY2FyZFJlc291cmNlSWQsIG1lcmdlRnJvbU1hc3RlciwgbWVyZ2VUb01hc3Rlcl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNVcGRhdGVMb2FkaW5nKSB7XG4gICAgICBzZXRDYXJkc0xvYWRpbmdVcGRhdGU/LihwcmV2Q2FyZHNMb2FkaW5nID0+IFsuLi5wcmV2Q2FyZHNMb2FkaW5nLCBjYXJkUmVzb3VyY2VJZF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldENhcmRzTG9hZGluZ1VwZGF0ZT8uKHByZXZDYXJkc0xvYWRpbmcgPT4gcHJldkNhcmRzTG9hZGluZy5maWx0ZXIoY2FyZElkID0+IGNhcmRJZCAhPT0gY2FyZFJlc291cmNlSWQpKVxuICAgIH1cbiAgfSwgW2lzVXBkYXRlTG9hZGluZ10pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNNZXJnZUxvYWRpbmcpIHtcbiAgICAgIHNldENhcmRzTG9hZGluZ01lcmdlPy4ocHJldkNhcmRzTG9hZGluZyA9PiBbLi4ucHJldkNhcmRzTG9hZGluZywgY2FyZFJlc291cmNlSWRdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRDYXJkc0xvYWRpbmdNZXJnZT8uKHByZXZDYXJkc0xvYWRpbmcgPT4gcHJldkNhcmRzTG9hZGluZy5maWx0ZXIoY2FyZElkID0+IGNhcmRJZCAhPT0gY2FyZFJlc291cmNlSWQpKVxuICAgIH1cbiAgfSwgW2lzTWVyZ2VMb2FkaW5nXSlcblxuICBjb25zdCB3b3JraW5nUmVmID0gY2FuVXNlRWRpdEJyYW5jaCA/IHdvcmtpbmdSZXNvdXJjZUJyYW5jaCA6IGFwcFJlZlxuICBsZXQgc2NyaXB0dXJlVGl0bGVcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZWxlY3QgY29ycmVjdCB3b3JraW5nIHJlZiAtIGNvdWxkIGJlIG1hc3RlciwgdXNlciBicmFuY2gsIG9yIHJlbGVhc2VcbiAgICBpZiAodXNpbmdVc2VyQnJhbmNoXyAhPT0gdXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgICBzZXRTdGF0ZSh7IHVzaW5nVXNlckJyYW5jaDogdXNpbmdVc2VyQnJhbmNoXyB9KVxuICAgIH1cbiAgfSwgW3VzaW5nVXNlckJyYW5jaF8sIHVzaW5nVXNlckJyYW5jaF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2VsZWN0IGNvcnJlY3Qgd29ya2luZyByZWYgLSBjb3VsZCBiZSBtYXN0ZXIsIHVzZXIgYnJhbmNoLCBvciByZWxlYXNlXG4gICAgbGV0IHdvcmtpbmdSZWZfID0gd29ya2luZ1JlZiB8fCBhcHBSZWZcblxuICAgIGlmIChyZWYgIT09IHdvcmtpbmdSZWZfKSB7XG4gICAgICBzZXRTdGF0ZSh7IHJlZjogd29ya2luZ1JlZl8gfSlcbiAgICB9XG4gIH0sIFt3b3JraW5nUmVmLCByZWYsIGFwcFJlZl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gdXBkYXRlIGRpc3BsYXkgc3RhdHVzIGlmIGVycm9yXG4gICAgY29uc3QgZXJyb3IgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdXG5cbiAgICBpZiAoZXJyb3IpIHsgLy8gaWYgZXJyb3Igd2FzIGZvdW5kIGRvIGNhbGxiYWNrXG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXNcbiAgICAgIGNvbnN0IHJlc291cmNlTGluayA9IGdldFJlc291cmNlTGluayhzY3JpcHR1cmVDb25maWcpXG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2V0UmVzb3VyY2VNZXNzYWdlKHJlc291cmNlU3RhdHVzLCBzZXJ2ZXIsIHJlc291cmNlTGluaywgaXNOVF8pXG4gICAgICBjb25zdCBpc0FjY2Vzc0Vycm9yID0gcmVzb3VyY2VTdGF0dXNbTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUl1cbiAgICAgIG9uUmVzb3VyY2VFcnJvciAmJiBvblJlc291cmNlRXJyb3IobWVzc2FnZSwgaXNBY2Nlc3NFcnJvciwgcmVzb3VyY2VTdGF0dXMpXG4gICAgfVxuICB9LCBbc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXV0pXG5cbiAgaWYgKHNjcmlwdHVyZUNvbmZpZy50aXRsZSAmJiBzY3JpcHR1cmVDb25maWcudmVyc2lvbikge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYCR7c2NyaXB0dXJlQ29uZmlnLnRpdGxlfSB2JHtzY3JpcHR1cmVDb25maWcudmVyc2lvbn1gXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QudXBkYXRlVGl0bGUoc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluaywgc2NyaXB0dXJlVGl0bGUpXG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0dXJlVGl0bGUgPSBgVGl0bGUgbWlzc2luZyBmcm9tIHByb2plY3QgbWFuaWZlc3RgXG4gIH1cblxuICAvKiogRHluYW1pY2FsbHkgY3JlYXRlcyB0aGUgc2NyaXB0dXJlIHNlbGVjdGlvbiBkcm9wZG93biB0byBiZSBpbnNlcnRlZCBpbnRvIGNhcmQgc2V0dGluZ3MgKi9cbiAgZnVuY3Rpb24gZ2V0U2NyaXB0dXJlU2VsZWN0b3IoKSB7XG4gICAgY29uc3Qgc2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnID0gZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzKHtcbiAgICAgIGxhYmVsLFxuICAgICAgcmVzb3VyY2VMaW5rOiBzY3JpcHR1cmVDb25maWcucmVzb3VyY2VMaW5rLFxuICAgICAgc2V0U2NyaXB0dXJlLFxuICAgICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gICAgfSlcblxuICAgIHJldHVybiA8U2NyaXB0dXJlU2VsZWN0b3Igey4uLnNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZ30gc3R5bGU9e3N0eWxlfSBlcnJvck1lc3NhZ2U9e3VybEVycm9yfSAvPlxuICB9XG5cbiAgZnVuY3Rpb24gb25NZW51Q2xvc2UoKSB7XG4gICAgLy8gY29uc29sZS5sb2coYG9uTWVudUNsb3NlKClgKVxuICAgIHNldFN0YXRlKHsgdXJsRXJyb3I6IG51bGwgfSlcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbGFuZ3VhZ2VJZF8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkXG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoeyBsYW5ndWFnZUlkOiBsYW5ndWFnZUlkXyB9KVxuICBjb25zdCBkaXJlY3Rpb24gPSAobGFuZ3VhZ2U/LmRpcmVjdGlvbikgfHwgJ2x0cidcbiAgY29uc3QgcmVmZXJlbmNlID0geyAuLi5zY3JpcHR1cmVDb25maWcucmVmZXJlbmNlIH1cblxuICBjb25zdCBpc0hlYnJldyA9IChsYW5ndWFnZUlkXyA9PT0gJ2hibycpXG4gIGNvbnN0IGZvbnRGYWN0b3IgPSBpc0hlYnJldyA/IDEuNCA6IDEgLy8gd2UgYXV0b21hdGljYWxseSBzY2FsZSB1cCBmb250IHNpemUgZm9yIEhlYnJld1xuICBjb25zdCBzY2FsZWRGb250U2l6ZSA9IGZvbnRTaXplICogZm9udEZhY3RvclxuXG4gIGNvbnN0IGl0ZW1zID0gbnVsbFxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGhlYWRlcnMsIGZpbHRlcnMsIGl0ZW1JbmRleCwgbWFya2Rvd25WaWV3LFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgc2V0RmlsdGVycywgc2V0SXRlbUluZGV4LCBzZXRNYXJrZG93blZpZXcsXG4gICAgfSxcbiAgfSA9IHVzZUNhcmRTdGF0ZSh7IGl0ZW1zIH0pXG5cbiAgY29uc3QgcmVmU3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke01hdGgucm91bmQoc2NhbGVkRm9udFNpemUgKiAwLjkpfSVgLFxuICB9KSwgW3NjYWxlZEZvbnRTaXplXSlcblxuICBjb25zdCBjb250ZW50U3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke3NjYWxlZEZvbnRTaXplfSVgLFxuICB9KSwgW3NjYWxlZEZvbnRTaXplXSlcblxuICBjb25zdCBzY3JpcHR1cmVMYWJlbCA9IDxUaXRsZT57c2NyaXB0dXJlVGl0bGV9PC9UaXRsZT5cbiAgbGV0IGRpc2FibGVXb3JkUG9wb3Zlcl8gPSBkaXNhYmxlV29yZFBvcG92ZXJcbiAgY29uc3QgdXNpbmdPcmlnaW5hbEJpYmxlID0gaXNPcmlnaW5hbEJpYmxlKHNjcmlwdHVyZUNvbmZpZ1sncmVzb3VyY2UnXT8ucHJvamVjdElkKVxuXG4gIGlmIChkaXNhYmxlV29yZFBvcG92ZXIgPT09IHVuZGVmaW5lZCkgeyAvLyBpZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGRldGVybWluZSBpZiBvcmlnaW5hbCBsYW5ndWFnZSByZXNvdXJjZVxuICAgIGRpc2FibGVXb3JkUG9wb3Zlcl8gPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBwcmUtY2FjaGUgZ2xvc3NlcyBvbiB2ZXJzZSBjaGFuZ2VcbiAgICBjb25zdCBmZXRjaEdsb3NzRGF0YUZvclZlcnNlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHZlcnNlT2JqZWN0cyA9IFtdXG5cbiAgICAgIC8vIGdldCB2ZXJzZSBvYmplY3RzIG9mIGFsbCB0aGUgdmVyc2VzXG4gICAgICBmb3IgKGNvbnN0IHZlcnNlUmVmIG9mIHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmIHx8IFtdKSB7XG4gICAgICAgIGNvbnN0IF92ZXJzZU9iamVjdHMgPSB2ZXJzZVJlZj8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHNcbiAgICAgICAgdmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzLmNvbmNhdChfdmVyc2VPYmplY3RzKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWRpc2FibGVXb3JkUG9wb3ZlciAmJiB2ZXJzZU9iamVjdHM/Lmxlbmd0aCAmJiBmZXRjaEdsb3NzZXNGb3JWZXJzZSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgICAgICBhd2FpdCBmZXRjaEdsb3NzZXNGb3JWZXJzZSh2ZXJzZU9iamVjdHMsIGxhbmd1YWdlSWRfKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1c2luZ09yaWdpbmFsQmlibGUpIHtcbiAgICAgIGZldGNoR2xvc3NEYXRhRm9yVmVyc2UoKVxuICAgIH1cbiAgfSwgWyB2ZXJzZXNGb3JSZWYsIGxhbmd1YWdlSWRfIF0pXG5cbiAgY29uc3QgZW5hYmxlRWRpdCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3QgZW5hYmxlQWxpZ25tZW50ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBvcmlnaW5hbFJlcG9VcmwgPSBpc05ld1Rlc3RhbWVudCA/IGdyZWVrUmVwb1VybCA6IGhlYnJld1JlcG9VcmxcbiAgY29uc3Qgc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICBhdXRoZW50aWNhdGlvbjogY2FuVXNlRWRpdEJyYW5jaCA/IGF1dGhlbnRpY2F0aW9uIDogbnVsbCxcbiAgICBib29rSW5kZXgsXG4gICAgY3VycmVudFZlcnNlUmVmOiByZWZlcmVuY2UsXG4gICAgZW5hYmxlRWRpdCxcbiAgICBlbmFibGVBbGlnbm1lbnQsXG4gICAgaHR0cENvbmZpZyxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgbG9nZ2VkSW5Vc2VyOiBjYW5Vc2VFZGl0QnJhbmNoID8gbG9nZ2VkSW5Vc2VyIDogbnVsbCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9yaWdpbmFsUmVwb1VybCxcbiAgICBzY3JpcHR1cmVDb25maWcsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc3RhcnRFZGl0QnJhbmNoLFxuICAgIHNldFNhdmVkQ2hhbmdlczogX3NldFNhdmVkQ2hhbmdlcyxcbiAgICBzb3VyY2VMYW5ndWFnZTogaXNOVF8gPyBOVF9PUklHX0xBTkcgOiBPVF9PUklHX0xBTkcsXG4gICAgdGFyZ2V0TGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgIHRpdGxlOiBzY3JpcHR1cmVUaXRsZSxcbiAgICB3b3JraW5nUmVzb3VyY2VCcmFuY2g6IHJlZixcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgc2NyaXB0dXJlIHBhbmUgaGFzIGEgY2hhbmdlIGluIHNhdmUgc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRJbmRleFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNhdmVkXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGdldENoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB1c2VyIGNsaWNrcyBzYXZlIGJ1dHRvblxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjbGVhckNoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBzYXZlIGhhcyBjb21wbGV0ZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvZiB3b3JkIGFsaWdubWVudC9lZGl0XG4gICAqL1xuICBmdW5jdGlvbiBfc2V0U2F2ZWRDaGFuZ2VzKGN1cnJlbnRJbmRleCwgc2F2ZWQsIHsgZ2V0Q2hhbmdlcyA9IG51bGwsIGNsZWFyQ2hhbmdlcyA9IG51bGwsIHN0YXRlID0gbnVsbCB9KSB7XG4gICAgY29uc3QgX3Vuc2F2ZWRDaGFuZ2VzTGlzdCA9IHsgLi4udW5zYXZlZENoYW5nZXNMaXN0IH1cblxuICAgIGlmIChzYXZlZCkge1xuICAgICAgaWYgKF91bnNhdmVkQ2hhbmdlc0xpc3QuaGFzT3duUHJvcGVydHkoY3VycmVudEluZGV4KSkge1xuICAgICAgICBkZWxldGUgX3Vuc2F2ZWRDaGFuZ2VzTGlzdFtjdXJyZW50SW5kZXhdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF91bnNhdmVkQ2hhbmdlc0xpc3RbY3VycmVudEluZGV4XSA9IHsgZ2V0Q2hhbmdlcywgY2xlYXJDaGFuZ2VzLCBzdGF0ZSB9IC8vIHVwZGF0ZSB3aXRoIGxhdGVzdFxuICAgIH1cblxuICAgIGNvbnN0IF9oYXZlVW5zYXZlZENoYW5nZXMgPSAhIU9iamVjdC5rZXlzKF91bnNhdmVkQ2hhbmdlc0xpc3QpLmxlbmd0aFxuXG4gICAgaWYgKGhhdmVVbnNhdmVkQ2hhbmdlcyAhPSBfaGF2ZVVuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKHJlc291cmNlSWQsICFfaGF2ZVVuc2F2ZWRDaGFuZ2VzKVxuICAgICAgc2V0U3RhdGUoeyBoYXZlVW5zYXZlZENoYW5nZXM6IF9oYXZlVW5zYXZlZENoYW5nZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoX3Vuc2F2ZWRDaGFuZ2VzTGlzdCwgdW5zYXZlZENoYW5nZXNMaXN0KSkge1xuICAgICAgc2V0U3RhdGUoeyB1bnNhdmVkQ2hhbmdlc0xpc3Q6IF91bnNhdmVkQ2hhbmdlc0xpc3QgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2VhcmNoIGNoYXB0ZXIgb3IgdmVyc2UgY2h1bmsgdG8gbGluZSB0aGF0IHN0YXJ0cyB3aXRoIGZpbmRJdGVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmluZEl0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gY2h1bmtzXG4gICAqL1xuICBmdW5jdGlvbiBmaW5kUmVmSW5BcnJheShmaW5kSXRlbSwgY2h1bmtzKSB7XG4gICAgY29uc3QgcmVmXyA9IGZpbmRJdGVtICsgJydcbiAgICBjb25zdCByZWZMZW4gPSByZWZfLmxlbmd0aFxuICAgIGNvbnN0IGluZGV4ID0gY2h1bmtzLmZpbmRJbmRleCgoY2h1bmssIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgaWYgKGNodW5rLnN1YnN0cmluZygwLCByZWZMZW4pID09PSByZWZfKSB7XG4gICAgICAgICAgY29uc3QgbmV4dENoYXIgPSBjaHVua1tyZWZMZW5dXG5cbiAgICAgICAgICBpZiAoKG5leHRDaGFyID4gJzknKSB8fCAobmV4dENoYXIgPCAnMCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaW5kZXhcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJvb2tOYW1lKCkge1xuICAgIGNvbnN0IGJvb2tDYXBzID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LnByb2plY3RJZCA/IHNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UucHJvamVjdElkLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIHJldHVybiBgJHtib29rSW5kZXh9LSR7Ym9va0NhcHN9LnVzZm1gXG4gIH1cblxuICBjb25zdCBmaWxlcGF0aCA9IGdldEJvb2tOYW1lKClcblxuICAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIGVkaXQgc3RhdGVcbiAgY29uc3QgeyBvblNhdmVFZGl0IH0gPSB1c2VFZGl0KHtcbiAgICBzaGEsXG4gICAgb3duZXIsXG4gICAgY29udGVudDogc2F2ZUNvbnRlbnQsXG4gICAgY29uZmlnOiB7XG4gICAgICBjYWNoZTogeyBtYXhBZ2U6IDAgfSxcbiAgICAgIC4uLmF1dGhlbnRpY2F0aW9uPy5jb25maWcsXG4gICAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGltZW91dDogaHR0cENvbmZpZz8uc2VydmVyVGltZU91dCB8fCBodHRwQ29uZmlnPy50aW1lb3V0IHx8IDUwMDAsXG4gICAgfSxcbiAgICBhdXRob3I6IGxvZ2dlZEluVXNlcixcbiAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgIGJyYW5jaDogd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIGZpbGVwYXRoLFxuICAgIHJlcG8sXG4gIH0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiBzdGFydFNhdmUgZ29lcyB0cnVlLCBzYXZlIGVkaXRzIHRvIHVzZXIgYnJhbmNoIGFuZCB0aGVuIGNsZWFyIHN0YXJ0U2F2ZVxuICAgIGNvbnN0IF9zYXZlRWRpdCA9IGFzeW5jICgpID0+IHsgLy8gYmVnaW4gdXBsb2FkaW5nIG5ldyBVU0ZNXG4gICAgICBsZXQgYnJhbmNoID0gKHdvcmtpbmdSZXNvdXJjZUJyYW5jaCAhPT0gJ21hc3RlcicpID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICghYnJhbmNoKSB7XG4gICAgICAgIGJyYW5jaCA9IGF3YWl0IHN0YXJ0RWRpdEJyYW5jaCgpIC8vIG1ha2Ugc3VyZSB1c2VyIGJyYW5jaCBleGlzdHMgYW5kIGdldCBuYW1lXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG9uU2F2ZUVkaXQoYnJhbmNoKS50aGVuKChzdWNjZXNzKSA9PiB7IC8vIHB1c2ggY2hhbmdlZCB0byBzZXJ2ZXJcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZlIHNjcmlwdHVyZSBlZGl0cyBzdWNjZXNzYClcbiAgICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gcHJldkNhcmRzU2F2aW5nLmZpbHRlcihjYXJkSWQgPT4gY2FyZElkICE9PSBjYXJkUmVzb3VyY2VJZCkpXG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgc3RhcnRTYXZlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgY29uc3QgdW5zYXZlZENhcmRJbmRpY2VzID0gT2JqZWN0LmtleXModW5zYXZlZENoYW5nZXNMaXN0KVxuXG4gICAgICAgICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBjbGVhckNoYW5nZXMgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkSW5kZXhdXG4gICAgICAgICAgICAgIGNsZWFyQ2hhbmdlcyAmJiBjbGVhckNoYW5nZXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUuaW5mbygnc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBSZWxvYWRpbmcgcmVzb3VyY2UnKVxuICAgICAgICAgIHNjcmlwdHVyZUNvbmZpZz8ucmVsb2FkUmVzb3VyY2UoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIGNoYW5nZWQgc2NyaXB0dXJlIGZhaWxlZCcpXG4gICAgICAgICAgc2V0Q2FyZHNTYXZpbmcocHJldkNhcmRzU2F2aW5nID0+IHByZXZDYXJkc1NhdmluZy5maWx0ZXIoY2FyZElkID0+IGNhcmRJZCAhPT0gY2FyZFJlc291cmNlSWQpKVxuICAgICAgICAgIHNldFN0YXRlKHsgc3RhcnRTYXZlOiBmYWxzZSB9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChzdGFydFNhdmUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBjYWxsaW5nIF9zYXZlRWRpdCgpYClcbiAgICAgIHNldENhcmRzU2F2aW5nKHByZXZDYXJkc1NhdmluZyA9PiBbLi4ucHJldkNhcmRzU2F2aW5nLCBjYXJkUmVzb3VyY2VJZF0pXG4gICAgICBfc2F2ZUVkaXQoKVxuICAgIH1cbiAgfSwgW3N0YXJ0U2F2ZV0pXG5cbiAgLyoqXG4gICAqIGNvbnZlcnQgdXBkYXRlZFZlcnNlT2JqZWN0cyB0byBVU0ZNIGFuZCBtZXJnZSBpbnRvIHRoZSBiaWJsZVVzZm1cbiAgICogQHBhcmFtIHtzdHJpbmd9IGJpYmxlVXNmbSAtIFVTRk0gb2YgYmlibGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZiAtIHJlZmVyZW5jZSBvZiB2ZXJzZSB0byBtZXJnZSBpblxuICAgKiBAcGFyYW0ge29iamVjdFtdfSB1cGRhdGVkVmVyc2VPYmplY3RzIC0gbmV3IHZlcnNlIGluIHZlcnNlT2JqZWN0IGZvcm1hdFxuICAgKiBAcGFyYW0ge251bWJlcn0gY2FyZE51bVxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtKGJpYmxlVXNmbSwgcmVmLCB1cGRhdGVkVmVyc2VPYmplY3RzLCBjYXJkTnVtOiBudW1iZXIpIHtcbiAgICBsZXQgbmV3VXNmbVxuICAgIGNvbnN0IGNoYXB0ZXJDaHVua3MgPSBiaWJsZVVzZm0/LnNwbGl0KCdcXFxcYyAnKVxuICAgIGNvbnN0IGNoYXB0ZXJJbmRleCA9IGZpbmRSZWZJbkFycmF5KHJlZj8uY2hhcHRlciwgY2hhcHRlckNodW5rcylcblxuICAgIGlmIChjaGFwdGVySW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgY3VycmVudENoYXB0ZXIgPSBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF1cbiAgICAgIGNvbnN0IHZlcnNlQ2h1bmtzID0gY3VycmVudENoYXB0ZXIuc3BsaXQoJ1xcXFx2ICcpXG4gICAgICBjb25zdCB2ZXJzZUluZGV4ID0gZmluZFJlZkluQXJyYXkocmVmPy52ZXJzZSwgdmVyc2VDaHVua3MpXG5cbiAgICAgIGlmICh2ZXJzZUluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgbmV3VmVyc2VVc2ZtID0gVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKHVwZGF0ZWRWZXJzZU9iamVjdHMpXG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoJHtjYXJkTnVtfSkgLSBuZXcgVVNGTSBmb3IgY2FyZDp9IC0gJHtuZXdWZXJzZVVzZm0uc3Vic3RyaW5nKDAsIDEwMCl9YClcbiAgICAgICAgY29uc3Qgb2xkVmVyc2UgPSB2ZXJzZUNodW5rc1t2ZXJzZUluZGV4XVxuICAgICAgICBjb25zdCB2ZXJzZU51bUxlbiA9IChyZWY/LnZlcnNlICsgJycpLmxlbmd0aFxuICAgICAgICB2ZXJzZUNodW5rc1t2ZXJzZUluZGV4XSA9IG9sZFZlcnNlLnN1YnN0cmluZygwLCB2ZXJzZU51bUxlbiArIDEpICsgbmV3VmVyc2VVc2ZtXG4gICAgICAgIGNvbnN0IG5ld0NoYXB0ZXIgPSB2ZXJzZUNodW5rcy5qb2luKCdcXFxcdiAnKVxuICAgICAgICBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF0gPSBuZXdDaGFwdGVyXG4gICAgICAgIG5ld1VzZm0gPSBjaGFwdGVyQ2h1bmtzLmpvaW4oJ1xcXFxjICcpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdVc2ZtXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBmb3IgZWFjaCB1bnNhdmVkIGNoYW5nZSwgY2FsbCBpbnRvIHZlcnNlUGFuZSB0byBnZXQgbGF0ZXN0IGNoYW5nZXMgZm9yIHZlcnNlIHRvIHNhdmVcbiAgICBpZiAoc2F2ZUNsaWNrZWQpIHtcbiAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGxldCBiaWJsZVVzZm0gPSBjb3JlLmdldFJlc3BvbnNlRGF0YShzY3JpcHR1cmVDb25maWc/LmZldGNoUmVzcG9uc2UpXG4gICAgICAgIGxldCBtZXJnZUZhaWwgPSBmYWxzZVxuICAgICAgICBsZXQgY2FyZE51bSA9IDBcblxuICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgaWYgKGdldENoYW5nZXMpIHtcbiAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0cyxcbiAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICBpZiAodXBkYXRlZFZlcnNlT2JqZWN0cyAmJiBiaWJsZVVzZm0pIHsgLy8ganVzdCByZXBsYWNlIHZlcnNlXG4gICAgICAgICAgICAgIG5ld1VzZm0gPSBtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0oYmlibGVVc2ZtLCByZWYsIHVwZGF0ZWRWZXJzZU9iamVjdHMsIGNhcmROdW0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgIGJpYmxlVXNmbSA9IG5ld1VzZm1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1lcmdlRmFpbCA9IHRydWVcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVyZ2VGYWlsKSB7IC8vIGlmIHdlIGZhaWxlZCB0byBtZXJnZSwgZmFsbGJhY2sgdG8gYnJ1dGUgZm9yY2UgdmVyc2Ugb2JqZWN0cyB0byBVU0ZNXG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgke2NhcmROdW19KSAtIHZlcnNlIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIGluc2VydGluZyB2ZXJzZSBvYmplY3RgKVxuICAgICAgICAgIGxldCBuZXdCb29rSnNvblxuXG4gICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBjYXJkTnVtID0gcGFyc2VJbnQoY2FyZEluZGV4KVxuICAgICAgICAgICAgY29uc3QgeyBnZXRDaGFuZ2VzLCBzdGF0ZSB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmROdW1dXG5cbiAgICAgICAgICAgIGlmIChnZXRDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGxldCBuZXdVc2ZtXG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmICFuZXdVc2ZtKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldFZlcnNlT2JqZWN0c18gPSBudWxsXG5cbiAgICAgICAgICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobmV3VmVyc2VUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0VmVyc2VPYmplY3RzIH0gPSBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKHVwZGF0ZWRWZXJzZU9iamVjdHMsIG5ld1ZlcnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHRhcmdldFZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHVwZGF0ZWRWZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG5ld0Jvb2tKc29uID0gdGFyZ2V0VmVyc2VPYmplY3RzXyAmJiBzY3JpcHR1cmVDb25maWc/LnVwZGF0ZVZlcnNlKHJlZi5jaGFwdGVyLCByZWYudmVyc2UsIHsgdmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHNfIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYmlibGVVc2ZtID0gdXNmbWpzLnRvVVNGTShuZXdCb29rSnNvbiwgeyBmb3JjZWROZXdMaW5lczogdHJ1ZSB9KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIG5ldyBVU0ZNOiAke2JpYmxlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKVxuICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gWy4uLnByZXZDYXJkc1NhdmluZywgY2FyZFJlc291cmNlSWRdKVxuICAgICAgICBzZXRTdGF0ZSh7IHNhdmVDb250ZW50OiBiaWJsZVVzZm0sIHN0YXJ0U2F2ZTogdHJ1ZSwgc2F2ZUNsaWNrZWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICB9LCBbc2F2ZUNsaWNrZWRdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0VxdWFsKHZlcnNlc0ZvclJlZiwgc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWYpKSB7XG4gICAgICBjb25zdCB2ZXJzZXNGb3JSZWYgPSBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZlxuICAgICAgc2V0U3RhdGUoeyB2ZXJzZXNGb3JSZWYgfSlcblxuICAgICAgZm9yIChjb25zdCB2ZXJzZVJlZiBvZiB2ZXJzZXNGb3JSZWYgfHwgW10pIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIHZlcnNlIHJhbmdlXG4gICAgICAgIGNvbnN0IF92ZXJzZSA9IHZlcnNlUmVmLnZlcnNlXG5cbiAgICAgICAgaWYgKGFkZFZlcnNlUmFuZ2UgJiYgKHR5cGVvZiBfdmVyc2UgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBpZiAoX3ZlcnNlLmluY2x1ZGVzKCctJykpIHtcbiAgICAgICAgICAgIGFkZFZlcnNlUmFuZ2UoYCR7c2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LmNoYXB0ZXJ9OiR7X3ZlcnNlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWZdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U3RhdGUoeyB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IG51bGwgfSlcbiAgfSwgW3ZlcnNlXSlcblxuICBjb25zdCB1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXMgPSAocmVmZXJlbmNlLCBhbGlnbmVkKSA9PiB7XG4gICAgc2V0U3RhdGVfKHByZXZTdGF0ZSA9PiAoe1xuICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiB7Li4ucHJldlN0YXRlLnZlcnNlc0FsaWdubWVudFN0YXR1cywgW2Ake3JlZmVyZW5jZS5jaGFwdGVyfToke3JlZmVyZW5jZS52ZXJzZX1gXTogYWxpZ25lZH0sXG4gICAgfSkpXG4gIH1cblxuICBjb25zdCByZW5kZXJlZFNjcmlwdHVyZVBhbmVzID0gdmVyc2VzRm9yUmVmPy5tYXAoKF9jdXJyZW50VmVyc2VEYXRhLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxWZXJzZU9iamVjdHMgPSBfY3VycmVudFZlcnNlRGF0YT8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHMgfHwgbnVsbFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7IGNoYXB0ZXIsIHZlcnNlIH0gPSBfY3VycmVudFZlcnNlRGF0YSB8fCB7fVxuICAgIGNvbnN0IF9yZWZlcmVuY2UgPSB7XG4gICAgICAuLi5yZWZlcmVuY2UsXG4gICAgICBjaGFwdGVyLFxuICAgICAgdmVyc2UsXG4gICAgfVxuICAgIGNvbnN0IF9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnID0ge1xuICAgICAgLi4uc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyxcbiAgICAgIGN1cnJlbnRJbmRleDogaW5kZXgsXG4gICAgICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICAgICAgcmVmZXJlbmNlOiBfcmVmZXJlbmNlLFxuICAgIH1cblxuICAgIGxldCBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQgPSBmYWxzZVxuICAgIGlmICh2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50KSB7XG4gICAgICBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQgPSB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50LmNoYXB0ZXIgPT09IGNoYXB0ZXIgJiYgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudC52ZXJzZSA9PT0gdmVyc2VcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNjcmlwdHVyZVBhbmVcbiAgICAgICAgey4uLnNjcmlwdHVyZUNvbmZpZ31cbiAgICAgICAgY29udGVudFN0eWxlPXtjb250ZW50U3R5bGV9XG4gICAgICAgIGN1cnJlbnRJbmRleD17aW5kZXh9XG4gICAgICAgIGRpcmVjdGlvbj17ZGlyZWN0aW9ufVxuICAgICAgICBkaXNhYmxlV29yZFBvcG92ZXI9e2Rpc2FibGVXb3JkUG9wb3Zlcl99XG4gICAgICAgIGZvbnRTaXplPXtmb250U2l6ZX1cbiAgICAgICAgZ2V0TGV4aWNvbkRhdGE9e2dldExleGljb25EYXRhfVxuICAgICAgICBpc05UPXtpc05UX31cbiAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgcmVmU3R5bGU9e3JlZlN0eWxlfVxuICAgICAgICByZWZlcmVuY2U9e19yZWZlcmVuY2V9XG4gICAgICAgIHNhdmluZz17c3RhcnRTYXZlfVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWc9e19zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnfVxuICAgICAgICBzZXRXb3JkQWxpZ25lclN0YXR1cz17c2V0V29yZEFsaWduZXJTdGF0dXN9XG4gICAgICAgIHNlcnZlcj17c2VydmVyfVxuICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50PXtpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnR9XG4gICAgICAgIG9uQWxpZ25tZW50RmluaXNoPXsoKSA9PiBzZXRTdGF0ZSh7IHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IG51bGwgfSl9XG4gICAgICAgIHVwZGF0ZVZlcnNlc0FsaWdubWVudFN0YXR1cz17dXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzfVxuICAgICAgLz5cbiAgICApXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQWxpZ25CdXR0b25DbGljayA9ICgpID0+IHtcbiAgICBpZiAodmVyc2VzRm9yUmVmPy5sZW5ndGggPiAxKSB7XG4gICAgICBzZXRTdGF0ZSh7IHNob3dBbGlnbm1lbnRQb3B1cDogdHJ1ZSB9KVxuICAgIH0gZWxzZSBpZiAodmVyc2VzRm9yUmVmPy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHNldFN0YXRlKHsgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogdmVyc2VzRm9yUmVmWzBdIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb25SZW5kZXJUb29sYmFyID0gKHsgaXRlbXMgfSkgPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW1zXVxuXG4gICAgbGV0IGFsbFZlcnNlc0FsaWduZWQgPSBmYWxzZVxuICAgIC8vIENoZWNrIGlmIGFsbCB2YWx1ZXMgaW4gdmVyc2VzQWxpZ25tZW50U3RhdHVzIGFyZSB0cnVlXG4gICAgaWYgKHZlcnNlc0FsaWdubWVudFN0YXR1cykge1xuICAgICAgYWxsVmVyc2VzQWxpZ25lZCA9IE9iamVjdC52YWx1ZXModmVyc2VzQWxpZ25tZW50U3RhdHVzKS5ldmVyeShhbGlnblN0YXR1cyA9PiBhbGlnblN0YXR1cyA9PT0gdHJ1ZSlcbiAgICB9XG4gICAgbGV0IGFsaWduSWNvbiA9IG51bGxcbiAgICBsZXQgYWxpZ25CdXR0b25UZXh0ID0gJydcbiAgICBpZiAoYWxsVmVyc2VzQWxpZ25lZCkge1xuICAgICAgYWxpZ25JY29uID0gPFJ4TGluazIgaWQ9e2B2YWxpZF9pY29uXyR7cmVzb3VyY2VJZH1gfSBjb2xvcj0nI0JCQicgLz5cbiAgICAgIGFsaWduQnV0dG9uVGV4dCA9ICdBbGlnbm1lbnQgaXMgVmFsaWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIGFsaWduSWNvbiA9IDxSeExpbmtCcmVhazIgaWQ9e2BpbnZhbGlkX2FsaWdubWVudF9pY29uXyR7cmVzb3VyY2VJZH1gfSBjb2xvcj0nIzAwMCcgLz5cbiAgICAgIGFsaWduQnV0dG9uVGV4dCA9ICdBbGlnbm1lbnQgaXMgSW52YWxpZCdcbiAgICB9XG5cbiAgICBpZiAoc2V0V29yZEFsaWduZXJTdGF0dXMgJiYgcmVzb3VyY2VJZCAhPT0gJ09SSUdJTkFMX1NPVVJDRScpIHtcbiAgICAgIG5ld0l0ZW1zLnB1c2goXG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgaWQ9e2BhbGlnbm1lbnRfaWNvbl8ke3Jlc291cmNlSWR9YH1cbiAgICAgICAgICBrZXk9J2NoZWNraW5nLWJ1dHRvbidcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrfVxuICAgICAgICAgIHRpdGxlPXthbGlnbkJ1dHRvblRleHR9XG4gICAgICAgICAgYXJpYS1sYWJlbD17YWxpZ25CdXR0b25UZXh0fVxuICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgID5cbiAgICAgICAgICB7YWxpZ25JY29ufVxuICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICApXG4gICAgfVxuXG4gICAgbmV3SXRlbXMucHVzaChcbiAgICAgIDw+XG4gICAgICAgIDxVcGRhdGVCcmFuY2hCdXR0b24gey4uLnVwZGF0ZUJ1dHRvblByb3BzfSBpc0xvYWRpbmc9e2lzVXBkYXRlTG9hZGluZyB8fCBzdGFydFNhdmV9Lz5cbiAgICAgICAgPEVycm9yRGlhbG9nIHRpdGxlPXtkaWFsb2dUaXRsZX0gY29udGVudD17ZGlhbG9nTWVzc2FnZX0gb3Blbj17aXNFcnJvckRpYWxvZ09wZW59IG9uQ2xvc2U9e29uQ2xvc2VFcnJvckRpYWxvZ30gaXNMb2FkaW5nPXsgaXNVcGRhdGVMb2FkaW5nIHx8IHN0YXJ0U2F2ZSB9IGxpbms9e2RpYWxvZ0xpbmt9IGxpbmtUb29sdGlwPXtkaWFsb2dMaW5rVG9vbHRpcH0gLz5cbiAgICAgIDwvPlxuICAgIClcblxuICAgIHJldHVybiBuZXdJdGVtcztcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxDYXJkXG4gICAgICAgIGlkPXtgc2NyaXB0dXJlX2NhcmRfJHtjYXJkTnVtfWB9XG4gICAgICAgIHRpdGxlPXtzY3JpcHR1cmVMYWJlbH1cbiAgICAgICAgc2V0dGluZ3NUaXRsZT17c2NyaXB0dXJlVGl0bGUgKyAnIFNldHRpbmdzJ31cbiAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgICBoZWFkZXJzPXtoZWFkZXJzfVxuICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGl0ZW1JbmRleD17aXRlbUluZGV4fVxuICAgICAgICBzZXRGaWx0ZXJzPXtzZXRGaWx0ZXJzfVxuICAgICAgICBzZXRGb250U2l6ZT17c2V0Rm9udFNpemV9XG4gICAgICAgIHNldEl0ZW1JbmRleD17c2V0SXRlbUluZGV4fVxuICAgICAgICBtYXJrZG93blZpZXc9e21hcmtkb3duVmlld31cbiAgICAgICAgc2V0TWFya2Rvd25WaWV3PXtzZXRNYXJrZG93blZpZXd9XG4gICAgICAgIGdldEN1c3RvbUNvbXBvbmVudD17Z2V0U2NyaXB0dXJlU2VsZWN0b3J9XG4gICAgICAgIGhpZGVNYXJrZG93blRvZ2dsZVxuICAgICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICAgIG9uTWluaW1pemU9e29uTWluaW1pemUgPyAoKSA9PiBvbk1pbmltaXplKGlkKSA6IG51bGx9XG4gICAgICAgIGVkaXRhYmxlPXtlbmFibGVFZGl0IHx8IGVuYWJsZUFsaWdubWVudH1cbiAgICAgICAgc2F2ZWQ9e3N0YXJ0U2F2ZSB8fCAhaGF2ZVVuc2F2ZWRDaGFuZ2VzfVxuICAgICAgICBvblNhdmVFZGl0PXsoKSA9PiBzZXRTdGF0ZSh7IHNhdmVDbGlja2VkOiB0cnVlIH0pfVxuICAgICAgICBvblJlbmRlclRvb2xiYXI9e29uUmVuZGVyVG9vbGJhcn1cbiAgICAgID5cbiAgICAgICAgPGRpdiBpZD1cInNjcmlwdHVyZS1wYW5lLWxpc3RcIj5cbiAgICAgICAgICB7cmVuZGVyZWRTY3JpcHR1cmVQYW5lc31cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0NhcmQ+XG4gICAgICA8VmVyc2VTZWxlY3RvclBvcHVwXG4gICAgICAgIHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG4gICAgICAgIG9wZW49e3Nob3dBbGlnbm1lbnRQb3B1cH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U3RhdGUoeyBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlIH0pfVxuICAgICAgICB2ZXJzZXNGb3JSZWY9e3ZlcnNlc0ZvclJlZn1cbiAgICAgICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzPXt2ZXJzZXNBbGlnbm1lbnRTdGF0dXN9XG4gICAgICAgIG9uVmVyc2VTZWxlY3Q9eyh2ZXJzZSkgPT4gc2V0U3RhdGUoe1xuICAgICAgICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IHZlcnNlLFxuICAgICAgICAgIHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2VcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgIDwvPlxuICApXG59XG5cblNjcmlwdHVyZUNhcmQucHJvcFR5cGVzID0ge1xuICAvKiogaHRtbCBpZGVudGlmaWVyIHRvIHVzZSBmb3IgY2FyZCAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgTlQgb3IgT1QgKi9cbiAgaXNOVDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHRpdGxlIGZvciBzY3JpcHR1cmUgY2FyZCAqL1xuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogZ2V0IGxhbmd1YWdlIGRldGFpbHMgKi9cbiAgZ2V0TGFuZ3VhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBzY3JpcHR1cmUgY2FyZCBudW1iZXIgKDAgdG8gMiBmb3IgZXhhbXBsZSkgKi9cbiAgY2FyZE51bTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAvKiogcmVzb3VyY2Ugb2JqZWN0ICovXG4gIHJlc291cmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiByZXNvdXJjZSBsYW5ndWFnZSB0byB1c2UgKi9cbiAgICBsYW5ndWFnZUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlcG8gb3duZXIgc3VjaCBhcyB1bmZvbGRpbmdXb3JkICovXG4gICAgb3duZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVzb3VyY2VJZCB0byB1c2UgKGUuZy4gdWdudCkgKi9cbiAgICByZXNvdXJjZUlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlcG8gb3duZXIgZm9yIG9yaWdpbmFsIGxhbmd1YWdlcyBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSksXG4gIHJlZmVyZW5jZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKiogcHJvamVjdElkIChib29rSUQpIHRvIHVzZSAqL1xuICAgIHByb2plY3RJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IGNoYXB0ZXIgbnVtYmVyICovXG4gICAgY2hhcHRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgdmVyc2UgbnVtYmVyICovXG4gICAgdmVyc2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICB9KSxcbiAgLyoqIHNlcnZlciAoZS5nLiAnaHR0cHM6Ly9naXQuZG9vcjQzLm9yZycpICovXG4gIHNlcnZlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogcmVwbyBicmFuY2ggb3IgdGFnIHN1Y2ggYXMgbWFzdGVyICovXG4gIGFwcFJlZjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKiogaWYgdHJ1ZSB0aGVuIHdvcmQgZGF0YSBob3ZlciBpcyBzaG93biAqL1xuICBkaXNhYmxlV29yZFBvcG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKiogQ1NTIGNsYXNzZXMgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIHJlc291cmNlTGluayAqL1xuICByZXNvdXJjZUxpbms6IFByb3BUeXBlcy5hbnksXG4gIC8qKiB1c2UgbWV0aG9kIGZvciB1c2luZyBsb2NhbCBzdG9yYWdlIHNwZWNpZmljIGZvciB1c2VyICovXG4gIHVzZVVzZXJMb2NhbFN0b3JhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBvcHRpb25hbCBjYWxsYmFjayBpZiBlcnJvciBsb2FkaW5nIHJlc291cmNlLCBwYXJhbWV0ZXIgcmV0dXJuZWQgYXJlOlxuICAgKiAgICAoe3N0cmluZ30gZXJyb3JNZXNzYWdlLCB7Ym9vbGVhbn0gaXNBY2Nlc3NFcnJvciwge29iamVjdH0gcmVzb3VyY2VTdGF0dXMpXG4gICAqICAgICAgLSBpc0FjY2Vzc0Vycm9yIC0gaXMgdHJ1ZSBpZiB0aGlzIHdhcyBhbiBlcnJvciB0cnlpbmcgdG8gYWNjZXNzIGZpbGVcbiAgICogICAgICAtIHJlc291cmNlU3RhdHVzIC0gaXMgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCBwcm9ibGVtcyBmZXRjaGluZyByZXNvdXJjZSAqL1xuICBvblJlc291cmNlRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgaHR0cCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZmV0Y2hpbmcgcmVzb3VyY2VzLCBkZWZhdWx0IGlzIDAgKHZlcnkgbG9uZyB3YWl0KSAqL1xuICBodHRwQ29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBncmVlayByZXBvICovXG4gIGdyZWVrUmVwb1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG9wdGlvbmFsIHVybCBmb3IgaGVicmV3IHJlcG8gKi9cbiAgaGVicmV3UmVwb1VybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGZ1bmN0aW9uIHRvIGdldCBsYXRlc3QgbGV4aWNvbiBkYXRhICovXG4gIGdldExleGljb25EYXRhOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGZ1bmN0aW9uIHRvIHByZS1sb2FkIGxleGljb24gZGF0YSBmb3IgdmVyc2UgKi9cbiAgZmV0Y2hHbG9zc2VzRm9yVmVyc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgZnVuY3Rpb24gZm9yIGxvY2FsaXphdGlvbiAqL1xuICB0cmFuc2xhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogZnVuY3Rpb24gdG8gbWluaW1pemUgdGhlIGNhcmQgKG9wdGlvbmFsKSAqL1xuICBvbk1pbmltaXplOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHVzZXItbmFtZSAqL1xuICBsb2dnZWRJblVzZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBhdXRoZW50aWNhdGlvbiBpbmZvICovXG4gIGF1dGhlbnRpY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogZnVuY3Rpb24gdG8gc2V0IHN0YXRlIGluIGFwcCB0aGF0IHRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgKi9cbiAgc2V0U2F2ZWRDaGFuZ2VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGluZGV4IGZvciBjdXJyZW50IGJvb2sgKGUuZy4gJzAxJyBmb3IgJ2dlbicpKi9cbiAgYm9va0luZGV4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogY2FsbGJhY2sgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgdXNpbmcgYSB2ZXJzZSByYW5nZSBoZXJlICovXG4gIGFkZFZlcnNlUmFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHdvcmQgYWxpZ25lciBzdGF0ZSAqL1xuICBzZXRXb3JkQWxpZ25lclN0YXR1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBjYWxsYmFjayB0byB1cGRhdGUgdGhlIGNhcmQncyBtZXJnZSBzdGF0ZSBpbiBhcHAgKi9cbiAgdXBkYXRlTWVyZ2VTdGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBjYWxsYmFjayB0byB1cGRhdGUgbG9hZGluZyBzdGF0ZSAqL1xuICBzZXRBcmVSZXNvdXJjZXNMb2FkaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGNhbGxiYWNrIHRvIHVwZGF0ZSBzYXZpbmcgc3RhdGUqL1xuICBzZXRBcmVSZXNvdXJjZXNTYXZpbmc6IFByb3BUeXBlcy5mdW5jLFxufVxuIl19
|