valtech-components 2.0.477 → 2.0.479

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.
@@ -618,6 +618,61 @@ export class AuthService {
618
618
  }
619
619
  return this.messagingService.getPermissionState();
620
620
  }
621
+ /**
622
+ * Registra manualmente el dispositivo en el backend.
623
+ * Útil para sincronizar dispositivos que tienen token FCM pero no están registrados.
624
+ *
625
+ * @returns Resultado del registro con deviceId si fue exitoso
626
+ *
627
+ * @example
628
+ * ```typescript
629
+ * // Sincronizar dispositivo manualmente
630
+ * const result = await this.auth.registerDevice();
631
+ * if (result.registered) {
632
+ * console.log('Dispositivo registrado:', result.deviceId);
633
+ * }
634
+ * ```
635
+ */
636
+ async registerDevice() {
637
+ if (!this.messagingService) {
638
+ return { registered: false, error: 'MessagingService no disponible' };
639
+ }
640
+ if (!this.isAuthenticated()) {
641
+ return { registered: false, error: 'Usuario no autenticado' };
642
+ }
643
+ try {
644
+ // Verificar permisos primero (no depende del Injector de Messaging)
645
+ const permission = this.messagingService.getPermissionState();
646
+ if (permission !== 'granted') {
647
+ return { registered: false, error: 'Permiso de notificaciones no otorgado' };
648
+ }
649
+ // Intentar usar token existente primero (evita problemas de timing con Injector)
650
+ let token = this.messagingService.currentToken;
651
+ // Si no hay token existente, intentar obtener uno nuevo
652
+ if (!token) {
653
+ // Solo verificar isSupported si necesitamos obtener nuevo token
654
+ if (!await this.messagingService.isSupported()) {
655
+ return { registered: false, error: 'FCM no soportado en este navegador' };
656
+ }
657
+ token = await this.messagingService.getToken();
658
+ }
659
+ if (!token) {
660
+ return { registered: false, error: 'No se pudo obtener token FCM' };
661
+ }
662
+ // Registrar en backend
663
+ const { platform, browser, os } = this.detectPlatformInfo();
664
+ const response = await firstValueFrom(this.http.post(`${this.config.apiUrl}/v2/users/me/devices`, { token, platform, browser, os }));
665
+ console.log('[ValtechAuth] Device registered manually:', response.device.deviceId);
666
+ return { registered: true, deviceId: response.device.deviceId, token };
667
+ }
668
+ catch (error) {
669
+ console.warn('[ValtechAuth] Manual device registration failed:', error);
670
+ return {
671
+ registered: false,
672
+ error: error?.error?.message || error?.message || 'Error al registrar dispositivo'
673
+ };
674
+ }
675
+ }
621
676
  /**
622
677
  * Registra el dispositivo en el backend si tiene permisos de notificación.
623
678
  * Se llama automáticamente después de un login exitoso si enableDeviceRegistration=true.
@@ -727,4 +782,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
727
782
  }] }, { type: i1.HttpClient }, { type: i2.Router }, { type: i3.AuthStateService }, { type: i4.TokenService }, { type: i5.AuthStorageService }, { type: i6.AuthSyncService }, { type: i7.FirebaseService }, { type: i7.MessagingService, decorators: [{
728
783
  type: Optional
729
784
  }] }] });
730
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEUsT0FBTyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7O0FBdUMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFLdEIsWUFDdUMsTUFBeUIsRUFDdEQsSUFBZ0IsRUFDaEIsTUFBYyxFQUNkLFlBQThCLEVBQzlCLFlBQTBCLEVBQzFCLGNBQWtDLEVBQ2xDLFdBQTRCLEVBQzVCLGVBQWdDLEVBQ3BCLGdCQUF5QztRQVJ4QixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN0RCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQW9CO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDcEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQWIvRCwrQkFBK0I7UUFDdkIsbUJBQWMsR0FBeUMsSUFBSSxDQUFDO1FBQzVELHFCQUFnQixHQUF3QixJQUFJLENBQUM7UUFjckQsZ0RBQWdE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QzthQUFNLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5RSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2IsQ0FBQztRQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMxQyxDQUFDOytHQWx5QlUsV0FBVyxrQkFNWixtQkFBbUI7bUhBTmxCLFdBQVcsY0FERSxNQUFNOzs0RkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQU83QixNQUFNOzJCQUFDLG1CQUFtQjs7MEJBUTFCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIG9mLCBmcm9tLCBmaXJzdFZhbHVlRnJvbSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIGNhdGNoRXJyb3IsIHN3aXRjaE1hcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0FVVEhfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQXV0aFN0YXRlU2VydmljZSB9IGZyb20gJy4vYXV0aC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gJy4vdG9rZW4uc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU3luY1NlcnZpY2UgfSBmcm9tICcuL3N5bmMuc2VydmljZSc7XG5pbXBvcnQge1xuICBTaWduaW5SZXF1ZXN0LFxuICBTaWduaW5SZXNwb25zZSxcbiAgU2lnbnVwUmVxdWVzdCxcbiAgU2lnbnVwUmVzcG9uc2UsXG4gIFZlcmlmeUVtYWlsUmVxdWVzdCxcbiAgVmVyaWZ5RW1haWxSZXNwb25zZSxcbiAgUmVzZW5kQ29kZVJlcXVlc3QsXG4gIFJlc2VuZENvZGVSZXNwb25zZSxcbiAgTUZBVmVyaWZ5UmVzcG9uc2UsXG4gIFJlZnJlc2hSZXNwb25zZSxcbiAgR2V0UGVybWlzc2lvbnNSZXNwb25zZSxcbiAgR2V0UHJvZmlsZVJlc3BvbnNlLFxuICBVcGRhdGVQcm9maWxlUmVxdWVzdCxcbiAgVXBkYXRlUHJvZmlsZVJlc3BvbnNlLFxuICBNRkFTZXR1cFJlc3BvbnNlLFxuICBNRkFDb25maXJtUmVzcG9uc2UsXG4gIE1GQURpc2FibGVSZXNwb25zZSxcbiAgRm9yZ290UGFzc3dvcmRSZXF1ZXN0LFxuICBGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLFxuICBSZXNldFBhc3N3b3JkUmVxdWVzdCxcbiAgUmVzZXRQYXNzd29yZFJlc3BvbnNlLFxuICBTd2l0Y2hPcmdSZXNwb25zZSxcbiAgTUZBTWV0aG9kLFxuICBBdXRoRXJyb3IsXG4gIEF1dGhTeW5jRXZlbnQsXG4gIFZhbHRlY2hBdXRoQ29uZmlnLFxuICBSZWdpc3RlckRldmljZVJlc3BvbnNlLFxuICBFbmFibGVOb3RpZmljYXRpb25zUmVzdWx0LFxuICBOb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGUsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlLCBNZXNzYWdpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vZmlyZWJhc2UnO1xuXG5cbi8qKlxuICogU2VydmljaW8gcHJpbmNpcGFsIGRlIGF1dGVudGljYWNpw7NuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogQENvbXBvbmVudCh7Li4ufSlcbiAqIGV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCB7XG4gKiAgIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gKlxuICogICBhc3luYyBsb2dpbigpIHtcbiAqICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGguc2lnbmluKHsgZW1haWwsIHBhc3N3b3JkIH0pKTtcbiAqICAgICBpZiAodGhpcy5hdXRoLm1mYVBlbmRpbmcoKS5yZXF1aXJlZCkge1xuICogICAgICAgLy8gTW9zdHJhciBVSSBkZSBNRkFcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvLyBUaW1lciBwYXJhIHJlZnJlc2ggcHJvYWN0aXZvXG4gIHByaXZhdGUgcmVmcmVzaFRpbWVySWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3luY1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBzdGF0ZVNlcnZpY2U6IEF1dGhTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBBdXRoU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeW5jU2VydmljZTogQXV0aFN5bmNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlyZWJhc2VTZXJ2aWNlOiBGaXJlYmFzZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBtZXNzYWdpbmdTZXJ2aWNlOiBNZXNzYWdpbmdTZXJ2aWNlIHwgbnVsbCxcbiAgKSB7fVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFU1RBRE8gUMOaQkxJQ08gKFNpZ25hbHMgcmVhZG9ubHkpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBFc3RhZG8gY29tcGxldG8gZGUgYXV0ZW50aWNhY2nDs24gKi9cbiAgcmVhZG9ubHkgc3RhdGUgPSB0aGlzLnN0YXRlU2VydmljZS5zdGF0ZTtcblxuICAvKiogVXN1YXJpbyBlc3TDoSBhdXRlbnRpY2FkbyAqL1xuICByZWFkb25seSBpc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLnN0YXRlU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQ7XG5cbiAgLyoqIEVzdGFkbyBkZSBjYXJnYSAqL1xuICByZWFkb25seSBpc0xvYWRpbmcgPSB0aGlzLnN0YXRlU2VydmljZS5pc0xvYWRpbmc7XG5cbiAgLyoqIEluZm9ybWFjacOzbiBkZWwgdXN1YXJpbyAqL1xuICByZWFkb25seSB1c2VyID0gdGhpcy5zdGF0ZVNlcnZpY2UudXNlcjtcblxuICAvKiogVG9rZW4gZGUgYWNjZXNvICovXG4gIHJlYWRvbmx5IGFjY2Vzc1Rva2VuID0gdGhpcy5zdGF0ZVNlcnZpY2UuYWNjZXNzVG9rZW47XG5cbiAgLyoqIFJvbGVzIGRlbCB1c3VhcmlvICovXG4gIHJlYWRvbmx5IHJvbGVzID0gdGhpcy5zdGF0ZVNlcnZpY2Uucm9sZXM7XG5cbiAgLyoqIFBlcm1pc29zIGRlbCB1c3VhcmlvICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zID0gdGhpcy5zdGF0ZVNlcnZpY2UucGVybWlzc2lvbnM7XG5cbiAgLyoqIFVzdWFyaW8gZXMgc3VwZXIgYWRtaW4gKi9cbiAgcmVhZG9ubHkgaXNTdXBlckFkbWluID0gdGhpcy5zdGF0ZVNlcnZpY2UuaXNTdXBlckFkbWluO1xuXG4gIC8qKiBFc3RhZG8gZGUgTUZBIHBlbmRpZW50ZSAqL1xuICByZWFkb25seSBtZmFQZW5kaW5nID0gdGhpcy5zdGF0ZVNlcnZpY2UubWZhUGVuZGluZztcblxuICAvKiogRXJyb3IgYWN0dWFsICovXG4gIHJlYWRvbmx5IGVycm9yID0gdGhpcy5zdGF0ZVNlcnZpY2UuZXJyb3I7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIElOSUNJQUxJWkFDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBkZSBhdXRlbnRpY2FjacOzbi5cbiAgICogTGxhbWFkbyBhdXRvbcOhdGljYW1lbnRlIHBvciBwcm92aWRlVmFsdGVjaEF1dGguXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIDEuIENhcmdhciBlc3RhZG8gZGVzZGUgc3RvcmFnZVxuICAgIGNvbnN0IHN0b3JlZFN0YXRlID0gdGhpcy5zdG9yYWdlU2VydmljZS5sb2FkU3RhdGUoKTtcblxuICAgIGlmIChzdG9yZWRTdGF0ZS5hY2Nlc3NUb2tlbikge1xuICAgICAgLy8gMi4gVmVyaWZpY2FyIHNpIHRva2VuIGVzIHbDoWxpZG9cbiAgICAgIGlmICh0aGlzLnRva2VuU2VydmljZS5pc1Rva2VuVmFsaWQoc3RvcmVkU3RhdGUuYWNjZXNzVG9rZW4pKSB7XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc3RvcmVGcm9tU3RvcmFnZShzdG9yZWRTdGF0ZSk7XG5cbiAgICAgICAgLy8gRXh0cmFlciBpbmZvIGRlbCB0b2tlblxuICAgICAgICBjb25zdCBjbGFpbXMgPSB0aGlzLnRva2VuU2VydmljZS5wYXJzZVRva2VuKHN0b3JlZFN0YXRlLmFjY2Vzc1Rva2VuKTtcbiAgICAgICAgaWYgKGNsYWltcykge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZVVzZXJJbmZvKGNsYWltcy51aWQsIGNsYWltcy5lbWFpbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJbmljaWFyIHRpbWVyIGRlIHJlZnJlc2NvIHByb2FjdGl2b1xuICAgICAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gICAgICB9IGVsc2UgaWYgKHN0b3JlZFN0YXRlLnJlZnJlc2hUb2tlbikge1xuICAgICAgICAvLyA0LiBUb2tlbiBleHBpcmFkbyBwZXJvIGhheSByZWZyZXNoIHRva2VuIC0gaW50ZW50YXIgcmVmcmVzY2FyXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4oKSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRoaXMuc2lnbk91dEZpcmViYXNlKCk7XG4gICAgICAgICAgdGhpcy5jbGVhclN0YXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2lnbk91dEZpcmViYXNlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuIEluaWNpYXIgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7Fhc1xuICAgIGlmICh0aGlzLmNvbmZpZy5lbmFibGVUYWJTeW5jKSB7XG4gICAgICB0aGlzLnN5bmNTZXJ2aWNlLnN0YXJ0KCk7XG4gICAgICB0aGlzLnN5bmNTdWJzY3JpcHRpb24gPSB0aGlzLnN5bmNTZXJ2aWNlLm9uRXZlbnQkLnN1YnNjcmliZShldmVudCA9PlxuICAgICAgICB0aGlzLmhhbmRsZVN5bmNFdmVudChldmVudClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0TG9hZGluZyhmYWxzZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLnN5bmNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQVVURU5USUNBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYSBzZXNpw7NuIGNvbiBlbWFpbCB5IGNvbnRyYXNlw7FhLlxuICAgKi9cbiAgc2lnbmluKHJlcXVlc3Q6IFNpZ25pblJlcXVlc3QpOiBPYnNlcnZhYmxlPFNpZ25pblJlc3BvbnNlPiB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xlYXJFcnJvcigpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFNpZ25pblJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3NpZ25pbmAsIHJlcXVlc3QpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UubWZhUmVxdWlyZWQpIHtcbiAgICAgICAgICAvLyBNRkEgcmVxdWVyaWRvIC0gZ3VhcmRhciBlc3RhZG8gdGVtcG9yYWxcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRNRkFQZW5kaW5nKHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgbWZhVG9rZW46IHJlc3BvbnNlLm1mYVRva2VuISxcbiAgICAgICAgICAgIG1ldGhvZDogcmVzcG9uc2UubWZhTWV0aG9kISxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgIC8vIExvZ2luIGV4aXRvc28gc2luIE1GQVxuICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2Vzc2Z1bEF1dGgocmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gbnVldm8gdXN1YXJpby5cbiAgICogRWwgdXN1YXJpbyBxdWVkYSBlbiBlc3RhZG8gUEVORElORyBoYXN0YSB2ZXJpZmljYXIgc3UgZW1haWwuXG4gICAqL1xuICBzaWdudXAocmVxdWVzdDogU2lnbnVwUmVxdWVzdCk6IE9ic2VydmFibGU8U2lnbnVwUmVzcG9uc2U+IHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jbGVhckVycm9yKCk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxTaWdudXBSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9zaWdudXBgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBlbWFpbCBjb24gY8OzZGlnbyBkZSA2IGTDrWdpdG9zLlxuICAgKiBTaSBlcyBleGl0b3NvLCBoYWNlIGF1dG8tbG9naW4geSByZXRvcm5hIHRva2Vucy5cbiAgICovXG4gIHZlcmlmeUVtYWlsKHJlcXVlc3Q6IFZlcmlmeUVtYWlsUmVxdWVzdCk6IE9ic2VydmFibGU8VmVyaWZ5RW1haWxSZXNwb25zZT4ge1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsZWFyRXJyb3IoKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxWZXJpZnlFbWFpbFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3ZlcmlmeS1lbWFpbGAsIHJlcXVlc3QpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UudmVyaWZpZWQgJiYgcmVzcG9uc2UuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAvLyBBdXRvLWxvZ2luOiBndWFyZGFyIHRva2VucyB5IGFjdHVhbGl6YXIgZXN0YWRvXG4gICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzZnVsQXV0aChyZXNwb25zZSBhcyB1bmtub3duIGFzIFNpZ25pblJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZW52w61hIGPDs2RpZ28gZGUgdmVyaWZpY2FjacOzbiBhbCBlbWFpbC5cbiAgICovXG4gIHJlc2VuZENvZGUocmVxdWVzdDogUmVzZW5kQ29kZVJlcXVlc3QpOiBPYnNlcnZhYmxlPFJlc2VuZENvZGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFJlc2VuZENvZGVSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9yZXNlbmQtY29kZWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIGPDs2RpZ28gTUZBLlxuICAgKi9cbiAgdmVyaWZ5TUZBKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBVmVyaWZ5UmVzcG9uc2U+IHtcbiAgICBjb25zdCBtZmFTdGF0ZSA9IHRoaXMubWZhUGVuZGluZygpO1xuICAgIGlmICghbWZhU3RhdGUubWZhVG9rZW4pIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XG4gICAgICAgIGNvZGU6ICdNRkFfTk9UX1BFTkRJTkcnLFxuICAgICAgICBtZXNzYWdlOiAnTm8gaGF5IHZlcmlmaWNhY2nDs24gTUZBIHBlbmRpZW50ZScsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBVmVyaWZ5UmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vbWZhL3ZlcmlmeWAsIHtcbiAgICAgICAgbWZhVG9rZW46IG1mYVN0YXRlLm1mYVRva2VuLFxuICAgICAgICBjb2RlLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsZWFyTUZBUGVuZGluZygpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2Vzc2Z1bEF1dGgocmVzcG9uc2UpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2NhIGVsIHRva2VuIGRlIGFjY2Vzby5cbiAgICovXG4gIHJlZnJlc2hBY2Nlc3NUb2tlbigpOiBPYnNlcnZhYmxlPFJlZnJlc2hSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc3RhdGUoKS5yZWZyZXNoVG9rZW47XG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XG4gICAgICAgIGNvZGU6ICdOT19SRUZSRVNIX1RPS0VOJyxcbiAgICAgICAgbWVzc2FnZTogJ05vIGhheSB0b2tlbiBkZSByZWZyZXNjbycsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFJlZnJlc2hSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9yZWZyZXNoYCwgeyByZWZyZXNoVG9rZW4gfSkucGlwZShcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IERhdGUubm93KCkgKyByZXNwb25zZS5leHBpcmVzSW4gKiAxMDAwO1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZS5hY2Nlc3NUb2tlbiwgcmVzcG9uc2UuZXhwaXJlc0luKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlQWNjZXNzVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4sIGV4cGlyZXNBdCk7XG4gICAgICAgIHRoaXMuc3RhcnRSZWZyZXNoVGltZXIoKTtcbiAgICAgICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3Qoe1xuICAgICAgICAgIHR5cGU6ICdUT0tFTl9SRUZSRVNIJyxcbiAgICAgICAgICBwYXlsb2FkOiB7IGFjY2Vzc1Rva2VuOiByZXNwb25zZS5hY2Nlc3NUb2tlbiwgZXhwaXJlc0F0IH0sXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENpZXJyYSBzZXNpw7NuLlxuICAgKi9cbiAgYXN5bmMgbG9nb3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc3RhdGUoKS5yZWZyZXNoVG9rZW47XG5cbiAgICAvLyBFbGltaW5hciBkaXNwb3NpdGl2byBkZWwgYmFja2VuZCBhbnRlcyBkZSBjZXJyYXIgc2VzacOzblxuICAgIGF3YWl0IHRoaXMudW5yZWdpc3RlckRldmljZSgpO1xuXG4gICAgLy8gTm90aWZpY2FyIGFsIGJhY2tlbmQgKGZpcmUgYW5kIGZvcmdldClcbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnBvc3QoYCR7dGhpcy5iYXNlVXJsfS9sb2dvdXRgLCB7IHJlZnJlc2hUb2tlbiB9KVxuICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSlcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIENlcnJhciBzZXNpw7NuIGRlIEZpcmViYXNlIHNpIGVzdMOhIGludGVncmFkb1xuICAgIHRoaXMuc2lnbk91dEZpcmViYXNlKCk7XG5cbiAgICB0aGlzLmNsZWFyU3RhdGUoKTtcbiAgICB0aGlzLnN5bmNTZXJ2aWNlLmJyb2FkY2FzdCh7IHR5cGU6ICdMT0dPVVQnIH0pO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZy5sb2dpblJvdXRlXSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUZBIFNFVFVQICh1c3VhcmlvIGF1dGVudGljYWRvKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ29uZmlndXJhIE1GQSBwYXJhIGVsIHVzdWFyaW8uXG4gICAqL1xuICBzZXR1cE1GQShtZXRob2Q6IE1GQU1ldGhvZCwgcGhvbmU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1GQVNldHVwUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxNRkFTZXR1cFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9zZXR1cGAsIHsgbWV0aG9kLCBwaG9uZSB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtYSBsYSBjb25maWd1cmFjacOzbiBkZSBNRkEuXG4gICAqL1xuICBjb25maXJtTUZBKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBQ29uZmlybVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBQ29uZmlybVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9jb25maXJtYCwgeyBjb2RlIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2hhYmlsaXRhIE1GQS5cbiAgICovXG4gIGRpc2FibGVNRkEocGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBRGlzYWJsZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBRGlzYWJsZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9kaXNhYmxlYCwgeyBwYXNzd29yZCB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBPUkdBTklaQUNJT05FU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ2FtYmlhIGxhIG9yZ2FuaXphY2nDs24gYWN0aXZhIGRlbCB1c3VhcmlvLlxuICAgKiBHZW5lcmEgdW4gbnVldm8gRmlyZWJhc2UgdG9rZW4gY29uIGVsIGFjdGl2ZU9yZyBhY3R1YWxpemFkby5cbiAgICpcbiAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIC0gSUQgZGUgbGEgb3JnYW5pemFjacOzbiBhIGxhIHF1ZSBjYW1iaWFyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgY29uIGVsIG51ZXZvIEZpcmViYXNlIHRva2VuIHkgYWN0aXZlT3JnXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hdXRoLnN3aXRjaE9yZygnb3JnX3h5ejc4OScpKTtcbiAgICogLy8gRmlyZWJhc2UgeWEgZXN0w6EgcmUtYXV0ZW50aWNhZG8gY29uIGxhIG51ZXZhIG9yZ1xuICAgKiBjb25zdCBhY3RpdmVPcmcgPSBhd2FpdCB0aGlzLmZpcmViYXNlLmdldEFjdGl2ZU9yZygpO1xuICAgKiBgYGBcbiAgICovXG4gIHN3aXRjaE9yZyhvcmdhbml6YXRpb25JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTd2l0Y2hPcmdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFN3aXRjaE9yZ1Jlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3N3aXRjaC1vcmdgLCB7IG9yZ2FuaXphdGlvbklkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBSZS1hdXRlbnRpY2FyIGVuIEZpcmViYXNlIGNvbiBlbCBudWV2byB0b2tlblxuICAgICAgICAgIC8vIFVzYXIgc3dpdGNoTWFwICsgZnJvbSBwYXJhIGVzcGVyYXIgYSBxdWUgRmlyZWJhc2UgY29tcGxldGVcbiAgICAgICAgICBjb25zdCBmaXJlYmFzZUF1dGgkID0gcmVzcG9uc2UuZmlyZWJhc2VUb2tlblxuICAgICAgICAgICAgPyBmcm9tKHRoaXMuc2lnbkluV2l0aEZpcmViYXNlKHJlc3BvbnNlLmZpcmViYXNlVG9rZW4pKVxuICAgICAgICAgICAgOiBvZih1bmRlZmluZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZpcmViYXNlQXV0aCQucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIE5vdGlmaWNhciBjYW1iaW8gYSBvdHJhcyBwZXN0YcOxYXNcbiAgICAgICAgICAgICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3Qoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdPUkdfU1dJVENIJyxcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2ZU9yZzogcmVzcG9uc2UuYWN0aXZlT3JnIH0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBSZXRvcm5hciByZXNwb25zZSBvcmlnaW5hbCBkZXNwdcOpcyBkZSBxdWUgRmlyZWJhc2UgY29tcGxldGVcbiAgICAgICAgICAgIG1hcCgoKSA9PiByZXNwb25zZSlcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgICApO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBFUkZJTCBERSBVU1VBUklPXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHBlcmZpbCBkZWwgdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAgICogSW5jbHV5ZSBpbmZvcm1hY2nDs24gZGUgTUZBIHkgdGVsw6lmb25vLlxuICAgKi9cbiAgZ2V0UHJvZmlsZSgpOiBPYnNlcnZhYmxlPEdldFByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8R2V0UHJvZmlsZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3Byb2ZpbGVgKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgZWwgcGVyZmlsIGRlbCB1c3VhcmlvLlxuICAgKi9cbiAgdXBkYXRlUHJvZmlsZShyZXF1ZXN0OiBVcGRhdGVQcm9maWxlUmVxdWVzdCk6IE9ic2VydmFibGU8VXBkYXRlUHJvZmlsZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dDxVcGRhdGVQcm9maWxlUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcHJvZmlsZWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFQ1VQRVJBQ0nDk04gREUgQ09OVFJBU0XDkUFcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYSBlbCBwcm9jZXNvIGRlIHJlY3VwZXJhY2nDs24gZGUgY29udHJhc2XDsWEuXG4gICAqIEVudsOtYSB1biBjw7NkaWdvIGFsIGVtYWlsIGRlbCB1c3VhcmlvLlxuICAgKi9cbiAgZm9yZ290UGFzc3dvcmQocmVxdWVzdDogRm9yZ290UGFzc3dvcmRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9mb3Jnb3QtcGFzc3dvcmRgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldGVhIGxhIGNvbnRyYXNlw7FhIHVzYW5kbyBlbCBjw7NkaWdvIGVudmlhZG8gcG9yIGVtYWlsLlxuICAgKi9cbiAgcmVzZXRQYXNzd29yZChyZXF1ZXN0OiBSZXNldFBhc3N3b3JkUmVxdWVzdCk6IE9ic2VydmFibGU8UmVzZXRQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8UmVzZXRQYXNzd29yZFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3Jlc2V0LXBhc3N3b3JkYCwgcmVxdWVzdClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUEVSTUlTT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbG9zIHBlcm1pc29zIGFjdHVhbGl6YWRvcyBkZWwgYmFja2VuZC5cbiAgICovXG4gIGZldGNoUGVybWlzc2lvbnMoKTogT2JzZXJ2YWJsZTxHZXRQZXJtaXNzaW9uc1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8R2V0UGVybWlzc2lvbnNSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9wZXJtaXNzaW9uc2ApLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVQZXJtaXNzaW9ucyhcbiAgICAgICAgICByZXNwb25zZS5yb2xlcyxcbiAgICAgICAgICByZXNwb25zZS5wZXJtaXNzaW9ucyxcbiAgICAgICAgICByZXNwb25zZS5pc1N1cGVyQWRtaW5cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlUGVybWlzc2lvbnMocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnN5bmNTZXJ2aWNlLmJyb2FkY2FzdCh7IHR5cGU6ICdQRVJNSVNTSU9OU19VUERBVEUnIH0pO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgdW4gcGVybWlzbyBlc3BlY8OtZmljby5cbiAgICogRm9ybWF0bzogXCJyZXNvdXJjZTphY3Rpb25cIiAoZWo6IFwidGVtcGxhdGVzOmVkaXRcIilcbiAgICovXG4gIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdXBlckFkbWluKCkpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgW3Jlc291cmNlLCBhY3Rpb25dID0gcGVybWlzc2lvbi5zcGxpdCgnOicpO1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zKCkuc29tZShwID0+IHtcbiAgICAgIGNvbnN0IFtwUmVzb3VyY2UsIHBBY3Rpb25dID0gcC5zcGxpdCgnOicpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHBSZXNvdXJjZSA9PT0gJyonIHx8IHBSZXNvdXJjZSA9PT0gcmVzb3VyY2UpICYmIChwQWN0aW9uID09PSAnKicgfHwgcEFjdGlvbiA9PT0gYWN0aW9uKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIGFsZ3VubyBkZSBsb3MgcGVybWlzb3MgZGFkb3MuXG4gICAqL1xuICBoYXNBbnlQZXJtaXNzaW9uKHBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZXJtaXNzaW9ucy5zb21lKHAgPT4gdGhpcy5oYXNQZXJtaXNzaW9uKHApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIHRvZG9zIGxvcyBwZXJtaXNvcyBkYWRvcy5cbiAgICovXG4gIGhhc0FsbFBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZXJtaXNzaW9ucy5ldmVyeShwID0+IHRoaXMuaGFzUGVybWlzc2lvbihwKSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB0aWVuZSB1biByb2wgZXNwZWPDrWZpY28uXG4gICAqL1xuICBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvbGVzKCkuc29tZShyID0+IHIudG9Mb3dlckNhc2UoKSA9PT0gcm9sZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBnZXQgYmFzZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9JHt0aGlzLmNvbmZpZy5hdXRoUHJlZml4fWA7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1Y2Nlc3NmdWxBdXRoKHJlc3BvbnNlOiBTaWduaW5SZXNwb25zZSB8IE1GQVZlcmlmeVJlc3BvbnNlKTogdm9pZCB7XG4gICAgY29uc3QgZXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIHJlc3BvbnNlLmV4cGlyZXNJbiEgKiAxMDAwO1xuICAgIGNvbnN0IHRva2VuRGF0YSA9IHRoaXMudG9rZW5TZXJ2aWNlLnBhcnNlVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4hKTtcblxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldEF1dGhlbnRpY2F0ZWQoe1xuICAgICAgYWNjZXNzVG9rZW46IHJlc3BvbnNlLmFjY2Vzc1Rva2VuISxcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVzcG9uc2UucmVmcmVzaFRva2VuISxcbiAgICAgIHVzZXJJZDogdG9rZW5EYXRhPy51aWQsXG4gICAgICBlbWFpbDogdG9rZW5EYXRhPy5lbWFpbCxcbiAgICAgIHJvbGVzOiByZXNwb25zZS5yb2xlcyB8fCBbXSxcbiAgICAgIHBlcm1pc3Npb25zOiByZXNwb25zZS5wZXJtaXNzaW9ucyB8fCBbXSxcbiAgICAgIGlzU3VwZXJBZG1pbjogcmVzcG9uc2UucGVybWlzc2lvbnM/LmluY2x1ZGVzKCcqOionKSB8fCBmYWxzZSxcbiAgICAgIGV4cGlyZXNBdCxcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZVN0YXRlKHtcbiAgICAgIGFjY2Vzc1Rva2VuOiByZXNwb25zZS5hY2Nlc3NUb2tlbiEsXG4gICAgICByZWZyZXNoVG9rZW46IHJlc3BvbnNlLnJlZnJlc2hUb2tlbiEsXG4gICAgICByb2xlczogcmVzcG9uc2Uucm9sZXMgfHwgW10sXG4gICAgICBwZXJtaXNzaW9uczogcmVzcG9uc2UucGVybWlzc2lvbnMgfHwgW10sXG4gICAgICBpc1N1cGVyQWRtaW46IHJlc3BvbnNlLnBlcm1pc3Npb25zPy5pbmNsdWRlcygnKjoqJykgfHwgZmFsc2UsXG4gICAgICBleHBpcmVzQXQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3QoeyB0eXBlOiAnTE9HSU4nIH0pO1xuXG4gICAgLy8gSW50ZWdyYWNpw7NuIGNvbiBGaXJlYmFzZVxuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLmVuYWJsZUZpcmViYXNlSW50ZWdyYXRpb24gJiZcbiAgICAgICdmaXJlYmFzZVRva2VuJyBpbiByZXNwb25zZSAmJlxuICAgICAgcmVzcG9uc2UuZmlyZWJhc2VUb2tlblxuICAgICkge1xuICAgICAgdGhpcy5zaWduSW5XaXRoRmlyZWJhc2UocmVzcG9uc2UuZmlyZWJhc2VUb2tlbik7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0cm8gYXV0b23DoXRpY28gZGUgZGlzcG9zaXRpdm8gcGFyYSBwdXNoIG5vdGlmaWNhdGlvbnNcbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlSWZOZWVkZWQoKTsgLy8gZmlyZS1hbmQtZm9yZ2V0XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlZnJlc2hUaW1lcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWZyZXNoVGltZXIoKTtcblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc3RhdGUoKTtcbiAgICBpZiAoIXN0YXRlLmV4cGlyZXNBdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVmcmVzaEJlZm9yZU1zID0gKHRoaXMuY29uZmlnLnJlZnJlc2hCZWZvcmVFeHBpcnkgfHwgNjApICogMTAwMDtcbiAgICBjb25zdCByZWZyZXNoQXQgPSBzdGF0ZS5leHBpcmVzQXQgLSByZWZyZXNoQmVmb3JlTXM7XG4gICAgY29uc3QgZGVsYXkgPSByZWZyZXNoQXQgLSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgdGhpcy5yZWZyZXNoVGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnN1YnNjcmliZSh7XG4gICAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMubG9nb3V0KCksXG4gICAgICAgIH0pO1xuICAgICAgfSwgZGVsYXkpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUucmVmcmVzaFRva2VuKSB7XG4gICAgICAvLyBUb2tlbiB5YSBkZWJlcsOtYSByZWZyZXNjYXJzZSwgaW50ZW50YXIgYWhvcmFcbiAgICAgIHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMubG9nb3V0KCksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZWZyZXNoVGltZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVmcmVzaFRpbWVySWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcklkKTtcbiAgICAgIHRoaXMucmVmcmVzaFRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3luY0V2ZW50KGV2ZW50OiBBdXRoU3luY0V2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlICdMT0dJTic6XG4gICAgICBjYXNlICdUT0tFTl9SRUZSRVNIJzoge1xuICAgICAgICAvLyBSZWNhcmdhciBlc3RhZG8gZGVzZGUgc3RvcmFnZVxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFN0YXRlKCk7XG4gICAgICAgIGlmIChzdGF0ZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc3RvcmVGcm9tU3RvcmFnZShzdGF0ZSk7XG4gICAgICAgICAgY29uc3QgY2xhaW1zID0gdGhpcy50b2tlblNlcnZpY2UucGFyc2VUb2tlbihzdGF0ZS5hY2Nlc3NUb2tlbik7XG4gICAgICAgICAgaWYgKGNsYWltcykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlVXNlckluZm8oY2xhaW1zLnVpZCwgY2xhaW1zLmVtYWlsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTE9HT1VUJzpcbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UucmVzZXQoKTtcbiAgICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZy5sb2dpblJvdXRlXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUEVSTUlTU0lPTlNfVVBEQVRFJzoge1xuICAgICAgICBjb25zdCBwZXJtcyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFBlcm1pc3Npb25zKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZVBlcm1pc3Npb25zKHBlcm1zLnJvbGVzLCBwZXJtcy5wZXJtaXNzaW9ucywgcGVybXMuaXNTdXBlckFkbWluKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdPUkdfU1dJVENIJzpcbiAgICAgICAgLy8gT3RyYSBwZXN0YcOxYSBjYW1iacOzIGRlIG9yZ2FuaXphY2nDs24gLSByZWNhcmdhciBww6FnaW5hIHBhcmEgb2J0ZW5lciBudWV2byBlc3RhZG9cbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUF1dGhFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgY29uc3QgYXV0aEVycm9yOiBBdXRoRXJyb3IgPSB7XG4gICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnVU5LTk9XTl9FUlJPUicsXG4gICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24gZGVzY29ub2NpZG8nLFxuICAgIH07XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0RXJyb3IoYXV0aEVycm9yKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBhdXRoRXJyb3IpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZJUkVCQVNFIElOVEVHUkFUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgYXN5bmMgc2lnbkluV2l0aEZpcmViYXNlKGZpcmViYXNlVG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5maXJlYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maXJlYmFzZVNlcnZpY2Uuc2lnbkluV2l0aEN1c3RvbVRva2VuKGZpcmViYXNlVG9rZW4pO1xuICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBdXRoXSBGaXJlYmFzZSBzaWduaW4gc3VjY2Vzc2Z1bCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdbVmFsdGVjaEF1dGhdIEZpcmViYXNlU2VydmljZSBub3QgcHJvdmlkZWQuIEFkZCBwcm92aWRlVmFsdGVjaEZpcmViYXNlKCkgdG8geW91ciBwcm92aWRlcnMuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBObyBibG9xdWVhciBlbCBsb2dpbiBwcmluY2lwYWwgc2kgRmlyZWJhc2UgZmFsbGFcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbmluIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaWduT3V0RmlyZWJhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVGaXJlYmFzZUludGVncmF0aW9uKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZmlyZWJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlyZWJhc2VTZXJ2aWNlLnNpZ25PdXQoKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbm91dCBzdWNjZXNzZnVsJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElnbm9yYXIgZXJyb3JlcyBkZSBGaXJlYmFzZSBzaWdub3V0XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbm91dCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBERVZJQ0UgUkVHSVNUUkFUSU9OIChQdXNoIE5vdGlmaWNhdGlvbnMpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTb2xpY2l0YSBwZXJtaXNvcyBkZSBub3RpZmljYWNpw7NuIHkgcmVnaXN0cmEgZWwgZGlzcG9zaXRpdm8uXG4gICAqIFVzYXIgY3VhbmRvIGVsIHVzdWFyaW8gYWNlcHRhIHJlY2liaXIgbm90aWZpY2FjaW9uZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXN5bmMgb25FbmFibGVOb3RpZmljYXRpb25zKCkge1xuICAgKiAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYXV0aC5lbmFibGVOb3RpZmljYXRpb25zKCk7XG4gICAqICAgaWYgKHJlc3VsdC5ncmFudGVkKSB7XG4gICAqICAgICBjb25zb2xlLmxvZygnTm90aWZpY2FjaW9uZXMgaGFiaWxpdGFkYXMnKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBlbmFibGVOb3RpZmljYXRpb25zKCk6IFByb21pc2U8RW5hYmxlTm90aWZpY2F0aW9uc1Jlc3VsdD4ge1xuICAgIGlmICghdGhpcy5tZXNzYWdpbmdTZXJ2aWNlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gTWVzc2FnaW5nU2VydmljZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICByZXR1cm4geyBncmFudGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlmICghYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBQdXNoIG5vdGlmaWNhdGlvbnMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuIHsgZ3JhbnRlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB7IGdyYW50ZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0cmFyIGRpc3Bvc2l0aXZvIGVuIGJhY2tlbmRcbiAgICBjb25zdCByZWdpc3RlcmVkID0gYXdhaXQgdGhpcy5yZWdpc3RlckRldmljZUlmTmVlZGVkKCk7XG5cbiAgICByZXR1cm4geyBncmFudGVkOiB0cnVlLCB0b2tlbiwgcmVnaXN0ZXJlZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2FjdGl2YSBsYXMgbm90aWZpY2FjaW9uZXMgcGFyYSBlc3RlIGRpc3Bvc2l0aXZvLlxuICAgKiBFbGltaW5hIGVsIHRva2VuIGRlbCBiYWNrZW5kIHkgZGUgRkNNLlxuICAgKiBVc2FyIGRlc2RlIHVuIHRvZ2dsZSBkZSBwcmVmZXJlbmNpYXMgY3VhbmRvIGVsIHVzdWFyaW8gZGVzYWN0aXZhIG5vdGlmaWNhY2lvbmVzLlxuICAgKlxuICAgKiBOT1RBOiBFc3RvIE5PIHJldm9jYSBlbCBwZXJtaXNvIGRlbCBuYXZlZ2Fkb3IgKGVsIHVzdWFyaW8gZGViZSBoYWNlcmxvIG1hbnVhbG1lbnRlXG4gICAqIGRlc2RlIGxhIGNvbmZpZ3VyYWNpw7NuIGRlbCBuYXZlZ2Fkb3IpLiBTb2xvIGVsaW1pbmEgZWwgcmVnaXN0cm8gZGVsIGRpc3Bvc2l0aXZvLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGFzeW5jIG9uVG9nZ2xlTm90aWZpY2F0aW9ucyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAqICAgaWYgKGVuYWJsZWQpIHtcbiAgICogICAgIGF3YWl0IHRoaXMuYXV0aC5lbmFibGVOb3RpZmljYXRpb25zKCk7XG4gICAqICAgfSBlbHNlIHtcbiAgICogICAgIGF3YWl0IHRoaXMuYXV0aC5kaXNhYmxlTm90aWZpY2F0aW9ucygpO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRpc2FibGVOb3RpZmljYXRpb25zKCk6IFByb21pc2U8eyBkaXNhYmxlZDogYm9vbGVhbiB9PiB7XG4gICAgaWYgKCF0aGlzLm1lc3NhZ2luZ1NlcnZpY2UpIHtcbiAgICAgIHJldHVybiB7IGRpc2FibGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRoaXMubWVzc2FnaW5nU2VydmljZS5jdXJyZW50VG9rZW47XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gRWxpbWluYXIgZGVsIGJhY2tlbmRcbiAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgdGhpcy5odHRwLnJlcXVlc3QoJ0RFTEVURScsIGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvdXNlcnMvbWUvZGV2aWNlcy9ieS10b2tlbmAsIHtcbiAgICAgICAgICAgIGJvZHk6IHsgdG9rZW4gfVxuICAgICAgICAgIH0pLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRWxpbWluYXIgdG9rZW4gZGUgRkNNXG4gICAgICAgIGF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5kZWxldGVUb2tlbigpO1xuICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBdXRoXSBOb3RpZmljYXRpb25zIGRpc2FibGVkJyk7XG4gICAgICAgIHJldHVybiB7IGRpc2FibGVkOiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGRpc2FibGVkOiBmYWxzZSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRmFpbGVkIHRvIGRpc2FibGUgbm90aWZpY2F0aW9uczonLCBlcnJvcik7XG4gICAgICByZXR1cm4geyBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSBlbCBlc3RhZG8gYWN0dWFsIGRlIHBlcm1pc29zIGRlIG5vdGlmaWNhY2nDs24uXG4gICAqXG4gICAqIEByZXR1cm5zICdncmFudGVkJyB8ICdkZW5pZWQnIHwgJ2RlZmF1bHQnIHwgJ3Vuc3VwcG9ydGVkJ1xuICAgKi9cbiAgZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlKCk6IE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZSB7XG4gICAgaWYgKCF0aGlzLm1lc3NhZ2luZ1NlcnZpY2UpIHtcbiAgICAgIHJldHVybiAndW5zdXBwb3J0ZWQnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmdldFBlcm1pc3Npb25TdGF0ZSgpIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBlbCBkaXNwb3NpdGl2byBlbiBlbCBiYWNrZW5kIHNpIHRpZW5lIHBlcm1pc29zIGRlIG5vdGlmaWNhY2nDs24uXG4gICAqIFNlIGxsYW1hIGF1dG9tw6F0aWNhbWVudGUgZGVzcHXDqXMgZGUgdW4gbG9naW4gZXhpdG9zbyBzaSBlbmFibGVEZXZpY2VSZWdpc3RyYXRpb249dHJ1ZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJEZXZpY2VJZk5lZWRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBTb2xvIHNpIGVzdMOhIGhhYmlsaXRhZG8geSBtZXNzYWdpbmcgZXN0w6EgZGlzcG9uaWJsZVxuICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlRGV2aWNlUmVnaXN0cmF0aW9uIHx8ICF0aGlzLm1lc3NhZ2luZ1NlcnZpY2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVmVyaWZpY2FyIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG9cbiAgICAgIGlmICghYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgeWEgdGllbmUgcGVybWlzb3NcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG4gICAgICBpZiAocGVybWlzc2lvbiAhPT0gJ2dyYW50ZWQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm8gc29saWNpdGFyIGF1dG9tw6F0aWNhbWVudGUsIHNvbG8gcmVnaXN0cmFyIHNpIHlhIHRpZW5lIHBlcm1pc29cbiAgICAgIH1cblxuICAgICAgLy8gT2J0ZW5lciB0b2tlbiBleGlzdGVudGUgKG5vIHNvbGljaXRhciBudWV2bylcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmdldFRva2VuKCk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVnaXN0cmFyIGVuIGJhY2tlbmRcbiAgICAgIGNvbnN0IHsgcGxhdGZvcm0sIGJyb3dzZXIsIG9zIH0gPSB0aGlzLmRldGVjdFBsYXRmb3JtSW5mbygpO1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PFJlZ2lzdGVyRGV2aWNlUmVzcG9uc2U+KFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvdXNlcnMvbWUvZGV2aWNlc2AsXG4gICAgICAgICAgeyB0b2tlbiwgcGxhdGZvcm0sIGJyb3dzZXIsIG9zIH1cbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRGV2aWNlIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBObyBibG9xdWVhciBhdXRoIHNpIGZhbGxhIGRldmljZSByZWdpc3RyYXRpb25cbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBEZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgZWwgZGlzcG9zaXRpdm8gZGVsIGJhY2tlbmQgeSBib3JyYSBlbCB0b2tlbiBGQ00uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVucmVnaXN0ZXJEZXZpY2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVEZXZpY2VSZWdpc3RyYXRpb24gfHwgIXRoaXMubWVzc2FnaW5nU2VydmljZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRoaXMubWVzc2FnaW5nU2VydmljZS5jdXJyZW50VG9rZW47XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gRGVsZXRlIGZyb20gYmFja2VuZCAoZmlyZSBhbmQgZm9yZ2V0KVxuICAgICAgICB0aGlzLmh0dHAucmVxdWVzdCgnREVMRVRFJywgYCR7dGhpcy5jb25maWcuYXBpVXJsfS92Mi91c2Vycy9tZS9kZXZpY2VzL2J5LXRva2VuYCwge1xuICAgICAgICAgIGJvZHk6IHsgdG9rZW4gfVxuICAgICAgICB9KS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKS5zdWJzY3JpYmUoKTtcblxuICAgICAgICAvLyBEZWxldGUgZnJvbSBGQ01cbiAgICAgICAgYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmRlbGV0ZVRva2VuKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVmFsdGVjaEF1dGhdIERldmljZSB1bnJlZ2lzdGVyZWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yYXIgZXJyb3JlcyBlbiBjbGVhbnVwXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdGEgaW5mb3JtYWNpw7NuIGRlIGxhIHBsYXRhZm9ybWEgZGVsIGRpc3Bvc2l0aXZvLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlY3RQbGF0Zm9ybUluZm8oKTogeyBwbGF0Zm9ybTogJ3dlYic7IGJyb3dzZXI6IHN0cmluZzsgb3M6IHN0cmluZyB9IHtcbiAgICBjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgICAvLyBEZXRlY3RhciBuYXZlZ2Fkb3JcbiAgICBsZXQgYnJvd3NlciA9ICdVbmtub3duJztcbiAgICBpZiAodWEuaW5jbHVkZXMoJ0ZpcmVmb3gnKSkge1xuICAgICAgYnJvd3NlciA9ICdGaXJlZm94JztcbiAgICB9IGVsc2UgaWYgKHVhLmluY2x1ZGVzKCdFZGcnKSkge1xuICAgICAgYnJvd3NlciA9ICdFZGdlJztcbiAgICB9IGVsc2UgaWYgKHVhLmluY2x1ZGVzKCdDaHJvbWUnKSkge1xuICAgICAgYnJvd3NlciA9ICdDaHJvbWUnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ1NhZmFyaScpKSB7XG4gICAgICBicm93c2VyID0gJ1NhZmFyaSc7XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0YXIgT1NcbiAgICBsZXQgb3MgPSAnVW5rbm93bic7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdXaW5kb3dzJykpIHtcbiAgICAgIG9zID0gJ1dpbmRvd3MnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ01hYyBPUycpKSB7XG4gICAgICBvcyA9ICdtYWNPUyc7XG4gICAgfSBlbHNlIGlmICh1YS5pbmNsdWRlcygnTGludXgnKSkge1xuICAgICAgb3MgPSAnTGludXgnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ0FuZHJvaWQnKSkge1xuICAgICAgb3MgPSAnQW5kcm9pZCc7XG4gICAgfSBlbHNlIGlmICh1YS5pbmNsdWRlcygnaU9TJykgfHwgdWEuaW5jbHVkZXMoJ2lQaG9uZScpIHx8IHVhLmluY2x1ZGVzKCdpUGFkJykpIHtcbiAgICAgIG9zID0gJ2lPUyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcGxhdGZvcm06ICd3ZWInLCBicm93c2VyLCBvcyB9O1xuICB9XG59XG4iXX0=
785
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEUsT0FBTyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7O0FBd0MvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFLdEIsWUFDdUMsTUFBeUIsRUFDdEQsSUFBZ0IsRUFDaEIsTUFBYyxFQUNkLFlBQThCLEVBQzlCLFlBQTBCLEVBQzFCLGNBQWtDLEVBQ2xDLFdBQTRCLEVBQzVCLGVBQWdDLEVBQ3BCLGdCQUF5QztRQVJ4QixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN0RCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQW9CO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDcEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQWIvRCwrQkFBK0I7UUFDdkIsbUJBQWMsR0FBeUMsSUFBSSxDQUFDO1FBQzVELHFCQUFnQixHQUF3QixJQUFJLENBQUM7UUFjckQsZ0RBQWdEO1FBQ2hELG9DQUFvQztRQUNwQyxnREFBZ0Q7UUFFaEQsdUNBQXVDO1FBQzlCLFVBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUV6QywrQkFBK0I7UUFDdEIsb0JBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQztRQUU3RCxzQkFBc0I7UUFDYixjQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFFakQsOEJBQThCO1FBQ3JCLFNBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztRQUV2QyxzQkFBc0I7UUFDYixnQkFBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1FBRXJELHdCQUF3QjtRQUNmLFVBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUV6QywyQkFBMkI7UUFDbEIsZ0JBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUVyRCw2QkFBNkI7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUV2RCw4QkFBOEI7UUFDckIsZUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBRW5ELG1CQUFtQjtRQUNWLFVBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQWxDdEMsQ0FBQztJQW9DSixnREFBZ0Q7SUFDaEQsaUJBQWlCO0lBQ2pCLGdEQUFnRDtJQUVoRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsVUFBVTtRQUNkLGlDQUFpQztRQUNqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXBELElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLGtDQUFrQztZQUNsQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUVsRCx5QkFBeUI7Z0JBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDckUsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0QsQ0FBQztnQkFFRCx5Q0FBeUM7Z0JBQ3pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BDLGdFQUFnRTtnQkFDaEUsSUFBSSxDQUFDO29CQUNILE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7Z0JBQ2xELENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FDNUIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELGdCQUFnQjtJQUNoQixnREFBZ0Q7SUFFaEQ7O09BRUc7SUFDSCxNQUFNLENBQUMsT0FBc0I7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzNFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN6QiwwQ0FBMEM7Z0JBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO29CQUM5QixRQUFRLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVM7b0JBQzVCLE1BQU0sRUFBRSxRQUFRLENBQUMsU0FBVTtpQkFDNUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDaEMsd0JBQXdCO2dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDakQsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBc0I7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLFNBQVMsRUFBRSxPQUFPLENBQUM7YUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsT0FBMkI7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3RGLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzlDLGlEQUFpRDtnQkFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQXFDLENBQUMsQ0FBQztZQUNuRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNqRCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixJQUFJLENBQXFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sY0FBYyxFQUFFLE9BQU8sQ0FBQzthQUNoRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFDLElBQVk7UUFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsT0FBTyxFQUFFLG1DQUFtQzthQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLGFBQWEsRUFBRTtZQUNyRCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDM0IsSUFBSTtTQUNMLENBQUM7YUFDRCxJQUFJLENBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNqRCxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2hCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDL0MsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLE9BQU8sRUFBRSwwQkFBMEI7YUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxVQUFVLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztnQkFDekIsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRTthQUMxRCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQztRQUUvQywwREFBMEQ7UUFDMUQsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUU5Qix5Q0FBeUM7UUFDekMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsSUFBSTtpQkFDTixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQztpQkFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDaEMsU0FBUyxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxrQ0FBa0M7SUFDbEMsZ0RBQWdEO0lBRWhEOztPQUVHO0lBQ0gsUUFBUSxDQUFDLE1BQWlCLEVBQUUsS0FBYztRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUN0RSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLElBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBcUIsR0FBRyxJQUFJLENBQUMsT0FBTyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNqRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLFFBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixJQUFJLENBQXFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7YUFDckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsaUJBQWlCO0lBQ2pCLGdEQUFnRDtJQUVoRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsU0FBUyxDQUFDLGNBQXNCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixJQUFJLENBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sYUFBYSxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUM7YUFDekUsSUFBSSxDQUNILFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQiwrQ0FBK0M7WUFDL0MsNkRBQTZEO1lBQzdELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhO2dCQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbEIsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUN2QixHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNQLG9DQUFvQztnQkFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7b0JBQ3pCLElBQUksRUFBRSxZQUFZO29CQUNsQixPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRTtpQkFDM0MsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDO1lBQ0YsOERBQThEO1lBQzlELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FDcEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDakQsQ0FBQztJQUNOLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsb0JBQW9CO0lBQ3BCLGdEQUFnRDtJQUVoRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBcUIsR0FBRyxJQUFJLENBQUMsT0FBTyxVQUFVLENBQUM7YUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxPQUE2QjtRQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUF3QixHQUFHLElBQUksQ0FBQyxPQUFPLFVBQVUsRUFBRSxPQUFPLENBQUM7YUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsNkJBQTZCO0lBQzdCLGdEQUFnRDtJQUVoRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsT0FBOEI7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBeUIsR0FBRyxJQUFJLENBQUMsT0FBTyxrQkFBa0IsRUFBRSxPQUFPLENBQUM7YUFDeEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxPQUE2QjtRQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUF3QixHQUFHLElBQUksQ0FBQyxPQUFPLGlCQUFpQixFQUFFLE9BQU8sQ0FBQzthQUN0RSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxXQUFXO0lBQ1gsZ0RBQWdEO0lBRWhEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBeUIsR0FBRyxJQUFJLENBQUMsT0FBTyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQzlFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQ2pDLFFBQVEsQ0FBQyxLQUFLLEVBQ2QsUUFBUSxDQUFDLFdBQVcsRUFDcEIsUUFBUSxDQUFDLFlBQVksQ0FDdEIsQ0FBQztZQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLFVBQWtCO1FBQzlCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXJDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakMsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sQ0FDTCxDQUFDLFNBQVMsS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssTUFBTSxDQUFDLENBQ3pGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLFdBQXFCO1FBQ3BDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUIsQ0FBQyxXQUFxQjtRQUNyQyxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLElBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsa0JBQWtCO0lBQ2xCLGdEQUFnRDtJQUVoRCxJQUFZLE9BQU87UUFDakIsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFFBQTRDO1FBQ3ZFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsU0FBVSxHQUFHLElBQUksQ0FBQztRQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBWSxDQUFDLENBQUM7UUFFdEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNqQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVk7WUFDbEMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFhO1lBQ3BDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRztZQUN0QixLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUs7WUFDdkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUMzQixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFO1lBQ3ZDLFlBQVksRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLO1lBQzVELFNBQVM7U0FDVixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztZQUM1QixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVk7WUFDbEMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFhO1lBQ3BDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDM0IsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRTtZQUN2QyxZQUFZLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSztZQUM1RCxTQUFTO1NBQ1YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUU5QywyQkFBMkI7UUFDM0IsSUFDRSxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QjtZQUNyQyxlQUFlLElBQUksUUFBUTtZQUMzQixRQUFRLENBQUMsYUFBYSxFQUN0QixDQUFDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsNkRBQTZEO1FBQzdELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsa0JBQWtCO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUFFLE9BQU87UUFFN0IsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN2RSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztRQUNwRCxNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXJDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ2xDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2lCQUMzQixDQUFDLENBQUM7WUFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDWixDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUIsK0NBQStDO1lBQy9DLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDbEMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7YUFDM0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFvQjtRQUMxQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDckIsZ0NBQWdDO2dCQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUMvRCxJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM3RCxDQUFDO29CQUNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUMzQixDQUFDO2dCQUNELE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDL0MsTUFBTTtZQUNSLEtBQUssb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3hGLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxZQUFZO2dCQUNmLGtGQUFrRjtnQkFDbEYsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQXdCO1FBQzlDLE1BQU0sU0FBUyxHQUFjO1lBQzNCLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxlQUFlO1lBQzFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxvQ0FBb0M7U0FDdEUsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsdUJBQXVCO0lBQ3ZCLGdEQUFnRDtJQUV4QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsYUFBcUI7UUFDcEQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDaEUsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQzFELENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsSUFBSSxDQUNWLDZGQUE2RixDQUM5RixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsbURBQW1EO1lBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZTtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUI7WUFBRSxPQUFPO1FBRW5ELElBQUksQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6QixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkNBQTJDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCwyQ0FBMkM7SUFDM0MsZ0RBQWdEO0lBRWhEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxLQUFLLENBQUMsbUJBQW1CO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7WUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDL0MsT0FBTyxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDOUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsbUNBQW1DO1FBQ25DLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQztZQUNqRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLHVCQUF1QjtnQkFDdkIsTUFBTSxjQUFjLENBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSwrQkFBK0IsRUFBRTtvQkFDaEYsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFO2lCQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNwQyxDQUFDO2dCQUVGLHdCQUF3QjtnQkFDeEIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM1QixDQUFDO1lBRUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw4QkFBOEI7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNCLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBaUMsQ0FBQztJQUNuRixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSCxLQUFLLENBQUMsY0FBYztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGdDQUFnQyxFQUFFLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztRQUNoRSxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsb0VBQW9FO1lBQ3BFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlELElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsdUNBQXVDLEVBQUUsQ0FBQztZQUMvRSxDQUFDO1lBRUQsaUZBQWlGO1lBQ2pGLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7WUFFL0Msd0RBQXdEO1lBQ3hELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxnRUFBZ0U7Z0JBQ2hFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO29CQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQztnQkFDNUUsQ0FBQztnQkFDRCxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakQsQ0FBQztZQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUUsQ0FBQztZQUN0RSxDQUFDO1lBRUQsdUJBQXVCO1lBQ3ZCLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVELE1BQU0sUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDWixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsRUFDM0MsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FDakMsQ0FDRixDQUFDO1lBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUV6RSxDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hFLE9BQU87Z0JBQ0wsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxLQUFLLEVBQUUsT0FBTyxJQUFJLGdDQUFnQzthQUNuRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsc0JBQXNCO1FBQ2xDLHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILGtDQUFrQztZQUNsQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDL0MsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsaUNBQWlDO1lBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlELElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLEtBQUssQ0FBQyxDQUFDLG1FQUFtRTtZQUNuRixDQUFDO1lBRUQsK0NBQStDO1lBQy9DLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCx1QkFBdUI7WUFDdkIsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUQsTUFBTSxjQUFjLENBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixFQUMzQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUNqQyxDQUNGLENBQUM7WUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUM7UUFFZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGdEQUFnRDtZQUNoRCxPQUFPLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxnQkFBZ0I7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwRSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7WUFDakQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVix3Q0FBd0M7Z0JBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSwrQkFBK0IsRUFBRTtvQkFDaEYsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFO2lCQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUVoRCxrQkFBa0I7Z0JBQ2xCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDbkQsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw2QkFBNkI7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQjtRQUN4QixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBRS9CLHFCQUFxQjtRQUNyQixJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN0QixDQUFDO2FBQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUNuQixDQUFDO2FBQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUNyQixDQUFDO1FBRUQsY0FBYztRQUNkLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUNuQixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMzQixFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQ2pCLENBQUM7YUFBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ2YsQ0FBQzthQUFNLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hDLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDZixDQUFDO2FBQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbEMsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUNqQixDQUFDO2FBQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlFLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDYixDQUFDO1FBRUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzFDLENBQUM7K0dBdDJCVSxXQUFXLGtCQU1aLG1CQUFtQjttSEFObEIsV0FBVyxjQURFLE1BQU07OzRGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBTzdCLE1BQU07MkJBQUMsbUJBQW1COzswQkFRMUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgb2YsIGZyb20sIGZpcnN0VmFsdWVGcm9tLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCwgY2F0Y2hFcnJvciwgc3dpdGNoTWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFZBTFRFQ0hfQVVUSF9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBBdXRoU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi90b2tlbi5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTeW5jU2VydmljZSB9IGZyb20gJy4vc3luYy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFNpZ25pblJlcXVlc3QsXG4gIFNpZ25pblJlc3BvbnNlLFxuICBTaWdudXBSZXF1ZXN0LFxuICBTaWdudXBSZXNwb25zZSxcbiAgVmVyaWZ5RW1haWxSZXF1ZXN0LFxuICBWZXJpZnlFbWFpbFJlc3BvbnNlLFxuICBSZXNlbmRDb2RlUmVxdWVzdCxcbiAgUmVzZW5kQ29kZVJlc3BvbnNlLFxuICBNRkFWZXJpZnlSZXNwb25zZSxcbiAgUmVmcmVzaFJlc3BvbnNlLFxuICBHZXRQZXJtaXNzaW9uc1Jlc3BvbnNlLFxuICBHZXRQcm9maWxlUmVzcG9uc2UsXG4gIFVwZGF0ZVByb2ZpbGVSZXF1ZXN0LFxuICBVcGRhdGVQcm9maWxlUmVzcG9uc2UsXG4gIE1GQVNldHVwUmVzcG9uc2UsXG4gIE1GQUNvbmZpcm1SZXNwb25zZSxcbiAgTUZBRGlzYWJsZVJlc3BvbnNlLFxuICBGb3Jnb3RQYXNzd29yZFJlcXVlc3QsXG4gIEZvcmdvdFBhc3N3b3JkUmVzcG9uc2UsXG4gIFJlc2V0UGFzc3dvcmRSZXF1ZXN0LFxuICBSZXNldFBhc3N3b3JkUmVzcG9uc2UsXG4gIFN3aXRjaE9yZ1Jlc3BvbnNlLFxuICBNRkFNZXRob2QsXG4gIEF1dGhFcnJvcixcbiAgQXV0aFN5bmNFdmVudCxcbiAgVmFsdGVjaEF1dGhDb25maWcsXG4gIFJlZ2lzdGVyRGV2aWNlUmVzcG9uc2UsXG4gIEVuYWJsZU5vdGlmaWNhdGlvbnNSZXN1bHQsXG4gIE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZSxcbiAgUmVnaXN0ZXJEZXZpY2VSZXN1bHQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlLCBNZXNzYWdpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vZmlyZWJhc2UnO1xuXG5cbi8qKlxuICogU2VydmljaW8gcHJpbmNpcGFsIGRlIGF1dGVudGljYWNpw7NuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogQENvbXBvbmVudCh7Li4ufSlcbiAqIGV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCB7XG4gKiAgIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gKlxuICogICBhc3luYyBsb2dpbigpIHtcbiAqICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGguc2lnbmluKHsgZW1haWwsIHBhc3N3b3JkIH0pKTtcbiAqICAgICBpZiAodGhpcy5hdXRoLm1mYVBlbmRpbmcoKS5yZXF1aXJlZCkge1xuICogICAgICAgLy8gTW9zdHJhciBVSSBkZSBNRkFcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvLyBUaW1lciBwYXJhIHJlZnJlc2ggcHJvYWN0aXZvXG4gIHByaXZhdGUgcmVmcmVzaFRpbWVySWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3luY1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBzdGF0ZVNlcnZpY2U6IEF1dGhTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBBdXRoU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeW5jU2VydmljZTogQXV0aFN5bmNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlyZWJhc2VTZXJ2aWNlOiBGaXJlYmFzZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBtZXNzYWdpbmdTZXJ2aWNlOiBNZXNzYWdpbmdTZXJ2aWNlIHwgbnVsbCxcbiAgKSB7fVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFU1RBRE8gUMOaQkxJQ08gKFNpZ25hbHMgcmVhZG9ubHkpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBFc3RhZG8gY29tcGxldG8gZGUgYXV0ZW50aWNhY2nDs24gKi9cbiAgcmVhZG9ubHkgc3RhdGUgPSB0aGlzLnN0YXRlU2VydmljZS5zdGF0ZTtcblxuICAvKiogVXN1YXJpbyBlc3TDoSBhdXRlbnRpY2FkbyAqL1xuICByZWFkb25seSBpc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLnN0YXRlU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQ7XG5cbiAgLyoqIEVzdGFkbyBkZSBjYXJnYSAqL1xuICByZWFkb25seSBpc0xvYWRpbmcgPSB0aGlzLnN0YXRlU2VydmljZS5pc0xvYWRpbmc7XG5cbiAgLyoqIEluZm9ybWFjacOzbiBkZWwgdXN1YXJpbyAqL1xuICByZWFkb25seSB1c2VyID0gdGhpcy5zdGF0ZVNlcnZpY2UudXNlcjtcblxuICAvKiogVG9rZW4gZGUgYWNjZXNvICovXG4gIHJlYWRvbmx5IGFjY2Vzc1Rva2VuID0gdGhpcy5zdGF0ZVNlcnZpY2UuYWNjZXNzVG9rZW47XG5cbiAgLyoqIFJvbGVzIGRlbCB1c3VhcmlvICovXG4gIHJlYWRvbmx5IHJvbGVzID0gdGhpcy5zdGF0ZVNlcnZpY2Uucm9sZXM7XG5cbiAgLyoqIFBlcm1pc29zIGRlbCB1c3VhcmlvICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zID0gdGhpcy5zdGF0ZVNlcnZpY2UucGVybWlzc2lvbnM7XG5cbiAgLyoqIFVzdWFyaW8gZXMgc3VwZXIgYWRtaW4gKi9cbiAgcmVhZG9ubHkgaXNTdXBlckFkbWluID0gdGhpcy5zdGF0ZVNlcnZpY2UuaXNTdXBlckFkbWluO1xuXG4gIC8qKiBFc3RhZG8gZGUgTUZBIHBlbmRpZW50ZSAqL1xuICByZWFkb25seSBtZmFQZW5kaW5nID0gdGhpcy5zdGF0ZVNlcnZpY2UubWZhUGVuZGluZztcblxuICAvKiogRXJyb3IgYWN0dWFsICovXG4gIHJlYWRvbmx5IGVycm9yID0gdGhpcy5zdGF0ZVNlcnZpY2UuZXJyb3I7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIElOSUNJQUxJWkFDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBkZSBhdXRlbnRpY2FjacOzbi5cbiAgICogTGxhbWFkbyBhdXRvbcOhdGljYW1lbnRlIHBvciBwcm92aWRlVmFsdGVjaEF1dGguXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIDEuIENhcmdhciBlc3RhZG8gZGVzZGUgc3RvcmFnZVxuICAgIGNvbnN0IHN0b3JlZFN0YXRlID0gdGhpcy5zdG9yYWdlU2VydmljZS5sb2FkU3RhdGUoKTtcblxuICAgIGlmIChzdG9yZWRTdGF0ZS5hY2Nlc3NUb2tlbikge1xuICAgICAgLy8gMi4gVmVyaWZpY2FyIHNpIHRva2VuIGVzIHbDoWxpZG9cbiAgICAgIGlmICh0aGlzLnRva2VuU2VydmljZS5pc1Rva2VuVmFsaWQoc3RvcmVkU3RhdGUuYWNjZXNzVG9rZW4pKSB7XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc3RvcmVGcm9tU3RvcmFnZShzdG9yZWRTdGF0ZSk7XG5cbiAgICAgICAgLy8gRXh0cmFlciBpbmZvIGRlbCB0b2tlblxuICAgICAgICBjb25zdCBjbGFpbXMgPSB0aGlzLnRva2VuU2VydmljZS5wYXJzZVRva2VuKHN0b3JlZFN0YXRlLmFjY2Vzc1Rva2VuKTtcbiAgICAgICAgaWYgKGNsYWltcykge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZVVzZXJJbmZvKGNsYWltcy51aWQsIGNsYWltcy5lbWFpbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJbmljaWFyIHRpbWVyIGRlIHJlZnJlc2NvIHByb2FjdGl2b1xuICAgICAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gICAgICB9IGVsc2UgaWYgKHN0b3JlZFN0YXRlLnJlZnJlc2hUb2tlbikge1xuICAgICAgICAvLyA0LiBUb2tlbiBleHBpcmFkbyBwZXJvIGhheSByZWZyZXNoIHRva2VuIC0gaW50ZW50YXIgcmVmcmVzY2FyXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4oKSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRoaXMuc2lnbk91dEZpcmViYXNlKCk7XG4gICAgICAgICAgdGhpcy5jbGVhclN0YXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2lnbk91dEZpcmViYXNlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuIEluaWNpYXIgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7Fhc1xuICAgIGlmICh0aGlzLmNvbmZpZy5lbmFibGVUYWJTeW5jKSB7XG4gICAgICB0aGlzLnN5bmNTZXJ2aWNlLnN0YXJ0KCk7XG4gICAgICB0aGlzLnN5bmNTdWJzY3JpcHRpb24gPSB0aGlzLnN5bmNTZXJ2aWNlLm9uRXZlbnQkLnN1YnNjcmliZShldmVudCA9PlxuICAgICAgICB0aGlzLmhhbmRsZVN5bmNFdmVudChldmVudClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0TG9hZGluZyhmYWxzZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLnN5bmNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQVVURU5USUNBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYSBzZXNpw7NuIGNvbiBlbWFpbCB5IGNvbnRyYXNlw7FhLlxuICAgKi9cbiAgc2lnbmluKHJlcXVlc3Q6IFNpZ25pblJlcXVlc3QpOiBPYnNlcnZhYmxlPFNpZ25pblJlc3BvbnNlPiB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xlYXJFcnJvcigpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFNpZ25pblJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3NpZ25pbmAsIHJlcXVlc3QpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UubWZhUmVxdWlyZWQpIHtcbiAgICAgICAgICAvLyBNRkEgcmVxdWVyaWRvIC0gZ3VhcmRhciBlc3RhZG8gdGVtcG9yYWxcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRNRkFQZW5kaW5nKHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgbWZhVG9rZW46IHJlc3BvbnNlLm1mYVRva2VuISxcbiAgICAgICAgICAgIG1ldGhvZDogcmVzcG9uc2UubWZhTWV0aG9kISxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgIC8vIExvZ2luIGV4aXRvc28gc2luIE1GQVxuICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2Vzc2Z1bEF1dGgocmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gbnVldm8gdXN1YXJpby5cbiAgICogRWwgdXN1YXJpbyBxdWVkYSBlbiBlc3RhZG8gUEVORElORyBoYXN0YSB2ZXJpZmljYXIgc3UgZW1haWwuXG4gICAqL1xuICBzaWdudXAocmVxdWVzdDogU2lnbnVwUmVxdWVzdCk6IE9ic2VydmFibGU8U2lnbnVwUmVzcG9uc2U+IHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jbGVhckVycm9yKCk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxTaWdudXBSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9zaWdudXBgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBlbWFpbCBjb24gY8OzZGlnbyBkZSA2IGTDrWdpdG9zLlxuICAgKiBTaSBlcyBleGl0b3NvLCBoYWNlIGF1dG8tbG9naW4geSByZXRvcm5hIHRva2Vucy5cbiAgICovXG4gIHZlcmlmeUVtYWlsKHJlcXVlc3Q6IFZlcmlmeUVtYWlsUmVxdWVzdCk6IE9ic2VydmFibGU8VmVyaWZ5RW1haWxSZXNwb25zZT4ge1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsZWFyRXJyb3IoKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxWZXJpZnlFbWFpbFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3ZlcmlmeS1lbWFpbGAsIHJlcXVlc3QpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UudmVyaWZpZWQgJiYgcmVzcG9uc2UuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAvLyBBdXRvLWxvZ2luOiBndWFyZGFyIHRva2VucyB5IGFjdHVhbGl6YXIgZXN0YWRvXG4gICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzZnVsQXV0aChyZXNwb25zZSBhcyB1bmtub3duIGFzIFNpZ25pblJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZW52w61hIGPDs2RpZ28gZGUgdmVyaWZpY2FjacOzbiBhbCBlbWFpbC5cbiAgICovXG4gIHJlc2VuZENvZGUocmVxdWVzdDogUmVzZW5kQ29kZVJlcXVlc3QpOiBPYnNlcnZhYmxlPFJlc2VuZENvZGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFJlc2VuZENvZGVSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9yZXNlbmQtY29kZWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIGPDs2RpZ28gTUZBLlxuICAgKi9cbiAgdmVyaWZ5TUZBKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBVmVyaWZ5UmVzcG9uc2U+IHtcbiAgICBjb25zdCBtZmFTdGF0ZSA9IHRoaXMubWZhUGVuZGluZygpO1xuICAgIGlmICghbWZhU3RhdGUubWZhVG9rZW4pIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XG4gICAgICAgIGNvZGU6ICdNRkFfTk9UX1BFTkRJTkcnLFxuICAgICAgICBtZXNzYWdlOiAnTm8gaGF5IHZlcmlmaWNhY2nDs24gTUZBIHBlbmRpZW50ZScsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBVmVyaWZ5UmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vbWZhL3ZlcmlmeWAsIHtcbiAgICAgICAgbWZhVG9rZW46IG1mYVN0YXRlLm1mYVRva2VuLFxuICAgICAgICBjb2RlLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsZWFyTUZBUGVuZGluZygpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2Vzc2Z1bEF1dGgocmVzcG9uc2UpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2NhIGVsIHRva2VuIGRlIGFjY2Vzby5cbiAgICovXG4gIHJlZnJlc2hBY2Nlc3NUb2tlbigpOiBPYnNlcnZhYmxlPFJlZnJlc2hSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc3RhdGUoKS5yZWZyZXNoVG9rZW47XG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XG4gICAgICAgIGNvZGU6ICdOT19SRUZSRVNIX1RPS0VOJyxcbiAgICAgICAgbWVzc2FnZTogJ05vIGhheSB0b2tlbiBkZSByZWZyZXNjbycsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFJlZnJlc2hSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9yZWZyZXNoYCwgeyByZWZyZXNoVG9rZW4gfSkucGlwZShcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IERhdGUubm93KCkgKyByZXNwb25zZS5leHBpcmVzSW4gKiAxMDAwO1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZS5hY2Nlc3NUb2tlbiwgcmVzcG9uc2UuZXhwaXJlc0luKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlQWNjZXNzVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4sIGV4cGlyZXNBdCk7XG4gICAgICAgIHRoaXMuc3RhcnRSZWZyZXNoVGltZXIoKTtcbiAgICAgICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3Qoe1xuICAgICAgICAgIHR5cGU6ICdUT0tFTl9SRUZSRVNIJyxcbiAgICAgICAgICBwYXlsb2FkOiB7IGFjY2Vzc1Rva2VuOiByZXNwb25zZS5hY2Nlc3NUb2tlbiwgZXhwaXJlc0F0IH0sXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENpZXJyYSBzZXNpw7NuLlxuICAgKi9cbiAgYXN5bmMgbG9nb3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc3RhdGUoKS5yZWZyZXNoVG9rZW47XG5cbiAgICAvLyBFbGltaW5hciBkaXNwb3NpdGl2byBkZWwgYmFja2VuZCBhbnRlcyBkZSBjZXJyYXIgc2VzacOzblxuICAgIGF3YWl0IHRoaXMudW5yZWdpc3RlckRldmljZSgpO1xuXG4gICAgLy8gTm90aWZpY2FyIGFsIGJhY2tlbmQgKGZpcmUgYW5kIGZvcmdldClcbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnBvc3QoYCR7dGhpcy5iYXNlVXJsfS9sb2dvdXRgLCB7IHJlZnJlc2hUb2tlbiB9KVxuICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSlcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIENlcnJhciBzZXNpw7NuIGRlIEZpcmViYXNlIHNpIGVzdMOhIGludGVncmFkb1xuICAgIHRoaXMuc2lnbk91dEZpcmViYXNlKCk7XG5cbiAgICB0aGlzLmNsZWFyU3RhdGUoKTtcbiAgICB0aGlzLnN5bmNTZXJ2aWNlLmJyb2FkY2FzdCh7IHR5cGU6ICdMT0dPVVQnIH0pO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZy5sb2dpblJvdXRlXSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUZBIFNFVFVQICh1c3VhcmlvIGF1dGVudGljYWRvKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ29uZmlndXJhIE1GQSBwYXJhIGVsIHVzdWFyaW8uXG4gICAqL1xuICBzZXR1cE1GQShtZXRob2Q6IE1GQU1ldGhvZCwgcGhvbmU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1GQVNldHVwUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxNRkFTZXR1cFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9zZXR1cGAsIHsgbWV0aG9kLCBwaG9uZSB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtYSBsYSBjb25maWd1cmFjacOzbiBkZSBNRkEuXG4gICAqL1xuICBjb25maXJtTUZBKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBQ29uZmlybVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBQ29uZmlybVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9jb25maXJtYCwgeyBjb2RlIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2hhYmlsaXRhIE1GQS5cbiAgICovXG4gIGRpc2FibGVNRkEocGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBRGlzYWJsZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBRGlzYWJsZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9kaXNhYmxlYCwgeyBwYXNzd29yZCB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBPUkdBTklaQUNJT05FU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ2FtYmlhIGxhIG9yZ2FuaXphY2nDs24gYWN0aXZhIGRlbCB1c3VhcmlvLlxuICAgKiBHZW5lcmEgdW4gbnVldm8gRmlyZWJhc2UgdG9rZW4gY29uIGVsIGFjdGl2ZU9yZyBhY3R1YWxpemFkby5cbiAgICpcbiAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIC0gSUQgZGUgbGEgb3JnYW5pemFjacOzbiBhIGxhIHF1ZSBjYW1iaWFyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgY29uIGVsIG51ZXZvIEZpcmViYXNlIHRva2VuIHkgYWN0aXZlT3JnXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hdXRoLnN3aXRjaE9yZygnb3JnX3h5ejc4OScpKTtcbiAgICogLy8gRmlyZWJhc2UgeWEgZXN0w6EgcmUtYXV0ZW50aWNhZG8gY29uIGxhIG51ZXZhIG9yZ1xuICAgKiBjb25zdCBhY3RpdmVPcmcgPSBhd2FpdCB0aGlzLmZpcmViYXNlLmdldEFjdGl2ZU9yZygpO1xuICAgKiBgYGBcbiAgICovXG4gIHN3aXRjaE9yZyhvcmdhbml6YXRpb25JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTd2l0Y2hPcmdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFN3aXRjaE9yZ1Jlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3N3aXRjaC1vcmdgLCB7IG9yZ2FuaXphdGlvbklkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBSZS1hdXRlbnRpY2FyIGVuIEZpcmViYXNlIGNvbiBlbCBudWV2byB0b2tlblxuICAgICAgICAgIC8vIFVzYXIgc3dpdGNoTWFwICsgZnJvbSBwYXJhIGVzcGVyYXIgYSBxdWUgRmlyZWJhc2UgY29tcGxldGVcbiAgICAgICAgICBjb25zdCBmaXJlYmFzZUF1dGgkID0gcmVzcG9uc2UuZmlyZWJhc2VUb2tlblxuICAgICAgICAgICAgPyBmcm9tKHRoaXMuc2lnbkluV2l0aEZpcmViYXNlKHJlc3BvbnNlLmZpcmViYXNlVG9rZW4pKVxuICAgICAgICAgICAgOiBvZih1bmRlZmluZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZpcmViYXNlQXV0aCQucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIE5vdGlmaWNhciBjYW1iaW8gYSBvdHJhcyBwZXN0YcOxYXNcbiAgICAgICAgICAgICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3Qoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdPUkdfU1dJVENIJyxcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2ZU9yZzogcmVzcG9uc2UuYWN0aXZlT3JnIH0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBSZXRvcm5hciByZXNwb25zZSBvcmlnaW5hbCBkZXNwdcOpcyBkZSBxdWUgRmlyZWJhc2UgY29tcGxldGVcbiAgICAgICAgICAgIG1hcCgoKSA9PiByZXNwb25zZSlcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgICApO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBFUkZJTCBERSBVU1VBUklPXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHBlcmZpbCBkZWwgdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAgICogSW5jbHV5ZSBpbmZvcm1hY2nDs24gZGUgTUZBIHkgdGVsw6lmb25vLlxuICAgKi9cbiAgZ2V0UHJvZmlsZSgpOiBPYnNlcnZhYmxlPEdldFByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8R2V0UHJvZmlsZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3Byb2ZpbGVgKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgZWwgcGVyZmlsIGRlbCB1c3VhcmlvLlxuICAgKi9cbiAgdXBkYXRlUHJvZmlsZShyZXF1ZXN0OiBVcGRhdGVQcm9maWxlUmVxdWVzdCk6IE9ic2VydmFibGU8VXBkYXRlUHJvZmlsZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dDxVcGRhdGVQcm9maWxlUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcHJvZmlsZWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFQ1VQRVJBQ0nDk04gREUgQ09OVFJBU0XDkUFcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYSBlbCBwcm9jZXNvIGRlIHJlY3VwZXJhY2nDs24gZGUgY29udHJhc2XDsWEuXG4gICAqIEVudsOtYSB1biBjw7NkaWdvIGFsIGVtYWlsIGRlbCB1c3VhcmlvLlxuICAgKi9cbiAgZm9yZ290UGFzc3dvcmQocmVxdWVzdDogRm9yZ290UGFzc3dvcmRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9mb3Jnb3QtcGFzc3dvcmRgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldGVhIGxhIGNvbnRyYXNlw7FhIHVzYW5kbyBlbCBjw7NkaWdvIGVudmlhZG8gcG9yIGVtYWlsLlxuICAgKi9cbiAgcmVzZXRQYXNzd29yZChyZXF1ZXN0OiBSZXNldFBhc3N3b3JkUmVxdWVzdCk6IE9ic2VydmFibGU8UmVzZXRQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8UmVzZXRQYXNzd29yZFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3Jlc2V0LXBhc3N3b3JkYCwgcmVxdWVzdClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUEVSTUlTT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbG9zIHBlcm1pc29zIGFjdHVhbGl6YWRvcyBkZWwgYmFja2VuZC5cbiAgICovXG4gIGZldGNoUGVybWlzc2lvbnMoKTogT2JzZXJ2YWJsZTxHZXRQZXJtaXNzaW9uc1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8R2V0UGVybWlzc2lvbnNSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9wZXJtaXNzaW9uc2ApLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVQZXJtaXNzaW9ucyhcbiAgICAgICAgICByZXNwb25zZS5yb2xlcyxcbiAgICAgICAgICByZXNwb25zZS5wZXJtaXNzaW9ucyxcbiAgICAgICAgICByZXNwb25zZS5pc1N1cGVyQWRtaW5cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlUGVybWlzc2lvbnMocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnN5bmNTZXJ2aWNlLmJyb2FkY2FzdCh7IHR5cGU6ICdQRVJNSVNTSU9OU19VUERBVEUnIH0pO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgdW4gcGVybWlzbyBlc3BlY8OtZmljby5cbiAgICogRm9ybWF0bzogXCJyZXNvdXJjZTphY3Rpb25cIiAoZWo6IFwidGVtcGxhdGVzOmVkaXRcIilcbiAgICovXG4gIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdXBlckFkbWluKCkpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgW3Jlc291cmNlLCBhY3Rpb25dID0gcGVybWlzc2lvbi5zcGxpdCgnOicpO1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zKCkuc29tZShwID0+IHtcbiAgICAgIGNvbnN0IFtwUmVzb3VyY2UsIHBBY3Rpb25dID0gcC5zcGxpdCgnOicpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHBSZXNvdXJjZSA9PT0gJyonIHx8IHBSZXNvdXJjZSA9PT0gcmVzb3VyY2UpICYmIChwQWN0aW9uID09PSAnKicgfHwgcEFjdGlvbiA9PT0gYWN0aW9uKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIGFsZ3VubyBkZSBsb3MgcGVybWlzb3MgZGFkb3MuXG4gICAqL1xuICBoYXNBbnlQZXJtaXNzaW9uKHBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZXJtaXNzaW9ucy5zb21lKHAgPT4gdGhpcy5oYXNQZXJtaXNzaW9uKHApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIHRvZG9zIGxvcyBwZXJtaXNvcyBkYWRvcy5cbiAgICovXG4gIGhhc0FsbFBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZXJtaXNzaW9ucy5ldmVyeShwID0+IHRoaXMuaGFzUGVybWlzc2lvbihwKSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB0aWVuZSB1biByb2wgZXNwZWPDrWZpY28uXG4gICAqL1xuICBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvbGVzKCkuc29tZShyID0+IHIudG9Mb3dlckNhc2UoKSA9PT0gcm9sZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBnZXQgYmFzZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9JHt0aGlzLmNvbmZpZy5hdXRoUHJlZml4fWA7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1Y2Nlc3NmdWxBdXRoKHJlc3BvbnNlOiBTaWduaW5SZXNwb25zZSB8IE1GQVZlcmlmeVJlc3BvbnNlKTogdm9pZCB7XG4gICAgY29uc3QgZXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIHJlc3BvbnNlLmV4cGlyZXNJbiEgKiAxMDAwO1xuICAgIGNvbnN0IHRva2VuRGF0YSA9IHRoaXMudG9rZW5TZXJ2aWNlLnBhcnNlVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4hKTtcblxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldEF1dGhlbnRpY2F0ZWQoe1xuICAgICAgYWNjZXNzVG9rZW46IHJlc3BvbnNlLmFjY2Vzc1Rva2VuISxcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVzcG9uc2UucmVmcmVzaFRva2VuISxcbiAgICAgIHVzZXJJZDogdG9rZW5EYXRhPy51aWQsXG4gICAgICBlbWFpbDogdG9rZW5EYXRhPy5lbWFpbCxcbiAgICAgIHJvbGVzOiByZXNwb25zZS5yb2xlcyB8fCBbXSxcbiAgICAgIHBlcm1pc3Npb25zOiByZXNwb25zZS5wZXJtaXNzaW9ucyB8fCBbXSxcbiAgICAgIGlzU3VwZXJBZG1pbjogcmVzcG9uc2UucGVybWlzc2lvbnM/LmluY2x1ZGVzKCcqOionKSB8fCBmYWxzZSxcbiAgICAgIGV4cGlyZXNBdCxcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZVN0YXRlKHtcbiAgICAgIGFjY2Vzc1Rva2VuOiByZXNwb25zZS5hY2Nlc3NUb2tlbiEsXG4gICAgICByZWZyZXNoVG9rZW46IHJlc3BvbnNlLnJlZnJlc2hUb2tlbiEsXG4gICAgICByb2xlczogcmVzcG9uc2Uucm9sZXMgfHwgW10sXG4gICAgICBwZXJtaXNzaW9uczogcmVzcG9uc2UucGVybWlzc2lvbnMgfHwgW10sXG4gICAgICBpc1N1cGVyQWRtaW46IHJlc3BvbnNlLnBlcm1pc3Npb25zPy5pbmNsdWRlcygnKjoqJykgfHwgZmFsc2UsXG4gICAgICBleHBpcmVzQXQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3QoeyB0eXBlOiAnTE9HSU4nIH0pO1xuXG4gICAgLy8gSW50ZWdyYWNpw7NuIGNvbiBGaXJlYmFzZVxuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLmVuYWJsZUZpcmViYXNlSW50ZWdyYXRpb24gJiZcbiAgICAgICdmaXJlYmFzZVRva2VuJyBpbiByZXNwb25zZSAmJlxuICAgICAgcmVzcG9uc2UuZmlyZWJhc2VUb2tlblxuICAgICkge1xuICAgICAgdGhpcy5zaWduSW5XaXRoRmlyZWJhc2UocmVzcG9uc2UuZmlyZWJhc2VUb2tlbik7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0cm8gYXV0b23DoXRpY28gZGUgZGlzcG9zaXRpdm8gcGFyYSBwdXNoIG5vdGlmaWNhdGlvbnNcbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlSWZOZWVkZWQoKTsgLy8gZmlyZS1hbmQtZm9yZ2V0XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlZnJlc2hUaW1lcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWZyZXNoVGltZXIoKTtcblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc3RhdGUoKTtcbiAgICBpZiAoIXN0YXRlLmV4cGlyZXNBdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVmcmVzaEJlZm9yZU1zID0gKHRoaXMuY29uZmlnLnJlZnJlc2hCZWZvcmVFeHBpcnkgfHwgNjApICogMTAwMDtcbiAgICBjb25zdCByZWZyZXNoQXQgPSBzdGF0ZS5leHBpcmVzQXQgLSByZWZyZXNoQmVmb3JlTXM7XG4gICAgY29uc3QgZGVsYXkgPSByZWZyZXNoQXQgLSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgdGhpcy5yZWZyZXNoVGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnN1YnNjcmliZSh7XG4gICAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMubG9nb3V0KCksXG4gICAgICAgIH0pO1xuICAgICAgfSwgZGVsYXkpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUucmVmcmVzaFRva2VuKSB7XG4gICAgICAvLyBUb2tlbiB5YSBkZWJlcsOtYSByZWZyZXNjYXJzZSwgaW50ZW50YXIgYWhvcmFcbiAgICAgIHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMubG9nb3V0KCksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZWZyZXNoVGltZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVmcmVzaFRpbWVySWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcklkKTtcbiAgICAgIHRoaXMucmVmcmVzaFRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3luY0V2ZW50KGV2ZW50OiBBdXRoU3luY0V2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlICdMT0dJTic6XG4gICAgICBjYXNlICdUT0tFTl9SRUZSRVNIJzoge1xuICAgICAgICAvLyBSZWNhcmdhciBlc3RhZG8gZGVzZGUgc3RvcmFnZVxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFN0YXRlKCk7XG4gICAgICAgIGlmIChzdGF0ZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc3RvcmVGcm9tU3RvcmFnZShzdGF0ZSk7XG4gICAgICAgICAgY29uc3QgY2xhaW1zID0gdGhpcy50b2tlblNlcnZpY2UucGFyc2VUb2tlbihzdGF0ZS5hY2Nlc3NUb2tlbik7XG4gICAgICAgICAgaWYgKGNsYWltcykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlVXNlckluZm8oY2xhaW1zLnVpZCwgY2xhaW1zLmVtYWlsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTE9HT1VUJzpcbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UucmVzZXQoKTtcbiAgICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZy5sb2dpblJvdXRlXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUEVSTUlTU0lPTlNfVVBEQVRFJzoge1xuICAgICAgICBjb25zdCBwZXJtcyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFBlcm1pc3Npb25zKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZVBlcm1pc3Npb25zKHBlcm1zLnJvbGVzLCBwZXJtcy5wZXJtaXNzaW9ucywgcGVybXMuaXNTdXBlckFkbWluKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdPUkdfU1dJVENIJzpcbiAgICAgICAgLy8gT3RyYSBwZXN0YcOxYSBjYW1iacOzIGRlIG9yZ2FuaXphY2nDs24gLSByZWNhcmdhciBww6FnaW5hIHBhcmEgb2J0ZW5lciBudWV2byBlc3RhZG9cbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUF1dGhFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgY29uc3QgYXV0aEVycm9yOiBBdXRoRXJyb3IgPSB7XG4gICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnVU5LTk9XTl9FUlJPUicsXG4gICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24gZGVzY29ub2NpZG8nLFxuICAgIH07XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0RXJyb3IoYXV0aEVycm9yKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBhdXRoRXJyb3IpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZJUkVCQVNFIElOVEVHUkFUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgYXN5bmMgc2lnbkluV2l0aEZpcmViYXNlKGZpcmViYXNlVG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5maXJlYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maXJlYmFzZVNlcnZpY2Uuc2lnbkluV2l0aEN1c3RvbVRva2VuKGZpcmViYXNlVG9rZW4pO1xuICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBdXRoXSBGaXJlYmFzZSBzaWduaW4gc3VjY2Vzc2Z1bCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdbVmFsdGVjaEF1dGhdIEZpcmViYXNlU2VydmljZSBub3QgcHJvdmlkZWQuIEFkZCBwcm92aWRlVmFsdGVjaEZpcmViYXNlKCkgdG8geW91ciBwcm92aWRlcnMuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBObyBibG9xdWVhciBlbCBsb2dpbiBwcmluY2lwYWwgc2kgRmlyZWJhc2UgZmFsbGFcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbmluIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaWduT3V0RmlyZWJhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVGaXJlYmFzZUludGVncmF0aW9uKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZmlyZWJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlyZWJhc2VTZXJ2aWNlLnNpZ25PdXQoKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbm91dCBzdWNjZXNzZnVsJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElnbm9yYXIgZXJyb3JlcyBkZSBGaXJlYmFzZSBzaWdub3V0XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbm91dCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBERVZJQ0UgUkVHSVNUUkFUSU9OIChQdXNoIE5vdGlmaWNhdGlvbnMpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTb2xpY2l0YSBwZXJtaXNvcyBkZSBub3RpZmljYWNpw7NuIHkgcmVnaXN0cmEgZWwgZGlzcG9zaXRpdm8uXG4gICAqIFVzYXIgY3VhbmRvIGVsIHVzdWFyaW8gYWNlcHRhIHJlY2liaXIgbm90aWZpY2FjaW9uZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXN5bmMgb25FbmFibGVOb3RpZmljYXRpb25zKCkge1xuICAgKiAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYXV0aC5lbmFibGVOb3RpZmljYXRpb25zKCk7XG4gICAqICAgaWYgKHJlc3VsdC5ncmFudGVkKSB7XG4gICAqICAgICBjb25zb2xlLmxvZygnTm90aWZpY2FjaW9uZXMgaGFiaWxpdGFkYXMnKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBlbmFibGVOb3RpZmljYXRpb25zKCk6IFByb21pc2U8RW5hYmxlTm90aWZpY2F0aW9uc1Jlc3VsdD4ge1xuICAgIGlmICghdGhpcy5tZXNzYWdpbmdTZXJ2aWNlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gTWVzc2FnaW5nU2VydmljZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICByZXR1cm4geyBncmFudGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlmICghYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBQdXNoIG5vdGlmaWNhdGlvbnMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuIHsgZ3JhbnRlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB7IGdyYW50ZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0cmFyIGRpc3Bvc2l0aXZvIGVuIGJhY2tlbmRcbiAgICBjb25zdCByZWdpc3RlcmVkID0gYXdhaXQgdGhpcy5yZWdpc3RlckRldmljZUlmTmVlZGVkKCk7XG5cbiAgICByZXR1cm4geyBncmFudGVkOiB0cnVlLCB0b2tlbiwgcmVnaXN0ZXJlZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2FjdGl2YSBsYXMgbm90aWZpY2FjaW9uZXMgcGFyYSBlc3RlIGRpc3Bvc2l0aXZvLlxuICAgKiBFbGltaW5hIGVsIHRva2VuIGRlbCBiYWNrZW5kIHkgZGUgRkNNLlxuICAgKiBVc2FyIGRlc2RlIHVuIHRvZ2dsZSBkZSBwcmVmZXJlbmNpYXMgY3VhbmRvIGVsIHVzdWFyaW8gZGVzYWN0aXZhIG5vdGlmaWNhY2lvbmVzLlxuICAgKlxuICAgKiBOT1RBOiBFc3RvIE5PIHJldm9jYSBlbCBwZXJtaXNvIGRlbCBuYXZlZ2Fkb3IgKGVsIHVzdWFyaW8gZGViZSBoYWNlcmxvIG1hbnVhbG1lbnRlXG4gICAqIGRlc2RlIGxhIGNvbmZpZ3VyYWNpw7NuIGRlbCBuYXZlZ2Fkb3IpLiBTb2xvIGVsaW1pbmEgZWwgcmVnaXN0cm8gZGVsIGRpc3Bvc2l0aXZvLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGFzeW5jIG9uVG9nZ2xlTm90aWZpY2F0aW9ucyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAqICAgaWYgKGVuYWJsZWQpIHtcbiAgICogICAgIGF3YWl0IHRoaXMuYXV0aC5lbmFibGVOb3RpZmljYXRpb25zKCk7XG4gICAqICAgfSBlbHNlIHtcbiAgICogICAgIGF3YWl0IHRoaXMuYXV0aC5kaXNhYmxlTm90aWZpY2F0aW9ucygpO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRpc2FibGVOb3RpZmljYXRpb25zKCk6IFByb21pc2U8eyBkaXNhYmxlZDogYm9vbGVhbiB9PiB7XG4gICAgaWYgKCF0aGlzLm1lc3NhZ2luZ1NlcnZpY2UpIHtcbiAgICAgIHJldHVybiB7IGRpc2FibGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRoaXMubWVzc2FnaW5nU2VydmljZS5jdXJyZW50VG9rZW47XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gRWxpbWluYXIgZGVsIGJhY2tlbmRcbiAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgdGhpcy5odHRwLnJlcXVlc3QoJ0RFTEVURScsIGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvdXNlcnMvbWUvZGV2aWNlcy9ieS10b2tlbmAsIHtcbiAgICAgICAgICAgIGJvZHk6IHsgdG9rZW4gfVxuICAgICAgICAgIH0pLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRWxpbWluYXIgdG9rZW4gZGUgRkNNXG4gICAgICAgIGF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5kZWxldGVUb2tlbigpO1xuICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBdXRoXSBOb3RpZmljYXRpb25zIGRpc2FibGVkJyk7XG4gICAgICAgIHJldHVybiB7IGRpc2FibGVkOiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGRpc2FibGVkOiBmYWxzZSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRmFpbGVkIHRvIGRpc2FibGUgbm90aWZpY2F0aW9uczonLCBlcnJvcik7XG4gICAgICByZXR1cm4geyBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSBlbCBlc3RhZG8gYWN0dWFsIGRlIHBlcm1pc29zIGRlIG5vdGlmaWNhY2nDs24uXG4gICAqXG4gICAqIEByZXR1cm5zICdncmFudGVkJyB8ICdkZW5pZWQnIHwgJ2RlZmF1bHQnIHwgJ3Vuc3VwcG9ydGVkJ1xuICAgKi9cbiAgZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlKCk6IE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZSB7XG4gICAgaWYgKCF0aGlzLm1lc3NhZ2luZ1NlcnZpY2UpIHtcbiAgICAgIHJldHVybiAndW5zdXBwb3J0ZWQnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmdldFBlcm1pc3Npb25TdGF0ZSgpIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBtYW51YWxtZW50ZSBlbCBkaXNwb3NpdGl2byBlbiBlbCBiYWNrZW5kLlxuICAgKiDDmnRpbCBwYXJhIHNpbmNyb25pemFyIGRpc3Bvc2l0aXZvcyBxdWUgdGllbmVuIHRva2VuIEZDTSBwZXJvIG5vIGVzdMOhbiByZWdpc3RyYWRvcy5cbiAgICpcbiAgICogQHJldHVybnMgUmVzdWx0YWRvIGRlbCByZWdpc3RybyBjb24gZGV2aWNlSWQgc2kgZnVlIGV4aXRvc29cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTaW5jcm9uaXphciBkaXNwb3NpdGl2byBtYW51YWxtZW50ZVxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmF1dGgucmVnaXN0ZXJEZXZpY2UoKTtcbiAgICogaWYgKHJlc3VsdC5yZWdpc3RlcmVkKSB7XG4gICAqICAgY29uc29sZS5sb2coJ0Rpc3Bvc2l0aXZvIHJlZ2lzdHJhZG86JywgcmVzdWx0LmRldmljZUlkKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHJlZ2lzdGVyRGV2aWNlKCk6IFByb21pc2U8UmVnaXN0ZXJEZXZpY2VSZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMubWVzc2FnaW5nU2VydmljZSkge1xuICAgICAgcmV0dXJuIHsgcmVnaXN0ZXJlZDogZmFsc2UsIGVycm9yOiAnTWVzc2FnaW5nU2VydmljZSBubyBkaXNwb25pYmxlJyB9O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgcmV0dXJuIHsgcmVnaXN0ZXJlZDogZmFsc2UsIGVycm9yOiAnVXN1YXJpbyBubyBhdXRlbnRpY2FkbycgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVmVyaWZpY2FyIHBlcm1pc29zIHByaW1lcm8gKG5vIGRlcGVuZGUgZGVsIEluamVjdG9yIGRlIE1lc3NhZ2luZylcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG4gICAgICBpZiAocGVybWlzc2lvbiAhPT0gJ2dyYW50ZWQnKSB7XG4gICAgICAgIHJldHVybiB7IHJlZ2lzdGVyZWQ6IGZhbHNlLCBlcnJvcjogJ1Blcm1pc28gZGUgbm90aWZpY2FjaW9uZXMgbm8gb3RvcmdhZG8nIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVudGFyIHVzYXIgdG9rZW4gZXhpc3RlbnRlIHByaW1lcm8gKGV2aXRhIHByb2JsZW1hcyBkZSB0aW1pbmcgY29uIEluamVjdG9yKVxuICAgICAgbGV0IHRva2VuID0gdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmN1cnJlbnRUb2tlbjtcblxuICAgICAgLy8gU2kgbm8gaGF5IHRva2VuIGV4aXN0ZW50ZSwgaW50ZW50YXIgb2J0ZW5lciB1bm8gbnVldm9cbiAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgLy8gU29sbyB2ZXJpZmljYXIgaXNTdXBwb3J0ZWQgc2kgbmVjZXNpdGFtb3Mgb2J0ZW5lciBudWV2byB0b2tlblxuICAgICAgICBpZiAoIWF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgcmVnaXN0ZXJlZDogZmFsc2UsIGVycm9yOiAnRkNNIG5vIHNvcG9ydGFkbyBlbiBlc3RlIG5hdmVnYWRvcicgfTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbiA9IGF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5nZXRUb2tlbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiB7IHJlZ2lzdGVyZWQ6IGZhbHNlLCBlcnJvcjogJ05vIHNlIHB1ZG8gb2J0ZW5lciB0b2tlbiBGQ00nIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ2lzdHJhciBlbiBiYWNrZW5kXG4gICAgICBjb25zdCB7IHBsYXRmb3JtLCBicm93c2VyLCBvcyB9ID0gdGhpcy5kZXRlY3RQbGF0Zm9ybUluZm8oKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PFJlZ2lzdGVyRGV2aWNlUmVzcG9uc2U+KFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvdXNlcnMvbWUvZGV2aWNlc2AsXG4gICAgICAgICAgeyB0b2tlbiwgcGxhdGZvcm0sIGJyb3dzZXIsIG9zIH1cbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRGV2aWNlIHJlZ2lzdGVyZWQgbWFudWFsbHk6JywgcmVzcG9uc2UuZGV2aWNlLmRldmljZUlkKTtcbiAgICAgIHJldHVybiB7IHJlZ2lzdGVyZWQ6IHRydWUsIGRldmljZUlkOiByZXNwb25zZS5kZXZpY2UuZGV2aWNlSWQsIHRva2VuIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gTWFudWFsIGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZ2lzdGVyZWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8IGVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCByZWdpc3RyYXIgZGlzcG9zaXRpdm8nXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBlbCBkaXNwb3NpdGl2byBlbiBlbCBiYWNrZW5kIHNpIHRpZW5lIHBlcm1pc29zIGRlIG5vdGlmaWNhY2nDs24uXG4gICAqIFNlIGxsYW1hIGF1dG9tw6F0aWNhbWVudGUgZGVzcHXDqXMgZGUgdW4gbG9naW4gZXhpdG9zbyBzaSBlbmFibGVEZXZpY2VSZWdpc3RyYXRpb249dHJ1ZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJEZXZpY2VJZk5lZWRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBTb2xvIHNpIGVzdMOhIGhhYmlsaXRhZG8geSBtZXNzYWdpbmcgZXN0w6EgZGlzcG9uaWJsZVxuICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlRGV2aWNlUmVnaXN0cmF0aW9uIHx8ICF0aGlzLm1lc3NhZ2luZ1NlcnZpY2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVmVyaWZpY2FyIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG9cbiAgICAgIGlmICghYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgeWEgdGllbmUgcGVybWlzb3NcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG4gICAgICBpZiAocGVybWlzc2lvbiAhPT0gJ2dyYW50ZWQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm8gc29saWNpdGFyIGF1dG9tw6F0aWNhbWVudGUsIHNvbG8gcmVnaXN0cmFyIHNpIHlhIHRpZW5lIHBlcm1pc29cbiAgICAgIH1cblxuICAgICAgLy8gT2J0ZW5lciB0b2tlbiBleGlzdGVudGUgKG5vIHNvbGljaXRhciBudWV2bylcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmdldFRva2VuKCk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVnaXN0cmFyIGVuIGJhY2tlbmRcbiAgICAgIGNvbnN0IHsgcGxhdGZvcm0sIGJyb3dzZXIsIG9zIH0gPSB0aGlzLmRldGVjdFBsYXRmb3JtSW5mbygpO1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PFJlZ2lzdGVyRGV2aWNlUmVzcG9uc2U+KFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvdXNlcnMvbWUvZGV2aWNlc2AsXG4gICAgICAgICAgeyB0b2tlbiwgcGxhdGZvcm0sIGJyb3dzZXIsIG9zIH1cbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRGV2aWNlIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBObyBibG9xdWVhciBhdXRoIHNpIGZhbGxhIGRldmljZSByZWdpc3RyYXRpb25cbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBEZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgZWwgZGlzcG9zaXRpdm8gZGVsIGJhY2tlbmQgeSBib3JyYSBlbCB0b2tlbiBGQ00uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVucmVnaXN0ZXJEZXZpY2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVEZXZpY2VSZWdpc3RyYXRpb24gfHwgIXRoaXMubWVzc2FnaW5nU2VydmljZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRoaXMubWVzc2FnaW5nU2VydmljZS5jdXJyZW50VG9rZW47XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gRGVsZXRlIGZyb20gYmFja2VuZCAoZmlyZSBhbmQgZm9yZ2V0KVxuICAgICAgICB0aGlzLmh0dHAucmVxdWVzdCgnREVMRVRFJywgYCR7dGhpcy5jb25maWcuYXBpVXJsfS92Mi91c2Vycy9tZS9kZXZpY2VzL2J5LXRva2VuYCwge1xuICAgICAgICAgIGJvZHk6IHsgdG9rZW4gfVxuICAgICAgICB9KS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKS5zdWJzY3JpYmUoKTtcblxuICAgICAgICAvLyBEZWxldGUgZnJvbSBGQ01cbiAgICAgICAgYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmRlbGV0ZVRva2VuKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVmFsdGVjaEF1dGhdIERldmljZSB1bnJlZ2lzdGVyZWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yYXIgZXJyb3JlcyBlbiBjbGVhbnVwXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdGEgaW5mb3JtYWNpw7NuIGRlIGxhIHBsYXRhZm9ybWEgZGVsIGRpc3Bvc2l0aXZvLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlY3RQbGF0Zm9ybUluZm8oKTogeyBwbGF0Zm9ybTogJ3dlYic7IGJyb3dzZXI6IHN0cmluZzsgb3M6IHN0cmluZyB9IHtcbiAgICBjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgICAvLyBEZXRlY3RhciBuYXZlZ2Fkb3JcbiAgICBsZXQgYnJvd3NlciA9ICdVbmtub3duJztcbiAgICBpZiAodWEuaW5jbHVkZXMoJ0ZpcmVmb3gnKSkge1xuICAgICAgYnJvd3NlciA9ICdGaXJlZm94JztcbiAgICB9IGVsc2UgaWYgKHVhLmluY2x1ZGVzKCdFZGcnKSkge1xuICAgICAgYnJvd3NlciA9ICdFZGdlJztcbiAgICB9IGVsc2UgaWYgKHVhLmluY2x1ZGVzKCdDaHJvbWUnKSkge1xuICAgICAgYnJvd3NlciA9ICdDaHJvbWUnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ1NhZmFyaScpKSB7XG4gICAgICBicm93c2VyID0gJ1NhZmFyaSc7XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0YXIgT1NcbiAgICBsZXQgb3MgPSAnVW5rbm93bic7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdXaW5kb3dzJykpIHtcbiAgICAgIG9zID0gJ1dpbmRvd3MnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ01hYyBPUycpKSB7XG4gICAgICBvcyA9ICdtYWNPUyc7XG4gICAgfSBlbHNlIGlmICh1YS5pbmNsdWRlcygnTGludXgnKSkge1xuICAgICAgb3MgPSAnTGludXgnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ0FuZHJvaWQnKSkge1xuICAgICAgb3MgPSAnQW5kcm9pZCc7XG4gICAgfSBlbHNlIGlmICh1YS5pbmNsdWRlcygnaU9TJykgfHwgdWEuaW5jbHVkZXMoJ2lQaG9uZScpIHx8IHVhLmluY2x1ZGVzKCdpUGFkJykpIHtcbiAgICAgIG9zID0gJ2lPUyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcGxhdGZvcm06ICd3ZWInLCBicm93c2VyLCBvcyB9O1xuICB9XG59XG4iXX0=
@@ -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/OiBNRkFNZXRob2Q7XG59XG5cbi8qKlxuICogRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aEVycm9yIHtcbiAgY29kZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXN0YWRvIGluaWNpYWwgZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX0FVVEhfU1RBVEU6IEF1dGhTdGF0ZSA9IHtcbiAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBhY2Nlc3NUb2tlbjogbnVsbCxcbiAgcmVmcmVzaFRva2VuOiBudWxsLFxuICB1c2VySWQ6IG51bGwsXG4gIGVtYWlsOiBudWxsLFxuICByb2xlczogW10sXG4gIHBlcm1pc3Npb25zOiBbXSxcbiAgaXNTdXBlckFkbWluOiBmYWxzZSxcbiAgZXhwaXJlc0F0OiBudWxsLFxuICBlcnJvcjogbnVsbCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNRkFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBNw6l0b2RvcyBkZSBNRkEgc29wb3J0YWRvcyAqL1xuZXhwb3J0IHR5cGUgTUZBTWV0aG9kID0gJ0VNQUlMJyB8ICdTTVMnO1xuXG4vKipcbiAqIEVzdGFkbyBkZSBNRkEgcGVuZGllbnRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQVBlbmRpbmdTdGF0ZSB7XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICBtZmFUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgbWV0aG9kOiBNRkFNZXRob2QgfCBudWxsO1xufVxuXG4vKipcbiAqIEVzdGFkbyBpbmljaWFsIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfTUZBX1NUQVRFOiBNRkFQZW5kaW5nU3RhdGUgPSB7XG4gIHJlcXVpcmVkOiBmYWxzZSxcbiAgbWZhVG9rZW46IG51bGwsXG4gIG1ldGhvZDogbnVsbCxcbn07XG5cbi8qKlxuICogUmVzdWx0YWRvIGRlIHNldHVwIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTZXR1cFJlc3VsdCB7XG4gIGNvZGVTZW50OiBib29sZWFuO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXN0YWRvIGRlIE1GQSBkZWwgdXN1YXJpby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTdGF0dXMge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBtZXRob2Q6IE1GQU1ldGhvZCB8IG51bGw7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSRVFVRVNUUy9SRVNQT05TRVMgKGFsaW5lYWRvcyBjb24gYmFja2VuZCBBdXRoVjIpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBzaWdudXAgKHJlZ2lzdHJvKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWdudXBSZXF1ZXN0IHtcbiAgZW1haWw6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBwaG9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBzaWdudXAgKHJlZ2lzdHJvKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWdudXBSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIHZlcmlmaWNhciBlbWFpbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgdmVyaWZpY2FjacOzbiBkZSBlbWFpbC5cbiAqIFNpIGVzIGV4aXRvc28sIGluY2x1eWUgdG9rZW5zIHBhcmEgYXV0by1sb2dpbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgdmVyaWZpZWQ6IGJvb2xlYW47XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGZpcmViYXNlVG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNJbj86IG51bWJlcjtcbiAgdG9rZW5UeXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSByZWVudmlhciBjw7NkaWdvIGRlIHZlcmlmaWNhY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZW5kQ29kZVJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICB0eXBlOiAnRU1BSUxfVkVSSUZZJyB8ICdQQVNTV09SRF9SRVNFVCc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgcmVlbnbDrW8gZGUgY8OzZGlnby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNlbmRDb2RlUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBzZW50OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBzaWduaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmluUmVxdWVzdCB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgc2lnbmluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25pblJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgZmlyZWJhc2VUb2tlbj86IHN0cmluZztcbiAgZXhwaXJlc0luPzogbnVtYmVyO1xuICB0b2tlblR5cGU/OiBzdHJpbmc7XG4gIG1mYVJlcXVpcmVkPzogYm9vbGVhbjtcbiAgbWZhVG9rZW4/OiBzdHJpbmc7XG4gIG1mYU1ldGhvZD86IE1GQU1ldGhvZDtcbiAgcm9sZXM/OiBzdHJpbmdbXTtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgdmVyaWZpY2FyIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFWZXJpZnlSZXF1ZXN0IHtcbiAgbWZhVG9rZW46IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHZlcmlmaWNhciBNRkEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUZBVmVyaWZ5UmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgZmlyZWJhc2VUb2tlbj86IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICByb2xlcz86IHN0cmluZ1tdO1xuICBwZXJtaXNzaW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSByZWZyZXNjYXIgdG9rZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlcXVlc3Qge1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSByZWZyZXNjYXIgdG9rZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIGxvZ291dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dvdXRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgbG9nb3V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ291dFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBvYnRlbmVyIHBlcm1pc29zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldFBlcm1pc3Npb25zUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICByb2xlczogc3RyaW5nW107XG4gIHBlcm1pc3Npb25zOiBzdHJpbmdbXTtcbiAgaXNTdXBlckFkbWluOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBzZXR1cCBkZSBNRkEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUZBU2V0dXBSZXF1ZXN0IHtcbiAgbWV0aG9kOiBNRkFNZXRob2Q7XG4gIHBob25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHNldHVwIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTZXR1cFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgY29kZVNlbnQ6IGJvb2xlYW47XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgY29uZmlybWFyIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFDb25maXJtUmVxdWVzdCB7XG4gIGNvZGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBjb25maXJtYXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQUNvbmZpcm1SZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIG1mYUVuYWJsZWQ6IGJvb2xlYW47XG4gIG1ldGhvZDogTUZBTWV0aG9kO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBkZXNoYWJpbGl0YXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQURpc2FibGVSZXF1ZXN0IHtcbiAgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBkZXNoYWJpbGl0YXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQURpc2FibGVSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIG1mYURpc2FibGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBpbmljaWFyIHJlY3VwZXJhY2nDs24gZGUgY29udHJhc2XDsWEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXF1ZXN0IHtcbiAgZW1haWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBmb3Jnb3QgcGFzc3dvcmQgKHNpZW1wcmUgaWd1YWwgcG9yIHNlZ3VyaWRhZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgcmVzZXRlYXIgY29udHJhc2XDsWEgY29uIGPDs2RpZ28uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXRQYXNzd29yZFJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG4gIG5ld1Bhc3N3b3JkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgcmVzZXQgcGFzc3dvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXRQYXNzd29yZFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBvYnRlbmVyIHBlcmZpbCBkZWwgdXN1YXJpby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRQcm9maWxlUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBwaG9uZT86IHN0cmluZztcbiAgZW1haWxWZXJpZmllZDogYm9vbGVhbjtcbiAgcGhvbmVWZXJpZmllZDogYm9vbGVhbjtcbiAgbWZhRW5hYmxlZDogYm9vbGVhbjtcbiAgbWZhTWV0aG9kPzogTUZBTWV0aG9kO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIGFjdHVhbGl6YXIgcGVyZmlsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVByb2ZpbGVSZXF1ZXN0IHtcbiAgbmFtZT86IHN0cmluZztcbiAgcGhvbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgYWN0dWFsaXphciBwZXJmaWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlUHJvZmlsZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgdXBkYXRlZDogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVWRU5UT1MgREUgU0lOQ1JPTklaQUNJw5NOXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU1dJVENIIE9SR0FOSVpBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgY2FtYmlhciBkZSBvcmdhbml6YWNpw7NuIGFjdGl2YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2l0Y2hPcmdSZXF1ZXN0IHtcbiAgb3JnYW5pemF0aW9uSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBjYW1iaW8gZGUgb3JnYW5pemFjacOzbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2l0Y2hPcmdSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGZpcmViYXNlVG9rZW46IHN0cmluZztcbiAgYWN0aXZlT3JnOiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFVkVOVE9TIERFIFNJTkNST05JWkFDScOTTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIFRpcG9zIGRlIGV2ZW50b3MgZGUgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7FhcyAqL1xuZXhwb3J0IHR5cGUgQXV0aFN5bmNFdmVudFR5cGUgPVxuICB8ICdMT0dJTidcbiAgfCAnTE9HT1VUJ1xuICB8ICdUT0tFTl9SRUZSRVNIJ1xuICB8ICdQRVJNSVNTSU9OU19VUERBVEUnXG4gIHwgJ09SR19TV0lUQ0gnO1xuXG4vKipcbiAqIEV2ZW50byBkZSBzaW5jcm9uaXphY2nDs24gZW50cmUgcGVzdGHDsWFzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhTeW5jRXZlbnQge1xuICB0eXBlOiBBdXRoU3luY0V2ZW50VHlwZTtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHBheWxvYWQ/OiB7XG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gICAgZXhwaXJlc0F0PzogbnVtYmVyO1xuICAgIGFjdGl2ZU9yZz86IHN0cmluZztcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEpXVCBDTEFJTVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2xhaW1zIGRlbCBKV1QgZGUgYWNjZXNvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVENsYWltcyB7XG4gIC8qKiBVc2VyIElEICovXG4gIHVpZDogc3RyaW5nO1xuICAvKiogRW1haWwgKi9cbiAgZW1haWw6IHN0cmluZztcbiAgLyoqIFNlc3Npb24gSUQgKi9cbiAgc2lkPzogc3RyaW5nO1xuICAvKiogSXNzdWVkIGF0ICovXG4gIGlhdDogbnVtYmVyO1xuICAvKiogRXhwaXJhdGlvbiAqL1xuICBleHA6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNUT1JBR0Vcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRGF0b3MgcGVyc2lzdGlkb3MgZW4gc3RvcmFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZWRBdXRoU3RhdGUge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgcm9sZXM6IHN0cmluZ1tdO1xuICBwZXJtaXNzaW9uczogc3RyaW5nW107XG4gIGlzU3VwZXJBZG1pbjogYm9vbGVhbjtcbiAgZXhwaXJlc0F0PzogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gREVWSUNFIFJFR0lTVFJBVElPTiAoUHVzaCBOb3RpZmljYXRpb25zKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQbGF0YWZvcm1hcyBzb3BvcnRhZGFzIHBhcmEgcHVzaCBub3RpZmljYXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBEZXZpY2VQbGF0Zm9ybSA9ICd3ZWInIHwgJ2lvcycgfCAnYW5kcm9pZCc7XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIHJlZ2lzdHJhciB1biBkaXNwb3NpdGl2by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckRldmljZVJlcXVlc3Qge1xuICAvKiogRkNNIHRva2VuIGRlbCBkaXNwb3NpdGl2byAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogUGxhdGFmb3JtYSBkZWwgZGlzcG9zaXRpdm8gKi9cbiAgcGxhdGZvcm06IERldmljZVBsYXRmb3JtO1xuICAvKiogTmF2ZWdhZG9yIChzb2xvIHdlYikgKi9cbiAgYnJvd3Nlcj86IHN0cmluZztcbiAgLyoqIFNpc3RlbWEgb3BlcmF0aXZvICovXG4gIG9zPzogc3RyaW5nO1xuICAvKiogVmVyc2nDs24gZGUgbGEgYXBsaWNhY2nDs24gKi9cbiAgYXBwVmVyc2lvbj86IHN0cmluZztcbiAgLyoqIE5vbWJyZSBhbWlnYWJsZSBkZWwgZGlzcG9zaXRpdm8gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIE1ldGFkYXRhIGFkaWNpb25hbCAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgcmVnaXN0cm8gZGUgZGlzcG9zaXRpdm8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJEZXZpY2VSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGRldmljZToge1xuICAgIGRldmljZUlkOiBzdHJpbmc7XG4gICAgdG9rZW46IHN0cmluZztcbiAgICBwbGF0Zm9ybTogRGV2aWNlUGxhdGZvcm07XG4gICAgYnJvd3Nlcj86IHN0cmluZztcbiAgICBvcz86IHN0cmluZztcbiAgICBsYXN0QWN0aXZlOiBzdHJpbmc7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIH07XG4gIC8qKiB0cnVlIHNpIGVzIHVuIG51ZXZvIGRpc3Bvc2l0aXZvLCBmYWxzZSBzaSBzZSBhY3R1YWxpesOzIHVubyBleGlzdGVudGUgKi9cbiAgaXNOZXc6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVzdWx0YWRvIGRlIGhhYmlsaXRhciBub3RpZmljYWNpb25lcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVOb3RpZmljYXRpb25zUmVzdWx0IHtcbiAgLyoqIFNpIHNlIG90b3JnYXJvbiBsb3MgcGVybWlzb3MgKi9cbiAgZ3JhbnRlZDogYm9vbGVhbjtcbiAgLyoqIEZDTSB0b2tlbiAoc29sbyBzaSBncmFudGVkPXRydWUpICovXG4gIHRva2VuPzogc3RyaW5nO1xuICAvKiogU2kgZWwgZGlzcG9zaXRpdm8gZnVlIHJlZ2lzdHJhZG8gZW4gZWwgYmFja2VuZCAqL1xuICByZWdpc3RlcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFc3RhZG8gZGUgcGVybWlzb3MgZGUgbm90aWZpY2FjacOzbi5cbiAqL1xuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlID0gJ2dyYW50ZWQnIHwgJ2RlbmllZCcgfCAnZGVmYXVsdCcgfCAndW5zdXBwb3J0ZWQnO1xuIl19
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2F1dGgvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBdUZIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWM7SUFDM0MsZUFBZSxFQUFFLEtBQUs7SUFDdEIsU0FBUyxFQUFFLElBQUk7SUFDZixXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsSUFBSTtJQUNsQixNQUFNLEVBQUUsSUFBSTtJQUNaLEtBQUssRUFBRSxJQUFJO0lBQ1gsS0FBSyxFQUFFLEVBQUU7SUFDVCxXQUFXLEVBQUUsRUFBRTtJQUNmLFlBQVksRUFBRSxLQUFLO0lBQ25CLFNBQVMsRUFBRSxJQUFJO0lBQ2YsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBa0JGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQW9CO0lBQ2hELFFBQVEsRUFBRSxLQUFLO0lBQ2YsUUFBUSxFQUFFLElBQUk7SUFDZCxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRpcG9zIGUgaW50ZXJmYWNlcyBwYXJhIGVsIHNlcnZpY2lvIGRlIGF1dGVudGljYWNpw7NuIGRlIFZhbHRlY2guXG4gKiBBbGluZWFkb3MgY29uIGVsIGJhY2tlbmQgQXV0aFYyLlxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05GSUdVUkFDScOTTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb25maWd1cmFjacOzbiBwYXJhIGVsIHNlcnZpY2lvIGRlIGF1dGVudGljYWNpw7NuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbHRlY2hBdXRoQ29uZmlnIHtcbiAgLyoqIFVSTCBiYXNlIGRlIGxhIEFQSSAoZWo6ICdodHRwczovL2FwaS5teXZhbHRlY2guY29tJykgKi9cbiAgYXBpVXJsOiBzdHJpbmc7XG4gIC8qKiBQcmVmaWpvIHBhcmEgZW5kcG9pbnRzIGRlIGF1dGggKGRlZmF1bHQ6ICcvdjIvYXV0aCcpICovXG4gIGF1dGhQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiBQcmVmaWpvIHBhcmEgbGFzIGNsYXZlcyBkZSBsb2NhbFN0b3JhZ2UgKGRlZmF1bHQ6ICd2YWx0ZWNoX2F1dGhfJykgKi9cbiAgc3RvcmFnZVByZWZpeD86IHN0cmluZztcbiAgLyoqIFRpZW1wbyBhbnRlcyBkZSBleHBpcmFjacOzbiBwYXJhIHJlZnJlc2NhciB0b2tlbiBlbiBzZWd1bmRvcyAoZGVmYXVsdDogNjApICovXG4gIHJlZnJlc2hCZWZvcmVFeHBpcnk/OiBudW1iZXI7XG4gIC8qKiBIYWJpbGl0YXIgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7FhcyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlVGFiU3luYz86IGJvb2xlYW47XG4gIC8qKiBSdXRhIGRlIHJlZGlyZWNjacOzbiBjdWFuZG8gbm8gYXV0ZW50aWNhZG8gKGRlZmF1bHQ6ICcvbG9naW4nKSAqL1xuICBsb2dpblJvdXRlPzogc3RyaW5nO1xuICAvKiogUnV0YSBkZSByZWRpcmVjY2nDs24gY3VhbmRvIHlhIGF1dGVudGljYWRvIChkZWZhdWx0OiAnLycpICovXG4gIGhvbWVSb3V0ZT86IHN0cmluZztcbiAgLyoqIFJ1dGEgcGFyYSBhY2Nlc28gZGVuZWdhZG8gKGRlZmF1bHQ6ICcvdW5hdXRob3JpemVkJykgKi9cbiAgdW5hdXRob3JpemVkUm91dGU/OiBzdHJpbmc7XG4gIC8qKiBIYWJpbGl0YXIgaW50ZWdyYWNpw7NuIGNvbiBGaXJlYmFzZVNlcnZpY2UgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBlbmFibGVGaXJlYmFzZUludGVncmF0aW9uPzogYm9vbGVhbjtcbiAgLyoqIEhhYmlsaXRhciByZWdpc3RybyBhdXRvbcOhdGljbyBkZSBkZXZpY2UgdG9rZW5zIHBhcmEgcHVzaCBub3RpZmljYXRpb25zIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgZW5hYmxlRGV2aWNlUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVTVEFETyBERSBBVVRFTlRJQ0FDScOTTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFc3RhZG8gY29tcGxldG8gZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFN0YXRlIHtcbiAgLyoqIFVzdWFyaW8gZXN0w6EgYXV0ZW50aWNhZG8gKi9cbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAvKiogRXN0YWRvIGRlIGNhcmdhIGluaWNpYWwgKi9cbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAvKiogVG9rZW4gZGUgYWNjZXNvIGFjdHVhbCAqL1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRva2VuIGRlIHJlZnJlc2NvIGFjdHVhbCAqL1xuICByZWZyZXNoVG9rZW46IHN0cmluZyB8IG51bGw7XG4gIC8qKiBJRCBkZWwgdXN1YXJpbyAqL1xuICB1c2VySWQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBFbWFpbCBkZWwgdXN1YXJpbyAqL1xuICBlbWFpbDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFJvbGVzIGRlbCB1c3VhcmlvICovXG4gIHJvbGVzOiBzdHJpbmdbXTtcbiAgLyoqIFBlcm1pc29zIGRlbCB1c3VhcmlvIChmb3JtYXRvICdyZXNvdXJjZTphY3Rpb24nKSAqL1xuICBwZXJtaXNzaW9uczogc3RyaW5nW107XG4gIC8qKiBVc3VhcmlvIGVzIHN1cGVyIGFkbWluICovXG4gIGlzU3VwZXJBZG1pbjogYm9vbGVhbjtcbiAgLyoqIFRpbWVzdGFtcCBkZSBleHBpcmFjacOzbiBkZWwgYWNjZXNzVG9rZW4gKG1zKSAqL1xuICBleHBpcmVzQXQ6IG51bWJlciB8IG51bGw7XG4gIC8qKiBFcnJvciBkZSBhdXRlbnRpY2FjacOzbiAoc2kgZXhpc3RlKSAqL1xuICBlcnJvcjogQXV0aEVycm9yIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBJbmZvcm1hY2nDs24gZGVsIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFVzZXIge1xuICB1c2VySWQ6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcGhvbmU/OiBzdHJpbmc7XG4gIHJvbGVzOiBzdHJpbmdbXTtcbiAgcGVybWlzc2lvbnM6IHN0cmluZ1tdO1xuICBpc1N1cGVyQWRtaW46IGJvb2xlYW47XG4gIG1mYUVuYWJsZWQ/OiBib29sZWFuO1xuICBtZmFNZXRob2Q/OiBNRkFNZXRob2Q7XG59XG5cbi8qKlxuICogRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aEVycm9yIHtcbiAgY29kZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXN0YWRvIGluaWNpYWwgZGUgYXV0ZW50aWNhY2nDs24uXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX0FVVEhfU1RBVEU6IEF1dGhTdGF0ZSA9IHtcbiAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBhY2Nlc3NUb2tlbjogbnVsbCxcbiAgcmVmcmVzaFRva2VuOiBudWxsLFxuICB1c2VySWQ6IG51bGwsXG4gIGVtYWlsOiBudWxsLFxuICByb2xlczogW10sXG4gIHBlcm1pc3Npb25zOiBbXSxcbiAgaXNTdXBlckFkbWluOiBmYWxzZSxcbiAgZXhwaXJlc0F0OiBudWxsLFxuICBlcnJvcjogbnVsbCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNRkFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBNw6l0b2RvcyBkZSBNRkEgc29wb3J0YWRvcyAqL1xuZXhwb3J0IHR5cGUgTUZBTWV0aG9kID0gJ0VNQUlMJyB8ICdTTVMnO1xuXG4vKipcbiAqIEVzdGFkbyBkZSBNRkEgcGVuZGllbnRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQVBlbmRpbmdTdGF0ZSB7XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICBtZmFUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgbWV0aG9kOiBNRkFNZXRob2QgfCBudWxsO1xufVxuXG4vKipcbiAqIEVzdGFkbyBpbmljaWFsIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfTUZBX1NUQVRFOiBNRkFQZW5kaW5nU3RhdGUgPSB7XG4gIHJlcXVpcmVkOiBmYWxzZSxcbiAgbWZhVG9rZW46IG51bGwsXG4gIG1ldGhvZDogbnVsbCxcbn07XG5cbi8qKlxuICogUmVzdWx0YWRvIGRlIHNldHVwIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTZXR1cFJlc3VsdCB7XG4gIGNvZGVTZW50OiBib29sZWFuO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXN0YWRvIGRlIE1GQSBkZWwgdXN1YXJpby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTdGF0dXMge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBtZXRob2Q6IE1GQU1ldGhvZCB8IG51bGw7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSRVFVRVNUUy9SRVNQT05TRVMgKGFsaW5lYWRvcyBjb24gYmFja2VuZCBBdXRoVjIpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBzaWdudXAgKHJlZ2lzdHJvKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWdudXBSZXF1ZXN0IHtcbiAgZW1haWw6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBwaG9uZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBzaWdudXAgKHJlZ2lzdHJvKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWdudXBSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIHZlcmlmaWNhciBlbWFpbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgdmVyaWZpY2FjacOzbiBkZSBlbWFpbC5cbiAqIFNpIGVzIGV4aXRvc28sIGluY2x1eWUgdG9rZW5zIHBhcmEgYXV0by1sb2dpbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgdmVyaWZpZWQ6IGJvb2xlYW47XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGZpcmViYXNlVG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNJbj86IG51bWJlcjtcbiAgdG9rZW5UeXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSByZWVudmlhciBjw7NkaWdvIGRlIHZlcmlmaWNhY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZW5kQ29kZVJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICB0eXBlOiAnRU1BSUxfVkVSSUZZJyB8ICdQQVNTV09SRF9SRVNFVCc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgcmVlbnbDrW8gZGUgY8OzZGlnby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNlbmRDb2RlUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBzZW50OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBzaWduaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmluUmVxdWVzdCB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgc2lnbmluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25pblJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgZmlyZWJhc2VUb2tlbj86IHN0cmluZztcbiAgZXhwaXJlc0luPzogbnVtYmVyO1xuICB0b2tlblR5cGU/OiBzdHJpbmc7XG4gIG1mYVJlcXVpcmVkPzogYm9vbGVhbjtcbiAgbWZhVG9rZW4/OiBzdHJpbmc7XG4gIG1mYU1ldGhvZD86IE1GQU1ldGhvZDtcbiAgcm9sZXM/OiBzdHJpbmdbXTtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgdmVyaWZpY2FyIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFWZXJpZnlSZXF1ZXN0IHtcbiAgbWZhVG9rZW46IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHZlcmlmaWNhciBNRkEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUZBVmVyaWZ5UmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgZmlyZWJhc2VUb2tlbj86IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICByb2xlcz86IHN0cmluZ1tdO1xuICBwZXJtaXNzaW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSByZWZyZXNjYXIgdG9rZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlcXVlc3Qge1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSByZWZyZXNjYXIgdG9rZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIGxvZ291dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dvdXRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgbG9nb3V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ291dFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBvYnRlbmVyIHBlcm1pc29zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldFBlcm1pc3Npb25zUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICByb2xlczogc3RyaW5nW107XG4gIHBlcm1pc3Npb25zOiBzdHJpbmdbXTtcbiAgaXNTdXBlckFkbWluOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBzZXR1cCBkZSBNRkEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUZBU2V0dXBSZXF1ZXN0IHtcbiAgbWV0aG9kOiBNRkFNZXRob2Q7XG4gIHBob25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRlIHNldHVwIGRlIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFTZXR1cFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgY29kZVNlbnQ6IGJvb2xlYW47XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgY29uZmlybWFyIE1GQS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNRkFDb25maXJtUmVxdWVzdCB7XG4gIGNvZGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBjb25maXJtYXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQUNvbmZpcm1SZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIG1mYUVuYWJsZWQ6IGJvb2xlYW47XG4gIG1ldGhvZDogTUZBTWV0aG9kO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBkZXNoYWJpbGl0YXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQURpc2FibGVSZXF1ZXN0IHtcbiAgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBkZXNoYWJpbGl0YXIgTUZBLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1GQURpc2FibGVSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIG1mYURpc2FibGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgcGFyYSBpbmljaWFyIHJlY3VwZXJhY2nDs24gZGUgY29udHJhc2XDsWEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXF1ZXN0IHtcbiAgZW1haWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBmb3Jnb3QgcGFzc3dvcmQgKHNpZW1wcmUgaWd1YWwgcG9yIHNlZ3VyaWRhZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgcmVzZXRlYXIgY29udHJhc2XDsWEgY29uIGPDs2RpZ28uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXRQYXNzd29yZFJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG4gIG5ld1Bhc3N3b3JkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgcmVzZXQgcGFzc3dvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXRQYXNzd29yZFJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBvYnRlbmVyIHBlcmZpbCBkZWwgdXN1YXJpby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRQcm9maWxlUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBwaG9uZT86IHN0cmluZztcbiAgZW1haWxWZXJpZmllZDogYm9vbGVhbjtcbiAgcGhvbmVWZXJpZmllZDogYm9vbGVhbjtcbiAgbWZhRW5hYmxlZDogYm9vbGVhbjtcbiAgbWZhTWV0aG9kPzogTUZBTWV0aG9kO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIGFjdHVhbGl6YXIgcGVyZmlsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVByb2ZpbGVSZXF1ZXN0IHtcbiAgbmFtZT86IHN0cmluZztcbiAgcGhvbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgYWN0dWFsaXphciBwZXJmaWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlUHJvZmlsZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgdXBkYXRlZDogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVWRU5UT1MgREUgU0lOQ1JPTklaQUNJw5NOXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU1dJVENIIE9SR0FOSVpBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBSZXF1ZXN0IHBhcmEgY2FtYmlhciBkZSBvcmdhbml6YWNpw7NuIGFjdGl2YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2l0Y2hPcmdSZXF1ZXN0IHtcbiAgb3JnYW5pemF0aW9uSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBkZSBjYW1iaW8gZGUgb3JnYW5pemFjacOzbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTd2l0Y2hPcmdSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGZpcmViYXNlVG9rZW46IHN0cmluZztcbiAgYWN0aXZlT3JnOiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFVkVOVE9TIERFIFNJTkNST05JWkFDScOTTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIFRpcG9zIGRlIGV2ZW50b3MgZGUgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7FhcyAqL1xuZXhwb3J0IHR5cGUgQXV0aFN5bmNFdmVudFR5cGUgPVxuICB8ICdMT0dJTidcbiAgfCAnTE9HT1VUJ1xuICB8ICdUT0tFTl9SRUZSRVNIJ1xuICB8ICdQRVJNSVNTSU9OU19VUERBVEUnXG4gIHwgJ09SR19TV0lUQ0gnO1xuXG4vKipcbiAqIEV2ZW50byBkZSBzaW5jcm9uaXphY2nDs24gZW50cmUgcGVzdGHDsWFzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhTeW5jRXZlbnQge1xuICB0eXBlOiBBdXRoU3luY0V2ZW50VHlwZTtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHBheWxvYWQ/OiB7XG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gICAgZXhwaXJlc0F0PzogbnVtYmVyO1xuICAgIGFjdGl2ZU9yZz86IHN0cmluZztcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEpXVCBDTEFJTVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2xhaW1zIGRlbCBKV1QgZGUgYWNjZXNvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVENsYWltcyB7XG4gIC8qKiBVc2VyIElEICovXG4gIHVpZDogc3RyaW5nO1xuICAvKiogRW1haWwgKi9cbiAgZW1haWw6IHN0cmluZztcbiAgLyoqIFNlc3Npb24gSUQgKi9cbiAgc2lkPzogc3RyaW5nO1xuICAvKiogSXNzdWVkIGF0ICovXG4gIGlhdDogbnVtYmVyO1xuICAvKiogRXhwaXJhdGlvbiAqL1xuICBleHA6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNUT1JBR0Vcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRGF0b3MgcGVyc2lzdGlkb3MgZW4gc3RvcmFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZWRBdXRoU3RhdGUge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgcm9sZXM6IHN0cmluZ1tdO1xuICBwZXJtaXNzaW9uczogc3RyaW5nW107XG4gIGlzU3VwZXJBZG1pbjogYm9vbGVhbjtcbiAgZXhwaXJlc0F0PzogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gREVWSUNFIFJFR0lTVFJBVElPTiAoUHVzaCBOb3RpZmljYXRpb25zKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQbGF0YWZvcm1hcyBzb3BvcnRhZGFzIHBhcmEgcHVzaCBub3RpZmljYXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBEZXZpY2VQbGF0Zm9ybSA9ICd3ZWInIHwgJ2lvcycgfCAnYW5kcm9pZCc7XG5cbi8qKlxuICogUmVxdWVzdCBwYXJhIHJlZ2lzdHJhciB1biBkaXNwb3NpdGl2by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckRldmljZVJlcXVlc3Qge1xuICAvKiogRkNNIHRva2VuIGRlbCBkaXNwb3NpdGl2byAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogUGxhdGFmb3JtYSBkZWwgZGlzcG9zaXRpdm8gKi9cbiAgcGxhdGZvcm06IERldmljZVBsYXRmb3JtO1xuICAvKiogTmF2ZWdhZG9yIChzb2xvIHdlYikgKi9cbiAgYnJvd3Nlcj86IHN0cmluZztcbiAgLyoqIFNpc3RlbWEgb3BlcmF0aXZvICovXG4gIG9zPzogc3RyaW5nO1xuICAvKiogVmVyc2nDs24gZGUgbGEgYXBsaWNhY2nDs24gKi9cbiAgYXBwVmVyc2lvbj86IHN0cmluZztcbiAgLyoqIE5vbWJyZSBhbWlnYWJsZSBkZWwgZGlzcG9zaXRpdm8gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIE1ldGFkYXRhIGFkaWNpb25hbCAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZGUgcmVnaXN0cm8gZGUgZGlzcG9zaXRpdm8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJEZXZpY2VSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGRldmljZToge1xuICAgIGRldmljZUlkOiBzdHJpbmc7XG4gICAgdG9rZW46IHN0cmluZztcbiAgICBwbGF0Zm9ybTogRGV2aWNlUGxhdGZvcm07XG4gICAgYnJvd3Nlcj86IHN0cmluZztcbiAgICBvcz86IHN0cmluZztcbiAgICBsYXN0QWN0aXZlOiBzdHJpbmc7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIH07XG4gIC8qKiB0cnVlIHNpIGVzIHVuIG51ZXZvIGRpc3Bvc2l0aXZvLCBmYWxzZSBzaSBzZSBhY3R1YWxpesOzIHVubyBleGlzdGVudGUgKi9cbiAgaXNOZXc6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVzdWx0YWRvIGRlIGhhYmlsaXRhciBub3RpZmljYWNpb25lcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVOb3RpZmljYXRpb25zUmVzdWx0IHtcbiAgLyoqIFNpIHNlIG90b3JnYXJvbiBsb3MgcGVybWlzb3MgKi9cbiAgZ3JhbnRlZDogYm9vbGVhbjtcbiAgLyoqIEZDTSB0b2tlbiAoc29sbyBzaSBncmFudGVkPXRydWUpICovXG4gIHRva2VuPzogc3RyaW5nO1xuICAvKiogU2kgZWwgZGlzcG9zaXRpdm8gZnVlIHJlZ2lzdHJhZG8gZW4gZWwgYmFja2VuZCAqL1xuICByZWdpc3RlcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFc3RhZG8gZGUgcGVybWlzb3MgZGUgbm90aWZpY2FjacOzbi5cbiAqL1xuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlID0gJ2dyYW50ZWQnIHwgJ2RlbmllZCcgfCAnZGVmYXVsdCcgfCAndW5zdXBwb3J0ZWQnO1xuXG4vKipcbiAqIFJlc3VsdGFkbyBkZWwgcmVnaXN0cm8gbWFudWFsIGRlIGRpc3Bvc2l0aXZvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRGV2aWNlUmVzdWx0IHtcbiAgLyoqIFNpIGVsIGRpc3Bvc2l0aXZvIGZ1ZSByZWdpc3RyYWRvIGV4aXRvc2FtZW50ZSAqL1xuICByZWdpc3RlcmVkOiBib29sZWFuO1xuICAvKiogSUQgZGVsIGRpc3Bvc2l0aXZvIChzb2xvIHNpIHJlZ2lzdGVyZWQ9dHJ1ZSkgKi9cbiAgZGV2aWNlSWQ/OiBzdHJpbmc7XG4gIC8qKiBGQ00gdG9rZW4gdXNhZG8gcGFyYSBlbCByZWdpc3RybyAqL1xuICB0b2tlbj86IHN0cmluZztcbiAgLyoqIE1lbnNhamUgZGUgZXJyb3IgKHNvbG8gc2kgcmVnaXN0ZXJlZD1mYWxzZSkgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG59XG4iXX0=
@@ -25307,6 +25307,61 @@ class AuthService {
25307
25307
  }
25308
25308
  return this.messagingService.getPermissionState();
25309
25309
  }
25310
+ /**
25311
+ * Registra manualmente el dispositivo en el backend.
25312
+ * Útil para sincronizar dispositivos que tienen token FCM pero no están registrados.
25313
+ *
25314
+ * @returns Resultado del registro con deviceId si fue exitoso
25315
+ *
25316
+ * @example
25317
+ * ```typescript
25318
+ * // Sincronizar dispositivo manualmente
25319
+ * const result = await this.auth.registerDevice();
25320
+ * if (result.registered) {
25321
+ * console.log('Dispositivo registrado:', result.deviceId);
25322
+ * }
25323
+ * ```
25324
+ */
25325
+ async registerDevice() {
25326
+ if (!this.messagingService) {
25327
+ return { registered: false, error: 'MessagingService no disponible' };
25328
+ }
25329
+ if (!this.isAuthenticated()) {
25330
+ return { registered: false, error: 'Usuario no autenticado' };
25331
+ }
25332
+ try {
25333
+ // Verificar permisos primero (no depende del Injector de Messaging)
25334
+ const permission = this.messagingService.getPermissionState();
25335
+ if (permission !== 'granted') {
25336
+ return { registered: false, error: 'Permiso de notificaciones no otorgado' };
25337
+ }
25338
+ // Intentar usar token existente primero (evita problemas de timing con Injector)
25339
+ let token = this.messagingService.currentToken;
25340
+ // Si no hay token existente, intentar obtener uno nuevo
25341
+ if (!token) {
25342
+ // Solo verificar isSupported si necesitamos obtener nuevo token
25343
+ if (!await this.messagingService.isSupported()) {
25344
+ return { registered: false, error: 'FCM no soportado en este navegador' };
25345
+ }
25346
+ token = await this.messagingService.getToken();
25347
+ }
25348
+ if (!token) {
25349
+ return { registered: false, error: 'No se pudo obtener token FCM' };
25350
+ }
25351
+ // Registrar en backend
25352
+ const { platform, browser, os } = this.detectPlatformInfo();
25353
+ const response = await firstValueFrom(this.http.post(`${this.config.apiUrl}/v2/users/me/devices`, { token, platform, browser, os }));
25354
+ console.log('[ValtechAuth] Device registered manually:', response.device.deviceId);
25355
+ return { registered: true, deviceId: response.device.deviceId, token };
25356
+ }
25357
+ catch (error) {
25358
+ console.warn('[ValtechAuth] Manual device registration failed:', error);
25359
+ return {
25360
+ registered: false,
25361
+ error: error?.error?.message || error?.message || 'Error al registrar dispositivo'
25362
+ };
25363
+ }
25364
+ }
25310
25365
  /**
25311
25366
  * Registra el dispositivo en el backend si tiene permisos de notificación.
25312
25367
  * Se llama automáticamente después de un login exitoso si enableDeviceRegistration=true.