@valtimo/document 10.8.0 → 11.1.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.
@@ -1,252 +0,0 @@
1
- /*
2
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3
- *
4
- * Licensed under EUPL, Version 1.2 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" basis,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Injectable } from '@angular/core';
17
- import { HttpHeaders, HttpParams } from '@angular/common/http';
18
- import { catchError, of } from 'rxjs';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@angular/common/http";
21
- import * as i2 from "@valtimo/config";
22
- export class DocumentService {
23
- constructor(http, configService) {
24
- this.http = http;
25
- this.EMPTY_DOCUMENTS_RESPONSE = {
26
- content: [],
27
- empty: true,
28
- first: false,
29
- last: false,
30
- number: 0,
31
- numberOfElements: 0,
32
- size: 0,
33
- sort: false,
34
- totalElements: 0,
35
- totalPages: 0,
36
- };
37
- this.valtimoEndpointUri = configService.config.valtimoApi.endpointUri;
38
- }
39
- // Document-calls
40
- getAllDefinitions() {
41
- return this.http.get(`${this.valtimoEndpointUri}v1/document-definition`);
42
- }
43
- queryDefinitions(params) {
44
- return this.http.get(`${this.valtimoEndpointUri}v1/document-definition`, { params });
45
- }
46
- getDocumentDefinition(documentDefinitionName) {
47
- return this.http.get(`${this.valtimoEndpointUri}v1/document-definition/${documentDefinitionName}`);
48
- }
49
- getDocuments(documentSearchRequest) {
50
- return this.http.post(`${this.valtimoEndpointUri}v1/document-search`, documentSearchRequest.asHttpBody(), {
51
- params: documentSearchRequest.asHttpParams(),
52
- });
53
- }
54
- getDocumentsSearch(documentSearchRequest, searchOperator, assigneeFilter, otherFilters) {
55
- const body = documentSearchRequest.asHttpBody();
56
- if (searchOperator) {
57
- body.searchOperator = searchOperator;
58
- }
59
- if (assigneeFilter) {
60
- body.assigneeFilter = assigneeFilter;
61
- }
62
- if (otherFilters) {
63
- body.otherFilters = otherFilters;
64
- }
65
- return this.http
66
- .post(`${this.valtimoEndpointUri}v1/document-definition/${documentSearchRequest.definitionName}/search`, body, { params: documentSearchRequest.asHttpParams() })
67
- .pipe(catchError(() => of(this.EMPTY_DOCUMENTS_RESPONSE)));
68
- }
69
- getSpecifiedDocumentsSearch(documentSearchRequest, searchOperator, assigneeFilter, otherFilters) {
70
- const body = documentSearchRequest.asHttpBody();
71
- if (searchOperator) {
72
- body.searchOperator = searchOperator;
73
- }
74
- if (assigneeFilter) {
75
- body.assigneeFilter = assigneeFilter;
76
- }
77
- if (otherFilters) {
78
- body.otherFilters = otherFilters;
79
- }
80
- return this.http
81
- .post(`${this.valtimoEndpointUri}v1/case/${documentSearchRequest.definitionName}/search`, body, { params: documentSearchRequest.asHttpParams() })
82
- .pipe(catchError(() => of(this.EMPTY_DOCUMENTS_RESPONSE)));
83
- }
84
- getDocumentSearchFields(documentDefinitionName) {
85
- return this.http.get(`${this.valtimoEndpointUri}v1/document-search/${documentDefinitionName}/fields`);
86
- }
87
- putDocumentSearch(documentDefinitionName, request) {
88
- return this.http.put(`${this.valtimoEndpointUri}v1/document-search/${documentDefinitionName}/fields`, [...request]);
89
- }
90
- postDocumentSearch(documentDefinitionName, request) {
91
- return this.http.post(`${this.valtimoEndpointUri}v1/document-search/${documentDefinitionName}/fields`, { ...request });
92
- }
93
- deleteDocumentSearch(documentDefinitionName, key) {
94
- const options = {
95
- headers: new HttpHeaders({
96
- 'Content-Type': 'application/json',
97
- }),
98
- };
99
- return this.http.delete(`${this.valtimoEndpointUri}v1/document-search/${documentDefinitionName}/fields?key=${key}`, options);
100
- }
101
- getDropdownDataProviders() {
102
- return this.http.get(`${this.valtimoEndpointUri}v1/data/dropdown-list/provider`);
103
- }
104
- getDropdownData(provider, documentDefinitionName, fieldKey) {
105
- const dropdownListKey = encodeURI(documentDefinitionName + '_' + fieldKey);
106
- return this.http.get(`${this.valtimoEndpointUri}v1/data/dropdown-list?provider=${provider}&key=${dropdownListKey}`);
107
- }
108
- postDropdownData(provider, documentDefinitionName, fieldKey, dropdownData) {
109
- const dropdownListKey = encodeURI(documentDefinitionName + '_' + fieldKey);
110
- return this.http.post(`${this.valtimoEndpointUri}v1/data/dropdown-list?provider=${provider}&key=${dropdownListKey}`, dropdownData);
111
- }
112
- deleteDropdownData(provider, documentDefinitionName, fieldKey) {
113
- const dropdownListKey = encodeURI(documentDefinitionName + '_' + fieldKey);
114
- return this.http.delete(`${this.valtimoEndpointUri}v1/data/dropdown-list?provider=${provider}&key=${dropdownListKey}`);
115
- }
116
- getDocumentRoles(documentDefinitionName) {
117
- return this.http.get(`${this.valtimoEndpointUri}v1/document-definition/${documentDefinitionName}/roles`);
118
- }
119
- modifyDocumentRoles(documentDefinitionName, roles) {
120
- return this.http.put(`${this.valtimoEndpointUri}v1/document-definition/${documentDefinitionName}/roles`, roles);
121
- }
122
- getDocument(documentId) {
123
- return this.http.get(`${this.valtimoEndpointUri}v1/document/${documentId}`);
124
- }
125
- modifyDocument(document) {
126
- return this.http.put(`${this.valtimoEndpointUri}v1/document`, document);
127
- }
128
- // ProcessDocument-calls
129
- getProcessDocumentDefinitions() {
130
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/definition`);
131
- }
132
- findProcessDocumentDefinitions(documentDefinitionName) {
133
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/definition/document/${documentDefinitionName}`);
134
- }
135
- findProcessDocumentDefinitionsByProcessDefinitionKey(processDefinitionKey) {
136
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/definition/process/${processDefinitionKey}`);
137
- }
138
- findProcessDocumentInstances(documentId) {
139
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/instance/document/${documentId}`);
140
- }
141
- newDocumentAndStartProcess(request) {
142
- return this.http.post(`${this.valtimoEndpointUri}v1/process-document/operation/new-document-and-start-process`, request);
143
- }
144
- modifyDocumentAndCompleteTask(request) {
145
- return this.http.post(`${this.valtimoEndpointUri}v1/process-document/operation/modify-document-and-complete-task`, request);
146
- }
147
- modifyDocumentAndStartProcess(request) {
148
- return this.http.post(`${this.valtimoEndpointUri}v1/process-document/operation/modify-document-and-start-process`, request);
149
- }
150
- createProcessDocumentDefinition(request) {
151
- return this.http.post(`${this.valtimoEndpointUri}v1/process-document/definition`, request);
152
- }
153
- createDocumentDefinition(documentDefinitionCreateRequest) {
154
- const options = {
155
- headers: new HttpHeaders({
156
- 'Content-Type': 'application/json',
157
- }),
158
- };
159
- return this.http.post(`${this.valtimoEndpointUri}v1/document-definition`, documentDefinitionCreateRequest, options);
160
- }
161
- deleteProcessDocumentDefinition(request) {
162
- const options = {
163
- headers: new HttpHeaders({
164
- 'Content-Type': 'application/json',
165
- }),
166
- body: request,
167
- };
168
- return this.http.delete(`${this.valtimoEndpointUri}v1/process-document/definition`, options);
169
- }
170
- getAuditLog(documentId, page = 0) {
171
- let params = new HttpParams();
172
- params = params.set('page', page.toString());
173
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/instance/document/${documentId}/audit`, { params });
174
- }
175
- assignResource(documentId, resourceId) {
176
- return this.http.post(`${this.valtimoEndpointUri}v1/document/${documentId}/resource/${resourceId}`, {});
177
- }
178
- removeResource(documentId, resourceId) {
179
- const options = {
180
- headers: new HttpHeaders({
181
- 'Content-Type': 'application/json',
182
- }),
183
- };
184
- return this.http.delete(`${this.valtimoEndpointUri}v1/document/${documentId}/resource/${resourceId}`, options);
185
- }
186
- removeDocumentDefinition(name) {
187
- return this.http.delete(`${this.valtimoEndpointUri}v1/document-definition/${name}`);
188
- }
189
- sendMessage(documentId, request) {
190
- return this.http.post(`${this.valtimoEndpointUri}v1/document/${documentId}/message`, request);
191
- }
192
- getDocumentTypes(documentDefinitionName) {
193
- return this.http.get(`${this.valtimoEndpointUri}v1/documentdefinition/${documentDefinitionName}/zaaktype/documenttype`);
194
- }
195
- getLinkedUploadProcess(documentDefinitionName) {
196
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/demo/${documentDefinitionName}/process`);
197
- }
198
- updateLinkedUploadProcess(documentDefinitionName, processDefinitionKey) {
199
- return this.http.put(`${this.valtimoEndpointUri}v1/process-document/demo/${documentDefinitionName}/process`, {
200
- processDefinitionKey,
201
- linkType: 'DOCUMENT_UPLOAD',
202
- });
203
- }
204
- deleteLinkedUploadProcess(documentDefinitionName) {
205
- return this.http.delete(`${this.valtimoEndpointUri}v1/process-document/demo/${documentDefinitionName}/process`);
206
- }
207
- getProcessDocumentDefinitionFromProcessInstanceId(processInstanceId) {
208
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/definition/processinstance/${processInstanceId}`);
209
- }
210
- assignHandlerToDocument(documentId, assigneeId) {
211
- return this.http.post(`${this.valtimoEndpointUri}v1/document/${documentId}/assign`, { assigneeId });
212
- }
213
- unassignHandlerFromDocument(documentId) {
214
- return this.http.post(`${this.valtimoEndpointUri}v1/document/${documentId}/unassign`, {});
215
- }
216
- getCandidateUsers(documentId) {
217
- return this.http.get(`${this.valtimoEndpointUri}v1/document/${documentId}/candidate-user`);
218
- }
219
- getOpenDocumentCount() {
220
- return this.http.get(`${this.valtimoEndpointUri}v1/document-definition/open/count`);
221
- }
222
- patchCaseSettings(documentDefinitionName, request) {
223
- return this.http.patch(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/settings`, { ...request });
224
- }
225
- getCaseSettings(documentDefinitionName) {
226
- return this.http.get(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/settings`);
227
- }
228
- getCaseList(documentDefinitionName) {
229
- return this.http.get(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/list-column`);
230
- }
231
- postCaseList(documentDefinitionName, request) {
232
- return this.http.post(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/list-column`, { ...request });
233
- }
234
- putCaseList(documentDefinitionName, request) {
235
- return this.http.put(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/list-column`, [...request]);
236
- }
237
- deleteCaseList(documentDefinitionName, columnKey) {
238
- return this.http.delete(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/list-column/${columnKey}`);
239
- }
240
- getZakenApiDocuments(documentId) {
241
- return this.http.get(`${this.valtimoEndpointUri}v1/zaken-api/document/${documentId}/files`);
242
- }
243
- }
244
- DocumentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DocumentService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
245
- DocumentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DocumentService, providedIn: 'root' });
246
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DocumentService, decorators: [{
247
- type: Injectable,
248
- args: [{
249
- providedIn: 'root',
250
- }]
251
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ConfigService }]; } });
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9jdW1lbnQvc3JjL2xpYi9kb2N1bWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWEsV0FBVyxFQUFFLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxVQUFVLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7O0FBNkNoRCxNQUFNLE9BQU8sZUFBZTtJQWdCMUIsWUFBb0IsSUFBZ0IsRUFBRSxhQUE0QjtRQUE5QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBYm5CLDZCQUF3QixHQUFtQztZQUMxRSxPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxDQUFDO1lBQ1QsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxLQUFLO1lBQ1gsYUFBYSxFQUFFLENBQUM7WUFDaEIsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDO1FBR0EsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUN4RSxDQUFDO0lBRUQsaUJBQWlCO0lBQ1YsaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXNCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQix3QkFBd0IsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENB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Q2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQix5QkFBeUIsVUFBVSxRQUFRLENBQ3RFLENBQUM7SUFDSixDQUFDOzs0R0EzYlUsZUFBZTtnSEFBZixlQUFlLGNBRmQsTUFBTTsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEFzc2lnbkhhbmRsZXJUb0RvY3VtZW50UmVzdWx0LFxuICBBdWRpdFJlY29yZCxcbiAgQ2FzZUxpc3RDb2x1bW4sXG4gIENhc2VTZXR0aW5ncyxcbiAgRG9jdW1lbnQsXG4gIERvY3VtZW50RGVmaW5pdGlvbixcbiAgRG9jdW1lbnREZWZpbml0aW9uQ3JlYXRlUmVxdWVzdCxcbiAgRG9jdW1lbnREZWZpbml0aW9ucyxcbiAgRG9jdW1lbnRSZXN1bHQsXG4gIERvY3VtZW50cyxcbiAgRG9jdW1lbnRTZW5kTWVzc2FnZVJlcXVlc3QsXG4gIERvY3VtZW50VHlwZSxcbiAgTW9kaWZ5RG9jdW1lbnRBbmRDb21wbGV0ZVRhc2tSZXF1ZXN0SW1wbCxcbiAgTW9kaWZ5RG9jdW1lbnRBbmRDb21wbGV0ZVRhc2tSZXN1bHQsXG4gIE1vZGlmeURvY3VtZW50QW5kU3RhcnRQcm9jZXNzUmVxdWVzdEltcGwsXG4gIE1vZGlmeURvY3VtZW50QW5kU3RhcnRQcm9jZXNzUmVzdWx0LFxuICBOZXdEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1JlcXVlc3RJbXBsLFxuICBOZXdEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1Jlc3VsdCxcbiAgT3BlbkRvY3VtZW50Q291bnQsXG4gIFBhZ2UsXG4gIFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24sXG4gIFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25SZXF1ZXN0LFxuICBQcm9jZXNzRG9jdW1lbnRJbnN0YW5jZSxcbiAgUmVsYXRlZEZpbGUsXG4gIFNwZWNpZmllZERvY3VtZW50cyxcbiAgVW5kZXBsb3lEb2N1bWVudERlZmluaXRpb25SZXN1bHQsXG4gIFVwbG9hZFByb2Nlc3NMaW5rLFxufSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge0RvY3VtZW50U2VhcmNoUmVxdWVzdH0gZnJvbSAnLi9kb2N1bWVudC1zZWFyY2gtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBBc3NpZ25lZUZpbHRlcixcbiAgQ29uZmlnU2VydmljZSxcbiAgTmFtZWRVc2VyLFxuICBTZWFyY2hGaWVsZCxcbiAgU2VhcmNoRmlsdGVyLFxuICBTZWFyY2hGaWx0ZXJSYW5nZSxcbiAgU2VhcmNoT3BlcmF0b3IsXG59IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0FkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0fSBmcm9tICcuL2FkdmFuY2VkLWRvY3VtZW50LXNlYXJjaC1yZXF1ZXN0JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50U2VydmljZSB7XG4gIHByaXZhdGUgdmFsdGltb0VuZHBvaW50VXJpOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBFTVBUWV9ET0NVTUVOVFNfUkVTUE9OU0U6IERvY3VtZW50cyB8IFNwZWNpZmllZERvY3VtZW50cyA9IHtcbiAgICBjb250ZW50OiBbXSxcbiAgICBlbXB0eTogdHJ1ZSxcbiAgICBmaXJzdDogZmFsc2UsXG4gICAgbGFzdDogZmFsc2UsXG4gICAgbnVtYmVyOiAwLFxuICAgIG51bWJlck9mRWxlbWVudHM6IDAsXG4gICAgc2l6ZTogMCxcbiAgICBzb3J0OiBmYWxzZSxcbiAgICB0b3RhbEVsZW1lbnRzOiAwLFxuICAgIHRvdGFsUGFnZXM6IDAsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlKSB7XG4gICAgdGhpcy52YWx0aW1vRW5kcG9pbnRVcmkgPSBjb25maWdTZXJ2aWNlLmNvbmZpZy52YWx0aW1vQXBpLmVuZHBvaW50VXJpO1xuICB9XG5cbiAgLy8gRG9jdW1lbnQtY2FsbHNcbiAgcHVibGljIGdldEFsbERlZmluaXRpb25zKCk6IE9ic2VydmFibGU8RG9jdW1lbnREZWZpbml0aW9ucz4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PERvY3VtZW50RGVmaW5pdGlvbnM+KGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LWRlZmluaXRpb25gKTtcbiAgfVxuXG4gIHF1ZXJ5RGVmaW5pdGlvbnMocGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxQYWdlPERvY3VtZW50RGVmaW5pdGlvbj4+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxQYWdlPERvY3VtZW50RGVmaW5pdGlvbj4+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQtZGVmaW5pdGlvbmAsXG4gICAgICB7cGFyYW1zfVxuICAgICk7XG4gIH1cblxuICBnZXREb2N1bWVudERlZmluaXRpb24oZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxEb2N1bWVudERlZmluaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxEb2N1bWVudERlZmluaXRpb24+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQtZGVmaW5pdGlvbi8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9YFxuICAgICk7XG4gIH1cblxuICBnZXREb2N1bWVudHMoZG9jdW1lbnRTZWFyY2hSZXF1ZXN0OiBEb2N1bWVudFNlYXJjaFJlcXVlc3QpOiBPYnNlcnZhYmxlPERvY3VtZW50cz4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxEb2N1bWVudHM+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQtc2VhcmNoYCxcbiAgICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdC5hc0h0dHBCb2R5KCksXG4gICAgICB7XG4gICAgICAgIHBhcmFtczogZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LmFzSHR0cFBhcmFtcygpLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXREb2N1bWVudHNTZWFyY2goXG4gICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0OiBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICBzZWFyY2hPcGVyYXRvcj86IFNlYXJjaE9wZXJhdG9yLFxuICAgIGFzc2lnbmVlRmlsdGVyPzogQXNzaWduZWVGaWx0ZXIsXG4gICAgb3RoZXJGaWx0ZXJzPzogQXJyYXk8U2VhcmNoRmlsdGVyIHwgU2VhcmNoRmlsdGVyUmFuZ2U+XG4gICk6IE9ic2VydmFibGU8RG9jdW1lbnRzPiB7XG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50U2VhcmNoUmVxdWVzdC5hc0h0dHBCb2R5KCk7XG5cbiAgICBpZiAoc2VhcmNoT3BlcmF0b3IpIHtcbiAgICAgIGJvZHkuc2VhcmNoT3BlcmF0b3IgPSBzZWFyY2hPcGVyYXRvcjtcbiAgICB9XG5cbiAgICBpZiAoYXNzaWduZWVGaWx0ZXIpIHtcbiAgICAgIGJvZHkuYXNzaWduZWVGaWx0ZXIgPSBhc3NpZ25lZUZpbHRlcjtcbiAgICB9XG5cbiAgICBpZiAob3RoZXJGaWx0ZXJzKSB7XG4gICAgICBib2R5Lm90aGVyRmlsdGVycyA9IG90aGVyRmlsdGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxEb2N1bWVudHM+KFxuICAgICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudC1kZWZpbml0aW9uLyR7ZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LmRlZmluaXRpb25OYW1lfS9zZWFyY2hgLFxuICAgICAgICBib2R5LFxuICAgICAgICB7cGFyYW1zOiBkb2N1bWVudFNlYXJjaFJlcXVlc3QuYXNIdHRwUGFyYW1zKCl9XG4gICAgICApXG4gICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKHRoaXMuRU1QVFlfRE9DVU1FTlRTX1JFU1BPTlNFIGFzIERvY3VtZW50cykpKTtcbiAgfVxuXG4gIGdldFNwZWNpZmllZERvY3VtZW50c1NlYXJjaChcbiAgICBkb2N1bWVudFNlYXJjaFJlcXVlc3Q6IEFkdmFuY2VkRG9jdW1lbnRTZWFyY2hSZXF1ZXN0LFxuICAgIHNlYXJjaE9wZXJhdG9yPzogU2VhcmNoT3BlcmF0b3IsXG4gICAgYXNzaWduZWVGaWx0ZXI/OiBBc3NpZ25lZUZpbHRlcixcbiAgICBvdGhlckZpbHRlcnM/OiBBcnJheTxTZWFyY2hGaWx0ZXIgfCBTZWFyY2hGaWx0ZXJSYW5nZT5cbiAgKTogT2JzZXJ2YWJsZTxTcGVjaWZpZWREb2N1bWVudHM+IHtcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LmFzSHR0cEJvZHkoKTtcblxuICAgIGlmIChzZWFyY2hPcGVyYXRvcikge1xuICAgICAgYm9keS5zZWFyY2hPcGVyYXRvciA9IHNlYXJjaE9wZXJhdG9yO1xuICAgIH1cblxuICAgIGlmIChhc3NpZ25lZUZpbHRlcikge1xuICAgICAgYm9keS5hc3NpZ25lZUZpbHRlciA9IGFzc2lnbmVlRmlsdGVyO1xuICAgIH1cblxuICAgIGlmIChvdGhlckZpbHRlcnMpIHtcbiAgICAgIGJvZHkub3RoZXJGaWx0ZXJzID0gb3RoZXJGaWx0ZXJzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFNwZWNpZmllZERvY3VtZW50cz4oXG4gICAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2Nhc2UvJHtkb2N1bWVudFNlYXJjaFJlcXVlc3QuZGVmaW5pdGlvbk5hbWV9L3NlYXJjaGAsXG4gICAgICAgIGJvZHksXG4gICAgICAgIHtwYXJhbXM6IGRvY3VtZW50U2VhcmNoUmVxdWVzdC5hc0h0dHBQYXJhbXMoKX1cbiAgICAgIClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YodGhpcy5FTVBUWV9ET0NVTUVOVFNfUkVTUE9OU0UgYXMgU3BlY2lmaWVkRG9jdW1lbnRzKSkpO1xuICB9XG5cbiAgZ2V0RG9jdW1lbnRTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZD4+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxTZWFyY2hGaWVsZD4+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQtc2VhcmNoLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vZmllbGRzYFxuICAgICk7XG4gIH1cblxuICBwdXREb2N1bWVudFNlYXJjaChkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsIHJlcXVlc3Q6IEFycmF5PFNlYXJjaEZpZWxkPik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQtc2VhcmNoLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vZmllbGRzYCxcbiAgICAgIFsuLi5yZXF1ZXN0XVxuICAgICk7XG4gIH1cblxuICBwb3N0RG9jdW1lbnRTZWFyY2goZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLCByZXF1ZXN0OiBTZWFyY2hGaWVsZCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDx2b2lkPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LXNlYXJjaC8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2ZpZWxkc2AsXG4gICAgICB7Li4ucmVxdWVzdH1cbiAgICApO1xuICB9XG5cbiAgZGVsZXRlRG9jdW1lbnRTZWFyY2goZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9KSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQtc2VhcmNoLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vZmllbGRzP2tleT0ke2tleX1gLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICBnZXREcm9wZG93bkRhdGFQcm92aWRlcnMoKTogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8c3RyaW5nPj4oYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZGF0YS9kcm9wZG93bi1saXN0L3Byb3ZpZGVyYCk7XG4gIH1cblxuICBnZXREcm9wZG93bkRhdGEoXG4gICAgcHJvdmlkZXI6IHN0cmluZyxcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgZmllbGRLZXk6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIGNvbnN0IGRyb3Bkb3duTGlzdEtleSA9IGVuY29kZVVSSShkb2N1bWVudERlZmluaXRpb25OYW1lICsgJ18nICsgZmllbGRLZXkpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PG9iamVjdD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kYXRhL2Ryb3Bkb3duLWxpc3Q/cHJvdmlkZXI9JHtwcm92aWRlcn0ma2V5PSR7ZHJvcGRvd25MaXN0S2V5fWBcbiAgICApO1xuICB9XG5cbiAgcG9zdERyb3Bkb3duRGF0YShcbiAgICBwcm92aWRlcjogc3RyaW5nLFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyxcbiAgICBmaWVsZEtleTogc3RyaW5nLFxuICAgIGRyb3Bkb3duRGF0YTogb2JqZWN0XG4gICk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgY29uc3QgZHJvcGRvd25MaXN0S2V5ID0gZW5jb2RlVVJJKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgKyAnXycgKyBmaWVsZEtleSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PG9iamVjdD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kYXRhL2Ryb3Bkb3duLWxpc3Q/cHJvdmlkZXI9JHtwcm92aWRlcn0ma2V5PSR7ZHJvcGRvd25MaXN0S2V5fWAsXG4gICAgICBkcm9wZG93bkRhdGFcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlRHJvcGRvd25EYXRhKFxuICAgIHByb3ZpZGVyOiBzdHJpbmcsXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIGZpZWxkS2V5OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICBjb25zdCBkcm9wZG93bkxpc3RLZXkgPSBlbmNvZGVVUkkoZG9jdW1lbnREZWZpbml0aW9uTmFtZSArICdfJyArIGZpZWxkS2V5KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxvYmplY3Q+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZGF0YS9kcm9wZG93bi1saXN0P3Byb3ZpZGVyPSR7cHJvdmlkZXJ9JmtleT0ke2Ryb3Bkb3duTGlzdEtleX1gXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREb2N1bWVudFJvbGVzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8c3RyaW5nPj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PHN0cmluZz4+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQtZGVmaW5pdGlvbi8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L3JvbGVzYFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbW9kaWZ5RG9jdW1lbnRSb2xlcyhkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsIHJvbGVzOiBhbnkpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LWRlZmluaXRpb24vJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9yb2xlc2AsXG4gICAgICByb2xlc1xuICAgICk7XG4gIH1cblxuICBnZXREb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPERvY3VtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8RG9jdW1lbnQ+KGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LyR7ZG9jdW1lbnRJZH1gKTtcbiAgfVxuXG4gIG1vZGlmeURvY3VtZW50KGRvY3VtZW50OiBhbnkpOiBPYnNlcnZhYmxlPERvY3VtZW50UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8RG9jdW1lbnRSZXN1bHQ+KGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50YCwgZG9jdW1lbnQpO1xuICB9XG5cbiAgLy8gUHJvY2Vzc0RvY3VtZW50LWNhbGxzXG4gIGdldFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zKCk6IE9ic2VydmFibGU8UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9kZWZpbml0aW9uYFxuICAgICk7XG4gIH1cblxuICBmaW5kUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMoXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbltdPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3Byb2Nlc3MtZG9jdW1lbnQvZGVmaW5pdGlvbi9kb2N1bWVudC8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9YFxuICAgICk7XG4gIH1cblxuICBmaW5kUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnNCeVByb2Nlc3NEZWZpbml0aW9uS2V5KFxuICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uW10+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9kZWZpbml0aW9uL3Byb2Nlc3MvJHtwcm9jZXNzRGVmaW5pdGlvbktleX1gXG4gICAgKTtcbiAgfVxuXG4gIGZpbmRQcm9jZXNzRG9jdW1lbnRJbnN0YW5jZXMoZG9jdW1lbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQcm9jZXNzRG9jdW1lbnRJbnN0YW5jZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UHJvY2Vzc0RvY3VtZW50SW5zdGFuY2VbXT4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9wcm9jZXNzLWRvY3VtZW50L2luc3RhbmNlL2RvY3VtZW50LyR7ZG9jdW1lbnRJZH1gXG4gICAgKTtcbiAgfVxuXG4gIG5ld0RvY3VtZW50QW5kU3RhcnRQcm9jZXNzKFxuICAgIHJlcXVlc3Q6IE5ld0RvY3VtZW50QW5kU3RhcnRQcm9jZXNzUmVxdWVzdEltcGxcbiAgKTogT2JzZXJ2YWJsZTxOZXdEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxOZXdEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1Jlc3VsdD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9wcm9jZXNzLWRvY3VtZW50L29wZXJhdGlvbi9uZXctZG9jdW1lbnQtYW5kLXN0YXJ0LXByb2Nlc3NgLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cblxuICBtb2RpZnlEb2N1bWVudEFuZENvbXBsZXRlVGFzayhcbiAgICByZXF1ZXN0OiBNb2RpZnlEb2N1bWVudEFuZENvbXBsZXRlVGFza1JlcXVlc3RJbXBsXG4gICk6IE9ic2VydmFibGU8TW9kaWZ5RG9jdW1lbnRBbmRDb21wbGV0ZVRhc2tSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TW9kaWZ5RG9jdW1lbnRBbmRDb21wbGV0ZVRhc2tSZXN1bHQ+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9vcGVyYXRpb24vbW9kaWZ5LWRvY3VtZW50LWFuZC1jb21wbGV0ZS10YXNrYCxcbiAgICAgIHJlcXVlc3RcbiAgICApO1xuICB9XG5cbiAgbW9kaWZ5RG9jdW1lbnRBbmRTdGFydFByb2Nlc3MoXG4gICAgcmVxdWVzdDogTW9kaWZ5RG9jdW1lbnRBbmRTdGFydFByb2Nlc3NSZXF1ZXN0SW1wbFxuICApOiBPYnNlcnZhYmxlPE1vZGlmeURvY3VtZW50QW5kU3RhcnRQcm9jZXNzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1vZGlmeURvY3VtZW50QW5kU3RhcnRQcm9jZXNzUmVzdWx0PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3Byb2Nlc3MtZG9jdW1lbnQvb3BlcmF0aW9uL21vZGlmeS1kb2N1bWVudC1hbmQtc3RhcnQtcHJvY2Vzc2AsXG4gICAgICByZXF1ZXN0XG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVByb2Nlc3NEb2N1bWVudERlZmluaXRpb24oXG4gICAgcmVxdWVzdDogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvblJlcXVlc3RcbiAgKTogT2JzZXJ2YWJsZTxQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9kZWZpbml0aW9uYCxcbiAgICAgIHJlcXVlc3RcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlRG9jdW1lbnREZWZpbml0aW9uKFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbkNyZWF0ZVJlcXVlc3Q6IERvY3VtZW50RGVmaW5pdGlvbkNyZWF0ZVJlcXVlc3RcbiAgKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9KSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDx2b2lkPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LWRlZmluaXRpb25gLFxuICAgICAgZG9jdW1lbnREZWZpbml0aW9uQ3JlYXRlUmVxdWVzdCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbihyZXF1ZXN0OiBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9KSxcbiAgICAgIGJvZHk6IHJlcXVlc3QsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9wcm9jZXNzLWRvY3VtZW50L2RlZmluaXRpb25gLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldEF1ZGl0TG9nKGRvY3VtZW50SWQ6IHN0cmluZywgcGFnZTogbnVtYmVyID0gMCk6IE9ic2VydmFibGU8UGFnZTxBdWRpdFJlY29yZD4+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgcGFnZS50b1N0cmluZygpKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxQYWdlPEF1ZGl0UmVjb3JkPj4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9wcm9jZXNzLWRvY3VtZW50L2luc3RhbmNlL2RvY3VtZW50LyR7ZG9jdW1lbnRJZH0vYXVkaXRgLFxuICAgICAge3BhcmFtc31cbiAgICApO1xuICB9XG5cbiAgYXNzaWduUmVzb3VyY2UoZG9jdW1lbnRJZDogc3RyaW5nLCByZXNvdXJjZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dm9pZD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudC8ke2RvY3VtZW50SWR9L3Jlc291cmNlLyR7cmVzb3VyY2VJZH1gLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmVtb3ZlUmVzb3VyY2UoZG9jdW1lbnRJZDogc3RyaW5nLCByZXNvdXJjZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0pLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8dm9pZD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudC8ke2RvY3VtZW50SWR9L3Jlc291cmNlLyR7cmVzb3VyY2VJZH1gLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICByZW1vdmVEb2N1bWVudERlZmluaXRpb24obmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxVbmRlcGxveURvY3VtZW50RGVmaW5pdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFVuZGVwbG95RG9jdW1lbnREZWZpbml0aW9uUmVzdWx0PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LWRlZmluaXRpb24vJHtuYW1lfWBcbiAgICApO1xuICB9XG5cbiAgc2VuZE1lc3NhZ2UoZG9jdW1lbnRJZDogc3RyaW5nLCByZXF1ZXN0OiBEb2N1bWVudFNlbmRNZXNzYWdlUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LyR7ZG9jdW1lbnRJZH0vbWVzc2FnZWAsIHJlcXVlc3QpO1xuICB9XG5cbiAgZ2V0RG9jdW1lbnRUeXBlcyhkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PERvY3VtZW50VHlwZT4+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxEb2N1bWVudFR5cGU+PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50ZGVmaW5pdGlvbi8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L3phYWt0eXBlL2RvY3VtZW50dHlwZWBcbiAgICApO1xuICB9XG5cbiAgZ2V0TGlua2VkVXBsb2FkUHJvY2Vzcyhkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVwbG9hZFByb2Nlc3NMaW5rPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VXBsb2FkUHJvY2Vzc0xpbms+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9kZW1vLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vcHJvY2Vzc2BcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlTGlua2VkVXBsb2FkUHJvY2VzcyhcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgcHJvY2Vzc0RlZmluaXRpb25LZXk6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFVwbG9hZFByb2Nlc3NMaW5rPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VXBsb2FkUHJvY2Vzc0xpbms+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9kZW1vLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vcHJvY2Vzc2AsXG4gICAgICB7XG4gICAgICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5LFxuICAgICAgICBsaW5rVHlwZTogJ0RPQ1VNRU5UX1VQTE9BRCcsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUxpbmtlZFVwbG9hZFByb2Nlc3MoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8dm9pZD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9wcm9jZXNzLWRvY3VtZW50L2RlbW8vJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9wcm9jZXNzYFxuICAgICk7XG4gIH1cblxuICBnZXRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uRnJvbVByb2Nlc3NJbnN0YW5jZUlkKFxuICAgIHByb2Nlc3NJbnN0YW5jZUlkOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbj4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9wcm9jZXNzLWRvY3VtZW50L2RlZmluaXRpb24vcHJvY2Vzc2luc3RhbmNlLyR7cHJvY2Vzc0luc3RhbmNlSWR9YFxuICAgICk7XG4gIH1cblxuICBhc3NpZ25IYW5kbGVyVG9Eb2N1bWVudChcbiAgICBkb2N1bWVudElkOiBzdHJpbmcsXG4gICAgYXNzaWduZWVJZDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QXNzaWduSGFuZGxlclRvRG9jdW1lbnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXNzaWduSGFuZGxlclRvRG9jdW1lbnRSZXN1bHQ+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQvJHtkb2N1bWVudElkfS9hc3NpZ25gLFxuICAgICAge2Fzc2lnbmVlSWR9XG4gICAgKTtcbiAgfVxuXG4gIHVuYXNzaWduSGFuZGxlckZyb21Eb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dm9pZD4oYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQvJHtkb2N1bWVudElkfS91bmFzc2lnbmAsIHt9KTtcbiAgfVxuXG4gIGdldENhbmRpZGF0ZVVzZXJzKGRvY3VtZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8TmFtZWRVc2VyPj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PE5hbWVkVXNlcj4+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQvJHtkb2N1bWVudElkfS9jYW5kaWRhdGUtdXNlcmBcbiAgICApO1xuICB9XG5cbiAgZ2V0T3BlbkRvY3VtZW50Q291bnQoKTogT2JzZXJ2YWJsZTxBcnJheTxPcGVuRG9jdW1lbnRDb3VudD4+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxPcGVuRG9jdW1lbnRDb3VudD4+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQtZGVmaW5pdGlvbi9vcGVuL2NvdW50YFxuICAgICk7XG4gIH1cblxuICBwYXRjaENhc2VTZXR0aW5ncyhcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgcmVxdWVzdDogQ2FzZVNldHRpbmdzXG4gICk6IE9ic2VydmFibGU8Q2FzZVNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxDYXNlU2V0dGluZ3M+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvY2FzZS8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L3NldHRpbmdzYCxcbiAgICAgIHsuLi5yZXF1ZXN0fVxuICAgICk7XG4gIH1cblxuICBnZXRDYXNlU2V0dGluZ3MoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDYXNlU2V0dGluZ3M+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvY2FzZS8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L3NldHRpbmdzYFxuICAgICk7XG4gIH1cblxuICBnZXRDYXNlTGlzdChkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PENhc2VMaXN0Q29sdW1uPj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENhc2VMaXN0Q29sdW1uPj4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9jYXNlLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vbGlzdC1jb2x1bW5gXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RDYXNlTGlzdChcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgcmVxdWVzdDogQ2FzZUxpc3RDb2x1bW5cbiAgKTogT2JzZXJ2YWJsZTxDYXNlTGlzdENvbHVtbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDYXNlTGlzdENvbHVtbj4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9jYXNlLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vbGlzdC1jb2x1bW5gLFxuICAgICAgey4uLnJlcXVlc3R9XG4gICAgKTtcbiAgfVxuXG4gIHB1dENhc2VMaXN0KFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyxcbiAgICByZXF1ZXN0OiBBcnJheTxDYXNlTGlzdENvbHVtbj5cbiAgKTogT2JzZXJ2YWJsZTxBcnJheTxDYXNlTGlzdENvbHVtbj4+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcnJheTxDYXNlTGlzdENvbHVtbj4+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvY2FzZS8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2xpc3QtY29sdW1uYCxcbiAgICAgIFsuLi5yZXF1ZXN0XVxuICAgICk7XG4gIH1cblxuICBkZWxldGVDYXNlTGlzdChkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsIGNvbHVtbktleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlTGlzdENvbHVtbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPENhc2VMaXN0Q29sdW1uPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2Nhc2UvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9saXN0LWNvbHVtbi8ke2NvbHVtbktleX1gXG4gICAgKTtcbiAgfVxuXG4gIGdldFpha2VuQXBpRG9jdW1lbnRzKGRvY3VtZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8UmVsYXRlZEZpbGU+PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8UmVsYXRlZEZpbGU+PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3pha2VuLWFwaS9kb2N1bWVudC8ke2RvY3VtZW50SWR9L2ZpbGVzYFxuICAgICk7XG4gIH1cbn1cbiJdfQ==