@wertzui/ngx-restworld-client 3.0.0 → 3.2.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/esm2020/lib/models/client-settings.mjs +1 -1
- package/esm2020/lib/services/restworld-client.mjs +29 -5
- package/esm2020/lib/views/restworld-list-view/restworld-list-view.component.mjs +45 -11
- package/fesm2015/wertzui-ngx-restworld-client.mjs +74 -14
- package/fesm2015/wertzui-ngx-restworld-client.mjs.map +1 -1
- package/fesm2020/wertzui-ngx-restworld-client.mjs +72 -14
- package/fesm2020/wertzui-ngx-restworld-client.mjs.map +1 -1
- package/lib/models/client-settings.d.ts +4 -1
- package/lib/services/restworld-client.d.ts +1 -0
- package/lib/views/restworld-list-view/restworld-list-view.component.d.ts +18 -5
- package/package.json +2 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9tb2RlbHMvY2xpZW50LXNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlVcmwgfSBmcm9tIFwiLi9hcGktdXJsXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudFNldHRpbmdzIHtcclxuICBhcGlVcmxzOiBBcGlVcmxbXTtcclxuICBleHRlbnNpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfVxyXG59XHJcbiJdfQ==
|
|
@@ -38,14 +38,18 @@ export class RESTworldClient {
|
|
|
38
38
|
async getList(rel, parameters, headers, curie) {
|
|
39
39
|
const link = this.getLinkFromHome(rel, LinkNames.getList, curie);
|
|
40
40
|
const uri = link.fillTemplate(parameters);
|
|
41
|
-
const
|
|
41
|
+
const defaultHeaders = RESTworldClient.createHeaders('application/hal+json', this._options.Version);
|
|
42
|
+
const combinedHeaders = RESTworldClient.combineHeaders(headers, defaultHeaders, false);
|
|
43
|
+
const response = await this.halClient.get(uri, PagedListResource, ProblemDetails, combinedHeaders);
|
|
42
44
|
return response;
|
|
43
45
|
}
|
|
44
46
|
async getListByUri(uri, parameters, headers) {
|
|
45
47
|
const link = new Link();
|
|
46
48
|
link.href = uri;
|
|
47
49
|
const filledUri = link.fillTemplate(parameters);
|
|
48
|
-
const
|
|
50
|
+
const defaultHeaders = RESTworldClient.createHeaders('application/hal+json', this._options.Version);
|
|
51
|
+
const combinedHeaders = RESTworldClient.combineHeaders(headers, defaultHeaders, false);
|
|
52
|
+
const response = await this.halClient.get(filledUri, PagedListResource, ProblemDetails, combinedHeaders);
|
|
49
53
|
return response;
|
|
50
54
|
}
|
|
51
55
|
async getSingle(relOrUri, id, headers, curie) {
|
|
@@ -63,7 +67,9 @@ export class RESTworldClient {
|
|
|
63
67
|
const link = this.getLinkFromHome(relOrUri, LinkNames.get, curie);
|
|
64
68
|
uri = link.fillTemplate({ id: id.toString() });
|
|
65
69
|
}
|
|
66
|
-
const
|
|
70
|
+
const defaultHeaders = RESTworldClient.createHeaders('application/hal+json', this._options.Version);
|
|
71
|
+
const combinedHeaders = RESTworldClient.combineHeaders(headers, defaultHeaders, false);
|
|
72
|
+
const response = await this.halClient.get(uri, Resource, ProblemDetails, combinedHeaders);
|
|
67
73
|
return response;
|
|
68
74
|
}
|
|
69
75
|
async save(resource) {
|
|
@@ -155,8 +161,26 @@ export class RESTworldClient {
|
|
|
155
161
|
}
|
|
156
162
|
static createHeaders(mediaType, version) {
|
|
157
163
|
if (version)
|
|
158
|
-
return new HttpHeaders({
|
|
164
|
+
return new HttpHeaders({
|
|
165
|
+
'Accept': `${mediaType || 'application/hal+json'}; v=${version}`,
|
|
166
|
+
'Content-Type': `${mediaType || 'application/hal+json'}; v=${version}`
|
|
167
|
+
});
|
|
159
168
|
return new HttpHeaders();
|
|
160
169
|
}
|
|
170
|
+
static combineHeaders(originalHeaders, headersToAdd, overwriteExisting) {
|
|
171
|
+
if (!headersToAdd)
|
|
172
|
+
return originalHeaders;
|
|
173
|
+
if (!originalHeaders)
|
|
174
|
+
return headersToAdd;
|
|
175
|
+
let combinedHeaders = originalHeaders;
|
|
176
|
+
for (const key in headersToAdd.keys) {
|
|
177
|
+
if (!combinedHeaders.has(key) || overwriteExisting) {
|
|
178
|
+
const headerValuesToAdd = headersToAdd.getAll(key);
|
|
179
|
+
if (headerValuesToAdd)
|
|
180
|
+
combinedHeaders = combinedHeaders.set(key, headerValuesToAdd);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return combinedHeaders;
|
|
184
|
+
}
|
|
161
185
|
}
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQWEsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBWSxNQUFNLHlCQUF5QixDQUFBO0FBQy9HLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHM0QsTUFBTSxPQUFPLGVBQWU7SUFRMUIsWUFDVSxVQUFxQixFQUNyQixRQUEwQjtRQUQxQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQWtCO0lBQ2hDLENBQUM7SUFQTCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFPTSxLQUFLLENBQUMsdUJBQXVCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksY0FBYyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLGlCQUFpQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sbUJBQW1CLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDaEo7WUFDRCxJQUFJLENBQUMsUUFBUSxD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USxDQUFDLEdBQUcsQ0FBQztZQUNuQixPQUFPLEdBQUcsQ0FBQztRQUViLHVDQUF1QztRQUN2QyxJQUFJLENBQUMsS0FBSztZQUNSLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRTdCLHdCQUF3QjtRQUN4QixNQUFNLE9BQU8sR0FBRyxHQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVsQyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFxRSxFQUFFLE9BQWdCO1FBQ2xILElBQUksT0FBTztZQUNULE9BQU8sSUFBSSxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxTQUFTLElBQUksc0JBQXNCLE9BQU8sT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgRm9ybXNSZXNvdXJjZSwgSGFsQ2xpZW50LCBMaW5rLCBQYWdlZExpc3RSZXNvdXJjZSwgUmVzb3VyY2UsIFRlbXBsYXRlIH0gZnJvbSBcIkB3ZXJ0enVpL25neC1oYWwtY2xpZW50XCJcclxuaW1wb3J0IHsgTGlua05hbWVzIH0gZnJvbSBcIi4uL2NvbnN0YW50cy9saW5rLW5hbWVzXCI7XHJcbmltcG9ydCB7IFByb2JsZW1EZXRhaWxzIH0gZnJvbSBcIi4uL21vZGVscy9wcm9ibGVtLWRldGFpbHNcIjtcclxuaW1wb3J0IHsgUkVTVHdvcmxkT3B0aW9ucyB9IGZyb20gXCIuLi9tb2RlbHMvcmVzdHdvcmxkLW9wdGlvbnNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSRVNUd29ybGRDbGllbnQge1xyXG5cclxuICBwcml2YXRlIF9ob21lUmVzb3VyY2U/OiBSZXNvdXJjZTtcclxuICBwcml2YXRlIF9kZWZhdWx0Q3VyaWU/OiBzdHJpbmc7XHJcbiAgcHVibGljIGdldCBoYWxDbGllbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faGFsQ2xpZW50O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9oYWxDbGllbnQ6IEhhbENsaWVudCxcclxuICAgIHByaXZhdGUgX29wdGlvbnM6IFJFU1R3b3JsZE9wdGlvbnNcclxuICApIHsgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZW5zdXJlSG9tZVJlc291cmNlSXNTZXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuX2hvbWVSZXNvdXJjZSkge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0SG9tZUZvcmNlZCgpO1xyXG4gICAgICBpZiAoUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCB0aGUgaG9tZSByZXNvdXJjZSBmcm9tICR7dGhpcy5fb3B0aW9ucy5CYXNlVXJsfSB3aXRoIFZlcnNpb24gJHt0aGlzLl9vcHRpb25zLlZlcnNpb259LiBSZXNwb25zZSB3YXM6ICR7cmVzcG9uc2V9YCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFyZXNwb25zZS5ib2R5KVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCB0aGUgaG9tZSByZXNvdXJjZSBmcm9tICR7dGhpcy5fb3B0aW9ucy5CYXNlVXJsfSB3aXRoIFZlcnNpb24gJHt0aGlzLl9vcHRpb25zLlZlcnNpb259LiBSZXNwb25zZSB3YXMgZW1wdHkuYClcclxuICAgICAgdGhpcy5faG9tZVJlc291cmNlID0gcmVzcG9uc2UuYm9keTtcclxuICAgICAgdGhpcy5zZXREZWZhdWx0Q3VyaWUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0SG9tZUZvcmNlZCgpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPj4ge1xyXG4gICAgY29uc3QgaGVhZGVyID0gUkVTVHdvcmxkQ2xpZW50LmNyZWF0ZUhlYWRlcnMoJ2FwcGxpY2F0aW9uL2hhbCtqc29uJywgdGhpcy5fb3B0aW9ucy5WZXJzaW9uKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQuZ2V0KHRoaXMuX29wdGlvbnMuQmFzZVVybCwgUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBoZWFkZXIpO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREZWZhdWx0Q3VyaWUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjdXJpZXMgPSB0aGlzLl9ob21lUmVzb3VyY2U/Ll9saW5rcz8uY3VyaWVzO1xyXG4gICAgaWYgKCFjdXJpZXMgfHwgY3VyaWVzLmxlbmd0aCA9PT0gMCB8fCAhY3VyaWVzWzBdKVxyXG4gICAgICB0aGlzLl9kZWZhdWx0Q3VyaWUgPSB1bmRlZmluZWQ7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX2RlZmF1bHRDdXJpZSA9IGN1cmllc1swXS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldExpc3QocmVsOiBzdHJpbmcsIHBhcmFtZXRlcnM6IHt9LCBoZWFkZXJzPzogSHR0cEhlYWRlcnMsIGN1cmllPzogc3RyaW5nKTogUHJvbWlzZTxIdHRwUmVzcG9uc2U8UGFnZWRMaXN0UmVzb3VyY2UgfCBQcm9ibGVtRGV0YWlscz4+e1xyXG4gICAgY29uc3QgbGluayA9IHRoaXMuZ2V0TGlua0Zyb21Ib21lKHJlbCwgTGlua05hbWVzLmdldExpc3QsIGN1cmllKTtcclxuICAgIGNvbnN0IHVyaSA9IGxpbmsuZmlsbFRlbXBsYXRlKHBhcmFtZXRlcnMpO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQuZ2V0KHVyaSwgUGFnZWRMaXN0UmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBoZWFkZXJzKTtcclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0TGlzdEJ5VXJpKHVyaTogc3RyaW5nLCBwYXJhbWV0ZXJzOiB7fSwgaGVhZGVycz86IEh0dHBIZWFkZXJzKTogUHJvbWlzZTxIdHRwUmVzcG9uc2U8UGFnZWRMaXN0UmVzb3VyY2UgfCBQcm9ibGVtRGV0YWlscz4+IHtcclxuICAgIGNvbnN0IGxpbmsgPSBuZXcgTGluaygpO1xyXG4gICAgbGluay5ocmVmID0gdXJpO1xyXG4gICAgY29uc3QgZmlsbGVkVXJpID0gbGluay5maWxsVGVtcGxhdGUocGFyYW1ldGVycyk7XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5nZXQoZmlsbGVkVXJpLCBQYWdlZExpc3RSZXNvdXJjZSwgUHJvYmxlbURldGFpbHMsIGhlYWRlcnMpO1xyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTaW5nbGUocmVsT3JVcmk6IHN0cmluZywgaWQ/OiBudW1iZXIsIGhlYWRlcnM/OiBIdHRwSGVhZGVycywgY3VyaWU/OiBzdHJpbmcpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPj4ge1xyXG4gICAgbGV0IHVyaTtcclxuICAgIGlmIChyZWxPclVyaS5zdGFydHNXaXRoKCdodHRwJykpIHtcclxuICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXaGVuIHN1cHBseWluZyBhIFVSSSwgYW4gSUQgY2Fubm90IGJlIHN1cHBsaWVkIHRvby4nKVxyXG4gICAgICBpZiAoY3VyaWUpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXaGVuIHN1cHBseWluZyBhIFVSSSwgYSBjdXJpZSBjYW5ub3QgYmUgc3VwcGxpZWQgdG9vLicpXHJcblxyXG4gICAgICB1cmkgPSByZWxPclVyaTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoIV8uaXNOdW1iZXIoaWQpKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV2hlbiBzdXBwbHlpbmcgYSByZWwsIGFuIElEIG11c3QgYmUgc3VwcGxpZWQgdG9vLicpXHJcblxyXG4gICAgICBjb25zdCBsaW5rID0gdGhpcy5nZXRMaW5rRnJvbUhvbWUocmVsT3JVcmksIExpbmtOYW1lcy5nZXQsIGN1cmllKTtcclxuICAgICAgdXJpID0gbGluay5maWxsVGVtcGxhdGUoeyBpZDogaWQudG9TdHJpbmcoKSB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQuZ2V0KHVyaSwgUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBoZWFkZXJzKTtcclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2F2ZShyZXNvdXJjZTogUmVzb3VyY2UpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPj4ge1xyXG4gICAgY29uc3Qgc2F2ZUxpbmsgPSByZXNvdXJjZS5maW5kTGluaygnc2F2ZScpO1xyXG4gICAgaWYgKCFzYXZlTGluaylcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcmVzb3VyY2UgJHtyZXNvdXJjZX0gZG9lcyBub3QgaGF2ZSBhIHNhdmUgbGluay5gKTtcclxuICAgIGlmICghc2F2ZUxpbmsubmFtZSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc2F2ZSBsaW5rICR7c2F2ZUxpbmt9IGRvZXMgbm90IGhhdmUgYSBzYXZlIG5hbWUuYCk7XHJcblxyXG4gICAgY29uc3QgdXJpID0gc2F2ZUxpbmsuaHJlZjtcclxuICAgIGNvbnN0IG1ldGhvZCA9IHNhdmVMaW5rLm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGhlYWRlciA9IFJFU1R3b3JsZENsaWVudC5jcmVhdGVIZWFkZXJzKCdhcHBsaWNhdGlvbi9oYWwranNvbicsIHRoaXMuX29wdGlvbnMuVmVyc2lvbik7XHJcblxyXG4gICAgbGV0IHJlc3BvbnNlO1xyXG4gICAgc3dpdGNoIChtZXRob2QpIHtcclxuICAgICAgY2FzZSAncHV0JzpcclxuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFsQ2xpZW50LnB1dCh1cmksIHJlc291cmNlLCBSZXNvdXJjZSwgUHJvYmxlbURldGFpbHMsIGhlYWRlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Bvc3QnOlxyXG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQucG9zdCh1cmksIHJlc291cmNlLCBSZXNvdXJjZSwgUHJvYmxlbURldGFpbHMsIGhlYWRlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHttZXRob2R9JyBpcyBub3QgYWxsb3dlZCBhcyBsaW5rIG5hbWUgZm9yIHRoZSBzYXZlIGxpbmsuIE9ubHkgJ1BPU1QnIGFuZCAnUFVUJyBhcmUgYWxsb3dlZC5gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsRm9ybXMocmVzb3VyY2U6IFJlc291cmNlKTogUHJvbWlzZTxIdHRwUmVzcG9uc2U8Rm9ybXNSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPltdPiB7XHJcbiAgICBjb25zdCB1cmxzID0gcmVzb3VyY2UuZ2V0Rm9ybUxpbmtIcmVmcygpO1xyXG4gICAgY29uc3QgaGVhZGVyID0gUkVTVHdvcmxkQ2xpZW50LmNyZWF0ZUhlYWRlcnMoJ2FwcGxpY2F0aW9uL3Bycy5oYWwtZm9ybXMranNvbicsIHRoaXMuX29wdGlvbnMuVmVyc2lvbik7XHJcbiAgICBjb25zdCBmb3Jtc1Byb21pc2VzID0gdXJscy5tYXAodXJsID0+IHRoaXMuX2hhbENsaWVudC5nZXQodXJsLCBGb3Jtc1Jlc291cmNlLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKSk7XHJcbiAgICBjb25zdCBmb3Jtc0FuZFByb2JsZW1zID0gYXdhaXQgUHJvbWlzZS5hbGwoZm9ybXNQcm9taXNlcyk7XHJcbiAgICByZXR1cm4gZm9ybXNBbmRQcm9ibGVtcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdWJtaXQodGVtcGxhdGU6IFRlbXBsYXRlLCBmb3JtVmFsdWVzOiB7fSk6IFByb21pc2U8SHR0cFJlc3BvbnNlPEZvcm1zUmVzb3VyY2UgfCBQcm9ibGVtRGV0YWlscz4+IHtcclxuICAgIGNvbnN0IHVyaSA9IHRlbXBsYXRlLnRhcmdldCB8fCAnJztcclxuICAgIGNvbnN0IG1ldGhvZCA9IHRlbXBsYXRlLm1ldGhvZD8udG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGhlYWRlciA9IFJFU1R3b3JsZENsaWVudC5jcmVhdGVIZWFkZXJzKCdhcHBsaWNhdGlvbi9wcnMuaGFsLWZvcm1zK2pzb24nLCB0aGlzLl9vcHRpb25zLlZlcnNpb24pO1xyXG5cclxuICAgIGxldCByZXNwb25zZTtcclxuICAgIHN3aXRjaCAobWV0aG9kKSB7XHJcbiAgICAgIGNhc2UgJ3B1dCc6XHJcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5wdXQodXJpLCBmb3JtVmFsdWVzLCBGb3Jtc1Jlc291cmNlLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncG9zdCc6XHJcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5wb3N0KHVyaSwgZm9ybVZhbHVlcywgRm9ybXNSZXNvdXJjZSwgUHJvYmxlbURldGFpbHMsIGhlYWRlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5nZXQodXJpLCBGb3Jtc1Jlc291cmNlLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlbGV0ZShyZXNvdXJjZTogUmVzb3VyY2UpOiBQcm9taXNlPEh0dHBSZXNwb25zZTx2b2lkIHwgUHJvYmxlbURldGFpbHM+PiB7XHJcbiAgICBjb25zdCBkZWxldGVMaW5rID0gcmVzb3VyY2UuZmluZExpbmsoJ2RlbGV0ZScpO1xyXG4gICAgaWYgKCFkZWxldGVMaW5rKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSByZXNvdXJjZSAke3Jlc291cmNlfSBkb2VzIG5vdCBoYXZlIGEgZGVsZXRlIGxpbmsuYCk7XHJcbiAgICBjb25zdCB1cmkgPSBkZWxldGVMaW5rLmhyZWY7XHJcbiAgICBjb25zdCBoZWFkZXIgPSBSRVNUd29ybGRDbGllbnQuY3JlYXRlSGVhZGVycygnYXBwbGljYXRpb24vaGFsK2pzb24nLCB0aGlzLl9vcHRpb25zLlZlcnNpb24pO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQuZGVsZXRlKHVyaSwgUHJvYmxlbURldGFpbHMsIGhlYWRlcik7XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFsbExpbmtzRnJvbUhvbWUoKTogeyBbcmVsOiBzdHJpbmddOiBMaW5rW10gfCB1bmRlZmluZWQgfSB7XHJcbiAgICBpZiAoIXRoaXMuX2hvbWVSZXNvdXJjZSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdIb21lIHJlc291cmNlIGlzIG5vdCBzZXQuIENhbGwgZW5zdXJlSG9tZVJlc291cmNlSXNTZXQoKSBmaXJzdC4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5faG9tZVJlc291cmNlLl9saW5rcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRMaW5rRnJvbUhvbWUocmVsOiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIGN1cmllPzogc3RyaW5nKTogTGluayB7XHJcbiAgICBjb25zdCBsaW5rcyA9IHRoaXMuZ2V0TGlua3NGcm9tSG9tZShyZWwsIGN1cmllKTtcclxuXHJcbiAgICBjb25zdCBsaW5rID0gbmFtZSA/IGxpbmtzLmZpbmQobCA9PiBsLm5hbWUgPT09IG5hbWUpIDogbGlua3NbMF07XHJcblxyXG4gICAgaWYgKCFsaW5rKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBob21lIHJlc291cmNlIGRvZXMgbm90IGhhdmUgYSBsaW5rIHdpdGggdGhlIHJlbCAnJHt0aGlzLmdldEZ1bGxSZWwocmVsLCBjdXJpZSl9JyBhbmQgdGhlIG5hbWUgJyR7bmFtZX0nLmApXHJcblxyXG4gICAgcmV0dXJuIGxpbms7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TGlua3NGcm9tSG9tZShyZWw6IHN0cmluZywgY3VyaWU/OiBzdHJpbmcpOiBMaW5rW10ge1xyXG4gICAgaWYgKCF0aGlzLl9ob21lUmVzb3VyY2UpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignSG9tZSByZXNvdXJjZSBpcyBub3Qgc2V0LiBDYWxsIGVuc3VyZUhvbWVSZXNvdXJjZUlzU2V0KCkgZmlyc3QuJyk7XHJcblxyXG4gICAgY29uc3QgZnVsbFJlbCA9IHRoaXMuZ2V0RnVsbFJlbChyZWwsIGN1cmllKTtcclxuICAgIGNvbnN0IGxpbmtzID0gdGhpcy5faG9tZVJlc291cmNlLl9saW5rc1tmdWxsUmVsXTtcclxuICAgIGlmICghbGlua3MgfHwgbGlua3MubGVuZ3RoID09PSAwKVxyXG4gICAgICB0aHJvdyBFcnJvcihgVGhlIGhvbWUgcmVzb3VyY2UgZG9lcyBub3QgaGF2ZSBhIGxpbmsgd2l0aCB0aGUgcmVsICcke2Z1bGxSZWx9Jy5gKTtcclxuXHJcbiAgICByZXR1cm4gbGlua3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZ1bGxSZWwocmVsOiBzdHJpbmcsIGN1cmllPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vIHJlbCBhbHJlYWR5IGluY2x1ZGVzIGEgY3VyaWUgPT4ganVzdCByZXR1cm4gaXRcclxuICAgIGlmIChyZWwuaW5jbHVkZXMoJzonKSlcclxuICAgICAgcmV0dXJuIHJlbDtcclxuXHJcbiAgICAvLyBObyBjdXJpZSBnaXZlbiA9PiB1c2UgZGVmYXVsdCBjdXJpZS5cclxuICAgIGlmICghY3VyaWUpXHJcbiAgICAgIGN1cmllID0gdGhpcy5fZGVmYXVsdEN1cmllO1xyXG5cclxuICAgIC8vIENvbWJpbmUgY3VyaWUgYW5kIHJlbFxyXG4gICAgY29uc3QgZnVsbFJlbCA9IGAke2N1cmllfToke3JlbH1gO1xyXG5cclxuICAgIHJldHVybiBmdWxsUmVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlSGVhZGVycyhtZWRpYVR5cGU/OiAnYXBwbGljYXRpb24vaGFsK2pzb24nIHwgJ2FwcGxpY2F0aW9uL3Bycy5oYWwtZm9ybXMranNvbicsIHZlcnNpb24/OiBudW1iZXIpOiBIdHRwSGVhZGVycyB7XHJcbiAgICBpZiAodmVyc2lvbilcclxuICAgICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyh7ICdBY2NlcHQnOiBgJHttZWRpYVR5cGUgfHwgJ2FwcGxpY2F0aW9uL2hhbCtqc29uJ307IHY9JHt2ZXJzaW9ufWAgfSk7XHJcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQWEsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBWSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHM0QsTUFBTSxPQUFPLGVBQWU7SUFRMUIsWUFDVSxVQUFxQixFQUNyQixRQUEwQjtRQUQxQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQWtCO0lBQ2hDLENBQUM7SUFQTCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFPTSxLQUFLLENBQUMsdUJBQXVCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksY0FBYyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLGlCQUFpQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sbUJBQW1CLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDaEo7WUFDRCxJQUFJLENBQUMsUUFBUSxD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O1FBQ0wsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxNQUFNLENBQUMsY0FBYyxDQUFDLGVBQXdDLEVBQUUsWUFBcUMsRUFBRSxpQkFBMEI7UUFDdkksSUFBSSxDQUFDLFlBQVk7WUFDZixPQUFPLGVBQWUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZTtZQUNsQixPQUFPLFlBQVksQ0FBQztRQUV0QixJQUFJLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFFdEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFO1lBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixFQUFFO2dCQUNsRCxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25ELElBQUksaUJBQWlCO29CQUNuQixlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzthQUNqRTtTQUNGO1FBRUQsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IEZvcm1zUmVzb3VyY2UsIEhhbENsaWVudCwgTGluaywgUGFnZWRMaXN0UmVzb3VyY2UsIFJlc291cmNlLCBUZW1wbGF0ZSB9IGZyb20gXCJAd2VydHp1aS9uZ3gtaGFsLWNsaWVudFwiO1xyXG5pbXBvcnQgeyBMaW5rTmFtZXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzL2xpbmstbmFtZXNcIjtcclxuaW1wb3J0IHsgUHJvYmxlbURldGFpbHMgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2JsZW0tZGV0YWlsc1wiO1xyXG5pbXBvcnQgeyBSRVNUd29ybGRPcHRpb25zIH0gZnJvbSBcIi4uL21vZGVscy9yZXN0d29ybGQtb3B0aW9uc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJFU1R3b3JsZENsaWVudCB7XHJcblxyXG4gIHByaXZhdGUgX2hvbWVSZXNvdXJjZT86IFJlc291cmNlO1xyXG4gIHByaXZhdGUgX2RlZmF1bHRDdXJpZT86IHN0cmluZztcclxuICBwdWJsaWMgZ2V0IGhhbENsaWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9oYWxDbGllbnQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2hhbENsaWVudDogSGFsQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBfb3B0aW9uczogUkVTVHdvcmxkT3B0aW9uc1xyXG4gICkgeyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBlbnN1cmVIb21lUmVzb3VyY2VJc1NldCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5faG9tZVJlc291cmNlKSB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRIb21lRm9yY2VkKCk7XHJcbiAgICAgIGlmIChQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHRoZSBob21lIHJlc291cmNlIGZyb20gJHt0aGlzLl9vcHRpb25zLkJhc2VVcmx9IHdpdGggVmVyc2lvbiAke3RoaXMuX29wdGlvbnMuVmVyc2lvbn0uIFJlc3BvbnNlIHdhczogJHtyZXNwb25zZX1gKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXJlc3BvbnNlLmJvZHkpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHRoZSBob21lIHJlc291cmNlIGZyb20gJHt0aGlzLl9vcHRpb25zLkJhc2VVcmx9IHdpdGggVmVyc2lvbiAke3RoaXMuX29wdGlvbnMuVmVyc2lvbn0uIFJlc3BvbnNlIHdhcyBlbXB0eS5gKTtcclxuICAgICAgdGhpcy5faG9tZVJlc291cmNlID0gcmVzcG9uc2UuYm9keTtcclxuICAgICAgdGhpcy5zZXREZWZhdWx0Q3VyaWUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0SG9tZUZvcmNlZCgpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPj4ge1xyXG4gICAgY29uc3QgaGVhZGVyID0gUkVTVHdvcmxkQ2xpZW50LmNyZWF0ZUhlYWRlcnMoJ2FwcGxpY2F0aW9uL2hhbCtqc29uJywgdGhpcy5fb3B0aW9ucy5WZXJzaW9uKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQuZ2V0KHRoaXMuX29wdGlvbnMuQmFzZVVybCwgUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBoZWFkZXIpO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREZWZhdWx0Q3VyaWUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjdXJpZXMgPSB0aGlzLl9ob21lUmVzb3VyY2U/Ll9saW5rcz8uY3VyaWVzO1xyXG4gICAgaWYgKCFjdXJpZXMgfHwgY3VyaWVzLmxlbmd0aCA9PT0gMCB8fCAhY3VyaWVzWzBdKVxyXG4gICAgICB0aGlzLl9kZWZhdWx0Q3VyaWUgPSB1bmRlZmluZWQ7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX2RlZmF1bHRDdXJpZSA9IGN1cmllc1swXS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldExpc3QocmVsOiBzdHJpbmcsIHBhcmFtZXRlcnM6IHt9LCBoZWFkZXJzPzogSHR0cEhlYWRlcnMsIGN1cmllPzogc3RyaW5nKTogUHJvbWlzZTxIdHRwUmVzcG9uc2U8UGFnZWRMaXN0UmVzb3VyY2UgfCBQcm9ibGVtRGV0YWlscz4+IHtcclxuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmdldExpbmtGcm9tSG9tZShyZWwsIExpbmtOYW1lcy5nZXRMaXN0LCBjdXJpZSk7XHJcbiAgICBjb25zdCB1cmkgPSBsaW5rLmZpbGxUZW1wbGF0ZShwYXJhbWV0ZXJzKTtcclxuICAgIGNvbnN0IGRlZmF1bHRIZWFkZXJzID0gUkVTVHdvcmxkQ2xpZW50LmNyZWF0ZUhlYWRlcnMoJ2FwcGxpY2F0aW9uL2hhbCtqc29uJywgdGhpcy5fb3B0aW9ucy5WZXJzaW9uKTtcclxuICAgIGNvbnN0IGNvbWJpbmVkSGVhZGVycyA9IFJFU1R3b3JsZENsaWVudC5jb21iaW5lSGVhZGVycyhoZWFkZXJzLCBkZWZhdWx0SGVhZGVycywgZmFsc2UpO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQuZ2V0KHVyaSwgUGFnZWRMaXN0UmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBjb21iaW5lZEhlYWRlcnMpO1xyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRMaXN0QnlVcmkodXJpOiBzdHJpbmcsIHBhcmFtZXRlcnM6IHt9LCBoZWFkZXJzPzogSHR0cEhlYWRlcnMpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxQYWdlZExpc3RSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPj4ge1xyXG4gICAgY29uc3QgbGluayA9IG5ldyBMaW5rKCk7XHJcbiAgICBsaW5rLmhyZWYgPSB1cmk7XHJcbiAgICBjb25zdCBmaWxsZWRVcmkgPSBsaW5rLmZpbGxUZW1wbGF0ZShwYXJhbWV0ZXJzKTtcclxuICAgIGNvbnN0IGRlZmF1bHRIZWFkZXJzID0gUkVTVHdvcmxkQ2xpZW50LmNyZWF0ZUhlYWRlcnMoJ2FwcGxpY2F0aW9uL2hhbCtqc29uJywgdGhpcy5fb3B0aW9ucy5WZXJzaW9uKTtcclxuICAgIGNvbnN0IGNvbWJpbmVkSGVhZGVycyA9IFJFU1R3b3JsZENsaWVudC5jb21iaW5lSGVhZGVycyhoZWFkZXJzLCBkZWZhdWx0SGVhZGVycywgZmFsc2UpO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQuZ2V0KGZpbGxlZFVyaSwgUGFnZWRMaXN0UmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBjb21iaW5lZEhlYWRlcnMpO1xyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTaW5nbGUocmVsT3JVcmk6IHN0cmluZywgaWQ/OiBudW1iZXIsIGhlYWRlcnM/OiBIdHRwSGVhZGVycywgY3VyaWU/OiBzdHJpbmcpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPj4ge1xyXG4gICAgbGV0IHVyaTtcclxuICAgIGlmIChyZWxPclVyaS5zdGFydHNXaXRoKCdodHRwJykpIHtcclxuICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXaGVuIHN1cHBseWluZyBhIFVSSSwgYW4gSUQgY2Fubm90IGJlIHN1cHBsaWVkIHRvby4nKTtcclxuICAgICAgaWYgKGN1cmllKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV2hlbiBzdXBwbHlpbmcgYSBVUkksIGEgY3VyaWUgY2Fubm90IGJlIHN1cHBsaWVkIHRvby4nKTtcclxuXHJcbiAgICAgIHVyaSA9IHJlbE9yVXJpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICghXy5pc051bWJlcihpZCkpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXaGVuIHN1cHBseWluZyBhIHJlbCwgYW4gSUQgbXVzdCBiZSBzdXBwbGllZCB0b28uJyk7XHJcblxyXG4gICAgICBjb25zdCBsaW5rID0gdGhpcy5nZXRMaW5rRnJvbUhvbWUocmVsT3JVcmksIExpbmtOYW1lcy5nZXQsIGN1cmllKTtcclxuICAgICAgdXJpID0gbGluay5maWxsVGVtcGxhdGUoeyBpZDogaWQudG9TdHJpbmcoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZWZhdWx0SGVhZGVycyA9IFJFU1R3b3JsZENsaWVudC5jcmVhdGVIZWFkZXJzKCdhcHBsaWNhdGlvbi9oYWwranNvbicsIHRoaXMuX29wdGlvbnMuVmVyc2lvbik7XHJcbiAgICBjb25zdCBjb21iaW5lZEhlYWRlcnMgPSBSRVNUd29ybGRDbGllbnQuY29tYmluZUhlYWRlcnMoaGVhZGVycywgZGVmYXVsdEhlYWRlcnMsIGZhbHNlKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQuZ2V0KHVyaSwgUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBjb21iaW5lZEhlYWRlcnMpO1xyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzYXZlKHJlc291cmNlOiBSZXNvdXJjZSk6IFByb21pc2U8SHR0cFJlc3BvbnNlPFJlc291cmNlIHwgUHJvYmxlbURldGFpbHM+PiB7XHJcbiAgICBjb25zdCBzYXZlTGluayA9IHJlc291cmNlLmZpbmRMaW5rKCdzYXZlJyk7XHJcbiAgICBpZiAoIXNhdmVMaW5rKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSByZXNvdXJjZSAke3Jlc291cmNlfSBkb2VzIG5vdCBoYXZlIGEgc2F2ZSBsaW5rLmApO1xyXG4gICAgaWYgKCFzYXZlTGluay5uYW1lKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzYXZlIGxpbmsgJHtzYXZlTGlua30gZG9lcyBub3QgaGF2ZSBhIHNhdmUgbmFtZS5gKTtcclxuXHJcbiAgICBjb25zdCB1cmkgPSBzYXZlTGluay5ocmVmO1xyXG4gICAgY29uc3QgbWV0aG9kID0gc2F2ZUxpbmsubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgaGVhZGVyID0gUkVTVHdvcmxkQ2xpZW50LmNyZWF0ZUhlYWRlcnMoJ2FwcGxpY2F0aW9uL2hhbCtqc29uJywgdGhpcy5fb3B0aW9ucy5WZXJzaW9uKTtcclxuXHJcbiAgICBsZXQgcmVzcG9uc2U7XHJcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xyXG4gICAgICBjYXNlICdwdXQnOlxyXG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYWxDbGllbnQucHV0KHVyaSwgcmVzb3VyY2UsIFJlc291cmNlLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncG9zdCc6XHJcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5wb3N0KHVyaSwgcmVzb3VyY2UsIFJlc291cmNlLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhbGxvd2VkIGFzIGxpbmsgbmFtZSBmb3IgdGhlIHNhdmUgbGluay4gT25seSAnUE9TVCcgYW5kICdQVVQnIGFyZSBhbGxvd2VkLmApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBbGxGb3JtcyhyZXNvdXJjZTogUmVzb3VyY2UpOiBQcm9taXNlPEh0dHBSZXNwb25zZTxGb3Jtc1Jlc291cmNlIHwgUHJvYmxlbURldGFpbHM+W10+IHtcclxuICAgIGNvbnN0IHVybHMgPSByZXNvdXJjZS5nZXRGb3JtTGlua0hyZWZzKCk7XHJcbiAgICBjb25zdCBoZWFkZXIgPSBSRVNUd29ybGRDbGllbnQuY3JlYXRlSGVhZGVycygnYXBwbGljYXRpb24vcHJzLmhhbC1mb3Jtcytqc29uJywgdGhpcy5fb3B0aW9ucy5WZXJzaW9uKTtcclxuICAgIGNvbnN0IGZvcm1zUHJvbWlzZXMgPSB1cmxzLm1hcCh1cmwgPT4gdGhpcy5faGFsQ2xpZW50LmdldCh1cmwsIEZvcm1zUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBoZWFkZXIpKTtcclxuICAgIGNvbnN0IGZvcm1zQW5kUHJvYmxlbXMgPSBhd2FpdCBQcm9taXNlLmFsbChmb3Jtc1Byb21pc2VzKTtcclxuICAgIHJldHVybiBmb3Jtc0FuZFByb2JsZW1zO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN1Ym1pdCh0ZW1wbGF0ZTogVGVtcGxhdGUsIGZvcm1WYWx1ZXM6IHt9KTogUHJvbWlzZTxIdHRwUmVzcG9uc2U8Rm9ybXNSZXNvdXJjZSB8IFByb2JsZW1EZXRhaWxzPj4ge1xyXG4gICAgY29uc3QgdXJpID0gdGVtcGxhdGUudGFyZ2V0IHx8ICcnO1xyXG4gICAgY29uc3QgbWV0aG9kID0gdGVtcGxhdGUubWV0aG9kPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgaGVhZGVyID0gUkVTVHdvcmxkQ2xpZW50LmNyZWF0ZUhlYWRlcnMoJ2FwcGxpY2F0aW9uL3Bycy5oYWwtZm9ybXMranNvbicsIHRoaXMuX29wdGlvbnMuVmVyc2lvbik7XHJcblxyXG4gICAgbGV0IHJlc3BvbnNlO1xyXG4gICAgc3dpdGNoIChtZXRob2QpIHtcclxuICAgICAgY2FzZSAncHV0JzpcclxuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFsQ2xpZW50LnB1dCh1cmksIGZvcm1WYWx1ZXMsIEZvcm1zUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBoZWFkZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwb3N0JzpcclxuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFsQ2xpZW50LnBvc3QodXJpLCBmb3JtVmFsdWVzLCBGb3Jtc1Jlc291cmNlLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFsQ2xpZW50LmdldCh1cmksIEZvcm1zUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBoZWFkZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKHJlc291cmNlOiBSZXNvdXJjZSk6IFByb21pc2U8SHR0cFJlc3BvbnNlPHZvaWQgfCBQcm9ibGVtRGV0YWlscz4+IHtcclxuICAgIGNvbnN0IGRlbGV0ZUxpbmsgPSByZXNvdXJjZS5maW5kTGluaygnZGVsZXRlJyk7XHJcbiAgICBpZiAoIWRlbGV0ZUxpbmspXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHJlc291cmNlICR7cmVzb3VyY2V9IGRvZXMgbm90IGhhdmUgYSBkZWxldGUgbGluay5gKTtcclxuICAgIGNvbnN0IHVyaSA9IGRlbGV0ZUxpbmsuaHJlZjtcclxuICAgIGNvbnN0IGhlYWRlciA9IFJFU1R3b3JsZENsaWVudC5jcmVhdGVIZWFkZXJzKCdhcHBsaWNhdGlvbi9oYWwranNvbicsIHRoaXMuX29wdGlvbnMuVmVyc2lvbik7XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbENsaWVudC5kZWxldGUodXJpLCBQcm9ibGVtRGV0YWlscywgaGVhZGVyKTtcclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWxsTGlua3NGcm9tSG9tZSgpOiB7IFtyZWw6IHN0cmluZ106IExpbmtbXSB8IHVuZGVmaW5lZDsgfSB7XHJcbiAgICBpZiAoIXRoaXMuX2hvbWVSZXNvdXJjZSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdIb21lIHJlc291cmNlIGlzIG5vdCBzZXQuIENhbGwgZW5zdXJlSG9tZVJlc291cmNlSXNTZXQoKSBmaXJzdC4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5faG9tZVJlc291cmNlLl9saW5rcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRMaW5rRnJvbUhvbWUocmVsOiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIGN1cmllPzogc3RyaW5nKTogTGluayB7XHJcbiAgICBjb25zdCBsaW5rcyA9IHRoaXMuZ2V0TGlua3NGcm9tSG9tZShyZWwsIGN1cmllKTtcclxuXHJcbiAgICBjb25zdCBsaW5rID0gbmFtZSA/IGxpbmtzLmZpbmQobCA9PiBsLm5hbWUgPT09IG5hbWUpIDogbGlua3NbMF07XHJcblxyXG4gICAgaWYgKCFsaW5rKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBob21lIHJlc291cmNlIGRvZXMgbm90IGhhdmUgYSBsaW5rIHdpdGggdGhlIHJlbCAnJHt0aGlzLmdldEZ1bGxSZWwocmVsLCBjdXJpZSl9JyBhbmQgdGhlIG5hbWUgJyR7bmFtZX0nLmApO1xyXG5cclxuICAgIHJldHVybiBsaW5rO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExpbmtzRnJvbUhvbWUocmVsOiBzdHJpbmcsIGN1cmllPzogc3RyaW5nKTogTGlua1tdIHtcclxuICAgIGlmICghdGhpcy5faG9tZVJlc291cmNlKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hvbWUgcmVzb3VyY2UgaXMgbm90IHNldC4gQ2FsbCBlbnN1cmVIb21lUmVzb3VyY2VJc1NldCgpIGZpcnN0LicpO1xyXG5cclxuICAgIGNvbnN0IGZ1bGxSZWwgPSB0aGlzLmdldEZ1bGxSZWwocmVsLCBjdXJpZSk7XHJcbiAgICBjb25zdCBsaW5rcyA9IHRoaXMuX2hvbWVSZXNvdXJjZS5fbGlua3NbZnVsbFJlbF07XHJcbiAgICBpZiAoIWxpbmtzIHx8IGxpbmtzLmxlbmd0aCA9PT0gMClcclxuICAgICAgdGhyb3cgRXJyb3IoYFRoZSBob21lIHJlc291cmNlIGRvZXMgbm90IGhhdmUgYSBsaW5rIHdpdGggdGhlIHJlbCAnJHtmdWxsUmVsfScuYCk7XHJcblxyXG4gICAgcmV0dXJuIGxpbmtzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGdWxsUmVsKHJlbDogc3RyaW5nLCBjdXJpZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvLyByZWwgYWxyZWFkeSBpbmNsdWRlcyBhIGN1cmllID0+IGp1c3QgcmV0dXJuIGl0XHJcbiAgICBpZiAocmVsLmluY2x1ZGVzKCc6JykpXHJcbiAgICAgIHJldHVybiByZWw7XHJcblxyXG4gICAgLy8gTm8gY3VyaWUgZ2l2ZW4gPT4gdXNlIGRlZmF1bHQgY3VyaWUuXHJcbiAgICBpZiAoIWN1cmllKVxyXG4gICAgICBjdXJpZSA9IHRoaXMuX2RlZmF1bHRDdXJpZTtcclxuXHJcbiAgICAvLyBDb21iaW5lIGN1cmllIGFuZCByZWxcclxuICAgIGNvbnN0IGZ1bGxSZWwgPSBgJHtjdXJpZX06JHtyZWx9YDtcclxuXHJcbiAgICByZXR1cm4gZnVsbFJlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUhlYWRlcnMobWVkaWFUeXBlPzogJ2FwcGxpY2F0aW9uL2hhbCtqc29uJyB8ICdhcHBsaWNhdGlvbi9wcnMuaGFsLWZvcm1zK2pzb24nLCB2ZXJzaW9uPzogbnVtYmVyKTogSHR0cEhlYWRlcnMge1xyXG4gICAgaWYgKHZlcnNpb24pXHJcbiAgICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdBY2NlcHQnOiBgJHttZWRpYVR5cGUgfHwgJ2FwcGxpY2F0aW9uL2hhbCtqc29uJ307IHY9JHt2ZXJzaW9ufWAsXHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGAke21lZGlhVHlwZSB8fCAnYXBwbGljYXRpb24vaGFsK2pzb24nfTsgdj0ke3ZlcnNpb259YFxyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNvbWJpbmVIZWFkZXJzKG9yaWdpbmFsSGVhZGVyczogSHR0cEhlYWRlcnMgfCB1bmRlZmluZWQsIGhlYWRlcnNUb0FkZDogSHR0cEhlYWRlcnMgfCB1bmRlZmluZWQsIG92ZXJ3cml0ZUV4aXN0aW5nOiBib29sZWFuKSB7XHJcbiAgICBpZiAoIWhlYWRlcnNUb0FkZClcclxuICAgICAgcmV0dXJuIG9yaWdpbmFsSGVhZGVycztcclxuICAgIGlmICghb3JpZ2luYWxIZWFkZXJzKVxyXG4gICAgICByZXR1cm4gaGVhZGVyc1RvQWRkO1xyXG5cclxuICAgIGxldCBjb21iaW5lZEhlYWRlcnMgPSBvcmlnaW5hbEhlYWRlcnM7XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gaGVhZGVyc1RvQWRkLmtleXMpIHtcclxuICAgICAgaWYgKCFjb21iaW5lZEhlYWRlcnMuaGFzKGtleSkgfHwgb3ZlcndyaXRlRXhpc3RpbmcpIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJWYWx1ZXNUb0FkZCA9IGhlYWRlcnNUb0FkZC5nZXRBbGwoa2V5KTtcclxuICAgICAgICBpZiAoaGVhZGVyVmFsdWVzVG9BZGQpXHJcbiAgICAgICAgICBjb21iaW5lZEhlYWRlcnMgPSBjb21iaW5lZEhlYWRlcnMuc2V0KGtleSwgaGVhZGVyVmFsdWVzVG9BZGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkSGVhZGVycztcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -22,6 +22,8 @@ export var ColumnType;
|
|
|
22
22
|
ColumnType["numeric"] = "numeric";
|
|
23
23
|
ColumnType["boolean"] = "boolean";
|
|
24
24
|
ColumnType["date"] = "date";
|
|
25
|
+
ColumnType["array"] = "array";
|
|
26
|
+
ColumnType["object"] = "object";
|
|
25
27
|
})(ColumnType || (ColumnType = {}));
|
|
26
28
|
export class RESTworldListViewComponent {
|
|
27
29
|
constructor(_clients, _confirmationService, _messageService, avatarGenerator) {
|
|
@@ -31,8 +33,11 @@ export class RESTworldListViewComponent {
|
|
|
31
33
|
this.avatarGenerator = avatarGenerator;
|
|
32
34
|
this._columns = [];
|
|
33
35
|
this._editLink = '/edit';
|
|
36
|
+
this._sortField = '';
|
|
37
|
+
this._sortOrder = 1;
|
|
34
38
|
this.isLoading = false;
|
|
35
39
|
this._totalRecords = 0;
|
|
40
|
+
this.load = _.debounce(this.load2, 100);
|
|
36
41
|
this.rowsPerPage = [10, 25, 50];
|
|
37
42
|
this._lastEvent = {
|
|
38
43
|
rows: this.rowsPerPage[0]
|
|
@@ -50,20 +55,34 @@ export class RESTworldListViewComponent {
|
|
|
50
55
|
}
|
|
51
56
|
set apiName(value) {
|
|
52
57
|
this._apiName = value;
|
|
53
|
-
|
|
54
|
-
this.load(this._lastEvent);
|
|
58
|
+
this.load(this._lastEvent);
|
|
55
59
|
}
|
|
56
60
|
get apiName() {
|
|
57
61
|
return this._apiName;
|
|
58
62
|
}
|
|
59
63
|
set rel(value) {
|
|
60
64
|
this._rel = value;
|
|
61
|
-
|
|
62
|
-
this.load(this._lastEvent);
|
|
65
|
+
this.load(this._lastEvent);
|
|
63
66
|
}
|
|
64
67
|
get rel() {
|
|
65
68
|
return this._rel;
|
|
66
69
|
}
|
|
70
|
+
set sortField(value) {
|
|
71
|
+
this._sortField = value ?? '';
|
|
72
|
+
this._lastEvent.sortField = value;
|
|
73
|
+
this.load(this._lastEvent);
|
|
74
|
+
}
|
|
75
|
+
get sortField() {
|
|
76
|
+
return this._sortField;
|
|
77
|
+
}
|
|
78
|
+
set sortOrder(value) {
|
|
79
|
+
this._sortOrder = value ?? 1;
|
|
80
|
+
this._lastEvent.sortOrder = value;
|
|
81
|
+
this.load(this._lastEvent);
|
|
82
|
+
}
|
|
83
|
+
get sortOrder() {
|
|
84
|
+
return this._sortOrder;
|
|
85
|
+
}
|
|
67
86
|
get value() {
|
|
68
87
|
return this.resource?._embedded?.items || [];
|
|
69
88
|
}
|
|
@@ -76,21 +95,28 @@ export class RESTworldListViewComponent {
|
|
|
76
95
|
set totalRecords(value) {
|
|
77
96
|
this._totalRecords = value || 0;
|
|
78
97
|
}
|
|
79
|
-
get sortOrder() {
|
|
80
|
-
return this._lastEvent.sortOrder || 0;
|
|
81
|
-
}
|
|
82
98
|
get newHref() {
|
|
83
99
|
return this.resource?.findLink('new')?.href;
|
|
84
100
|
}
|
|
85
101
|
get dateFormat() {
|
|
86
102
|
return RESTworldListViewComponent._dateFormat;
|
|
87
103
|
}
|
|
104
|
+
ngOnChanges(changes) {
|
|
105
|
+
console.log("ngOnChanges " + changes);
|
|
106
|
+
}
|
|
107
|
+
ngOnInit() {
|
|
108
|
+
console.log("ngOnInit");
|
|
109
|
+
}
|
|
110
|
+
async ngAfterViewInit() {
|
|
111
|
+
console.log("ngAfterViewInit");
|
|
112
|
+
//await this.load(this._lastEvent);
|
|
113
|
+
}
|
|
88
114
|
getClient() {
|
|
89
115
|
if (!this.apiName)
|
|
90
116
|
throw new Error('Cannot get a client, because the apiName is not set.');
|
|
91
117
|
return this._clients.getClient(this.apiName);
|
|
92
118
|
}
|
|
93
|
-
async
|
|
119
|
+
async load2(event) {
|
|
94
120
|
if (!this.apiName || !this.rel)
|
|
95
121
|
return;
|
|
96
122
|
this.isLoading = true;
|
|
@@ -182,6 +208,10 @@ export class RESTworldListViewComponent {
|
|
|
182
208
|
return ColumnType.text;
|
|
183
209
|
if (_.isBoolean(value))
|
|
184
210
|
return ColumnType.boolean;
|
|
211
|
+
if (_.isArrayLike(value))
|
|
212
|
+
return ColumnType.array;
|
|
213
|
+
if (_.isObjectLike(value))
|
|
214
|
+
return ColumnType.object;
|
|
185
215
|
return ColumnType.text;
|
|
186
216
|
}
|
|
187
217
|
static toTitleCase(anyCase) {
|
|
@@ -325,17 +355,21 @@ RESTworldListViewComponent._dateFormat = new Date(3333, 10, 22)
|
|
|
325
355
|
.replace("3333", "y")
|
|
326
356
|
.replace("33", "yy");
|
|
327
357
|
RESTworldListViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: RESTworldListViewComponent, deps: [{ token: i1.RESTworldClientCollection }, { token: i2.ConfirmationService }, { token: i2.MessageService }, { token: i3.AvatarGenerator }], target: i0.ɵɵFactoryTarget.Component });
|
|
328
|
-
RESTworldListViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: RESTworldListViewComponent, selector: "rw-list", inputs: { editLink: "editLink", apiName: "apiName", rel: "rel", rowsPerPage: "rowsPerPage" }, ngImport: i0, template: "<p-table [value]=\"value\"\r\n [lazy]=\"true\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"true\"\r\n [rows]=\"rows\"\r\n [rowsPerPageOptions]=\"rowsPerPage\"\r\n [totalRecords]=\"totalRecords\"\r\n [loading]=\"isLoading\"\r\n [showInitialSortBadge]=\"true\"\r\n [columns]=\"columns\">\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.field\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center\">\r\n {{col.header}}\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n <p-columnFilter [type]=\"col.type\" [field]=\"col.field\" display=\"menu\"></p-columnFilter>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"mx-2\" pTooltip=\"Create new\" tooltipPosition=\"left\">\r\n <a class=\"p-button-success\" icon=\"fas fa-plus\" pButton [routerLink]=\"['/edit', apiName, newHref]\"></a>\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\">\r\n <tr>\r\n
|
|
358
|
+
RESTworldListViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: RESTworldListViewComponent, selector: "rw-list", inputs: { editLink: "editLink", apiName: "apiName", rel: "rel", sortField: "sortField", sortOrder: "sortOrder", rowsPerPage: "rowsPerPage" }, usesOnChanges: true, ngImport: i0, template: "<p-table [value]=\"value\"\r\n [lazy]=\"true\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"true\"\r\n [rows]=\"rows\"\r\n [rowsPerPageOptions]=\"rowsPerPage\"\r\n [totalRecords]=\"totalRecords\"\r\n [loading]=\"isLoading\"\r\n [showInitialSortBadge]=\"true\"\r\n [columns]=\"columns\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\">\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.field\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center\">\r\n {{col.header}}\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n <p-columnFilter [type]=\"col.type\" [field]=\"col.field\" display=\"menu\"></p-columnFilter>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"mx-2\" pTooltip=\"Create new\" tooltipPosition=\"left\">\r\n <a class=\"p-button-success\" icon=\"fas fa-plus\" pButton [routerLink]=\"['/edit', apiName, newHref]\"></a>\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\">\r\n <tr>\r\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <p-avatar *ngIf=\"col.field === 'createdBy' || col.field === 'lastChangedBy'\" [pTooltip]=\"entity[col.field]\" tooltipPosition=\"top\" [image]=\"avatarGenerator.getImage(entity[col.field])\" [label]=\"avatarGenerator.getLabel(entity[col.field])\" [style]=\"avatarGenerator.getStyle(entity[col.field])\" shape=\"circle\"></p-avatar>\r\n <span *ngIf=\"col.field !== 'createdBy' && col.field !== 'lastChangedBy'\">{{entity[col.field]}}</span>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'numeric'\" class=\"flex justify-content-end\">{{entity[col.field]}}</span>\r\n <span *ngSwitchCase=\"'boolean'\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.field]\" [readonly]=\"true\"></p-triStateCheckbox></span>\r\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"entity[col.field]\">{{entity[col.field] | date:dateFormat}}</span>\r\n <span *ngSwitchCase=\"'array'\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.field]\">{{arrayElement | json}}</p></span>\r\n <span *ngSwitchCase=\"'object'\" class=\"flex justify-content-end\">{{entity[col.field] | json}}</span>\r\n </td>\r\n <td>\r\n <div class=\"flex justify-content-end\">\r\n <a pButton pTooltip=\"View/Edit\" tooltipPosition=\"left\" [routerLink]=\"[editLink, apiName, entity._links?.self[0].href]\" icon=\"fas fa-edit\"></a>\r\n <button pTooltip=\"Delete\" tooltipPosition=\"left\" pButton *ngIf=\"entity._links.delete\" (click)=\"showDeleteConfirmatioModal(entity)\" icon=\"fas fa-trash-alt\" type=\"button\" class=\"mx-2 p-button-danger\"></button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"8\">No entries found.</td>\r\n </tr>\r\n </ng-template>\r\n\r\n</p-table>\r\n\r\n<p-toast></p-toast>\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], components: [{ type: i4.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i4.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping"] }, { type: i5.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "style", "styleClass"] }, { type: i6.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabelledBy", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon"], outputs: ["onChange"] }, { type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i8.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }], directives: [{ type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i11.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i12.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "date": i9.DatePipe, "json": i9.JsonPipe } });
|
|
329
359
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: RESTworldListViewComponent, decorators: [{
|
|
330
360
|
type: Component,
|
|
331
|
-
args: [{ selector: 'rw-list', template: "<p-table [value]=\"value\"\r\n [lazy]=\"true\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"true\"\r\n [rows]=\"rows\"\r\n [rowsPerPageOptions]=\"rowsPerPage\"\r\n [totalRecords]=\"totalRecords\"\r\n [loading]=\"isLoading\"\r\n [showInitialSortBadge]=\"true\"\r\n [columns]=\"columns\">\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.field\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center\">\r\n {{col.header}}\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n <p-columnFilter [type]=\"col.type\" [field]=\"col.field\" display=\"menu\"></p-columnFilter>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"mx-2\" pTooltip=\"Create new\" tooltipPosition=\"left\">\r\n <a class=\"p-button-success\" icon=\"fas fa-plus\" pButton [routerLink]=\"['/edit', apiName, newHref]\"></a>\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\">\r\n <tr>\r\n
|
|
361
|
+
args: [{ selector: 'rw-list', template: "<p-table [value]=\"value\"\r\n [lazy]=\"true\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"true\"\r\n [rows]=\"rows\"\r\n [rowsPerPageOptions]=\"rowsPerPage\"\r\n [totalRecords]=\"totalRecords\"\r\n [loading]=\"isLoading\"\r\n [showInitialSortBadge]=\"true\"\r\n [columns]=\"columns\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\">\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.field\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center\">\r\n {{col.header}}\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n <p-columnFilter [type]=\"col.type\" [field]=\"col.field\" display=\"menu\"></p-columnFilter>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"mx-2\" pTooltip=\"Create new\" tooltipPosition=\"left\">\r\n <a class=\"p-button-success\" icon=\"fas fa-plus\" pButton [routerLink]=\"['/edit', apiName, newHref]\"></a>\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\">\r\n <tr>\r\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <p-avatar *ngIf=\"col.field === 'createdBy' || col.field === 'lastChangedBy'\" [pTooltip]=\"entity[col.field]\" tooltipPosition=\"top\" [image]=\"avatarGenerator.getImage(entity[col.field])\" [label]=\"avatarGenerator.getLabel(entity[col.field])\" [style]=\"avatarGenerator.getStyle(entity[col.field])\" shape=\"circle\"></p-avatar>\r\n <span *ngIf=\"col.field !== 'createdBy' && col.field !== 'lastChangedBy'\">{{entity[col.field]}}</span>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'numeric'\" class=\"flex justify-content-end\">{{entity[col.field]}}</span>\r\n <span *ngSwitchCase=\"'boolean'\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.field]\" [readonly]=\"true\"></p-triStateCheckbox></span>\r\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"entity[col.field]\">{{entity[col.field] | date:dateFormat}}</span>\r\n <span *ngSwitchCase=\"'array'\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.field]\">{{arrayElement | json}}</p></span>\r\n <span *ngSwitchCase=\"'object'\" class=\"flex justify-content-end\">{{entity[col.field] | json}}</span>\r\n </td>\r\n <td>\r\n <div class=\"flex justify-content-end\">\r\n <a pButton pTooltip=\"View/Edit\" tooltipPosition=\"left\" [routerLink]=\"[editLink, apiName, entity._links?.self[0].href]\" icon=\"fas fa-edit\"></a>\r\n <button pTooltip=\"Delete\" tooltipPosition=\"left\" pButton *ngIf=\"entity._links.delete\" (click)=\"showDeleteConfirmatioModal(entity)\" icon=\"fas fa-trash-alt\" type=\"button\" class=\"mx-2 p-button-danger\"></button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"8\">No entries found.</td>\r\n </tr>\r\n </ng-template>\r\n\r\n</p-table>\r\n\r\n<p-toast></p-toast>\r\n<p-confirmDialog></p-confirmDialog>\r\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
|
|
332
362
|
}], ctorParameters: function () { return [{ type: i1.RESTworldClientCollection }, { type: i2.ConfirmationService }, { type: i2.MessageService }, { type: i3.AvatarGenerator }]; }, propDecorators: { editLink: [{
|
|
333
363
|
type: Input
|
|
334
364
|
}], apiName: [{
|
|
335
365
|
type: Input
|
|
336
366
|
}], rel: [{
|
|
337
367
|
type: Input
|
|
368
|
+
}], sortField: [{
|
|
369
|
+
type: Input
|
|
370
|
+
}], sortOrder: [{
|
|
371
|
+
type: Input
|
|
338
372
|
}], rowsPerPage: [{
|
|
339
373
|
type: Input
|
|
340
374
|
}] } });
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQXVCLGVBQWUsRUFBaUQsTUFBTSxhQUFhLENBQUM7QUFHbEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFHOUQsTUFBTSxDQUFOLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQiwyQkFBYSxDQUFBO0lBQ2IsaUNBQW1CLENBQUE7SUFDbkIsaUNBQW1CLENBQUE7SUFDbkIsMkJBQWEsQ0FBQTtBQUNmLENBQUMsRUFMVyxVQUFVLEtBQVYsVUFBVSxRQUtyQjtBQWFELE1BQU0sT0FBTywwQkFBMEI7SUF3RXJDLFlBQ1UsUUFBbUMsRUFDbkMsb0JBQXlDLEVBQ3pDLGVBQStCLEVBQ2hDLGVBQWdDO1FBSC9CLGFBQVEsR0FBUixRQUFRLENBQTJCO1FBQ25DLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXZFakMsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQVN4Qixj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QkFBMEIsNklDM0J2Qyw0akdBOERBOzJGRG5DYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UsU0FBUzs2TUFXUixRQUFRO3NCQURsQixLQUFLO2dCQVVLLE9BQU87c0JBRGpCLEtBQUs7Z0JBV0ssR0FBRztzQkFEYixLQUFLO2dCQVdDLFdBQVc7c0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhZ2VkTGlzdFJlc291cmNlLCBSZXNvdXJjZSB9IGZyb20gJ0B3ZXJ0enVpL25neC1oYWwtY2xpZW50JztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBGaWx0ZXJNYXRjaE1vZGUsIEZpbHRlck1ldGFkYXRhLCBMYXp5TG9hZEV2ZW50LCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgUkVTVHdvcmxkQ2xpZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudCc7XHJcbmltcG9ydCB7IFJFU1R3b3JsZENsaWVudENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xyXG5pbXBvcnQgeyBQcm9ibGVtRGV0YWlscyB9IGZyb20gJy4uLy4uL21vZGVscy9wcm9ibGVtLWRldGFpbHMnO1xyXG5pbXBvcnQgeyBBdmF0YXJHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdmF0YXItZ2VuZXJhdG9yJztcclxuXHJcbmV4cG9ydCBlbnVtIENvbHVtblR5cGUge1xyXG4gIHRleHQgPSAndGV4dCcsXHJcbiAgbnVtZXJpYyA9ICdudW1lcmljJyxcclxuICBib29sZWFuID0gJ2Jvb2xlYW4nLFxyXG4gIGRhdGUgPSAnZGF0ZSdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW4ge1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgdHlwZTogQ29sdW1uVHlwZTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50IHtcclxuXHJcbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IENvbHVtbltdIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xyXG4gIH1cclxuICBwcml2YXRlIF9jb2x1bW5zOiBDb2x1bW5bXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBlZGl0TGluayh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUpXHJcbiAgICAgIHRoaXMuX2VkaXRMaW5rID0gdmFsdWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgZWRpdExpbmsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWRpdExpbms7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2VkaXRMaW5rID0gJy9lZGl0JztcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgYXBpTmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9hcGlOYW1lID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5hcGlOYW1lICYmIHRoaXMucmVsICYmIHRoaXMuX2xhc3RFdmVudClcclxuICAgICAgdGhpcy5sb2FkKHRoaXMuX2xhc3RFdmVudCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgYXBpTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FwaU5hbWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FwaU5hbWU/OiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHJlbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9yZWwgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmFwaU5hbWUgJiYgdGhpcy5yZWwgJiYgdGhpcy5fbGFzdEV2ZW50KVxyXG4gICAgICB0aGlzLmxvYWQodGhpcy5fbGFzdEV2ZW50KTtcclxuICB9XHJcbiAgcHVibGljIGdldCByZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWw7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3JlbD86IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByb3dzUGVyUGFnZTogbnVtYmVyW107XHJcbiAgcHVibGljIHJlc291cmNlPzogUGFnZWRMaXN0UmVzb3VyY2U7XHJcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3RvdGFsUmVjb3JkcyA9IDA7XHJcbiAgcHJpdmF0ZSBfbGFzdEV2ZW50OiBMYXp5TG9hZEV2ZW50O1xyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogUmVzb3VyY2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZT8uX2VtYmVkZGVkPy5pdGVtcyB8fCBbXTtcclxuICB9XHJcbiAgcHVibGljIGdldCByb3dzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFzdEV2ZW50Py5yb3dzIHx8IDA7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdG90YWxSZWNvcmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdG90YWxSZWNvcmRzO1xyXG4gIH1cclxuICBwcml2YXRlIHNldCB0b3RhbFJlY29yZHModmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fdG90YWxSZWNvcmRzID0gdmFsdWUgfHwgMDtcclxuICB9XHJcbiAgcHVibGljIGdldCBzb3J0T3JkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFzdEV2ZW50LnNvcnRPcmRlciB8fCAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBuZXdIcmVmKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZT8uZmluZExpbmsoJ25ldycpPy5ocmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2RhdGVGb3JtYXQgPSBuZXcgRGF0ZSgzMzMzLCAxMCwgMjIpXHJcbiAgICAudG9Mb2NhbGVEYXRlU3RyaW5nKClcclxuICAgIC5yZXBsYWNlKFwiMjJcIiwgXCJkZFwiKVxyXG4gICAgLnJlcGxhY2UoXCIxMVwiLCBcIk1NXCIpXHJcbiAgICAucmVwbGFjZShcIjMzMzNcIiwgXCJ5XCIpXHJcbiAgICAucmVwbGFjZShcIjMzXCIsIFwieXlcIik7XHJcblxyXG4gIHB1YmxpYyBnZXQgZGF0ZUZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50Ll9kYXRlRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jbGllbnRzOiBSRVNUd29ybGRDbGllbnRDb2xsZWN0aW9uLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBhdmF0YXJHZW5lcmF0b3I6IEF2YXRhckdlbmVyYXRvcikge1xyXG4gICAgdGhpcy5yb3dzUGVyUGFnZSA9IFsxMCwgMjUsIDUwXTtcclxuXHJcbiAgICB0aGlzLl9sYXN0RXZlbnQgPSB7XHJcbiAgICAgIHJvd3M6IHRoaXMucm93c1BlclBhZ2VbMF1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENsaWVudCgpOiBSRVNUd29ybGRDbGllbnQge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBhIGNsaWVudCwgYmVjYXVzZSB0aGUgYXBpTmFtZSBpcyBub3Qgc2V0LicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWQoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lIHx8ICF0aGlzLnJlbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX2xhc3RFdmVudCA9IGV2ZW50O1xyXG5cclxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmNyZWF0ZVBhcmFtZXRlcnNGcm9tRXZlbnQoZXZlbnQpO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldExpc3QodGhpcy5yZWwsIHBhcmFtZXRlcnMpO1xyXG4gICAgaWYgKCFyZXNwb25zZS5vayB8fCBQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpIHx8ICFyZXNwb25zZS5ib2R5KSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSByZXNvdXJjZXMgZnJvbSB0aGUgQVBJLicsIGRhdGE6IHJlc3BvbnNlIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocmVzcG9uc2UuYm9keSkge1xyXG4gICAgICB0aGlzLnJlc291cmNlID0gcmVzcG9uc2UuYm9keTtcclxuICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLnJlc291cmNlLnRvdGFsUGFnZXMgJiYgcGFyYW1ldGVycy4kdG9wID8gdGhpcy5yZXNvdXJjZS50b3RhbFBhZ2VzICogcGFyYW1ldGVycy4kdG9wIDogdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLl9jb2x1bW5zID0gdGhpcy5jcmVhdGVDb2x1bW5zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwocmVzb3VyY2U6IFJlc291cmNlKSB7XHJcbiAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICBtZXNzYWdlOiAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlc291cmNlPycsXHJcbiAgICAgIGhlYWRlcjogJ0NvbmZpcm0gZGVsZXRlJyxcclxuICAgICAgaWNvbjogJ2ZhciBmYS10cmFzaC1hbHQnLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHRoaXMuZGVsZXRlKHJlc291cmNlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKHJlc291cmNlOiBSZXNvdXJjZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUgfHwgIXRoaXMucmVsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5kZWxldGUocmVzb3VyY2UpO1xyXG5cclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdEZWxldGVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIGRlbGV0ZWQuJyB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWQodGhpcy5fbGFzdEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29sdW1ucygpOiBDb2x1bW5bXSB7XHJcbiAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApXHJcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnM7XHJcblxyXG4gICAgLy8gR2V0IGFsbCBkaXN0aW5jdCBwcm9wZXJ0aWVzIGZyb20gYWxsIHJvd3NcclxuICAgIC8vIFdlIGxvb2sgYXQgYWxsIHJvd3MgdG8gZWxpbWluYXRlIHBvc3NpYmxlIHVuZGVmaW5lZCB2YWx1ZXNcclxuICAgIGNvbnN0IHJvd3NXaXRoUHJvcGVydGllcyA9IHRoaXMudmFsdWVcclxuICAgICAgLm1hcChyZXNvdXJjZSA9PlxyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc291cmNlKVxyXG4gICAgICAgICAgLmZpbHRlcihwID0+XHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdfbGlua3MnICYmXHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdfZW1iZWRkZWQnICYmXHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdpZCcgJiZcclxuICAgICAgICAgICAgcFswXSAhPT0gJ3RpbWVzdGFtcCcpKTtcclxuXHJcbiAgICBjb25zdCBkaXN0aW5jdFByb3BlcnRpZXMgPSByb3dzV2l0aFByb3BlcnRpZXNbMF07XHJcbiAgICBmb3IgKGNvbnN0IHByb3BlcnRpZXNPZlJvdyBvZiByb3dzV2l0aFByb3BlcnRpZXMpIHtcclxuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzT2ZSb3cpIHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eVswXTtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlbMV07XHJcbiAgICAgICAgY29uc3QgYWxyZWFkeUZvdW5kUHJvcGVydHlXaXRoU2FtZU5hbWUgPSBkaXN0aW5jdFByb3BlcnRpZXMuZmluZChwID0+IHBbMF0gPT09IHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgaWYgKCFhbHJlYWR5Rm91bmRQcm9wZXJ0eVdpdGhTYW1lTmFtZSkgLy8gQWRkIG5ldyBwcm9wZXJ0eVxyXG4gICAgICAgICAgZGlzdGluY3RQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xyXG4gICAgICAgIGVsc2UgaWYgKCFhbHJlYWR5Rm91bmRQcm9wZXJ0eVdpdGhTYW1lTmFtZVsxXSAmJiBwcm9wZXJ0eVZhbHVlKSAvLyBVc2UgZGVmaW5lZCB2YWx1ZSBpbnN0ZWFkIG9mIGV4aXN0aW5nIHVuZGVmaW5lZCB2YWx1ZVxyXG4gICAgICAgICAgYWxyZWFkeUZvdW5kUHJvcGVydHlXaXRoU2FtZU5hbWVbMV0gPSBwcm9wZXJ0eVZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHJvd3MgYXJlIGVudGl0aWVzIHdpdGggY2hhbmdlIHRyYWNraW5nXHJcbiAgICBjb25zdCB3aXRob3V0Q2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzID0gZGlzdGluY3RQcm9wZXJ0aWVzLmZpbHRlcihwID0+XHJcbiAgICAgIHBbMF0gIT09ICdjcmVhdGVkQXQnICYmXHJcbiAgICAgIHBbMF0gIT09ICdjcmVhdGVkQnknICYmXHJcbiAgICAgIHBbMF0gIT09ICdsYXN0Q2hhbmdlZEF0JyAmJlxyXG4gICAgICBwWzBdICE9PSAnbGFzdENoYW5nZWRCeScpO1xyXG4gICAgY29uc3QgaGFzQ2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzID0gd2l0aG91dENoYW5nZVRyYWNraW5nUHJvcGVydGllcy5sZW5ndGggPCBkaXN0aW5jdFByb3BlcnRpZXMubGVuZ3RoO1xyXG5cclxuICAgIC8vIEZpcnN0IHRoZSBpZCwgdGhlbiBhbGwgb3RoZXIgcHJvcGVydGllc1xyXG4gICAgY29uc3Qgc29ydGVkUHJvcGVydGllczogW3N0cmluZywgdW5rbm93bl1bXSA9IFtcclxuICAgICAgWydpZCcsIDBdLFxyXG4gICAgICAuLi53aXRob3V0Q2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIEFuZCBjaGFuZ2UgdHJhY2tpbmcgcHJvcGVydGllcyBhdCB0aGUgZW5kXHJcbiAgICBpZiAoaGFzQ2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHNvcnRlZFByb3BlcnRpZXMucHVzaChbJ2NyZWF0ZWRBdCcsIG5ldyBEYXRlKCldKTtcclxuICAgICAgc29ydGVkUHJvcGVydGllcy5wdXNoKFsnY3JlYXRlZEJ5JywgJyddKTtcclxuICAgICAgc29ydGVkUHJvcGVydGllcy5wdXNoKFsnbGFzdENoYW5nZWRBdCcsIG5ldyBEYXRlKCldKTtcclxuICAgICAgc29ydGVkUHJvcGVydGllcy5wdXNoKFsnbGFzdENoYW5nZWRCeScsICcnXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sdW1ucyA9IHNvcnRlZFByb3BlcnRpZXNcclxuICAgICAgLm1hcChwID0+ICh7XHJcbiAgICAgICAgaGVhZGVyOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC50b1RpdGxlQ2FzZShwWzBdKSxcclxuICAgICAgICBmaWVsZDogcFswXSxcclxuICAgICAgICB0eXBlOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5nZXRDb2x1bW5UeXBlKHBbMV0pLFxyXG4gICAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRDb2x1bW5UeXBlKHZhbHVlOiB1bmtub3duKTogQ29sdW1uVHlwZSB7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUudGV4dDtcclxuXHJcbiAgICBpZiAoXy5pc051bWJlcih2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLm51bWVyaWM7XHJcblxyXG4gICAgaWYgKF8uaXNEYXRlKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUuZGF0ZTtcclxuXHJcbiAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLnRleHQ7XHJcblxyXG4gICAgaWYgKF8uaXNCb29sZWFuKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUuYm9vbGVhbjtcclxuXHJcbiAgICByZXR1cm4gQ29sdW1uVHlwZS50ZXh0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdG9UaXRsZUNhc2UoYW55Q2FzZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYW55Q2FzZVxyXG4gICAgICAucmVwbGFjZSgvKF8pKy9nLCAnICcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5kZXJzY29yZSB0byB3aGl0ZXNwYWNlXHJcbiAgICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdW2Etel0pL2csIFwiJDEgJDJcIikgICAgICAgICAgIC8vIGluc2VydCBzcGFjZSBiZWZvcmUgZWFjaCBuZXcgd29yZCBpZiB0aGVyZSBpcyBub25lXHJcbiAgICAgIC5yZXBsYWNlKC8oW0EtWl1bYS16XSkoW0EtWl0pL2csIFwiJDEgJDJcIikgICAgICAgICAgIC8vIGluc2VydCBzcGFjZSBhZnRlciBlYWNoIHdvcmQgaWYgdGhlcmUgaXMgbm9uZVxyXG4gICAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXStbYS16XSkvZywgXCIkMSAkMlwiKSAgICAgICAgICAvLyBpbnNlcnQgc3BhY2UgYWZ0ZXIgc2luZ2xlIGxldHRlciB3b3JkIGlmIHRoZXJlIGlzIG5vbmVcclxuICAgICAgLnJlcGxhY2UoLyhbQS1aXSspKFtBLVpdW2Etel1bYS16XSkvZywgXCIkMSAkMlwiKSAgICAgLy8gaW5zZXJ0IHNwYWNlIGJlZm9yZSBzaW5nbGUgbGV0dGVyIHdvcmQgaWYgdGhlcmUgaXMgbm9uZVxyXG4gICAgICAucmVwbGFjZSgvKFthLXpdKykoW0EtWjAtOV0rKS9nLCBcIiQxICQyXCIpICAgICAgICAgICAvLyBpbnNlcnQgc3BhY2UgYWZ0ZXIgbnVtYmVyc1xyXG4gICAgICAucmVwbGFjZSgvXi4vLCAobWF0Y2gpID0+IG1hdGNoLnRvVXBwZXJDYXNlKCkpOyAgICAgLy8gY2hhbmdlIGZpcnN0IGxldHRlciB0byBiZSB1cHBlciBjYXNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVBhcmFtZXRlcnNGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpIHtcclxuICAgIGNvbnN0IG9EYXRhUGFyYW1ldGVycyA9IHtcclxuICAgICAgJGZpbHRlcjogdGhpcy5jcmVhdGVGaWx0ZXJGcm9tRXZlbnQoZXZlbnQpLFxyXG4gICAgICAkb3JkZXJieTogUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuY3JlYXRlT3JkZXJCeUZyb21FdmVudChldmVudCksXHJcbiAgICAgICR0b3A6IFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50LmNyZWF0ZVRvcEZyb21FdmVudChldmVudCksXHJcbiAgICAgICRza2lwOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5jcmVhdGVTa2lwRnJvbUV2ZW50KGV2ZW50KVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gb0RhdGFQYXJhbWV0ZXJzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZVNraXBGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGV2ZW50LmZpcnN0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZVRvcEZyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gZXZlbnQucm93cztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVPcmRlckJ5RnJvbUV2ZW50KGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmIChldmVudC5zb3J0RmllbGQpIHtcclxuICAgICAgY29uc3Qgb3JkZXIgPSAhZXZlbnQuc29ydE9yZGVyIHx8IGV2ZW50LnNvcnRPcmRlciA+IDAgPyAnYXNjJyA6ICdkZXNjJztcclxuICAgICAgcmV0dXJuIGAke2V2ZW50LnNvcnRGaWVsZH0gJHtvcmRlcn1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZpbHRlckZyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIWV2ZW50LmZpbHRlcnMpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmVudHJpZXMoZXZlbnQuZmlsdGVycylcclxuICAgICAgLy8gVGhlIHR5cGUgZGVmaW5pdGlvbiBpcyB3cm9uZywgZXZlbnQuZmlsdGVycyBoYXMgdmFsdWVzIG9mIHR5cGUgRmlsdGVyTWV0YWRhdGFbXSBhbmQgbm90IEZpbHRlck1ldGFkYXRhLlxyXG4gICAgICAubWFwKChbcHJvcGVydHksIGZpbHRlcl0pID0+ICh7IHByb3BlcnR5OiBwcm9wZXJ0eSwgZmlsdGVyczogZmlsdGVyIGFzIEZpbHRlck1ldGFkYXRhW10gfSkpXHJcbiAgICAgIC5tYXAoZiA9PiB0aGlzLmNyZWF0ZUZpbHRlckZvclByb3BlcnR5QXJyYXkoZi5wcm9wZXJ0eSwgZi5maWx0ZXJzKSlcclxuICAgICAgLmZpbHRlcihmID0+ICEhZilcclxuICAgICAgLmpvaW4oJyBhbmQgJyk7XHJcblxyXG4gICAgaWYgKGZpbHRlciA9PT0gJycpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgcmV0dXJuIGAoJHtmaWx0ZXJ9KWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZpbHRlckZvclByb3BlcnR5QXJyYXkocHJvcGVydHk6IHN0cmluZywgZmlsdGVyczogRmlsdGVyTWV0YWRhdGFbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJzXHJcbiAgICAgIC5tYXAoZiA9PiB0aGlzLmNyZWF0ZUZpbHRlckZvclByb3BlcnR5KHByb3BlcnR5LCBmKSlcclxuICAgICAgLmZpbHRlcihmID0+ICEhZilcclxuICAgICAgLmpvaW4oYCAke2ZpbHRlcnNbMF0ub3BlcmF0b3J9IGApO1xyXG5cclxuICAgIGlmIChmaWx0ZXIgPT09ICcnKVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIHJldHVybiBgKCR7ZmlsdGVyfSlgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWx0ZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCBmaWx0ZXI6IEZpbHRlck1ldGFkYXRhKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghZmlsdGVyLnZhbHVlKVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IG9EYXRhT3BlcmF0b3IgPSBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5jcmVhdGVPRGF0YU9wZXJhdG9yKFxyXG4gICAgICBmaWx0ZXIubWF0Y2hNb2RlLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNvbXBhcmlzb25WYWx1ZSA9IHRoaXMuY3JlYXRlQ29tcGFyaXNvblZhbHVlKHByb3BlcnR5LCBmaWx0ZXIudmFsdWUpO1xyXG5cclxuICAgIHN3aXRjaCAob0RhdGFPcGVyYXRvcikge1xyXG4gICAgICBjYXNlICdjb250YWlucyc6XHJcbiAgICAgIGNhc2UgJ25vdCBjb250YWlucyc6XHJcbiAgICAgIGNhc2UgJ3N0YXJ0c3dpdGgnOlxyXG4gICAgICBjYXNlICdlbmRzd2l0aCc6XHJcbiAgICAgICAgcmV0dXJuIGAke29EYXRhT3BlcmF0b3J9KCR7cHJvcGVydHl9LCAke2NvbXBhcmlzb25WYWx1ZX0pYDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gYCR7cHJvcGVydHl9ICR7b0RhdGFPcGVyYXRvcn0gJHtjb21wYXJpc29uVmFsdWV9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZU9EYXRhT3BlcmF0b3IobWF0Y2hNb2RlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAobWF0Y2hNb2RlKSB7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLlNUQVJUU19XSVRIOlxyXG4gICAgICAgIHJldHVybiAnc3RhcnRzd2l0aCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkNPTlRBSU5TOlxyXG4gICAgICAgIHJldHVybiAnY29udGFpbnMnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5OT1RfQ09OVEFJTlM6XHJcbiAgICAgICAgcmV0dXJuICdub3QgY29udGFpbnMnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5FTkRTX1dJVEg6XHJcbiAgICAgICAgcmV0dXJuICdlbmRzd2l0aCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUzpcclxuICAgICAgICByZXR1cm4gJ2VxJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTk9UX0VRVUFMUzpcclxuICAgICAgICByZXR1cm4gJ25lJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuSU46XHJcbiAgICAgICAgcmV0dXJuICdpbic7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkxFU1NfVEhBTjpcclxuICAgICAgICByZXR1cm4gJ2x0JztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOX09SX0VRVUFMX1RPOlxyXG4gICAgICAgIHJldHVybiAnbGUnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU46XHJcbiAgICAgICAgcmV0dXJuICdndCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UTzpcclxuICAgICAgICByZXR1cm4gJ2dlJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuSVM6XHJcbiAgICAgICAgcmV0dXJuICdlcSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLklTX05PVDpcclxuICAgICAgICByZXR1cm4gJ25lJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQkVGT1JFOlxyXG4gICAgICAgIHJldHVybiAnbHQnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5BRlRFUjpcclxuICAgICAgICByZXR1cm4gJ2d0JztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9BRlRFUjpcclxuICAgICAgICByZXR1cm4gJ2dlJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9CRUZPUkU6XHJcbiAgICAgICAgcmV0dXJuICdsdCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVM6XHJcbiAgICAgICAgcmV0dXJuICdlcSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVNfTk9UOlxyXG4gICAgICAgIHJldHVybiAnbmUnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IEVycm9yKGBVbmtub3duIG1hdGNoTW9kZSAke21hdGNoTW9kZX1gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29tcGFyaXNvblZhbHVlKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICByZXR1cm4gJ251bGwnO1xyXG5cclxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5maWVsZCA9PT0gcHJvcGVydHkpO1xyXG4gICAgaWYgKGNvbHVtbnMubGVuZ3RoICE9PSAxKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBjb2x1bW4gZm9yIHRoZSBwcm9wZXJ0eSAke3Byb3BlcnR5fSB3aGljaCBpcyBzcGVjaWZpZWQgaW4gdGhlIGZpbHRlci5gKTtcclxuXHJcbiAgICBjb25zdCB0eXBlID0gY29sdW1uc1swXS50eXBlO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIENvbHVtblR5cGUuYm9vbGVhbjpcclxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcclxuICAgICAgY2FzZSBDb2x1bW5UeXBlLmRhdGU6XHJcbiAgICAgICAgcmV0dXJuIGBjYXN0KCR7KHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCl9LCBFZG0uRGF0ZVRpbWVPZmZzZXQpYDtcclxuICAgICAgY2FzZSBDb2x1bW5UeXBlLm51bWVyaWM6XHJcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XHJcbiAgICAgIGNhc2UgQ29sdW1uVHlwZS50ZXh0OlxyXG4gICAgICAgIHJldHVybiBgJyR7dmFsdWV9J2A7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbHVtbiB0eXBlICcke3R5cGV9J2ApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8cC10YWJsZSBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICBbbGF6eV09XCJ0cnVlXCJcclxuICAgICAgICAgW2xhenlMb2FkT25Jbml0XT1cImZhbHNlXCJcclxuICAgICAgICAgKG9uTGF6eUxvYWQpPVwibG9hZCgkZXZlbnQpXCJcclxuICAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXHJcbiAgICAgICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXHJcbiAgICAgICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlXCJcclxuICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICBbc2hvd0luaXRpYWxTb3J0QmFkZ2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgPHRyPlxyXG4gICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCIgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1kLWZsZXggcC1qYy1iZXR3ZWVuIHAtYWktY2VudGVyXCI+XHJcbiAgICAgICAgICB7e2NvbC5oZWFkZXJ9fVxyXG4gICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5maWVsZFwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBbdHlwZV09XCJjb2wudHlwZVwiIFtmaWVsZF09XCJjb2wuZmllbGRcIiBkaXNwbGF5PVwibWVudVwiPjwvcC1jb2x1bW5GaWx0ZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0aD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiIHBUb29sdGlwPVwiQ3JlYXRlIG5ld1wiIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCIgaWNvbj1cImZhcyBmYS1wbHVzXCIgcEJ1dHRvbiBbcm91dGVyTGlua109XCJbJy9lZGl0JywgYXBpTmFtZSwgbmV3SHJlZl1cIj48L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtZW50aXR5IGxldC1jb2x1bW5zPVwiY29sdW1uc1wiPlxyXG4gICAgPHRyPlxyXG4gICAgICA8dGQgW25nU3dpdGNoXT1cImNvbC50eXBlXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICA8cC1hdmF0YXIgKm5nSWY9XCJjb2wuZmllbGQgPT09ICdjcmVhdGVkQnknIHx8IGNvbC5maWVsZCA9PT0gJ2xhc3RDaGFuZ2VkQnknXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wuZmllbGRdXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgW2ltYWdlXT1cImF2YXRhckdlbmVyYXRvci5nZXRJbWFnZShlbnRpdHlbY29sLmZpZWxkXSlcIiBbbGFiZWxdPVwiYXZhdGFyR2VuZXJhdG9yLmdldExhYmVsKGVudGl0eVtjb2wuZmllbGRdKVwiIFtzdHlsZV09XCJhdmF0YXJHZW5lcmF0b3IuZ2V0U3R5bGUoZW50aXR5W2NvbC5maWVsZF0pXCIgc2hhcGU9XCJjaXJjbGVcIj48L3AtYXZhdGFyPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2wuZmllbGQgIT09ICdjcmVhdGVkQnknICYmIGNvbC5maWVsZCAhPT0gJ2xhc3RDaGFuZ2VkQnknXCI+e3tlbnRpdHlbY29sLmZpZWxkXX19PC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpYydcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5maWVsZF19fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj48cC10cmlTdGF0ZUNoZWNrYm94IFsobmdNb2RlbCldPVwiZW50aXR5W2NvbC5maWVsZF1cIiBbcmVhZG9ubHldPVwidHJ1ZVwiPjwvcC10cmlTdGF0ZUNoZWNrYm94Pjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wuZmllbGRdXCI+e3tlbnRpdHlbY29sLmZpZWxkXSB8IGRhdGU6ZGF0ZUZvcm1hdH19PC9zcGFuPlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8dGQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgPGEgcEJ1dHRvbiBwVG9vbHRpcD1cIlZpZXcvRWRpdFwiIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIiBbcm91dGVyTGlua109XCJbZWRpdExpbmssIGFwaU5hbWUsIGVudGl0eS5fbGlua3M/LnNlbGZbMF0uaHJlZl1cIiBpY29uPVwiZmFzIGZhLWVkaXRcIj48L2E+XHJcbiAgICAgICAgICA8YnV0dG9uIHBUb29sdGlwPVwiRGVsZXRlXCIgdG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiIHBCdXR0b24gKm5nSWY9XCJlbnRpdHkuX2xpbmtzLmRlbGV0ZVwiIChjbGljayk9XCJzaG93RGVsZXRlQ29uZmlybWF0aW9Nb2RhbChlbnRpdHkpXCIgaWNvbj1cImZhcyBmYS10cmFzaC1hbHRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJteC0yIHAtYnV0dG9uLWRhbmdlclwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RkPlxyXG4gICAgPC90cj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICA8dHI+XHJcbiAgICAgIDx0ZCBjb2xzcGFuPVwiOFwiPk5vIGVudHJpZXMgZm91bmQuPC90ZD5cclxuICAgIDwvdHI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwvcC10YWJsZT5cclxuXHJcbjxwLXRvYXN0PjwvcC10b2FzdD5cclxuPHAtY29uZmlybURpYWxvZz48L3AtY29uZmlybURpYWxvZz5cclxuIl19
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL3ZpZXdzL3Jlc3R3b3JsZC1saXN0LXZpZXcvcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxLQUFLLEVBQW9DLE1BQU0sZUFBZSxDQUFDO0FBRWxHLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBdUIsZUFBZSxFQUEyRCxNQUFNLGFBQWEsQ0FBQztBQUc1SCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQUc5RCxNQUFNLENBQU4sSUFBWSxVQU9YO0FBUEQsV0FBWSxVQUFVO0lBQ3BCLDJCQUFhLENBQUE7SUFDYixpQ0FBbUIsQ0FBQTtJQUNuQixpQ0FBbUIsQ0FBQTtJQUNuQiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtJQUNmLCtCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFQVyxVQUFVLEtBQVYsVUFBVSxRQU9yQjtBQWFELE1BQU0sT0FBTywwQkFBMEI7SUEwRnJDLFlBQ1UsUUFBbUMsRUFDbkMsb0JBQXlDLEVBQ3pDLGVBQStCLEVBQ2hDLGVBQWdDO1FBSC9CLGFBQVEsR0FBUixRQUFRLENBQTJCO1FBQ25DLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFp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S0FBSztnQkFVSyxHQUFHO3NCQURiLEtBQUs7Z0JBV0ssU0FBUztzQkFEbkIsS0FBSztnQkFZSyxTQUFTO3NCQURuQixLQUFLO2dCQVlDLFdBQVc7c0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYWdlZExpc3RSZXNvdXJjZSwgUmVzb3VyY2UgfSBmcm9tICdAd2VydHp1aS9uZ3gtaGFsLWNsaWVudCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgRmlsdGVyTWF0Y2hNb2RlLCBGaWx0ZXJNZXRhZGF0YSwgTGF6eUxvYWRFdmVudCwgTWVzc2FnZVNlcnZpY2UsIFNvcnRNZXRhIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBSRVNUd29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcclxuaW1wb3J0IHsgUkVTVHdvcmxkQ2xpZW50Q29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQtY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IFByb2JsZW1EZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb2JsZW0tZGV0YWlscyc7XHJcbmltcG9ydCB7IEF2YXRhckdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F2YXRhci1nZW5lcmF0b3InO1xyXG5cclxuZXhwb3J0IGVudW0gQ29sdW1uVHlwZSB7XHJcbiAgdGV4dCA9ICd0ZXh0JyxcclxuICBudW1lcmljID0gJ251bWVyaWMnLFxyXG4gIGJvb2xlYW4gPSAnYm9vbGVhbicsXHJcbiAgZGF0ZSA9ICdkYXRlJyxcclxuICBhcnJheSA9ICdhcnJheScsXHJcbiAgb2JqZWN0ID0gJ29iamVjdCdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW4ge1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgdHlwZTogQ29sdW1uVHlwZTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWxpc3Qtdmlldy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQ29sdW1uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbHVtbnM6IENvbHVtbltdID0gW107XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGVkaXRMaW5rKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWx1ZSlcclxuICAgICAgdGhpcy5fZWRpdExpbmsgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHVibGljIGdldCBlZGl0TGluaygpIHtcclxuICAgIHJldHVybiB0aGlzLl9lZGl0TGluaztcclxuICB9XHJcbiAgcHJpdmF0ZSBfZWRpdExpbmsgPSAnL2VkaXQnO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBhcGlOYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2FwaU5hbWUgPSB2YWx1ZTtcclxuICAgIHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGFwaU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9hcGlOYW1lO1xyXG4gIH1cclxuICBwcml2YXRlIF9hcGlOYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCByZWwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fcmVsID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWQodGhpcy5fbGFzdEV2ZW50KTtcclxuICB9XHJcbiAgcHVibGljIGdldCByZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWw7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3JlbD86IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNvcnRGaWVsZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9zb3J0RmllbGQgPSB2YWx1ZSA/PyAnJztcclxuICAgIHRoaXMuX2xhc3RFdmVudC5zb3J0RmllbGQgPSB2YWx1ZTtcclxuICAgIHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHNvcnRGaWVsZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRGaWVsZDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc29ydEZpZWxkID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBzb3J0T3JkZXIodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fc29ydE9yZGVyID0gdmFsdWUgPz8gMTtcclxuICAgIHRoaXMuX2xhc3RFdmVudC5zb3J0T3JkZXIgPSB2YWx1ZTtcclxuICAgIHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHNvcnRPcmRlcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRPcmRlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc29ydE9yZGVyID0gMTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcm93c1BlclBhZ2U6IG51bWJlcltdO1xyXG4gIHB1YmxpYyByZXNvdXJjZT86IFBhZ2VkTGlzdFJlc291cmNlO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIF90b3RhbFJlY29yZHMgPSAwO1xyXG4gIHByaXZhdGUgX2xhc3RFdmVudDogTGF6eUxvYWRFdmVudDtcclxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFJlc291cmNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2U/Ll9lbWJlZGRlZD8uaXRlbXMgfHwgW107XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgcm93cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudD8ucm93cyB8fCAwO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRvdGFsUmVjb3JkcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsUmVjb3JkcztcclxuICB9XHJcbiAgcHJpdmF0ZSBzZXQgdG90YWxSZWNvcmRzKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3RvdGFsUmVjb3JkcyA9IHZhbHVlIHx8IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG5ld0hyZWYoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnJlc291cmNlPy5maW5kTGluaygnbmV3Jyk/LmhyZWY7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfZGF0ZUZvcm1hdCA9IG5ldyBEYXRlKDMzMzMsIDEwLCAyMilcclxuICAgIC50b0xvY2FsZURhdGVTdHJpbmcoKVxyXG4gICAgLnJlcGxhY2UoXCIyMlwiLCBcImRkXCIpXHJcbiAgICAucmVwbGFjZShcIjExXCIsIFwiTU1cIilcclxuICAgIC5yZXBsYWNlKFwiMzMzM1wiLCBcInlcIilcclxuICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJ5eVwiKTtcclxuXHJcbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuX2RhdGVGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NsaWVudHM6IFJFU1R3b3JsZENsaWVudENvbGxlY3Rpb24sXHJcbiAgICBwcml2YXRlIF9jb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHVibGljIGF2YXRhckdlbmVyYXRvcjogQXZhdGFyR2VuZXJhdG9yKSB7XHJcbiAgICB0aGlzLnJvd3NQZXJQYWdlID0gWzEwLCAyNSwgNTBdO1xyXG5cclxuICAgIHRoaXMuX2xhc3RFdmVudCA9IHtcclxuICAgICAgcm93czogdGhpcy5yb3dzUGVyUGFnZVswXVxyXG4gICAgfTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJuZ09uQ2hhbmdlcyBcIiArIGNoYW5nZXMpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwibmdPbkluaXRcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc29sZS5sb2coXCJuZ0FmdGVyVmlld0luaXRcIik7XHJcbiAgICAvL2F3YWl0IHRoaXMubG9hZCh0aGlzLl9sYXN0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUkVTVHdvcmxkQ2xpZW50IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgYSBjbGllbnQsIGJlY2F1c2UgdGhlIGFwaU5hbWUgaXMgbm90IHNldC4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50cy5nZXRDbGllbnQodGhpcy5hcGlOYW1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkID0gXy5kZWJvdW5jZSh0aGlzLmxvYWQyLCAxMDApO1xyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZDIoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lIHx8ICF0aGlzLnJlbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX2xhc3RFdmVudCA9IGV2ZW50O1xyXG5cclxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmNyZWF0ZVBhcmFtZXRlcnNGcm9tRXZlbnQoZXZlbnQpO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldExpc3QodGhpcy5yZWwsIHBhcmFtZXRlcnMpO1xyXG4gICAgaWYgKCFyZXNwb25zZS5vayB8fCBQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpIHx8ICFyZXNwb25zZS5ib2R5KSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSByZXNvdXJjZXMgZnJvbSB0aGUgQVBJLicsIGRhdGE6IHJlc3BvbnNlIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocmVzcG9uc2UuYm9keSkge1xyXG4gICAgICB0aGlzLnJlc291cmNlID0gcmVzcG9uc2UuYm9keTtcclxuICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLnJlc291cmNlLnRvdGFsUGFnZXMgJiYgcGFyYW1ldGVycy4kdG9wID8gdGhpcy5yZXNvdXJjZS50b3RhbFBhZ2VzICogcGFyYW1ldGVycy4kdG9wIDogdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLl9jb2x1bW5zID0gdGhpcy5jcmVhdGVDb2x1bW5zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwocmVzb3VyY2U6IFJlc291cmNlKSB7XHJcbiAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICBtZXNzYWdlOiAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlc291cmNlPycsXHJcbiAgICAgIGhlYWRlcjogJ0NvbmZpcm0gZGVsZXRlJyxcclxuICAgICAgaWNvbjogJ2ZhciBmYS10cmFzaC1hbHQnLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHRoaXMuZGVsZXRlKHJlc291cmNlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKHJlc291cmNlOiBSZXNvdXJjZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmFwaU5hbWUgfHwgIXRoaXMucmVsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5kZWxldGUocmVzb3VyY2UpO1xyXG5cclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdEZWxldGVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIGRlbGV0ZWQuJyB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWQodGhpcy5fbGFzdEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29sdW1ucygpOiBDb2x1bW5bXSB7XHJcbiAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApXHJcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnM7XHJcblxyXG4gICAgLy8gR2V0IGFsbCBkaXN0aW5jdCBwcm9wZXJ0aWVzIGZyb20gYWxsIHJvd3NcclxuICAgIC8vIFdlIGxvb2sgYXQgYWxsIHJvd3MgdG8gZWxpbWluYXRlIHBvc3NpYmxlIHVuZGVmaW5lZCB2YWx1ZXNcclxuICAgIGNvbnN0IHJvd3NXaXRoUHJvcGVydGllcyA9IHRoaXMudmFsdWVcclxuICAgICAgLm1hcChyZXNvdXJjZSA9PlxyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc291cmNlKVxyXG4gICAgICAgICAgLmZpbHRlcihwID0+XHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdfbGlua3MnICYmXHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdfZW1iZWRkZWQnICYmXHJcbiAgICAgICAgICAgIHBbMF0gIT09ICdpZCcgJiZcclxuICAgICAgICAgICAgcFswXSAhPT0gJ3RpbWVzdGFtcCcpKTtcclxuXHJcbiAgICBjb25zdCBkaXN0aW5jdFByb3BlcnRpZXMgPSByb3dzV2l0aFByb3BlcnRpZXNbMF07XHJcbiAgICBmb3IgKGNvbnN0IHByb3BlcnRpZXNPZlJvdyBvZiByb3dzV2l0aFByb3BlcnRpZXMpIHtcclxuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzT2ZSb3cpIHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eVswXTtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlbMV07XHJcbiAgICAgICAgY29uc3QgYWxyZWFkeUZvdW5kUHJvcGVydHlXaXRoU2FtZU5hbWUgPSBkaXN0aW5jdFByb3BlcnRpZXMuZmluZChwID0+IHBbMF0gPT09IHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgaWYgKCFhbHJlYWR5Rm91bmRQcm9wZXJ0eVdpdGhTYW1lTmFtZSkgLy8gQWRkIG5ldyBwcm9wZXJ0eVxyXG4gICAgICAgICAgZGlzdGluY3RQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xyXG4gICAgICAgIGVsc2UgaWYgKCFhbHJlYWR5Rm91bmRQcm9wZXJ0eVdpdGhTYW1lTmFtZVsxXSAmJiBwcm9wZXJ0eVZhbHVlKSAvLyBVc2UgZGVmaW5lZCB2YWx1ZSBpbnN0ZWFkIG9mIGV4aXN0aW5nIHVuZGVmaW5lZCB2YWx1ZVxyXG4gICAgICAgICAgYWxyZWFkeUZvdW5kUHJvcGVydHlXaXRoU2FtZU5hbWVbMV0gPSBwcm9wZXJ0eVZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHJvd3MgYXJlIGVudGl0aWVzIHdpdGggY2hhbmdlIHRyYWNraW5nXHJcbiAgICBjb25zdCB3aXRob3V0Q2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzID0gZGlzdGluY3RQcm9wZXJ0aWVzLmZpbHRlcihwID0+XHJcbiAgICAgIHBbMF0gIT09ICdjcmVhdGVkQXQnICYmXHJcbiAgICAgIHBbMF0gIT09ICdjcmVhdGVkQnknICYmXHJcbiAgICAgIHBbMF0gIT09ICdsYXN0Q2hhbmdlZEF0JyAmJlxyXG4gICAgICBwWzBdICE9PSAnbGFzdENoYW5nZWRCeScpO1xyXG4gICAgY29uc3QgaGFzQ2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzID0gd2l0aG91dENoYW5nZVRyYWNraW5nUHJvcGVydGllcy5sZW5ndGggPCBkaXN0aW5jdFByb3BlcnRpZXMubGVuZ3RoO1xyXG5cclxuICAgIC8vIEZpcnN0IHRoZSBpZCwgdGhlbiBhbGwgb3RoZXIgcHJvcGVydGllc1xyXG4gICAgY29uc3Qgc29ydGVkUHJvcGVydGllczogW3N0cmluZywgdW5rbm93bl1bXSA9IFtcclxuICAgICAgWydpZCcsIDBdLFxyXG4gICAgICAuLi53aXRob3V0Q2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIEFuZCBjaGFuZ2UgdHJhY2tpbmcgcHJvcGVydGllcyBhdCB0aGUgZW5kXHJcbiAgICBpZiAoaGFzQ2hhbmdlVHJhY2tpbmdQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHNvcnRlZFByb3BlcnRpZXMucHVzaChbJ2NyZWF0ZWRBdCcsIG5ldyBEYXRlKCldKTtcclxuICAgICAgc29ydGVkUHJvcGVydGllcy5wdXNoKFsnY3JlYXRlZEJ5JywgJyddKTtcclxuICAgICAgc29ydGVkUHJvcGVydGllcy5wdXNoKFsnbGFzdENoYW5nZWRBdCcsIG5ldyBEYXRlKCldKTtcclxuICAgICAgc29ydGVkUHJvcGVydGllcy5wdXNoKFsnbGFzdENoYW5nZWRCeScsICcnXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sdW1ucyA9IHNvcnRlZFByb3BlcnRpZXNcclxuICAgICAgLm1hcChwID0+ICh7XHJcbiAgICAgICAgaGVhZGVyOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC50b1RpdGxlQ2FzZShwWzBdKSxcclxuICAgICAgICBmaWVsZDogcFswXSxcclxuICAgICAgICB0eXBlOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5nZXRDb2x1bW5UeXBlKHBbMV0pLFxyXG4gICAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRDb2x1bW5UeXBlKHZhbHVlOiB1bmtub3duKTogQ29sdW1uVHlwZSB7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUudGV4dDtcclxuXHJcbiAgICBpZiAoXy5pc051bWJlcih2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLm51bWVyaWM7XHJcblxyXG4gICAgaWYgKF8uaXNEYXRlKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUuZGF0ZTtcclxuXHJcbiAgICBpZiAoXy5pc1N0cmluZyh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLnRleHQ7XHJcblxyXG4gICAgaWYgKF8uaXNCb29sZWFuKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIENvbHVtblR5cGUuYm9vbGVhbjtcclxuXHJcbiAgICBpZiAoXy5pc0FycmF5TGlrZSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLmFycmF5O1xyXG5cclxuICAgIGlmIChfLmlzT2JqZWN0TGlrZSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiBDb2x1bW5UeXBlLm9iamVjdDtcclxuXHJcbiAgICByZXR1cm4gQ29sdW1uVHlwZS50ZXh0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdG9UaXRsZUNhc2UoYW55Q2FzZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYW55Q2FzZVxyXG4gICAgICAucmVwbGFjZSgvKF8pKy9nLCAnICcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5kZXJzY29yZSB0byB3aGl0ZXNwYWNlXHJcbiAgICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdW2Etel0pL2csIFwiJDEgJDJcIikgICAgICAgICAgIC8vIGluc2VydCBzcGFjZSBiZWZvcmUgZWFjaCBuZXcgd29yZCBpZiB0aGVyZSBpcyBub25lXHJcbiAgICAgIC5yZXBsYWNlKC8oW0EtWl1bYS16XSkoW0EtWl0pL2csIFwiJDEgJDJcIikgICAgICAgICAgIC8vIGluc2VydCBzcGFjZSBhZnRlciBlYWNoIHdvcmQgaWYgdGhlcmUgaXMgbm9uZVxyXG4gICAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXStbYS16XSkvZywgXCIkMSAkMlwiKSAgICAgICAgICAvLyBpbnNlcnQgc3BhY2UgYWZ0ZXIgc2luZ2xlIGxldHRlciB3b3JkIGlmIHRoZXJlIGlzIG5vbmVcclxuICAgICAgLnJlcGxhY2UoLyhbQS1aXSspKFtBLVpdW2Etel1bYS16XSkvZywgXCIkMSAkMlwiKSAgICAgLy8gaW5zZXJ0IHNwYWNlIGJlZm9yZSBzaW5nbGUgbGV0dGVyIHdvcmQgaWYgdGhlcmUgaXMgbm9uZVxyXG4gICAgICAucmVwbGFjZSgvKFthLXpdKykoW0EtWjAtOV0rKS9nLCBcIiQxICQyXCIpICAgICAgICAgICAvLyBpbnNlcnQgc3BhY2UgYWZ0ZXIgbnVtYmVyc1xyXG4gICAgICAucmVwbGFjZSgvXi4vLCAobWF0Y2gpID0+IG1hdGNoLnRvVXBwZXJDYXNlKCkpOyAgICAgLy8gY2hhbmdlIGZpcnN0IGxldHRlciB0byBiZSB1cHBlciBjYXNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVBhcmFtZXRlcnNGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpIHtcclxuICAgIGNvbnN0IG9EYXRhUGFyYW1ldGVycyA9IHtcclxuICAgICAgJGZpbHRlcjogdGhpcy5jcmVhdGVGaWx0ZXJGcm9tRXZlbnQoZXZlbnQpLFxyXG4gICAgICAkb3JkZXJieTogUkVTVHdvcmxkTGlzdFZpZXdDb21wb25lbnQuY3JlYXRlT3JkZXJCeUZyb21FdmVudChldmVudCksXHJcbiAgICAgICR0b3A6IFJFU1R3b3JsZExpc3RWaWV3Q29tcG9uZW50LmNyZWF0ZVRvcEZyb21FdmVudChldmVudCksXHJcbiAgICAgICRza2lwOiBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5jcmVhdGVTa2lwRnJvbUV2ZW50KGV2ZW50KVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gb0RhdGFQYXJhbWV0ZXJzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZVNraXBGcm9tRXZlbnQoZXZlbnQ6IExhenlMb2FkRXZlbnQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGV2ZW50LmZpcnN0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZVRvcEZyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gZXZlbnQucm93cztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVPcmRlckJ5RnJvbUV2ZW50KGV2ZW50OiBMYXp5TG9hZEV2ZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmIChldmVudC5zb3J0RmllbGQpIHtcclxuICAgICAgY29uc3Qgb3JkZXIgPSAhZXZlbnQuc29ydE9yZGVyIHx8IGV2ZW50LnNvcnRPcmRlciA+IDAgPyAnYXNjJyA6ICdkZXNjJztcclxuICAgICAgcmV0dXJuIGAke2V2ZW50LnNvcnRGaWVsZH0gJHtvcmRlcn1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZpbHRlckZyb21FdmVudChldmVudDogTGF6eUxvYWRFdmVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIWV2ZW50LmZpbHRlcnMpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmVudHJpZXMoZXZlbnQuZmlsdGVycylcclxuICAgICAgLy8gVGhlIHR5cGUgZGVmaW5pdGlvbiBpcyB3cm9uZywgZXZlbnQuZmlsdGVycyBoYXMgdmFsdWVzIG9mIHR5cGUgRmlsdGVyTWV0YWRhdGFbXSBhbmQgbm90IEZpbHRlck1ldGFkYXRhLlxyXG4gICAgICAubWFwKChbcHJvcGVydHksIGZpbHRlcl0pID0+ICh7IHByb3BlcnR5OiBwcm9wZXJ0eSwgZmlsdGVyczogZmlsdGVyIGFzIEZpbHRlck1ldGFkYXRhW10gfSkpXHJcbiAgICAgIC5tYXAoZiA9PiB0aGlzLmNyZWF0ZUZpbHRlckZvclByb3BlcnR5QXJyYXkoZi5wcm9wZXJ0eSwgZi5maWx0ZXJzKSlcclxuICAgICAgLmZpbHRlcihmID0+ICEhZilcclxuICAgICAgLmpvaW4oJyBhbmQgJyk7XHJcblxyXG4gICAgaWYgKGZpbHRlciA9PT0gJycpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgcmV0dXJuIGAoJHtmaWx0ZXJ9KWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZpbHRlckZvclByb3BlcnR5QXJyYXkocHJvcGVydHk6IHN0cmluZywgZmlsdGVyczogRmlsdGVyTWV0YWRhdGFbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJzXHJcbiAgICAgIC5tYXAoZiA9PiB0aGlzLmNyZWF0ZUZpbHRlckZvclByb3BlcnR5KHByb3BlcnR5LCBmKSlcclxuICAgICAgLmZpbHRlcihmID0+ICEhZilcclxuICAgICAgLmpvaW4oYCAke2ZpbHRlcnNbMF0ub3BlcmF0b3J9IGApO1xyXG5cclxuICAgIGlmIChmaWx0ZXIgPT09ICcnKVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIHJldHVybiBgKCR7ZmlsdGVyfSlgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWx0ZXJGb3JQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nLCBmaWx0ZXI6IEZpbHRlck1ldGFkYXRhKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghZmlsdGVyLnZhbHVlKVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IG9EYXRhT3BlcmF0b3IgPSBSRVNUd29ybGRMaXN0Vmlld0NvbXBvbmVudC5jcmVhdGVPRGF0YU9wZXJhdG9yKFxyXG4gICAgICBmaWx0ZXIubWF0Y2hNb2RlLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNvbXBhcmlzb25WYWx1ZSA9IHRoaXMuY3JlYXRlQ29tcGFyaXNvblZhbHVlKHByb3BlcnR5LCBmaWx0ZXIudmFsdWUpO1xyXG5cclxuICAgIHN3aXRjaCAob0RhdGFPcGVyYXRvcikge1xyXG4gICAgICBjYXNlICdjb250YWlucyc6XHJcbiAgICAgIGNhc2UgJ25vdCBjb250YWlucyc6XHJcbiAgICAgIGNhc2UgJ3N0YXJ0c3dpdGgnOlxyXG4gICAgICBjYXNlICdlbmRzd2l0aCc6XHJcbiAgICAgICAgcmV0dXJuIGAke29EYXRhT3BlcmF0b3J9KCR7cHJvcGVydHl9LCAke2NvbXBhcmlzb25WYWx1ZX0pYDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gYCR7cHJvcGVydHl9ICR7b0RhdGFPcGVyYXRvcn0gJHtjb21wYXJpc29uVmFsdWV9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZU9EYXRhT3BlcmF0b3IobWF0Y2hNb2RlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAobWF0Y2hNb2RlKSB7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLlNUQVJUU19XSVRIOlxyXG4gICAgICAgIHJldHVybiAnc3RhcnRzd2l0aCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkNPTlRBSU5TOlxyXG4gICAgICAgIHJldHVybiAnY29udGFpbnMnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5OT1RfQ09OVEFJTlM6XHJcbiAgICAgICAgcmV0dXJuICdub3QgY29udGFpbnMnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5FTkRTX1dJVEg6XHJcbiAgICAgICAgcmV0dXJuICdlbmRzd2l0aCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUzpcclxuICAgICAgICByZXR1cm4gJ2VxJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTk9UX0VRVUFMUzpcclxuICAgICAgICByZXR1cm4gJ25lJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuSU46XHJcbiAgICAgICAgcmV0dXJuICdpbic7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkxFU1NfVEhBTjpcclxuICAgICAgICByZXR1cm4gJ2x0JztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOX09SX0VRVUFMX1RPOlxyXG4gICAgICAgIHJldHVybiAnbGUnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU46XHJcbiAgICAgICAgcmV0dXJuICdndCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UTzpcclxuICAgICAgICByZXR1cm4gJ2dlJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuSVM6XHJcbiAgICAgICAgcmV0dXJuICdlcSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLklTX05PVDpcclxuICAgICAgICByZXR1cm4gJ25lJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQkVGT1JFOlxyXG4gICAgICAgIHJldHVybiAnbHQnO1xyXG4gICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5BRlRFUjpcclxuICAgICAgICByZXR1cm4gJ2d0JztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9BRlRFUjpcclxuICAgICAgICByZXR1cm4gJ2dlJztcclxuICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuREFURV9CRUZPUkU6XHJcbiAgICAgICAgcmV0dXJuICdsdCc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVM6XHJcbiAgICAgICAgcmV0dXJuICdlcSc7XHJcbiAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVNfTk9UOlxyXG4gICAgICAgIHJldHVybiAnbmUnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IEVycm9yKGBVbmtub3duIG1hdGNoTW9kZSAke21hdGNoTW9kZX1gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29tcGFyaXNvblZhbHVlKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICByZXR1cm4gJ251bGwnO1xyXG5cclxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5maWVsZCA9PT0gcHJvcGVydHkpO1xyXG4gICAgaWYgKGNvbHVtbnMubGVuZ3RoICE9PSAxKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBjb2x1bW4gZm9yIHRoZSBwcm9wZXJ0eSAke3Byb3BlcnR5fSB3aGljaCBpcyBzcGVjaWZpZWQgaW4gdGhlIGZpbHRlci5gKTtcclxuXHJcbiAgICBjb25zdCB0eXBlID0gY29sdW1uc1swXS50eXBlO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIENvbHVtblR5cGUuYm9vbGVhbjpcclxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcclxuICAgICAgY2FzZSBDb2x1bW5UeXBlLmRhdGU6XHJcbiAgICAgICAgcmV0dXJuIGBjYXN0KCR7KHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCl9LCBFZG0uRGF0ZVRpbWVPZmZzZXQpYDtcclxuICAgICAgY2FzZSBDb2x1bW5UeXBlLm51bWVyaWM6XHJcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlfWA7XHJcbiAgICAgIGNhc2UgQ29sdW1uVHlwZS50ZXh0OlxyXG4gICAgICAgIHJldHVybiBgJyR7dmFsdWV9J2A7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbHVtbiB0eXBlICcke3R5cGV9J2ApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8cC10YWJsZSBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICBbbGF6eV09XCJ0cnVlXCJcclxuICAgICAgICAgW2xhenlMb2FkT25Jbml0XT1cImZhbHNlXCJcclxuICAgICAgICAgKG9uTGF6eUxvYWQpPVwibG9hZCgkZXZlbnQpXCJcclxuICAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXHJcbiAgICAgICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXHJcbiAgICAgICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlXCJcclxuICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICBbc2hvd0luaXRpYWxTb3J0QmFkZ2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgICAgICBbc29ydEZpZWxkXT1cInNvcnRGaWVsZFwiXHJcbiAgICAgICAgIFtzb3J0T3JkZXJdPVwic29ydE9yZGVyXCI+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgIDx0cj5cclxuICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInAtZC1mbGV4IHAtamMtYmV0d2VlbiBwLWFpLWNlbnRlclwiPlxyXG4gICAgICAgICAge3tjb2wuaGVhZGVyfX1cclxuICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wuZmllbGRcIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW3R5cGVdPVwiY29sLnR5cGVcIiBbZmllbGRdPVwiY29sLmZpZWxkXCIgZGlzcGxheT1cIm1lbnVcIj48L3AtY29sdW1uRmlsdGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RoPlxyXG4gICAgICA8dGg+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIiBwVG9vbHRpcD1cIkNyZWF0ZSBuZXdcIiB0b29sdGlwUG9zaXRpb249XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiIGljb249XCJmYXMgZmEtcGx1c1wiIHBCdXR0b24gW3JvdXRlckxpbmtdPVwiWycvZWRpdCcsIGFwaU5hbWUsIG5ld0hyZWZdXCI+PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGg+XHJcbiAgICA8L3RyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWVudGl0eSBsZXQtY29sdW1ucz1cImNvbHVtbnNcIj5cclxuICAgIDx0cj5cclxuICAgICAgICA8dGQgW25nU3dpdGNoXT1cImNvbC50eXBlXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgPHAtYXZhdGFyICpuZ0lmPVwiY29sLmZpZWxkID09PSAnY3JlYXRlZEJ5JyB8fCBjb2wuZmllbGQgPT09ICdsYXN0Q2hhbmdlZEJ5J1wiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLmZpZWxkXVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIFtpbWFnZV09XCJhdmF0YXJHZW5lcmF0b3IuZ2V0SW1hZ2UoZW50aXR5W2NvbC5maWVsZF0pXCIgW2xhYmVsXT1cImF2YXRhckdlbmVyYXRvci5nZXRMYWJlbChlbnRpdHlbY29sLmZpZWxkXSlcIiBbc3R5bGVdPVwiYXZhdGFyR2VuZXJhdG9yLmdldFN0eWxlKGVudGl0eVtjb2wuZmllbGRdKVwiIHNoYXBlPVwiY2lyY2xlXCI+PC9wLWF2YXRhcj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLmZpZWxkICE9PSAnY3JlYXRlZEJ5JyAmJiBjb2wuZmllbGQgIT09ICdsYXN0Q2hhbmdlZEJ5J1wiPnt7ZW50aXR5W2NvbC5maWVsZF19fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpYydcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5maWVsZF19fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+PHAtdHJpU3RhdGVDaGVja2JveCBbKG5nTW9kZWwpXT1cImVudGl0eVtjb2wuZmllbGRdXCIgW3JlYWRvbmx5XT1cInRydWVcIj48L3AtdHJpU3RhdGVDaGVja2JveD48L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIiBbcFRvb2x0aXBdPVwiZW50aXR5W2NvbC5maWVsZF1cIj57e2VudGl0eVtjb2wuZmllbGRdIHwgZGF0ZTpkYXRlRm9ybWF0fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYXJyYXknXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj48cCAqbmdGb3I9XCJsZXQgYXJyYXlFbGVtZW50IG9mIGVudGl0eVtjb2wuZmllbGRdXCI+e3thcnJheUVsZW1lbnQgfCBqc29ufX08L3A+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ29iamVjdCdcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5maWVsZF0gfCBqc29ufX08L3NwYW4+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPHRkPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgIDxhIHBCdXR0b24gcFRvb2x0aXA9XCJWaWV3L0VkaXRcIiB0b29sdGlwUG9zaXRpb249XCJsZWZ0XCIgW3JvdXRlckxpbmtdPVwiW2VkaXRMaW5rLCBhcGlOYW1lLCBlbnRpdHkuX2xpbmtzPy5zZWxmWzBdLmhyZWZdXCIgaWNvbj1cImZhcyBmYS1lZGl0XCI+PC9hPlxyXG4gICAgICAgICAgPGJ1dHRvbiBwVG9vbHRpcD1cIkRlbGV0ZVwiIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIiBwQnV0dG9uICpuZ0lmPVwiZW50aXR5Ll9saW5rcy5kZWxldGVcIiAoY2xpY2spPVwic2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwoZW50aXR5KVwiIGljb249XCJmYXMgZmEtdHJhc2gtYWx0XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibXgtMiBwLWJ1dHRvbi1kYW5nZXJcIj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90ZD5cclxuICAgIDwvdHI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgPHRyPlxyXG4gICAgICA8dGQgY29sc3Bhbj1cIjhcIj5ObyBlbnRyaWVzIGZvdW5kLjwvdGQ+XHJcbiAgICA8L3RyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG48L3AtdGFibGU+XHJcblxyXG48cC10b2FzdD48L3AtdG9hc3Q+XHJcbjxwLWNvbmZpcm1EaWFsb2c+PC9wLWNvbmZpcm1EaWFsb2c+XHJcbiJdfQ==
|