@geosanja/geosanja-frontend-api 4.0.2 → 4.0.4
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/api/default.service.d.ts +20 -0
- package/esm2022/api/default.service.mjs +59 -1
- package/esm2022/model/usuarioDTO.mjs +1 -1
- package/fesm2022/geosanja-geosanja-frontend-api.mjs +58 -0
- package/fesm2022/geosanja-geosanja-frontend-api.mjs.map +1 -1
- package/model/usuarioDTO.d.ts +1 -1
- package/package.json +1 -1
package/api/default.service.d.ts
CHANGED
|
@@ -20,6 +20,16 @@ export declare class DefaultService {
|
|
|
20
20
|
* @return true: consumes contains 'multipart/form-data', false: otherwise
|
|
21
21
|
*/
|
|
22
22
|
private canConsumeForm;
|
|
23
|
+
/**
|
|
24
|
+
* Delete usuário da aplicação
|
|
25
|
+
*
|
|
26
|
+
* @param body
|
|
27
|
+
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
|
28
|
+
* @param reportProgress flag to report request and response progress.
|
|
29
|
+
*/
|
|
30
|
+
deleteUsuario(body: UsuarioDTO, observe?: 'body', reportProgress?: boolean): Observable<boolean>;
|
|
31
|
+
deleteUsuario(body: UsuarioDTO, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<boolean>>;
|
|
32
|
+
deleteUsuario(body: UsuarioDTO, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<boolean>>;
|
|
23
33
|
/**
|
|
24
34
|
* Download de camadas e grupo de camadas do GeoServer.
|
|
25
35
|
*
|
|
@@ -152,6 +162,16 @@ export declare class DefaultService {
|
|
|
152
162
|
proxy(url: string, observe?: 'body', reportProgress?: boolean): Observable<Blob>;
|
|
153
163
|
proxy(url: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Blob>>;
|
|
154
164
|
proxy(url: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Blob>>;
|
|
165
|
+
/**
|
|
166
|
+
* Salvar usuário na aplicação
|
|
167
|
+
*
|
|
168
|
+
* @param body
|
|
169
|
+
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
|
170
|
+
* @param reportProgress flag to report request and response progress.
|
|
171
|
+
*/
|
|
172
|
+
setUsuario(body: UsuarioDTO, observe?: 'body', reportProgress?: boolean): Observable<boolean>;
|
|
173
|
+
setUsuario(body: UsuarioDTO, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<boolean>>;
|
|
174
|
+
setUsuario(body: UsuarioDTO, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<boolean>>;
|
|
155
175
|
static ɵfac: i0.ɵɵFactoryDeclaration<DefaultService, [null, { optional: true; }, { optional: true; }]>;
|
|
156
176
|
static ɵprov: i0.ɵɵInjectableDeclaration<DefaultService>;
|
|
157
177
|
}
|
|
@@ -45,6 +45,35 @@ export class DefaultService {
|
|
|
45
45
|
}
|
|
46
46
|
return false;
|
|
47
47
|
}
|
|
48
|
+
deleteUsuario(body, observe = 'body', reportProgress = false) {
|
|
49
|
+
if (body === null || body === undefined) {
|
|
50
|
+
throw new Error('Required parameter body was null or undefined when calling deleteUsuario.');
|
|
51
|
+
}
|
|
52
|
+
let headers = this.defaultHeaders;
|
|
53
|
+
// to determine the Accept header
|
|
54
|
+
let httpHeaderAccepts = [
|
|
55
|
+
'application/json'
|
|
56
|
+
];
|
|
57
|
+
const httpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
58
|
+
if (httpHeaderAcceptSelected != undefined) {
|
|
59
|
+
headers = headers.set('Accept', httpHeaderAcceptSelected);
|
|
60
|
+
}
|
|
61
|
+
// to determine the Content-Type header
|
|
62
|
+
const consumes = [
|
|
63
|
+
'application/json'
|
|
64
|
+
];
|
|
65
|
+
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
66
|
+
if (httpContentTypeSelected != undefined) {
|
|
67
|
+
headers = headers.set('Content-Type', httpContentTypeSelected);
|
|
68
|
+
}
|
|
69
|
+
return this.httpClient.request('delete', `${this.basePath}/admin/usuario`, {
|
|
70
|
+
body: body,
|
|
71
|
+
withCredentials: this.configuration.withCredentials,
|
|
72
|
+
headers: headers,
|
|
73
|
+
observe: observe,
|
|
74
|
+
reportProgress: reportProgress
|
|
75
|
+
});
|
|
76
|
+
}
|
|
48
77
|
downloadCamada(layerId, format, observe = 'body', reportProgress = false) {
|
|
49
78
|
if (layerId === null || layerId === undefined) {
|
|
50
79
|
throw new Error('Required parameter layerId was null or undefined when calling downloadCamada.');
|
|
@@ -428,6 +457,35 @@ export class DefaultService {
|
|
|
428
457
|
reportProgress: reportProgress
|
|
429
458
|
});
|
|
430
459
|
}
|
|
460
|
+
setUsuario(body, observe = 'body', reportProgress = false) {
|
|
461
|
+
if (body === null || body === undefined) {
|
|
462
|
+
throw new Error('Required parameter body was null or undefined when calling setUsuario.');
|
|
463
|
+
}
|
|
464
|
+
let headers = this.defaultHeaders;
|
|
465
|
+
// to determine the Accept header
|
|
466
|
+
let httpHeaderAccepts = [
|
|
467
|
+
'application/json'
|
|
468
|
+
];
|
|
469
|
+
const httpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
470
|
+
if (httpHeaderAcceptSelected != undefined) {
|
|
471
|
+
headers = headers.set('Accept', httpHeaderAcceptSelected);
|
|
472
|
+
}
|
|
473
|
+
// to determine the Content-Type header
|
|
474
|
+
const consumes = [
|
|
475
|
+
'application/json'
|
|
476
|
+
];
|
|
477
|
+
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
478
|
+
if (httpContentTypeSelected != undefined) {
|
|
479
|
+
headers = headers.set('Content-Type', httpContentTypeSelected);
|
|
480
|
+
}
|
|
481
|
+
return this.httpClient.request('post', `${this.basePath}/admin/usuario`, {
|
|
482
|
+
body: body,
|
|
483
|
+
withCredentials: this.configuration.withCredentials,
|
|
484
|
+
headers: headers,
|
|
485
|
+
observe: observe,
|
|
486
|
+
reportProgress: reportProgress
|
|
487
|
+
});
|
|
488
|
+
}
|
|
431
489
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DefaultService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
432
490
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DefaultService, providedIn: 'root' });
|
|
433
491
|
}
|
|
@@ -444,4 +502,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
444
502
|
}] }, { type: i2.Configuration, decorators: [{
|
|
445
503
|
type: Optional
|
|
446
504
|
}] }] });
|
|
447
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL2RlZmF1bHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHLENBQUEsdURBQXVEO0FBRTFELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUEyQixlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQ1YsTUFBZ0Msc0JBQXNCLENBQUM7QUFDekYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQTZCLFlBQVksQ0FBQztBQVkvRSxPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUEwQixjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQzs7OztBQU1yRixNQUFNLE9BQU8sY0FBYztJQU1EO0lBSlosUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUNsQixjQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNuQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUUzQyxZQUFzQixVQUFzQixFQUFnQyxRQUFnQixFQUFjLGFBQTRCO1FBQWhILGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLGFBQWEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN4RSxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGNBQWMsQ0FBQyxRQUFrQjtRQUNyQyxNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUNuQyxL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QUFHLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRWxDLGlDQUFpQztRQUNqQyxJQUFJLGlCQUFpQixHQUFhO1lBQzlCLDBCQUEwQjtTQUM3QixDQUFDO1FBQ0YsTUFBTSx3QkFBd0IsR0FBdUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlHLElBQUksd0JBQXdCLElBQUksU0FBUyxFQUFFLENBQUM7WUFDeEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELHVDQUF1QztRQUN2QyxNQUFNLFFBQVEsR0FBYSxFQUMxQixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxRQUFRLEVBQ3pEO1lBQ0ksTUFBTSxFQUFFLGVBQWU7WUFDdkIsWUFBWSxFQUFFLE1BQU07WUFDcEIsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsT0FBTztZQUNoQixPQUFPLEVBQUUsT0FBTztZQUNoQixjQUFjLEVBQUUsY0FBYztTQUNqQyxDQUNKLENBQUM7SUFDTixDQUFDO3dHQTVwQlEsY0FBYyw0Q0FNMEMsU0FBUzs0R0FOakUsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFPa0QsUUFBUTs7MEJBQUcsTUFBTTsyQkFBQyxTQUFTOzswQkFBcUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VvU2FuamEgQVBJXG4gKiBBUEkgcGFyYSBBcGxpY2HDp8OjbyBHZW9TYW5qYVxuICpcbiAqIE9wZW5BUEkgc3BlYyB2ZXJzaW9uOiAxLjIuOFxuICogQ29udGFjdDogY2xhdWRpby5ib2dvc3NpYW5AZ21haWwuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxuICogaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItY29kZWdlbi5naXRcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqLy8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsXG4gICAgICAgICBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFVybEVuY29kaW5nQ29kZWMgfSAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2VuY29kZXInO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENhbWFkYVByb3ByaWVkYWRlRFRPIH0gZnJvbSAnLi4vbW9kZWwvY2FtYWRhUHJvcHJpZWRhZGVEVE8nO1xuaW1wb3J0IHsgRWRpdEF0dHJpYnV0ZXNEVE8gfSBmcm9tICcuLi9tb2RlbC9lZGl0QXR0cmlidXRlc0RUTyc7XG5pbXBvcnQgeyBHcnVwb0NhbWFkYURUTyB9IGZyb20gJy4uL21vZGVsL2dydXBvQ2FtYWRhRFRPJztcbmltcG9ydCB7IExvY2FsaXphclVuaWRhZGVHZW9EVE8gfSBmcm9tICcuLi9tb2RlbC9sb2NhbGl6YXJVbmlkYWRlR2VvRFRPJztcbmltcG9ydCB7IFBlcmZpbERUTyB9IGZyb20gJy4uL21vZGVsL3BlcmZpbERUTyc7XG5pbXBvcnQgeyBSZXN1bHRhZG9VbmlkYWRlR2VvRFRPIH0gZnJvbSAnLi4vbW9kZWwvcmVzdWx0YWRvVW5pZGFkZUdlb0RUTyc7XG5pbXBvcnQgeyBVc3VhcmlvRFRPIH0gZnJvbSAnLi4vbW9kZWwvdXN1YXJpb0RUTyc7XG5cbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERlZmF1bHRTZXJ2aWNlIHtcblxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICcvJztcbiAgICBwdWJsaWMgZGVmYXVsdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZywgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoYmFzZVBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aCB8fCBjb25maWd1cmF0aW9uLmJhc2VQYXRoIHx8IHRoaXMuYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY29uc3VtZXMgc3RyaW5nW10gbWltZS10eXBlc1xuICAgICAqIEByZXR1cm4gdHJ1ZTogY29uc3VtZXMgY29udGFpbnMgJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZTogb3RoZXJ3aXNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYW5Db25zdW1lRm9ybShjb25zdW1lczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZm9ybSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJztcbiAgICAgICAgZm9yIChjb25zdCBjb25zdW1lIG9mIGNvbnN1bWVzKSB7XG4gICAgICAgICAgICBpZiAoZm9ybSA9PT0gY29uc3VtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIERvd25sb2FkIGRlIGNhbWFkYXMgZSBncnVwbyBkZSBjYW1hZGFzIGRvIEdlb1NlcnZlci5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gbGF5ZXJJZCBcbiAgICAgKiBAcGFyYW0gZm9ybWF0IFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBkb3dubG9hZENhbWFkYShsYXllcklkOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEJsb2I+O1xuICAgIHB1YmxpYyBkb3dubG9hZENhbWFkYShsYXllcklkOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QmxvYj4+O1xuICAgIHB1YmxpYyBkb3dubG9hZENhbWFkYShsYXllcklkOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PEJsb2I+PjtcbiAgICBwdWJsaWMgZG93bmxvYWRDYW1hZGEobGF5ZXJJZDogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICAgICAgaWYgKGxheWVySWQgPT09IG51bGwgfHwgbGF5ZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBsYXllcklkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZG93bmxvYWRDYW1hZGEuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0ID09PSBudWxsIHx8IGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBmb3JtYXQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkb3dubG9hZENhbWFkYS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogbmV3IEN1c3RvbUh0dHBVcmxFbmNvZGluZ0NvZGVjKCl9KTtcbiAgICAgICAgaWYgKGxheWVySWQgIT09IHVuZGVmaW5lZCAmJiBsYXllcklkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdsYXllcklkJywgPGFueT5sYXllcklkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgZm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdmb3JtYXQnLCA8YW55PmZvcm1hdCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3QoJ2dldCcsYCR7dGhpcy5iYXNlUGF0aH0vZG93bmxvYWQvY2FtYWRhYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRWRpw6fDo28gZG9zIGF0cmlidXRvcyBkZSBjYW1hZGEuXG4gICAgICogXG4gICAgICogQHBhcmFtIGJvZHkgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGVkaXRBdHRyaWJ1dGVzKGJvZHk/OiBFZGl0QXR0cmlidXRlc0RUTywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgIHB1YmxpYyBlZGl0QXR0cmlidXRlcyhib2R5PzogRWRpdEF0dHJpYnV0ZXNEVE8sIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxzdHJpbmc+PjtcbiAgICBwdWJsaWMgZWRpdEF0dHJpYnV0ZXMoYm9keT86IEVkaXRBdHRyaWJ1dGVzRFRPLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHN0cmluZz4+O1xuICAgIHB1YmxpYyBlZGl0QXR0cmlidXRlcyhib2R5PzogRWRpdEF0dHJpYnV0ZXNEVE8sIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxzdHJpbmc+KCdwb3N0JyxgJHt0aGlzLmJhc2VQYXRofS9lZGl0L2F0dHJpYnV0ZXNgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2acOnbyBwYXJhIGV4cG9ydGFyIG8gbWFwYSBlIGxlZ2VuZGFzIHBhcmEgUERGLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwZGZIZWFkZXIgXG4gICAgICogQHBhcmFtIHBkZkZvb3RlciBcbiAgICAgKiBAcGFyYW0gcGRmTGVnZW5kcyBcbiAgICAgKiBAcGFyYW0gcGRmTWFwIFxuICAgICAqIEBwYXJhbSBwZGZGb3JtYXQgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydFBERkZvcm0ocGRmSGVhZGVyPzogc3RyaW5nLCBwZGZGb290ZXI/OiBzdHJpbmcsIHBkZkxlZ2VuZHM/OiBzdHJpbmcsIHBkZk1hcD86IEJsb2IsIHBkZkZvcm1hdD86IHN0cmluZywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxCbG9iPjtcbiAgICBwdWJsaWMgZXhwb3J0UERGRm9ybShwZGZIZWFkZXI/OiBzdHJpbmcsIHBkZkZvb3Rlcj86IHN0cmluZywgcGRmTGVnZW5kcz86IHN0cmluZywgcGRmTWFwPzogQmxvYiwgcGRmRm9ybWF0Pzogc3RyaW5nLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QmxvYj4+O1xuICAgIHB1YmxpYyBleHBvcnRQREZGb3JtKHBkZkhlYWRlcj86IHN0cmluZywgcGRmRm9vdGVyPzogc3RyaW5nLCBwZGZMZWdlbmRzPzogc3RyaW5nLCBwZGZNYXA/OiBCbG9iLCBwZGZGb3JtYXQ/OiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QmxvYj4+O1xuICAgIHB1YmxpYyBleHBvcnRQREZGb3JtKHBkZkhlYWRlcj86IHN0cmluZywgcGRmRm9vdGVyPzogc3RyaW5nLCBwZGZMZWdlbmRzPzogc3RyaW5nLCBwZGZNYXA/OiBCbG9iLCBwZGZGb3JtYXQ/OiBzdHJpbmcsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG5cblxuXG5cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGNhbkNvbnN1bWVGb3JtID0gdGhpcy5jYW5Db25zdW1lRm9ybShjb25zdW1lcyk7XG5cbiAgICAgICAgbGV0IGZvcm1QYXJhbXM6IHsgYXBwZW5kKHBhcmFtOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkOyB9O1xuICAgICAgICBsZXQgdXNlRm9ybSA9IGZhbHNlO1xuICAgICAgICBsZXQgY29udmVydEZvcm1QYXJhbXNUb1N0cmluZyA9IGZhbHNlO1xuICAgICAgICAvLyB1c2UgRm9ybURhdGEgdG8gdHJhbnNtaXQgZmlsZXMgdXNpbmcgY29udGVudC10eXBlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiXG4gICAgICAgIC8vIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MDA3OTY5L2FwcGxpY2F0aW9uLXgtd3d3LWZvcm0tdXJsZW5jb2RlZC1vci1tdWx0aXBhcnQtZm9ybS1kYXRhXG4gICAgICAgIHVzZUZvcm0gPSBjYW5Db25zdW1lRm9ybTtcbiAgICAgICAgaWYgKHVzZUZvcm0pIHtcbiAgICAgICAgICAgIGZvcm1QYXJhbXMgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1QYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogbmV3IEN1c3RvbUh0dHBVcmxFbmNvZGluZ0NvZGVjKCl9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZGZIZWFkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9ybVBhcmFtcyA9IGZvcm1QYXJhbXMuYXBwZW5kKCdwZGZIZWFkZXInLCA8YW55PnBkZkhlYWRlcikgYXMgYW55IHx8IGZvcm1QYXJhbXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBkZkZvb3RlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JtUGFyYW1zID0gZm9ybVBhcmFtcy5hcHBlbmQoJ3BkZkZvb3RlcicsIDxhbnk+cGRmRm9vdGVyKSBhcyBhbnkgfHwgZm9ybVBhcmFtcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGRmTGVnZW5kcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JtUGFyYW1zID0gZm9ybVBhcmFtcy5hcHBlbmQoJ3BkZkxlZ2VuZHMnLCA8YW55PnBkZkxlZ2VuZHMpIGFzIGFueSB8fCBmb3JtUGFyYW1zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZGZNYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9ybVBhcmFtcyA9IGZvcm1QYXJhbXMuYXBwZW5kKCdwZGZNYXAnLCA8YW55PnBkZk1hcCkgYXMgYW55IHx8IGZvcm1QYXJhbXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBkZkZvcm1hdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JtUGFyYW1zID0gZm9ybVBhcmFtcy5hcHBlbmQoJ3BkZkZvcm1hdCcsIDxhbnk+cGRmRm9ybWF0KSBhcyBhbnkgfHwgZm9ybVBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdCgncG9zdCcsYCR7dGhpcy5iYXNlUGF0aH0vZXhwb3J0L3BkZmAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYm9keTogY29udmVydEZvcm1QYXJhbXNUb1N0cmluZyA/IGZvcm1QYXJhbXMudG9TdHJpbmcoKSA6IGZvcm1QYXJhbXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1c2NhciBsaXN0YSBkZSBjYW1hZGFzLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYW1hZGFzKG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8QXJyYXk8R3J1cG9DYW1hZGFEVE8+PjtcbiAgICBwdWJsaWMgZ2V0Q2FtYWRhcyhvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXk8R3J1cG9DYW1hZGFEVE8+Pj47XG4gICAgcHVibGljIGdldENhbWFkYXMob2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcnJheTxHcnVwb0NhbWFkYURUTz4+PjtcbiAgICBwdWJsaWMgZ2V0Q2FtYWRhcyhvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgaWYgKGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFycmF5PEdydXBvQ2FtYWRhRFRPPj4oJ2dldCcsYCR7dGhpcy5iYXNlUGF0aH0vY2FtYWRhc2AsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdXNjYXIgbGlzdGEgZGUgdXN1w6FyaW9zIGRvIGVzamNcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gY3BmIFxuICAgICAqIEBwYXJhbSBub21lIFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRFU0pDVXN1YXJpb3MoY3BmPzogbnVtYmVyLCBub21lPzogc3RyaW5nLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEFycmF5PFVzdWFyaW9EVE8+PjtcbiAgICBwdWJsaWMgZ2V0RVNKQ1VzdWFyaW9zKGNwZj86IG51bWJlciwgbm9tZT86IHN0cmluZywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PFVzdWFyaW9EVE8+Pj47XG4gICAgcHVibGljIGdldEVTSkNVc3VhcmlvcyhjcGY/OiBudW1iZXIsIG5vbWU/OiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QXJyYXk8VXN1YXJpb0RUTz4+PjtcbiAgICBwdWJsaWMgZ2V0RVNKQ1VzdWFyaW9zKGNwZj86IG51bWJlciwgbm9tZT86IHN0cmluZywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cblxuXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogbmV3IEN1c3RvbUh0dHBVcmxFbmNvZGluZ0NvZGVjKCl9KTtcbiAgICAgICAgaWYgKGNwZiAhPT0gdW5kZWZpbmVkICYmIGNwZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnY3BmJywgPGFueT5jcGYpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub21lICE9PSB1bmRlZmluZWQgJiYgbm9tZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnbm9tZScsIDxhbnk+bm9tZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgaWYgKGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFycmF5PFVzdWFyaW9EVE8+PignZ2V0JyxgJHt0aGlzLmJhc2VQYXRofS9hZG1pbi9lc2pjL3VzdWFyaW9zYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1c2NhciBpbmZvcm1hw6fDtWVzIGRlIGNhbWFkYXMgZSBncnVwb3MgZGUgY2FtYWRhcyBwb3IgYXBvbnRhbWVudG8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHNycyBcbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBcbiAgICAgKiBAcGFyYW0gYmJveCBcbiAgICAgKiBAcGFyYW0gaGVpZ2h0IFxuICAgICAqIEBwYXJhbSB3aWR0aCBcbiAgICAgKiBAcGFyYW0gbGF5ZXJzIFxuICAgICAqIEBwYXJhbSBxdWVyeUxheWVycyBcbiAgICAgKiBAcGFyYW0gaW5mb0Zvcm1hdCBcbiAgICAgKiBAcGFyYW0geCBcbiAgICAgKiBAcGFyYW0geSBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmVhdHVyZUluZm8oc3JzOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgYmJveDogc3RyaW5nLCBoZWlnaHQ6IHN0cmluZywgd2lkdGg6IHN0cmluZywgbGF5ZXJzOiBzdHJpbmcsIHF1ZXJ5TGF5ZXJzOiBzdHJpbmcsIGluZm9Gb3JtYXQ6IHN0cmluZywgeDogc3RyaW5nLCB5OiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBwdWJsaWMgZ2V0RmVhdHVyZUluZm8oc3JzOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgYmJveDogc3RyaW5nLCBoZWlnaHQ6IHN0cmluZywgd2lkdGg6IHN0cmluZywgbGF5ZXJzOiBzdHJpbmcsIHF1ZXJ5TGF5ZXJzOiBzdHJpbmcsIGluZm9Gb3JtYXQ6IHN0cmluZywgeDogc3RyaW5nLCB5OiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxzdHJpbmc+PjtcbiAgICBwdWJsaWMgZ2V0RmVhdHVyZUluZm8oc3JzOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgYmJveDogc3RyaW5nLCBoZWlnaHQ6IHN0cmluZywgd2lkdGg6IHN0cmluZywgbGF5ZXJzOiBzdHJpbmcsIHF1ZXJ5TGF5ZXJzOiBzdHJpbmcsIGluZm9Gb3JtYXQ6IHN0cmluZywgeDogc3RyaW5nLCB5OiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8c3RyaW5nPj47XG4gICAgcHVibGljIGdldEZlYXR1cmVJbmZvKHNyczogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIGJib3g6IHN0cmluZywgaGVpZ2h0OiBzdHJpbmcsIHdpZHRoOiBzdHJpbmcsIGxheWVyczogc3RyaW5nLCBxdWVyeUxheWVyczogc3RyaW5nLCBpbmZvRm9ybWF0OiBzdHJpbmcsIHg6IHN0cmluZywgeTogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoc3JzID09PSBudWxsIHx8IHNycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzcnMgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRGZWF0dXJlSW5mby4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2ZXJzaW9uID09PSBudWxsIHx8IHZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdmVyc2lvbiB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEZlYXR1cmVJbmZvLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJib3ggPT09IG51bGwgfHwgYmJveCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBiYm94IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0RmVhdHVyZUluZm8uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGVpZ2h0ID09PSBudWxsIHx8IGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBoZWlnaHQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRGZWF0dXJlSW5mby4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3aWR0aCA9PT0gbnVsbCB8fCB3aWR0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB3aWR0aCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEZlYXR1cmVJbmZvLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheWVycyA9PT0gbnVsbCB8fCBsYXllcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgbGF5ZXJzIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0RmVhdHVyZUluZm8uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocXVlcnlMYXllcnMgPT09IG51bGwgfHwgcXVlcnlMYXllcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgcXVlcnlMYXllcnMgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRGZWF0dXJlSW5mby4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmZvRm9ybWF0ID09PSBudWxsIHx8IGluZm9Gb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgaW5mb0Zvcm1hdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEZlYXR1cmVJbmZvLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB4IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0RmVhdHVyZUluZm8uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeSA9PT0gbnVsbCB8fCB5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRGZWF0dXJlSW5mby4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogbmV3IEN1c3RvbUh0dHBVcmxFbmNvZGluZ0NvZGVjKCl9KTtcbiAgICAgICAgaWYgKHNycyAhPT0gdW5kZWZpbmVkICYmIHNycyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnc3JzJywgPGFueT5zcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2ZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgdmVyc2lvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgndmVyc2lvbicsIDxhbnk+dmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJib3ggIT09IHVuZGVmaW5lZCAmJiBiYm94ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdiYm94JywgPGFueT5iYm94KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGVpZ2h0ICE9PSB1bmRlZmluZWQgJiYgaGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdoZWlnaHQnLCA8YW55PmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdpZHRoICE9PSB1bmRlZmluZWQgJiYgd2lkdGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3dpZHRoJywgPGFueT53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxheWVycyAhPT0gdW5kZWZpbmVkICYmIGxheWVycyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnbGF5ZXJzJywgPGFueT5sYXllcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxdWVyeUxheWVycyAhPT0gdW5kZWZpbmVkICYmIHF1ZXJ5TGF5ZXJzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdxdWVyeV9sYXllcnMnLCA8YW55PnF1ZXJ5TGF5ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mb0Zvcm1hdCAhPT0gdW5kZWZpbmVkICYmIGluZm9Gb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ2luZm9fZm9ybWF0JywgPGFueT5pbmZvRm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPT0gdW5kZWZpbmVkICYmIHggIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3gnLCA8YW55PngpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh5ICE9PSB1bmRlZmluZWQgJiYgeSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgneScsIDxhbnk+eSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgaWYgKGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PHN0cmluZz4oJ2dldCcsYCR7dGhpcy5iYXNlUGF0aH0vZmVhdHVyZWluZm9gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVzY2EgaWNvbmVcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gZmlsZW5hbWUgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldEljb24oZmlsZW5hbWU6IHN0cmluZywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxCbG9iPjtcbiAgICBwdWJsaWMgZ2V0SWNvbihmaWxlbmFtZTogc3RyaW5nLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QmxvYj4+O1xuICAgIHB1YmxpYyBnZXRJY29uKGZpbGVuYW1lOiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QmxvYj4+O1xuICAgIHB1YmxpYyBnZXRJY29uKGZpbGVuYW1lOiBzdHJpbmcsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgICAgIGlmIChmaWxlbmFtZSA9PT0gbnVsbCB8fCBmaWxlbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBmaWxlbmFtZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEljb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnaW1hZ2Uvc3ZnK3htbCdcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgaWYgKGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0KCdnZXQnLGAke3RoaXMuYmFzZVBhdGh9L2ljb24vJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGZpbGVuYW1lKSl9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVzY2FyIGxpc3RhIGRlIHBlcmZpc1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQZXJmaXMob2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxBcnJheTxQZXJmaWxEVE8+PjtcbiAgICBwdWJsaWMgZ2V0UGVyZmlzKG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxQZXJmaWxEVE8+Pj47XG4gICAgcHVibGljIGdldFBlcmZpcyhvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFycmF5PFBlcmZpbERUTz4+PjtcbiAgICBwdWJsaWMgZ2V0UGVyZmlzKG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QXJyYXk8UGVyZmlsRFRPPj4oJ2dldCcsYCR7dGhpcy5iYXNlUGF0aH0vYWRtaW4vcGVyZmlzYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1c2NhciBsaXN0YSBkZSBwcm9wcmllYWRlcyBkYXMgY2FtYWRhcyBlIHN1YXMgY29uZmlndXJhw6fDtWVzLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBpZCBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UHJvcHJpZWRhZGVzQ2FtYWRhKGlkOiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8QXJyYXk8Q2FtYWRhUHJvcHJpZWRhZGVEVE8+PjtcbiAgICBwdWJsaWMgZ2V0UHJvcHJpZWRhZGVzQ2FtYWRhKGlkOiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxDYW1hZGFQcm9wcmllZGFkZURUTz4+PjtcbiAgICBwdWJsaWMgZ2V0UHJvcHJpZWRhZGVzQ2FtYWRhKGlkOiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QXJyYXk8Q2FtYWRhUHJvcHJpZWRhZGVEVE8+Pj47XG4gICAgcHVibGljIGdldFByb3ByaWVkYWRlc0NhbWFkYShpZDogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRQcm9wcmllZGFkZXNDYW1hZGEuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IG5ldyBDdXN0b21IdHRwVXJsRW5jb2RpbmdDb2RlYygpfSk7XG4gICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIGlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdpZCcsIDxhbnk+aWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxBcnJheTxDYW1hZGFQcm9wcmllZGFkZURUTz4+KCdnZXQnLGAke3RoaXMuYmFzZVBhdGh9L2NhbWFkYS9wcm9wcmllZGFkZXNgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVzY2FyIGxpc3RhIGRlIHVzdcOhcmlvcyBkYSBhcGxpY2HDp8Ojb1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRVc3VhcmlvcyhvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEFycmF5PFVzdWFyaW9EVE8+PjtcbiAgICBwdWJsaWMgZ2V0VXN1YXJpb3Mob2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PFVzdWFyaW9EVE8+Pj47XG4gICAgcHVibGljIGdldFVzdWFyaW9zKG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QXJyYXk8VXN1YXJpb0RUTz4+PjtcbiAgICBwdWJsaWMgZ2V0VXN1YXJpb3Mob2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxBcnJheTxVc3VhcmlvRFRPPj4oJ2dldCcsYCR7dGhpcy5iYXNlUGF0aH0vYWRtaW4vdXN1YXJpb3NgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9jYWxpemHDp8OjbyBwb3IgdW5pZGFkZSBnZW9ncsOhZmljYS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gYm9keSBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9jYWxpemFyVW5pZGFkZUdlbyhib2R5OiBMb2NhbGl6YXJVbmlkYWRlR2VvRFRPLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEFycmF5PFJlc3VsdGFkb1VuaWRhZGVHZW9EVE8+PjtcbiAgICBwdWJsaWMgbG9jYWxpemFyVW5pZGFkZUdlbyhib2R5OiBMb2NhbGl6YXJVbmlkYWRlR2VvRFRPLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXk8UmVzdWx0YWRvVW5pZGFkZUdlb0RUTz4+PjtcbiAgICBwdWJsaWMgbG9jYWxpemFyVW5pZGFkZUdlbyhib2R5OiBMb2NhbGl6YXJVbmlkYWRlR2VvRFRPLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFycmF5PFJlc3VsdGFkb1VuaWRhZGVHZW9EVE8+Pj47XG4gICAgcHVibGljIGxvY2FsaXphclVuaWRhZGVHZW8oYm9keTogTG9jYWxpemFyVW5pZGFkZUdlb0RUTywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICAgICAgaWYgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBib2R5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgbG9jYWxpemFyVW5pZGFkZUdlby4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QXJyYXk8UmVzdWx0YWRvVW5pZGFkZUdlb0RUTz4+KCdwb3N0JyxgJHt0aGlzLmJhc2VQYXRofS9sb2NhbGl6YXJgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm94eSBwYXJhIHJlcXVpc2nDp8O1ZXMgR0VUIGFvIEdlb1NlcnZlci5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdXJsIFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcm94eSh1cmw6IHN0cmluZywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxCbG9iPjtcbiAgICBwdWJsaWMgcHJveHkodXJsOiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxCbG9iPj47XG4gICAgcHVibGljIHByb3h5KHVybDogc3RyaW5nLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PEJsb2I+PjtcbiAgICBwdWJsaWMgcHJveHkodXJsOiBzdHJpbmcsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgICAgIGlmICh1cmwgPT09IG51bGwgfHwgdXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHVybCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHByb3h5LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiBuZXcgQ3VzdG9tSHR0cFVybEVuY29kaW5nQ29kZWMoKX0pO1xuICAgICAgICBpZiAodXJsICE9PSB1bmRlZmluZWQgJiYgdXJsICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCd1cmwnLCA8YW55PnVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3QoJ2dldCcsYCR7dGhpcy5iYXNlUGF0aH0vcHJveHlgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cbiJdfQ==
|
|
505
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL2RlZmF1bHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHLENBQUEsdURBQXVEO0FBRTFELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUEyQixlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQ1YsTUFBZ0Msc0JBQXNCLENBQUM7QUFDekYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQTZCLFlBQVksQ0FBQztBQVkvRSxPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUEwQixjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQzs7OztBQU1yRixNQUFNLE9BQU8sY0FBYztJQU1EO0lBSlosUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUNsQixjQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNuQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUUzQyxZQUFzQixVQUFzQixFQUFnQyxRQUFnQixFQUFjLGFBQTRCO1FBQWhILGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLGFBQWEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN4RSxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGNBQWMsQ0FBQyxRQUFrQjtRQUNyQyxNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUNuQyxL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amEgQVBJXG4gKiBBUEkgcGFyYSBBcGxpY2HDp8OjbyBHZW9TYW5qYVxuICpcbiAqIE9wZW5BUEkgc3BlYyB2ZXJzaW9uOiAxLjIuOFxuICogQ29udGFjdDogY2xhdWRpby5ib2dvc3NpYW5AZ21haWwuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxuICogaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItY29kZWdlbi5naXRcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqLy8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsXG4gICAgICAgICBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFVybEVuY29kaW5nQ29kZWMgfSAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2VuY29kZXInO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENhbWFkYVByb3ByaWVkYWRlRFRPIH0gZnJvbSAnLi4vbW9kZWwvY2FtYWRhUHJvcHJpZWRhZGVEVE8nO1xuaW1wb3J0IHsgRWRpdEF0dHJpYnV0ZXNEVE8gfSBmcm9tICcuLi9tb2RlbC9lZGl0QXR0cmlidXRlc0RUTyc7XG5pbXBvcnQgeyBHcnVwb0NhbWFkYURUTyB9IGZyb20gJy4uL21vZGVsL2dydXBvQ2FtYWRhRFRPJztcbmltcG9ydCB7IExvY2FsaXphclVuaWRhZGVHZW9EVE8gfSBmcm9tICcuLi9tb2RlbC9sb2NhbGl6YXJVbmlkYWRlR2VvRFRPJztcbmltcG9ydCB7IFBlcmZpbERUTyB9IGZyb20gJy4uL21vZGVsL3BlcmZpbERUTyc7XG5pbXBvcnQgeyBSZXN1bHRhZG9VbmlkYWRlR2VvRFRPIH0gZnJvbSAnLi4vbW9kZWwvcmVzdWx0YWRvVW5pZGFkZUdlb0RUTyc7XG5pbXBvcnQgeyBVc3VhcmlvRFRPIH0gZnJvbSAnLi4vbW9kZWwvdXN1YXJpb0RUTyc7XG5cbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERlZmF1bHRTZXJ2aWNlIHtcblxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICcvJztcbiAgICBwdWJsaWMgZGVmYXVsdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZywgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoYmFzZVBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aCB8fCBjb25maWd1cmF0aW9uLmJhc2VQYXRoIHx8IHRoaXMuYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY29uc3VtZXMgc3RyaW5nW10gbWltZS10eXBlc1xuICAgICAqIEByZXR1cm4gdHJ1ZTogY29uc3VtZXMgY29udGFpbnMgJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZTogb3RoZXJ3aXNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYW5Db25zdW1lRm9ybShjb25zdW1lczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZm9ybSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJztcbiAgICAgICAgZm9yIChjb25zdCBjb25zdW1lIG9mIGNvbnN1bWVzKSB7XG4gICAgICAgICAgICBpZiAoZm9ybSA9PT0gY29uc3VtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSB1c3XDoXJpbyBkYSBhcGxpY2HDp8Ojb1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBib2R5IFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVVc3VhcmlvKGJvZHk6IFVzdWFyaW9EVE8sIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHVibGljIGRlbGV0ZVVzdWFyaW8oYm9keTogVXN1YXJpb0RUTywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGJvb2xlYW4+PjtcbiAgICBwdWJsaWMgZGVsZXRlVXN1YXJpbyhib2R5OiBVc3VhcmlvRFRPLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGJvb2xlYW4+PjtcbiAgICBwdWJsaWMgZGVsZXRlVXN1YXJpbyhib2R5OiBVc3VhcmlvRFRPLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGJvZHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkZWxldGVVc3VhcmlvLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxib29sZWFuPignZGVsZXRlJyxgJHt0aGlzLmJhc2VQYXRofS9hZG1pbi91c3VhcmlvYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG93bmxvYWQgZGUgY2FtYWRhcyBlIGdydXBvIGRlIGNhbWFkYXMgZG8gR2VvU2VydmVyLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBsYXllcklkIFxuICAgICAqIEBwYXJhbSBmb3JtYXQgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGRvd25sb2FkQ2FtYWRhKGxheWVySWQ6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8QmxvYj47XG4gICAgcHVibGljIGRvd25sb2FkQ2FtYWRhKGxheWVySWQ6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxCbG9iPj47XG4gICAgcHVibGljIGRvd25sb2FkQ2FtYWRhKGxheWVySWQ6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QmxvYj4+O1xuICAgIHB1YmxpYyBkb3dubG9hZENhbWFkYShsYXllcklkOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAobGF5ZXJJZCA9PT0gbnVsbCB8fCBsYXllcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGxheWVySWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkb3dubG9hZENhbWFkYS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtYXQgPT09IG51bGwgfHwgZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZvcm1hdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGRvd25sb2FkQ2FtYWRhLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiBuZXcgQ3VzdG9tSHR0cFVybEVuY29kaW5nQ29kZWMoKX0pO1xuICAgICAgICBpZiAobGF5ZXJJZCAhPT0gdW5kZWZpbmVkICYmIGxheWVySWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ2xheWVySWQnLCA8YW55PmxheWVySWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgIT09IHVuZGVmaW5lZCAmJiBmb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ2Zvcm1hdCcsIDxhbnk+Zm9ybWF0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdCgnZ2V0JyxgJHt0aGlzLmJhc2VQYXRofS9kb3dubG9hZC9jYW1hZGFgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFZGnDp8OjbyBkb3MgYXRyaWJ1dG9zIGRlIGNhbWFkYS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gYm9keSBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZWRpdEF0dHJpYnV0ZXMoYm9keT86IEVkaXRBdHRyaWJ1dGVzRFRPLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgcHVibGljIGVkaXRBdHRyaWJ1dGVzKGJvZHk/OiBFZGl0QXR0cmlidXRlc0RUTywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPHN0cmluZz4+O1xuICAgIHB1YmxpYyBlZGl0QXR0cmlidXRlcyhib2R5PzogRWRpdEF0dHJpYnV0ZXNEVE8sIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8c3RyaW5nPj47XG4gICAgcHVibGljIGVkaXRBdHRyaWJ1dGVzKGJvZHk/OiBFZGl0QXR0cmlidXRlc0RUTywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgaWYgKGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PHN0cmluZz4oJ3Bvc3QnLGAke3RoaXMuYmFzZVBhdGh9L2VkaXQvYXR0cmlidXRlc2AsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcnZpw6dvIHBhcmEgZXhwb3J0YXIgbyBtYXBhIGUgbGVnZW5kYXMgcGFyYSBQREYuXG4gICAgICogXG4gICAgICogQHBhcmFtIHBkZkhlYWRlciBcbiAgICAgKiBAcGFyYW0gcGRmRm9vdGVyIFxuICAgICAqIEBwYXJhbSBwZGZMZWdlbmRzIFxuICAgICAqIEBwYXJhbSBwZGZNYXAgXG4gICAgICogQHBhcmFtIHBkZkZvcm1hdCBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwb3J0UERGRm9ybShwZGZIZWFkZXI/OiBzdHJpbmcsIHBkZkZvb3Rlcj86IHN0cmluZywgcGRmTGVnZW5kcz86IHN0cmluZywgcGRmTWFwPzogQmxvYiwgcGRmRm9ybWF0Pzogc3RyaW5nLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEJsb2I+O1xuICAgIHB1YmxpYyBleHBvcnRQREZGb3JtKHBkZkhlYWRlcj86IHN0cmluZywgcGRmRm9vdGVyPzogc3RyaW5nLCBwZGZMZWdlbmRzPzogc3RyaW5nLCBwZGZNYXA/OiBCbG9iLCBwZGZGb3JtYXQ/OiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxCbG9iPj47XG4gICAgcHVibGljIGV4cG9ydFBERkZvcm0ocGRmSGVhZGVyPzogc3RyaW5nLCBwZGZGb290ZXI/OiBzdHJpbmcsIHBkZkxlZ2VuZHM/OiBzdHJpbmcsIHBkZk1hcD86IEJsb2IsIHBkZkZvcm1hdD86IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxCbG9iPj47XG4gICAgcHVibGljIGV4cG9ydFBERkZvcm0ocGRmSGVhZGVyPzogc3RyaW5nLCBwZGZGb290ZXI/OiBzdHJpbmcsIHBkZkxlZ2VuZHM/OiBzdHJpbmcsIHBkZk1hcD86IEJsb2IsIHBkZkZvcm1hdD86IHN0cmluZywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cblxuXG5cblxuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgY2FuQ29uc3VtZUZvcm0gPSB0aGlzLmNhbkNvbnN1bWVGb3JtKGNvbnN1bWVzKTtcblxuICAgICAgICBsZXQgZm9ybVBhcmFtczogeyBhcHBlbmQocGFyYW06IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7IH07XG4gICAgICAgIGxldCB1c2VGb3JtID0gZmFsc2U7XG4gICAgICAgIGxldCBjb252ZXJ0Rm9ybVBhcmFtc1RvU3RyaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIHVzZSBGb3JtRGF0YSB0byB0cmFuc21pdCBmaWxlcyB1c2luZyBjb250ZW50LXR5cGUgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCJcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwMDc5NjkvYXBwbGljYXRpb24teC13d3ctZm9ybS11cmxlbmNvZGVkLW9yLW11bHRpcGFydC1mb3JtLWRhdGFcbiAgICAgICAgdXNlRm9ybSA9IGNhbkNvbnN1bWVGb3JtO1xuICAgICAgICBpZiAodXNlRm9ybSkge1xuICAgICAgICAgICAgZm9ybVBhcmFtcyA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybVBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiBuZXcgQ3VzdG9tSHR0cFVybEVuY29kaW5nQ29kZWMoKX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBkZkhlYWRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JtUGFyYW1zID0gZm9ybVBhcmFtcy5hcHBlbmQoJ3BkZkhlYWRlcicsIDxhbnk+cGRmSGVhZGVyKSBhcyBhbnkgfHwgZm9ybVBhcmFtcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGRmRm9vdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvcm1QYXJhbXMgPSBmb3JtUGFyYW1zLmFwcGVuZCgncGRmRm9vdGVyJywgPGFueT5wZGZGb290ZXIpIGFzIGFueSB8fCBmb3JtUGFyYW1zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZGZMZWdlbmRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvcm1QYXJhbXMgPSBmb3JtUGFyYW1zLmFwcGVuZCgncGRmTGVnZW5kcycsIDxhbnk+cGRmTGVnZW5kcykgYXMgYW55IHx8IGZvcm1QYXJhbXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBkZk1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JtUGFyYW1zID0gZm9ybVBhcmFtcy5hcHBlbmQoJ3BkZk1hcCcsIDxhbnk+cGRmTWFwKSBhcyBhbnkgfHwgZm9ybVBhcmFtcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGRmRm9ybWF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvcm1QYXJhbXMgPSBmb3JtUGFyYW1zLmFwcGVuZCgncGRmRm9ybWF0JywgPGFueT5wZGZGb3JtYXQpIGFzIGFueSB8fCBmb3JtUGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0KCdwb3N0JyxgJHt0aGlzLmJhc2VQYXRofS9leHBvcnQvcGRmYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBib2R5OiBjb252ZXJ0Rm9ybVBhcmFtc1RvU3RyaW5nID8gZm9ybVBhcmFtcy50b1N0cmluZygpIDogZm9ybVBhcmFtcyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVzY2FyIGxpc3RhIGRlIGNhbWFkYXMuXG4gICAgICogXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldENhbWFkYXMob2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxBcnJheTxHcnVwb0NhbWFkYURUTz4+O1xuICAgIHB1YmxpYyBnZXRDYW1hZGFzKG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxHcnVwb0NhbWFkYURUTz4+PjtcbiAgICBwdWJsaWMgZ2V0Q2FtYWRhcyhvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFycmF5PEdydXBvQ2FtYWRhRFRPPj4+O1xuICAgIHB1YmxpYyBnZXRDYW1hZGFzKG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QXJyYXk8R3J1cG9DYW1hZGFEVE8+PignZ2V0JyxgJHt0aGlzLmJhc2VQYXRofS9jYW1hZGFzYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1c2NhciBsaXN0YSBkZSB1c3XDoXJpb3MgZG8gZXNqY1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBjcGYgXG4gICAgICogQHBhcmFtIG5vbWUgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldEVTSkNVc3VhcmlvcyhjcGY/OiBudW1iZXIsIG5vbWU/OiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8QXJyYXk8VXN1YXJpb0RUTz4+O1xuICAgIHB1YmxpYyBnZXRFU0pDVXN1YXJpb3MoY3BmPzogbnVtYmVyLCBub21lPzogc3RyaW5nLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXk8VXN1YXJpb0RUTz4+PjtcbiAgICBwdWJsaWMgZ2V0RVNKQ1VzdWFyaW9zKGNwZj86IG51bWJlciwgbm9tZT86IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcnJheTxVc3VhcmlvRFRPPj4+O1xuICAgIHB1YmxpYyBnZXRFU0pDVXN1YXJpb3MoY3BmPzogbnVtYmVyLCBub21lPzogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuXG5cbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiBuZXcgQ3VzdG9tSHR0cFVybEVuY29kaW5nQ29kZWMoKX0pO1xuICAgICAgICBpZiAoY3BmICE9PSB1bmRlZmluZWQgJiYgY3BmICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdjcGYnLCA8YW55PmNwZik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vbWUgIT09IHVuZGVmaW5lZCAmJiBub21lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdub21lJywgPGFueT5ub21lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QXJyYXk8VXN1YXJpb0RUTz4+KCdnZXQnLGAke3RoaXMuYmFzZVBhdGh9L2FkbWluL2VzamMvdXN1YXJpb3NgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVzY2FyIGluZm9ybWHDp8O1ZXMgZGUgY2FtYWRhcyBlIGdydXBvcyBkZSBjYW1hZGFzIHBvciBhcG9udGFtZW50by5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gc3JzIFxuICAgICAqIEBwYXJhbSB2ZXJzaW9uIFxuICAgICAqIEBwYXJhbSBiYm94IFxuICAgICAqIEBwYXJhbSBoZWlnaHQgXG4gICAgICogQHBhcmFtIHdpZHRoIFxuICAgICAqIEBwYXJhbSBsYXllcnMgXG4gICAgICogQHBhcmFtIHF1ZXJ5TGF5ZXJzIFxuICAgICAqIEBwYXJhbSBpbmZvRm9ybWF0IFxuICAgICAqIEBwYXJhbSB4IFxuICAgICAqIEBwYXJhbSB5IFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGZWF0dXJlSW5mbyhzcnM6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCBiYm94OiBzdHJpbmcsIGhlaWdodDogc3RyaW5nLCB3aWR0aDogc3RyaW5nLCBsYXllcnM6IHN0cmluZywgcXVlcnlMYXllcnM6IHN0cmluZywgaW5mb0Zvcm1hdDogc3RyaW5nLCB4OiBzdHJpbmcsIHk6IHN0cmluZywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgIHB1YmxpYyBnZXRGZWF0dXJlSW5mbyhzcnM6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCBiYm94OiBzdHJpbmcsIGhlaWdodDogc3RyaW5nLCB3aWR0aDogc3RyaW5nLCBsYXllcnM6IHN0cmluZywgcXVlcnlMYXllcnM6IHN0cmluZywgaW5mb0Zvcm1hdDogc3RyaW5nLCB4OiBzdHJpbmcsIHk6IHN0cmluZywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPHN0cmluZz4+O1xuICAgIHB1YmxpYyBnZXRGZWF0dXJlSW5mbyhzcnM6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCBiYm94OiBzdHJpbmcsIGhlaWdodDogc3RyaW5nLCB3aWR0aDogc3RyaW5nLCBsYXllcnM6IHN0cmluZywgcXVlcnlMYXllcnM6IHN0cmluZywgaW5mb0Zvcm1hdDogc3RyaW5nLCB4OiBzdHJpbmcsIHk6IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxzdHJpbmc+PjtcbiAgICBwdWJsaWMgZ2V0RmVhdHVyZUluZm8oc3JzOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgYmJveDogc3RyaW5nLCBoZWlnaHQ6IHN0cmluZywgd2lkdGg6IHN0cmluZywgbGF5ZXJzOiBzdHJpbmcsIHF1ZXJ5TGF5ZXJzOiBzdHJpbmcsIGluZm9Gb3JtYXQ6IHN0cmluZywgeDogc3RyaW5nLCB5OiBzdHJpbmcsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgICAgIGlmIChzcnMgPT09IG51bGwgfHwgc3JzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNycyB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEZlYXR1cmVJbmZvLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZlcnNpb24gPT09IG51bGwgfHwgdmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB2ZXJzaW9uIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0RmVhdHVyZUluZm8uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmJveCA9PT0gbnVsbCB8fCBiYm94ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGJib3ggd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRGZWF0dXJlSW5mby4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoZWlnaHQgPT09IG51bGwgfHwgaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGhlaWdodCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEZlYXR1cmVJbmZvLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdpZHRoID09PSBudWxsIHx8IHdpZHRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHdpZHRoIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0RmVhdHVyZUluZm8uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5ZXJzID09PSBudWxsIHx8IGxheWVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBsYXllcnMgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRGZWF0dXJlSW5mby4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWVyeUxheWVycyA9PT0gbnVsbCB8fCBxdWVyeUxheWVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBxdWVyeUxheWVycyB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEZlYXR1cmVJbmZvLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZm9Gb3JtYXQgPT09IG51bGwgfHwgaW5mb0Zvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbmZvRm9ybWF0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0RmVhdHVyZUluZm8uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHggd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRGZWF0dXJlSW5mby4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh5ID09PSBudWxsIHx8IHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgeSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEZlYXR1cmVJbmZvLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiBuZXcgQ3VzdG9tSHR0cFVybEVuY29kaW5nQ29kZWMoKX0pO1xuICAgICAgICBpZiAoc3JzICE9PSB1bmRlZmluZWQgJiYgc3JzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdzcnMnLCA8YW55PnNycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB2ZXJzaW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCd2ZXJzaW9uJywgPGFueT52ZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmJveCAhPT0gdW5kZWZpbmVkICYmIGJib3ggIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ2Jib3gnLCA8YW55PmJib3gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBoZWlnaHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ2hlaWdodCcsIDxhbnk+aGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2lkdGggIT09IHVuZGVmaW5lZCAmJiB3aWR0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnd2lkdGgnLCA8YW55PndpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGF5ZXJzICE9PSB1bmRlZmluZWQgJiYgbGF5ZXJzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdsYXllcnMnLCA8YW55PmxheWVycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXJ5TGF5ZXJzICE9PSB1bmRlZmluZWQgJiYgcXVlcnlMYXllcnMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3F1ZXJ5X2xheWVycycsIDxhbnk+cXVlcnlMYXllcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvRm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgaW5mb0Zvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnaW5mb19mb3JtYXQnLCA8YW55PmluZm9Gb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9PSB1bmRlZmluZWQgJiYgeCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgneCcsIDxhbnk+eCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHkgIT09IHVuZGVmaW5lZCAmJiB5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCd5JywgPGFueT55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8c3RyaW5nPignZ2V0JyxgJHt0aGlzLmJhc2VQYXRofS9mZWF0dXJlaW5mb2AsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdXNjYSBpY29uZVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBmaWxlbmFtZSBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SWNvbihmaWxlbmFtZTogc3RyaW5nLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEJsb2I+O1xuICAgIHB1YmxpYyBnZXRJY29uKGZpbGVuYW1lOiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxCbG9iPj47XG4gICAgcHVibGljIGdldEljb24oZmlsZW5hbWU6IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxCbG9iPj47XG4gICAgcHVibGljIGdldEljb24oZmlsZW5hbWU6IHN0cmluZywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICAgICAgaWYgKGZpbGVuYW1lID09PSBudWxsIHx8IGZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZpbGVuYW1lIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0SWNvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdpbWFnZS9zdmcreG1sJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3QoJ2dldCcsYCR7dGhpcy5iYXNlUGF0aH0vaWNvbi8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoZmlsZW5hbWUpKX1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdXNjYXIgbGlzdGEgZGUgcGVyZmlzXG4gICAgICogXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFBlcmZpcyhvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEFycmF5PFBlcmZpbERUTz4+O1xuICAgIHB1YmxpYyBnZXRQZXJmaXMob2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PFBlcmZpbERUTz4+PjtcbiAgICBwdWJsaWMgZ2V0UGVyZmlzKG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QXJyYXk8UGVyZmlsRFRPPj4+O1xuICAgIHB1YmxpYyBnZXRQZXJmaXMob2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxBcnJheTxQZXJmaWxEVE8+PignZ2V0JyxgJHt0aGlzLmJhc2VQYXRofS9hZG1pbi9wZXJmaXNgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVzY2FyIGxpc3RhIGRlIHByb3ByaWVhZGVzIGRhcyBjYW1hZGFzIGUgc3VhcyBjb25maWd1cmHDp8O1ZXMuXG4gICAgICogXG4gICAgICogQHBhcmFtIGlkIFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQcm9wcmllZGFkZXNDYW1hZGEoaWQ6IHN0cmluZywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxBcnJheTxDYW1hZGFQcm9wcmllZGFkZURUTz4+O1xuICAgIHB1YmxpYyBnZXRQcm9wcmllZGFkZXNDYW1hZGEoaWQ6IHN0cmluZywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PENhbWFkYVByb3ByaWVkYWRlRFRPPj4+O1xuICAgIHB1YmxpYyBnZXRQcm9wcmllZGFkZXNDYW1hZGEoaWQ6IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcnJheTxDYW1hZGFQcm9wcmllZGFkZURUTz4+PjtcbiAgICBwdWJsaWMgZ2V0UHJvcHJpZWRhZGVzQ2FtYWRhKGlkOiBzdHJpbmcsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgICAgIGlmIChpZCA9PT0gbnVsbCB8fCBpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFByb3ByaWVkYWRlc0NhbWFkYS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZW5jb2RlcjogbmV3IEN1c3RvbUh0dHBVcmxFbmNvZGluZ0NvZGVjKCl9KTtcbiAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgaWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ2lkJywgPGFueT5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgaWYgKGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFycmF5PENhbWFkYVByb3ByaWVkYWRlRFRPPj4oJ2dldCcsYCR7dGhpcy5iYXNlUGF0aH0vY2FtYWRhL3Byb3ByaWVkYWRlc2AsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdXNjYXIgbGlzdGEgZGUgdXN1w6FyaW9zIGRhIGFwbGljYcOnw6NvXG4gICAgICogXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFVzdWFyaW9zKG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8QXJyYXk8VXN1YXJpb0RUTz4+O1xuICAgIHB1YmxpYyBnZXRVc3VhcmlvcyhvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXk8VXN1YXJpb0RUTz4+PjtcbiAgICBwdWJsaWMgZ2V0VXN1YXJpb3Mob2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcnJheTxVc3VhcmlvRFRPPj4+O1xuICAgIHB1YmxpYyBnZXRVc3VhcmlvcyhvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgaWYgKGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEFycmF5PFVzdWFyaW9EVE8+PignZ2V0JyxgJHt0aGlzLmJhc2VQYXRofS9hZG1pbi91c3Vhcmlvc2AsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2NhbGl6YcOnw6NvIHBvciB1bmlkYWRlIGdlb2dyw6FmaWNhLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBib2R5IFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsb2NhbGl6YXJVbmlkYWRlR2VvKGJvZHk6IExvY2FsaXphclVuaWRhZGVHZW9EVE8sIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8QXJyYXk8UmVzdWx0YWRvVW5pZGFkZUdlb0RUTz4+O1xuICAgIHB1YmxpYyBsb2NhbGl6YXJVbmlkYWRlR2VvKGJvZHk6IExvY2FsaXphclVuaWRhZGVHZW9EVE8sIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxSZXN1bHRhZG9VbmlkYWRlR2VvRFRPPj4+O1xuICAgIHB1YmxpYyBsb2NhbGl6YXJVbmlkYWRlR2VvKGJvZHk6IExvY2FsaXphclVuaWRhZGVHZW9EVE8sIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QXJyYXk8UmVzdWx0YWRvVW5pZGFkZUdlb0RUTz4+PjtcbiAgICBwdWJsaWMgbG9jYWxpemFyVW5pZGFkZUdlbyhib2R5OiBMb2NhbGl6YXJVbmlkYWRlR2VvRFRPLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGJvZHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBsb2NhbGl6YXJVbmlkYWRlR2VvLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxBcnJheTxSZXN1bHRhZG9VbmlkYWRlR2VvRFRPPj4oJ3Bvc3QnLGAke3RoaXMuYmFzZVBhdGh9L2xvY2FsaXphcmAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3h5IHBhcmEgcmVxdWlzacOnw7VlcyBHRVQgYW8gR2VvU2VydmVyLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB1cmwgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHByb3h5KHVybDogc3RyaW5nLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEJsb2I+O1xuICAgIHB1YmxpYyBwcm94eSh1cmw6IHN0cmluZywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEJsb2I+PjtcbiAgICBwdWJsaWMgcHJveHkodXJsOiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8QmxvYj4+O1xuICAgIHB1YmxpYyBwcm94eSh1cmw6IHN0cmluZywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICAgICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdXJsIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcHJveHkuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IG5ldyBDdXN0b21IdHRwVXJsRW5jb2RpbmdDb2RlYygpfSk7XG4gICAgICAgIGlmICh1cmwgIT09IHVuZGVmaW5lZCAmJiB1cmwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3VybCcsIDxhbnk+dXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdCgnZ2V0JyxgJHt0aGlzLmJhc2VQYXRofS9wcm94eWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhbHZhciB1c3XDoXJpbyBuYSBhcGxpY2HDp8Ojb1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBib2R5IFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRVc3VhcmlvKGJvZHk6IFVzdWFyaW9EVE8sIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHVibGljIHNldFVzdWFyaW8oYm9keTogVXN1YXJpb0RUTywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGJvb2xlYW4+PjtcbiAgICBwdWJsaWMgc2V0VXN1YXJpbyhib2R5OiBVc3VhcmlvRFRPLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGJvb2xlYW4+PjtcbiAgICBwdWJsaWMgc2V0VXN1YXJpbyhib2R5OiBVc3VhcmlvRFRPLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGJvZHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBzZXRVc3VhcmlvLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxib29sZWFuPigncG9zdCcsYCR7dGhpcy5iYXNlUGF0aH0vYWRtaW4vdXN1YXJpb2AsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXN1YXJpb0RUTy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL21vZGVsL3VzdWFyaW9EVE8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VvU2FuamEgQVBJXG4gKiBBUEkgcGFyYSBBcGxpY2HDp8OjbyBHZW9TYW5qYVxuICpcbiAqIE9wZW5BUEkgc3BlYyB2ZXJzaW9uOiAxLjIuOFxuICogQ29udGFjdDogY2xhdWRpby5ib2dvc3NpYW5AZ21haWwuY29tXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxuICogaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItY29kZWdlbi5naXRcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuaW1wb3J0IHsgUGVyZmlsRFRPIH0gZnJvbSAnLi9wZXJmaWxEVE8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzdWFyaW9EVE8geyBcbiAgICBpZDogbnVtYmVyO1xuICAgIGNwZjogbnVtYmVyO1xuICAgIG5vbWU6IHN0cmluZztcbiAgICBlbWFpbD86IHN0cmluZztcbiAgICB0ZWxlZm9uZT86IG51bWJlcjtcbiAgICBwZXJmaXM/OiBBcnJheTxQZXJmaWxEVE8+O1xufSJdfQ==
|
|
@@ -131,6 +131,35 @@ class DefaultService {
|
|
|
131
131
|
}
|
|
132
132
|
return false;
|
|
133
133
|
}
|
|
134
|
+
deleteUsuario(body, observe = 'body', reportProgress = false) {
|
|
135
|
+
if (body === null || body === undefined) {
|
|
136
|
+
throw new Error('Required parameter body was null or undefined when calling deleteUsuario.');
|
|
137
|
+
}
|
|
138
|
+
let headers = this.defaultHeaders;
|
|
139
|
+
// to determine the Accept header
|
|
140
|
+
let httpHeaderAccepts = [
|
|
141
|
+
'application/json'
|
|
142
|
+
];
|
|
143
|
+
const httpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
144
|
+
if (httpHeaderAcceptSelected != undefined) {
|
|
145
|
+
headers = headers.set('Accept', httpHeaderAcceptSelected);
|
|
146
|
+
}
|
|
147
|
+
// to determine the Content-Type header
|
|
148
|
+
const consumes = [
|
|
149
|
+
'application/json'
|
|
150
|
+
];
|
|
151
|
+
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
152
|
+
if (httpContentTypeSelected != undefined) {
|
|
153
|
+
headers = headers.set('Content-Type', httpContentTypeSelected);
|
|
154
|
+
}
|
|
155
|
+
return this.httpClient.request('delete', `${this.basePath}/admin/usuario`, {
|
|
156
|
+
body: body,
|
|
157
|
+
withCredentials: this.configuration.withCredentials,
|
|
158
|
+
headers: headers,
|
|
159
|
+
observe: observe,
|
|
160
|
+
reportProgress: reportProgress
|
|
161
|
+
});
|
|
162
|
+
}
|
|
134
163
|
downloadCamada(layerId, format, observe = 'body', reportProgress = false) {
|
|
135
164
|
if (layerId === null || layerId === undefined) {
|
|
136
165
|
throw new Error('Required parameter layerId was null or undefined when calling downloadCamada.');
|
|
@@ -514,6 +543,35 @@ class DefaultService {
|
|
|
514
543
|
reportProgress: reportProgress
|
|
515
544
|
});
|
|
516
545
|
}
|
|
546
|
+
setUsuario(body, observe = 'body', reportProgress = false) {
|
|
547
|
+
if (body === null || body === undefined) {
|
|
548
|
+
throw new Error('Required parameter body was null or undefined when calling setUsuario.');
|
|
549
|
+
}
|
|
550
|
+
let headers = this.defaultHeaders;
|
|
551
|
+
// to determine the Accept header
|
|
552
|
+
let httpHeaderAccepts = [
|
|
553
|
+
'application/json'
|
|
554
|
+
];
|
|
555
|
+
const httpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
556
|
+
if (httpHeaderAcceptSelected != undefined) {
|
|
557
|
+
headers = headers.set('Accept', httpHeaderAcceptSelected);
|
|
558
|
+
}
|
|
559
|
+
// to determine the Content-Type header
|
|
560
|
+
const consumes = [
|
|
561
|
+
'application/json'
|
|
562
|
+
];
|
|
563
|
+
const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
|
|
564
|
+
if (httpContentTypeSelected != undefined) {
|
|
565
|
+
headers = headers.set('Content-Type', httpContentTypeSelected);
|
|
566
|
+
}
|
|
567
|
+
return this.httpClient.request('post', `${this.basePath}/admin/usuario`, {
|
|
568
|
+
body: body,
|
|
569
|
+
withCredentials: this.configuration.withCredentials,
|
|
570
|
+
headers: headers,
|
|
571
|
+
observe: observe,
|
|
572
|
+
reportProgress: reportProgress
|
|
573
|
+
});
|
|
574
|
+
}
|
|
517
575
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DefaultService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
518
576
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DefaultService, providedIn: 'root' });
|
|
519
577
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geosanja-geosanja-frontend-api.mjs","sources":["../../encoder.ts","../../variables.ts","../../configuration.ts","../../api/default.service.ts","../../api/api.ts","../../model/camadaCustomAttributeDTO.ts","../../model/camadaPropriedadeValorPadraoDTO.ts","../../model/camadaToolDTO.ts","../../model/editAttributesDTOAttributes.ts","../../model/exportPDFDTO.ts","../../model/localizarUnidadeGeoDTOParametros.ts","../../model/perfilDTO.ts","../../model/resultadoUnidadeGeoDTO.ts","../../api.module.ts","../../geosanja-geosanja-frontend-api.ts"],"sourcesContent":[" import { HttpUrlEncodingCodec } from '@angular/common/http';\n\n/**\n* CustomHttpUrlEncodingCodec\n* Fix plus sign (+) not encoding, so sent as blank space\n* See: https://github.com/angular/angular/issues/11058#issuecomment-247367318\n*/\nexport class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {\n override encodeKey(k: string): string {\n k = super.encodeKey(k);\n return k.replace(/\\+/gi, '%2B');\n }\n override encodeValue(v: string): string {\n v = super.encodeValue(v);\n return v.replace(/\\+/gi, '%2B');\n }\n}\n\n","import { InjectionToken } from '@angular/core';\n\nexport const BASE_PATH = new InjectionToken<string>('basePath');\nexport const COLLECTION_FORMATS = {\n 'csv': ',',\n 'tsv': ' ',\n 'ssv': ' ',\n 'pipes': '|'\n}\n","export interface ConfigurationParameters {\n apiKeys?: {[ key: string ]: string};\n username?: string;\n password?: string;\n accessToken?: string | (() => string);\n basePath?: string;\n withCredentials?: boolean;\n}\n\nexport class Configuration {\n apiKeys?: {[ key: string ]: string};\n username?: string;\n password?: string;\n accessToken?: string | (() => string);\n basePath?: string;\n withCredentials?: boolean;\n\n constructor(configurationParameters: ConfigurationParameters = {}) {\n this.apiKeys = configurationParameters.apiKeys;\n this.username = configurationParameters.username;\n this.password = configurationParameters.password;\n this.accessToken = configurationParameters.accessToken;\n this.basePath = configurationParameters.basePath;\n this.withCredentials = configurationParameters.withCredentials;\n }\n\n /**\n * Select the correct content-type to use for a request.\n * Uses {@link Configuration#isJsonMime} to determine the correct content-type.\n * If no content type is found return the first found type if the contentTypes is not empty\n * @param contentTypes - the array of content types that are available for selection\n * @returns the selected content-type or <code>undefined</code> if no selection could be made.\n */\n public selectHeaderContentType (contentTypes: string[]): string | undefined {\n if (contentTypes.length == 0) {\n return undefined;\n }\n\n let type = contentTypes.find(x => this.isJsonMime(x));\n if (type === undefined) {\n return contentTypes[0];\n }\n return type;\n }\n\n /**\n * Select the correct accept content-type to use for a request.\n * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type.\n * If no content type is found return the first found type if the contentTypes is not empty\n * @param accepts - the array of content types that are available for selection.\n * @returns the selected content-type or <code>undefined</code> if no selection could be made.\n */\n public selectHeaderAccept(accepts: string[]): string | undefined {\n if (accepts.length == 0) {\n return undefined;\n }\n\n let type = accepts.find(x => this.isJsonMime(x));\n if (type === undefined) {\n return accepts[0];\n }\n return type;\n }\n\n /**\n * Check if the given MIME is a JSON MIME.\n * JSON MIME examples:\n * application/json\n * application/json; charset=UTF8\n * APPLICATION/JSON\n * application/vnd.company+json\n * @param mime - MIME (Multipurpose Internet Mail Extensions)\n * @return True if the given MIME is JSON, false otherwise.\n */\n public isJsonMime(mime: string): boolean {\n const jsonMime: RegExp = new RegExp('^(application\\/json|[^;/ \\t]+\\/[^;/ \\t]+[+]json)[ \\t]*(;.*)?$', 'i');\n return mime != null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');\n }\n}\n","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n *//* tslint:disable:no-unused-variable member-ordering */\n\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams,\n HttpResponse, HttpEvent } from '@angular/common/http';\nimport { CustomHttpUrlEncodingCodec } from '../encoder';\n\nimport { Observable } from 'rxjs';\n\nimport { CamadaPropriedadeDTO } from '../model/camadaPropriedadeDTO';\nimport { EditAttributesDTO } from '../model/editAttributesDTO';\nimport { GrupoCamadaDTO } from '../model/grupoCamadaDTO';\nimport { LocalizarUnidadeGeoDTO } from '../model/localizarUnidadeGeoDTO';\nimport { PerfilDTO } from '../model/perfilDTO';\nimport { ResultadoUnidadeGeoDTO } from '../model/resultadoUnidadeGeoDTO';\nimport { UsuarioDTO } from '../model/usuarioDTO';\n\nimport { BASE_PATH, COLLECTION_FORMATS } from '../variables';\nimport { Configuration } from '../configuration';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DefaultService {\n\n protected basePath = '/';\n public defaultHeaders = new HttpHeaders();\n public configuration = new Configuration();\n\n constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) {\n if (basePath) {\n this.basePath = basePath;\n }\n if (configuration) {\n this.configuration = configuration;\n this.basePath = basePath || configuration.basePath || this.basePath;\n }\n }\n\n /**\n * @param consumes string[] mime-types\n * @return true: consumes contains 'multipart/form-data', false: otherwise\n */\n private canConsumeForm(consumes: string[]): boolean {\n const form = 'multipart/form-data';\n for (const consume of consumes) {\n if (form === consume) {\n return true;\n }\n }\n return false;\n }\n\n\n /**\n * Download de camadas e grupo de camadas do GeoServer.\n * \n * @param layerId \n * @param format \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public downloadCamada(layerId: string, format: string, observe?: 'body', reportProgress?: boolean): Observable<Blob>;\n public downloadCamada(layerId: string, format: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Blob>>;\n public downloadCamada(layerId: string, format: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Blob>>;\n public downloadCamada(layerId: string, format: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (layerId === null || layerId === undefined) {\n throw new Error('Required parameter layerId was null or undefined when calling downloadCamada.');\n }\n\n if (format === null || format === undefined) {\n throw new Error('Required parameter format was null or undefined when calling downloadCamada.');\n }\n\n let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n if (layerId !== undefined && layerId !== null) {\n queryParameters = queryParameters.set('layerId', <any>layerId);\n }\n if (format !== undefined && format !== null) {\n queryParameters = queryParameters.set('format', <any>format);\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/octet-stream'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request('get',`${this.basePath}/download/camada`,\n {\n params: queryParameters,\n responseType: \"blob\",\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Edição dos atributos de camada.\n * \n * @param body \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public editAttributes(body?: EditAttributesDTO, observe?: 'body', reportProgress?: boolean): Observable<string>;\n public editAttributes(body?: EditAttributesDTO, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<string>>;\n public editAttributes(body?: EditAttributesDTO, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<string>>;\n public editAttributes(body?: EditAttributesDTO, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n 'application/json'\n ];\n const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes);\n if (httpContentTypeSelected != undefined) {\n headers = headers.set('Content-Type', httpContentTypeSelected);\n }\n\n return this.httpClient.request<string>('post',`${this.basePath}/edit/attributes`,\n {\n body: body,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Serviço para exportar o mapa e legendas para PDF.\n * \n * @param pdfHeader \n * @param pdfFooter \n * @param pdfLegends \n * @param pdfMap \n * @param pdfFormat \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public exportPDFForm(pdfHeader?: string, pdfFooter?: string, pdfLegends?: string, pdfMap?: Blob, pdfFormat?: string, observe?: 'body', reportProgress?: boolean): Observable<Blob>;\n public exportPDFForm(pdfHeader?: string, pdfFooter?: string, pdfLegends?: string, pdfMap?: Blob, pdfFormat?: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Blob>>;\n public exportPDFForm(pdfHeader?: string, pdfFooter?: string, pdfLegends?: string, pdfMap?: Blob, pdfFormat?: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Blob>>;\n public exportPDFForm(pdfHeader?: string, pdfFooter?: string, pdfLegends?: string, pdfMap?: Blob, pdfFormat?: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n\n\n\n\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/octet-stream'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n 'multipart/form-data'\n ];\n\n const canConsumeForm = this.canConsumeForm(consumes);\n\n let formParams: { append(param: string, value: any): void; };\n let useForm = false;\n let convertFormParamsToString = false;\n // use FormData to transmit files using content-type \"multipart/form-data\"\n // see https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data\n useForm = canConsumeForm;\n if (useForm) {\n formParams = new FormData();\n } else {\n formParams = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n }\n\n if (pdfHeader !== undefined) {\n formParams = formParams.append('pdfHeader', <any>pdfHeader) as any || formParams;\n }\n if (pdfFooter !== undefined) {\n formParams = formParams.append('pdfFooter', <any>pdfFooter) as any || formParams;\n }\n if (pdfLegends !== undefined) {\n formParams = formParams.append('pdfLegends', <any>pdfLegends) as any || formParams;\n }\n if (pdfMap !== undefined) {\n formParams = formParams.append('pdfMap', <any>pdfMap) as any || formParams;\n }\n if (pdfFormat !== undefined) {\n formParams = formParams.append('pdfFormat', <any>pdfFormat) as any || formParams;\n }\n\n return this.httpClient.request('post',`${this.basePath}/export/pdf`,\n {\n body: convertFormParamsToString ? formParams.toString() : formParams,\n responseType: \"blob\",\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar lista de camadas.\n * \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getCamadas(observe?: 'body', reportProgress?: boolean): Observable<Array<GrupoCamadaDTO>>;\n public getCamadas(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<GrupoCamadaDTO>>>;\n public getCamadas(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<GrupoCamadaDTO>>>;\n public getCamadas(observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<Array<GrupoCamadaDTO>>('get',`${this.basePath}/camadas`,\n {\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar lista de usuários do esjc\n * \n * @param cpf \n * @param nome \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getESJCUsuarios(cpf?: number, nome?: string, observe?: 'body', reportProgress?: boolean): Observable<Array<UsuarioDTO>>;\n public getESJCUsuarios(cpf?: number, nome?: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<UsuarioDTO>>>;\n public getESJCUsuarios(cpf?: number, nome?: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<UsuarioDTO>>>;\n public getESJCUsuarios(cpf?: number, nome?: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n\n\n let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n if (cpf !== undefined && cpf !== null) {\n queryParameters = queryParameters.set('cpf', <any>cpf);\n }\n if (nome !== undefined && nome !== null) {\n queryParameters = queryParameters.set('nome', <any>nome);\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<Array<UsuarioDTO>>('get',`${this.basePath}/admin/esjc/usuarios`,\n {\n params: queryParameters,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar informações de camadas e grupos de camadas por apontamento.\n * \n * @param srs \n * @param version \n * @param bbox \n * @param height \n * @param width \n * @param layers \n * @param queryLayers \n * @param infoFormat \n * @param x \n * @param y \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getFeatureInfo(srs: string, version: string, bbox: string, height: string, width: string, layers: string, queryLayers: string, infoFormat: string, x: string, y: string, observe?: 'body', reportProgress?: boolean): Observable<string>;\n public getFeatureInfo(srs: string, version: string, bbox: string, height: string, width: string, layers: string, queryLayers: string, infoFormat: string, x: string, y: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<string>>;\n public getFeatureInfo(srs: string, version: string, bbox: string, height: string, width: string, layers: string, queryLayers: string, infoFormat: string, x: string, y: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<string>>;\n public getFeatureInfo(srs: string, version: string, bbox: string, height: string, width: string, layers: string, queryLayers: string, infoFormat: string, x: string, y: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (srs === null || srs === undefined) {\n throw new Error('Required parameter srs was null or undefined when calling getFeatureInfo.');\n }\n\n if (version === null || version === undefined) {\n throw new Error('Required parameter version was null or undefined when calling getFeatureInfo.');\n }\n\n if (bbox === null || bbox === undefined) {\n throw new Error('Required parameter bbox was null or undefined when calling getFeatureInfo.');\n }\n\n if (height === null || height === undefined) {\n throw new Error('Required parameter height was null or undefined when calling getFeatureInfo.');\n }\n\n if (width === null || width === undefined) {\n throw new Error('Required parameter width was null or undefined when calling getFeatureInfo.');\n }\n\n if (layers === null || layers === undefined) {\n throw new Error('Required parameter layers was null or undefined when calling getFeatureInfo.');\n }\n\n if (queryLayers === null || queryLayers === undefined) {\n throw new Error('Required parameter queryLayers was null or undefined when calling getFeatureInfo.');\n }\n\n if (infoFormat === null || infoFormat === undefined) {\n throw new Error('Required parameter infoFormat was null or undefined when calling getFeatureInfo.');\n }\n\n if (x === null || x === undefined) {\n throw new Error('Required parameter x was null or undefined when calling getFeatureInfo.');\n }\n\n if (y === null || y === undefined) {\n throw new Error('Required parameter y was null or undefined when calling getFeatureInfo.');\n }\n\n let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n if (srs !== undefined && srs !== null) {\n queryParameters = queryParameters.set('srs', <any>srs);\n }\n if (version !== undefined && version !== null) {\n queryParameters = queryParameters.set('version', <any>version);\n }\n if (bbox !== undefined && bbox !== null) {\n queryParameters = queryParameters.set('bbox', <any>bbox);\n }\n if (height !== undefined && height !== null) {\n queryParameters = queryParameters.set('height', <any>height);\n }\n if (width !== undefined && width !== null) {\n queryParameters = queryParameters.set('width', <any>width);\n }\n if (layers !== undefined && layers !== null) {\n queryParameters = queryParameters.set('layers', <any>layers);\n }\n if (queryLayers !== undefined && queryLayers !== null) {\n queryParameters = queryParameters.set('query_layers', <any>queryLayers);\n }\n if (infoFormat !== undefined && infoFormat !== null) {\n queryParameters = queryParameters.set('info_format', <any>infoFormat);\n }\n if (x !== undefined && x !== null) {\n queryParameters = queryParameters.set('x', <any>x);\n }\n if (y !== undefined && y !== null) {\n queryParameters = queryParameters.set('y', <any>y);\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<string>('get',`${this.basePath}/featureinfo`,\n {\n params: queryParameters,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Busca icone\n * \n * @param filename \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getIcon(filename: string, observe?: 'body', reportProgress?: boolean): Observable<Blob>;\n public getIcon(filename: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Blob>>;\n public getIcon(filename: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Blob>>;\n public getIcon(filename: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (filename === null || filename === undefined) {\n throw new Error('Required parameter filename was null or undefined when calling getIcon.');\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'image/svg+xml'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request('get',`${this.basePath}/icon/${encodeURIComponent(String(filename))}`,\n {\n responseType: \"blob\",\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar lista de perfis\n * \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getPerfis(observe?: 'body', reportProgress?: boolean): Observable<Array<PerfilDTO>>;\n public getPerfis(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<PerfilDTO>>>;\n public getPerfis(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<PerfilDTO>>>;\n public getPerfis(observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<Array<PerfilDTO>>('get',`${this.basePath}/admin/perfis`,\n {\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar lista de proprieades das camadas e suas configurações.\n * \n * @param id \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getPropriedadesCamada(id: string, observe?: 'body', reportProgress?: boolean): Observable<Array<CamadaPropriedadeDTO>>;\n public getPropriedadesCamada(id: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<CamadaPropriedadeDTO>>>;\n public getPropriedadesCamada(id: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<CamadaPropriedadeDTO>>>;\n public getPropriedadesCamada(id: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (id === null || id === undefined) {\n throw new Error('Required parameter id was null or undefined when calling getPropriedadesCamada.');\n }\n\n let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n if (id !== undefined && id !== null) {\n queryParameters = queryParameters.set('id', <any>id);\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<Array<CamadaPropriedadeDTO>>('get',`${this.basePath}/camada/propriedades`,\n {\n params: queryParameters,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar lista de usuários da aplicação\n * \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getUsuarios(observe?: 'body', reportProgress?: boolean): Observable<Array<UsuarioDTO>>;\n public getUsuarios(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<UsuarioDTO>>>;\n public getUsuarios(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<UsuarioDTO>>>;\n public getUsuarios(observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<Array<UsuarioDTO>>('get',`${this.basePath}/admin/usuarios`,\n {\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Localização por unidade geográfica.\n * \n * @param body \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public localizarUnidadeGeo(body: LocalizarUnidadeGeoDTO, observe?: 'body', reportProgress?: boolean): Observable<Array<ResultadoUnidadeGeoDTO>>;\n public localizarUnidadeGeo(body: LocalizarUnidadeGeoDTO, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<ResultadoUnidadeGeoDTO>>>;\n public localizarUnidadeGeo(body: LocalizarUnidadeGeoDTO, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<ResultadoUnidadeGeoDTO>>>;\n public localizarUnidadeGeo(body: LocalizarUnidadeGeoDTO, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (body === null || body === undefined) {\n throw new Error('Required parameter body was null or undefined when calling localizarUnidadeGeo.');\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n 'application/json'\n ];\n const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes);\n if (httpContentTypeSelected != undefined) {\n headers = headers.set('Content-Type', httpContentTypeSelected);\n }\n\n return this.httpClient.request<Array<ResultadoUnidadeGeoDTO>>('post',`${this.basePath}/localizar`,\n {\n body: body,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Proxy para requisições GET ao GeoServer.\n * \n * @param url \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public proxy(url: string, observe?: 'body', reportProgress?: boolean): Observable<Blob>;\n public proxy(url: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Blob>>;\n public proxy(url: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Blob>>;\n public proxy(url: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (url === null || url === undefined) {\n throw new Error('Required parameter url was null or undefined when calling proxy.');\n }\n\n let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n if (url !== undefined && url !== null) {\n queryParameters = queryParameters.set('url', <any>url);\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/octet-stream'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request('get',`${this.basePath}/proxy`,\n {\n params: queryParameters,\n responseType: \"blob\",\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n}\n","export * from './default.service';\nimport { DefaultService } from './default.service';\nexport const APIS = [DefaultService];\n","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface CamadaCustomAttributeDTO { \n id?: number;\n attribute?: string;\n valor?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface CamadaPropriedadeValorPadraoDTO { \n id?: number;\n geoserverId?: string;\n campo?: string;\n valor?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface CamadaToolDTO { \n id?: number;\n toolId?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface EditAttributesDTOAttributes { \n key?: string;\n value?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface ExportPDFDTO { \n pdfHeader?: string;\n pdfFooter?: string;\n pdfLegends?: string;\n pdfMap: Blob;\n pdfFormat: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface LocalizarUnidadeGeoDTOParametros { \n name?: string;\n value?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface PerfilDTO { \n id: number;\n nome?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface ResultadoUnidadeGeoDTO { \n camadaId?: number;\n data?: any;\n}","import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core';\nimport { Configuration } from './configuration';\nimport { HttpClient } from '@angular/common/http';\n\n\nimport { DefaultService } from './api/default.service';\n\n@NgModule({\n imports: [],\n declarations: [],\n exports: [],\n providers: [\n DefaultService ]\n})\nexport class ApiModule {\n public static forRoot(configurationFactory: () => Configuration): ModuleWithProviders<ApiModule> {\n return {\n ngModule: ApiModule,\n providers: [ { provide: Configuration, useFactory: configurationFactory } ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: ApiModule,\n @Optional() http: HttpClient) {\n if (parentModule) {\n throw new Error('ApiModule is already loaded. Import in your base AppModule only.');\n }\n if (!http) {\n throw new Error('You need to import the HttpClientModule in your AppModule! \\n' +\n 'See also https://github.com/angular/angular/issues/20575');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.Configuration"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"geosanja-geosanja-frontend-api.mjs","sources":["../../encoder.ts","../../variables.ts","../../configuration.ts","../../api/default.service.ts","../../api/api.ts","../../model/camadaCustomAttributeDTO.ts","../../model/camadaPropriedadeValorPadraoDTO.ts","../../model/camadaToolDTO.ts","../../model/editAttributesDTOAttributes.ts","../../model/exportPDFDTO.ts","../../model/localizarUnidadeGeoDTOParametros.ts","../../model/perfilDTO.ts","../../model/resultadoUnidadeGeoDTO.ts","../../api.module.ts","../../geosanja-geosanja-frontend-api.ts"],"sourcesContent":[" import { HttpUrlEncodingCodec } from '@angular/common/http';\n\n/**\n* CustomHttpUrlEncodingCodec\n* Fix plus sign (+) not encoding, so sent as blank space\n* See: https://github.com/angular/angular/issues/11058#issuecomment-247367318\n*/\nexport class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {\n override encodeKey(k: string): string {\n k = super.encodeKey(k);\n return k.replace(/\\+/gi, '%2B');\n }\n override encodeValue(v: string): string {\n v = super.encodeValue(v);\n return v.replace(/\\+/gi, '%2B');\n }\n}\n\n","import { InjectionToken } from '@angular/core';\n\nexport const BASE_PATH = new InjectionToken<string>('basePath');\nexport const COLLECTION_FORMATS = {\n 'csv': ',',\n 'tsv': ' ',\n 'ssv': ' ',\n 'pipes': '|'\n}\n","export interface ConfigurationParameters {\n apiKeys?: {[ key: string ]: string};\n username?: string;\n password?: string;\n accessToken?: string | (() => string);\n basePath?: string;\n withCredentials?: boolean;\n}\n\nexport class Configuration {\n apiKeys?: {[ key: string ]: string};\n username?: string;\n password?: string;\n accessToken?: string | (() => string);\n basePath?: string;\n withCredentials?: boolean;\n\n constructor(configurationParameters: ConfigurationParameters = {}) {\n this.apiKeys = configurationParameters.apiKeys;\n this.username = configurationParameters.username;\n this.password = configurationParameters.password;\n this.accessToken = configurationParameters.accessToken;\n this.basePath = configurationParameters.basePath;\n this.withCredentials = configurationParameters.withCredentials;\n }\n\n /**\n * Select the correct content-type to use for a request.\n * Uses {@link Configuration#isJsonMime} to determine the correct content-type.\n * If no content type is found return the first found type if the contentTypes is not empty\n * @param contentTypes - the array of content types that are available for selection\n * @returns the selected content-type or <code>undefined</code> if no selection could be made.\n */\n public selectHeaderContentType (contentTypes: string[]): string | undefined {\n if (contentTypes.length == 0) {\n return undefined;\n }\n\n let type = contentTypes.find(x => this.isJsonMime(x));\n if (type === undefined) {\n return contentTypes[0];\n }\n return type;\n }\n\n /**\n * Select the correct accept content-type to use for a request.\n * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type.\n * If no content type is found return the first found type if the contentTypes is not empty\n * @param accepts - the array of content types that are available for selection.\n * @returns the selected content-type or <code>undefined</code> if no selection could be made.\n */\n public selectHeaderAccept(accepts: string[]): string | undefined {\n if (accepts.length == 0) {\n return undefined;\n }\n\n let type = accepts.find(x => this.isJsonMime(x));\n if (type === undefined) {\n return accepts[0];\n }\n return type;\n }\n\n /**\n * Check if the given MIME is a JSON MIME.\n * JSON MIME examples:\n * application/json\n * application/json; charset=UTF8\n * APPLICATION/JSON\n * application/vnd.company+json\n * @param mime - MIME (Multipurpose Internet Mail Extensions)\n * @return True if the given MIME is JSON, false otherwise.\n */\n public isJsonMime(mime: string): boolean {\n const jsonMime: RegExp = new RegExp('^(application\\/json|[^;/ \\t]+\\/[^;/ \\t]+[+]json)[ \\t]*(;.*)?$', 'i');\n return mime != null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');\n }\n}\n","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n *//* tslint:disable:no-unused-variable member-ordering */\n\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams,\n HttpResponse, HttpEvent } from '@angular/common/http';\nimport { CustomHttpUrlEncodingCodec } from '../encoder';\n\nimport { Observable } from 'rxjs';\n\nimport { CamadaPropriedadeDTO } from '../model/camadaPropriedadeDTO';\nimport { EditAttributesDTO } from '../model/editAttributesDTO';\nimport { GrupoCamadaDTO } from '../model/grupoCamadaDTO';\nimport { LocalizarUnidadeGeoDTO } from '../model/localizarUnidadeGeoDTO';\nimport { PerfilDTO } from '../model/perfilDTO';\nimport { ResultadoUnidadeGeoDTO } from '../model/resultadoUnidadeGeoDTO';\nimport { UsuarioDTO } from '../model/usuarioDTO';\n\nimport { BASE_PATH, COLLECTION_FORMATS } from '../variables';\nimport { Configuration } from '../configuration';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DefaultService {\n\n protected basePath = '/';\n public defaultHeaders = new HttpHeaders();\n public configuration = new Configuration();\n\n constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string, @Optional() configuration: Configuration) {\n if (basePath) {\n this.basePath = basePath;\n }\n if (configuration) {\n this.configuration = configuration;\n this.basePath = basePath || configuration.basePath || this.basePath;\n }\n }\n\n /**\n * @param consumes string[] mime-types\n * @return true: consumes contains 'multipart/form-data', false: otherwise\n */\n private canConsumeForm(consumes: string[]): boolean {\n const form = 'multipart/form-data';\n for (const consume of consumes) {\n if (form === consume) {\n return true;\n }\n }\n return false;\n }\n\n\n /**\n * Delete usuário da aplicação\n * \n * @param body \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public deleteUsuario(body: UsuarioDTO, observe?: 'body', reportProgress?: boolean): Observable<boolean>;\n public deleteUsuario(body: UsuarioDTO, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<boolean>>;\n public deleteUsuario(body: UsuarioDTO, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<boolean>>;\n public deleteUsuario(body: UsuarioDTO, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (body === null || body === undefined) {\n throw new Error('Required parameter body was null or undefined when calling deleteUsuario.');\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n 'application/json'\n ];\n const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes);\n if (httpContentTypeSelected != undefined) {\n headers = headers.set('Content-Type', httpContentTypeSelected);\n }\n\n return this.httpClient.request<boolean>('delete',`${this.basePath}/admin/usuario`,\n {\n body: body,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Download de camadas e grupo de camadas do GeoServer.\n * \n * @param layerId \n * @param format \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public downloadCamada(layerId: string, format: string, observe?: 'body', reportProgress?: boolean): Observable<Blob>;\n public downloadCamada(layerId: string, format: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Blob>>;\n public downloadCamada(layerId: string, format: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Blob>>;\n public downloadCamada(layerId: string, format: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (layerId === null || layerId === undefined) {\n throw new Error('Required parameter layerId was null or undefined when calling downloadCamada.');\n }\n\n if (format === null || format === undefined) {\n throw new Error('Required parameter format was null or undefined when calling downloadCamada.');\n }\n\n let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n if (layerId !== undefined && layerId !== null) {\n queryParameters = queryParameters.set('layerId', <any>layerId);\n }\n if (format !== undefined && format !== null) {\n queryParameters = queryParameters.set('format', <any>format);\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/octet-stream'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request('get',`${this.basePath}/download/camada`,\n {\n params: queryParameters,\n responseType: \"blob\",\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Edição dos atributos de camada.\n * \n * @param body \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public editAttributes(body?: EditAttributesDTO, observe?: 'body', reportProgress?: boolean): Observable<string>;\n public editAttributes(body?: EditAttributesDTO, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<string>>;\n public editAttributes(body?: EditAttributesDTO, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<string>>;\n public editAttributes(body?: EditAttributesDTO, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n 'application/json'\n ];\n const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes);\n if (httpContentTypeSelected != undefined) {\n headers = headers.set('Content-Type', httpContentTypeSelected);\n }\n\n return this.httpClient.request<string>('post',`${this.basePath}/edit/attributes`,\n {\n body: body,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Serviço para exportar o mapa e legendas para PDF.\n * \n * @param pdfHeader \n * @param pdfFooter \n * @param pdfLegends \n * @param pdfMap \n * @param pdfFormat \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public exportPDFForm(pdfHeader?: string, pdfFooter?: string, pdfLegends?: string, pdfMap?: Blob, pdfFormat?: string, observe?: 'body', reportProgress?: boolean): Observable<Blob>;\n public exportPDFForm(pdfHeader?: string, pdfFooter?: string, pdfLegends?: string, pdfMap?: Blob, pdfFormat?: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Blob>>;\n public exportPDFForm(pdfHeader?: string, pdfFooter?: string, pdfLegends?: string, pdfMap?: Blob, pdfFormat?: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Blob>>;\n public exportPDFForm(pdfHeader?: string, pdfFooter?: string, pdfLegends?: string, pdfMap?: Blob, pdfFormat?: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n\n\n\n\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/octet-stream'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n 'multipart/form-data'\n ];\n\n const canConsumeForm = this.canConsumeForm(consumes);\n\n let formParams: { append(param: string, value: any): void; };\n let useForm = false;\n let convertFormParamsToString = false;\n // use FormData to transmit files using content-type \"multipart/form-data\"\n // see https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data\n useForm = canConsumeForm;\n if (useForm) {\n formParams = new FormData();\n } else {\n formParams = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n }\n\n if (pdfHeader !== undefined) {\n formParams = formParams.append('pdfHeader', <any>pdfHeader) as any || formParams;\n }\n if (pdfFooter !== undefined) {\n formParams = formParams.append('pdfFooter', <any>pdfFooter) as any || formParams;\n }\n if (pdfLegends !== undefined) {\n formParams = formParams.append('pdfLegends', <any>pdfLegends) as any || formParams;\n }\n if (pdfMap !== undefined) {\n formParams = formParams.append('pdfMap', <any>pdfMap) as any || formParams;\n }\n if (pdfFormat !== undefined) {\n formParams = formParams.append('pdfFormat', <any>pdfFormat) as any || formParams;\n }\n\n return this.httpClient.request('post',`${this.basePath}/export/pdf`,\n {\n body: convertFormParamsToString ? formParams.toString() : formParams,\n responseType: \"blob\",\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar lista de camadas.\n * \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getCamadas(observe?: 'body', reportProgress?: boolean): Observable<Array<GrupoCamadaDTO>>;\n public getCamadas(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<GrupoCamadaDTO>>>;\n public getCamadas(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<GrupoCamadaDTO>>>;\n public getCamadas(observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<Array<GrupoCamadaDTO>>('get',`${this.basePath}/camadas`,\n {\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar lista de usuários do esjc\n * \n * @param cpf \n * @param nome \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getESJCUsuarios(cpf?: number, nome?: string, observe?: 'body', reportProgress?: boolean): Observable<Array<UsuarioDTO>>;\n public getESJCUsuarios(cpf?: number, nome?: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<UsuarioDTO>>>;\n public getESJCUsuarios(cpf?: number, nome?: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<UsuarioDTO>>>;\n public getESJCUsuarios(cpf?: number, nome?: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n\n\n let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n if (cpf !== undefined && cpf !== null) {\n queryParameters = queryParameters.set('cpf', <any>cpf);\n }\n if (nome !== undefined && nome !== null) {\n queryParameters = queryParameters.set('nome', <any>nome);\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<Array<UsuarioDTO>>('get',`${this.basePath}/admin/esjc/usuarios`,\n {\n params: queryParameters,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar informações de camadas e grupos de camadas por apontamento.\n * \n * @param srs \n * @param version \n * @param bbox \n * @param height \n * @param width \n * @param layers \n * @param queryLayers \n * @param infoFormat \n * @param x \n * @param y \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getFeatureInfo(srs: string, version: string, bbox: string, height: string, width: string, layers: string, queryLayers: string, infoFormat: string, x: string, y: string, observe?: 'body', reportProgress?: boolean): Observable<string>;\n public getFeatureInfo(srs: string, version: string, bbox: string, height: string, width: string, layers: string, queryLayers: string, infoFormat: string, x: string, y: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<string>>;\n public getFeatureInfo(srs: string, version: string, bbox: string, height: string, width: string, layers: string, queryLayers: string, infoFormat: string, x: string, y: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<string>>;\n public getFeatureInfo(srs: string, version: string, bbox: string, height: string, width: string, layers: string, queryLayers: string, infoFormat: string, x: string, y: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (srs === null || srs === undefined) {\n throw new Error('Required parameter srs was null or undefined when calling getFeatureInfo.');\n }\n\n if (version === null || version === undefined) {\n throw new Error('Required parameter version was null or undefined when calling getFeatureInfo.');\n }\n\n if (bbox === null || bbox === undefined) {\n throw new Error('Required parameter bbox was null or undefined when calling getFeatureInfo.');\n }\n\n if (height === null || height === undefined) {\n throw new Error('Required parameter height was null or undefined when calling getFeatureInfo.');\n }\n\n if (width === null || width === undefined) {\n throw new Error('Required parameter width was null or undefined when calling getFeatureInfo.');\n }\n\n if (layers === null || layers === undefined) {\n throw new Error('Required parameter layers was null or undefined when calling getFeatureInfo.');\n }\n\n if (queryLayers === null || queryLayers === undefined) {\n throw new Error('Required parameter queryLayers was null or undefined when calling getFeatureInfo.');\n }\n\n if (infoFormat === null || infoFormat === undefined) {\n throw new Error('Required parameter infoFormat was null or undefined when calling getFeatureInfo.');\n }\n\n if (x === null || x === undefined) {\n throw new Error('Required parameter x was null or undefined when calling getFeatureInfo.');\n }\n\n if (y === null || y === undefined) {\n throw new Error('Required parameter y was null or undefined when calling getFeatureInfo.');\n }\n\n let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n if (srs !== undefined && srs !== null) {\n queryParameters = queryParameters.set('srs', <any>srs);\n }\n if (version !== undefined && version !== null) {\n queryParameters = queryParameters.set('version', <any>version);\n }\n if (bbox !== undefined && bbox !== null) {\n queryParameters = queryParameters.set('bbox', <any>bbox);\n }\n if (height !== undefined && height !== null) {\n queryParameters = queryParameters.set('height', <any>height);\n }\n if (width !== undefined && width !== null) {\n queryParameters = queryParameters.set('width', <any>width);\n }\n if (layers !== undefined && layers !== null) {\n queryParameters = queryParameters.set('layers', <any>layers);\n }\n if (queryLayers !== undefined && queryLayers !== null) {\n queryParameters = queryParameters.set('query_layers', <any>queryLayers);\n }\n if (infoFormat !== undefined && infoFormat !== null) {\n queryParameters = queryParameters.set('info_format', <any>infoFormat);\n }\n if (x !== undefined && x !== null) {\n queryParameters = queryParameters.set('x', <any>x);\n }\n if (y !== undefined && y !== null) {\n queryParameters = queryParameters.set('y', <any>y);\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<string>('get',`${this.basePath}/featureinfo`,\n {\n params: queryParameters,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Busca icone\n * \n * @param filename \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getIcon(filename: string, observe?: 'body', reportProgress?: boolean): Observable<Blob>;\n public getIcon(filename: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Blob>>;\n public getIcon(filename: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Blob>>;\n public getIcon(filename: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (filename === null || filename === undefined) {\n throw new Error('Required parameter filename was null or undefined when calling getIcon.');\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'image/svg+xml'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request('get',`${this.basePath}/icon/${encodeURIComponent(String(filename))}`,\n {\n responseType: \"blob\",\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar lista de perfis\n * \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getPerfis(observe?: 'body', reportProgress?: boolean): Observable<Array<PerfilDTO>>;\n public getPerfis(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<PerfilDTO>>>;\n public getPerfis(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<PerfilDTO>>>;\n public getPerfis(observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<Array<PerfilDTO>>('get',`${this.basePath}/admin/perfis`,\n {\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar lista de proprieades das camadas e suas configurações.\n * \n * @param id \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getPropriedadesCamada(id: string, observe?: 'body', reportProgress?: boolean): Observable<Array<CamadaPropriedadeDTO>>;\n public getPropriedadesCamada(id: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<CamadaPropriedadeDTO>>>;\n public getPropriedadesCamada(id: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<CamadaPropriedadeDTO>>>;\n public getPropriedadesCamada(id: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (id === null || id === undefined) {\n throw new Error('Required parameter id was null or undefined when calling getPropriedadesCamada.');\n }\n\n let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n if (id !== undefined && id !== null) {\n queryParameters = queryParameters.set('id', <any>id);\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<Array<CamadaPropriedadeDTO>>('get',`${this.basePath}/camada/propriedades`,\n {\n params: queryParameters,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Buscar lista de usuários da aplicação\n * \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public getUsuarios(observe?: 'body', reportProgress?: boolean): Observable<Array<UsuarioDTO>>;\n public getUsuarios(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<UsuarioDTO>>>;\n public getUsuarios(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<UsuarioDTO>>>;\n public getUsuarios(observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request<Array<UsuarioDTO>>('get',`${this.basePath}/admin/usuarios`,\n {\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Localização por unidade geográfica.\n * \n * @param body \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public localizarUnidadeGeo(body: LocalizarUnidadeGeoDTO, observe?: 'body', reportProgress?: boolean): Observable<Array<ResultadoUnidadeGeoDTO>>;\n public localizarUnidadeGeo(body: LocalizarUnidadeGeoDTO, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<ResultadoUnidadeGeoDTO>>>;\n public localizarUnidadeGeo(body: LocalizarUnidadeGeoDTO, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<ResultadoUnidadeGeoDTO>>>;\n public localizarUnidadeGeo(body: LocalizarUnidadeGeoDTO, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (body === null || body === undefined) {\n throw new Error('Required parameter body was null or undefined when calling localizarUnidadeGeo.');\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n 'application/json'\n ];\n const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes);\n if (httpContentTypeSelected != undefined) {\n headers = headers.set('Content-Type', httpContentTypeSelected);\n }\n\n return this.httpClient.request<Array<ResultadoUnidadeGeoDTO>>('post',`${this.basePath}/localizar`,\n {\n body: body,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Proxy para requisições GET ao GeoServer.\n * \n * @param url \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public proxy(url: string, observe?: 'body', reportProgress?: boolean): Observable<Blob>;\n public proxy(url: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Blob>>;\n public proxy(url: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Blob>>;\n public proxy(url: string, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (url === null || url === undefined) {\n throw new Error('Required parameter url was null or undefined when calling proxy.');\n }\n\n let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});\n if (url !== undefined && url !== null) {\n queryParameters = queryParameters.set('url', <any>url);\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/octet-stream'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n ];\n\n return this.httpClient.request('get',`${this.basePath}/proxy`,\n {\n params: queryParameters,\n responseType: \"blob\",\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n /**\n * Salvar usuário na aplicação\n * \n * @param body \n * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.\n * @param reportProgress flag to report request and response progress.\n */\n public setUsuario(body: UsuarioDTO, observe?: 'body', reportProgress?: boolean): Observable<boolean>;\n public setUsuario(body: UsuarioDTO, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<boolean>>;\n public setUsuario(body: UsuarioDTO, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<boolean>>;\n public setUsuario(body: UsuarioDTO, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {\n\n if (body === null || body === undefined) {\n throw new Error('Required parameter body was null or undefined when calling setUsuario.');\n }\n\n let headers = this.defaultHeaders;\n\n // to determine the Accept header\n let httpHeaderAccepts: string[] = [\n 'application/json'\n ];\n const httpHeaderAcceptSelected: string | undefined = this.configuration.selectHeaderAccept(httpHeaderAccepts);\n if (httpHeaderAcceptSelected != undefined) {\n headers = headers.set('Accept', httpHeaderAcceptSelected);\n }\n\n // to determine the Content-Type header\n const consumes: string[] = [\n 'application/json'\n ];\n const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes);\n if (httpContentTypeSelected != undefined) {\n headers = headers.set('Content-Type', httpContentTypeSelected);\n }\n\n return this.httpClient.request<boolean>('post',`${this.basePath}/admin/usuario`,\n {\n body: body,\n withCredentials: this.configuration.withCredentials,\n headers: headers,\n observe: observe,\n reportProgress: reportProgress\n }\n );\n }\n\n}\n","export * from './default.service';\nimport { DefaultService } from './default.service';\nexport const APIS = [DefaultService];\n","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface CamadaCustomAttributeDTO { \n id?: number;\n attribute?: string;\n valor?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface CamadaPropriedadeValorPadraoDTO { \n id?: number;\n geoserverId?: string;\n campo?: string;\n valor?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface CamadaToolDTO { \n id?: number;\n toolId?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface EditAttributesDTOAttributes { \n key?: string;\n value?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface ExportPDFDTO { \n pdfHeader?: string;\n pdfFooter?: string;\n pdfLegends?: string;\n pdfMap: Blob;\n pdfFormat: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface LocalizarUnidadeGeoDTOParametros { \n name?: string;\n value?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface PerfilDTO { \n id: number;\n nome?: string;\n}","/**\n * GeoSanja API\n * API para Aplicação GeoSanja\n *\n * OpenAPI spec version: 1.2.8\n * Contact: claudio.bogossian@gmail.com\n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nexport interface ResultadoUnidadeGeoDTO { \n camadaId?: number;\n data?: any;\n}","import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core';\nimport { Configuration } from './configuration';\nimport { HttpClient } from '@angular/common/http';\n\n\nimport { DefaultService } from './api/default.service';\n\n@NgModule({\n imports: [],\n declarations: [],\n exports: [],\n providers: [\n DefaultService ]\n})\nexport class ApiModule {\n public static forRoot(configurationFactory: () => Configuration): ModuleWithProviders<ApiModule> {\n return {\n ngModule: ApiModule,\n providers: [ { provide: Configuration, useFactory: configurationFactory } ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: ApiModule,\n @Optional() http: HttpClient) {\n if (parentModule) {\n throw new Error('ApiModule is already loaded. Import in your base AppModule only.');\n }\n if (!http) {\n throw new Error('You need to import the HttpClientModule in your AppModule! \\n' +\n 'See also https://github.com/angular/angular/issues/20575');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.Configuration"],"mappings":"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"}
|
package/model/usuarioDTO.d.ts
CHANGED