valtech-components 2.0.484 → 2.0.486
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/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/services/auth/auth.service.mjs +15 -2
- package/esm2022/lib/services/auth/device.service.mjs +104 -0
- package/esm2022/lib/services/auth/index.mjs +4 -1
- package/esm2022/lib/services/auth/session.service.mjs +78 -0
- package/esm2022/lib/services/auth/types.mjs +1 -1
- package/fesm2022/valtech-components.mjs +187 -2
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/types.d.ts +12 -0
- package/lib/services/auth/auth.service.d.ts +1 -0
- package/lib/services/auth/device.service.d.ts +80 -0
- package/lib/services/auth/index.d.ts +2 -0
- package/lib/services/auth/session.service.d.ts +60 -0
- package/lib/services/auth/types.d.ts +121 -0
- package/package.json +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Injectable, Inject } from '@angular/core';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
import { VALTECH_AUTH_CONFIG } from './config';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common/http";
|
|
6
|
+
/**
|
|
7
|
+
* Servicio para gestión de sesiones activas del usuario.
|
|
8
|
+
* Permite listar y revocar sesiones.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { SessionService } from 'valtech-components';
|
|
13
|
+
*
|
|
14
|
+
* @Component({...})
|
|
15
|
+
* export class SessionsPage {
|
|
16
|
+
* private sessionService = inject(SessionService);
|
|
17
|
+
*
|
|
18
|
+
* sessions = signal<SessionInfo[]>([]);
|
|
19
|
+
*
|
|
20
|
+
* async ngOnInit() {
|
|
21
|
+
* const sessions = await firstValueFrom(this.sessionService.listSessions());
|
|
22
|
+
* this.sessions.set(sessions);
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* async revokeSession(sessionId: string) {
|
|
26
|
+
* await firstValueFrom(this.sessionService.revokeSession(sessionId));
|
|
27
|
+
* // Recargar lista
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* async revokeAllOthers() {
|
|
31
|
+
* const result = await firstValueFrom(this.sessionService.revokeAllSessions());
|
|
32
|
+
* console.log(`${result.sessionsRevoked} sesiones cerradas`);
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class SessionService {
|
|
38
|
+
constructor(config, http) {
|
|
39
|
+
this.config = config;
|
|
40
|
+
this.http = http;
|
|
41
|
+
}
|
|
42
|
+
get baseUrl() {
|
|
43
|
+
return `${this.config.apiUrl}/v2/users/me/sessions`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Lista todas las sesiones activas del usuario.
|
|
47
|
+
* La sesión actual está marcada con isCurrent=true.
|
|
48
|
+
*/
|
|
49
|
+
listSessions() {
|
|
50
|
+
return this.http.get(this.baseUrl).pipe(map(response => response.sessions));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Revoca una sesión específica.
|
|
54
|
+
* Fuerza el cierre de sesión en ese dispositivo/navegador.
|
|
55
|
+
*/
|
|
56
|
+
revokeSession(sessionId) {
|
|
57
|
+
return this.http.delete(`${this.baseUrl}/${sessionId}`);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Revoca todas las sesiones excepto la actual.
|
|
61
|
+
* Útil para "cerrar sesión en todos los dispositivos".
|
|
62
|
+
*
|
|
63
|
+
* @returns Número de sesiones revocadas
|
|
64
|
+
*/
|
|
65
|
+
revokeAllSessions() {
|
|
66
|
+
return this.http.delete(this.baseUrl);
|
|
67
|
+
}
|
|
68
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SessionService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
69
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SessionService, providedIn: 'root' }); }
|
|
70
|
+
}
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SessionService, decorators: [{
|
|
72
|
+
type: Injectable,
|
|
73
|
+
args: [{ providedIn: 'root' }]
|
|
74
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
75
|
+
type: Inject,
|
|
76
|
+
args: [VALTECH_AUTH_CONFIG]
|
|
77
|
+
}] }, { type: i1.HttpClient }] });
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL3Nlc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFRL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQ3VDLE1BQXlCLEVBQ3RELElBQWdCO1FBRGEsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDdEQsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUN2QixDQUFDO0lBRUosSUFBWSxPQUFPO1FBQ2pCLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF1QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUMzRCxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLFNBQWlCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQXlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQXlCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRSxDQUFDOytHQXBDVSxjQUFjLGtCQUVmLG1CQUFtQjttSEFGbEIsY0FBYyxjQURELE1BQU07OzRGQUNuQixjQUFjO2tCQUQxQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBRzdCLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0FVVEhfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgVmFsdGVjaEF1dGhDb25maWcsXG4gIFNlc3Npb25JbmZvLFxuICBMaXN0U2Vzc2lvbnNSZXNwb25zZSxcbiAgUmV2b2tlU2Vzc2lvbnNSZXNwb25zZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBnZXN0acOzbiBkZSBzZXNpb25lcyBhY3RpdmFzIGRlbCB1c3VhcmlvLlxuICogUGVybWl0ZSBsaXN0YXIgeSByZXZvY2FyIHNlc2lvbmVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogQENvbXBvbmVudCh7Li4ufSlcbiAqIGV4cG9ydCBjbGFzcyBTZXNzaW9uc1BhZ2Uge1xuICogICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFNlc3Npb25TZXJ2aWNlKTtcbiAqXG4gKiAgIHNlc3Npb25zID0gc2lnbmFsPFNlc3Npb25JbmZvW10+KFtdKTtcbiAqXG4gKiAgIGFzeW5jIG5nT25Jbml0KCkge1xuICogICAgIGNvbnN0IHNlc3Npb25zID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5zZXNzaW9uU2VydmljZS5saXN0U2Vzc2lvbnMoKSk7XG4gKiAgICAgdGhpcy5zZXNzaW9ucy5zZXQoc2Vzc2lvbnMpO1xuICogICB9XG4gKlxuICogICBhc3luYyByZXZva2VTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gKiAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5zZXNzaW9uU2VydmljZS5yZXZva2VTZXNzaW9uKHNlc3Npb25JZCkpO1xuICogICAgIC8vIFJlY2FyZ2FyIGxpc3RhXG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHJldm9rZUFsbE90aGVycygpIHtcbiAqICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnNlc3Npb25TZXJ2aWNlLnJldm9rZUFsbFNlc3Npb25zKCkpO1xuICogICAgIGNvbnNvbGUubG9nKGAke3Jlc3VsdC5zZXNzaW9uc1Jldm9rZWR9IHNlc2lvbmVzIGNlcnJhZGFzYCk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkge31cblxuICBwcml2YXRlIGdldCBiYXNlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvdXNlcnMvbWUvc2Vzc2lvbnNgO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RhIHRvZGFzIGxhcyBzZXNpb25lcyBhY3RpdmFzIGRlbCB1c3VhcmlvLlxuICAgKiBMYSBzZXNpw7NuIGFjdHVhbCBlc3TDoSBtYXJjYWRhIGNvbiBpc0N1cnJlbnQ9dHJ1ZS5cbiAgICovXG4gIGxpc3RTZXNzaW9ucygpOiBPYnNlcnZhYmxlPFNlc3Npb25JbmZvW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxMaXN0U2Vzc2lvbnNSZXNwb25zZT4odGhpcy5iYXNlVXJsKS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLnNlc3Npb25zKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2NhIHVuYSBzZXNpw7NuIGVzcGVjw61maWNhLlxuICAgKiBGdWVyemEgZWwgY2llcnJlIGRlIHNlc2nDs24gZW4gZXNlIGRpc3Bvc2l0aXZvL25hdmVnYWRvci5cbiAgICovXG4gIHJldm9rZVNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJldm9rZVNlc3Npb25zUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxSZXZva2VTZXNzaW9uc1Jlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9LyR7c2Vzc2lvbklkfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9jYSB0b2RhcyBsYXMgc2VzaW9uZXMgZXhjZXB0byBsYSBhY3R1YWwuXG4gICAqIMOadGlsIHBhcmEgXCJjZXJyYXIgc2VzacOzbiBlbiB0b2RvcyBsb3MgZGlzcG9zaXRpdm9zXCIuXG4gICAqXG4gICAqIEByZXR1cm5zIE7Dum1lcm8gZGUgc2VzaW9uZXMgcmV2b2NhZGFzXG4gICAqL1xuICByZXZva2VBbGxTZXNzaW9ucygpOiBPYnNlcnZhYmxlPFJldm9rZVNlc3Npb25zUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxSZXZva2VTZXNzaW9uc1Jlc3BvbnNlPih0aGlzLmJhc2VVcmwpO1xuICB9XG59XG4iXX0=
|
|
@@ -26,4 +26,4 @@ export const INITIAL_MFA_STATE = {
|
|
|
26
26
|
mfaToken: null,
|
|
27
27
|
method: null,
|
|
28
28
|
};
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2F1dGgvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBdUZIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWM7SUFDM0MsZUFBZSxFQUFFLEtBQUs7SUFDdEIsU0FBUyxFQUFFLElBQUk7SUFDZixXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsSUFBSTtJQUNsQixNQUFNLEVBQUUsSUFBSTtJQUNaLEtBQUssRUFBRSxJQUFJO0lBQ1gsS0FBSyxFQUFFLEVBQUU7SUFDVCxXQUFXLEVBQUUsRUFBRTtJQUNmLFlBQVksRUFBRSxLQUFLO0lBQ25CLFNBQVMsRUFBRSxJQUFJO0lBQ2YsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBa0JGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQW9CO0lBQ2hELFFBQVEsRUFBRSxLQUFLO0lBQ2YsUUFBUSxFQUFFLElBQUk7SUFDZCxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRpcG9zIGUgaW50ZXJmYWNlcyBwYXJhIGVsIHNlcnZpY2lvIGRlIGF1dGVudGljYWNpw7NuIGRlIFZhbHRlY2guXG4gKiBBbGluZWFkb3MgY29uIGVsIGJhY2tlbmQgQXV0aFYyLlxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05GSUdVUkFDScOTTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb25maWd1cmFjacOzbiBwYXJhIGVsIHNlcnZpY2lvIGRlIGF1dGVudGljYWNpw7NuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbHRlY2hBdXRoQ29uZmlnIHtcbiAgLyoqIFVSTCBiYXNlIGRlIGxhIEFQSSAoZWo6ICdodHRwczovL2FwaS5teXZhbHRlY2guY29tJykgKi9cbiAgYXBpVXJsOiBzdHJpbmc7XG4gIC8qKiBQcmVmaWpvIHBhcmEgZW5kcG9pbnRzIGRlIGF1dGggKGRlZmF1bHQ6ICcvdjIvYXV0aCcpICovXG4gIGF1dGhQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiBQcmVmaWpvIHBhcmEgbGFzIGNsYXZlcyBkZSBsb2NhbFN0b3JhZ2UgKGRlZmF1bHQ6ICd2YWx0ZWNoX2F1dGhfJykgKi9cbiAgc3RvcmFnZVByZWZpeD86IHN0cmluZztcbiAgLyoqIFRpZW1wbyBhbnRlcyBkZSBleHBpcmFjacOzbiBwYXJhIHJlZnJlc2NhciB0b2tlbiBlbiBzZWd1bmRvcyAoZGVmYXVsdDogNjApICovXG4gIHJlZnJlc2hCZWZvcmVFeHBpcnk/OiBudW1iZXI7XG4gIC8qKiBIYWJpbGl0YXIgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7FhcyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlVGFiU3luYz86IGJvb2xlYW47XG4gIC8qKiBSdXRhIGRlIHJlZGlyZWNjacOzbiBjdWFuZG8gbm8gYXV0ZW50aWNhZG8gKGRlZmF1bHQ6ICcvbG9naW4nKSAqL1xuICBsb2dpblJvdXRlPzogc3RyaW5nO1xuICAvKiogUnV0YSBkZSByZWRpcmVjY2nDs24gY3VhbmRvIHlhIGF1dGVudGljYWRvIChkZWZhdWx0OiAnLycpICovXG4gIGhvbWVSb3V0ZT86IHN0cmluZztcbiAgLyoqIFJ1dGEgcGFyYSBhY2Nlc28gZGVuZWdhZG8gKGRlZmF1bHQ6ICcvdW5hdXRob3JpemVkJykgKi9cbiAgdW5hdXRob3JpemVkUm91dGU/OiBzdHJpbmc7XG4gIC8qKiBIYWJpbGl0YXIgaW50ZWdyYWNpw7NuIGNvbiBGaXJlYmFzZVNlcnZpY2UgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBlbmFibGVGaXJlYmFzZUludGVncmF0aW9uPzogYm9vbGVhbjtcbiAgLyoqIEhhYmlsaXRhciByZWdpc3RybyBhdXRvbcOhdGljbyBkZSBkZXZpY2UgdG9rZW5zIHBhcmEgcHVzaCBub3RpZmljYXRpb25zIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgZW5hYmxlRGV2aWNlUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVTVEFETyBERSBBVVRFTlRJQ0FDScOTTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFc3RhZG8gY29tcGxldG8gZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFN0YXRlIHtcbiAgLyoqIFVzdWFyaW8gZXN0w6EgYXV0ZW50aWNhZG8gKi9cbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAvKiogRXN0YWRvIGRlIGNhcmdhIGluaWNpYWwgKi9cbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAvKiogVG9rZW4gZGUgYWNjZXNvIGFjdHVhbCAqL1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRva2VuIGRlIHJlZnJlc2NvIGFjdHVhbCAqL1xuICByZWZyZXNoVG9rZW46IHN0cmluZyB8IG51bGw7XG4gIC8qKiBJRCBkZWwgdXN1YXJpbyAqL1xuICB1c2VySWQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBFbWFpbCBkZWwgdXN1YXJpbyAqL1xuICBlbWFpbDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFJvbGVzIGRlbCB1c3VhcmlvICovXG4gIHJvbGVzOiBzdHJpbmdbXTtcbiAgLyoqIFBlcm1pc29zIGRlbCB1c3VhcmlvIChmb3JtYXRvICdyZXNvdXJjZTphY3Rpb24nKSAqL1xuICBwZXJtaXNzaW9uczogc3RyaW5nW107XG4gIC8qKiBVc3VhcmlvIGVzIHN1cGVyIGFkbWluICovXG4gIGlzU3VwZXJBZG1pbjogYm9vbGVhbjtcbiAgLyoqIFRpbWVzdGFtcCBkZSBleHBpcmFjacOzbiBkZWwgYWNjZXNzVG9rZW4gKG1zKSAqL1xuICBleHBpcmVzQXQ6IG51bWJlciB8IG51bGw7XG4gIC8qKiBFcnJvciBkZSBhdXRlbnRpY2FjacOzbiAoc2kgZXhpc3RlKSAqL1xuICBlcnJvcjogQXV0aEVycm9yIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBJbmZvcm1hY2nDs24gZGVsIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFVzZXIge1xuICB1c2VySWQ6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcGhvbmU/OiBzdHJpbmc7XG4gIHJvbGVzOiBzdHJpbmdbXTtcbiAgcGVybWlzc2lvbnM6IHN0cmluZ1tdO1xuICBpc1N1cGVyQWRtaW46IGJvb2xlYW47XG4gIG1mYUVuYWJsZWQ/OiBib29sZWFuO1xuICBtZmFNZXRob2Q/OiBNRkFNZXRob2Q7XG59XG5cbi8qKlxuICogRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aEVycm9yIHtcbiAgY29kZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXN0YWRvIGluaWNpYWwgZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX0FVVEhfU1RBVEU6IEF1dGhTdGF0ZSA9IHtcbiAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBhY2Nlc3NUb2tlbjogbnVsbCxcbiAgcmVmcmVzaFRva2VuOiBudWxsLFxuICB1c2VySWQ6IG51bGwsXG4gIGVtYWlsOiBudWxsLFxuICByb2xlczogW10sXG4gIHBlcm1pc3Npb25zOiBbXSxcbiAgaXNTdXBlckFkbWluOiBmYWxzZSxcbiAgZXhwaXJlc0F0OiBudWxsLFxuICBlcnJvcjogbnVsbCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNRkFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBNw6l0b2RvcyBkZSBNRkEgc29wb3J0YWRvcyAqL1xuZXhwb3J0IHR5cGUgTUZBTWV0aG9kID0gJ0VNQUlMJyB8ICdTTVMnIHwgJ1RPVFAnO1xuXG4vKipcbiAqIEVzdGFkbyBkZSBNRkEgcGVuZGllbnRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQVBlbmRpbmdTdGF0ZSB7XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICBtZmFUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgbWV0aG9kOiBNRkFNZXRob2QgfCBudWxsO1xufVxuXG4vKipcbiAqIEVzdGFkbyBpbmljaWFsIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfTUZBX1NUQVRFOiBNRkFQZW5kaW5nU3RhdGUgPSB7XG4gIHJlcXVpcmVkOiBmYWxzZSxcbiAgbWZhVG9rZW46IG51bGwsXG4gIG1ldGhvZDogbnVsbCxcbn07XG5cbi8qKlxuICogUmVzdWx0YWRvIGRlIHNldHVwIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTZXR1cFJlc3VsdCB7XG4gIGNvZGVTZW50OiBib29sZWFuO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXN0YWRvIGRlIE1GQSBkZWwgdXN1YXJpby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTdGF0dXMge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBtZXRob2Q6IE1GQU1ldGhvZCB8IG51bGw7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUT1RQIE1GQSAoR29vZ2xlIEF1dGhlbnRpY2F0b3IpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHNldHVwIGRlIFRPVFAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVE9UUFNldHVwUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICAvKiogU2VjcmV0byBUT1RQIGVuIGJhc2UzMiAocGFyYSBlbnRyYWRhIG1hbnVhbCkgKi9cbiAgc2VjcmV0OiBzdHJpbmc7XG4gIC8qKiBVUkwgcGFyYSBnZW5lcmFyIFFSIGNvZGUgKG90cGF1dGg6Ly8uLi4pICovXG4gIHFyQ29kZVVybDogc3RyaW5nO1xuICAvKiogQ8OzZGlnb3MgZGUgcmVzcGFsZG8gZGUgdW4gc29sbyB1c28gKi9cbiAgYmFja3VwQ29kZXM6IHN0cmluZ1tdO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIHZlcmlmaWNhciBzZXR1cCBkZSBUT1RQLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRPVFBWZXJpZnlTZXR1cFJlcXVlc3Qge1xuICAvKiogQ8OzZGlnbyBUT1RQIGRlIDYgZMOtZ2l0b3MgKi9cbiAgY29kZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHZlcmlmaWNhY2nDs24gZGUgc2V0dXAgVE9UUC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUT1RQVmVyaWZ5U2V0dXBSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgZGVzaGFiaWxpdGFyIFRPVFAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVE9UUERpc2FibGVSZXF1ZXN0IHtcbiAgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBkZXNoYWJpbGl0YXIgVE9UUC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUT1RQRGlzYWJsZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSByZWdlbmVyYXIgY8OzZGlnb3MgZGUgcmVzcGFsZG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnZW5lcmF0ZUJhY2t1cENvZGVzUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBiYWNrdXBDb2Rlczogc3RyaW5nW107XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBjYW50aWRhZCBkZSBjw7NkaWdvcyBkZSByZXNwYWxkby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYWNrdXBDb2Rlc0NvdW50UmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUkVRVUVTVFMvUkVTUE9OU0VTIChhbGluZWFkb3MgY29uIGJhY2tlbmQgQXV0aFYyKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgc2lnbnVwIChyZWdpc3RybykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbnVwUmVxdWVzdCB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgcGhvbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgc2lnbnVwIChyZWdpc3RybykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbnVwUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSB2ZXJpZmljYXIgZW1haWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5RW1haWxSZXF1ZXN0IHtcbiAgZW1haWw6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHZlcmlmaWNhY2nDs24gZGUgZW1haWwuXG4gKiBTaSBlcyBleGl0b3NvLCBpbmNsdXllIHRva2VucyBwYXJhIGF1dG8tbG9naW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5RW1haWxSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIHZlcmlmaWVkOiBib29sZWFuO1xuICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICBmaXJlYmFzZVRva2VuPzogc3RyaW5nO1xuICBleHBpcmVzSW4/OiBudW1iZXI7XG4gIHRva2VuVHlwZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgcmVlbnZpYXIgY8OzZGlnbyBkZSB2ZXJpZmljYWNpw7NuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc2VuZENvZGVSZXF1ZXN0IHtcbiAgZW1haWw6IHN0cmluZztcbiAgdHlwZTogJ0VNQUlMX1ZFUklGWScgfCAnUEFTU1dPUkRfUkVTRVQnO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHJlZW52w61vIGRlIGPDs2RpZ28uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZW5kQ29kZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgc2VudDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgc2lnbmluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25pblJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHNpZ25pbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduaW5SZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGZpcmViYXNlVG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNJbj86IG51bWJlcjtcbiAgdG9rZW5UeXBlPzogc3RyaW5nO1xuICBtZmFSZXF1aXJlZD86IGJvb2xlYW47XG4gIG1mYVRva2VuPzogc3RyaW5nO1xuICBtZmFNZXRob2Q/OiBNRkFNZXRob2Q7XG4gIHJvbGVzPzogc3RyaW5nW107XG4gIHBlcm1pc3Npb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIHZlcmlmaWNhciBNRkEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUZBVmVyaWZ5UmVxdWVzdCB7XG4gIG1mYVRva2VuOiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSB2ZXJpZmljYXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQVZlcmlmeVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gIGZpcmViYXNlVG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNJbjogbnVtYmVyO1xuICB0b2tlblR5cGU6IHN0cmluZztcbiAgcm9sZXM/OiBzdHJpbmdbXTtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgcmVmcmVzY2FyIHRva2VuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgcmVmcmVzY2FyIHRva2VuLlxuICogSW1wbGVtZW50YSB0b2tlbiByb3RhdGlvbjogY2FkYSByZWZyZXNoIGdlbmVyYSB1biBudWV2byByZWZyZXNoIHRva2VuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nOyAvLyBUb2tlbiByb3RhdGlvbjogbnVldm8gcmVmcmVzaCB0b2tlblxuICBleHBpcmVzSW46IG51bWJlcjtcbiAgZmlyZWJhc2VUb2tlbj86IHN0cmluZztcbiAgcm9sZXM/OiBzdHJpbmdbXTtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgbG9nb3V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ291dFJlcXVlc3Qge1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBsb2dvdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nb3V0UmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBzdWNjZXNzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIG9idGVuZXIgcGVybWlzb3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UGVybWlzc2lvbnNSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIHJvbGVzOiBzdHJpbmdbXTtcbiAgcGVybWlzc2lvbnM6IHN0cmluZ1tdO1xuICBpc1N1cGVyQWRtaW46IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIHNldHVwIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTZXR1cFJlcXVlc3Qge1xuICBtZXRob2Q6IE1GQU1ldGhvZDtcbiAgcGhvbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgc2V0dXAgZGUgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQVNldHVwUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBjb2RlU2VudDogYm9vbGVhbjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBjb25maXJtYXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQUNvbmZpcm1SZXF1ZXN0IHtcbiAgY29kZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIGNvbmZpcm1hciBNRkEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUZBQ29uZmlybVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgbWZhRW5hYmxlZDogYm9vbGVhbjtcbiAgbWV0aG9kOiBNRkFNZXRob2Q7XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIGRlc2hhYmlsaXRhciBNRkEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUZBRGlzYWJsZVJlcXVlc3Qge1xuICBwYXNzd29yZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIGRlc2hhYmlsaXRhciBNRkEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUZBRGlzYWJsZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgbWZhRGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIGluaWNpYXIgcmVjdXBlcmFjacOzbiBkZSBjb250cmFzZcOxYS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3Jnb3RQYXNzd29yZFJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIGZvcmdvdCBwYXNzd29yZCAoc2llbXByZSBpZ3VhbCBwb3Igc2VndXJpZGFkKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3Jnb3RQYXNzd29yZFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSByZXNldGVhciBjb250cmFzZcOxYSBjb24gY8OzZGlnby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNldFBhc3N3b3JkUmVxdWVzdCB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbiAgbmV3UGFzc3dvcmQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSByZXNldCBwYXNzd29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNldFBhc3N3b3JkUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBzdWNjZXNzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIG9idGVuZXIgcGVyZmlsIGRlbCB1c3VhcmlvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldFByb2ZpbGVSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHBob25lPzogc3RyaW5nO1xuICBlbWFpbFZlcmlmaWVkOiBib29sZWFuO1xuICBwaG9uZVZlcmlmaWVkOiBib29sZWFuO1xuICBtZmFFbmFibGVkOiBib29sZWFuO1xuICBtZmFNZXRob2Q/OiBNRkFNZXRob2Q7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgYWN0dWFsaXphciBwZXJmaWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlUHJvZmlsZVJlcXVlc3Qge1xuICBuYW1lPzogc3RyaW5nO1xuICBwaG9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBhY3R1YWxpemFyIHBlcmZpbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVQcm9maWxlUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICB1cGRhdGVkOiBib29sZWFuO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVZFTlRPUyBERSBTSU5DUk9OSVpBQ0nDk05cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTV0lUQ0ggT1JHQU5JWkFUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBjYW1iaWFyIGRlIG9yZ2FuaXphY2nDs24gYWN0aXZhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN3aXRjaE9yZ1JlcXVlc3Qge1xuICBvcmdhbml6YXRpb25JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIGNhbWJpbyBkZSBvcmdhbml6YWNpw7NuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN3aXRjaE9yZ1Jlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgZmlyZWJhc2VUb2tlbjogc3RyaW5nO1xuICBhY3RpdmVPcmc6IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVWRU5UT1MgREUgU0lOQ1JPTklaQUNJw5NOXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogVGlwb3MgZGUgZXZlbnRvcyBkZSBzaW5jcm9uaXphY2nDs24gZW50cmUgcGVzdGHDsWFzICovXG5leHBvcnQgdHlwZSBBdXRoU3luY0V2ZW50VHlwZSA9XG4gIHwgJ0xPR0lOJ1xuICB8ICdMT0dPVVQnXG4gIHwgJ1RPS0VOX1JFRlJFU0gnXG4gIHwgJ1BFUk1JU1NJT05TX1VQREFURSdcbiAgfCAnT1JHX1NXSVRDSCc7XG5cbi8qKlxuICogRXZlbnRvIGRlIHNpbmNyb25pemFjacOzbiBlbnRyZSBwZXN0YcOxYXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFN5bmNFdmVudCB7XG4gIHR5cGU6IEF1dGhTeW5jRXZlbnRUeXBlO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgcGF5bG9hZD86IHtcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7IC8vIFRva2VuIHJvdGF0aW9uIHN1cHBvcnRcbiAgICBleHBpcmVzQXQ/OiBudW1iZXI7XG4gICAgYWN0aXZlT3JnPzogc3RyaW5nO1xuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSldUIENMQUlNU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDbGFpbXMgZGVsIEpXVCBkZSBhY2Nlc28uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUQ2xhaW1zIHtcbiAgLyoqIFVzZXIgSUQgKi9cbiAgdWlkOiBzdHJpbmc7XG4gIC8qKiBFbWFpbCAqL1xuICBlbWFpbDogc3RyaW5nO1xuICAvKiogU2Vzc2lvbiBJRCAqL1xuICBzaWQ/OiBzdHJpbmc7XG4gIC8qKiBJc3N1ZWQgYXQgKi9cbiAgaWF0OiBudW1iZXI7XG4gIC8qKiBFeHBpcmF0aW9uICovXG4gIGV4cDogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU1RPUkFHRVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBEYXRvcyBwZXJzaXN0aWRvcyBlbiBzdG9yYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JlZEF1dGhTdGF0ZSB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICByb2xlczogc3RyaW5nW107XG4gIHBlcm1pc3Npb25zOiBzdHJpbmdbXTtcbiAgaXNTdXBlckFkbWluOiBib29sZWFuO1xuICBleHBpcmVzQXQ/OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBERVZJQ0UgUkVHSVNUUkFUSU9OIChQdXNoIE5vdGlmaWNhdGlvbnMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFBsYXRhZm9ybWFzIHNvcG9ydGFkYXMgcGFyYSBwdXNoIG5vdGlmaWNhdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIERldmljZVBsYXRmb3JtID0gJ3dlYicgfCAnaW9zJyB8ICdhbmRyb2lkJztcblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgcmVnaXN0cmFyIHVuIGRpc3Bvc2l0aXZvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRGV2aWNlUmVxdWVzdCB7XG4gIC8qKiBGQ00gdG9rZW4gZGVsIGRpc3Bvc2l0aXZvICovXG4gIHRva2VuOiBzdHJpbmc7XG4gIC8qKiBQbGF0YWZvcm1hIGRlbCBkaXNwb3NpdGl2byAqL1xuICBwbGF0Zm9ybTogRGV2aWNlUGxhdGZvcm07XG4gIC8qKiBOYXZlZ2Fkb3IgKHNvbG8gd2ViKSAqL1xuICBicm93c2VyPzogc3RyaW5nO1xuICAvKiogU2lzdGVtYSBvcGVyYXRpdm8gKi9cbiAgb3M/OiBzdHJpbmc7XG4gIC8qKiBWZXJzacOzbiBkZSBsYSBhcGxpY2FjacOzbiAqL1xuICBhcHBWZXJzaW9uPzogc3RyaW5nO1xuICAvKiogTm9tYnJlIGFtaWdhYmxlIGRlbCBkaXNwb3NpdGl2byAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogTWV0YWRhdGEgYWRpY2lvbmFsICovXG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSByZWdpc3RybyBkZSBkaXNwb3NpdGl2by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckRldmljZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgZGV2aWNlOiB7XG4gICAgZGV2aWNlSWQ6IHN0cmluZztcbiAgICB0b2tlbjogc3RyaW5nO1xuICAgIHBsYXRmb3JtOiBEZXZpY2VQbGF0Zm9ybTtcbiAgICBicm93c2VyPzogc3RyaW5nO1xuICAgIG9zPzogc3RyaW5nO1xuICAgIGxhc3RBY3RpdmU6IHN0cmluZztcbiAgICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgfTtcbiAgLyoqIHRydWUgc2kgZXMgdW4gbnVldm8gZGlzcG9zaXRpdm8sIGZhbHNlIHNpIHNlIGFjdHVhbGl6w7MgdW5vIGV4aXN0ZW50ZSAqL1xuICBpc05ldzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXN1bHRhZG8gZGUgaGFiaWxpdGFyIG5vdGlmaWNhY2lvbmVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZU5vdGlmaWNhdGlvbnNSZXN1bHQge1xuICAvKiogU2kgc2Ugb3Rvcmdhcm9uIGxvcyBwZXJtaXNvcyAqL1xuICBncmFudGVkOiBib29sZWFuO1xuICAvKiogRkNNIHRva2VuIChzb2xvIHNpIGdyYW50ZWQ9dHJ1ZSkgKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG4gIC8qKiBTaSBlbCBkaXNwb3NpdGl2byBmdWUgcmVnaXN0cmFkbyBlbiBlbCBiYWNrZW5kICovXG4gIHJlZ2lzdGVyZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEVzdGFkbyBkZSBwZXJtaXNvcyBkZSBub3RpZmljYWNpw7NuLlxuICovXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGUgPSAnZ3JhbnRlZCcgfCAnZGVuaWVkJyB8ICdkZWZhdWx0JyB8ICd1bnN1cHBvcnRlZCc7XG5cbi8qKlxuICogUmVzdWx0YWRvIGRlbCByZWdpc3RybyBtYW51YWwgZGUgZGlzcG9zaXRpdm8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJEZXZpY2VSZXN1bHQge1xuICAvKiogU2kgZWwgZGlzcG9zaXRpdm8gZnVlIHJlZ2lzdHJhZG8gZXhpdG9zYW1lbnRlICovXG4gIHJlZ2lzdGVyZWQ6IGJvb2xlYW47XG4gIC8qKiBJRCBkZWwgZGlzcG9zaXRpdm8gKHNvbG8gc2kgcmVnaXN0ZXJlZD10cnVlKSAqL1xuICBkZXZpY2VJZD86IHN0cmluZztcbiAgLyoqIEZDTSB0b2tlbiB1c2FkbyBwYXJhIGVsIHJlZ2lzdHJvICovXG4gIHRva2VuPzogc3RyaW5nO1xuICAvKiogTWVuc2FqZSBkZSBlcnJvciAoc29sbyBzaSByZWdpc3RlcmVkPWZhbHNlKSAqL1xuICBlcnJvcj86IHN0cmluZztcbn1cbiJdfQ==
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2F1dGgvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBdUZIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWM7SUFDM0MsZUFBZSxFQUFFLEtBQUs7SUFDdEIsU0FBUyxFQUFFLElBQUk7SUFDZixXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsSUFBSTtJQUNsQixNQUFNLEVBQUUsSUFBSTtJQUNaLEtBQUssRUFBRSxJQUFJO0lBQ1gsS0FBSyxFQUFFLEVBQUU7SUFDVCxXQUFXLEVBQUUsRUFBRTtJQUNmLFlBQVksRUFBRSxLQUFLO0lBQ25CLFNBQVMsRUFBRSxJQUFJO0lBQ2YsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBa0JGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQW9CO0lBQ2hELFFBQVEsRUFBRSxLQUFLO0lBQ2YsUUFBUSxFQUFFLElBQUk7SUFDZCxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRpcG9zIGUgaW50ZXJmYWNlcyBwYXJhIGVsIHNlcnZpY2lvIGRlIGF1dGVudGljYWNpw7NuIGRlIFZhbHRlY2guXG4gKiBBbGluZWFkb3MgY29uIGVsIGJhY2tlbmQgQXV0aFYyLlxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05GSUdVUkFDScOTTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb25maWd1cmFjacOzbiBwYXJhIGVsIHNlcnZpY2lvIGRlIGF1dGVudGljYWNpw7NuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbHRlY2hBdXRoQ29uZmlnIHtcbiAgLyoqIFVSTCBiYXNlIGRlIGxhIEFQSSAoZWo6ICdodHRwczovL2FwaS5teXZhbHRlY2guY29tJykgKi9cbiAgYXBpVXJsOiBzdHJpbmc7XG4gIC8qKiBQcmVmaWpvIHBhcmEgZW5kcG9pbnRzIGRlIGF1dGggKGRlZmF1bHQ6ICcvdjIvYXV0aCcpICovXG4gIGF1dGhQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiBQcmVmaWpvIHBhcmEgbGFzIGNsYXZlcyBkZSBsb2NhbFN0b3JhZ2UgKGRlZmF1bHQ6ICd2YWx0ZWNoX2F1dGhfJykgKi9cbiAgc3RvcmFnZVByZWZpeD86IHN0cmluZztcbiAgLyoqIFRpZW1wbyBhbnRlcyBkZSBleHBpcmFjacOzbiBwYXJhIHJlZnJlc2NhciB0b2tlbiBlbiBzZWd1bmRvcyAoZGVmYXVsdDogNjApICovXG4gIHJlZnJlc2hCZWZvcmVFeHBpcnk/OiBudW1iZXI7XG4gIC8qKiBIYWJpbGl0YXIgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7FhcyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlVGFiU3luYz86IGJvb2xlYW47XG4gIC8qKiBSdXRhIGRlIHJlZGlyZWNjacOzbiBjdWFuZG8gbm8gYXV0ZW50aWNhZG8gKGRlZmF1bHQ6ICcvbG9naW4nKSAqL1xuICBsb2dpblJvdXRlPzogc3RyaW5nO1xuICAvKiogUnV0YSBkZSByZWRpcmVjY2nDs24gY3VhbmRvIHlhIGF1dGVudGljYWRvIChkZWZhdWx0OiAnLycpICovXG4gIGhvbWVSb3V0ZT86IHN0cmluZztcbiAgLyoqIFJ1dGEgcGFyYSBhY2Nlc28gZGVuZWdhZG8gKGRlZmF1bHQ6ICcvdW5hdXRob3JpemVkJykgKi9cbiAgdW5hdXRob3JpemVkUm91dGU/OiBzdHJpbmc7XG4gIC8qKiBIYWJpbGl0YXIgaW50ZWdyYWNpw7NuIGNvbiBGaXJlYmFzZVNlcnZpY2UgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBlbmFibGVGaXJlYmFzZUludGVncmF0aW9uPzogYm9vbGVhbjtcbiAgLyoqIEhhYmlsaXRhciByZWdpc3RybyBhdXRvbcOhdGljbyBkZSBkZXZpY2UgdG9rZW5zIHBhcmEgcHVzaCBub3RpZmljYXRpb25zIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgZW5hYmxlRGV2aWNlUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVTVEFETyBERSBBVVRFTlRJQ0FDScOTTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFc3RhZG8gY29tcGxldG8gZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFN0YXRlIHtcbiAgLyoqIFVzdWFyaW8gZXN0w6EgYXV0ZW50aWNhZG8gKi9cbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAvKiogRXN0YWRvIGRlIGNhcmdhIGluaWNpYWwgKi9cbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAvKiogVG9rZW4gZGUgYWNjZXNvIGFjdHVhbCAqL1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRva2VuIGRlIHJlZnJlc2NvIGFjdHVhbCAqL1xuICByZWZyZXNoVG9rZW46IHN0cmluZyB8IG51bGw7XG4gIC8qKiBJRCBkZWwgdXN1YXJpbyAqL1xuICB1c2VySWQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBFbWFpbCBkZWwgdXN1YXJpbyAqL1xuICBlbWFpbDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFJvbGVzIGRlbCB1c3VhcmlvICovXG4gIHJvbGVzOiBzdHJpbmdbXTtcbiAgLyoqIFBlcm1pc29zIGRlbCB1c3VhcmlvIChmb3JtYXRvICdyZXNvdXJjZTphY3Rpb24nKSAqL1xuICBwZXJtaXNzaW9uczogc3RyaW5nW107XG4gIC8qKiBVc3VhcmlvIGVzIHN1cGVyIGFkbWluICovXG4gIGlzU3VwZXJBZG1pbjogYm9vbGVhbjtcbiAgLyoqIFRpbWVzdGFtcCBkZSBleHBpcmFjacOzbiBkZWwgYWNjZXNzVG9rZW4gKG1zKSAqL1xuICBleHBpcmVzQXQ6IG51bWJlciB8IG51bGw7XG4gIC8qKiBFcnJvciBkZSBhdXRlbnRpY2FjacOzbiAoc2kgZXhpc3RlKSAqL1xuICBlcnJvcjogQXV0aEVycm9yIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBJbmZvcm1hY2nDs24gZGVsIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFVzZXIge1xuICB1c2VySWQ6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcGhvbmU/OiBzdHJpbmc7XG4gIHJvbGVzOiBzdHJpbmdbXTtcbiAgcGVybWlzc2lvbnM6IHN0cmluZ1tdO1xuICBpc1N1cGVyQWRtaW46IGJvb2xlYW47XG4gIG1mYUVuYWJsZWQ/OiBib29sZWFuO1xuICBtZmFNZXRob2Q/OiBNRkFNZXRob2Q7XG59XG5cbi8qKlxuICogRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aEVycm9yIHtcbiAgY29kZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXN0YWRvIGluaWNpYWwgZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX0FVVEhfU1RBVEU6IEF1dGhTdGF0ZSA9IHtcbiAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBhY2Nlc3NUb2tlbjogbnVsbCxcbiAgcmVmcmVzaFRva2VuOiBudWxsLFxuICB1c2VySWQ6IG51bGwsXG4gIGVtYWlsOiBudWxsLFxuICByb2xlczogW10sXG4gIHBlcm1pc3Npb25zOiBbXSxcbiAgaXNTdXBlckFkbWluOiBmYWxzZSxcbiAgZXhwaXJlc0F0OiBudWxsLFxuICBlcnJvcjogbnVsbCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNRkFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBNw6l0b2RvcyBkZSBNRkEgc29wb3J0YWRvcyAqL1xuZXhwb3J0IHR5cGUgTUZBTWV0aG9kID0gJ0VNQUlMJyB8ICdTTVMnIHwgJ1RPVFAnO1xuXG4vKipcbiAqIEVzdGFkbyBkZSBNRkEgcGVuZGllbnRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQVBlbmRpbmdTdGF0ZSB7XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICBtZmFUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgbWV0aG9kOiBNRkFNZXRob2QgfCBudWxsO1xufVxuXG4vKipcbiAqIEVzdGFkbyBpbmljaWFsIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfTUZBX1NUQVRFOiBNRkFQZW5kaW5nU3RhdGUgPSB7XG4gIHJlcXVpcmVkOiBmYWxzZSxcbiAgbWZhVG9rZW46IG51bGwsXG4gIG1ldGhvZDogbnVsbCxcbn07XG5cbi8qKlxuICogUmVzdWx0YWRvIGRlIHNldHVwIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTZXR1cFJlc3VsdCB7XG4gIGNvZGVTZW50OiBib29sZWFuO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXN0YWRvIGRlIE1GQSBkZWwgdXN1YXJpby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTdGF0dXMge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBtZXRob2Q6IE1GQU1ldGhvZCB8IG51bGw7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUT1RQIE1GQSAoR29vZ2xlIEF1dGhlbnRpY2F0b3IpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHNldHVwIGRlIFRPVFAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVE9UUFNldHVwUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICAvKiogU2VjcmV0byBUT1RQIGVuIGJhc2UzMiAocGFyYSBlbnRyYWRhIG1hbnVhbCkgKi9cbiAgc2VjcmV0OiBzdHJpbmc7XG4gIC8qKiBVUkwgcGFyYSBnZW5lcmFyIFFSIGNvZGUgKG90cGF1dGg6Ly8uLi4pICovXG4gIHFyQ29kZVVybDogc3RyaW5nO1xuICAvKiogQ8OzZGlnb3MgZGUgcmVzcGFsZG8gZGUgdW4gc29sbyB1c28gKi9cbiAgYmFja3VwQ29kZXM6IHN0cmluZ1tdO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIHZlcmlmaWNhciBzZXR1cCBkZSBUT1RQLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRPVFBWZXJpZnlTZXR1cFJlcXVlc3Qge1xuICAvKiogQ8OzZGlnbyBUT1RQIGRlIDYgZMOtZ2l0b3MgKi9cbiAgY29kZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHZlcmlmaWNhY2nDs24gZGUgc2V0dXAgVE9UUC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUT1RQVmVyaWZ5U2V0dXBSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgZGVzaGFiaWxpdGFyIFRPVFAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVE9UUERpc2FibGVSZXF1ZXN0IHtcbiAgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBkZXNoYWJpbGl0YXIgVE9UUC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUT1RQRGlzYWJsZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSByZWdlbmVyYXIgY8OzZGlnb3MgZGUgcmVzcGFsZG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnZW5lcmF0ZUJhY2t1cENvZGVzUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBiYWNrdXBDb2Rlczogc3RyaW5nW107XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBjYW50aWRhZCBkZSBjw7NkaWdvcyBkZSByZXNwYWxkby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYWNrdXBDb2Rlc0NvdW50UmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUkVRVUVTVFMvUkVTUE9OU0VTIChhbGluZWFkb3MgY29uIGJhY2tlbmQgQXV0aFYyKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgc2lnbnVwIChyZWdpc3RybykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbnVwUmVxdWVzdCB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgcGhvbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgc2lnbnVwIChyZWdpc3RybykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbnVwUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSB2ZXJpZmljYXIgZW1haWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5RW1haWxSZXF1ZXN0IHtcbiAgZW1haWw6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHZlcmlmaWNhY2nDs24gZGUgZW1haWwuXG4gKiBTaSBlcyBleGl0b3NvLCBpbmNsdXllIHRva2VucyBwYXJhIGF1dG8tbG9naW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5RW1haWxSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIHZlcmlmaWVkOiBib29sZWFuO1xuICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICBmaXJlYmFzZVRva2VuPzogc3RyaW5nO1xuICBleHBpcmVzSW4/OiBudW1iZXI7XG4gIHRva2VuVHlwZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgcmVlbnZpYXIgY8OzZGlnbyBkZSB2ZXJpZmljYWNpw7NuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc2VuZENvZGVSZXF1ZXN0IHtcbiAgZW1haWw6IHN0cmluZztcbiAgdHlwZTogJ0VNQUlMX1ZFUklGWScgfCAnUEFTU1dPUkRfUkVTRVQnO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHJlZW52w61vIGRlIGPDs2RpZ28uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZW5kQ29kZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgc2VudDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgc2lnbmluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25pblJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICAvKiogUGxhdGFmb3JtYSBkZWwgZGlzcG9zaXRpdm8gKHBhcmEgZGV0ZWNjacOzbiBkZSBudWV2byBkaXNwb3NpdGl2bykgKi9cbiAgcGxhdGZvcm0/OiBEZXZpY2VQbGF0Zm9ybTtcbiAgLyoqIE5hdmVnYWRvciAoc29sbyB3ZWIpICovXG4gIGJyb3dzZXI/OiBzdHJpbmc7XG4gIC8qKiBTaXN0ZW1hIG9wZXJhdGl2byAqL1xuICBvcz86IHN0cmluZztcbiAgLyoqIE5vbWJyZSBhbWlnYWJsZSBkZWwgZGlzcG9zaXRpdm8gKi9cbiAgZGV2aWNlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBzaWduaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmluUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICBmaXJlYmFzZVRva2VuPzogc3RyaW5nO1xuICBleHBpcmVzSW4/OiBudW1iZXI7XG4gIHRva2VuVHlwZT86IHN0cmluZztcbiAgbWZhUmVxdWlyZWQ/OiBib29sZWFuO1xuICBtZmFUb2tlbj86IHN0cmluZztcbiAgbWZhTWV0aG9kPzogTUZBTWV0aG9kO1xuICByb2xlcz86IHN0cmluZ1tdO1xuICBwZXJtaXNzaW9ucz86IHN0cmluZ1tdO1xuICAvKiogSW5kaWNhIHNpIGVsIGxvZ2luIGZ1ZSBkZXNkZSB1biBkaXNwb3NpdGl2byBudWV2by9ubyByZWNvbm9jaWRvICovXG4gIGlzTmV3RGV2aWNlPzogYm9vbGVhbjtcbiAgLyoqIElEIGRlbCBkaXNwb3NpdGl2byB1c2FkbyBwYXJhIGVsIGxvZ2luICovXG4gIGRldmljZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSB2ZXJpZmljYXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQVZlcmlmeVJlcXVlc3Qge1xuICBtZmFUb2tlbjogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgdmVyaWZpY2FyIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFWZXJpZnlSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICBmaXJlYmFzZVRva2VuPzogc3RyaW5nO1xuICBleHBpcmVzSW46IG51bWJlcjtcbiAgdG9rZW5UeXBlOiBzdHJpbmc7XG4gIHJvbGVzPzogc3RyaW5nW107XG4gIHBlcm1pc3Npb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIHJlZnJlc2NhciB0b2tlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoUmVxdWVzdCB7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHJlZnJlc2NhciB0b2tlbi5cbiAqIEltcGxlbWVudGEgdG9rZW4gcm90YXRpb246IGNhZGEgcmVmcmVzaCBnZW5lcmEgdW4gbnVldm8gcmVmcmVzaCB0b2tlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZzsgLy8gVG9rZW4gcm90YXRpb246IG51ZXZvIHJlZnJlc2ggdG9rZW5cbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIGZpcmViYXNlVG9rZW4/OiBzdHJpbmc7XG4gIHJvbGVzPzogc3RyaW5nW107XG4gIHBlcm1pc3Npb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIGxvZ291dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dvdXRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgbG9nb3V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ291dFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBvYnRlbmVyIHBlcm1pc29zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldFBlcm1pc3Npb25zUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICByb2xlczogc3RyaW5nW107XG4gIHBlcm1pc3Npb25zOiBzdHJpbmdbXTtcbiAgaXNTdXBlckFkbWluOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBzZXR1cCBkZSBNRkEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUZBU2V0dXBSZXF1ZXN0IHtcbiAgbWV0aG9kOiBNRkFNZXRob2Q7XG4gIHBob25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHNldHVwIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTZXR1cFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgY29kZVNlbnQ6IGJvb2xlYW47XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgY29uZmlybWFyIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFDb25maXJtUmVxdWVzdCB7XG4gIGNvZGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBjb25maXJtYXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQUNvbmZpcm1SZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIG1mYUVuYWJsZWQ6IGJvb2xlYW47XG4gIG1ldGhvZDogTUZBTWV0aG9kO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBkZXNoYWJpbGl0YXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQURpc2FibGVSZXF1ZXN0IHtcbiAgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBkZXNoYWJpbGl0YXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQURpc2FibGVSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIG1mYURpc2FibGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBpbmljaWFyIHJlY3VwZXJhY2nDs24gZGUgY29udHJhc2XDsWEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXF1ZXN0IHtcbiAgZW1haWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBmb3Jnb3QgcGFzc3dvcmQgKHNpZW1wcmUgaWd1YWwgcG9yIHNlZ3VyaWRhZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgcmVzZXRlYXIgY29udHJhc2XDsWEgY29uIGPDs2RpZ28uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXRQYXNzd29yZFJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG4gIG5ld1Bhc3N3b3JkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgcmVzZXQgcGFzc3dvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXRQYXNzd29yZFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBvYnRlbmVyIHBlcmZpbCBkZWwgdXN1YXJpby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRQcm9maWxlUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBwaG9uZT86IHN0cmluZztcbiAgZW1haWxWZXJpZmllZDogYm9vbGVhbjtcbiAgcGhvbmVWZXJpZmllZDogYm9vbGVhbjtcbiAgbWZhRW5hYmxlZDogYm9vbGVhbjtcbiAgbWZhTWV0aG9kPzogTUZBTWV0aG9kO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIGFjdHVhbGl6YXIgcGVyZmlsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVByb2ZpbGVSZXF1ZXN0IHtcbiAgbmFtZT86IHN0cmluZztcbiAgcGhvbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgYWN0dWFsaXphciBwZXJmaWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlUHJvZmlsZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgdXBkYXRlZDogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVWRU5UT1MgREUgU0lOQ1JPTklaQUNJw5NOXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU1dJVENIIE9SR0FOSVpBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgY2FtYmlhciBkZSBvcmdhbml6YWNpw7NuIGFjdGl2YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2l0Y2hPcmdSZXF1ZXN0IHtcbiAgb3JnYW5pemF0aW9uSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBjYW1iaW8gZGUgb3JnYW5pemFjacOzbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2l0Y2hPcmdSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGZpcmViYXNlVG9rZW46IHN0cmluZztcbiAgYWN0aXZlT3JnOiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFVkVOVE9TIERFIFNJTkNST05JWkFDScOTTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIFRpcG9zIGRlIGV2ZW50b3MgZGUgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7FhcyAqL1xuZXhwb3J0IHR5cGUgQXV0aFN5bmNFdmVudFR5cGUgPVxuICB8ICdMT0dJTidcbiAgfCAnTE9HT1VUJ1xuICB8ICdUT0tFTl9SRUZSRVNIJ1xuICB8ICdQRVJNSVNTSU9OU19VUERBVEUnXG4gIHwgJ09SR19TV0lUQ0gnO1xuXG4vKipcbiAqIEV2ZW50byBkZSBzaW5jcm9uaXphY2nDs24gZW50cmUgcGVzdGHDsWFzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhTeW5jRXZlbnQge1xuICB0eXBlOiBBdXRoU3luY0V2ZW50VHlwZTtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHBheWxvYWQ/OiB7XG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gICAgcmVmcmVzaFRva2VuPzogc3RyaW5nOyAvLyBUb2tlbiByb3RhdGlvbiBzdXBwb3J0XG4gICAgZXhwaXJlc0F0PzogbnVtYmVyO1xuICAgIGFjdGl2ZU9yZz86IHN0cmluZztcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEpXVCBDTEFJTVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2xhaW1zIGRlbCBKV1QgZGUgYWNjZXNvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVENsYWltcyB7XG4gIC8qKiBVc2VyIElEICovXG4gIHVpZDogc3RyaW5nO1xuICAvKiogRW1haWwgKi9cbiAgZW1haWw6IHN0cmluZztcbiAgLyoqIFNlc3Npb24gSUQgKi9cbiAgc2lkPzogc3RyaW5nO1xuICAvKiogSXNzdWVkIGF0ICovXG4gIGlhdDogbnVtYmVyO1xuICAvKiogRXhwaXJhdGlvbiAqL1xuICBleHA6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNUT1JBR0Vcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRGF0b3MgcGVyc2lzdGlkb3MgZW4gc3RvcmFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZWRBdXRoU3RhdGUge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgcm9sZXM6IHN0cmluZ1tdO1xuICBwZXJtaXNzaW9uczogc3RyaW5nW107XG4gIGlzU3VwZXJBZG1pbjogYm9vbGVhbjtcbiAgZXhwaXJlc0F0PzogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gREVWSUNFIFJFR0lTVFJBVElPTiAoUHVzaCBOb3RpZmljYXRpb25zKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQbGF0YWZvcm1hcyBzb3BvcnRhZGFzIHBhcmEgcHVzaCBub3RpZmljYXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBEZXZpY2VQbGF0Zm9ybSA9ICd3ZWInIHwgJ2lvcycgfCAnYW5kcm9pZCc7XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIHJlZ2lzdHJhciB1biBkaXNwb3NpdGl2by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckRldmljZVJlcXVlc3Qge1xuICAvKiogRkNNIHRva2VuIGRlbCBkaXNwb3NpdGl2byAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogUGxhdGFmb3JtYSBkZWwgZGlzcG9zaXRpdm8gKi9cbiAgcGxhdGZvcm06IERldmljZVBsYXRmb3JtO1xuICAvKiogTmF2ZWdhZG9yIChzb2xvIHdlYikgKi9cbiAgYnJvd3Nlcj86IHN0cmluZztcbiAgLyoqIFNpc3RlbWEgb3BlcmF0aXZvICovXG4gIG9zPzogc3RyaW5nO1xuICAvKiogVmVyc2nDs24gZGUgbGEgYXBsaWNhY2nDs24gKi9cbiAgYXBwVmVyc2lvbj86IHN0cmluZztcbiAgLyoqIE5vbWJyZSBhbWlnYWJsZSBkZWwgZGlzcG9zaXRpdm8gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIE1ldGFkYXRhIGFkaWNpb25hbCAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgcmVnaXN0cm8gZGUgZGlzcG9zaXRpdm8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJEZXZpY2VSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGRldmljZToge1xuICAgIGRldmljZUlkOiBzdHJpbmc7XG4gICAgdG9rZW46IHN0cmluZztcbiAgICBwbGF0Zm9ybTogRGV2aWNlUGxhdGZvcm07XG4gICAgYnJvd3Nlcj86IHN0cmluZztcbiAgICBvcz86IHN0cmluZztcbiAgICBsYXN0QWN0aXZlOiBzdHJpbmc7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIH07XG4gIC8qKiB0cnVlIHNpIGVzIHVuIG51ZXZvIGRpc3Bvc2l0aXZvLCBmYWxzZSBzaSBzZSBhY3R1YWxpesOzIHVubyBleGlzdGVudGUgKi9cbiAgaXNOZXc6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVzdWx0YWRvIGRlIGhhYmlsaXRhciBub3RpZmljYWNpb25lcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVOb3RpZmljYXRpb25zUmVzdWx0IHtcbiAgLyoqIFNpIHNlIG90b3JnYXJvbiBsb3MgcGVybWlzb3MgKi9cbiAgZ3JhbnRlZDogYm9vbGVhbjtcbiAgLyoqIEZDTSB0b2tlbiAoc29sbyBzaSBncmFudGVkPXRydWUpICovXG4gIHRva2VuPzogc3RyaW5nO1xuICAvKiogU2kgZWwgZGlzcG9zaXRpdm8gZnVlIHJlZ2lzdHJhZG8gZW4gZWwgYmFja2VuZCAqL1xuICByZWdpc3RlcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFc3RhZG8gZGUgcGVybWlzb3MgZGUgbm90aWZpY2FjacOzbi5cbiAqL1xuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlID0gJ2dyYW50ZWQnIHwgJ2RlbmllZCcgfCAnZGVmYXVsdCcgfCAndW5zdXBwb3J0ZWQnO1xuXG4vKipcbiAqIFJlc3VsdGFkbyBkZWwgcmVnaXN0cm8gbWFudWFsIGRlIGRpc3Bvc2l0aXZvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRGV2aWNlUmVzdWx0IHtcbiAgLyoqIFNpIGVsIGRpc3Bvc2l0aXZvIGZ1ZSByZWdpc3RyYWRvIGV4aXRvc2FtZW50ZSAqL1xuICByZWdpc3RlcmVkOiBib29sZWFuO1xuICAvKiogSUQgZGVsIGRpc3Bvc2l0aXZvIChzb2xvIHNpIHJlZ2lzdGVyZWQ9dHJ1ZSkgKi9cbiAgZGV2aWNlSWQ/OiBzdHJpbmc7XG4gIC8qKiBGQ00gdG9rZW4gdXNhZG8gcGFyYSBlbCByZWdpc3RybyAqL1xuICB0b2tlbj86IHN0cmluZztcbiAgLyoqIE1lbnNhamUgZGUgZXJyb3IgKHNvbG8gc2kgcmVnaXN0ZXJlZD1mYWxzZSkgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBERVZJQ0UgTUFOQUdFTUVOVCAoRGV0ZWNjacOzbiBkZSBkaXNwb3NpdGl2b3MgbnVldm9zKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFc3RhZG9zIHBvc2libGVzIGRlIHVuIGRpc3Bvc2l0aXZvLlxuICovXG5leHBvcnQgdHlwZSBEZXZpY2VTdGF0dXMgPSAnYWN0aXZlJyB8ICdwZW5kaW5nX2FwcHJvdmFsJyB8ICdibG9ja2VkJztcblxuLyoqXG4gKiBJbmZvcm1hY2nDs24gY29tcGxldGEgZGUgdW4gZGlzcG9zaXRpdm8gcmVnaXN0cmFkby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VJbmZvIHtcbiAgLyoqIElEIMO6bmljbyBkZWwgZGlzcG9zaXRpdm8gKi9cbiAgZGV2aWNlSWQ6IHN0cmluZztcbiAgLyoqIFBsYXRhZm9ybWEgZGVsIGRpc3Bvc2l0aXZvICovXG4gIHBsYXRmb3JtOiBEZXZpY2VQbGF0Zm9ybTtcbiAgLyoqIE5hdmVnYWRvciAoc29sbyB3ZWIpICovXG4gIGJyb3dzZXI/OiBzdHJpbmc7XG4gIC8qKiBTaXN0ZW1hIG9wZXJhdGl2byAqL1xuICBvcz86IHN0cmluZztcbiAgLyoqIE5vbWJyZSBhbWlnYWJsZSBkZWwgZGlzcG9zaXRpdm8gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIEVzdGFkbyBhY3R1YWwgZGVsIGRpc3Bvc2l0aXZvICovXG4gIHN0YXR1czogRGV2aWNlU3RhdHVzO1xuICAvKiogRGlyZWNjacOzbiBJUCBkZWwgw7psdGltbyBhY2Nlc28gKi9cbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICAvKiogVWJpY2FjacOzbiBnZW9ncsOhZmljYSBhcHJveGltYWRhICovXG4gIGxvY2F0aW9uPzogc3RyaW5nO1xuICAvKiogw5psdGltYSBhY3RpdmlkYWQgKi9cbiAgbGFzdEFjdGl2ZTogc3RyaW5nO1xuICAvKiogRmVjaGEgZGUgY3JlYWNpw7NuL3JlZ2lzdHJvICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAvKiogRmVjaGEgZGUgYXByb2JhY2nDs24gKHNpIGFwbGljYSkgKi9cbiAgYXBwcm92ZWRBdD86IHN0cmluZztcbiAgLyoqIEZlY2hhIGRlIGJsb3F1ZW8gKHNpIGFwbGljYSkgKi9cbiAgYmxvY2tlZEF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIGxpc3RhciBkaXNwb3NpdGl2b3MgZGVsIHVzdWFyaW8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdERldmljZXNSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGRldmljZXM6IERldmljZUluZm9bXTtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBhY2Npw7NuIHNvYnJlIGRpc3Bvc2l0aXZvIChibG9jay9hcHByb3ZlL2RlbGV0ZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlQWN0aW9uUmVzdWx0IHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU0VTU0lPTiBNQU5BR0VNRU5UIChHZXN0acOzbiBkZSBzZXNpb25lcyBhY3RpdmFzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJbmZvcm1hY2nDs24gZGUgdW5hIHNlc2nDs24gYWN0aXZhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25JbmZvIHtcbiAgLyoqIElEIMO6bmljbyBkZSBsYSBzZXNpw7NuICovXG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICAvKiogSUQgZGVsIGRpc3Bvc2l0aXZvIGFzb2NpYWRvIChzaSBleGlzdGUpICovXG4gIGRldmljZUlkPzogc3RyaW5nO1xuICAvKiogSW5mb3JtYWNpw7NuIGRlbCBkaXNwb3NpdGl2byAoVXNlci1BZ2VudCkgKi9cbiAgZGV2aWNlSW5mbz86IHN0cmluZztcbiAgLyoqIERpcmVjY2nDs24gSVAgZGUgbGEgc2VzacOzbiAqL1xuICBpcD86IHN0cmluZztcbiAgLyoqIFViaWNhY2nDs24gZ2VvZ3LDoWZpY2EgYXByb3hpbWFkYSAqL1xuICBsb2NhdGlvbj86IHN0cmluZztcbiAgLyoqIEZlY2hhIGRlIGNyZWFjacOzbiBkZSBsYSBzZXNpw7NuICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAvKiogRmVjaGEgZGUgZXhwaXJhY2nDs24gZGUgbGEgc2VzacOzbiAqL1xuICBleHBpcmVzQXQ6IHN0cmluZztcbiAgLyoqIEluZGljYSBzaSBlcyBsYSBzZXNpw7NuIGFjdHVhbCBkZWwgdXN1YXJpbyAqL1xuICBpc0N1cnJlbnQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgbGlzdGFyIHNlc2lvbmVzIGFjdGl2YXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFNlc3Npb25zUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBzZXNzaW9uczogU2Vzc2lvbkluZm9bXTtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSByZXZvY2FyIHNlc2nDs24oZXMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldm9rZVNlc3Npb25zUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBzdWNjZXNzOiBib29sZWFuO1xuICAvKiogTsO6bWVybyBkZSBzZXNpb25lcyByZXZvY2FkYXMgKi9cbiAgc2Vzc2lvbnNSZXZva2VkOiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBERVZJQ0UgQUNUSU9OIChBY2Npb25lcyBkZXNkZSBlbWFpbCBkZSBhbGVydGEpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBlamVjdXRhciBhY2Npw7NuIGRlIGRpc3Bvc2l0aXZvIGRlc2RlIGVtYWlsLlxuICogRWwgdG9rZW4gdmllbmUgZW4gbGEgVVJMIGRlbCBlbWFpbCBkZSBhbGVydGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlQWN0aW9uUmVxdWVzdCB7XG4gIC8qKiBUb2tlbiBKV1QgZGUgYWNjacOzbiAoMjRoLCB1biBzb2xvIHVzbykgKi9cbiAgdG9rZW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBlamVjdXRhciBhY2Npw7NuIGRlIGRpc3Bvc2l0aXZvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUFjdGlvblJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgLyoqIFNpIGxhIGFjY2nDs24gZnVlIGVqZWN1dGFkYSBleGl0b3NhbWVudGUgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgLyoqIEFjY2nDs24gZWplY3V0YWRhIChyZWZ1c2UsIGFwcHJvdmUsIGJsb2NrKSAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIElEIGRlbCBkaXNwb3NpdGl2byBhZmVjdGFkbyAqL1xuICBkZXZpY2VJZDogc3RyaW5nO1xuICAvKiogTsO6bWVybyBkZSBzZXNpb25lcyByZXZvY2FkYXMgKHNpIGFjdGlvbj1yZWZ1c2UvYmxvY2spICovXG4gIHNlc3Npb25zUmV2b2tlZD86IG51bWJlcjtcbiAgLyoqIE1lbnNhamUgZGVzY3JpcHRpdm8gKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuIl19
|
|
@@ -25056,10 +25056,19 @@ class AuthService {
|
|
|
25056
25056
|
// =============================================
|
|
25057
25057
|
/**
|
|
25058
25058
|
* Inicia sesión con email y contraseña.
|
|
25059
|
+
* Detecta automáticamente la plataforma para identificar dispositivos nuevos.
|
|
25059
25060
|
*/
|
|
25060
25061
|
signin(request) {
|
|
25061
25062
|
this.stateService.clearError();
|
|
25062
|
-
|
|
25063
|
+
// Agregar info de plataforma para device detection
|
|
25064
|
+
const platformInfo = this.detectPlatformInfo();
|
|
25065
|
+
const enrichedRequest = {
|
|
25066
|
+
...request,
|
|
25067
|
+
platform: request.platform ?? platformInfo.platform,
|
|
25068
|
+
browser: request.browser ?? platformInfo.browser,
|
|
25069
|
+
os: request.os ?? platformInfo.os,
|
|
25070
|
+
};
|
|
25071
|
+
return this.http.post(`${this.baseUrl}/signin`, enrichedRequest).pipe(tap(response => {
|
|
25063
25072
|
if (response.mfaRequired) {
|
|
25064
25073
|
// MFA requerido - guardar estado temporal
|
|
25065
25074
|
this.stateService.setMFAPending({
|
|
@@ -25071,6 +25080,10 @@ class AuthService {
|
|
|
25071
25080
|
else if (response.accessToken) {
|
|
25072
25081
|
// Login exitoso sin MFA
|
|
25073
25082
|
this.handleSuccessfulAuth(response);
|
|
25083
|
+
// Notificar si es un dispositivo nuevo
|
|
25084
|
+
if (response.isNewDevice) {
|
|
25085
|
+
console.log('[ValtechAuth] New device detected:', response.deviceId);
|
|
25086
|
+
}
|
|
25074
25087
|
}
|
|
25075
25088
|
}), catchError(error => this.handleAuthError(error)));
|
|
25076
25089
|
}
|
|
@@ -26192,6 +26205,178 @@ function roleGuard(roles) {
|
|
|
26192
26205
|
};
|
|
26193
26206
|
}
|
|
26194
26207
|
|
|
26208
|
+
/**
|
|
26209
|
+
* Servicio para gestión de dispositivos del usuario.
|
|
26210
|
+
* Permite listar, aprobar, bloquear y eliminar dispositivos registrados.
|
|
26211
|
+
*
|
|
26212
|
+
* @example
|
|
26213
|
+
* ```typescript
|
|
26214
|
+
* import { DeviceService } from 'valtech-components';
|
|
26215
|
+
*
|
|
26216
|
+
* @Component({...})
|
|
26217
|
+
* export class DevicesPage {
|
|
26218
|
+
* private deviceService = inject(DeviceService);
|
|
26219
|
+
*
|
|
26220
|
+
* devices = signal<DeviceInfo[]>([]);
|
|
26221
|
+
*
|
|
26222
|
+
* async ngOnInit() {
|
|
26223
|
+
* const devices = await firstValueFrom(this.deviceService.listDevices());
|
|
26224
|
+
* this.devices.set(devices);
|
|
26225
|
+
* }
|
|
26226
|
+
*
|
|
26227
|
+
* async blockDevice(deviceId: string) {
|
|
26228
|
+
* await firstValueFrom(this.deviceService.blockDevice(deviceId));
|
|
26229
|
+
* // Recargar lista
|
|
26230
|
+
* }
|
|
26231
|
+
* }
|
|
26232
|
+
* ```
|
|
26233
|
+
*/
|
|
26234
|
+
class DeviceService {
|
|
26235
|
+
constructor(config, http) {
|
|
26236
|
+
this.config = config;
|
|
26237
|
+
this.http = http;
|
|
26238
|
+
}
|
|
26239
|
+
get baseUrl() {
|
|
26240
|
+
return `${this.config.apiUrl}/v2/users/me/devices`;
|
|
26241
|
+
}
|
|
26242
|
+
/**
|
|
26243
|
+
* Lista todos los dispositivos registrados del usuario.
|
|
26244
|
+
*/
|
|
26245
|
+
listDevices() {
|
|
26246
|
+
return this.http.get(this.baseUrl).pipe(map$1(response => response.devices));
|
|
26247
|
+
}
|
|
26248
|
+
/**
|
|
26249
|
+
* Obtiene información de un dispositivo específico.
|
|
26250
|
+
*/
|
|
26251
|
+
getDevice(deviceId) {
|
|
26252
|
+
return this.http.get(`${this.baseUrl}/${deviceId}`).pipe(map$1(response => response.device));
|
|
26253
|
+
}
|
|
26254
|
+
/**
|
|
26255
|
+
* Bloquea un dispositivo.
|
|
26256
|
+
* Revoca todas las sesiones activas de ese dispositivo.
|
|
26257
|
+
*/
|
|
26258
|
+
blockDevice(deviceId) {
|
|
26259
|
+
return this.http.post(`${this.baseUrl}/${deviceId}/block`, {});
|
|
26260
|
+
}
|
|
26261
|
+
/**
|
|
26262
|
+
* Aprueba un dispositivo pendiente.
|
|
26263
|
+
* Cambia el estado de pending_approval a active.
|
|
26264
|
+
*/
|
|
26265
|
+
approveDevice(deviceId) {
|
|
26266
|
+
return this.http.post(`${this.baseUrl}/${deviceId}/approve`, {});
|
|
26267
|
+
}
|
|
26268
|
+
/**
|
|
26269
|
+
* Elimina un dispositivo registrado.
|
|
26270
|
+
*/
|
|
26271
|
+
deleteDevice(deviceId) {
|
|
26272
|
+
return this.http.delete(`${this.baseUrl}/${deviceId}`);
|
|
26273
|
+
}
|
|
26274
|
+
/**
|
|
26275
|
+
* Ejecuta una acción de dispositivo desde un token de email.
|
|
26276
|
+
* Este endpoint NO requiere autenticación.
|
|
26277
|
+
* El token viene en la URL del email de alerta de nuevo inicio de sesión.
|
|
26278
|
+
*
|
|
26279
|
+
* @param token Token JWT de acción (24h, un solo uso)
|
|
26280
|
+
*
|
|
26281
|
+
* @example
|
|
26282
|
+
* ```typescript
|
|
26283
|
+
* // En la página de dispositivos, al detectar ?token=xxx en la URL:
|
|
26284
|
+
* const token = this.route.snapshot.queryParams['token'];
|
|
26285
|
+
* if (token) {
|
|
26286
|
+
* const result = await firstValueFrom(this.deviceService.executeAction(token));
|
|
26287
|
+
* if (result.success) {
|
|
26288
|
+
* console.log(`Dispositivo bloqueado, ${result.sessionsRevoked} sesiones cerradas`);
|
|
26289
|
+
* }
|
|
26290
|
+
* }
|
|
26291
|
+
* ```
|
|
26292
|
+
*/
|
|
26293
|
+
executeAction(token) {
|
|
26294
|
+
return this.http.post(`${this.config.apiUrl}/v2/auth/device-action`, { token });
|
|
26295
|
+
}
|
|
26296
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DeviceService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1$8.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26297
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DeviceService, providedIn: 'root' }); }
|
|
26298
|
+
}
|
|
26299
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DeviceService, decorators: [{
|
|
26300
|
+
type: Injectable,
|
|
26301
|
+
args: [{ providedIn: 'root' }]
|
|
26302
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
26303
|
+
type: Inject,
|
|
26304
|
+
args: [VALTECH_AUTH_CONFIG]
|
|
26305
|
+
}] }, { type: i1$8.HttpClient }] });
|
|
26306
|
+
|
|
26307
|
+
/**
|
|
26308
|
+
* Servicio para gestión de sesiones activas del usuario.
|
|
26309
|
+
* Permite listar y revocar sesiones.
|
|
26310
|
+
*
|
|
26311
|
+
* @example
|
|
26312
|
+
* ```typescript
|
|
26313
|
+
* import { SessionService } from 'valtech-components';
|
|
26314
|
+
*
|
|
26315
|
+
* @Component({...})
|
|
26316
|
+
* export class SessionsPage {
|
|
26317
|
+
* private sessionService = inject(SessionService);
|
|
26318
|
+
*
|
|
26319
|
+
* sessions = signal<SessionInfo[]>([]);
|
|
26320
|
+
*
|
|
26321
|
+
* async ngOnInit() {
|
|
26322
|
+
* const sessions = await firstValueFrom(this.sessionService.listSessions());
|
|
26323
|
+
* this.sessions.set(sessions);
|
|
26324
|
+
* }
|
|
26325
|
+
*
|
|
26326
|
+
* async revokeSession(sessionId: string) {
|
|
26327
|
+
* await firstValueFrom(this.sessionService.revokeSession(sessionId));
|
|
26328
|
+
* // Recargar lista
|
|
26329
|
+
* }
|
|
26330
|
+
*
|
|
26331
|
+
* async revokeAllOthers() {
|
|
26332
|
+
* const result = await firstValueFrom(this.sessionService.revokeAllSessions());
|
|
26333
|
+
* console.log(`${result.sessionsRevoked} sesiones cerradas`);
|
|
26334
|
+
* }
|
|
26335
|
+
* }
|
|
26336
|
+
* ```
|
|
26337
|
+
*/
|
|
26338
|
+
class SessionService {
|
|
26339
|
+
constructor(config, http) {
|
|
26340
|
+
this.config = config;
|
|
26341
|
+
this.http = http;
|
|
26342
|
+
}
|
|
26343
|
+
get baseUrl() {
|
|
26344
|
+
return `${this.config.apiUrl}/v2/users/me/sessions`;
|
|
26345
|
+
}
|
|
26346
|
+
/**
|
|
26347
|
+
* Lista todas las sesiones activas del usuario.
|
|
26348
|
+
* La sesión actual está marcada con isCurrent=true.
|
|
26349
|
+
*/
|
|
26350
|
+
listSessions() {
|
|
26351
|
+
return this.http.get(this.baseUrl).pipe(map$1(response => response.sessions));
|
|
26352
|
+
}
|
|
26353
|
+
/**
|
|
26354
|
+
* Revoca una sesión específica.
|
|
26355
|
+
* Fuerza el cierre de sesión en ese dispositivo/navegador.
|
|
26356
|
+
*/
|
|
26357
|
+
revokeSession(sessionId) {
|
|
26358
|
+
return this.http.delete(`${this.baseUrl}/${sessionId}`);
|
|
26359
|
+
}
|
|
26360
|
+
/**
|
|
26361
|
+
* Revoca todas las sesiones excepto la actual.
|
|
26362
|
+
* Útil para "cerrar sesión en todos los dispositivos".
|
|
26363
|
+
*
|
|
26364
|
+
* @returns Número de sesiones revocadas
|
|
26365
|
+
*/
|
|
26366
|
+
revokeAllSessions() {
|
|
26367
|
+
return this.http.delete(this.baseUrl);
|
|
26368
|
+
}
|
|
26369
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SessionService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1$8.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26370
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SessionService, providedIn: 'root' }); }
|
|
26371
|
+
}
|
|
26372
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SessionService, decorators: [{
|
|
26373
|
+
type: Injectable,
|
|
26374
|
+
args: [{ providedIn: 'root' }]
|
|
26375
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
26376
|
+
type: Inject,
|
|
26377
|
+
args: [VALTECH_AUTH_CONFIG]
|
|
26378
|
+
}] }, { type: i1$8.HttpClient }] });
|
|
26379
|
+
|
|
26195
26380
|
/**
|
|
26196
26381
|
* Valtech Auth Service
|
|
26197
26382
|
*
|
|
@@ -26272,5 +26457,5 @@ function roleGuard(roles) {
|
|
|
26272
26457
|
* Generated bundle index. Do not edit.
|
|
26273
26458
|
*/
|
|
26274
26459
|
|
|
26275
|
-
export { ARTICLE_SPACING, AccordionComponent, ActionHeaderComponent, ActionType, AlertBoxComponent, ArticleBuilder, ArticleComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContentLoaderComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_AUTH_CONFIG, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_EMPTY_STATE, DEFAULT_LEGEND_LABELS, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PAYMENT_STATUS_COLORS, DEFAULT_PAYMENT_STATUS_LABELS, DEFAULT_PLATFORMS, DEFAULT_STATUS_COLORS, DEFAULT_STATUS_LABELS, DEFAULT_WINNER_LABELS, DataTableComponent, DateInputComponent, DateRangeInputComponent, DisplayComponent, DividerComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FabComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FunHeaderComponent, GlowCardComponent, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InfoComponent, InputType, ItemListComponent, LanguageSelectorComponent, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessorService, LinksAccordionComponent, LinksCakeComponent, LocalStorageService, LocaleService, MODAL_SIZES, MOTION, MenuComponent, MessagingService, ModalService, MultiSelectSearchComponent, NavigationService, NoContentComponent, NotesBoxComponent, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PLATFORM_CONFIGS, PageContentComponent, PageTemplateComponent, PageWrapperComponent, PaginationComponent, ParticipantCardComponent, PasswordInputComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RaffleStatusCardComponent, RangeInputComponent, RatingComponent, RecapCardComponent, RightsFooterComponent, SKELETON_PRESETS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TabbedContentComponent, TabsComponent, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TicketGridComponent, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TypedCollection, VALTECH_AUTH_CONFIG, VALTECH_FIREBASE_CONFIG, WinnerDisplayComponent, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, buildPath, collections, createFirebaseConfig, createGlowCardProps, createNumberFromToField, createTitleProps, extractPathParams, getCollectionPath, getDocumentId, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, permissionGuard, permissionGuardFromRoute, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFirebase, query, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard };
|
|
26460
|
+
export { ARTICLE_SPACING, AccordionComponent, ActionHeaderComponent, ActionType, AlertBoxComponent, ArticleBuilder, ArticleComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContentLoaderComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_AUTH_CONFIG, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_EMPTY_STATE, DEFAULT_LEGEND_LABELS, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PAYMENT_STATUS_COLORS, DEFAULT_PAYMENT_STATUS_LABELS, DEFAULT_PLATFORMS, DEFAULT_STATUS_COLORS, DEFAULT_STATUS_LABELS, DEFAULT_WINNER_LABELS, DataTableComponent, DateInputComponent, DateRangeInputComponent, DeviceService, DisplayComponent, DividerComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FabComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FunHeaderComponent, GlowCardComponent, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InfoComponent, InputType, ItemListComponent, LanguageSelectorComponent, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessorService, LinksAccordionComponent, LinksCakeComponent, LocalStorageService, LocaleService, MODAL_SIZES, MOTION, MenuComponent, MessagingService, ModalService, MultiSelectSearchComponent, NavigationService, NoContentComponent, NotesBoxComponent, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PLATFORM_CONFIGS, PageContentComponent, PageTemplateComponent, PageWrapperComponent, PaginationComponent, ParticipantCardComponent, PasswordInputComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RaffleStatusCardComponent, RangeInputComponent, RatingComponent, RecapCardComponent, RightsFooterComponent, SKELETON_PRESETS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TabbedContentComponent, TabsComponent, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TicketGridComponent, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TypedCollection, VALTECH_AUTH_CONFIG, VALTECH_FIREBASE_CONFIG, WinnerDisplayComponent, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, buildPath, collections, createFirebaseConfig, createGlowCardProps, createNumberFromToField, createTitleProps, extractPathParams, getCollectionPath, getDocumentId, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, permissionGuard, permissionGuardFromRoute, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFirebase, query, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard };
|
|
26276
26461
|
//# sourceMappingURL=valtech-components.mjs.map
|