single-scripture-rcl 3.4.2-beta → 3.4.2-beta.2
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 +716 -387
- package/dist/components/ScripturePane/ScripturePane.js +57 -27
- package/dist/components/VerseSelectorPopup/index.js +1 -1
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/useScripture.js +390 -112
- package/dist/hooks/useScriptureAlignmentEdit.js +88 -74
- package/dist/hooks/useScriptureResources.js +20 -18
- package/dist/hooks/useScriptureSelector.js +12 -12
- package/dist/hooks/useScriptureSettings.js +35 -39
- package/dist/utils/ScriptureSettings.js +11 -6
- package/dist/utils/index.js +2 -1
- package/dist/utils/maps.js +41 -0
- package/package.json +6 -5
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import "core-js/modules/es.array.concat.js";
|
|
2
|
+
import "core-js/modules/es.array.includes.js";
|
|
2
3
|
import "core-js/modules/es.array.is-array.js";
|
|
3
4
|
import "core-js/modules/es.array.map.js";
|
|
5
|
+
import "core-js/modules/es.function.name.js";
|
|
6
|
+
import "core-js/modules/es.regexp.exec.js";
|
|
7
|
+
import "core-js/modules/es.string.includes.js";
|
|
8
|
+
import "core-js/modules/es.string.split.js";
|
|
4
9
|
|
|
5
10
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
6
11
|
|
|
@@ -21,135 +26,352 @@ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(
|
|
|
21
26
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
22
27
|
|
|
23
28
|
// @ts-ignore
|
|
24
|
-
import { useEffect,
|
|
29
|
+
import { useEffect, useState } from 'react';
|
|
25
30
|
import { core, useRsrc } from 'scripture-resources-rcl';
|
|
26
31
|
import { CONTENT_NOT_FOUND_ERROR, ERROR_STATE, INITIALIZED_STATE, INVALID_MANIFEST_ERROR, LOADING_STATE, MANIFEST_NOT_LOADED_ERROR, SCRIPTURE_NOT_LOADED_ERROR } from 'translation-helps-rcl';
|
|
27
32
|
import { getVerses } from 'bible-reference-range';
|
|
33
|
+
import * as isEqual from 'deep-equal';
|
|
28
34
|
import { cleanupVerseObjects, getResourceLink } from '../utils/ScriptureSettings';
|
|
29
35
|
import { ServerConfig, ScriptureResource, ScriptureReference } from '../types';
|
|
30
36
|
import { parseResourceManifest } from './parseResourceManifest';
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* extract branch from resource link
|
|
40
|
+
* @param resourceLink
|
|
41
|
+
*/
|
|
42
|
+
function getBranchName(resourceLink) {
|
|
43
|
+
var branch = null;
|
|
44
|
+
resourceLink = resourceLink || '';
|
|
45
|
+
var parts = resourceLink.split('?ref=');
|
|
46
|
+
|
|
47
|
+
if (parts.length > 1) {
|
|
48
|
+
// if ref parameter found, get branch name after
|
|
49
|
+
branch = parts === null || parts === void 0 ? void 0 : parts[1];
|
|
50
|
+
} else {
|
|
51
|
+
// fall back to using useRsrc format such as "unfoldingWord/en/ust/master"
|
|
52
|
+
var _parts = resourceLink.split('/');
|
|
53
|
+
|
|
54
|
+
branch = _parts === null || _parts === void 0 ? void 0 : _parts[3];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return branch;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* get the verse objects for the reference string
|
|
61
|
+
* @param {string} refStr - in format <chapter>:<verse>
|
|
62
|
+
* @param {object} bookObjects - parsed usfm for book
|
|
63
|
+
* @param {string} languageId
|
|
64
|
+
* @return {array|null} - of verseObjects
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
export function getVersesForRefStr(refStr, bookObjects, languageId) {
|
|
69
|
+
if (bookObjects) {
|
|
70
|
+
var verses = getVerses(bookObjects.chapters, refStr);
|
|
71
|
+
|
|
72
|
+
if (languageId === 'el-x-koine' || languageId === 'hbo') {
|
|
73
|
+
verses = verses.map(function (verse) {
|
|
74
|
+
var _verse$verseData;
|
|
75
|
+
|
|
76
|
+
if (verse !== null && verse !== void 0 && (_verse$verseData = verse.verseData) !== null && _verse$verseData !== void 0 && _verse$verseData.verseObjects) {
|
|
77
|
+
var verseObjects_ = core.occurrenceInjectVerseObjects(verse.verseData.verseObjects);
|
|
78
|
+
verseObjects_ = cleanupVerseObjects(verseObjects_);
|
|
79
|
+
verse.verseData.verseObjects = verseObjects_;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return verse;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return verses;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* get the verse objects for the reference object
|
|
93
|
+
* @param {object} reference
|
|
94
|
+
* @param {object} bookObjects - parsed usfm for book
|
|
95
|
+
* @param {string} languageId
|
|
96
|
+
* @return {array|null} - of verseObjects
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
export function getVersesForRef(reference, bookObjects, languageId) {
|
|
100
|
+
var refStr = "".concat(reference.chapter, ":").concat(reference.verse);
|
|
101
|
+
return getVersesForRefStr(refStr, bookObjects, languageId);
|
|
102
|
+
}
|
|
31
103
|
export function useScripture(_ref) {
|
|
32
|
-
var _resourceStatus;
|
|
104
|
+
var _resourceStatus, _fetchParams$referenc;
|
|
33
105
|
|
|
34
106
|
var config = _ref.config,
|
|
107
|
+
readyForFetch = _ref.readyForFetch,
|
|
35
108
|
reference = _ref.reference,
|
|
36
109
|
resource_ = _ref.resource,
|
|
37
110
|
resourceLink_ = _ref.resourceLink,
|
|
38
111
|
_ref$wholeBook = _ref.wholeBook,
|
|
39
112
|
wholeBook = _ref$wholeBook === void 0 ? false : _ref$wholeBook;
|
|
40
113
|
|
|
41
|
-
var _useState = useState(
|
|
114
|
+
var _useState = useState({
|
|
115
|
+
bookObjects: null,
|
|
116
|
+
fetchedBook: '',
|
|
117
|
+
fetchParams: {
|
|
118
|
+
resourceLink: '',
|
|
119
|
+
reference: {},
|
|
120
|
+
config: {}
|
|
121
|
+
},
|
|
122
|
+
ignoreSha: null,
|
|
123
|
+
initialized: false,
|
|
124
|
+
fetched: false,
|
|
125
|
+
resourceState: {
|
|
126
|
+
bibleJson: null,
|
|
127
|
+
matchedVerse: null,
|
|
128
|
+
resource: null,
|
|
129
|
+
content: null,
|
|
130
|
+
loadingResource: false,
|
|
131
|
+
loadingContent: false,
|
|
132
|
+
fetchResponse: null
|
|
133
|
+
},
|
|
134
|
+
versesForRef: []
|
|
135
|
+
}),
|
|
42
136
|
_useState2 = _slicedToArray(_useState, 2),
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
versesForRef =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
owner = _ref2.owner,
|
|
61
|
-
_languageId = _ref2.languageId,
|
|
62
|
-
projectId = _ref2.projectId,
|
|
63
|
-
_ref2$branch = _ref2.branch,
|
|
64
|
-
branch = _ref2$branch === void 0 ? 'master' : _ref2$branch,
|
|
65
|
-
_ref2$ref = _ref2.ref,
|
|
66
|
-
ref = _ref2$ref === void 0 ? null : _ref2$ref;
|
|
67
|
-
|
|
68
|
-
var ref_ = ref || branch;
|
|
69
|
-
resourceLink = getResourceLink({
|
|
70
|
-
owner: owner,
|
|
71
|
-
languageId: _languageId,
|
|
72
|
-
resourceId: projectId,
|
|
73
|
-
ref: ref_
|
|
137
|
+
state = _useState2[0],
|
|
138
|
+
setState_ = _useState2[1];
|
|
139
|
+
|
|
140
|
+
var bookObjects = state.bookObjects,
|
|
141
|
+
fetchedBook = state.fetchedBook,
|
|
142
|
+
fetchParams = state.fetchParams,
|
|
143
|
+
fetched = state.fetched,
|
|
144
|
+
ignoreSha = state.ignoreSha,
|
|
145
|
+
initialized = state.initialized,
|
|
146
|
+
resourceState = state.resourceState,
|
|
147
|
+
versesForRef = state.versesForRef;
|
|
148
|
+
|
|
149
|
+
var _bookId = reference === null || reference === void 0 ? void 0 : reference.projectId;
|
|
150
|
+
|
|
151
|
+
function setState(newState) {
|
|
152
|
+
setState_(function (prevState) {
|
|
153
|
+
return _objectSpread(_objectSpread({}, prevState), newState);
|
|
74
154
|
});
|
|
75
155
|
}
|
|
76
156
|
|
|
157
|
+
useEffect(function () {
|
|
158
|
+
if (readyForFetch) {
|
|
159
|
+
console.log("useScripture - readyForFetch true, initializing");
|
|
160
|
+
var resourceLink = readyForFetch && resourceLink_;
|
|
161
|
+
|
|
162
|
+
if (!resourceLink_ && resource_) {
|
|
163
|
+
var _ref2 = resource_ || {},
|
|
164
|
+
owner = _ref2.owner,
|
|
165
|
+
_languageId = _ref2.languageId,
|
|
166
|
+
projectId = _ref2.projectId,
|
|
167
|
+
_ref2$branch = _ref2.branch,
|
|
168
|
+
branch = _ref2$branch === void 0 ? 'master' : _ref2$branch,
|
|
169
|
+
_ref2$ref = _ref2.ref,
|
|
170
|
+
ref = _ref2$ref === void 0 ? null : _ref2$ref;
|
|
171
|
+
|
|
172
|
+
var ref_ = ref || branch;
|
|
173
|
+
resourceLink = getResourceLink({
|
|
174
|
+
owner: owner,
|
|
175
|
+
languageId: _languageId,
|
|
176
|
+
resourceId: projectId,
|
|
177
|
+
ref: ref_
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
var bookRef = _objectSpread({}, reference);
|
|
182
|
+
|
|
183
|
+
if (wholeBook) {
|
|
184
|
+
delete bookRef.chapter; // remove the chapter and verse so the whole book is fetched
|
|
185
|
+
|
|
186
|
+
delete bookRef.verse;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (resourceLink !== (fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink)) {
|
|
190
|
+
console.log("useScripture - for ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink, " and resourceLink_=").concat(resourceLink_));
|
|
191
|
+
} else if (bookRef !== (fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference)) {
|
|
192
|
+
console.log("useScripture - book changed to ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
var newFetchParams = {
|
|
196
|
+
resourceLink: resourceLink,
|
|
197
|
+
reference: bookRef,
|
|
198
|
+
config: config
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
if (!isEqual(newFetchParams, fetchParams)) {
|
|
202
|
+
console.log("useScripture - FETCHING new params ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " resourceLink is now ").concat(resourceLink, " and resourceLink_=").concat(resourceLink_), newFetchParams);
|
|
203
|
+
setState({
|
|
204
|
+
fetchParams: newFetchParams,
|
|
205
|
+
fetched: false,
|
|
206
|
+
ignoreSha: null
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}, [readyForFetch, _bookId, resourceLink_]);
|
|
211
|
+
useEffect(function () {
|
|
212
|
+
console.log("useScripture - for ".concat(resource_ === null || resource_ === void 0 ? void 0 : resource_.projectId, " readyForFetch is now ").concat(readyForFetch));
|
|
213
|
+
}, [readyForFetch]);
|
|
77
214
|
var options = {
|
|
78
215
|
getBibleJson: true
|
|
79
216
|
};
|
|
80
|
-
var bookRef = useMemo(function () {
|
|
81
|
-
var bookRef = _objectSpread({}, reference);
|
|
82
217
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
218
|
+
var _resourceResults = useRsrc({
|
|
219
|
+
config: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.config,
|
|
220
|
+
reference: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference,
|
|
221
|
+
resourceLink: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink,
|
|
222
|
+
options: options
|
|
223
|
+
}); // only use the results if readyToFetch
|
|
86
224
|
|
|
87
|
-
return bookRef;
|
|
88
|
-
}, [reference, wholeBook]);
|
|
89
225
|
|
|
90
|
-
var
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
226
|
+
var bibleJson = resourceState.bibleJson,
|
|
227
|
+
content = resourceState.content,
|
|
228
|
+
fetchResponse = resourceState.fetchResponse,
|
|
229
|
+
loadingResource = resourceState.loadingResource,
|
|
230
|
+
loadingContent = resourceState.loadingContent,
|
|
231
|
+
matchedVerse = resourceState.matchedVerse,
|
|
232
|
+
resource = resourceState.resource;
|
|
233
|
+
useEffect(function () {
|
|
234
|
+
// validate response to make sure from latest request
|
|
235
|
+
if (readyForFetch) {
|
|
236
|
+
var currentResourceState = _resourceResults === null || _resourceResults === void 0 ? void 0 : _resourceResults.state;
|
|
237
|
+
|
|
238
|
+
if (!fetched && !isEqual(currentResourceState, resourceState)) {
|
|
239
|
+
var _content = currentResourceState.content,
|
|
240
|
+
_fetchResponse = currentResourceState.fetchResponse,
|
|
241
|
+
_loadingContent = currentResourceState.loadingContent,
|
|
242
|
+
_loadingResource = currentResourceState.loadingResource; // console.log(`useScripture resources changed`, { content, fetchParams, fetchResponse })
|
|
243
|
+
|
|
244
|
+
if (!_loadingContent && !_loadingResource && _content && _fetchResponse) {
|
|
245
|
+
var _fetchResponse$data, _fetchResponse$data2;
|
|
246
|
+
|
|
247
|
+
var newState = {
|
|
248
|
+
resourceState: currentResourceState
|
|
249
|
+
};
|
|
250
|
+
console.log("useScripture content changed", {
|
|
251
|
+
content: _content,
|
|
252
|
+
fetchParams: fetchParams,
|
|
253
|
+
fetchResponse: _fetchResponse
|
|
254
|
+
}); // TRICKY - responses from server can come back from previous requests. So we make sure this response is for the current requested book
|
|
255
|
+
|
|
256
|
+
var sameBook = false; // @ts-ignore
|
|
257
|
+
|
|
258
|
+
var expectedBookId = _bookId || '';
|
|
259
|
+
var _fetchedBook = _content.name;
|
|
260
|
+
|
|
261
|
+
if (_fetchedBook && expectedBookId) {
|
|
262
|
+
var _fetchedBook$split = _fetchedBook.split('.'),
|
|
263
|
+
_fetchedBook$split2 = _slicedToArray(_fetchedBook$split, 2),
|
|
264
|
+
name = _fetchedBook$split2[0],
|
|
265
|
+
ext = _fetchedBook$split2[1];
|
|
266
|
+
|
|
267
|
+
if (ext.toLowerCase() === 'usfm') {
|
|
268
|
+
sameBook = name.toLowerCase().includes(expectedBookId.toLowerCase());
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
var sha = (_fetchResponse === null || _fetchResponse === void 0 ? void 0 : (_fetchResponse$data = _fetchResponse.data) === null || _fetchResponse$data === void 0 ? void 0 : _fetchResponse$data.sha) || null;
|
|
273
|
+
var url = (_fetchResponse === null || _fetchResponse === void 0 ? void 0 : (_fetchResponse$data2 = _fetchResponse.data) === null || _fetchResponse$data2 === void 0 ? void 0 : _fetchResponse$data2.url) || null;
|
|
274
|
+
|
|
275
|
+
if (sameBook) {
|
|
276
|
+
// also make sure it is the same branch
|
|
277
|
+
var fetchedBranch = getBranchName(url);
|
|
278
|
+
var fetchingBranch = getBranchName(fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink);
|
|
279
|
+
|
|
280
|
+
if (fetchedBranch !== fetchingBranch) {
|
|
281
|
+
console.log("useScripture invalid branch, expected branch is ".concat(fetchingBranch, ", but fetchedBranch is ").concat(fetchedBranch), {
|
|
282
|
+
sha: sha,
|
|
283
|
+
url: url
|
|
284
|
+
});
|
|
285
|
+
sameBook = false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
if (ignoreSha === sha) {
|
|
290
|
+
console.log("useScripture - the sha is the same as the ignore sha ".concat(sha), {
|
|
291
|
+
sha: sha,
|
|
292
|
+
url: url
|
|
293
|
+
});
|
|
294
|
+
sameBook = false;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if (!sameBook) {
|
|
298
|
+
console.log("useScripture invalid book, expectedBookId is ".concat(expectedBookId, ", but received book name ").concat(_fetchedBook), {
|
|
299
|
+
sha: sha,
|
|
300
|
+
url: url
|
|
301
|
+
});
|
|
302
|
+
} else {
|
|
303
|
+
newState['bookObjects'] = _content;
|
|
304
|
+
newState['versesForRef'] = updateVersesForRef(_content);
|
|
305
|
+
newState['fetchedBook'] = expectedBookId;
|
|
306
|
+
|
|
307
|
+
if (!isEqual(newState, {
|
|
308
|
+
bookObjects: bookObjects,
|
|
309
|
+
versesForRef: versesForRef,
|
|
310
|
+
fetchedBook: expectedBookId,
|
|
311
|
+
resourceState: resourceState
|
|
312
|
+
})) {
|
|
313
|
+
console.log("useScripture correct book, expectedBookId is ".concat(expectedBookId), {
|
|
314
|
+
sha: sha,
|
|
315
|
+
url: url
|
|
316
|
+
});
|
|
317
|
+
newState['fetched'] = true;
|
|
318
|
+
newState['ignoreSha'] = null;
|
|
319
|
+
setState(newState);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
} else {
|
|
323
|
+
if (!isEqual(currentResourceState, resourceState)) {
|
|
324
|
+
// console.log(`useScripture state changed, but no content`, currentResourceState)
|
|
325
|
+
setState({
|
|
326
|
+
resourceState: currentResourceState
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}, [readyForFetch, _resourceResults === null || _resourceResults === void 0 ? void 0 : _resourceResults.state]);
|
|
105
333
|
|
|
106
334
|
var _parseResourceManifes = parseResourceManifest(resource),
|
|
107
335
|
title = _parseResourceManifes.title,
|
|
108
336
|
version = _parseResourceManifes.version;
|
|
109
337
|
|
|
110
|
-
var _ref3 =
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
var _ref4 = resource_ || {},
|
|
114
|
-
languageId = _ref4.languageId;
|
|
338
|
+
var _ref3 = resource_ || {},
|
|
339
|
+
languageId = _ref3.languageId;
|
|
115
340
|
|
|
116
|
-
var loading = loadingResource || loadingContent;
|
|
341
|
+
var loading = loadingResource || loadingContent || !readyForFetch;
|
|
117
342
|
var contentNotFoundError = !content;
|
|
118
343
|
var scriptureNotLoadedError = !bibleJson;
|
|
119
344
|
var manifestNotFoundError = !(resource !== null && resource !== void 0 && resource.manifest);
|
|
120
345
|
var invalidManifestError = !title || !version || !languageId;
|
|
121
|
-
var error = initialized && !loading && (contentNotFoundError || scriptureNotLoadedError || manifestNotFoundError || invalidManifestError);
|
|
346
|
+
var error = readyForFetch && initialized && !loading && (contentNotFoundError || scriptureNotLoadedError || manifestNotFoundError || invalidManifestError);
|
|
122
347
|
var resourceStatus = (_resourceStatus = {}, _defineProperty(_resourceStatus, LOADING_STATE, loading), _defineProperty(_resourceStatus, CONTENT_NOT_FOUND_ERROR, contentNotFoundError), _defineProperty(_resourceStatus, SCRIPTURE_NOT_LOADED_ERROR, scriptureNotLoadedError), _defineProperty(_resourceStatus, MANIFEST_NOT_LOADED_ERROR, manifestNotFoundError), _defineProperty(_resourceStatus, INVALID_MANIFEST_ERROR, invalidManifestError), _defineProperty(_resourceStatus, ERROR_STATE, error), _defineProperty(_resourceStatus, INITIALIZED_STATE, initialized), _resourceStatus);
|
|
123
348
|
useEffect(function () {
|
|
124
|
-
if (!
|
|
349
|
+
if (!readyForFetch) {
|
|
350
|
+
if (initialized) {
|
|
351
|
+
setState({
|
|
352
|
+
intialized: false
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
} else if (!initialized) {
|
|
125
356
|
if (loading) {
|
|
126
357
|
// once first load has begun, we are initialized
|
|
127
|
-
|
|
358
|
+
setState({
|
|
359
|
+
intialized: true
|
|
360
|
+
});
|
|
128
361
|
}
|
|
129
362
|
}
|
|
130
|
-
}, [loading]);
|
|
131
|
-
|
|
132
|
-
|
|
363
|
+
}, [loading, readyForFetch]);
|
|
364
|
+
/**
|
|
365
|
+
* get verses for ref
|
|
366
|
+
* @param refStr
|
|
367
|
+
* @param content_
|
|
368
|
+
*/
|
|
369
|
+
|
|
370
|
+
function _getVersesForRef(refStr) {
|
|
133
371
|
var content_ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : bookObjects;
|
|
134
372
|
|
|
135
373
|
if (content_) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (languageId === 'el-x-koine' || languageId === 'hbo') {
|
|
139
|
-
verses = verses.map(function (verse) {
|
|
140
|
-
var _verse$verseData;
|
|
141
|
-
|
|
142
|
-
if (verse !== null && verse !== void 0 && (_verse$verseData = verse.verseData) !== null && _verse$verseData !== void 0 && _verse$verseData.verseObjects) {
|
|
143
|
-
var verseObjects_ = core.occurrenceInjectVerseObjects(verse.verseData.verseObjects);
|
|
144
|
-
verseObjects_ = cleanupVerseObjects(verseObjects_);
|
|
145
|
-
verse.verseData.verseObjects = verseObjects_;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
return verse;
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
return verses;
|
|
374
|
+
return getVersesForRefStr(refStr, content_, languageId);
|
|
153
375
|
}
|
|
154
376
|
|
|
155
377
|
return null;
|
|
@@ -167,7 +389,9 @@ export function useScripture(_ref) {
|
|
|
167
389
|
bookObjects_.chapters[chapter] = _objectSpread({}, bookObjects_.chapters[chapter]); // shallow copy verses
|
|
168
390
|
|
|
169
391
|
bookObjects_.chapters[chapter][verse] = verseData;
|
|
170
|
-
|
|
392
|
+
setState({
|
|
393
|
+
bookObjects: bookObjects_
|
|
394
|
+
});
|
|
171
395
|
return bookObjects_;
|
|
172
396
|
}
|
|
173
397
|
}
|
|
@@ -176,41 +400,95 @@ export function useScripture(_ref) {
|
|
|
176
400
|
return null;
|
|
177
401
|
}
|
|
178
402
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
var _ref5 = "".concat(reference.chapter, ":").concat(reference.verse);
|
|
403
|
+
function updateVersesForRef() {
|
|
404
|
+
var _bookObjects = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bookObjects;
|
|
182
405
|
|
|
183
|
-
|
|
406
|
+
var newVersesForRef = [];
|
|
184
407
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
408
|
+
if (_bookObjects) {
|
|
409
|
+
newVersesForRef = getVersesForRef(reference, _bookObjects, languageId);
|
|
410
|
+
return newVersesForRef;
|
|
188
411
|
}
|
|
189
|
-
}, [bookObjects]);
|
|
190
|
-
useEffect(function () {
|
|
191
|
-
setBookObjects(content);
|
|
192
|
-
}, [content]);
|
|
193
412
|
|
|
194
|
-
|
|
195
|
-
verseObjects = core.occurrenceInjectVerseObjects(verseObjects);
|
|
196
|
-
verseObjects = cleanupVerseObjects(verseObjects);
|
|
413
|
+
return null;
|
|
197
414
|
}
|
|
415
|
+
/**
|
|
416
|
+
* force reload of current resource
|
|
417
|
+
* @param {string|undefined} ignoreSha - optional sha to ignore
|
|
418
|
+
*/
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
function reloadResource() {
|
|
422
|
+
var ignoreSha = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
423
|
+
|
|
424
|
+
var _reloadResource = _resourceResults === null || _resourceResults === void 0 ? void 0 : _resourceResults.actions.reloadResource;
|
|
425
|
+
|
|
426
|
+
if (_reloadResource) {
|
|
427
|
+
var newState = {
|
|
428
|
+
fetched: false
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
if (ignoreSha) {
|
|
432
|
+
// TRICKY - if the response was for this sha (which was the previous sha) then we need to ignore it
|
|
433
|
+
newState['ignoreSha'] = ignoreSha;
|
|
434
|
+
}
|
|
198
435
|
|
|
436
|
+
setState(newState);
|
|
437
|
+
|
|
438
|
+
_reloadResource();
|
|
439
|
+
}
|
|
440
|
+
} // @ts-ignore
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
var currentBookRef = fetchParams === null || fetchParams === void 0 ? void 0 : (_fetchParams$referenc = fetchParams.reference) === null || _fetchParams$referenc === void 0 ? void 0 : _fetchParams$referenc.projectId;
|
|
444
|
+
useEffect(function () {
|
|
445
|
+
if (currentBookRef) {
|
|
446
|
+
console.log("useScripture fetched book changed to ".concat(currentBookRef, ", ").concat(resourceLink_), {
|
|
447
|
+
content: content,
|
|
448
|
+
fetchParams: fetchParams
|
|
449
|
+
});
|
|
450
|
+
setState({
|
|
451
|
+
bookObjects: null
|
|
452
|
+
});
|
|
453
|
+
} // @ts-ignore
|
|
454
|
+
|
|
455
|
+
}, [currentBookRef]);
|
|
456
|
+
useEffect(function () {
|
|
457
|
+
console.log("useScripture book ref changed to ".concat(_bookId, ", ").concat(resourceLink_)); // @ts-ignore
|
|
458
|
+
}, [_bookId]);
|
|
459
|
+
useEffect(function () {
|
|
460
|
+
var expectedBookId = _bookId || '';
|
|
461
|
+
var fetchedBookSame = fetchedBook && fetchedBook === expectedBookId;
|
|
462
|
+
var _versesForRef = [];
|
|
463
|
+
|
|
464
|
+
if (!fetchedBookSame) {// if (expectedBookId && fetchedBook) {
|
|
465
|
+
// console.log(`useScripture expected book ${expectedBookId} but fetched book was ${fetchedBook} - clearing`)
|
|
466
|
+
// }
|
|
467
|
+
} else {
|
|
468
|
+
var _bookObjects = fetchedBookSame ? bookObjects : null;
|
|
469
|
+
|
|
470
|
+
_versesForRef = updateVersesForRef(_bookObjects); // console.log(`useScripture _bookObjects is ${!!_bookObjects} and books are the same ${fetchedBook}`, { content, fetchParams })
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
if (!isEqual(_versesForRef, versesForRef)) {
|
|
474
|
+
setState({
|
|
475
|
+
versesForRef: _versesForRef
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
}, [reference]);
|
|
199
479
|
return {
|
|
200
|
-
title: title,
|
|
201
|
-
version: version,
|
|
202
|
-
reference: reference,
|
|
203
|
-
resourceLink: resourceLink,
|
|
204
|
-
matchedVerse: matchedVerse,
|
|
205
|
-
verseObjects: verseObjects,
|
|
206
480
|
bookObjects: bookObjects,
|
|
207
|
-
resourceStatus: resourceStatus,
|
|
208
481
|
fetchResponse: fetchResponse,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
482
|
+
getVersesForRef: _getVersesForRef,
|
|
483
|
+
matchedVerse: matchedVerse,
|
|
484
|
+
reference: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.reference,
|
|
485
|
+
reloadResource: reloadResource,
|
|
486
|
+
resourceLink: fetchParams === null || fetchParams === void 0 ? void 0 : fetchParams.resourceLink,
|
|
487
|
+
resourceStatus: resourceStatus,
|
|
488
|
+
title: title,
|
|
212
489
|
updateVerse: updateVerse,
|
|
213
|
-
|
|
490
|
+
version: version,
|
|
491
|
+
versesForRef: versesForRef
|
|
214
492
|
};
|
|
215
493
|
}
|
|
216
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmUudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImNvcmUiLCJ1c2VSc3JjIiwiQ09OVEVOVF9OT1RfRk9VTkRfRVJST1IiLCJFUlJPUl9TVEFURSIsIklOSVRJQUxJWkVEX1NUQVRFIiwiSU5WQUxJRF9NQU5JRkVTVF9FUlJPUiIsIkxPQURJTkdfU1RBVEUiLCJNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SIiwiU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1IiLCJnZXRWZXJzZXMiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZ2V0UmVzb3VyY2VMaW5rIiwiU2VydmVyQ29uZmlnIiwiU2NyaXB0dXJlUmVzb3VyY2UiLCJTY3JpcHR1cmVSZWZlcmVuY2UiLCJwYXJzZVJlc291cmNlTWFuaWZlc3QiLCJ1c2VTY3JpcHR1cmUiLCJjb25maWciLCJyZWZlcmVuY2UiLCJyZXNvdXJjZV8iLCJyZXNvdXJjZSIsInJlc291cmNlTGlua18iLCJyZXNvdXJjZUxpbmsiLCJ3aG9sZUJvb2siLCJpbml0aWFsaXplZCIsInNldEluaXRpYWxpemVkIiwiYm9va09iamVjdHMiLCJzZXRCb29rT2JqZWN0cyIsInZlcnNlc0ZvclJlZiIsInNldFZlcnNlc0ZvclJlZiIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInByb2plY3RJZCIsImJyYW5jaCIsInJlZiIsInJlZl8iLCJyZXNvdXJjZUlkIiwib3B0aW9ucyIsImdldEJpYmxlSnNvbiIsImJvb2tSZWYiLCJjaGFwdGVyIiwic3RhdGUiLCJiaWJsZUpzb24iLCJtYXRjaGVkVmVyc2UiLCJjb250ZW50IiwibG9hZGluZ1Jlc291cmNlIiwibG9hZGluZ0NvbnRlbnQiLCJmZXRjaFJlc3BvbnNlIiwicmVsb2FkUmVzb3VyY2UiLCJhY3Rpb25zIiwidGl0bGUiLCJ2ZXJzaW9uIiwidmVyc2VPYmplY3RzIiwibG9hZGluZyIsImNvbnRlbnROb3RGb3VuZEVycm9yIiwic2NyaXB0dXJlTm90TG9hZGVkRXJyb3IiLCJtYW5pZmVzdE5vdEZvdW5kRXJyb3IiLCJtYW5pZmVzdCIsImludmFsaWRNYW5pZmVzdEVycm9yIiwiZXJyb3IiLCJyZXNvdXJjZVN0YXR1cyIsImdldFZlcnNlc0ZvclJlZiIsImNvbnRlbnRfIiwidmVyc2VzIiwiY2hhcHRlcnMiLCJtYXAiLCJ2ZXJzZSIsInZlcnNlRGF0YSIsInZlcnNlT2JqZWN0c18iLCJvY2N1cnJlbmNlSW5qZWN0VmVyc2VPYmplY3RzIiwidXBkYXRlVmVyc2UiLCJib29rT2JqZWN0c18iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFNBQVNBLFNBQVQsRUFBb0JDLE9BQXBCLEVBQTZCQyxRQUE3QixRQUE2QyxPQUE3QztBQUNBLFNBQ0VDLElBREYsRUFFRUMsT0FGRixRQUdPLHlCQUhQO0FBSUEsU0FDRUMsdUJBREYsRUFFRUMsV0FGRixFQUdFQyxpQkFIRixFQUlFQyxzQkFKRixFQUtFQyxhQUxGLEVBTUVDLHlCQU5GLEVBT0VDLDBCQVBGLFFBUU8sdUJBUlA7QUFTQSxTQUFTQyxTQUFULFFBQTBCLHVCQUExQjtBQUNBLFNBQVNDLG1CQUFULEVBQThCQyxlQUE5QixRQUFxRCw0QkFBckQ7QUFDQSxTQUNFQyxZQURGLEVBRUVDLGlCQUZGLEVBR0VDLGtCQUhGLFFBSU8sVUFKUDtBQUtBLFNBQVNDLHFCQUFULFFBQXNDLHlCQUF0QztBQWVBLE9BQU8sU0FBU0MsWUFBVCxPQU1JO0FBQUE7O0FBQUEsTUFMVEMsTUFLUyxRQUxUQSxNQUtTO0FBQUEsTUFKVEMsU0FJUyxRQUpUQSxTQUlTO0FBQUEsTUFIQ0MsU0FHRCxRQUhUQyxRQUdTO0FBQUEsTUFGS0MsYUFFTCxRQUZUQyxZQUVTO0FBQUEsNEJBRFRDLFNBQ1M7QUFBQSxNQURUQSxTQUNTLCtCQURHLEtBQ0g7O0FBQUEsa0JBQzZCeEIsUUFBUSxDQUFDLEtBQUQsQ0FEckM7QUFBQTtBQUFBLE1BQ0Z5QixXQURFO0FBQUEsTUFDV0MsY0FEWDs7QUFBQSxtQkFFNkIxQixRQUFRLENBQUMsSUFBRCxDQUZyQztBQUFBO0FBQUEsTUFFRjJCLFdBRkU7QUFBQSxNQUVXQyxjQUZYOztBQUFBLG1CQUcrQjVCLFFBQVEsQ0FBQyxJQUFELENBSHZDO0FBQUE7QUFBQSxNQUdGNkIsWUFIRTtBQUFBLE1BR1lDLGVBSFo7O0FBSVQsTUFBSVAsWUFBWSxHQUFHRCxhQUFuQjs7QUFFQSxNQUFJLENBQUNBLGFBQUQsSUFBa0JGLFNBQXRCLEVBQWlDO0FBQUEsZ0JBTzNCQSxTQUFTLElBQUksRUFQYztBQUFBLFFBRTdCVyxLQUY2QixTQUU3QkEsS0FGNkI7QUFBQSxRQUc3QkMsV0FINkIsU0FHN0JBLFVBSDZCO0FBQUEsUUFJN0JDLFNBSjZCLFNBSTdCQSxTQUo2QjtBQUFBLDZCQUs3QkMsTUFMNkI7QUFBQSxRQUs3QkEsTUFMNkIsNkJBS3BCLFFBTG9CO0FBQUEsMEJBTTdCQyxHQU42QjtBQUFBLFFBTTdCQSxHQU42QiwwQkFNdkIsSUFOdUI7O0FBUS9CLFFBQU1DLElBQUksR0FBR0QsR0FBRyxJQUFJRCxNQUFwQjtBQUNBWCxJQUFBQSxZQUFZLEdBQUdYLGVBQWUsQ0FBQztBQUM3Qm1CLE1BQUFBLEtBQUssRUFBTEEsS0FENkI7QUFFN0JDLE1BQUFBLFVBQVUsRUFBVkEsV0FGNkI7QUFHN0JLLE1BQUFBLFVBQVUsRUFBRUosU0FIaUI7QUFJN0JFLE1BQUFBLEdBQUcsRUFBRUM7QUFKd0IsS0FBRCxDQUE5QjtBQU1EOztBQUVELE1BQU1FLE9BQU8sR0FBRztBQUFFQyxJQUFBQSxZQUFZLEVBQUU7QUFBaEIsR0FBaEI7QUFDQSxNQUFNQyxPQUFPLEdBQUd6QyxPQUFPLENBQUMsWUFBTTtBQUM1QixRQUFNeUMsT0FBTyxxQkFBUXJCLFNBQVIsQ0FBYjs7QUFFQSxRQUFJSyxTQUFKLEVBQWU7QUFDYixhQUFPZ0IsT0FBTyxDQUFDQyxPQUFmLENBRGEsQ0FDVTtBQUN4Qjs7QUFDRCxXQUFPRCxPQUFQO0FBQ0QsR0FQc0IsRUFPcEIsQ0FBQ3JCLFNBQUQsRUFBWUssU0FBWixDQVBvQixDQUF2Qjs7QUF4QlMsaUJBNENMdEIsT0FBTyxDQUFDO0FBQ1ZnQixJQUFBQSxNQUFNLEVBQU5BLE1BRFU7QUFDRkMsSUFBQUEsU0FBUyxFQUFFcUIsT0FEVDtBQUNrQmpCLElBQUFBLFlBQVksRUFBWkEsWUFEbEI7QUFDZ0NlLElBQUFBLE9BQU8sRUFBUEE7QUFEaEMsR0FBRCxDQTVDRjtBQUFBLGdDQWtDUEksS0FsQ087QUFBQSxNQW1DTEMsU0FuQ0ssa0JBbUNMQSxTQW5DSztBQUFBLE1Bb0NMQyxZQXBDSyxrQkFvQ0xBLFlBcENLO0FBQUEsTUFxQ0x2QixRQXJDSyxrQkFxQ0xBLFFBckNLO0FBQUEsTUFzQ0x3QixPQXRDSyxrQkFzQ0xBLE9BdENLO0FBQUEsTUF1Q0xDLGVBdkNLLGtCQXVDTEEsZUF2Q0s7QUFBQSxNQXdDTEMsY0F4Q0ssa0JBd0NMQSxjQXhDSztBQUFBLE1BeUNMQyxhQXpDSyxrQkF5Q0xBLGFBekNLO0FBQUEsTUEyQ0lDLGNBM0NKLFlBMkNQQyxPQTNDTyxDQTJDSUQsY0EzQ0o7O0FBQUEsOEJBZ0RrQmpDLHFCQUFxQixDQUFDSyxRQUFELENBaER2QztBQUFBLE1BZ0REOEIsS0FoREMseUJBZ0REQSxLQWhEQztBQUFBLE1BZ0RNQyxPQWhETix5QkFnRE1BLE9BaEROOztBQUFBLGNBaURjVCxTQUFTLElBQUksRUFqRDNCO0FBQUEsTUFpREhVLFlBakRHLFNBaURIQSxZQWpERzs7QUFBQSxjQWtEY2pDLFNBQVMsSUFBSSxFQWxEM0I7QUFBQSxNQWtERFksVUFsREMsU0FrRERBLFVBbERDOztBQW1EVCxNQUFNc0IsT0FBTyxHQUFHUixlQUFlLElBQUlDLGNBQW5DO0FBQ0EsTUFBTVEsb0JBQW9CLEdBQUcsQ0FBQ1YsT0FBOUI7QUFDQSxNQUFNVyx1QkFBdUIsR0FBRyxDQUFDYixTQUFqQztBQUNBLE1BQU1jLHFCQUFxQixHQUFHLEVBQUNwQyxRQUFELGFBQUNBLFFBQUQsZUFBQ0EsUUFBUSxDQUFFcUMsUUFBWCxDQUE5QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLENBQUNSLEtBQUQsSUFBVSxDQUFDQyxPQUFYLElBQXNCLENBQUNwQixVQUFwRDtBQUNBLE1BQU00QixLQUFLLEdBQUduQyxXQUFXLElBQUksQ0FBQzZCLE9BQWhCLEtBQ1hDLG9CQUFvQixJQUFJQyx1QkFBeEIsSUFBbURDLHFCQUFuRCxJQUE0RUUsb0JBRGpFLENBQWQ7QUFFQSxNQUFNRSxjQUFjLDJEQUNqQnRELGFBRGlCLEVBQ0QrQyxPQURDLG9DQUVqQm5ELHVCQUZpQixFQUVTb0Qsb0JBRlQsb0NBR2pCOUMsMEJBSGlCLEVBR1krQyx1QkFIWixvQ0FJakJoRCx5QkFKaUIsRUFJV2lELHFCQUpYLG9DQUtqQm5ELHNCQUxpQixFQUtRcUQsb0JBTFIsb0NBTWpCdkQsV0FOaUIsRUFNSHdELEtBTkcsb0NBT2pCdkQsaUJBUGlCLEVBT0dvQixXQVBILG1CQUFwQjtBQVVBM0IsRUFBQUEsU0FBUyxDQUFDLFlBQU07QUFDZCxRQUFJLENBQUMyQixXQUFMLEVBQWtCO0FBQ2hCLFVBQUk2QixPQUFKLEVBQWE7QUFBRTtBQUNiNUIsUUFBQUEsY0FBYyxDQUFDLElBQUQsQ0FBZDtBQUNEO0FBQ0Y7QUFDRixHQU5RLEVBTU4sQ0FBQzRCLE9BQUQsQ0FOTSxDQUFUOztBQVFBLFdBQVNRLGVBQVQsQ0FBeUIzQixHQUF6QixFQUFzRDtBQUFBLFFBQXhCNEIsUUFBd0IsdUVBQWJwQyxXQUFhOztBQUNwRCxRQUFJb0MsUUFBSixFQUFjO0FBQ1osVUFBSUMsTUFBTSxHQUFHdEQsU0FBUyxDQUFDcUQsUUFBUSxDQUFDRSxRQUFWLEVBQW9COUIsR0FBcEIsQ0FBdEI7O0FBRUEsVUFBSUgsVUFBVSxLQUFLLFlBQWYsSUFBK0JBLFVBQVUsS0FBSyxLQUFsRCxFQUF5RDtBQUN2RGdDLFFBQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDRSxHQUFQLENBQVcsVUFBQUMsS0FBSyxFQUFJO0FBQUE7O0FBQzNCLGNBQUtBLEtBQUwsYUFBS0EsS0FBTCxtQ0FBS0EsS0FBSyxDQUFFQyxTQUFaLDZDQUFLLGlCQUFrQmYsWUFBdkIsRUFBcUM7QUFDbkMsZ0JBQUlnQixhQUFhLEdBQUdwRSxJQUFJLENBQUNxRSw0QkFBTCxDQUFtQ0gsS0FBSyxDQUFDQyxTQUFOLENBQWdCZixZQUFuRCxDQUFwQjtBQUNBZ0IsWUFBQUEsYUFBYSxHQUFHMUQsbUJBQW1CLENBQUMwRCxhQUFELENBQW5DO0FBQ0FGLFlBQUFBLEtBQUssQ0FBQ0MsU0FBTixDQUFnQmYsWUFBaEIsR0FBK0JnQixhQUEvQjtBQUNEOztBQUNELGlCQUFPRixLQUFQO0FBQ0QsU0FQUSxDQUFUO0FBUUQ7O0FBRUQsYUFBT0gsTUFBUDtBQUNEOztBQUNELFdBQU8sSUFBUDtBQUNEOztBQUVELFdBQVNPLFdBQVQsQ0FBcUI5QixPQUFyQixFQUE4QjBCLEtBQTlCLEVBQXFDQyxTQUFyQyxFQUFnRDtBQUM5QyxRQUFJekMsV0FBSixFQUFpQjtBQUNmLFVBQU02QyxZQUFZLHFCQUFRN0MsV0FBUixDQUFsQixDQURlLENBQ3lCOzs7QUFFeEMsVUFBSTZDLFlBQUosYUFBSUEsWUFBSixlQUFJQSxZQUFZLENBQUVQLFFBQWxCLEVBQTRCO0FBQzFCTyxRQUFBQSxZQUFZLENBQUNQLFFBQWIscUJBQTZCTyxZQUFZLENBQUNQLFFBQTFDLEVBRDBCLENBQzJCOztBQUVyRCxZQUFJTyxZQUFZLENBQUNQLFFBQWIsQ0FBc0J4QixPQUF0QixDQUFKLEVBQW9DO0FBQ2xDK0IsVUFBQUEsWUFBWSxDQUFDUCxRQUFiLENBQXNCeEIsT0FBdEIsc0JBQXNDK0IsWUFBWSxDQUFDUCxRQUFiLENBQXNCeEIsT0FBdEIsQ0FBdEMsRUFEa0MsQ0FDcUM7O0FBQ3ZFK0IsVUFBQUEsWUFBWSxDQUFDUCxRQUFiLENBQXNCeEIsT0FBdEIsRUFBK0IwQixLQUEvQixJQUF3Q0MsU0FBeEM7QUFDQXhDLFVBQUFBLGNBQWMsQ0FBQzRDLFlBQUQsQ0FBZDtBQUNBLGlCQUFPQSxZQUFQO0FBQ0Q7QUFDRjtBQUNGOztBQUNELFdBQU8sSUFBUDtBQUNEOztBQUVEMUUsRUFBQUEsU0FBUyxDQUFDLFlBQU07QUFDZCxRQUFJNkIsV0FBSixFQUFpQjtBQUNmLFVBQU1RLEtBQUcsYUFBTWhCLFNBQVMsQ0FBQ3NCLE9BQWhCLGNBQTJCdEIsU0FBUyxDQUFDZ0QsS0FBckMsQ0FBVDs7QUFDQSxVQUFNdEMsYUFBWSxHQUFHaUMsZUFBZSxDQUFDM0IsS0FBRCxFQUFNUixXQUFOLENBQXBDOztBQUNBRyxNQUFBQSxlQUFlLENBQUNELGFBQUQsQ0FBZjtBQUNELEtBSkQsTUFJTztBQUNMQyxNQUFBQSxlQUFlLENBQUMsSUFBRCxDQUFmO0FBQ0Q7QUFDRixHQVJRLEVBUU4sQ0FBQ0gsV0FBRCxDQVJNLENBQVQ7QUFVQTdCLEVBQUFBLFNBQVMsQ0FBQyxZQUFNO0FBQ2Q4QixJQUFBQSxjQUFjLENBQUNpQixPQUFELENBQWQ7QUFDRCxHQUZRLEVBRU4sQ0FBQ0EsT0FBRCxDQUZNLENBQVQ7O0FBSUEsTUFBSWIsVUFBVSxLQUFLLFlBQWYsSUFBK0JBLFVBQVUsS0FBSyxLQUFsRCxFQUF5RDtBQUN2RHFCLElBQUFBLFlBQVksR0FBR3BELElBQUksQ0FBQ3FFLDRCQUFMLENBQWtDakIsWUFBbEMsQ0FBZjtBQUNBQSxJQUFBQSxZQUFZLEdBQUcxQyxtQkFBbUIsQ0FBQzBDLFlBQUQsQ0FBbEM7QUFDRDs7QUFFRCxTQUFPO0FBQ0xGLElBQUFBLEtBQUssRUFBTEEsS0FESztBQUVMQyxJQUFBQSxPQUFPLEVBQVBBLE9BRks7QUFHTGpDLElBQUFBLFNBQVMsRUFBVEEsU0FISztBQUlMSSxJQUFBQSxZQUFZLEVBQVpBLFlBSks7QUFLTHFCLElBQUFBLFlBQVksRUFBWkEsWUFMSztBQU1MUyxJQUFBQSxZQUFZLEVBQVpBLFlBTks7QUFPTDFCLElBQUFBLFdBQVcsRUFBWEEsV0FQSztBQVFMa0MsSUFBQUEsY0FBYyxFQUFkQSxjQVJLO0FBU0xiLElBQUFBLGFBQWEsRUFBYkEsYUFUSztBQVVMcEIsSUFBQUEsY0FBYyxFQUFkQSxjQVZLO0FBV0xrQyxJQUFBQSxlQUFlLEVBQWZBLGVBWEs7QUFZTGpDLElBQUFBLFlBQVksRUFBWkEsWUFaSztBQWFMMEMsSUFBQUEsV0FBVyxFQUFYQSxXQWJLO0FBY0x0QixJQUFBQSxjQUFjLEVBQWRBO0FBZEssR0FBUDtBQWdCRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIGNvcmUsXG4gIHVzZVJzcmMsXG59IGZyb20gJ3NjcmlwdHVyZS1yZXNvdXJjZXMtcmNsJ1xuaW1wb3J0IHtcbiAgQ09OVEVOVF9OT1RfRk9VTkRfRVJST1IsXG4gIEVSUk9SX1NUQVRFLFxuICBJTklUSUFMSVpFRF9TVEFURSxcbiAgSU5WQUxJRF9NQU5JRkVTVF9FUlJPUixcbiAgTE9BRElOR19TVEFURSxcbiAgTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUixcbiAgU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IGdldFZlcnNlcyB9IGZyb20gJ2JpYmxlLXJlZmVyZW5jZS1yYW5nZSdcbmltcG9ydCB7IGNsZWFudXBWZXJzZU9iamVjdHMsIGdldFJlc291cmNlTGluayB9IGZyb20gJy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgU2VydmVyQ29uZmlnLFxuICBTY3JpcHR1cmVSZXNvdXJjZSxcbiAgU2NyaXB0dXJlUmVmZXJlbmNlLFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHBhcnNlUmVzb3VyY2VNYW5pZmVzdCB9IGZyb20gJy4vcGFyc2VSZXNvdXJjZU1hbmlmZXN0J1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAvKiogcmVmZXJlbmNlIGZvciBzY3JpcHR1cmUgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvKiogd2hlcmUgdG8gZ2V0IGRhdGEgKiovXG4gIGNvbmZpZzogU2VydmVyQ29uZmlnO1xuICAvKiogb3B0aW9uYWwgZGlyZWN0IHBhdGggdG8gYmlibGUgcmVzb3VyY2UsIGluIGZvcm1hdCAke293bmVyfS8ke2xhbmd1YWdlSWR9LyR7cHJvamVjdElkfS8ke2JyYW5jaH0gKiovXG4gIHJlc291cmNlTGluazogc3RyaW5nfHVuZGVmaW5lZDtcbiAgLyoqIG9wdGlvbmFsIHJlc291cmNlIG9iamVjdCB0byB1c2UgdG8gYnVpbGQgcmVzb3VyY2VMaW5rICoqL1xuICByZXNvdXJjZTogU2NyaXB0dXJlUmVzb3VyY2V8dW5kZWZpbmVkO1xuICAvKiogaWYgdHJ1ZSB0aGVuIGZldGNoIHRoZSBlbnRpcmUgYm9vayAqL1xuICB3aG9sZUJvb2s6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTY3JpcHR1cmUoe1xuICBjb25maWcsXG4gIHJlZmVyZW5jZSxcbiAgcmVzb3VyY2U6IHJlc291cmNlXyxcbiAgcmVzb3VyY2VMaW5rOiByZXNvdXJjZUxpbmtfLFxuICB3aG9sZUJvb2sgPSBmYWxzZSxcbn0gOiBQcm9wcykge1xuICBjb25zdCBbaW5pdGlhbGl6ZWQsIHNldEluaXRpYWxpemVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbYm9va09iamVjdHMsIHNldEJvb2tPYmplY3RzXSA9IHVzZVN0YXRlKG51bGwpXG4gIGNvbnN0IFt2ZXJzZXNGb3JSZWYsIHNldFZlcnNlc0ZvclJlZl0gPSB1c2VTdGF0ZShudWxsKVxuICBsZXQgcmVzb3VyY2VMaW5rID0gcmVzb3VyY2VMaW5rX1xuXG4gIGlmICghcmVzb3VyY2VMaW5rXyAmJiByZXNvdXJjZV8pIHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lcixcbiAgICAgIGxhbmd1YWdlSWQsXG4gICAgICBwcm9qZWN0SWQsXG4gICAgICBicmFuY2ggPSAnbWFzdGVyJyxcbiAgICAgIHJlZiA9IG51bGwsXG4gICAgfSA9IHJlc291cmNlXyB8fCB7fVxuICAgIGNvbnN0IHJlZl8gPSByZWYgfHwgYnJhbmNoXG4gICAgcmVzb3VyY2VMaW5rID0gZ2V0UmVzb3VyY2VMaW5rKHtcbiAgICAgIG93bmVyLFxuICAgICAgbGFuZ3VhZ2VJZCxcbiAgICAgIHJlc291cmNlSWQ6IHByb2plY3RJZCxcbiAgICAgIHJlZjogcmVmXyxcbiAgICB9KVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgZ2V0QmlibGVKc29uOiB0cnVlIH1cbiAgY29uc3QgYm9va1JlZiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tSZWYgPSB7IC4uLnJlZmVyZW5jZSB9XG5cbiAgICBpZiAod2hvbGVCb29rKSB7XG4gICAgICBkZWxldGUgYm9va1JlZi5jaGFwdGVyIC8vIHJlbW92ZSB0aGUgY2hhcHRlciBzbyB0aGUgd2hvbGUgYm9vayBpcyBmZXRjaGVkXG4gICAgfVxuICAgIHJldHVybiBib29rUmVmXG4gIH0sIFtyZWZlcmVuY2UsIHdob2xlQm9va10pXG5cbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBiaWJsZUpzb24sXG4gICAgICBtYXRjaGVkVmVyc2UsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGNvbnRlbnQsXG4gICAgICBsb2FkaW5nUmVzb3VyY2UsXG4gICAgICBsb2FkaW5nQ29udGVudCxcbiAgICAgIGZldGNoUmVzcG9uc2UsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7IHJlbG9hZFJlc291cmNlIH0sXG4gIH0gPSB1c2VSc3JjKHtcbiAgICBjb25maWcsIHJlZmVyZW5jZTogYm9va1JlZiwgcmVzb3VyY2VMaW5rLCBvcHRpb25zLFxuICB9KVxuXG4gIGNvbnN0IHsgdGl0bGUsIHZlcnNpb24gfSA9IHBhcnNlUmVzb3VyY2VNYW5pZmVzdChyZXNvdXJjZSlcbiAgbGV0IHsgdmVyc2VPYmplY3RzIH0gPSBiaWJsZUpzb24gfHwge31cbiAgY29uc3QgeyBsYW5ndWFnZUlkIH0gPSByZXNvdXJjZV8gfHwge31cbiAgY29uc3QgbG9hZGluZyA9IGxvYWRpbmdSZXNvdXJjZSB8fCBsb2FkaW5nQ29udGVudFxuICBjb25zdCBjb250ZW50Tm90Rm91bmRFcnJvciA9ICFjb250ZW50XG4gIGNvbnN0IHNjcmlwdHVyZU5vdExvYWRlZEVycm9yID0gIWJpYmxlSnNvblxuICBjb25zdCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgPSAhcmVzb3VyY2U/Lm1hbmlmZXN0XG4gIGNvbnN0IGludmFsaWRNYW5pZmVzdEVycm9yID0gIXRpdGxlIHx8ICF2ZXJzaW9uIHx8ICFsYW5ndWFnZUlkXG4gIGNvbnN0IGVycm9yID0gaW5pdGlhbGl6ZWQgJiYgIWxvYWRpbmcgJiZcbiAgICAoY29udGVudE5vdEZvdW5kRXJyb3IgfHwgc2NyaXB0dXJlTm90TG9hZGVkRXJyb3IgfHwgbWFuaWZlc3ROb3RGb3VuZEVycm9yIHx8IGludmFsaWRNYW5pZmVzdEVycm9yKVxuICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHtcbiAgICBbTE9BRElOR19TVEFURV06IGxvYWRpbmcsXG4gICAgW0NPTlRFTlRfTk9UX0ZPVU5EX0VSUk9SXTogY29udGVudE5vdEZvdW5kRXJyb3IsXG4gICAgW1NDUklQVFVSRV9OT1RfTE9BREVEX0VSUk9SXTogc2NyaXB0dXJlTm90TG9hZGVkRXJyb3IsXG4gICAgW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdOiBtYW5pZmVzdE5vdEZvdW5kRXJyb3IsXG4gICAgW0lOVkFMSURfTUFOSUZFU1RfRVJST1JdOiBpbnZhbGlkTWFuaWZlc3RFcnJvcixcbiAgICBbRVJST1JfU1RBVEVdOiBlcnJvcixcbiAgICBbSU5JVElBTElaRURfU1RBVEVdOiBpbml0aWFsaXplZCxcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgaWYgKGxvYWRpbmcpIHsgLy8gb25jZSBmaXJzdCBsb2FkIGhhcyBiZWd1biwgd2UgYXJlIGluaXRpYWxpemVkXG4gICAgICAgIHNldEluaXRpYWxpemVkKHRydWUpXG4gICAgICB9XG4gICAgfVxuICB9LCBbbG9hZGluZ10pXG5cbiAgZnVuY3Rpb24gZ2V0VmVyc2VzRm9yUmVmKHJlZiwgY29udGVudF8gPSBib29rT2JqZWN0cykge1xuICAgIGlmIChjb250ZW50Xykge1xuICAgICAgbGV0IHZlcnNlcyA9IGdldFZlcnNlcyhjb250ZW50Xy5jaGFwdGVycywgcmVmKVxuXG4gICAgICBpZiAobGFuZ3VhZ2VJZCA9PT0gJ2VsLXgta29pbmUnIHx8IGxhbmd1YWdlSWQgPT09ICdoYm8nKSB7XG4gICAgICAgIHZlcnNlcyA9IHZlcnNlcy5tYXAodmVyc2UgPT4ge1xuICAgICAgICAgIGlmICggdmVyc2U/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgICBsZXQgdmVyc2VPYmplY3RzXyA9IGNvcmUub2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyggdmVyc2UudmVyc2VEYXRhLnZlcnNlT2JqZWN0cylcbiAgICAgICAgICAgIHZlcnNlT2JqZWN0c18gPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0c18pXG4gICAgICAgICAgICB2ZXJzZS52ZXJzZURhdGEudmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzX1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmVyc2VcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZlcnNlc1xuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVmVyc2UoY2hhcHRlciwgdmVyc2UsIHZlcnNlRGF0YSkge1xuICAgIGlmIChib29rT2JqZWN0cykge1xuICAgICAgY29uc3QgYm9va09iamVjdHNfID0geyAuLi5ib29rT2JqZWN0cyB9IC8vIHNoYWxsb3cgY29weVxuXG4gICAgICBpZiAoYm9va09iamVjdHNfPy5jaGFwdGVycykge1xuICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnMgPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVycyB9IC8vIHNoYWxsb3cgY29weSBjaGFwdGVyc1xuXG4gICAgICAgIGlmIChib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0pIHtcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0gPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVyc1tjaGFwdGVyXSB9IC8vIHNoYWxsb3cgY29weSB2ZXJzZXNcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl1bdmVyc2VdID0gdmVyc2VEYXRhXG4gICAgICAgICAgc2V0Qm9va09iamVjdHMoYm9va09iamVjdHNfKVxuICAgICAgICAgIHJldHVybiBib29rT2JqZWN0c19cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYm9va09iamVjdHMpIHtcbiAgICAgIGNvbnN0IHJlZiA9IGAke3JlZmVyZW5jZS5jaGFwdGVyfToke3JlZmVyZW5jZS52ZXJzZX1gXG4gICAgICBjb25zdCB2ZXJzZXNGb3JSZWYgPSBnZXRWZXJzZXNGb3JSZWYocmVmLCBib29rT2JqZWN0cylcbiAgICAgIHNldFZlcnNlc0ZvclJlZih2ZXJzZXNGb3JSZWYpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZlcnNlc0ZvclJlZihudWxsKVxuICAgIH1cbiAgfSwgW2Jvb2tPYmplY3RzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEJvb2tPYmplY3RzKGNvbnRlbnQpXG4gIH0sIFtjb250ZW50XSlcblxuICBpZiAobGFuZ3VhZ2VJZCA9PT0gJ2VsLXgta29pbmUnIHx8IGxhbmd1YWdlSWQgPT09ICdoYm8nKSB7XG4gICAgdmVyc2VPYmplY3RzID0gY29yZS5vY2N1cnJlbmNlSW5qZWN0VmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgICB2ZXJzZU9iamVjdHMgPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGl0bGUsXG4gICAgdmVyc2lvbixcbiAgICByZWZlcmVuY2UsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIG1hdGNoZWRWZXJzZSxcbiAgICB2ZXJzZU9iamVjdHMsXG4gICAgYm9va09iamVjdHMsXG4gICAgcmVzb3VyY2VTdGF0dXMsXG4gICAgZmV0Y2hSZXNwb25zZSxcbiAgICBzZXRCb29rT2JqZWN0cyxcbiAgICBnZXRWZXJzZXNGb3JSZWYsXG4gICAgdmVyc2VzRm9yUmVmLFxuICAgIHVwZGF0ZVZlcnNlLFxuICAgIHJlbG9hZFJlc291cmNlLFxuICB9XG59XG4iXX0=
|
|
494
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JpcHR1cmUudHN4Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiY29yZSIsInVzZVJzcmMiLCJDT05URU5UX05PVF9GT1VORF9FUlJPUiIsIkVSUk9SX1NUQVRFIiwiSU5JVElBTElaRURfU1RBVEUiLCJJTlZBTElEX01BTklGRVNUX0VSUk9SIiwiTE9BRElOR19TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJTQ1JJUFRVUkVfTk9UX0xPQURFRF9FUlJPUiIsImdldFZlcnNlcyIsImlzRXF1YWwiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZ2V0UmVzb3VyY2VMaW5rIiwiU2VydmVyQ29uZmlnIiwiU2NyaXB0dXJlUmVzb3VyY2UiLCJTY3JpcHR1cmVSZWZlcmVuY2UiLCJwYXJzZVJlc291cmNlTWFuaWZlc3QiLCJnZXRCcmFuY2hOYW1lIiwicmVzb3VyY2VMaW5rIiwiYnJhbmNoIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsIl9wYXJ0cyIsImdldFZlcnNlc0ZvclJlZlN0ciIsInJlZlN0ciIsImJvb2tPYmplY3RzIiwibGFuZ3VhZ2VJZCIsInZlcnNlcyIsImNoYXB0ZXJzIiwibWFwIiwidmVyc2UiLCJ2ZXJzZURhdGEiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZU9iamVjdHNfIiwib2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyIsImdldFZlcnNlc0ZvclJlZiIsInJlZmVyZW5jZSIsImNoYXB0ZXIiLCJ1c2VTY3JpcHR1cmUiLCJjb25maWciLCJyZWFkeUZvckZldGNoIiwicmVzb3VyY2VfIiwicmVzb3VyY2UiLCJyZXNvdXJjZUxpbmtfIiwid2hvbGVCb29rIiwiZmV0Y2hlZEJvb2siLCJmZXRjaFBhcmFtcyIsImlnbm9yZVNoYSIsImluaXRpYWxpemVkIiwiZmV0Y2hlZCIsInJlc291cmNlU3RhdGUiLCJiaWJsZUpzb24iLCJtYXRjaGVkVmVyc2UiLCJjb250ZW50IiwibG9hZGluZ1Jlc291cmNlIiwibG9hZGluZ0NvbnRlbnQiLCJmZXRjaFJlc3BvbnNlIiwidmVyc2VzRm9yUmVmIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJfYm9va0lkIiwicHJvamVjdElkIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNvbnNvbGUiLCJsb2ciLCJvd25lciIsInJlZiIsInJlZl8iLCJyZXNvdXJjZUlkIiwiYm9va1JlZiIsIm5ld0ZldGNoUGFyYW1zIiwib3B0aW9ucyIsImdldEJpYmxlSnNvbiIsIl9yZXNvdXJjZVJlc3VsdHMiLCJjdXJyZW50UmVzb3VyY2VTdGF0ZSIsInNhbWVCb29rIiwiZXhwZWN0ZWRCb29rSWQiLCJuYW1lIiwiZXh0IiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsInNoYSIsImRhdGEiLCJ1cmwiLCJmZXRjaGVkQnJhbmNoIiwiZmV0Y2hpbmdCcmFuY2giLCJ1cGRhdGVWZXJzZXNGb3JSZWYiLCJ0aXRsZSIsInZlcnNpb24iLCJsb2FkaW5nIiwiY29udGVudE5vdEZvdW5kRXJyb3IiLCJzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciIsIm1hbmlmZXN0Tm90Rm91bmRFcnJvciIsIm1hbmlmZXN0IiwiaW52YWxpZE1hbmlmZXN0RXJyb3IiLCJlcnJvciIsInJlc291cmNlU3RhdHVzIiwiaW50aWFsaXplZCIsIl9nZXRWZXJzZXNGb3JSZWYiLCJjb250ZW50XyIsInVwZGF0ZVZlcnNlIiwiYm9va09iamVjdHNfIiwiX2Jvb2tPYmplY3RzIiwibmV3VmVyc2VzRm9yUmVmIiwicmVsb2FkUmVzb3VyY2UiLCJfcmVsb2FkUmVzb3VyY2UiLCJhY3Rpb25zIiwiY3VycmVudEJvb2tSZWYiLCJmZXRjaGVkQm9va1NhbWUiLCJfdmVyc2VzRm9yUmVmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFNBQ0VBLFNBREYsRUFFRUMsUUFGRixRQUdPLE9BSFA7QUFJQSxTQUNFQyxJQURGLEVBRUVDLE9BRkYsUUFHTyx5QkFI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QUEyQztBQUN6Q0ssTUFBQUEsUUFBUSxDQUFDO0FBQUVMLFFBQUFBLFlBQVksRUFBRXNEO0FBQWhCLE9BQUQsQ0FBUjtBQUNEO0FBQ0YsR0FsQlEsRUFrQk4sQ0FBQzNFLFNBQUQsQ0FsQk0sQ0FBVDtBQW9CQSxTQUFPO0FBQ0xYLElBQUFBLFdBQVcsRUFBWEEsV0FESztBQUVMK0IsSUFBQUEsYUFBYSxFQUFiQSxhQUZLO0FBR0xyQixJQUFBQSxlQUFlLEVBQUVpRSxnQkFIWjtBQUlMaEQsSUFBQUEsWUFBWSxFQUFaQSxZQUpLO0FBS0xoQixJQUFBQSxTQUFTLEVBQUVVLFdBQUYsYUFBRUEsV0FBRix1QkFBRUEsV0FBVyxDQUFFVixTQUxuQjtBQU1Mc0UsSUFBQUEsY0FBYyxFQUFkQSxjQU5LO0FBT0x6RixJQUFBQSxZQUFZLEVBQUU2QixXQUFGLGFBQUVBLFdBQUYsdUJBQUVBLFdBQVcsQ0FBRTdCLFlBUHRCO0FBUUxpRixJQUFBQSxjQUFjLEVBQWRBLGNBUks7QUFTTFQsSUFBQUEsS0FBSyxFQUFMQSxLQVRLO0FBVUxhLElBQUFBLFdBQVcsRUFBWEEsV0FWSztBQVdMWixJQUFBQSxPQUFPLEVBQVBBLE9BWEs7QUFZTGpDLElBQUFBLFlBQVksRUFBWkE7QUFaSyxHQUFQO0FBY0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG5pbXBvcnQge1xuICB1c2VFZmZlY3QsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIGNvcmUsXG4gIHVzZVJzcmMsXG59IGZyb20gJ3NjcmlwdHVyZS1yZXNvdXJjZXMtcmNsJ1xuaW1wb3J0IHtcbiAgQ09OVEVOVF9OT1RfRk9VTkRfRVJST1IsXG4gIEVSUk9SX1NUQVRFLFxuICBJTklUSUFMSVpFRF9TVEFURSxcbiAgSU5WQUxJRF9NQU5JRkVTVF9FUlJPUixcbiAgTE9BRElOR19TVEFURSxcbiAgTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUixcbiAgU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IGdldFZlcnNlcyB9IGZyb20gJ2JpYmxlLXJlZmVyZW5jZS1yYW5nZSdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7IGNsZWFudXBWZXJzZU9iamVjdHMsIGdldFJlc291cmNlTGluayB9IGZyb20gJy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgU2VydmVyQ29uZmlnLFxuICBTY3JpcHR1cmVSZXNvdXJjZSxcbiAgU2NyaXB0dXJlUmVmZXJlbmNlLFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHBhcnNlUmVzb3VyY2VNYW5pZmVzdCB9IGZyb20gJy4vcGFyc2VSZXNvdXJjZU1hbmlmZXN0J1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAvKiogcmVmZXJlbmNlIGZvciBzY3JpcHR1cmUgKiovXG4gIHJlZmVyZW5jZTogU2NyaXB0dXJlUmVmZXJlbmNlO1xuICAvKiogd2hlcmUgdG8gZ2V0IGRhdGEgKiovXG4gIGNvbmZpZzogU2VydmVyQ29uZmlnO1xuICAvKiogb3B0aW9uYWwgZGlyZWN0IHBhdGggdG8gYmlibGUgcmVzb3VyY2UsIGluIGZvcm1hdCAke293bmVyfS8ke2xhbmd1YWdlSWR9LyR7cHJvamVjdElkfS8ke2JyYW5jaH0gKiovXG4gIHJlc291cmNlTGluazogc3RyaW5nfHVuZGVmaW5lZDtcbiAgLyoqIG9wdGlvbmFsIHJlc291cmNlIG9iamVjdCB0byB1c2UgdG8gYnVpbGQgcmVzb3VyY2VMaW5rICoqL1xuICByZXNvdXJjZTogU2NyaXB0dXJlUmVzb3VyY2V8dW5kZWZpbmVkO1xuICAvKiogaWYgdHJ1ZSB0aGVuIGZldGNoIHRoZSBlbnRpcmUgYm9vayAqL1xuICB3aG9sZUJvb2s6IGJvb2xlYW47XG4gIC8qKiBpZiB0cnVlIHRoZW4gc2V0dGluZ3MgYXJlIHJlYWR5IGZvciBmZXRjaGluZyBkYXRhICovXG4gIHJlYWR5Rm9yRmV0Y2g6IGJvb2xlYW47XG59XG5cbi8qKlxuICogZXh0cmFjdCBicmFuY2ggZnJvbSByZXNvdXJjZSBsaW5rXG4gKiBAcGFyYW0gcmVzb3VyY2VMaW5rXG4gKi9cbmZ1bmN0aW9uIGdldEJyYW5jaE5hbWUocmVzb3VyY2VMaW5rOiBzdHJpbmcpIHtcbiAgbGV0IGJyYW5jaCA9IG51bGxcbiAgcmVzb3VyY2VMaW5rID0gcmVzb3VyY2VMaW5rIHx8ICcnXG4gIGNvbnN0IHBhcnRzID0gcmVzb3VyY2VMaW5rLnNwbGl0KCc/cmVmPScpXG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHsgLy8gaWYgcmVmIHBhcmFtZXRlciBmb3VuZCwgZ2V0IGJyYW5jaCBuYW1lIGFmdGVyXG4gICAgYnJhbmNoID0gcGFydHM/LlsxXVxuICB9IGVsc2UgeyAvLyBmYWxsIGJhY2sgdG8gdXNpbmcgdXNlUnNyYyBmb3JtYXQgc3VjaCBhcyBcInVuZm9sZGluZ1dvcmQvZW4vdXN0L21hc3RlclwiXG4gICAgY29uc3QgX3BhcnRzID0gcmVzb3VyY2VMaW5rLnNwbGl0KCcvJylcbiAgICBicmFuY2ggPSBfcGFydHM/LlszXVxuICB9XG4gIHJldHVybiBicmFuY2hcbn1cblxuLyoqXG4gKiBnZXQgdGhlIHZlcnNlIG9iamVjdHMgZm9yIHRoZSByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmU3RyIC0gaW4gZm9ybWF0IDxjaGFwdGVyPjo8dmVyc2U+XG4gKiBAcGFyYW0ge29iamVjdH0gYm9va09iamVjdHMgLSBwYXJzZWQgdXNmbSBmb3IgYm9va1xuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlSWRcbiAqIEByZXR1cm4ge2FycmF5fG51bGx9IC0gb2YgdmVyc2VPYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzZXNGb3JSZWZTdHIocmVmU3RyLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZCkge1xuICBpZiAoYm9va09iamVjdHMpIHtcbiAgICBsZXQgdmVyc2VzID0gZ2V0VmVyc2VzKGJvb2tPYmplY3RzLmNoYXB0ZXJzLCByZWZTdHIpXG5cbiAgICBpZiAobGFuZ3VhZ2VJZCA9PT0gJ2VsLXgta29pbmUnIHx8IGxhbmd1YWdlSWQgPT09ICdoYm8nKSB7XG4gICAgICB2ZXJzZXMgPSB2ZXJzZXMubWFwKHZlcnNlID0+IHtcbiAgICAgICAgaWYgKCB2ZXJzZT8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHMpIHtcbiAgICAgICAgICBsZXQgdmVyc2VPYmplY3RzXyA9IGNvcmUub2NjdXJyZW5jZUluamVjdFZlcnNlT2JqZWN0cyggdmVyc2UudmVyc2VEYXRhLnZlcnNlT2JqZWN0cylcbiAgICAgICAgICB2ZXJzZU9iamVjdHNfID0gY2xlYW51cFZlcnNlT2JqZWN0cyh2ZXJzZU9iamVjdHNfKVxuICAgICAgICAgIHZlcnNlLnZlcnNlRGF0YS52ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHNfXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZlcnNlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB2ZXJzZXNcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIGdldCB0aGUgdmVyc2Ugb2JqZWN0cyBmb3IgdGhlIHJlZmVyZW5jZSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBib29rT2JqZWN0cyAtIHBhcnNlZCB1c2ZtIGZvciBib29rXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VJZFxuICogQHJldHVybiB7YXJyYXl8bnVsbH0gLSBvZiB2ZXJzZU9iamVjdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNlc0ZvclJlZihyZWZlcmVuY2UsIGJvb2tPYmplY3RzLCBsYW5ndWFnZUlkKSB7XG4gIGNvbnN0IHJlZlN0ciA9IGAke3JlZmVyZW5jZS5jaGFwdGVyfToke3JlZmVyZW5jZS52ZXJzZX1gXG4gIHJldHVybiBnZXRWZXJzZXNGb3JSZWZTdHIocmVmU3RyLCBib29rT2JqZWN0cywgbGFuZ3VhZ2VJZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNjcmlwdHVyZSh7IC8vIGhvb2sgZm9yIGZldGNoaW5nIHNjcmlwdHVyZVxuICBjb25maWcsXG4gIHJlYWR5Rm9yRmV0Y2gsXG4gIHJlZmVyZW5jZSxcbiAgcmVzb3VyY2U6IHJlc291cmNlXyxcbiAgcmVzb3VyY2VMaW5rOiByZXNvdXJjZUxpbmtfLFxuICB3aG9sZUJvb2sgPSBmYWxzZSxcbn0gOiBQcm9wcykge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSB1c2VTdGF0ZSh7XG4gICAgYm9va09iamVjdHM6IG51bGwsXG4gICAgZmV0Y2hlZEJvb2s6ICcnLFxuICAgIGZldGNoUGFyYW1zOiB7XG4gICAgICByZXNvdXJjZUxpbms6ICcnLFxuICAgICAgcmVmZXJlbmNlOiB7fSxcbiAgICAgIGNvbmZpZzoge30sXG4gICAgfSxcbiAgICBpZ25vcmVTaGE6IG51bGwsXG4gICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxuICAgIGZldGNoZWQ6IGZhbHNlLFxuICAgIHJlc291cmNlU3RhdGU6IHtcbiAgICAgIGJpYmxlSnNvbjogbnVsbCxcbiAgICAgIG1hdGNoZWRWZXJzZTogbnVsbCxcbiAgICAgIHJlc291cmNlOiBudWxsLFxuICAgICAgY29udGVudDogbnVsbCxcbiAgICAgIGxvYWRpbmdSZXNvdXJjZTogZmFsc2UsXG4gICAgICBsb2FkaW5nQ29udGVudDogZmFsc2UsXG4gICAgICBmZXRjaFJlc3BvbnNlOiBudWxsLFxuICAgIH0sXG4gICAgdmVyc2VzRm9yUmVmOiBbXSxcbiAgfSlcblxuICBjb25zdCB7XG4gICAgYm9va09iamVjdHMsXG4gICAgZmV0Y2hlZEJvb2ssXG4gICAgZmV0Y2hQYXJhbXMsXG4gICAgZmV0Y2hlZCxcbiAgICBpZ25vcmVTaGEsXG4gICAgaW5pdGlhbGl6ZWQsXG4gICAgcmVzb3VyY2VTdGF0ZSxcbiAgICB2ZXJzZXNGb3JSZWYsXG4gIH0gPSBzdGF0ZVxuICBjb25zdCBfYm9va0lkID0gcmVmZXJlbmNlPy5wcm9qZWN0SWRcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlYWR5Rm9yRmV0Y2gpIHtcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSByZWFkeUZvckZldGNoIHRydWUsIGluaXRpYWxpemluZ2ApXG4gICAgICBsZXQgcmVzb3VyY2VMaW5rID0gcmVhZHlGb3JGZXRjaCAmJiByZXNvdXJjZUxpbmtfXG5cbiAgICAgIGlmICghcmVzb3VyY2VMaW5rXyAmJiByZXNvdXJjZV8pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIG93bmVyLFxuICAgICAgICAgIGxhbmd1YWdlSWQsXG4gICAgICAgICAgcHJvamVjdElkLFxuICAgICAgICAgIGJyYW5jaCA9ICdtYXN0ZXInLFxuICAgICAgICAgIHJlZiA9IG51bGwsXG4gICAgICAgIH0gPSByZXNvdXJjZV8gfHwge31cbiAgICAgICAgY29uc3QgcmVmXyA9IHJlZiB8fCBicmFuY2hcblxuICAgICAgICByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoe1xuICAgICAgICAgIG93bmVyLFxuICAgICAgICAgIGxhbmd1YWdlSWQsXG4gICAgICAgICAgcmVzb3VyY2VJZDogcHJvamVjdElkLFxuICAgICAgICAgIHJlZjogcmVmXyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm9va1JlZiA9IHsgLi4ucmVmZXJlbmNlIH1cblxuICAgICAgaWYgKHdob2xlQm9vaykge1xuICAgICAgICBkZWxldGUgYm9va1JlZi5jaGFwdGVyIC8vIHJlbW92ZSB0aGUgY2hhcHRlciBhbmQgdmVyc2Ugc28gdGhlIHdob2xlIGJvb2sgaXMgZmV0Y2hlZFxuICAgICAgICBkZWxldGUgYm9va1JlZi52ZXJzZVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2VMaW5rICE9PSBmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgLSBmb3IgJHtyZXNvdXJjZV8/LnByb2plY3RJZH0gcmVzb3VyY2VMaW5rIGlzIG5vdyAke3Jlc291cmNlTGlua30gYW5kIHJlc291cmNlTGlua189JHtyZXNvdXJjZUxpbmtffWApXG4gICAgICB9IGVsc2UgaWYgKGJvb2tSZWYgIT09IGZldGNoUGFyYW1zPy5yZWZlcmVuY2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIGJvb2sgY2hhbmdlZCB0byAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7cmVzb3VyY2VMaW5rfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0ZldGNoUGFyYW1zID0ge1xuICAgICAgICByZXNvdXJjZUxpbmssXG4gICAgICAgIHJlZmVyZW5jZTogYm9va1JlZixcbiAgICAgICAgY29uZmlnLFxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRXF1YWwobmV3RmV0Y2hQYXJhbXMsIGZldGNoUGFyYW1zKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gRkVUQ0hJTkcgbmV3IHBhcmFtcyAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZXNvdXJjZUxpbmsgaXMgbm93ICR7cmVzb3VyY2VMaW5rfSBhbmQgcmVzb3VyY2VMaW5rXz0ke3Jlc291cmNlTGlua199YCwgbmV3RmV0Y2hQYXJhbXMpXG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICBmZXRjaFBhcmFtczogbmV3RmV0Y2hQYXJhbXMsXG4gICAgICAgICAgZmV0Y2hlZDogZmFsc2UsXG4gICAgICAgICAgaWdub3JlU2hhOiBudWxsLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3JlYWR5Rm9yRmV0Y2gsIF9ib29rSWQsIHJlc291cmNlTGlua19dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSAtIGZvciAke3Jlc291cmNlXz8ucHJvamVjdElkfSByZWFkeUZvckZldGNoIGlzIG5vdyAke3JlYWR5Rm9yRmV0Y2h9YClcbiAgfSwgW3JlYWR5Rm9yRmV0Y2hdKVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7IGdldEJpYmxlSnNvbjogdHJ1ZSB9XG5cbiAgY29uc3QgX3Jlc291cmNlUmVzdWx0cyA9IHVzZVJzcmMoe1xuICAgIGNvbmZpZzogZmV0Y2hQYXJhbXM/LmNvbmZpZyxcbiAgICByZWZlcmVuY2U6IGZldGNoUGFyYW1zPy5yZWZlcmVuY2UsXG4gICAgcmVzb3VyY2VMaW5rOiBmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rLFxuICAgIG9wdGlvbnMsXG4gIH0pXG5cbiAgLy8gb25seSB1c2UgdGhlIHJlc3VsdHMgaWYgcmVhZHlUb0ZldGNoXG4gIGNvbnN0IHtcbiAgICBiaWJsZUpzb24sXG4gICAgY29udGVudCxcbiAgICBmZXRjaFJlc3BvbnNlLFxuICAgIGxvYWRpbmdSZXNvdXJjZSxcbiAgICBsb2FkaW5nQ29udGVudCxcbiAgICBtYXRjaGVkVmVyc2UsXG4gICAgcmVzb3VyY2UsXG4gIH0gPSByZXNvdXJjZVN0YXRlXG5cbiAgdXNlRWZmZWN0KCgpID0+IHsgLy8gdmFsaWRhdGUgcmVzcG9uc2UgdG8gbWFrZSBzdXJlIGZyb20gbGF0ZXN0IHJlcXVlc3RcbiAgICBpZiAocmVhZHlGb3JGZXRjaCkge1xuICAgICAgY29uc3QgY3VycmVudFJlc291cmNlU3RhdGUgPSBfcmVzb3VyY2VSZXN1bHRzPy5zdGF0ZVxuXG4gICAgICBpZiAoIWZldGNoZWQgJiYgIWlzRXF1YWwoY3VycmVudFJlc291cmNlU3RhdGUsIHJlc291cmNlU3RhdGUpKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIGZldGNoUmVzcG9uc2UsXG4gICAgICAgICAgbG9hZGluZ0NvbnRlbnQsXG4gICAgICAgICAgbG9hZGluZ1Jlc291cmNlLFxuICAgICAgICB9ID0gY3VycmVudFJlc291cmNlU3RhdGVcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSByZXNvdXJjZXMgY2hhbmdlZGAsIHsgY29udGVudCwgZmV0Y2hQYXJhbXMsIGZldGNoUmVzcG9uc2UgfSlcblxuICAgICAgICBpZiAoIWxvYWRpbmdDb250ZW50ICYmICFsb2FkaW5nUmVzb3VyY2UgJiYgY29udGVudCAmJiBmZXRjaFJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7IHJlc291cmNlU3RhdGU6IGN1cnJlbnRSZXNvdXJjZVN0YXRlIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgY29udGVudCBjaGFuZ2VkYCwge1xuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLFxuICAgICAgICAgICAgZmV0Y2hSZXNwb25zZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gVFJJQ0tZIC0gcmVzcG9uc2VzIGZyb20gc2VydmVyIGNhbiBjb21lIGJhY2sgZnJvbSBwcmV2aW91cyByZXF1ZXN0cy4gIFNvIHdlIG1ha2Ugc3VyZSB0aGlzIHJlc3BvbnNlIGlzIGZvciB0aGUgY3VycmVudCByZXF1ZXN0ZWQgYm9va1xuICAgICAgICAgIGxldCBzYW1lQm9vayA9IGZhbHNlXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkQm9va0lkID0gX2Jvb2tJZCB8fCAnJ1xuICAgICAgICAgIGNvbnN0IGZldGNoZWRCb29rID0gY29udGVudC5uYW1lXG5cbiAgICAgICAgICBpZiAoZmV0Y2hlZEJvb2sgJiYgZXhwZWN0ZWRCb29rSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IFtuYW1lLCBleHRdID0gZmV0Y2hlZEJvb2suc3BsaXQoJy4nKVxuXG4gICAgICAgICAgICBpZiAoZXh0LnRvTG93ZXJDYXNlKCkgPT09ICd1c2ZtJykge1xuICAgICAgICAgICAgICBzYW1lQm9vayA9IG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhleHBlY3RlZEJvb2tJZC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNoYSA9IGZldGNoUmVzcG9uc2U/LmRhdGE/LnNoYSB8fCBudWxsXG4gICAgICAgICAgY29uc3QgdXJsID0gZmV0Y2hSZXNwb25zZT8uZGF0YT8udXJsIHx8IG51bGxcblxuICAgICAgICAgIGlmIChzYW1lQm9vaykgeyAvLyBhbHNvIG1ha2Ugc3VyZSBpdCBpcyB0aGUgc2FtZSBicmFuY2hcbiAgICAgICAgICAgIGNvbnN0IGZldGNoZWRCcmFuY2ggPSBnZXRCcmFuY2hOYW1lKHVybClcbiAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nQnJhbmNoID0gZ2V0QnJhbmNoTmFtZShmZXRjaFBhcmFtcz8ucmVzb3VyY2VMaW5rKVxuXG4gICAgICAgICAgICBpZiAoZmV0Y2hlZEJyYW5jaCAhPT0gZmV0Y2hpbmdCcmFuY2gpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBpbnZhbGlkIGJyYW5jaCwgZXhwZWN0ZWQgYnJhbmNoIGlzICR7ZmV0Y2hpbmdCcmFuY2h9LCBidXQgZmV0Y2hlZEJyYW5jaCBpcyAke2ZldGNoZWRCcmFuY2h9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgICAgICBzYW1lQm9vayA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlnbm9yZVNoYSA9PT0gc2hhKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIC0gdGhlIHNoYSBpcyB0aGUgc2FtZSBhcyB0aGUgaWdub3JlIHNoYSAke3NoYX1gLCB7IHNoYSwgdXJsIH0pXG4gICAgICAgICAgICBzYW1lQm9vayA9IGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzYW1lQm9vaykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBpbnZhbGlkIGJvb2ssIGV4cGVjdGVkQm9va0lkIGlzICR7ZXhwZWN0ZWRCb29rSWR9LCBidXQgcmVjZWl2ZWQgYm9vayBuYW1lICR7ZmV0Y2hlZEJvb2t9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTdGF0ZVsnYm9va09iamVjdHMnXSA9IGNvbnRlbnRcbiAgICAgICAgICAgIG5ld1N0YXRlWyd2ZXJzZXNGb3JSZWYnXSA9IHVwZGF0ZVZlcnNlc0ZvclJlZihjb250ZW50KVxuICAgICAgICAgICAgbmV3U3RhdGVbJ2ZldGNoZWRCb29rJ10gPSBleHBlY3RlZEJvb2tJZFxuXG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwobmV3U3RhdGUsIHtcbiAgICAgICAgICAgICAgYm9va09iamVjdHMsXG4gICAgICAgICAgICAgIHZlcnNlc0ZvclJlZixcbiAgICAgICAgICAgICAgZmV0Y2hlZEJvb2s6IGV4cGVjdGVkQm9va0lkLFxuICAgICAgICAgICAgICByZXNvdXJjZVN0YXRlLFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYHVzZVNjcmlwdHVyZSBjb3JyZWN0IGJvb2ssIGV4cGVjdGVkQm9va0lkIGlzICR7ZXhwZWN0ZWRCb29rSWR9YCwgeyBzaGEsIHVybCB9KVxuICAgICAgICAgICAgICBuZXdTdGF0ZVsnZmV0Y2hlZCddID0gdHJ1ZVxuICAgICAgICAgICAgICBuZXdTdGF0ZVsnaWdub3JlU2hhJ10gPSBudWxsXG4gICAgICAgICAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWlzRXF1YWwoY3VycmVudFJlc291cmNlU3RhdGUsIHJlc291cmNlU3RhdGUpKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIHN0YXRlIGNoYW5nZWQsIGJ1dCBubyBjb250ZW50YCwgY3VycmVudFJlc291cmNlU3RhdGUpXG4gICAgICAgICAgICBzZXRTdGF0ZSh7IHJlc291cmNlU3RhdGU6IGN1cnJlbnRSZXNvdXJjZVN0YXRlIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVhZHlGb3JGZXRjaCwgX3Jlc291cmNlUmVzdWx0cz8uc3RhdGVdKVxuXG4gIGNvbnN0IHsgdGl0bGUsIHZlcnNpb24gfSA9IHBhcnNlUmVzb3VyY2VNYW5pZmVzdChyZXNvdXJjZSlcbiAgY29uc3QgeyBsYW5ndWFnZUlkIH0gPSByZXNvdXJjZV8gfHwge31cbiAgY29uc3QgbG9hZGluZyA9IGxvYWRpbmdSZXNvdXJjZSB8fCBsb2FkaW5nQ29udGVudCB8fCAhcmVhZHlGb3JGZXRjaFxuICBjb25zdCBjb250ZW50Tm90Rm91bmRFcnJvciA9ICFjb250ZW50XG4gIGNvbnN0IHNjcmlwdHVyZU5vdExvYWRlZEVycm9yID0gIWJpYmxlSnNvblxuICBjb25zdCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgPSAhcmVzb3VyY2U/Lm1hbmlmZXN0XG4gIGNvbnN0IGludmFsaWRNYW5pZmVzdEVycm9yID0gIXRpdGxlIHx8ICF2ZXJzaW9uIHx8ICFsYW5ndWFnZUlkXG4gIGNvbnN0IGVycm9yID0gcmVhZHlGb3JGZXRjaCAmJiBpbml0aWFsaXplZCAmJiAhbG9hZGluZyAmJlxuICAgIChjb250ZW50Tm90Rm91bmRFcnJvciB8fCBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvciB8fCBtYW5pZmVzdE5vdEZvdW5kRXJyb3IgfHwgaW52YWxpZE1hbmlmZXN0RXJyb3IpXG4gIGNvbnN0IHJlc291cmNlU3RhdHVzID0ge1xuICAgIFtMT0FESU5HX1NUQVRFXTogbG9hZGluZyxcbiAgICBbQ09OVEVOVF9OT1RfRk9VTkRfRVJST1JdOiBjb250ZW50Tm90Rm91bmRFcnJvcixcbiAgICBbU0NSSVBUVVJFX05PVF9MT0FERURfRVJST1JdOiBzY3JpcHR1cmVOb3RMb2FkZWRFcnJvcixcbiAgICBbTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUl06IG1hbmlmZXN0Tm90Rm91bmRFcnJvcixcbiAgICBbSU5WQUxJRF9NQU5JRkVTVF9FUlJPUl06IGludmFsaWRNYW5pZmVzdEVycm9yLFxuICAgIFtFUlJPUl9TVEFURV06IGVycm9yLFxuICAgIFtJTklUSUFMSVpFRF9TVEFURV06IGluaXRpYWxpemVkLFxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXJlYWR5Rm9yRmV0Y2gpIHtcbiAgICAgIGlmIChpbml0aWFsaXplZCkge1xuICAgICAgICBzZXRTdGF0ZSh7IGludGlhbGl6ZWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGlmIChsb2FkaW5nKSB7IC8vIG9uY2UgZmlyc3QgbG9hZCBoYXMgYmVndW4sIHdlIGFyZSBpbml0aWFsaXplZFxuICAgICAgICBzZXRTdGF0ZSh7IGludGlhbGl6ZWQ6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtsb2FkaW5nLCByZWFkeUZvckZldGNoXSlcblxuICAvKipcbiAgICogZ2V0IHZlcnNlcyBmb3IgcmVmXG4gICAqIEBwYXJhbSByZWZTdHJcbiAgICogQHBhcmFtIGNvbnRlbnRfXG4gICAqL1xuICBmdW5jdGlvbiBfZ2V0VmVyc2VzRm9yUmVmKHJlZlN0ciwgY29udGVudF8gPSBib29rT2JqZWN0cykge1xuICAgIGlmIChjb250ZW50Xykge1xuICAgICAgcmV0dXJuIGdldFZlcnNlc0ZvclJlZlN0cihyZWZTdHIsIGNvbnRlbnRfLCBsYW5ndWFnZUlkKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVmVyc2UoY2hhcHRlciwgdmVyc2UsIHZlcnNlRGF0YSkge1xuICAgIGlmIChib29rT2JqZWN0cykge1xuICAgICAgY29uc3QgYm9va09iamVjdHNfID0geyAuLi5ib29rT2JqZWN0cyB9IC8vIHNoYWxsb3cgY29weVxuXG4gICAgICBpZiAoYm9va09iamVjdHNfPy5jaGFwdGVycykge1xuICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnMgPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVycyB9IC8vIHNoYWxsb3cgY29weSBjaGFwdGVyc1xuXG4gICAgICAgIGlmIChib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0pIHtcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl0gPSB7IC4uLmJvb2tPYmplY3RzXy5jaGFwdGVyc1tjaGFwdGVyXSB9IC8vIHNoYWxsb3cgY29weSB2ZXJzZXNcbiAgICAgICAgICBib29rT2JqZWN0c18uY2hhcHRlcnNbY2hhcHRlcl1bdmVyc2VdID0gdmVyc2VEYXRhXG4gICAgICAgICAgc2V0U3RhdGUoeyBib29rT2JqZWN0czogYm9va09iamVjdHNfIH0pXG4gICAgICAgICAgcmV0dXJuIGJvb2tPYmplY3RzX1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVWZXJzZXNGb3JSZWYoX2Jvb2tPYmplY3RzID0gYm9va09iamVjdHMpIHtcbiAgICBsZXQgbmV3VmVyc2VzRm9yUmVmID0gW11cblxuICAgIGlmIChfYm9va09iamVjdHMpIHtcbiAgICAgIG5ld1ZlcnNlc0ZvclJlZiA9IGdldFZlcnNlc0ZvclJlZihyZWZlcmVuY2UsIF9ib29rT2JqZWN0cywgbGFuZ3VhZ2VJZClcbiAgICAgIHJldHVybiBuZXdWZXJzZXNGb3JSZWZcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIGZvcmNlIHJlbG9hZCBvZiBjdXJyZW50IHJlc291cmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gaWdub3JlU2hhIC0gb3B0aW9uYWwgc2hhIHRvIGlnbm9yZVxuICAgKi9cbiAgZnVuY3Rpb24gcmVsb2FkUmVzb3VyY2UoaWdub3JlU2hhID0gbnVsbCkge1xuICAgIGNvbnN0IF9yZWxvYWRSZXNvdXJjZSA9IF9yZXNvdXJjZVJlc3VsdHM/LmFjdGlvbnMucmVsb2FkUmVzb3VyY2VcblxuICAgIGlmIChfcmVsb2FkUmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0geyBmZXRjaGVkOiBmYWxzZSB9XG5cbiAgICAgIGlmIChpZ25vcmVTaGEpIHsgLy8gVFJJQ0tZIC0gaWYgdGhlIHJlc3BvbnNlIHdhcyBmb3IgdGhpcyBzaGEgKHdoaWNoIHdhcyB0aGUgcHJldmlvdXMgc2hhKSB0aGVuIHdlIG5lZWQgdG8gaWdub3JlIGl0XG4gICAgICAgIG5ld1N0YXRlWydpZ25vcmVTaGEnXSA9IGlnbm9yZVNoYVxuICAgICAgfVxuICAgICAgc2V0U3RhdGUoIG5ld1N0YXRlKVxuICAgICAgX3JlbG9hZFJlc291cmNlKClcbiAgICB9XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGN1cnJlbnRCb29rUmVmID0gZmV0Y2hQYXJhbXM/LnJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY3VycmVudEJvb2tSZWYpIHtcbiAgICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgZmV0Y2hlZCBib29rIGNoYW5nZWQgdG8gJHtjdXJyZW50Qm9va1JlZn0sICR7cmVzb3VyY2VMaW5rX31gLCB7IGNvbnRlbnQsIGZldGNoUGFyYW1zIH0pXG4gICAgICBzZXRTdGF0ZSh7IGJvb2tPYmplY3RzOiBudWxsIH0pXG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgfSwgW2N1cnJlbnRCb29rUmVmXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGB1c2VTY3JpcHR1cmUgYm9vayByZWYgY2hhbmdlZCB0byAke19ib29rSWR9LCAke3Jlc291cmNlTGlua199YClcbiAgICAvLyBAdHMtaWdub3JlXG4gIH0sIFtfYm9va0lkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGV4cGVjdGVkQm9va0lkID0gX2Jvb2tJZCB8fCAnJ1xuICAgIGNvbnN0IGZldGNoZWRCb29rU2FtZSA9IGZldGNoZWRCb29rICYmIChmZXRjaGVkQm9vayA9PT0gZXhwZWN0ZWRCb29rSWQpXG4gICAgbGV0IF92ZXJzZXNGb3JSZWYgPSBbXVxuXG4gICAgaWYgKCFmZXRjaGVkQm9va1NhbWUpIHtcbiAgICAgIC8vIGlmIChleHBlY3RlZEJvb2tJZCAmJiBmZXRjaGVkQm9vaykge1xuICAgICAgLy8gICBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIGV4cGVjdGVkIGJvb2sgJHtleHBlY3RlZEJvb2tJZH0gYnV0IGZldGNoZWQgYm9vayB3YXMgJHtmZXRjaGVkQm9va30gLSBjbGVhcmluZ2ApXG4gICAgICAvLyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IF9ib29rT2JqZWN0cyA9IGZldGNoZWRCb29rU2FtZSA/IGJvb2tPYmplY3RzIDogbnVsbFxuICAgICAgX3ZlcnNlc0ZvclJlZiA9IHVwZGF0ZVZlcnNlc0ZvclJlZihfYm9va09iamVjdHMpXG4gICAgICAvLyBjb25zb2xlLmxvZyhgdXNlU2NyaXB0dXJlIF9ib29rT2JqZWN0cyBpcyAkeyEhX2Jvb2tPYmplY3RzfSBhbmQgYm9va3MgYXJlIHRoZSBzYW1lICR7ZmV0Y2hlZEJvb2t9YCwgeyBjb250ZW50LCBmZXRjaFBhcmFtcyB9KVxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChfdmVyc2VzRm9yUmVmLCB2ZXJzZXNGb3JSZWYpKSB7XG4gICAgICBzZXRTdGF0ZSh7IHZlcnNlc0ZvclJlZjogX3ZlcnNlc0ZvclJlZiB9KVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZV0pXG5cbiAgcmV0dXJuIHtcbiAgICBib29rT2JqZWN0cyxcbiAgICBmZXRjaFJlc3BvbnNlLFxuICAgIGdldFZlcnNlc0ZvclJlZjogX2dldFZlcnNlc0ZvclJlZixcbiAgICBtYXRjaGVkVmVyc2UsXG4gICAgcmVmZXJlbmNlOiBmZXRjaFBhcmFtcz8ucmVmZXJlbmNlLFxuICAgIHJlbG9hZFJlc291cmNlLFxuICAgIHJlc291cmNlTGluazogZmV0Y2hQYXJhbXM/LnJlc291cmNlTGluayxcbiAgICByZXNvdXJjZVN0YXR1cyxcbiAgICB0aXRsZSxcbiAgICB1cGRhdGVWZXJzZSxcbiAgICB2ZXJzaW9uLFxuICAgIHZlcnNlc0ZvclJlZixcbiAgfVxufVxuIl19
|