@kontur.candy/tools 2.109.0 → 2.113.0
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/CHANGELOG.md +54 -0
- package/README.md +5 -1
- package/distr/Common/CandyApiClient/CandyApiClient.js +10 -30
- package/distr/Common/CandyApiClient/CandyApiClientContext.js +26 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +60 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +51 -0
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +50 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +90 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +56 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +12 -0
- package/distr/Common/CandyApiClient/{Types/CandyApiAuthentication.js → DigestApiClient/IDigestApiClient.js} +0 -0
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +26 -0
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +25 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +24 -0
- package/distr/Common/CandyApiClient/{Types/Picklist → DigestApiClient/Types}/DigestRequest.js +0 -0
- package/distr/Common/CandyApiClient/{Types/Picklist/PicklistServerResponses.js → DigestApiClient/Types/DigestResponse.js} +0 -0
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +8 -50
- package/distr/Common/EndPoints.js +20 -0
- package/distr/Common/FormActionHandlers/ContextualActionNames.js +16 -0
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +6 -0
- package/distr/Common/HttpClient/AuthenticationMode.js +35 -0
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +27 -3
- package/distr/Common/HttpClient/HttpClient.js +66 -9
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +6 -0
- package/distr/Common/IntRangeUtils.js +3 -12
- package/distr/Common/IterableUtils.js +17 -11
- package/distr/Common/ModelPath/ModelPath.js +16 -1
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +41 -0
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +6 -0
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +13 -0
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +82 -0
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +137 -0
- package/distr/Common/NidusClient/INidusClient.js +16 -0
- package/distr/Common/NidusClient/NidusClientContext.js +47 -0
- package/distr/Common/NidusClient/NidusClientImpl.js +72 -0
- package/distr/Common/TypingUtils.js +24 -2
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +4 -4
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +15 -4
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +12 -6
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +2 -20
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +19 -49
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +29 -45
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +11 -12
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +7 -7
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +20 -2
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.map +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +3093 -387
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/package.json +1 -1
- package/distr/Common/CandyApiClient/Types/Picklist/PicklistQueryFilter.js +0 -24
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/ResourcesDirectory.js +0 -66
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,57 @@
|
|
|
1
|
+
<a name="2.113.0"></a>
|
|
2
|
+
# [2.113.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.112.0...release/tools/v2.113.0) (2021-10-12)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* исправлена ошибка с затиранием части валидаций, при использовании нескольких блоков проверкок на один путь ([b861f47](https://git.skbkontur.ru/ke/candy-utils/commit/b861f47)), see [#6169](https://yt.skbkontur.ru/issue/FS-6169)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* Атрибут description для условных валидаций сделан обязательным ([ce1a814](https://git.skbkontur.ru/ke/candy-utils/commit/ce1a814))
|
|
13
|
+
|
|
14
|
+
<a name="2.112.0"></a>
|
|
15
|
+
# [2.112.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.111.0...release/tools/v2.112.0) (2021-10-04)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Features
|
|
19
|
+
|
|
20
|
+
* **Tools:** Флажок --nightly для форсирования версии движка в build-server ([03e1ac7](https://git.skbkontur.ru/ke/candy-utils/commit/03e1ac7))
|
|
21
|
+
|
|
22
|
+
<a name="2.111.0"></a>
|
|
23
|
+
# [2.111.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.110.0...release/tools/v2.111.0) (2021-09-21)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
* **Tools:** Исправлено отображение картинок в режиме разработки ([4fe7d30](https://git.skbkontur.ru/ke/candy-utils/commit/4fe7d30))
|
|
29
|
+
* **Tools:** Корректная работа с API запущенном на https ([34a48df](https://git.skbkontur.ru/ke/candy-utils/commit/34a48df))
|
|
30
|
+
* Исправлено совместимость валидаций: условной и по справочнику в режиме "warning" ([8549966](https://git.skbkontur.ru/ke/candy-utils/commit/8549966))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Features
|
|
34
|
+
|
|
35
|
+
* Поддержка length, regexMatch и multySum в KC.xml валидациях на фронте ([ae3ada2](https://git.skbkontur.ru/ke/candy-utils/commit/ae3ada2)), see [#6115](https://yt.skbkontur.ru/issue/FS-6115) [#6106](https://yt.skbkontur.ru/issue/FS-6106) [#6031](https://yt.skbkontur.ru/issue/FS-6031) [#6116](https://yt.skbkontur.ru/issue/FS-6116)
|
|
36
|
+
* Поддержка length, regexMatch и multySum в KC.xml валидациях на фронте ([544c46a](https://git.skbkontur.ru/ke/candy-utils/commit/544c46a)), see [#6115](https://yt.skbkontur.ru/issue/FS-6115) [#6106](https://yt.skbkontur.ru/issue/FS-6106) [#6031](https://yt.skbkontur.ru/issue/FS-6031) [#6116](https://yt.skbkontur.ru/issue/FS-6116)
|
|
37
|
+
* Поддержка length, regexMatch и multySum в KC.xml валидациях на фронте ([eb51883](https://git.skbkontur.ru/ke/candy-utils/commit/eb51883)), see [#6115](https://yt.skbkontur.ru/issue/FS-6115) [#6106](https://yt.skbkontur.ru/issue/FS-6106) [#6031](https://yt.skbkontur.ru/issue/FS-6031) [#6116](https://yt.skbkontur.ru/issue/FS-6116)
|
|
38
|
+
|
|
39
|
+
<a name="2.110.0"></a>
|
|
40
|
+
# [2.110.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.109.0...release/tools/v2.110.0) (2021-09-09)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
### Bug Fixes
|
|
44
|
+
|
|
45
|
+
* Поправил случай вставки из экселя в котором в таблице есть пустые строки и столбцы ([4f3d418](https://git.skbkontur.ru/ke/candy-utils/commit/4f3d418)), see [#5930](https://yt.skbkontur.ru/issue/FS-5930)
|
|
46
|
+
* Уменьшил делей при открытии попап текст арии, для стабильности тестов ([9ce5ea8](https://git.skbkontur.ru/ke/candy-utils/commit/9ce5ea8))
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### Features
|
|
50
|
+
|
|
51
|
+
* вставка множественных ячеек и столбцев из эксель для НМ ([3dbff86](https://git.skbkontur.ru/ke/candy-utils/commit/3dbff86)), see [#5930](https://yt.skbkontur.ru/issue/FS-5930)
|
|
52
|
+
* Добавил в forms helper возможность открыть гфв на тестовой ([76fe412](https://git.skbkontur.ru/ke/candy-utils/commit/76fe412))
|
|
53
|
+
* Добавил редерект при ошибки авторизации в forms helper ([8be1993](https://git.skbkontur.ru/ke/candy-utils/commit/8be1993))
|
|
54
|
+
|
|
1
55
|
<a name="2.109.0"></a>
|
|
2
56
|
# [2.109.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.108.0...release/tools/v2.109.0) (2021-08-30)
|
|
3
57
|
|
package/README.md
CHANGED
|
@@ -327,7 +327,11 @@ Magic
|
|
|
327
327
|
|
|
328
328
|
* `--gfvs (-g)`
|
|
329
329
|
|
|
330
|
-
|
|
330
|
+
Опция устарела. Оставлена для обратной совместимости.
|
|
331
|
+
|
|
332
|
+
* `--nightly`
|
|
333
|
+
|
|
334
|
+
Включает сборку форм на движке nightly.
|
|
331
335
|
|
|
332
336
|
* `--no-client-override`
|
|
333
337
|
|
|
@@ -9,12 +9,16 @@ var _TypingUtils = require("../TypingUtils");
|
|
|
9
9
|
|
|
10
10
|
var _HttpClient = require("../HttpClient/HttpClient");
|
|
11
11
|
|
|
12
|
+
var _AuthenticationMode = require("../HttpClient/AuthenticationMode");
|
|
13
|
+
|
|
12
14
|
var _FocusTypes = require("./Types/Focus/FocusTypes");
|
|
13
15
|
|
|
14
16
|
var _DraftPresentationType = require("./Types/Presentations/DraftPresentationType");
|
|
15
17
|
|
|
16
18
|
var _IsBuffer = require("./IsBuffer");
|
|
17
19
|
|
|
20
|
+
var _DigestApiClient = require("./DigestApiClient/DigestApiClient");
|
|
21
|
+
|
|
18
22
|
const strangeOptions = {
|
|
19
23
|
src: "changeSet",
|
|
20
24
|
dataVersion: "0"
|
|
@@ -23,7 +27,7 @@ const strangeOptions = {
|
|
|
23
27
|
class CandyApiClient {
|
|
24
28
|
constructor(fetchImpl, baseUrl, resourceZone, authentication) {
|
|
25
29
|
this.httpClient = void 0;
|
|
26
|
-
this.httpClient = new _HttpClient.HttpClient(fetchImpl, baseUrl,
|
|
30
|
+
this.httpClient = new _HttpClient.HttpClient(fetchImpl, baseUrl, (0, _AuthenticationMode.createAuthenticationProvider)(authentication), {
|
|
27
31
|
resourceZone: resourceZone
|
|
28
32
|
});
|
|
29
33
|
}
|
|
@@ -32,6 +36,10 @@ class CandyApiClient {
|
|
|
32
36
|
return new CandyApiDraftClient(this.httpClient, draftFullId);
|
|
33
37
|
}
|
|
34
38
|
|
|
39
|
+
createDigestApiClient(draftFullId) {
|
|
40
|
+
return new _DigestApiClient.DigestApiClient(this.httpClient, draftFullId);
|
|
41
|
+
}
|
|
42
|
+
|
|
35
43
|
async getInfoByInns(draftFullId, inns) {
|
|
36
44
|
const paths = inns.map(inn => `@focus/${inn}`);
|
|
37
45
|
const response = await this.httpClient.post(this.getDraftUrl(draftFullId, "get-inner")).withJsonBody(paths).json();
|
|
@@ -62,16 +70,6 @@ class CandyApiClient {
|
|
|
62
70
|
return result;
|
|
63
71
|
}
|
|
64
72
|
|
|
65
|
-
async getDigestMultiple(draftFullId, requests) {
|
|
66
|
-
const requestKeys = requests.map(x => x.filter != undefined ? `@digest/${x.gId}/${JSON.stringify(x.filter)}` : `@digest/${x.gId}`);
|
|
67
|
-
const response = await this.httpClient.post(this.getDraftUrl(draftFullId, "get-inner")).withJsonBody(requestKeys).json();
|
|
68
|
-
return requestKeys.map(x => {
|
|
69
|
-
var _response$x;
|
|
70
|
-
|
|
71
|
-
return (_response$x = response[x]) === null || _response$x === void 0 ? void 0 : _response$x.value;
|
|
72
|
-
}).filter(_TypingUtils.isNotNullOrUndefined);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
73
|
async getAllGfvs(abortSignal) {
|
|
76
74
|
const body = await this.httpClient.get(`v1/diag/resources`).json();
|
|
77
75
|
return Object.keys(body.forms);
|
|
@@ -118,24 +116,6 @@ class CandyApiClient {
|
|
|
118
116
|
return `v1/ns/${draftFullId.ns}/drafts/${draftFullId.draftId}/${draftRelatedUrl}`;
|
|
119
117
|
}
|
|
120
118
|
|
|
121
|
-
createAuthenticationProvider(authentication) {
|
|
122
|
-
return request => {
|
|
123
|
-
if (authentication == undefined || authentication === "browser-credentials-include") {
|
|
124
|
-
request.credentials = "include";
|
|
125
|
-
return request;
|
|
126
|
-
} else if ("authSid" in authentication && authentication.authSid != undefined) {
|
|
127
|
-
request.credentials = "omit";
|
|
128
|
-
request.headers = { ...request.headers,
|
|
129
|
-
Authorization: `AUTH.SID ${authentication.authSid}`
|
|
130
|
-
};
|
|
131
|
-
return request;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
request.credentials = "omit";
|
|
135
|
-
return request;
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
|
|
139
119
|
async getFeatureFlags() {
|
|
140
120
|
return await this.httpClient.get("v1/features/flags").json();
|
|
141
121
|
}
|
|
@@ -381,4 +361,4 @@ class CandyApiDraftClient {
|
|
|
381
361
|
}
|
|
382
362
|
|
|
383
363
|
exports.CandyApiDraftClient = CandyApiDraftClient;
|
|
384
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJuYW1lcyI6WyJzdHJhbmdlT3B0aW9ucyIsInNyYyIsImRhdGFWZXJzaW9uIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlciIsImZvckRyYWZ0IiwiZHJhZnRGdWxsSWQiLCJDYW5keUFwaURyYWZ0Q2xpZW50IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJwYXRocyIsIm1hcCIsImlubiIsInJlc3BvbnNlIiwicG9zdCIsImdldERyYWZ0VXJsIiwid2l0aEpzb25Cb2R5IiwianNvbiIsInJlc3VsdCIsImlublNlcnZlclZhbHVlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJlcnJvciIsImVycm9yQ29kZSIsIkZvY3VzU2VydmVyRXJyb3JDb2RlIiwiTm9Jbm5FcnJvciIsImdldERpZ2VzdE11bHRpcGxlIiwicmVxdWVzdHMiLCJyZXF1ZXN0S2V5cyIsIngiLCJmaWx0ZXIiLCJnSWQiLCJKU09OIiwic3RyaW5naWZ5IiwiaXNOb3ROdWxsT3JVbmRlZmluZWQiLCJnZXRBbGxHZnZzIiwiYWJvcnRTaWduYWwiLCJib2R5IiwiZ2V0IiwiT2JqZWN0Iiwia2V5cyIsImZvcm1zIiwiY3JlYXRlRHJhZnRGcm9tRHJpdmUiLCJucyIsImZ1ZkRyaXZlVXJpIiwid2l0aFF1ZXJ5UGFyYW1zIiwid2l0aEFib3J0U2lnbmFsIiwiY3JlYXRlRW1wdHlEcmFmdCIsImdmdiIsImNyZWF0ZURyYWZ0IiwiZnVmQ29udGVudCIsIndpdGhDb250ZW50VHlwZSIsIndpdGhCb2R5RnJvbUJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJFcnJvciIsImNoZWNrQWxpdmUiLCJkcmFmdFJlbGF0ZWRVcmwiLCJkcmFmdElkIiwicmVxdWVzdCIsImNyZWRlbnRpYWxzIiwiYXV0aFNpZCIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwiZ2V0RmVhdHVyZUZsYWdzIiwiZ2V0SHJlZlRvSW5uZXJFZGl0b3IiLCJ1cmwiLCJnZXRIcmVmRG93bmxvYWRGdWYiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmIiwiZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24iLCJEcmFmdFByZXNlbnRhdGlvblR5cGUiLCJpbm5lckZ1ZiIsImdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbyIsImNsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZEb3dubG9hZElubmVyIiwiaW5uZXIiLCJnZXRFcnJvckxvZyIsImdldERyYWZ0UHJlc2VudGF0aW9uVXJsIiwiZXJyb3JMb2ciLCJnZXRUYXNrQnlJZCIsInRhc2tJZCIsInRhc2tzIiwiZ2V0QWxsVGFza3MiLCJ2YWx1ZXMiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiYWRkZWQiLCJjaGFuZ2VkIiwiaWQiLCJyZW1vdmVkIiwiY2FuY2VsVGFzayIsImdldEV4cGVydEVycm9yTG9nIiwiZXJyb3Jsb2dFeHBlcnQiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsInByb3BzRHJpdmVOYW1lIiwiY2xlYXJEcmFmdCIsImNvbnZlcnREcmFmdEZyb21QcmV2R2Z2IiwicHJldkdmdkRyYWZ0SWQiLCJzZW5kQ2hhbmdlU2V0IiwiZGF0YSIsInNlbmRDaGFuZ2VTZXRTeW5jIiwicG9zdFN5bmMiLCJnZXRSZXF1aXNpdGVzIiwicmVxdWlzaXRlTGlzdCIsImdldElubmVyIiwiZ2V0UGFydGlhbElubmVyIiwicnVsZXMiLCJtYXhJbnN0YW5jZUNvdW50IiwidG9TdHJpbmciLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJleHBsYW5hdG9yeU5vdGUiLCJnZXRBdHRhY2htZW50QnlJZCIsImF0dGFjaG1lbnRJZCIsImdldEFsbEF0dGFjaG1lbnRzIiwicmVtb3ZlQXR0YWNobWVudHMiLCJhdHRhY2htZW50SWRzIiwiY3JlYXRlT3JVcGRhdGVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRzIiwiYXR0YWNobWVudCIsImNvbnRlbnRVcmkiLCJtZXRhIiwic2V0UHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uVHlwZSIsImNvbnRlbnQiLCJwdXQiLCJ3aXRoUmF3Qm9keSIsInBhdGNoUHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uQ29udGVudCIsInBhdGNoIiwiZ2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaSIsImFjY2VwdENvZGUiLCJzdGF0dXMiLCJwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJzZXRGdWZCeURyaXZlVXJpIiwiY29tYmluZUZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lTWV0aG9kIiwibm9ybWFsaXplQnlSdWxlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQWVBOztBQUVBOztBQVFBOztBQUlBLE1BQU1BLGNBQWMsR0FBRztBQUFFQyxFQUFBQSxHQUFHLEVBQUUsV0FBUDtBQUFvQkMsRUFBQUEsV0FBVyxFQUFFO0FBQWpDLENBQXZCOztBQUVPLE1BQU1DLGNBQU4sQ0FBZ0Q7QUFHNUNDLEVBQUFBLFdBQVcsQ0FDZEMsU0FEYyxFQUVkQyxPQUZjLEVBR2RDLFlBSGMsRUFJZEMsY0FKYyxFQUtoQjtBQUFBLFNBUGVDLFVBT2Y7QUFDRSxTQUFLQSxVQUFMLEdBQWtCLElBQUlDLHNCQUFKLENBQWVMLFNBQWYsRUFBMEJDLE9BQTFCLEVBQW1DLEtBQUtLLDRCQUFMLENBQWtDSCxjQUFsQyxDQUFuQyxFQUFzRjtBQUNwR0QsTUFBQUEsWUFBWSxFQUFFQTtBQURzRixLQUF0RixDQUFsQjtBQUdIOztBQUVNSyxFQUFBQSxRQUFRLENBQUNDLFdBQUQsRUFBaUQ7QUFDNUQsV0FBTyxJQUFJQyxtQkFBSixDQUF3QixLQUFLTCxVQUE3QixFQUF5Q0ksV0FBekMsQ0FBUDtBQUNIOztBQUV5QixRQUFiRSxhQUFhLENBQUNGLFdBQUQsRUFBMkJHLElBQTNCLEVBQStFO0FBQ3JHLFVBQU1DLEtBQUssR0FBR0QsSUFBSSxDQUFDRSxHQUFMLENBQVNDLEdBQUcsSUFBSyxVQUFTQSxHQUFJLEVBQTlCLENBQWQ7QUFDQSxVQUFNQyxRQUFRLEdBQUcsTUFBTSxLQUFLWCxVQUFMLENBQ2xCWSxJQURrQixDQUNiLEtBQUtDLFdBQUwsQ0FBaUJULFdBQWpCLEVBQThCLFdBQTlCLENBRGEsRUFFbEJVLFlBRmtCLENBRUxOLEtBRkssRUFHbEJPLElBSGtCLEVBQXZCO0FBSUEsVUFBTUMsTUFBd0IsR0FBRyxFQUFqQzs7QUFDQSxTQUFLLE1BQU1OLEdBQVgsSUFBa0JILElBQWxCLEVBQXdCO0FBQUE7O0FBQ3BCLFlBQU1VLGNBQWMsaUJBQUdOLFFBQVEsQ0FBRSxVQUFTRCxHQUFJLEVBQWYsQ0FBWCwrQ0FBRyxXQUEyQlEsS0FBbEQ7O0FBQ0EsVUFBSUQsY0FBYyxJQUFJRSxTQUF0QixFQUFpQztBQUM3QkgsUUFBQUEsTUFBTSxDQUFDTixHQUFELENBQU4sR0FBYztBQUNWUSxVQUFBQSxLQUFLLEVBQUVDLFNBREc7QUFFVkMsVUFBQUEsS0FBSyxFQUFFLGlDQUZHO0FBR1ZDLFVBQUFBLFNBQVMsRUFBRUMsaUNBQXFCQztBQUh0QixTQUFkO0FBS0gsT0FORCxNQU1PO0FBQUE7O0FBQ0hQLFFBQUFBLE1BQU0sQ0FBQ04sR0FBRCxDQUFOLEdBQWM7QUFDVlEsVUFBQUEsS0FBSywyQkFBRUQsY0FBYyxDQUFDQyxLQUFqQix5RUFBMEJDLFNBRHJCO0FBRVZFLFVBQUFBLFNBQVMsMkJBQUVKLGNBQWMsQ0FBQ0ksU0FBakIseUVBQThCRixTQUY3QjtBQUdWQyxVQUFBQSxLQUFLLDRCQUFFSCxjQUFjLENBQUNHLEtBQWpCLDJFQUEwQkQ7QUFIckIsU0FBZDtBQUtIO0FBQ0o7O0FBQ0QsV0FBT0gsTUFBUDtBQUNIOztBQUU2QixRQUFqQlEsaUJBQWlCLENBQzFCcEIsV0FEMEIsRUFFMUJxQixRQUYwQixFQUdLO0FBQy9CLFVBQU1DLFdBQVcsR0FBR0QsUUFBUSxDQUFDaEIsR0FBVCxDQUFha0IsQ0FBQyxJQUM5QkEsQ0FBQyxDQUFDQyxNQUFGLElBQVlULFNBQVosR0FBeUIsV0FBVVEsQ0FBQyxDQUFDRSxHQUFJLElBQUdDLElBQUksQ0FBQ0MsU0FBTCxDQUFlSixDQUFDLENBQUNDLE1BQWpCLENBQXlCLEVBQXJFLEdBQTBFLFdBQVVELENBQUMsQ0FBQ0UsR0FBSSxFQUQxRSxDQUFwQjtBQUdBLFVBQU1sQixRQUFRLEdBQUcsTUFBTSxLQUFLWCxVQUFMLENBQ2xCWSxJQURrQixDQUNiLEtBQUtDLFdBQUwsQ0FBaUJULFdBQWpCLEVBQThCLFdBQTlCLENBRGEsRUFFbEJVLFlBRmtCLENBRUxZLFdBRkssRUFHbEJYLElBSGtCLEVBQXZCO0FBSUEsV0FBT1csV0FBVyxDQUFDakIsR0FBWixDQUFnQmtCLENBQUM7QUFBQTs7QUFBQSw0QkFBSWhCLFFBQVEsQ0FBQ2dCLENBQUQsQ0FBWixnREFBSSxZQUFhVCxLQUFqQjtBQUFBLEtBQWpCLEVBQXlDVSxNQUF6QyxDQUFnREksaUNBQWhELENBQVA7QUFDSDs7QUFFc0IsUUFBVkMsVUFBVSxDQUFDQyxXQUFELEVBQStDO0FBQ2xFLFVBQU1DLElBQUksR0FBRyxNQUFNLEtBQUtuQyxVQUFMLENBQWdCb0MsR0FBaEIsQ0FBcUIsbUJBQXJCLEVBQXlDckIsSUFBekMsRUFBbkI7QUFDQSxXQUFPc0IsTUFBTSxDQUFDQyxJQUFQLENBQVlILElBQUksQ0FBQ0ksS0FBakIsQ0FBUDtBQUNIOztBQUVnQyxRQUFwQkMsb0JBQW9CLENBQzdCQyxFQUQ2QixFQUU3QkMsV0FGNkIsRUFHN0JSLFdBSDZCLEVBSUQ7QUFDNUIsV0FBTyxNQUFNLEtBQUtsQyxVQUFMLENBQ1JZLElBRFEsQ0FDRixTQUFRNkIsRUFBRywwQkFEVCxFQUVSRSxlQUZRLENBRVE7QUFDYkYsTUFBQUEsRUFBRSxFQUFFQSxFQURTO0FBRWJDLE1BQUFBLFdBQVcsRUFBRUE7QUFGQSxLQUZSLEVBTVJFLGVBTlEsQ0FNUVYsV0FOUixFQU9SbkIsSUFQUSxFQUFiO0FBUUg7O0FBRTRCLFFBQWhCOEIsZ0JBQWdCLENBQUNKLEVBQUQsRUFBYUssR0FBYixFQUEwQlosV0FBMUIsRUFBbUY7QUFDNUcsV0FBTyxNQUFNLEtBQUtsQyxVQUFMLENBQ1JZLElBRFEsQ0FDRixTQUFRNkIsRUFBRyxlQURULEVBRVJFLGVBRlEsQ0FFUTtBQUFFRyxNQUFBQSxHQUFHLEVBQUVBO0FBQVAsS0FGUixFQUdSRixlQUhRLENBR1FWLFdBSFIsRUFJUm5CLElBSlEsRUFBYjtBQUtIOztBQUl1QixRQUFYZ0MsV0FBVyxDQUFDTixFQUFELEVBQWFLLEdBQWIsRUFBc0NFLFVBQXRDLEVBQXlGO0FBQzdHLFFBQUlGLEdBQUcsSUFBSTNCLFNBQVAsSUFBb0I2QixVQUFVLElBQUk3QixTQUF0QyxFQUFpRDtBQUM3QyxhQUFPLE1BQU0sS0FBS25CLFVBQUwsQ0FDUlksSUFEUSxDQUNGLFNBQVE2QixFQUFHLGVBRFQsRUFFUlEsZUFGUSxDQUVRLDBCQUZSLEVBR1JDLGtCQUhRLENBR1dGLFVBSFgsRUFJUmpDLElBSlEsRUFBYjtBQUtIOztBQUNELFFBQUkrQixHQUFHLElBQUkzQixTQUFQLElBQW9CNkIsVUFBVSxJQUFJN0IsU0FBdEMsRUFBaUQ7QUFDN0MsYUFBTyxNQUFNLEtBQUtuQixVQUFMLENBQ1JZLElBRFEsQ0FDRixTQUFRNkIsRUFBRyxlQURULEVBRVJFLGVBRlEsQ0FFUTtBQUFFRyxRQUFBQSxHQUFHLEVBQUVBO0FBQVAsT0FGUixFQUdSRyxlQUhRLENBR1EsMEJBSFIsRUFJUkMsa0JBSlEsQ0FJV0MsTUFBTSxDQUFDQyxJQUFQLENBQVksRUFBWixDQUpYLEVBS1JyQyxJQUxRLEVBQWI7QUFNSDs7QUFDRCxRQUFJK0IsR0FBRyxJQUFJM0IsU0FBUCxJQUFvQjZCLFVBQVUsSUFBSTdCLFNBQXRDLEVBQWlEO0FBQzdDLFlBQU0sSUFBSWtDLEtBQUosQ0FBVSxrREFBVixDQUFOO0FBQ0g7O0FBQ0QsV0FBTyxNQUFNLEtBQUtyRCxVQUFMLENBQ1JZLElBRFEsQ0FDRixTQUFRNkIsRUFBRyxlQURULEVBRVJFLGVBRlEsQ0FFUTtBQUFFRyxNQUFBQSxHQUFHLEVBQUVBO0FBQVAsS0FGUixFQUdSRyxlQUhRLENBR1EsMEJBSFIsRUFJUkMsa0JBSlEsQ0FJV0YsVUFKWCxFQUtSakMsSUFMUSxFQUFiO0FBTUg7O0FBRXNCLFFBQVZ1QyxVQUFVLEdBQWtCO0FBQ3JDLFVBQU0sS0FBS3RELFVBQUwsQ0FBZ0JvQyxHQUFoQixDQUFxQixjQUFyQixDQUFOO0FBQ0g7O0FBRU92QixFQUFBQSxXQUFXLENBQUNULFdBQUQsRUFBMkJtRCxlQUEzQixFQUE0RDtBQUMzRSxXQUFRLFNBQVFuRCxXQUFXLENBQUNxQyxFQUFHLFdBQVVyQyxXQUFXLENBQUNvRCxPQUFRLElBQUdELGVBQWdCLEVBQWhGO0FBQ0g7O0FBRU9yRCxFQUFBQSw0QkFBNEIsQ0FBQ0gsY0FBRCxFQUFxRDtBQUNyRixXQUFRMEQsT0FBRCxJQUF1QztBQUMxQyxVQUFJMUQsY0FBYyxJQUFJb0IsU0FBbEIsSUFBK0JwQixjQUFjLEtBQUssNkJBQXRELEVBQXFGO0FBQ2pGMEQsUUFBQUEsT0FBTyxDQUFDQyxXQUFSLEdBQXNCLFNBQXRCO0FBQ0EsZUFBT0QsT0FBUDtBQUNILE9BSEQsTUFHTyxJQUFJLGFBQWExRCxjQUFiLElBQStCQSxjQUFjLENBQUM0RCxPQUFmLElBQTBCeEMsU0FBN0QsRUFBd0U7QUFDM0VzQyxRQUFBQSxPQUFPLENBQUNDLFdBQVIsR0FBc0IsTUFBdEI7QUFDQUQsUUFBQUEsT0FBTyxDQUFDRyxPQUFSLEdBQWtCLEVBQ2QsR0FBR0gsT0FBTyxDQUFDRyxPQURHO0FBRWRDLFVBQUFBLGFBQWEsRUFBRyxZQUFXOUQsY0FBYyxDQUFDNEQsT0FBUTtBQUZwQyxTQUFsQjtBQUlBLGVBQU9GLE9BQVA7QUFDSDs7QUFDREEsTUFBQUEsT0FBTyxDQUFDQyxXQUFSLEdBQXNCLE1BQXRCO0FBQ0EsYUFBT0QsT0FBUDtBQUNILEtBZEQ7QUFlSDs7QUFFMkIsUUFBZkssZUFBZSxHQUFrQztBQUMxRCxXQUFPLE1BQU0sS0FBSzlELFVBQUwsQ0FBZ0JvQyxHQUFoQixDQUFvQixtQkFBcEIsRUFBeUNyQixJQUF6QyxFQUFiO0FBQ0g7O0FBL0lrRDs7OztBQWtKaEQsTUFBTVYsbUJBQU4sQ0FBMEQ7QUFJdERWLEVBQUFBLFdBQVcsQ0FBQ0ssVUFBRCxFQUEwQkksV0FBMUIsRUFBb0Q7QUFBQSxTQUhyREosVUFHcUQ7QUFBQSxTQUZyREksV0FFcUQ7QUFDbEUsU0FBS0osVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxTQUFLSSxXQUFMLEdBQW1CQSxXQUFuQjtBQUNIOztBQUVNMkQsRUFBQUEsb0JBQW9CLEdBQVc7QUFDbEMsV0FBTyxLQUFLL0QsVUFBTCxDQUFnQmdFLEdBQWhCLENBQXFCLG1CQUFrQixLQUFLNUQsV0FBTCxDQUFpQnFDLEVBQUcsV0FBVSxLQUFLckMsV0FBTCxDQUFpQm9ELE9BQVEsRUFBOUYsQ0FBUDtBQUNIOztBQUVNUyxFQUFBQSxrQkFBa0IsR0FBVztBQUNoQyxXQUFPLEtBQUtqRSxVQUFMLENBQWdCZ0UsR0FBaEIsQ0FBb0IsS0FBS25ELFdBQUwsQ0FBaUIsU0FBakIsQ0FBcEIsQ0FBUDtBQUNIOztBQUVNcUQsRUFBQUEsd0JBQXdCLEdBQVc7QUFDdEMsV0FBTyxLQUFLbEUsVUFBTCxDQUFnQmdFLEdBQWhCLENBQW9CLEtBQUtuRCxXQUFMLENBQWlCLFlBQWpCLENBQXBCLENBQVA7QUFDSDs7QUFFTXNELEVBQUFBLHlCQUF5QixHQUFXO0FBQ3ZDLFdBQU8sS0FBS0MsZ0NBQUwsQ0FBc0NDLDZDQUFzQkMsUUFBNUQsQ0FBUDtBQUNIOztBQUVNQyxFQUFBQSwyQkFBMkIsR0FBVztBQUN6QyxXQUFPLEtBQUtILGdDQUFMLENBQXNDQyw2Q0FBc0JHLFVBQTVELENBQVA7QUFDSDs7QUFFTUMsRUFBQUEsZ0NBQWdDLEdBQVc7QUFDOUMsV0FBTyxLQUFLTCxnQ0FBTCxDQUFzQ0MsNkNBQXNCSyxlQUE1RCxDQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLG9CQUFvQixHQUFXO0FBQ2xDLFdBQU8sS0FBS1AsZ0NBQUwsQ0FBc0NDLDZDQUFzQk8sS0FBNUQsQ0FBUDtBQUNIOztBQUV1QixRQUFYQyxXQUFXLEdBQTRCO0FBQ2hELFdBQU8sS0FBSzdFLFVBQUwsQ0FBZ0JvQyxHQUFoQixDQUFvQixLQUFLMEMsdUJBQUwsQ0FBNkJULDZDQUFzQlUsUUFBbkQsQ0FBcEIsRUFBa0ZoRSxJQUFsRixFQUFQO0FBQ0g7O0FBRXVCLFFBQVhpRSxXQUFXLENBQUNDLE1BQUQsRUFBa0Q7QUFBQTs7QUFDdEUsVUFBTUMsS0FBSyxHQUFHLE1BQU0sS0FBS2xGLFVBQUwsQ0FDZlksSUFEZSxDQUNWLEtBQUtDLFdBQUwsQ0FBaUIsV0FBakIsQ0FEVSxFQUVmQyxZQUZlLENBRUYsQ0FBRSxTQUFGLENBRkUsRUFHZkMsSUFIZSxFQUFwQjtBQUlBLHNCQUFPbUUsS0FBSyxDQUFFLFNBQVFELE1BQU8sRUFBakIsQ0FBWiw0Q0FBTyxRQUEwQi9ELEtBQWpDO0FBQ0g7O0FBRXVCLFFBQVhpRSxXQUFXLEdBQTBCO0FBQzlDLFVBQU1ELEtBQUssR0FBRyxNQUFNLEtBQUtsRixVQUFMLENBQ2ZZLElBRGUsQ0FDVixLQUFLQyxXQUFMLENBQWlCLFdBQWpCLENBRFUsRUFFZkMsWUFGZSxDQUVGLENBQUUsU0FBRixDQUZFLEVBR2ZDLElBSGUsRUFBcEI7QUFJQSxXQUFPc0IsTUFBTSxDQUFDK0MsTUFBUCxDQUFjRixLQUFkLEVBQXFCekUsR0FBckIsQ0FBeUJrQixDQUFDLElBQUlBLENBQUMsQ0FBQ1QsS0FBaEMsQ0FBUDtBQUNIOztBQUV1QixRQUFYbUUsV0FBVyxDQUFDSixNQUFELEVBQWlCSyxRQUFqQixFQUErRTtBQUNuRyxVQUFNLEtBQUt0RixVQUFMLENBQ0RZLElBREMsQ0FDSSxLQUFLa0UsdUJBQUwsQ0FBNkJULDZDQUFzQk8sS0FBbkQsQ0FESixFQUVEakMsZUFGQyxDQUVlcEQsY0FGZixFQUdEdUIsWUFIQyxDQUdZO0FBQ1Z5RSxNQUFBQSxLQUFLLEVBQUUsRUFERztBQUVWQyxNQUFBQSxPQUFPLEVBQUU7QUFDTCxTQUFFLFNBQVFQLE1BQU8sRUFBakIsR0FBcUIsRUFDakIsR0FBR0ssUUFEYztBQUVqQkcsVUFBQUEsRUFBRSxFQUFFUjtBQUZhO0FBRGhCLE9BRkM7QUFRVlMsTUFBQUEsT0FBTyxFQUFFO0FBUkMsS0FIWixDQUFOO0FBYUg7O0FBRXNCLFFBQVZDLFVBQVUsQ0FBQ1YsTUFBRCxFQUFnQztBQUNuRCxVQUFNLEtBQUtqRixVQUFMLENBQ0RZLElBREMsQ0FDSSxLQUFLa0UsdUJBQUwsQ0FBNkJULDZDQUFzQk8sS0FBbkQsQ0FESixFQUVEakMsZUFGQyxDQUVlcEQsY0FGZixFQUdEdUIsWUFIQyxDQUdZO0FBQ1Z5RSxNQUFBQSxLQUFLLEVBQUUsRUFERztBQUVWQyxNQUFBQSxPQUFPLEVBQUUsRUFGQztBQUdWRSxNQUFBQSxPQUFPLEVBQUUsQ0FBRSxTQUFRVCxNQUFPLEVBQWpCO0FBSEMsS0FIWixDQUFOO0FBUUg7O0FBRU1XLEVBQUFBLGlCQUFpQixHQUE0QjtBQUNoRCxXQUFPLEtBQUs1RixVQUFMLENBQ0ZvQyxHQURFLENBQ0UsS0FBSzBDLHVCQUFMLENBQTZCVCw2Q0FBc0J3QixjQUFuRCxDQURGLEVBRUY5RSxJQUZFLEVBQVA7QUFHSDs7QUFFTStFLEVBQUFBLG9CQUFvQixDQUFDQyxZQUFELEVBQXVCQyxTQUF2QixFQUFrRDtBQUN6RSxXQUFPLEtBQUtoRyxVQUFMLENBQWdCZ0UsR0FBaEIsQ0FBb0IsS0FBS25ELFdBQUwsQ0FBaUIsOEJBQWpCLENBQXBCLEVBQXNFO0FBQ3pFa0YsTUFBQUEsWUFBWSxFQUFFQSxZQUQyRDtBQUV6RUUsTUFBQUEsY0FBYyxFQUFFRDtBQUZ5RCxLQUF0RSxDQUFQO0FBSUg7O0FBRXNCLFFBQVZFLFVBQVUsR0FBa0I7QUFDckMsVUFBTSxLQUFLbEcsVUFBTCxDQUFnQlksSUFBaEIsQ0FBcUIsS0FBS0MsV0FBTCxDQUFpQixPQUFqQixDQUFyQixDQUFOO0FBQ0g7O0FBRW1DLFFBQXZCc0YsdUJBQXVCLENBQUM7QUFBRUMsSUFBQUEsY0FBRjtBQUFrQnRELElBQUFBO0FBQWxCLEdBQUQsRUFBOEQ7QUFDOUYsVUFBTSxLQUFLOUMsVUFBTCxDQUFnQlksSUFBaEIsQ0FBcUIsS0FBS0MsV0FBTCxDQUFpQixTQUFqQixDQUFyQixFQUFrRDhCLGVBQWxELENBQWtFO0FBQ3BFOEMsTUFBQUEsRUFBRSxFQUFFVyxjQURnRTtBQUVwRXRELE1BQUFBLEdBQUcsRUFBRUE7QUFGK0QsS0FBbEUsQ0FBTjtBQUlIOztBQUV5QixRQUFidUQsYUFBYSxDQUFDQyxJQUFELEVBQXVDO0FBQzdELFVBQU0sS0FBS3RHLFVBQUwsQ0FDRFksSUFEQyxDQUNJLEtBQUtrRSx1QkFBTCxDQUE2QlQsNkNBQXNCTyxLQUFuRCxDQURKLEVBRURqQyxlQUZDLENBRWVwRCxjQUZmLEVBR0R1QixZQUhDLENBR1l3RixJQUhaLENBQU47QUFJSDs7QUFFTUMsRUFBQUEsaUJBQWlCLENBQUNELElBQUQsRUFBd0M7QUFDNUQsV0FBTyxLQUFLdEcsVUFBTCxDQUFnQndHLFFBQWhCLENBQ0gsS0FBSzFCLHVCQUFMLENBQTZCVCw2Q0FBc0JPLEtBQW5ELENBREcsRUFFSHJGLGNBRkcsRUFHSCtHLElBSEcsQ0FBUDtBQUtIOztBQUV5QixRQUFiRyxhQUFhLENBQUNDLGFBQUQsRUFBc0U7QUFDNUYsV0FBTyxNQUFNLEtBQUsxRyxVQUFMLENBQ1JZLElBRFEsQ0FDSCxLQUFLQyxXQUFMLENBQWlCLFdBQWpCLENBREcsRUFFUkMsWUFGUSxDQUVLNEYsYUFGTCxFQUdSM0YsSUFIUSxFQUFiO0FBSUg7O0FBRW9CLFFBQVI0RixRQUFRLENBQUNuRyxLQUFELEVBQXFFO0FBQ3RGLFdBQU8sTUFBTSxLQUFLUixVQUFMLENBQ1JZLElBRFEsQ0FDSCxLQUFLQyxXQUFMLENBQWlCLFdBQWpCLENBREcsRUFFUkMsWUFGUSxDQUVLTixLQUZMLEVBR1JPLElBSFEsRUFBYjtBQUlIOztBQUVNNkYsRUFBQUEsZUFBZSxDQUFDQyxLQUFELEVBQTBCQyxnQkFBMUIsRUFBbUY7QUFDckcsV0FBTyxLQUFLOUcsVUFBTCxDQUNGWSxJQURFLENBQ0csS0FBS0MsV0FBTCxDQUFpQixtQkFBakIsQ0FESCxFQUVGOEIsZUFGRSxDQUVjbUUsZ0JBQWdCLElBQUkzRixTQUFwQixJQUFpQztBQUFFMkYsTUFBQUEsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDQyxRQUFqQjtBQUFwQixLQUYvQyxFQUdGakcsWUFIRSxDQUdXK0YsS0FIWCxFQUlGOUYsSUFKRSxFQUFQO0FBS0g7O0FBRThCLFFBQWxCaUcsa0JBQWtCLEdBQTJDO0FBQ3RFLFdBQU8sTUFBTSxLQUFLaEgsVUFBTCxDQUNSb0MsR0FEUSxDQUNKLEtBQUswQyx1QkFBTCxDQUE2QlQsNkNBQXNCNEMsZUFBbkQsQ0FESSxFQUVSbEcsSUFGUSxFQUFiO0FBR0g7O0FBRTZCLFFBQWpCbUcsaUJBQWlCLENBQUNDLFlBQUQsRUFBNEM7QUFBQTs7QUFDdEUsVUFBTW5HLE1BQU0sR0FBRyxNQUFNLEtBQUtoQixVQUFMLENBQ2hCWSxJQURnQixDQUNYLEtBQUtDLFdBQUwsQ0FBaUIsV0FBakIsQ0FEVyxFQUVoQkMsWUFGZ0IsQ0FFSCxDQUFFLGVBQWNxRyxZQUFhLEVBQTdCLENBRkcsRUFHaEJwRyxJQUhnQixFQUFyQjtBQUlBLHlDQUFPQyxNQUFNLENBQUUsZUFBY21HLFlBQWEsRUFBN0IsQ0FBYiw2Q0FBTyxTQUF1Q2pHLEtBQTlDLDJEQUF1RCwwQkFBdkQ7QUFDSDs7QUFFNkIsUUFBakJrRyxpQkFBaUIsR0FBMEI7QUFDcEQsVUFBTXBHLE1BQU0sR0FBRyxNQUFNLEtBQUtoQixVQUFMLENBQ2hCWSxJQURnQixDQUNYLEtBQUtDLFdBQUwsQ0FBaUIsV0FBakIsQ0FEVyxFQUVoQkMsWUFGZ0IsQ0FFSCxDQUFFLGVBQUYsQ0FGRyxFQUdoQkMsSUFIZ0IsRUFBckI7QUFJQSxXQUFPc0IsTUFBTSxDQUFDK0MsTUFBUCxDQUFjcEUsTUFBZCxFQUFzQlAsR0FBdEIsQ0FBMEJrQixDQUFDLElBQUlBLENBQUMsQ0FBQ1QsS0FBakMsQ0FBUDtBQUNIOztBQUU2QixRQUFqQm1HLGlCQUFpQixDQUFDQyxhQUFELEVBQWtEO0FBQzVFLFVBQU0sS0FBS3RILFVBQUwsQ0FDRFksSUFEQyxDQUNJLEtBQUtrRSx1QkFBTCxDQUE2QlQsNkNBQXNCTyxLQUFuRCxDQURKLEVBRURqQyxlQUZDLENBRWVwRCxjQUZmLEVBR0R1QixZQUhDLENBR1k7QUFDVnlFLE1BQUFBLEtBQUssRUFBRSxFQURHO0FBRVZDLE1BQUFBLE9BQU8sRUFBRSxFQUZDO0FBR1ZFLE1BQUFBLE9BQU8sRUFBRTRCLGFBQWEsQ0FBQzdHLEdBQWQsQ0FBa0JnRixFQUFFLElBQUssZUFBY0EsRUFBRyxFQUExQztBQUhDLEtBSFosQ0FBTjtBQVFIOztBQUVxQyxRQUF6QjhCLHlCQUF5QixDQUFDQyxXQUFELEVBQW9EO0FBQ3RGLFVBQU1oQyxPQUFPLEdBQUcsRUFBaEI7O0FBQ0EsU0FBSyxNQUFNaUMsVUFBWCxJQUF5QkQsV0FBekIsRUFBc0M7QUFDbENoQyxNQUFBQSxPQUFPLENBQUUsZUFBY2lDLFVBQVUsQ0FBQ2hDLEVBQUcsRUFBOUIsQ0FBUCxHQUEwQztBQUN0Q2lDLFFBQUFBLFVBQVUsRUFBRUQsVUFBVSxDQUFDQyxVQURlO0FBRXRDakMsUUFBQUEsRUFBRSxFQUFFZ0MsVUFBVSxDQUFDaEMsRUFGdUI7QUFHdENrQyxRQUFBQSxJQUFJLEVBQUVGLFVBQVUsQ0FBQ0U7QUFIcUIsT0FBMUM7QUFLSDs7QUFDRCxVQUFNLEtBQUszSCxVQUFMLENBQ0RZLElBREMsQ0FDSSxLQUFLa0UsdUJBQUwsQ0FBNkJULDZDQUFzQk8sS0FBbkQsQ0FESixFQUVEakMsZUFGQyxDQUVlcEQsY0FGZixFQUdEdUIsWUFIQyxDQUdZO0FBQ1Z5RSxNQUFBQSxLQUFLLEVBQUUsRUFERztBQUVWQyxNQUFBQSxPQUFPLEVBQUVBLE9BRkM7QUFHVkUsTUFBQUEsT0FBTyxFQUFFO0FBSEMsS0FIWixDQUFOO0FBUUg7O0FBRTJCLFFBQWZrQyxlQUFlLENBQUNDLGdCQUFELEVBQTBDQyxPQUExQyxFQUFvRjtBQUM1RyxRQUFJckUsT0FBTyxHQUFHLEtBQUt6RCxVQUFMLENBQWdCK0gsR0FBaEIsQ0FBb0IsS0FBS2pELHVCQUFMLENBQTZCK0MsZ0JBQTdCLENBQXBCLENBQWQ7O0FBQ0EsUUFBSSxPQUFPQyxPQUFQLEtBQW1CLFFBQXZCLEVBQWlDO0FBQzdCckUsTUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUN1RSxXQUFSLENBQW9CRixPQUFwQixDQUFWO0FBQ0gsS0FGRCxNQUVPLElBQUksd0JBQVNBLE9BQVQsQ0FBSixFQUF1QjtBQUMxQnJFLE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDdUUsV0FBUixDQUFvQkYsT0FBcEIsQ0FBVjtBQUNILEtBRk0sTUFFQTtBQUNIckUsTUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUMzQyxZQUFSLENBQXFCZ0gsT0FBckIsQ0FBVjtBQUNIOztBQUNELFVBQU1yRSxPQUFOO0FBQ0g7O0FBRTZCLFFBQWpCd0UsaUJBQWlCLENBQzFCSixnQkFEMEIsRUFFMUJLLG1CQUYwQixFQUdiO0FBQ2IsVUFBTSxLQUFLbEksVUFBTCxDQUFnQm1JLEtBQWhCLENBQXNCLEtBQUtyRCx1QkFBTCxDQUE2QitDLGdCQUE3QixDQUF0QixFQUFzRS9HLFlBQXRFLENBQW1Gb0gsbUJBQW5GLENBQU47QUFDSDs7QUFFNkIsUUFBakJFLGlCQUFpQixDQUFDQyxRQUFELEVBQXdEO0FBQ2xGLFVBQU0xSCxRQUFRLEdBQUcsTUFBTSxLQUFLWCxVQUFMLENBQWdCb0MsR0FBaEIsQ0FBcUIsb0NBQW1DaUcsUUFBUyxFQUFqRSxFQUFvRUMsVUFBcEUsQ0FBK0UsR0FBL0UsQ0FBdkI7O0FBQ0EsUUFBSTNILFFBQVEsQ0FBQzRILE1BQVQsS0FBb0IsR0FBeEIsRUFBNkI7QUFDekIsYUFBT3BILFNBQVA7QUFDSDs7QUFDRCxXQUFPLE1BQU1SLFFBQVEsQ0FBQ0ksSUFBVCxFQUFiO0FBQ0g7O0FBRXVDLFFBQTNCeUgsMkJBQTJCLENBQUNILFFBQUQsRUFBbUJ2RixHQUFuQixFQUFxRTtBQUN6RyxVQUFNbkMsUUFBUSxHQUFHLE1BQU0sS0FBS1gsVUFBTCxDQUNsQm9DLEdBRGtCLENBQ2IsZ0RBQStDaUcsUUFBUyxRQUFPdkYsR0FBSSxFQUR0RCxFQUVsQndGLFVBRmtCLENBRVAsR0FGTyxDQUF2Qjs7QUFHQSxRQUFJM0gsUUFBUSxDQUFDNEgsTUFBVCxLQUFvQixHQUF4QixFQUE2QjtBQUN6QixhQUFPcEgsU0FBUDtBQUNIOztBQUNELFdBQU8sTUFBTVIsUUFBUSxDQUFDSSxJQUFULEVBQWI7QUFDSDs7QUFFNEIsUUFBaEIwSCxnQkFBZ0IsQ0FBQ0osUUFBRCxFQUFrQztBQUMzRCxVQUFNLEtBQUtySSxVQUFMLENBQWdCK0gsR0FBaEIsQ0FBb0IsS0FBS2xILFdBQUwsQ0FBaUIsU0FBakIsQ0FBcEIsRUFBaUQ4QixlQUFqRCxDQUFpRTtBQUFFMEYsTUFBQUEsUUFBUSxFQUFFQTtBQUFaLEtBQWpFLENBQU47QUFDSDs7QUFFZ0MsUUFBcEJLLG9CQUFvQixDQUM3QkwsUUFENkIsRUFFN0JNLGFBRjZCLEVBR1E7QUFDckMsVUFBTWhJLFFBQVEsR0FBRyxNQUFNLEtBQUtYLFVBQUwsQ0FDbEJZLElBRGtCLENBQ2IsS0FBS0MsV0FBTCxDQUFpQiwyQkFBakIsQ0FEYSxFQUVsQjhCLGVBRmtCLENBRUY7QUFBRUQsTUFBQUEsV0FBVyxFQUFFMkYsUUFBZjtBQUF5Qk0sTUFBQUEsYUFBYSxFQUFFQTtBQUF4QyxLQUZFLENBQXZCOztBQUdBLFFBQUloSSxRQUFRLENBQUM0SCxNQUFULEtBQW9CLEdBQXhCLEVBQTZCO0FBQ3pCLGFBQU9wSCxTQUFQO0FBQ0g7O0FBQ0QsV0FBTyxNQUFNUixRQUFRLENBQUNJLElBQVQsRUFBYjtBQUNIOztBQUU0QixRQUFoQjZILGdCQUFnQixDQUFDL0IsS0FBRCxFQUErQjtBQUN4RCxVQUFNLEtBQUs3RyxVQUFMLENBQWdCWSxJQUFoQixDQUFxQixLQUFLQyxXQUFMLENBQWlCLFdBQWpCLENBQXJCLEVBQW9EQyxZQUFwRCxDQUFpRStGLEtBQWpFLENBQU47QUFDSDs7QUFFT3pDLEVBQUFBLGdDQUFnQyxDQUFDeUQsZ0JBQUQsRUFBa0Q7QUFDdEYsV0FBTyxLQUFLN0gsVUFBTCxDQUFnQmdFLEdBQWhCLENBQW9CLEtBQUtjLHVCQUFMLENBQTZCK0MsZ0JBQTdCLENBQXBCLENBQVA7QUFDSDs7QUFFT2hILEVBQUFBLFdBQVcsQ0FBQzBDLGVBQUQsRUFBa0M7QUFDakQsV0FBUSxTQUFRLEtBQUtuRCxXQUFMLENBQWlCcUMsRUFBRyxXQUFVLEtBQUtyQyxXQUFMLENBQWlCb0QsT0FBUSxJQUFHRCxlQUFnQixFQUExRjtBQUNIOztBQUVPdUIsRUFBQUEsdUJBQXVCLENBQUMrQyxnQkFBRCxFQUFrRDtBQUM3RSxXQUFPLEtBQUtoSCxXQUFMLENBQWtCLGlCQUFnQmdILGdCQUFnQixDQUFDZCxRQUFqQixFQUE0QixFQUE5RCxDQUFQO0FBQ0g7O0FBelE0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTm90TnVsbE9yVW5kZWZpbmVkLCByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IEZldGNoIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvRmV0Y2hJbXBsZW1lbnRhdGlvbi9GZXRjaFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0h0dHBDbGllbnRcIjtcbmltcG9ydCB7IEh0dHBTdGF0dXNDb2RlLCBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5cbmltcG9ydCB7IENhbmR5QXBpQXV0aGVudGljYXRpb24gfSBmcm9tIFwiLi9UeXBlcy9DYW5keUFwaUF1dGhlbnRpY2F0aW9uXCI7XG5pbXBvcnQgeyBTZXJ2ZXJEaWdlc3RSZXNwb25zZSwgU2VydmVyTXVsdGlEaWdlc3RSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1BpY2tsaXN0L1BpY2tsaXN0U2VydmVyUmVzcG9uc2VzXCI7XG5pbXBvcnQgeyBJQ2FuZHlBcGlDbGllbnQsIElDYW5keUFwaURyYWZ0Q2xpZW50IH0gZnJvbSBcIi4vSUNhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgeyBTZXJ2ZXJJbm5lclJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvR2V0SW5uZXIvU2VydmVySW5uZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgRmlsZVByb3BlcnRpZXMgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvRmlsZVByb3BlcnRpZXNcIjtcbmltcG9ydCB7IENyZWF0ZURyYWZ0UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9DcmVhdGVEcmFmdC9DcmVhdGVEcmFmdFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0V4cGxhbmF0b3J5Tm90ZS9DcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZVwiO1xuaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEZ1bGxJZFwiO1xuaW1wb3J0IHsgU2VydmVyQ2hhbmdlU2V0IH0gZnJvbSBcIi4vVHlwZXMvQ2hhbmdlU2V0L1NlcnZlckNoYW5nZVNldFwiO1xuaW1wb3J0IHsgU2VydmVyVGFzaywgVmVyaWZ5QW5kRml4Rm5zUmVxdWlyZW1lbnRzVGFza0luZm8gfSBmcm9tIFwiLi9UeXBlcy9UYXNrcy9UYXNrc1wiO1xuaW1wb3J0IHsgRGlnZXN0UmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL1BpY2tsaXN0L0RpZ2VzdFJlcXVlc3RcIjtcbmltcG9ydCB7IEZvY3VzU2VydmVyRXJyb3JDb2RlLCBHZXRCeUlublJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNUeXBlc1wiO1xuaW1wb3J0IHsgQXR0YWNoSW5mbyB9IGZyb20gXCIuL1R5cGVzL0F0dGFjaG1lbnRzL0F0dGFjbWVudHNcIjtcbmltcG9ydCB7IERyYWZ0UHJlc2VudGF0aW9uVHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvRHJhZnRQcmVzZW50YXRpb25UeXBlXCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBDb252ZXJ0RHJhZnRSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbnZlcnREcmFmdFJlcXVlc3RcIjtcbmltcG9ydCB7IEdldEF0dGFjaG1lbnRzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9HZXRBdHRhY2htZW50c1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNTZXJ2ZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgR2V0VGFza3NTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL0dldFRhc2tzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IERpYWdSZXNvdXJjZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0RpYWdSZXNvdXJjZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgU2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvR2V0SW5uZXIvU2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBpc0J1ZmZlciB9IGZyb20gXCIuL0lzQnVmZmVyXCI7XG5pbXBvcnQgeyBGdWZDb21iaW5lTWV0aG9kLCBDb21iaW5lRnVmUmVzdWx0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbWJpbmVGdWZSZXN1bHRcIjtcbmltcG9ydCB7IEZlYXR1cmVGbGFnc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRmVhdHVyZUZsYWdzL0ZlYXR1cmVGbGFnc1Jlc3BvbnNlXCI7XG5cbmNvbnN0IHN0cmFuZ2VPcHRpb25zID0geyBzcmM6IFwiY2hhbmdlU2V0XCIsIGRhdGFWZXJzaW9uOiBcIjBcIiB9O1xuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgcmVzb3VyY2Vab25lOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uOiB1bmRlZmluZWQgfCBDYW5keUFwaUF1dGhlbnRpY2F0aW9uXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IG5ldyBIdHRwQ2xpZW50KGZldGNoSW1wbCwgYmFzZVVybCwgdGhpcy5jcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyKGF1dGhlbnRpY2F0aW9uKSwge1xuICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JEcmFmdChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpOiBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FuZHlBcGlEcmFmdENsaWVudCh0aGlzLmh0dHBDbGllbnQsIGRyYWZ0RnVsbElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mb0J5SW5ucyhkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGlubnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxHZXRCeUlublJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHBhdGhzID0gaW5ucy5tYXAoaW5uID0+IGBAZm9jdXMvJHtpbm59YCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKGRyYWZ0RnVsbElkLCBcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aHMpXG4gICAgICAgICAgICAuanNvbjxGb2N1c1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICBjb25zdCByZXN1bHQ6IEdldEJ5SW5uUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBpbm4gb2YgaW5ucykge1xuICAgICAgICAgICAgY29uc3QgaW5uU2VydmVyVmFsdWUgPSByZXNwb25zZVtgQGZvY3VzLyR7aW5ufWBdPy52YWx1ZTtcbiAgICAgICAgICAgIGlmIChpbm5TZXJ2ZXJWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaW5uXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiU2VydmVyIGRvZXMgbm90IHJldHVybiBpbm4gaW5mb1wiLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IEZvY3VzU2VydmVyRXJyb3JDb2RlLk5vSW5uRXJyb3IsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpbm5TZXJ2ZXJWYWx1ZS52YWx1ZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZTogaW5uU2VydmVyVmFsdWUuZXJyb3JDb2RlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGlublNlcnZlclZhbHVlLmVycm9yID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldERpZ2VzdE11bHRpcGxlKFxuICAgICAgICBkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsXG4gICAgICAgIHJlcXVlc3RzOiBEaWdlc3RSZXF1ZXN0W11cbiAgICApOiBQcm9taXNlPFNlcnZlckRpZ2VzdFJlc3BvbnNlW10+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdEtleXMgPSByZXF1ZXN0cy5tYXAoeCA9PlxuICAgICAgICAgICAgeC5maWx0ZXIgIT0gdW5kZWZpbmVkID8gYEBkaWdlc3QvJHt4LmdJZH0vJHtKU09OLnN0cmluZ2lmeSh4LmZpbHRlcil9YCA6IGBAZGlnZXN0LyR7eC5nSWR9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChkcmFmdEZ1bGxJZCwgXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJlcXVlc3RLZXlzKVxuICAgICAgICAgICAgLmpzb248U2VydmVyTXVsdGlEaWdlc3RSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3RLZXlzLm1hcCh4ID0+IHJlc3BvbnNlW3hdPy52YWx1ZSkuZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsR2Z2cyhhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgdjEvZGlhZy9yZXNvdXJjZXNgKS5qc29uPERpYWdSZXNvdXJjZXNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGJvZHkuZm9ybXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0LWZyb20tZHJpdmVgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgICAgICAgIGZ1ZkRyaXZlVXJpOiBmdWZEcml2ZVVyaSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRW1wdHlEcmFmdChuczogc3RyaW5nLCBnZnY6IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGZ1ZkNvbnRlbnQ6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogdW5kZWZpbmVkIHwgc3RyaW5nLCBmdWZDb250ZW50PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIGlmIChnZnYgPT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoZnVmQ29udGVudClcbiAgICAgICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZnYgIT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoQnVmZmVyLmZyb20oW10pKVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgZHJhZnQ6IG5vIGdmdiBhbmQgbm8gZnVmIHNwZWNpZmllZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tBbGl2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgX3N0YXR1cy9waW5nYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHtkcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlcihhdXRoZW50aWNhdGlvbjogQ2FuZHlBcGlBdXRoZW50aWNhdGlvbiB8IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gKHJlcXVlc3Q6IFJlcXVlc3RJbml0KTogUmVxdWVzdEluaXQgPT4ge1xuICAgICAgICAgICAgaWYgKGF1dGhlbnRpY2F0aW9uID09IHVuZGVmaW5lZCB8fCBhdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gYXV0aGVudGljYXRpb24gJiYgYXV0aGVudGljYXRpb24uYXV0aFNpZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBBVVRILlNJRCAke2F1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVxdWVzdC5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZlYXR1cmVGbGFncygpOiBQcm9taXNlPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KFwidjEvZmVhdHVyZXMvZmxhZ3NcIikuanNvbjxGZWF0dXJlRmxhZ3NSZXNwb25zZT4oKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5keUFwaURyYWZ0Q2xpZW50IGltcGxlbWVudHMgSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaHR0cENsaWVudDogSUh0dHBDbGllbnQsIGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBodHRwQ2xpZW50O1xuICAgICAgICB0aGlzLmRyYWZ0RnVsbElkID0gZHJhZnRGdWxsSWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0lubmVyRWRpdG9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKGBpbm5lci1lZGl0b3IvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZEb3dubG9hZEZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWZ1ZlwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0NvbnZlcnRhdGlvbkxvZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0VXJsKFwiY29udmVyc2lvblwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkSW5uZXJGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyRnVmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5jbGllbnRJbmZvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmZvcm1zQ2xpZW50SW5mbyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZEb3dubG9hZElubmVyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuZXJyb3JMb2cpKS5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRUYXNrQnlJZCh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8U2VydmVyVGFzayB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCB0YXNrcyA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAdGFzay8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRUYXNrc1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gdGFza3NbYEB0YXNrLyR7dGFza0lkfWBdPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsVGFza3MoKTogUHJvbWlzZTxTZXJ2ZXJUYXNrW10+IHtcbiAgICAgICAgY29uc3QgdGFza3MgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQHRhc2svKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0VGFza3NTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGFza3MpLm1hcCh4ID0+IHgudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbnF1ZXVlVGFzayh0YXNrSWQ6IHN0cmluZywgdGFza0luZm86IFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7XG4gICAgICAgICAgICAgICAgICAgIFtgQHRhc2svJHt0YXNrSWR9YF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRhc2tJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRhc2tJZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNhbmNlbFRhc2sodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHt9LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtgQHRhc2svJHt0YXNrSWR9YF0sXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXhwZXJ0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmVycm9ybG9nRXhwZXJ0KSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9FcnJvckxvZ1BkZihlcnJvckxvZ05hbWU6IHN0cmluZywgcHJvcHNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0VXJsKFwicHJlc2VudGF0aW9ucy9lcnJvckxvZy9wcmludFwiKSwge1xuICAgICAgICAgICAgZXJyb3JMb2dOYW1lOiBlcnJvckxvZ05hbWUsXG4gICAgICAgICAgICBwcm9wc0RyaXZlTmFtZTogcHJvcHNOYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2xlYXJEcmFmdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcImNsZWFyXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY29udmVydERyYWZ0RnJvbVByZXZHZnYoeyBwcmV2R2Z2RHJhZnRJZCwgZ2Z2IH06IENvbnZlcnREcmFmdFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcImNvbnZlcnRcIikpLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICBpZDogcHJldkdmdkRyYWZ0SWQsXG4gICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlbmRDaGFuZ2VTZXQoZGF0YTogU2VydmVyQ2hhbmdlU2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRDaGFuZ2VTZXRTeW5jKGRhdGE6IFNlcnZlckNoYW5nZVNldCk6IEh0dHBTdGF0dXNDb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0U3luYyhcbiAgICAgICAgICAgIHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSxcbiAgICAgICAgICAgIHN0cmFuZ2VPcHRpb25zLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSZXF1aXNpdGVzKHJlcXVpc2l0ZUxpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWlzaXRlTGlzdClcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5uZXIocGF0aHM6IHVuZGVmaW5lZCB8IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyKHJ1bGVzOiBbXCIqXCJdIHwgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShydWxlcylcbiAgICAgICAgICAgIC5qc29uPFNlcnZlcklubmVyUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEV4cGxhbmF0b3J5Tm90ZSgpOiBQcm9taXNlPENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuZXhwbGFuYXRvcnlOb3RlKSlcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBdHRhY2htZW50QnlJZChhdHRhY2htZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QXR0YWNoSW5mbz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50SWR9YF0pXG4gICAgICAgICAgICAuanNvbjxHZXRBdHRhY2htZW50c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzdWx0W2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXT8udmFsdWUgPz8gcmVqZWN0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEF0dGFjaG1lbnRzKCk6IFByb21pc2U8QXR0YWNoSW5mb1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRBdHRhY2htZW50c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXN1bHQpLm1hcCh4ID0+IHgudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZW1vdmVBdHRhY2htZW50cyhhdHRhY2htZW50SWRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge30sXG4gICAgICAgICAgICAgICAgcmVtb3ZlZDogYXR0YWNobWVudElkcy5tYXAoaWQgPT4gYEBhdHRhY2htZW50LyR7aWR9YCksXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlT3JVcGRhdGVBdHRhY2htZW50cyhhdHRhY2htZW50czogcmVhZG9ubHkgQXR0YWNoSW5mb1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICBjaGFuZ2VkW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnQuaWR9YF0gPSB7XG4gICAgICAgICAgICAgICAgY29udGVudFVyaTogYXR0YWNobWVudC5jb250ZW50VXJpLFxuICAgICAgICAgICAgICAgIGlkOiBhdHRhY2htZW50LmlkLFxuICAgICAgICAgICAgICAgIG1ldGE6IGF0dGFjaG1lbnQubWV0YSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IGNoYW5nZWQsXG4gICAgICAgICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0UHJlc2VudGF0aW9uKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogc3RyaW5nIHwgdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuaHR0cENsaWVudC5wdXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aFJhd0JvZHkoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoY29udGVudCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aEpzb25Cb2R5KGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHBhdGNoUHJlc2VudGF0aW9uKFxuICAgICAgICBwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsXG4gICAgICAgIHByZXNlbnRhdGlvbkNvbnRlbnQ6IFByZXNlbnRhdGlvbkNvbnRlbnRcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpLndpdGhKc29uQm9keShwcmVzZW50YXRpb25Db250ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZyk6IFByb21pc2U8RmlsZVByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGB2MS9maWxlcy9nZXQtcHJvcGVydGllcz9kcml2ZVVyaT0ke2RyaXZlVXJpfWApLmFjY2VwdENvZGUoNDAwKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEZpbGVQcm9wZXJ0aWVzPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9wcmVwYXJlLWFuZC1nZXQtcHJvcGVydGllcz9kcml2ZVVyaT0ke2RyaXZlVXJpfSZnZnY9JHtnZnZ9YClcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwMCk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxGaWxlUHJvcGVydGllcz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0RnVmQnlEcml2ZVVyaShkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wdXQodGhpcy5nZXREcmFmdFVybChcInNldC1mdWZcIikpLndpdGhRdWVyeVBhcmFtcyh7IGRyaXZlVXJpOiBkcml2ZVVyaSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2RcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9jb21iaW5lLXdpdGgtZnVmXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGZ1ZkRyaXZlVXJpOiBkcml2ZVVyaSwgY29tYmluZU1ldGhvZDogY29tYmluZU1ldGhvZCB9KTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5vcm1hbGl6ZUJ5UnVsZXMocnVsZXM6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwibm9ybWFsaXplXCIpKS53aXRoSnNvbkJvZHkocnVsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdFJlbGF0ZWRVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy8ke3ByZXNlbnRhdGlvblR5cGUudG9TdHJpbmcoKX1gKTtcbiAgICB9XG59XG4iXX0=
|
|
364
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJuYW1lcyI6WyJzdHJhbmdlT3B0aW9ucyIsInNyYyIsImRhdGFWZXJzaW9uIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiZm9yRHJhZnQiLCJkcmFmdEZ1bGxJZCIsIkNhbmR5QXBpRHJhZnRDbGllbnQiLCJjcmVhdGVEaWdlc3RBcGlDbGllbnQiLCJEaWdlc3RBcGlDbGllbnQiLCJnZXRJbmZvQnlJbm5zIiwiaW5ucyIsInBhdGhzIiwibWFwIiwiaW5uIiwicmVzcG9uc2UiLCJwb3N0IiwiZ2V0RHJhZnRVcmwiLCJ3aXRoSnNvbkJvZHkiLCJqc29uIiwicmVzdWx0IiwiaW5uU2VydmVyVmFsdWUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImVycm9yIiwiZXJyb3JDb2RlIiwiRm9jdXNTZXJ2ZXJFcnJvckNvZGUiLCJOb0lubkVycm9yIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiYm9keSIsImdldCIsIk9iamVjdCIsImtleXMiLCJmb3JtcyIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwibnMiLCJmdWZEcml2ZVVyaSIsIndpdGhRdWVyeVBhcmFtcyIsIndpdGhBYm9ydFNpZ25hbCIsImNyZWF0ZUVtcHR5RHJhZnQiLCJnZnYiLCJjcmVhdGVEcmFmdCIsImZ1ZkNvbnRlbnQiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiRXJyb3IiLCJjaGVja0FsaXZlIiwiZHJhZnRSZWxhdGVkVXJsIiwiZHJhZnRJZCIsImdldEZlYXR1cmVGbGFncyIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwidXJsIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nIiwiZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZiIsImdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uIiwiRHJhZnRQcmVzZW50YXRpb25UeXBlIiwiaW5uZXJGdWYiLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJjbGllbnRJbmZvIiwiZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8iLCJmb3Jtc0NsaWVudEluZm8iLCJnZXRIcmVmRG93bmxvYWRJbm5lciIsImlubmVyIiwiZ2V0RXJyb3JMb2ciLCJnZXREcmFmdFByZXNlbnRhdGlvblVybCIsImVycm9yTG9nIiwiZ2V0VGFza0J5SWQiLCJ0YXNrSWQiLCJ0YXNrcyIsImdldEFsbFRhc2tzIiwidmFsdWVzIiwieCIsImVucXVldWVUYXNrIiwidGFza0luZm8iLCJhZGRlZCIsImNoYW5nZWQiLCJpZCIsInJlbW92ZWQiLCJjYW5jZWxUYXNrIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJlcnJvcmxvZ0V4cGVydCIsImdldEhyZWZUb0Vycm9yTG9nUGRmIiwiZXJyb3JMb2dOYW1lIiwicHJvcHNOYW1lIiwicHJvcHNEcml2ZU5hbWUiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJwcmV2R2Z2RHJhZnRJZCIsInNlbmRDaGFuZ2VTZXQiLCJkYXRhIiwic2VuZENoYW5nZVNldFN5bmMiLCJwb3N0U3luYyIsImdldFJlcXVpc2l0ZXMiLCJyZXF1aXNpdGVMaXN0IiwiZ2V0SW5uZXIiLCJnZXRQYXJ0aWFsSW5uZXIiLCJydWxlcyIsIm1heEluc3RhbmNlQ291bnQiLCJ0b1N0cmluZyIsImdldEV4cGxhbmF0b3J5Tm90ZSIsImV4cGxhbmF0b3J5Tm90ZSIsImdldEF0dGFjaG1lbnRCeUlkIiwiYXR0YWNobWVudElkIiwiZ2V0QWxsQXR0YWNobWVudHMiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiY29udGVudFVyaSIsIm1ldGEiLCJzZXRQcmVzZW50YXRpb24iLCJwcmVzZW50YXRpb25UeXBlIiwiY29udGVudCIsInJlcXVlc3QiLCJwdXQiLCJ3aXRoUmF3Qm9keSIsInBhdGNoUHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uQ29udGVudCIsInBhdGNoIiwiZ2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaSIsImFjY2VwdENvZGUiLCJzdGF0dXMiLCJwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJzZXRGdWZCeURyaXZlVXJpIiwiY29tYmluZUZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lTWV0aG9kIiwibm9ybWFsaXplQnlSdWxlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQUVBOztBQVdBOztBQUVBOztBQVFBOztBQUdBOztBQUdBLE1BQU1BLGNBQWMsR0FBRztBQUFFQyxFQUFBQSxHQUFHLEVBQUUsV0FBUDtBQUFvQkMsRUFBQUEsV0FBVyxFQUFFO0FBQWpDLENBQXZCOztBQUVPLE1BQU1DLGNBQU4sQ0FBZ0Q7QUFHNUNDLEVBQUFBLFdBQVcsQ0FDZEMsU0FEYyxFQUVkQyxPQUZjLEVBR2RDLFlBSGMsRUFJZEMsY0FKYyxFQUtoQjtBQUFBLFNBUGVDLFVBT2Y7QUFDRSxTQUFLQSxVQUFMLEdBQWtCLElBQUlDLHNCQUFKLENBQWVMLFNBQWYsRUFBMEJDLE9BQTFCLEVBQW1DLHNEQUE2QkUsY0FBN0IsQ0FBbkMsRUFBaUY7QUFDL0ZELE1BQUFBLFlBQVksRUFBRUE7QUFEaUYsS0FBakYsQ0FBbEI7QUFHSDs7QUFFTUksRUFBQUEsUUFBUSxDQUFDQyxXQUFELEVBQWlEO0FBQzVELFdBQU8sSUFBSUMsbUJBQUosQ0FBd0IsS0FBS0osVUFBN0IsRUFBeUNHLFdBQXpDLENBQVA7QUFDSDs7QUFFTUUsRUFBQUEscUJBQXFCLENBQUNGLFdBQUQsRUFBNkM7QUFDckUsV0FBTyxJQUFJRyxnQ0FBSixDQUFvQixLQUFLTixVQUF6QixFQUFxQ0cs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R0QsZUFBZ0IsRUFBMUY7QUFDSDs7QUFFT2tCLEVBQUFBLHVCQUF1QixDQUFDZ0QsZ0JBQUQsRUFBa0Q7QUFDN0UsV0FBTyxLQUFLbkcsV0FBTCxDQUFrQixpQkFBZ0JtRyxnQkFBZ0IsQ0FBQ2QsUUFBakIsRUFBNEIsRUFBOUQsQ0FBUDtBQUNIOztBQXpRNEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IEZldGNoIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvRmV0Y2hJbXBsZW1lbnRhdGlvbi9GZXRjaFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0h0dHBDbGllbnRcIjtcbmltcG9ydCB7IEh0dHBTdGF0dXNDb2RlLCBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcblxuaW1wb3J0IHsgSUNhbmR5QXBpQ2xpZW50LCBJQ2FuZHlBcGlEcmFmdENsaWVudCB9IGZyb20gXCIuL0lDYW5keUFwaUNsaWVudFwiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3JMb2cgfSBmcm9tIFwiLi9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHsgU2VydmVySW5uZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlcklubmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IEZpbGVQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0ZpbGVQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBDcmVhdGVEcmFmdFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQ3JlYXRlRHJhZnQvQ3JlYXRlRHJhZnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9FeHBsYW5hdG9yeU5vdGUvQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2VcIjtcbmltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcbmltcG9ydCB7IFNlcnZlckNoYW5nZVNldCB9IGZyb20gXCIuL1R5cGVzL0NoYW5nZVNldC9TZXJ2ZXJDaGFuZ2VTZXRcIjtcbmltcG9ydCB7IFNlcnZlclRhc2ssIFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvIH0gZnJvbSBcIi4vVHlwZXMvVGFza3MvVGFza3NcIjtcbmltcG9ydCB7IEZvY3VzU2VydmVyRXJyb3JDb2RlLCBHZXRCeUlublJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNUeXBlc1wiO1xuaW1wb3J0IHsgQXR0YWNoSW5mbyB9IGZyb20gXCIuL1R5cGVzL0F0dGFjaG1lbnRzL0F0dGFjbWVudHNcIjtcbmltcG9ydCB7IERyYWZ0UHJlc2VudGF0aW9uVHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvRHJhZnRQcmVzZW50YXRpb25UeXBlXCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBDb252ZXJ0RHJhZnRSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbnZlcnREcmFmdFJlcXVlc3RcIjtcbmltcG9ydCB7IEdldEF0dGFjaG1lbnRzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9HZXRBdHRhY2htZW50c1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNTZXJ2ZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgR2V0VGFza3NTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL0dldFRhc2tzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IERpYWdSZXNvdXJjZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0RpYWdSZXNvdXJjZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgU2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvR2V0SW5uZXIvU2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBpc0J1ZmZlciB9IGZyb20gXCIuL0lzQnVmZmVyXCI7XG5pbXBvcnQgeyBDb21iaW5lRnVmUmVzdWx0LCBGdWZDb21iaW5lTWV0aG9kIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbWJpbmVGdWZSZXN1bHRcIjtcbmltcG9ydCB7IEZlYXR1cmVGbGFnc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRmVhdHVyZUZsYWdzL0ZlYXR1cmVGbGFnc1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvRGlnZXN0QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBJRGlnZXN0QXBpQ2xpZW50IH0gZnJvbSBcIi4vRGlnZXN0QXBpQ2xpZW50L0lEaWdlc3RBcGlDbGllbnRcIjtcblxuY29uc3Qgc3RyYW5nZU9wdGlvbnMgPSB7IHNyYzogXCJjaGFuZ2VTZXRcIiwgZGF0YVZlcnNpb246IFwiMFwiIH07XG5cbmV4cG9ydCBjbGFzcyBDYW5keUFwaUNsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaUNsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgZmV0Y2hJbXBsOiBGZXRjaCxcbiAgICAgICAgYmFzZVVybDogc3RyaW5nLFxuICAgICAgICByZXNvdXJjZVpvbmU6IHVuZGVmaW5lZCB8IHN0cmluZyxcbiAgICAgICAgYXV0aGVudGljYXRpb246IHVuZGVmaW5lZCB8IEF1dGhlbnRpY2F0aW9uTW9kZVxuICAgICkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChmZXRjaEltcGwsIGJhc2VVcmwsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIoYXV0aGVudGljYXRpb24pLCB7XG4gICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvckRyYWZ0KGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCk6IElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW5keUFwaURyYWZ0Q2xpZW50KHRoaXMuaHR0cENsaWVudCwgZHJhZnRGdWxsSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEaWdlc3RBcGlDbGllbnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgRGlnZXN0QXBpQ2xpZW50KHRoaXMuaHR0cENsaWVudCwgZHJhZnRGdWxsSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvQnlJbm5zKGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCwgaW5uczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPEdldEJ5SW5uUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcGF0aHMgPSBpbm5zLm1hcChpbm4gPT4gYEBmb2N1cy8ke2lubn1gKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoZHJhZnRGdWxsSWQsIFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRocylcbiAgICAgICAgICAgIC5qc29uPEZvY3VzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogR2V0QnlJbm5SZXNwb25zZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGlubiBvZiBpbm5zKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5TZXJ2ZXJWYWx1ZSA9IHJlc3BvbnNlW2BAZm9jdXMvJHtpbm59YF0/LnZhbHVlO1xuICAgICAgICAgICAgaWYgKGlublNlcnZlclZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpbm5dID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJTZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIGlubiBpbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZTogRm9jdXNTZXJ2ZXJFcnJvckNvZGUuTm9Jbm5FcnJvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaW5uXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlublNlcnZlclZhbHVlLnZhbHVlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBpbm5TZXJ2ZXJWYWx1ZS5lcnJvckNvZGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogaW5uU2VydmVyVmFsdWUuZXJyb3IgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsR2Z2cyhhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgdjEvZGlhZy9yZXNvdXJjZXNgKS5qc29uPERpYWdSZXNvdXJjZXNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGJvZHkuZm9ybXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0LWZyb20tZHJpdmVgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgICAgICAgIGZ1ZkRyaXZlVXJpOiBmdWZEcml2ZVVyaSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRW1wdHlEcmFmdChuczogc3RyaW5nLCBnZnY6IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGZ1ZkNvbnRlbnQ6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogdW5kZWZpbmVkIHwgc3RyaW5nLCBmdWZDb250ZW50PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIGlmIChnZnYgPT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoZnVmQ29udGVudClcbiAgICAgICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZnYgIT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoQnVmZmVyLmZyb20oW10pKVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgZHJhZnQ6IG5vIGdmdiBhbmQgbm8gZnVmIHNwZWNpZmllZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tBbGl2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgX3N0YXR1cy9waW5nYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHtkcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlRmxhZ3MoKTogUHJvbWlzZTxGZWF0dXJlRmxhZ3NSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcInYxL2ZlYXR1cmVzL2ZsYWdzXCIpLmpzb248RmVhdHVyZUZsYWdzUmVzcG9uc2U+KCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlEcmFmdENsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50LCBkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gaHR0cENsaWVudDtcbiAgICAgICAgdGhpcy5kcmFmdEZ1bGxJZCA9IGRyYWZ0RnVsbElkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Jbm5lckVkaXRvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybChgaW5uZXItZWRpdG9yL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImdldC1mdWZcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2coKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImNvbnZlcnNpb25cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lckZ1Zik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuY2xpZW50SW5mbyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5mb3Jtc0NsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRJbm5lcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZygpOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmVycm9yTG9nKSkuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGFza0J5SWQodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPFNlcnZlclRhc2sgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgdGFza3MgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQHRhc2svKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0VGFza3NTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHRhc2tzW2BAdGFzay8ke3Rhc2tJZH1gXT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhc2tzKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgICAgICAgICBbYEB0YXNrLyR7dGFza0lkfWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50YXNrSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbYEB0YXNrLyR7dGFza0lkfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvcmxvZ0V4cGVydCkpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcInByZXNlbnRhdGlvbnMvZXJyb3JMb2cvcHJpbnRcIiksIHtcbiAgICAgICAgICAgIGVycm9yTG9nTmFtZTogZXJyb3JMb2dOYW1lLFxuICAgICAgICAgICAgcHJvcHNEcml2ZU5hbWU6IHByb3BzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjbGVhclwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHsgcHJldkdmdkRyYWZ0SWQsIGdmdiB9OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJ0XCIpKS53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgaWQ6IHByZXZHZnZEcmFmdElkLFxuICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZW5kQ2hhbmdlU2V0U3luYyhkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQpOiBIdHRwU3RhdHVzQ29kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdFN5bmMoXG4gICAgICAgICAgICB0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lciksXG4gICAgICAgICAgICBzdHJhbmdlT3B0aW9ucyxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UmVxdWlzaXRlcyhyZXF1aXNpdGVMaXN0OiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJlcXVpc2l0ZUxpc3QpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElubmVyKHBhdGhzOiB1bmRlZmluZWQgfCByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRocylcbiAgICAgICAgICAgIC5qc29uPFNlcnZlcklubmVyUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lcihydWxlczogW1wiKlwiXSB8IHN0cmluZ1tdLCBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtcGFydGlhbC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMobWF4SW5zdGFuY2VDb3VudCAhPSB1bmRlZmluZWQgJiYgeyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50LnRvU3RyaW5nKCkgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocnVsZXMpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJJbm5lclJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFeHBsYW5hdG9yeU5vdGUoKTogUHJvbWlzZTxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmV4cGxhbmF0b3J5Tm90ZSkpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QXR0YWNobWVudEJ5SWQoYXR0YWNobWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEF0dGFjaEluZm8+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdKVxuICAgICAgICAgICAgLmpzb248R2V0QXR0YWNobWVudHNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50SWR9YF0/LnZhbHVlID8/IHJlamVjdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxBdHRhY2htZW50cygpOiBQcm9taXNlPEF0dGFjaEluZm9bXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQGF0dGFjaG1lbnQvKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0QXR0YWNobWVudHNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVzdWx0KS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVtb3ZlQXR0YWNobWVudHMoYXR0YWNobWVudElkczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHt9LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IGF0dGFjaG1lbnRJZHMubWFwKGlkID0+IGBAYXR0YWNobWVudC8ke2lkfWApLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZU9yVXBkYXRlQXR0YWNobWVudHMoYXR0YWNobWVudHM6IHJlYWRvbmx5IEF0dGFjaEluZm9bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjaGFuZ2VkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgYXR0YWNobWVudCBvZiBhdHRhY2htZW50cykge1xuICAgICAgICAgICAgY2hhbmdlZFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50LmlkfWBdID0ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRVcmk6IGF0dGFjaG1lbnQuY29udGVudFVyaSxcbiAgICAgICAgICAgICAgICBpZDogYXR0YWNobWVudC5pZCxcbiAgICAgICAgICAgICAgICBtZXRhOiBhdHRhY2htZW50Lm1ldGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiBjaGFuZ2VkLFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldFByZXNlbnRhdGlvbihwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsIGNvbnRlbnQ6IHN0cmluZyB8IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBDbGllbnQucHV0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpO1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQnVmZmVyKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoUmF3Qm9keShjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhKc29uQm9keShjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCByZXF1ZXN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwYXRjaFByZXNlbnRhdGlvbihcbiAgICAgICAgcHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLFxuICAgICAgICBwcmVzZW50YXRpb25Db250ZW50OiBQcmVzZW50YXRpb25Db250ZW50XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKS53aXRoSnNvbkJvZHkocHJlc2VudGF0aW9uQ29udGVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbGVQcm9wZXJ0aWVzKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgdjEvZmlsZXMvZ2V0LXByb3BlcnRpZXM/ZHJpdmVVcmk9JHtkcml2ZVVyaX1gKS5hY2NlcHRDb2RlKDQwMCk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxGaWxlUHJvcGVydGllcz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJlcGFyZUFuZEdldEZpbGVQcm9wZXJ0aWVzKGRyaXZlVXJpOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldChgdjEvZmlsZXMvcHJlcGFyZS1hbmQtZ2V0LXByb3BlcnRpZXM/ZHJpdmVVcmk9JHtkcml2ZVVyaX0mZ2Z2PSR7Z2Z2fWApXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldEZ1ZkJ5RHJpdmVVcmkoZHJpdmVVcmk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucHV0KHRoaXMuZ2V0RHJhZnRVcmwoXCJzZXQtZnVmXCIpKS53aXRoUXVlcnlQYXJhbXMoeyBkcml2ZVVyaTogZHJpdmVVcmkgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwidHJhbnNmZXIvY29tYmluZS13aXRoLWZ1ZlwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZHJpdmVVcmksIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QgfSk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxDb21iaW5lRnVmUmVzdWx0PigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBub3JtYWxpemVCeVJ1bGVzKHJ1bGVzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcIm5vcm1hbGl6ZVwiKSkud2l0aEpzb25Cb2R5KHJ1bGVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHJhZnRVcmwoZHJhZnRSZWxhdGVkVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHYxL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJhZnRVcmwoYHByZXNlbnRhdGlvbnMvJHtwcmVzZW50YXRpb25UeXBlLnRvU3RyaW5nKCl9YCk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useCandyApiClient = useCandyApiClient;
|
|
7
|
+
exports.CandyApiClientProvider = void 0;
|
|
8
|
+
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
|
|
11
|
+
var _TypingUtils = require("../TypingUtils");
|
|
12
|
+
|
|
13
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
14
|
+
|
|
15
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
16
|
+
|
|
17
|
+
const CandyApiClientContext = /*#__PURE__*/React.createContext(undefined);
|
|
18
|
+
const CandyApiClientProvider = CandyApiClientContext.Provider;
|
|
19
|
+
exports.CandyApiClientProvider = CandyApiClientProvider;
|
|
20
|
+
|
|
21
|
+
function useCandyApiClient() {
|
|
22
|
+
var _React$useContext;
|
|
23
|
+
|
|
24
|
+
return (_React$useContext = React.useContext(CandyApiClientContext)) !== null && _React$useContext !== void 0 ? _React$useContext : (0, _TypingUtils.reject)("ICandyApiClient must be provided with CandyApiClientProvider");
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudENvbnRleHQudHMiXSwibmFtZXMiOlsiQ2FuZHlBcGlDbGllbnRDb250ZXh0IiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwidW5kZWZpbmVkIiwiQ2FuZHlBcGlDbGllbnRQcm92aWRlciIsIlByb3ZpZGVyIiwidXNlQ2FuZHlBcGlDbGllbnQiLCJ1c2VDb250ZXh0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBOztBQUVBOzs7Ozs7QUFJQSxNQUFNQSxxQkFBcUIsZ0JBQUdDLEtBQUssQ0FBQ0MsYUFBTixDQUFpREMsU0FBakQsQ0FBOUI7QUFFTyxNQUFNQyxzQkFBc0IsR0FBR0oscUJBQXFCLENBQUNLLFFBQXJEOzs7QUFFQSxTQUFTQyxpQkFBVCxHQUE4QztBQUFBOztBQUNqRCw4QkFDSUwsS0FBSyxDQUFDTSxVQUFOLENBQWlCUCxxQkFBakIsQ0FESixpRUFFSSx5QkFBTyw4REFBUCxDQUZKO0FBSUgiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uL1R5cGluZ1V0aWxzXCI7XG5cbmltcG9ydCB7IElDYW5keUFwaUNsaWVudCB9IGZyb20gXCIuL0lDYW5keUFwaUNsaWVudFwiO1xuXG5jb25zdCBDYW5keUFwaUNsaWVudENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PElDYW5keUFwaUNsaWVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuZXhwb3J0IGNvbnN0IENhbmR5QXBpQ2xpZW50UHJvdmlkZXIgPSBDYW5keUFwaUNsaWVudENvbnRleHQuUHJvdmlkZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYW5keUFwaUNsaWVudCgpOiBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIFJlYWN0LnVzZUNvbnRleHQoQ2FuZHlBcGlDbGllbnRDb250ZXh0KSA/P1xuICAgICAgICByZWplY3QoXCJJQ2FuZHlBcGlDbGllbnQgbXVzdCBiZSBwcm92aWRlZCB3aXRoIENhbmR5QXBpQ2xpZW50UHJvdmlkZXJcIilcbiAgICApO1xufVxuIl19
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.withCache = withCache;
|
|
7
|
+
exports.DigestApiClientWithCache = void 0;
|
|
8
|
+
|
|
9
|
+
var _TypingUtils = require("../../../TypingUtils");
|
|
10
|
+
|
|
11
|
+
var _IterableUtils = require("../../../IterableUtils");
|
|
12
|
+
|
|
13
|
+
function withCache(client) {
|
|
14
|
+
return new DigestApiClientWithCache(client);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
class DigestApiClientWithCache {
|
|
18
|
+
constructor(innerClient) {
|
|
19
|
+
this.innerClient = void 0;
|
|
20
|
+
this.responseCache = new Map();
|
|
21
|
+
this.innerClient = innerClient;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async getDigest(request) {
|
|
25
|
+
var _digestResponses$;
|
|
26
|
+
|
|
27
|
+
const digestResponses = await this.getDigests([request]);
|
|
28
|
+
return (_digestResponses$ = digestResponses === null || digestResponses === void 0 ? void 0 : digestResponses[0]) !== null && _digestResponses$ !== void 0 ? _digestResponses$ : (0, _TypingUtils.reject)();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async getDigests(requests) {
|
|
32
|
+
const notInCacheRequests = requests.filter(x => !this.responseCache.has(this.getRequestKey(x)));
|
|
33
|
+
|
|
34
|
+
if (notInCacheRequests.length > 0) {
|
|
35
|
+
const notInCacheResponses = await this.innerClient.getDigests(notInCacheRequests);
|
|
36
|
+
|
|
37
|
+
for (const [index, notInCacheResponse] of _IterableUtils.IterUtils.iterateEntries(notInCacheResponses)) {
|
|
38
|
+
var _notInCacheRequests$i;
|
|
39
|
+
|
|
40
|
+
const notInCacheRequest = (_notInCacheRequests$i = notInCacheRequests[index]) !== null && _notInCacheRequests$i !== void 0 ? _notInCacheRequests$i : (0, _TypingUtils.reject)();
|
|
41
|
+
this.responseCache.set(this.getRequestKey(notInCacheRequest), notInCacheResponse);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return requests.map(request => {
|
|
46
|
+
var _this$responseCache$g;
|
|
47
|
+
|
|
48
|
+
const requestKey = this.getRequestKey(request);
|
|
49
|
+
return (_this$responseCache$g = this.responseCache.get(requestKey)) !== null && _this$responseCache$g !== void 0 ? _this$responseCache$g : (0, _TypingUtils.reject)();
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
getRequestKey(request) {
|
|
54
|
+
return JSON.stringify(request);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
exports.DigestApiClientWithCache = DigestApiClientWithCache;
|
|
60
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvRGVjb3JhdG9ycy9EaWdlc3RBcGlDbGllbnRXaXRoQ2FjaGUudHMiXSwibmFtZXMiOlsid2l0aENhY2hlIiwiY2xpZW50IiwiRGlnZXN0QXBpQ2xpZW50V2l0aENhY2hlIiwiY29uc3RydWN0b3IiLCJpbm5lckNsaWVudCIsInJlc3BvbnNlQ2FjaGUiLCJNYXAiLCJnZXREaWdlc3QiLCJyZXF1ZXN0IiwiZGlnZXN0UmVzcG9uc2VzIiwiZ2V0RGlnZXN0cyIsInJlcXVlc3RzIiwibm90SW5DYWNoZVJlcXVlc3RzIiwiZmlsdGVyIiwieCIsImhhcyIsImdldFJlcXVlc3RLZXkiLCJsZW5ndGgiLCJub3RJbkNhY2hlUmVzcG9uc2VzIiwiaW5kZXgiLCJub3RJbkNhY2hlUmVzcG9uc2UiLCJJdGVyVXRpbHMiLCJpdGVyYXRlRW50cmllcyIsIm5vdEluQ2FjaGVSZXF1ZXN0Iiwic2V0IiwibWFwIiwicmVxdWVzdEtleSIsImdldCIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBRU8sU0FBU0EsU0FBVCxDQUFtQkMsTUFBbkIsRUFBK0Q7QUFDbEUsU0FBTyxJQUFJQyx3QkFBSixDQUE2QkQsTUFBN0IsQ0FBUDtBQUNIOztBQUVNLE1BQU1DLHdCQUFOLENBQTJEO0FBSXZEQyxFQUFBQSxXQUFXLENBQUNDLFdBQUQsRUFBZ0M7QUFBQSxTQUhqQ0EsV0FHaUM7QUFBQSxTQUZqQ0MsYUFFaUMsR0FGWSxJQUFJQyxHQUFKLEVBRVo7QUFDOUMsU0FBS0YsV0FBTCxHQUFtQkEsV0FBbkI7QUFDSDs7QUFFcUIsUUFBVEcsU0FBUyxDQUFDQyxPQUFELEVBQWtEO0FBQUE7O0FBQ3BFLFVBQU1DLGVBQWUsR0FBRyxNQUFNLEtBQUtDLFVBQUwsQ0FBZ0IsQ0FBQ0YsT0FBRCxDQUFoQixDQUE5QjtBQUNBLGdDQUFPQyxlQUFQLGFBQU9BLGVBQVAsdUJBQU9BLGVBQWUsQ0FBRyxDQUFILENBQXRCLGlFQUErQiwwQkFBL0I7QUFDSDs7QUFFc0IsUUFBVkMsVUFBVSxDQUFDQyxRQUFELEVBQThFO0FBQ2pHLFVBQU1DLGtCQUFrQixHQUFHRCxRQUFRLENBQUNFLE1BQVQsQ0FBZ0JDLENBQUMsSUFBSSxDQUFDLEtBQUtULGFBQUwsQ0FBbUJVLEdBQW5CLENBQXVCLEtBQUtDLGFBQUwsQ0FBbUJGLENBQW5CLENBQXZCLENBQXRCLENBQTNCOztBQUNBLFFBQUlGLGtCQUFrQixDQUFDSyxNQUFuQixHQUE0QixDQUFoQyxFQUFtQztBQUMvQixZQUFNQyxtQkFBbUIsR0FBRyxNQUFNLEtBQUtkLFdBQUwsQ0FBaUJNLFVBQWpCLENBQTRCRSxrQkFBNUIsQ0FBbEM7O0FBQ0EsV0FBSyxNQUFNLENBQUNPLEtBQUQsRUFBUUMsa0JBQVIsQ0FBWCxJQUEwQ0MseUJBQVVDLGNBQVYsQ0FBeUJKLG1CQUF6QixDQUExQyxFQUF5RjtBQUFBOztBQUNyRixjQUFNSyxpQkFBaUIsNEJBQUdYLGtCQUFrQixDQUFDTyxLQUFELENBQXJCLHlFQUFnQywwQkFBdkQ7QUFDQSxhQUFLZCxhQUFMLENBQW1CbUIsR0FBbkIsQ0FBdUIsS0FBS1IsYUFBTCxDQUFtQk8saUJBQW5CLENBQXZCLEVBQThESCxrQkFBOUQ7QUFDSDtBQUNKOztBQUNELFdBQU9ULFFBQVEsQ0FBQ2MsR0FBVCxDQUFhakIsT0FBTyxJQUFJO0FBQUE7O0FBQzNCLFlBQU1rQixVQUFVLEdBQUcsS0FBS1YsYUFBTCxDQUFtQlIsT0FBbkIsQ0FBbkI7QUFDQSxzQ0FBTyxLQUFLSCxhQUFMLENBQW1Cc0IsR0FBbkIsQ0FBdUJELFVBQXZCLENBQVAseUVBQTZDLDBCQUE3QztBQUNILEtBSE0sQ0FBUDtBQUlIOztBQUVPVixFQUFBQSxhQUFhLENBQUNSLE9BQUQsRUFBeUI7QUFDMUMsV0FBT29CLElBQUksQ0FBQ0MsU0FBTCxDQUFlckIsT0FBZixDQUFQO0FBQ0g7O0FBOUI2RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpZ2VzdFJlcXVlc3QgfSBmcm9tIFwiLi4vVHlwZXMvRGlnZXN0UmVxdWVzdFwiO1xuaW1wb3J0IHsgRGlnZXN0UmVzcG9uc2UgfSBmcm9tIFwiLi4vVHlwZXMvRGlnZXN0UmVzcG9uc2VcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi4vSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgeyBJdGVyVXRpbHMgfSBmcm9tIFwiLi4vLi4vLi4vSXRlcmFibGVVdGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aENhY2hlKGNsaWVudDogSURpZ2VzdEFwaUNsaWVudCk6IElEaWdlc3RBcGlDbGllbnQge1xuICAgIHJldHVybiBuZXcgRGlnZXN0QXBpQ2xpZW50V2l0aENhY2hlKGNsaWVudCk7XG59XG5cbmV4cG9ydCBjbGFzcyBEaWdlc3RBcGlDbGllbnRXaXRoQ2FjaGUgaW1wbGVtZW50cyBJRGlnZXN0QXBpQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlubmVyQ2xpZW50OiBJRGlnZXN0QXBpQ2xpZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzcG9uc2VDYWNoZTogTWFwPHN0cmluZywgRGlnZXN0UmVzcG9uc2U+ID0gbmV3IE1hcDxzdHJpbmcsIERpZ2VzdFJlc3BvbnNlPigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGlubmVyQ2xpZW50OiBJRGlnZXN0QXBpQ2xpZW50KSB7XG4gICAgICAgIHRoaXMuaW5uZXJDbGllbnQgPSBpbm5lckNsaWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RGlnZXN0KHJlcXVlc3Q6IERpZ2VzdFJlcXVlc3QpOiBQcm9taXNlPERpZ2VzdFJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IGRpZ2VzdFJlc3BvbnNlcyA9IGF3YWl0IHRoaXMuZ2V0RGlnZXN0cyhbcmVxdWVzdF0pO1xuICAgICAgICByZXR1cm4gZGlnZXN0UmVzcG9uc2VzPy5bMF0gPz8gcmVqZWN0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldERpZ2VzdHMocmVxdWVzdHM6IFJlYWRvbmx5QXJyYXk8UmVhZG9ubHk8RGlnZXN0UmVxdWVzdD4+KTogUHJvbWlzZTxEaWdlc3RSZXNwb25zZVtdPiB7XG4gICAgICAgIGNvbnN0IG5vdEluQ2FjaGVSZXF1ZXN0cyA9IHJlcXVlc3RzLmZpbHRlcih4ID0+ICF0aGlzLnJlc3BvbnNlQ2FjaGUuaGFzKHRoaXMuZ2V0UmVxdWVzdEtleSh4KSkpO1xuICAgICAgICBpZiAobm90SW5DYWNoZVJlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdEluQ2FjaGVSZXNwb25zZXMgPSBhd2FpdCB0aGlzLmlubmVyQ2xpZW50LmdldERpZ2VzdHMobm90SW5DYWNoZVJlcXVlc3RzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBub3RJbkNhY2hlUmVzcG9uc2VdIG9mIEl0ZXJVdGlscy5pdGVyYXRlRW50cmllcyhub3RJbkNhY2hlUmVzcG9uc2VzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdEluQ2FjaGVSZXF1ZXN0ID0gbm90SW5DYWNoZVJlcXVlc3RzW2luZGV4XSA/PyByZWplY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlQ2FjaGUuc2V0KHRoaXMuZ2V0UmVxdWVzdEtleShub3RJbkNhY2hlUmVxdWVzdCksIG5vdEluQ2FjaGVSZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcXVlc3RzLm1hcChyZXF1ZXN0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RLZXkgPSB0aGlzLmdldFJlcXVlc3RLZXkocmVxdWVzdCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZUNhY2hlLmdldChyZXF1ZXN0S2V5KSA/PyByZWplY3QoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXF1ZXN0S2V5KHJlcXVlc3Q6IERpZ2VzdFJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.withDebouncedBatching = withDebouncedBatching;
|
|
7
|
+
exports.DigestApiClientWithDebouncedBatching = void 0;
|
|
8
|
+
|
|
9
|
+
var _AsyncUtils = require("../../../../Engine/src/Helpers/AsyncUtils");
|
|
10
|
+
|
|
11
|
+
var _IterableUtils = require("../../../IterableUtils");
|
|
12
|
+
|
|
13
|
+
var _TypingUtils = require("../../../TypingUtils");
|
|
14
|
+
|
|
15
|
+
function withDebouncedBatching(client, debounceInterval) {
|
|
16
|
+
return new DigestApiClientWithDebouncedBatching(client, debounceInterval);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
class DigestApiClientWithDebouncedBatching {
|
|
20
|
+
constructor(innerClient, debounceInterval) {
|
|
21
|
+
this.getDigestDebounced = void 0;
|
|
22
|
+
this.getDigestDebounced = (0, _AsyncUtils.debouncedMerge)(async requests => {
|
|
23
|
+
try {
|
|
24
|
+
const digestRequests = requests.map(x => x.arg);
|
|
25
|
+
const digestResponses = await innerClient.getDigests(digestRequests);
|
|
26
|
+
|
|
27
|
+
for (const [i, request] of _IterableUtils.IterUtils.iterateEntries(requests)) {
|
|
28
|
+
var _digestResponses$i;
|
|
29
|
+
|
|
30
|
+
request.resolve((_digestResponses$i = digestResponses[i]) !== null && _digestResponses$i !== void 0 ? _digestResponses$i : (0, _TypingUtils.reject)(`Request for gId:'${request.arg.gId} does not received'`));
|
|
31
|
+
}
|
|
32
|
+
} catch (error) {
|
|
33
|
+
for (const request of requests) {
|
|
34
|
+
request.reject(error);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}, debounceInterval, x => JSON.stringify(x));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
getDigest(request) {
|
|
41
|
+
return this.getDigestDebounced(request);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
getDigests(requests) {
|
|
45
|
+
return Promise.all(requests.map(x => this.getDigest(x)));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
exports.DigestApiClientWithDebouncedBatching = DigestApiClientWithDebouncedBatching;
|
|
51
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvRGVjb3JhdG9ycy9EaWdlc3RBcGlDbGllbnRXaXRoRGVib3VuY2VkQmF0Y2hpbmcudHMiXSwibmFtZXMiOlsid2l0aERlYm91bmNlZEJhdGNoaW5nIiwiY2xpZW50IiwiZGVib3VuY2VJbnRlcnZhbCIsIkRpZ2VzdEFwaUNsaWVudFdpdGhEZWJvdW5jZWRCYXRjaGluZyIsImNvbnN0cnVjdG9yIiwiaW5uZXJDbGllbnQiLCJnZXREaWdlc3REZWJvdW5jZWQiLCJyZXF1ZXN0cyIsImRpZ2VzdFJlcXVlc3RzIiwibWFwIiwieCIsImFyZyIsImRpZ2VzdFJlc3BvbnNlcyIsImdldERpZ2VzdHMiLCJpIiwicmVxdWVzdCIsIkl0ZXJVdGlscyIsIml0ZXJhdGVFbnRyaWVzIiwicmVzb2x2ZSIsImdJZCIsImVycm9yIiwicmVqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImdldERpZ2VzdCIsIlByb21pc2UiLCJhbGwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBR08sU0FBU0EscUJBQVQsQ0FBK0JDLE1BQS9CLEVBQXlEQyxnQkFBekQsRUFBcUc7QUFDeEcsU0FBTyxJQUFJQyxvQ0FBSixDQUF5Q0YsTUFBekMsRUFBaURDLGdCQUFqRCxDQUFQO0FBQ0g7O0FBRU0sTUFBTUMsb0NBQU4sQ0FBdUU7QUFHbkVDLEVBQUFBLFdBQVcsQ0FBQ0MsV0FBRCxFQUFnQ0gsZ0JBQWhDLEVBQTBEO0FBQUEsU0FGM0RJLGtCQUUyRDtBQUN4RSxTQUFLQSxrQkFBTCxHQUEwQixnQ0FDdEIsTUFBT0MsUUFBUCxJQUFtRTtBQUMvRCxVQUFJO0FBQ0EsY0FBTUMsY0FBYyxHQUFHRCxRQUFRLENBQUNFLEdBQVQsQ0FBYUMsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLEdBQXBCLENBQXZCO0FBQ0EsY0FBTUMsZUFBZSxHQUFHLE1BQU1QLFdBQVcsQ0FBQ1EsVUFBWixDQUF1QkwsY0FBdkIsQ0FBOUI7O0FBQ0EsYUFBSyxNQUFNLENBQUNNLENBQUQsRUFBSUMsT0FBSixDQUFYLElBQTJCQyx5QkFBVUMsY0FBVixDQUF5QlYsUUFBekIsQ0FBM0IsRUFBK0Q7QUFBQTs7QUFDM0RRLFVBQUFBLE9BQU8sQ0FBQ0csT0FBUix1QkFDSU4sZUFBZSxDQUFDRSxDQUFELENBRG5CLG1FQUMwQix5QkFBUSxvQkFBbUJDLE9BQU8sQ0FBQ0osR0FBUixDQUFZUSxHQUFJLHFCQUEzQyxDQUQxQjtBQUdIO0FBQ0osT0FSRCxDQVFFLE9BQU9DLEtBQVAsRUFBYztBQUNaLGFBQUssTUFBTUwsT0FBWCxJQUFzQlIsUUFBdEIsRUFBZ0M7QUFDNUJRLFVBQUFBLE9BQU8sQ0FBQ00sTUFBUixDQUFlRCxLQUFmO0FBQ0g7QUFDSjtBQUNKLEtBZnFCLEVBZ0J0QmxCLGdCQWhCc0IsRUFpQnRCUSxDQUFDLElBQUlZLElBQUksQ0FBQ0MsU0FBTCxDQUFlYixDQUFmLENBakJpQixDQUExQjtBQW1CSDs7QUFFTWMsRUFBQUEsU0FBUyxDQUFDVCxPQUFELEVBQWtEO0FBQzlELFdBQU8sS0FBS1Qsa0JBQUwsQ0FBd0JTLE9BQXhCLENBQVA7QUFDSDs7QUFFTUYsRUFBQUEsVUFBVSxDQUFDTixRQUFELEVBQThFO0FBQzNGLFdBQU9rQixPQUFPLENBQUNDLEdBQVIsQ0FBWW5CLFFBQVEsQ0FBQ0UsR0FBVCxDQUFhQyxDQUFDLElBQUksS0FBS2MsU0FBTCxDQUFlZCxDQUFmLENBQWxCLENBQVosQ0FBUDtBQUNIOztBQS9CeUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWdlc3RSZXF1ZXN0IH0gZnJvbSBcIi4uL1R5cGVzL0RpZ2VzdFJlcXVlc3RcIjtcbmltcG9ydCB7IERpZ2VzdFJlc3BvbnNlIH0gZnJvbSBcIi4uL1R5cGVzL0RpZ2VzdFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBkZWJvdW5jZWRNZXJnZSwgTWVyZ2VkUmVxdWVzdHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vRW5naW5lL3NyYy9IZWxwZXJzL0FzeW5jVXRpbHNcIjtcbmltcG9ydCB7IEl0ZXJVdGlscyB9IGZyb20gXCIuLi8uLi8uLi9JdGVyYWJsZVV0aWxzXCI7XG5pbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi4vSURpZ2VzdEFwaUNsaWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aERlYm91bmNlZEJhdGNoaW5nKGNsaWVudDogSURpZ2VzdEFwaUNsaWVudCwgZGVib3VuY2VJbnRlcnZhbDogbnVtYmVyKTogSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBEaWdlc3RBcGlDbGllbnRXaXRoRGVib3VuY2VkQmF0Y2hpbmcoY2xpZW50LCBkZWJvdW5jZUludGVydmFsKTtcbn1cblxuZXhwb3J0IGNsYXNzIERpZ2VzdEFwaUNsaWVudFdpdGhEZWJvdW5jZWRCYXRjaGluZyBpbXBsZW1lbnRzIElEaWdlc3RBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0RGlnZXN0RGVib3VuY2VkOiAocmVxdWVzdDogRGlnZXN0UmVxdWVzdCkgPT4gUHJvbWlzZTxEaWdlc3RSZXNwb25zZT47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaW5uZXJDbGllbnQ6IElEaWdlc3RBcGlDbGllbnQsIGRlYm91bmNlSW50ZXJ2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLmdldERpZ2VzdERlYm91bmNlZCA9IGRlYm91bmNlZE1lcmdlKFxuICAgICAgICAgICAgYXN5bmMgKHJlcXVlc3RzOiBNZXJnZWRSZXF1ZXN0czxEaWdlc3RSZXF1ZXN0LCBEaWdlc3RSZXNwb25zZT4pID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWdlc3RSZXF1ZXN0cyA9IHJlcXVlc3RzLm1hcCh4ID0+IHguYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlnZXN0UmVzcG9uc2VzID0gYXdhaXQgaW5uZXJDbGllbnQuZ2V0RGlnZXN0cyhkaWdlc3RSZXF1ZXN0cyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIHJlcXVlc3RdIG9mIEl0ZXJVdGlscy5pdGVyYXRlRW50cmllcyhyZXF1ZXN0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3RSZXNwb25zZXNbaV0gPz8gcmVqZWN0KGBSZXF1ZXN0IGZvciBnSWQ6JyR7cmVxdWVzdC5hcmcuZ0lkfSBkb2VzIG5vdCByZWNlaXZlZCdgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlYm91bmNlSW50ZXJ2YWwsXG4gICAgICAgICAgICB4ID0+IEpTT04uc3RyaW5naWZ5KHgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERpZ2VzdChyZXF1ZXN0OiBEaWdlc3RSZXF1ZXN0KTogUHJvbWlzZTxEaWdlc3RSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREaWdlc3REZWJvdW5jZWQocmVxdWVzdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERpZ2VzdHMocmVxdWVzdHM6IFJlYWRvbmx5QXJyYXk8UmVhZG9ubHk8RGlnZXN0UmVxdWVzdD4+KTogUHJvbWlzZTxEaWdlc3RSZXNwb25zZVtdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXF1ZXN0cy5tYXAoeCA9PiB0aGlzLmdldERpZ2VzdCh4KSkpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.DigestApiClient = void 0;
|
|
7
|
+
|
|
8
|
+
var _TypingUtils = require("../../TypingUtils");
|
|
9
|
+
|
|
10
|
+
class DigestApiClient {
|
|
11
|
+
constructor(httpClient, draftFullId) {
|
|
12
|
+
this.httpClient = void 0;
|
|
13
|
+
this.draftFullId = void 0;
|
|
14
|
+
this.httpClient = httpClient;
|
|
15
|
+
this.draftFullId = draftFullId;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async getDigest(request) {
|
|
19
|
+
var _result$;
|
|
20
|
+
|
|
21
|
+
const result = await this.getDigests([request]);
|
|
22
|
+
return (_result$ = result[0]) !== null && _result$ !== void 0 ? _result$ : (0, _TypingUtils.reject)(`Invalid response`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async getDigests(requests) {
|
|
26
|
+
const requestKeys = requests.map(createDigestRequestString);
|
|
27
|
+
const response = await this.httpClient.post(this.getDraftUrl("get-inner")).withJsonBody(requestKeys).json();
|
|
28
|
+
return requestKeys.map(x => {
|
|
29
|
+
var _response$x;
|
|
30
|
+
|
|
31
|
+
return (_response$x = response[x]) === null || _response$x === void 0 ? void 0 : _response$x.value;
|
|
32
|
+
}).filter(_TypingUtils.isNotNullOrUndefined);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
getDraftUrl(draftRelatedUrl) {
|
|
36
|
+
return `v1/ns/${this.draftFullId.ns}/drafts/${this.draftFullId.draftId}/${draftRelatedUrl}`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
exports.DigestApiClient = DigestApiClient;
|
|
42
|
+
|
|
43
|
+
function createDigestRequestString(x) {
|
|
44
|
+
return !isDigestQueryFilterEmpty(x.filter) ? `@digest/${x.gId}/${JSON.stringify(x.filter)}` : `@digest/${x.gId}`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function isDigestQueryFilterEmpty(filter) {
|
|
48
|
+
return (filter === null || filter === void 0 ? void 0 : filter.filter) == undefined && (filter === null || filter === void 0 ? void 0 : filter.skip) == undefined && (filter === null || filter === void 0 ? void 0 : filter.take) == undefined;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvRGlnZXN0QXBpQ2xpZW50LnRzIl0sIm5hbWVzIjpbIkRpZ2VzdEFwaUNsaWVudCIsImNvbnN0cnVjdG9yIiwiaHR0cENsaWVudCIsImRyYWZ0RnVsbElkIiwiZ2V0RGlnZXN0IiwicmVxdWVzdCIsInJlc3VsdCIsImdldERpZ2VzdHMiLCJyZXF1ZXN0cyIsInJlcXVlc3RLZXlzIiwibWFwIiwiY3JlYXRlRGlnZXN0UmVxdWVzdFN0cmluZyIsInJlc3BvbnNlIiwicG9zdCIsImdldERyYWZ0VXJsIiwid2l0aEpzb25Cb2R5IiwianNvbiIsIngiLCJ2YWx1ZSIsImZpbHRlciIsImlzTm90TnVsbE9yVW5kZWZpbmVkIiwiZHJhZnRSZWxhdGVkVXJsIiwibnMiLCJkcmFmdElkIiwiaXNEaWdlc3RRdWVyeUZpbHRlckVtcHR5IiwiZ0lkIiwiSlNPTiIsInN0cmluZ2lmeSIsInVuZGVmaW5lZCIsInNraXAiLCJ0YWtlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBUU8sTUFBTUEsZUFBTixDQUFrRDtBQUk5Q0MsRUFBQUEsV0FBVyxDQUFDQyxVQUFELEVBQTBCQyxXQUExQixFQUE4RDtBQUFBLFNBSC9ERCxVQUcrRDtBQUFBLFNBRi9EQyxXQUUrRDtBQUM1RSxTQUFLRCxVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLFNBQUtDLFdBQUwsR0FBbUJBLFdBQW5CO0FBQ0g7O0FBRXFCLFFBQVRDLFNBQVMsQ0FBQ0MsT0FBRCxFQUE0RDtBQUFBOztBQUM5RSxVQUFNQyxNQUFNLEdBQUcsTUFBTSxLQUFLQyxVQUFMLENBQWdCLENBQUNGLE9BQUQsQ0FBaEIsQ0FBckI7QUFDQSx1QkFBT0MsTUFBTSxDQUFDLENBQUQsQ0FBYiwrQ0FBb0IseUJBQVEsa0JBQVIsQ0FBcEI7QUFDSDs7QUFFc0IsUUFBVkMsVUFBVSxDQUFDQyxRQUFELEVBQThFO0FBQ2pHLFVBQU1DLFdBQVcsR0FBR0QsUUFBUSxDQUFDRSxHQUFULENBQWFDLHlCQUFiLENBQXBCO0FBQ0EsVUFBTUMsUUFBUSxHQUFHLE1BQU0sS0FBS1YsVUFBTCxDQUNsQlcsSUFEa0IsQ0FDYixLQUFLQyxXQUFMLENBQWlCLFdBQWpCLENBRGEsRUFFbEJDLFlBRmtCLENBRUxOLFdBRkssRUFHbEJPLElBSGtCLEVBQXZCO0FBSUEsV0FBT1AsV0FBVyxDQUFDQyxHQUFaLENBQWdCTyxDQUFDO0FBQUE7O0FBQUEsNEJBQUlMLFFBQVEsQ0FBQ0ssQ0FBRCxDQUFaLGdEQUFJLFlBQWFDLEtBQWpCO0FBQUEsS0FBakIsRUFBeUNDLE1BQXpDLENBQWdEQyxpQ0FBaEQsQ0FBUDtBQUNIOztBQUVPTixFQUFBQSxXQUFXLENBQUNPLGVBQUQsRUFBa0M7QUFDakQsV0FBUSxTQUFRLEtBQUtsQixXQUFMLENBQWlCbUIsRUFBRyxXQUFVLEtBQUtuQixXQUFMLENBQWlCb0IsT0FBUSxJQUFHRixlQUFnQixFQUExRjtBQUNIOztBQXpCb0Q7Ozs7QUE0QnpELFNBQVNWLHlCQUFULENBQW1DTSxDQUFuQyxFQUF1RTtBQUNuRSxTQUFPLENBQUNPLHdCQUF3QixDQUFDUCxDQUFDLENBQUNFLE1BQUgsQ0FBekIsR0FBdUMsV0FBVUYsQ0FBQyxDQUFDUSxHQUFJLElBQUdDLElBQUksQ0FBQ0MsU0FBTCxDQUFlVixDQUFDLENBQUNFLE1BQWpCLENBQXlCLEVBQW5GLEdBQXdGLFdBQVVGLENBQUMsQ0FBQ1EsR0FBSSxFQUEvRztBQUNIOztBQUVELFNBQVNELHdCQUFULENBQWtDTCxNQUFsQyxFQUFrRjtBQUM5RSxTQUFPLENBQUFBLE1BQU0sU0FBTixJQUFBQSxNQUFNLFdBQU4sWUFBQUEsTUFBTSxDQUFFQSxNQUFSLEtBQWtCUyxTQUFsQixJQUErQixDQUFBVCxNQUFNLFNBQU4sSUFBQUEsTUFBTSxXQUFOLFlBQUFBLE1BQU0sQ0FBRVUsSUFBUixLQUFnQkQsU0FBL0MsSUFBNEQsQ0FBQVQsTUFBTSxTQUFOLElBQUFBLE1BQU0sV0FBTixZQUFBQSxNQUFNLENBQUVXLElBQVIsS0FBZ0JGLFNBQW5GO0FBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJSHR0cENsaWVudCB9IGZyb20gXCIuLi8uLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBpc05vdE51bGxPclVuZGVmaW5lZCwgcmVqZWN0IH0gZnJvbSBcIi4uLy4uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuLi9UeXBlcy9EcmFmdEZ1bGxJZFwiO1xuXG5pbXBvcnQgeyBEaWdlc3RSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRGlnZXN0UmVxdWVzdFwiO1xuaW1wb3J0IHsgRGlnZXN0UmVzcG9uc2UsIERpZ2VzdHNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0RpZ2VzdFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBJRGlnZXN0QXBpQ2xpZW50IH0gZnJvbSBcIi4vSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuXG5leHBvcnQgY2xhc3MgRGlnZXN0QXBpQ2xpZW50IGltcGxlbWVudHMgSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWZ0RnVsbElkOiBSZWFkb25seTxEcmFmdEZ1bGxJZD47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaHR0cENsaWVudDogSUh0dHBDbGllbnQsIGRyYWZ0RnVsbElkOiBSZWFkb25seTxEcmFmdEZ1bGxJZD4pIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gaHR0cENsaWVudDtcbiAgICAgICAgdGhpcy5kcmFmdEZ1bGxJZCA9IGRyYWZ0RnVsbElkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXREaWdlc3QocmVxdWVzdDogUmVhZG9ubHk8RGlnZXN0UmVxdWVzdD4pOiBQcm9taXNlPERpZ2VzdFJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0RGlnZXN0cyhbcmVxdWVzdF0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0WzBdID8/IHJlamVjdChgSW52YWxpZCByZXNwb25zZWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXREaWdlc3RzKHJlcXVlc3RzOiBSZWFkb25seUFycmF5PFJlYWRvbmx5PERpZ2VzdFJlcXVlc3Q+Pik6IFByb21pc2U8RGlnZXN0UmVzcG9uc2VbXT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0S2V5cyA9IHJlcXVlc3RzLm1hcChjcmVhdGVEaWdlc3RSZXF1ZXN0U3RyaW5nKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJlcXVlc3RLZXlzKVxuICAgICAgICAgICAgLmpzb248RGlnZXN0c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVxdWVzdEtleXMubWFwKHggPT4gcmVzcG9uc2VbeF0/LnZhbHVlKS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHJhZnRVcmwoZHJhZnRSZWxhdGVkVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHYxL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRGlnZXN0UmVxdWVzdFN0cmluZyh4OiBSZWFkb25seTxEaWdlc3RSZXF1ZXN0Pik6IHN0cmluZyB7XG4gICAgcmV0dXJuICFpc0RpZ2VzdFF1ZXJ5RmlsdGVyRW1wdHkoeC5maWx0ZXIpID8gYEBkaWdlc3QvJHt4LmdJZH0vJHtKU09OLnN0cmluZ2lmeSh4LmZpbHRlcil9YCA6IGBAZGlnZXN0LyR7eC5nSWR9YDtcbn1cblxuZnVuY3Rpb24gaXNEaWdlc3RRdWVyeUZpbHRlckVtcHR5KGZpbHRlcjogdW5kZWZpbmVkIHwgRGlnZXN0UXVlcnlGaWx0ZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmlsdGVyPy5maWx0ZXIgPT0gdW5kZWZpbmVkICYmIGZpbHRlcj8uc2tpcCA9PSB1bmRlZmluZWQgJiYgZmlsdGVyPy50YWtlID09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|