valtech-components 2.0.825 → 2.0.827

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.
@@ -97,6 +97,7 @@ export class FirebaseService {
97
97
  // true al haber User, false en signout. Permite que los gates
98
98
  // re-evalúen tras un logout/login dentro de la misma sesión de página.
99
99
  this._firebaseAuthReady.set(!!user);
100
+ console.log(`[FBAuth] authState emit user=${user?.uid ?? 'null'} firebaseAuthReady=${!!user}`);
100
101
  this.sessionState.next({
101
102
  user: user ? this.mapUser(user) : null,
102
103
  isAuthenticated: !!user,
@@ -106,6 +107,7 @@ export class FirebaseService {
106
107
  },
107
108
  error: error => {
108
109
  this._firebaseAuthReady.set(false);
110
+ console.error(`[FBAuth] authState ERROR: ${error instanceof Error ? error.message : String(error)}`);
109
111
  this.sessionState.next({
110
112
  user: null,
111
113
  isAuthenticated: false,
@@ -124,9 +126,14 @@ export class FirebaseService {
124
126
  */
125
127
  whenFirebaseAuthReady() {
126
128
  if (this._firebaseAuthReady()) {
129
+ console.log('[FBAuth] whenFirebaseAuthReady resolved immediately (already ready)');
127
130
  return Promise.resolve(true);
128
131
  }
129
- return firstValueFrom(this.firebaseAuthReady$);
132
+ console.log('[FBAuth] whenFirebaseAuthReady waiting for Firebase Auth session...');
133
+ return firstValueFrom(this.firebaseAuthReady$).then(v => {
134
+ console.log('[FBAuth] whenFirebaseAuthReady resolved after wait');
135
+ return v;
136
+ });
130
137
  }
131
138
  // ===========================================================================
132
139
  // AUTENTICACIÓN
@@ -146,6 +153,7 @@ export class FirebaseService {
146
153
  * ```
147
154
  */
148
155
  async signInWithCustomToken(token) {
156
+ console.log(`[FBAuth] signInWithCustomToken called tokenLen=${token?.length ?? 0}`);
149
157
  try {
150
158
  const credential = await signInWithCustomToken(this.auth, token);
151
159
  // Forzar refresh del token para asegurar que los claims estén actualizados
@@ -153,10 +161,12 @@ export class FirebaseService {
153
161
  if (credential.user) {
154
162
  await credential.user.getIdToken(true);
155
163
  }
164
+ console.log(`[FBAuth] signInWithCustomToken OK uid=${credential.user?.uid ?? 'null'}`);
156
165
  return credential;
157
166
  }
158
167
  catch (error) {
159
168
  const message = this.getErrorMessage(error);
169
+ console.error(`[FBAuth] signInWithCustomToken FAILED: ${message}`);
160
170
  throw new Error(message);
161
171
  }
162
172
  }
@@ -503,4 +513,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
503
513
  type: Inject,
504
514
  args: [VALTECH_FIREBASE_CONFIG]
505
515
  }] }] });
506
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZmlyZWJhc2UvZmlyZWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUVMLFNBQVMsRUFDVCxxQkFBcUIsRUFDckIsT0FBTyxHQUdSLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLGNBQWMsRUFDZCxHQUFHLEVBRUgsSUFBSSxHQUNMLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFTbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsTUFBTSxPQUFPLGVBQWU7SUF5RDFCLFlBQ1UsSUFBVSxFQUN1QixNQUE2QjtRQUQ5RCxTQUFJLEdBQUosSUFBSSxDQUFNO1FBQ3VCLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBMUR4RSxrQ0FBa0M7UUFDMUIsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBZTtZQUN2RCxJQUFJLEVBQUUsSUFBSTtZQUNWLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7UUFFSCxpREFBaUQ7UUFDeEMsV0FBTSxHQUE2QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBUTdFOzs7O1dBSUc7UUFDYyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBb0JHO1FBQ00sc0JBQWlCLEdBQW9CLElBQUks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QUksQ0FBQyxXQUFXO1lBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssZUFBZSxDQUFDLEtBQWM7UUFDcEMsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEdBQUksS0FBMkIsQ0FBQyxJQUFJLENBQUM7WUFFL0MsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFDYixLQUFLLDJCQUEyQjtvQkFDOUIsT0FBTyxpQ0FBaUMsQ0FBQztnQkFDM0MsS0FBSyw0QkFBNEI7b0JBQy9CLE9BQU8seUNBQXlDLENBQUM7Z0JBQ25ELEtBQUssNkJBQTZCO29CQUNoQyxPQUFPLG9EQUFvRCxDQUFDO2dCQUM5RCxLQUFLLHdCQUF3QjtvQkFDM0IsT0FBTyxpREFBaUQsQ0FBQztnQkFDM0QsS0FBSyxvQkFBb0I7b0JBQ3ZCLE9BQU8sbUNBQW1DLENBQUM7Z0JBQzdDLEtBQUsscUJBQXFCO29CQUN4QixPQUFPLHVCQUF1QixDQUFDO2dCQUNqQztvQkFDRSxPQUFPLEtBQUssQ0FBQyxPQUFPLElBQUksb0NBQW9DLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLG9DQUFvQyxDQUFDO0lBQzlDLENBQUM7K0dBM2dCVSxlQUFlLHNDQTJEaEIsdUJBQXVCO21IQTNEdEIsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBNEQ3QixNQUFNOzJCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlyZWJhc2UgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIHByaW5jaXBhbCBwYXJhIGxhIGF1dGVudGljYWNpw7NuIGNvbiBGaXJlYmFzZSB1c2FuZG8gQ3VzdG9tIFRva2Vucy5cbiAqIFBlcm1pdGUgcXVlIHVzdWFyaW9zIGF1dGVudGljYWRvcyBjb24gdHUgYmFja2VuZCAoQ29nbml0bywgZXRjLikgYWNjZWRhblxuICogYSBzZXJ2aWNpb3MgZGUgRmlyZWJhc2UgKEZpcmVzdG9yZSwgU3RvcmFnZSwgRkNNKSBkZSBtYW5lcmEgc2VndXJhLlxuICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEF1dGgsXG4gIGF1dGhTdGF0ZSxcbiAgc2lnbkluV2l0aEN1c3RvbVRva2VuLFxuICBzaWduT3V0LFxuICBVc2VyLFxuICBVc2VyQ3JlZGVudGlhbCxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9hdXRoJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZmlyc3RWYWx1ZUZyb20sXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgRmlyZWJhc2VVc2VyLFxuICBNZW1iZXJzaGlwSW5mbyxcbiAgT3JnYW5pemF0aW9uSW5mbyxcbiAgU2Vzc2lvblN0YXRlLFxuICBWYWx0ZWNoRmlyZWJhc2VDb25maWcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIGRlIGF1dGVudGljYWNpw7NuIGRlIEZpcmViYXNlLlxuICpcbiAqIEVzdGUgc2VydmljaW8gTk8gbWFuZWphIGVsIGxvZ2luIGRlIHVzdWFyaW9zIGRpcmVjdGFtZW50ZS5cbiAqIEVuIHN1IGx1Z2FyLCB0cmFiYWphIGNvbiBDdXN0b20gVG9rZW5zIGdlbmVyYWRvcyBwb3IgdHUgYmFja2VuZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRGVzcHXDqXMgZGUgYXV0ZW50aWNhcnRlIGNvbiB0dSBiYWNrZW5kIChlajogQ29nbml0bylcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQge1xuICogICBwcml2YXRlIGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTsgICAgIC8vIFR1IHNlcnZpY2lvIGRlIGF1dGhcbiAqICAgcHJpdmF0ZSBmaXJlYmFzZSA9IGluamVjdChGaXJlYmFzZVNlcnZpY2UpOyAgICAvLyBFc3RlIHNlcnZpY2lvXG4gKlxuICogICBhc3luYyBsb2dpbihlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSB7XG4gKiAgICAgLy8gMS4gQXV0ZW50aWNhciBjb24gdHUgYmFja2VuZFxuICogICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hdXRoU2VydmljZS5sb2dpbihlbWFpbCwgcGFzc3dvcmQpO1xuICpcbiAqICAgICAvLyAyLiBFbCBiYWNrZW5kIGRldnVlbHZlIHVuIEZpcmViYXNlIEN1c3RvbSBUb2tlblxuICogICAgIGlmIChyZXNwb25zZS5maXJlYmFzZVRva2VuKSB7XG4gKiAgICAgICBhd2FpdCB0aGlzLmZpcmViYXNlLnNpZ25JbldpdGhDdXN0b21Ub2tlbihyZXNwb25zZS5maXJlYmFzZVRva2VuKTtcbiAqICAgICB9XG4gKlxuICogICAgIC8vIEFob3JhIGVsIHVzdWFyaW8gcHVlZGUgYWNjZWRlciBhIEZpcmVzdG9yZSwgU3RvcmFnZSwgZXRjLlxuICogICB9XG4gKlxuICogICBhc3luYyBsb2dvdXQoKSB7XG4gKiAgICAgYXdhaXQgdGhpcy5hdXRoU2VydmljZS5sb2dvdXQoKTtcbiAqICAgICBhd2FpdCB0aGlzLmZpcmViYXNlLnNpZ25PdXQoKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRmlyZWJhc2VTZXJ2aWNlIHtcbiAgLyoqIEVzdGFkbyBpbnRlcm5vIGRlIGxhIHNlc2nDs24gKi9cbiAgcHJpdmF0ZSBzZXNzaW9uU3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlc3Npb25TdGF0ZT4oe1xuICAgIHVzZXI6IG51bGwsXG4gICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgZXJyb3I6IG51bGwsXG4gIH0pO1xuXG4gIC8qKiBFc3RhZG8gYWN0dWFsIGRlIGxhIHNlc2nDs24gY29tbyBPYnNlcnZhYmxlICovXG4gIHJlYWRvbmx5IHN0YXRlJDogT2JzZXJ2YWJsZTxTZXNzaW9uU3RhdGU+ID0gdGhpcy5zZXNzaW9uU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqIFVzdWFyaW8gYWN0dWFsIGRlIEZpcmViYXNlIGNvbW8gT2JzZXJ2YWJsZSAqL1xuICByZWFkb25seSB1c2VyJDogT2JzZXJ2YWJsZTxGaXJlYmFzZVVzZXIgfCBudWxsPjtcblxuICAvKiogSW5kaWNhIHNpIGVsIHVzdWFyaW8gZXN0w6EgYXV0ZW50aWNhZG8gZW4gRmlyZWJhc2UgKi9cbiAgcmVhZG9ubHkgaXNBdXRoZW50aWNhdGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAvKipcbiAgICogU2lnbmFsIGludGVybmEgcXVlIHJlc3BhbGRhIGBmaXJlYmFzZUF1dGhSZWFkeWAuXG4gICAqIGB0cnVlYCBjdWFuZG8gaGF5IHVuIGBmaXJlYmFzZS5Vc2VyYCBhY3Rpdm8geSBwb3IgdGFudG8gbGFzIHJlZ2xhcyBkZVxuICAgKiBGaXJlc3RvcmUgZXZhbHVhcsOhbiBgcmVxdWVzdC5hdXRoICE9IG51bGxgIGNvcnJlY3RhbWVudGUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9maXJlYmFzZUF1dGhSZWFkeSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIEluZGljYSBzaSBsYSBzZXNpw7NuIGRlICoqRmlyZWJhc2UgQXV0aCoqIGVzdMOhIGVzdGFibGVjaWRhIHkgbGlzdGEgcGFyYVxuICAgKiBsZWVyIEZpcmVzdG9yZS5cbiAgICpcbiAgICogSU1QT1JUQU5URTogZXN0byBlcyBkaXN0aW50byBkZWwgSldUIGRlbCBiYWNrZW5kLiBMYSBzZXNpw7NuIGRlIEZpcmViYXNlXG4gICAqIEF1dGggZXMgdW5hIHNlc2nDs24gc2VwYXJhZGEgcXVlIHNlIGVzdGFibGVjZSB2w61hIGBzaWduSW5XaXRoQ3VzdG9tVG9rZW5gXG4gICAqICh2ZXIgYEF1dGhTZXJ2aWNlLnNpZ25JbldpdGhGaXJlYmFzZWApLiBFbiBjb2xkIHN0YXJ0IGRlIFBXQSwgZWwgSldUIGRlbFxuICAgKiBiYWNrZW5kIHB1ZWRlIGVzdGFyIGxpc3RvIHZhcmlvcyBjaWVudG9zIGRlIG1zIGFudGVzIGRlIHF1ZSBGaXJlYmFzZSBBdXRoXG4gICAqIGNvbmZpcm1lIHN1IGBVc2VyYCDigJQgYWRqdW50YXIgdW4gbGlzdGVuZXIgZGUgRmlyZXN0b3JlIGVuIGVzYSB2ZW50YW5hXG4gICAqIHByb2R1Y2UgYHBlcm1pc3Npb24tZGVuaWVkYC5cbiAgICpcbiAgICogVXNhciBlc3RlIHNpZ25hbCAobyBgd2hlbkZpcmViYXNlQXV0aFJlYWR5KClgKSBjb21vIGdhdGUgYW50ZXMgZGVcbiAgICogc3VzY3JpYmlyc2UgYSBjdWFscXVpZXIgcXVlcnkvbGlzdGVuZXIgZGUgRmlyZXN0b3JlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGlmICh0aGlzLmZpcmViYXNlLmZpcmViYXNlQXV0aFJlYWR5KCkpIHtcbiAgICogICAvLyBzZWd1cm8gbGVlciBGaXJlc3RvcmVcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGZpcmViYXNlQXV0aFJlYWR5OiBTaWduYWw8Ym9vbGVhbj4gPSB0aGlzLl9maXJlYmFzZUF1dGhSZWFkeS5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRlIGB0cnVlYCB1bmEgc29sYSB2ZXogZW4gY3VhbnRvIGxhIHNlc2nDs24gZGUgRmlyZWJhc2UgQXV0aCBlc3TDoSBsaXN0YSxcbiAgICogeSBjb21wbGV0YS4gU2kgeWEgZXN0w6EgbGlzdGEsIGVtaXRlIGlubWVkaWF0YW1lbnRlLlxuICAgKlxuICAgKiBQZW5zYWRvIGNvbW8gZ2F0ZSBjb21wYXJ0aWRvIHBhcmEgYWJyaXIgc3RyZWFtcyBGaXJlc3RvcmUg4oCUIGVzcGVyYSBsYVxuICAgKiB2ZW50YW5hIGRlIGhpZHJhdGFjacOzbiBkZSBGaXJlYmFzZSBBdXRoIHNpbiBuZWNlc2lkYWQgZGUgcmV0cmllcy5cbiAgICovXG4gIHJlYWRvbmx5IGZpcmViYXNlQXV0aFJlYWR5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGF1dGg6IEF1dGgsXG4gICAgQEluamVjdChWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZ1xuICApIHtcbiAgICAvLyBJbmljaWFsaXphciBvYnNlcnZhYmxlcyBxdWUgZGVwZW5kZW4gZGUgYXV0aFxuICAgIHRoaXMudXNlciQgPSBhdXRoU3RhdGUodGhpcy5hdXRoKS5waXBlKFxuICAgICAgbWFwKHVzZXIgPT4gKHVzZXIgPyB0aGlzLm1hcFVzZXIodXNlcikgOiBudWxsKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYT8udWlkID09PSBiPy51aWQpXG4gICAgKTtcblxuICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkJCA9IHRoaXMudXNlciQucGlwZShcbiAgICAgIG1hcCh1c2VyID0+ICEhdXNlciksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKTtcblxuICAgIC8vIEdhdGUgY29tcGFydGlkbzogZW1pdGUgdHJ1ZSBlbiBjdWFudG8gaGF5YSB1biBmaXJlYmFzZS5Vc2VyIHkgY29tcGxldGEuXG4gICAgdGhpcy5maXJlYmFzZUF1dGhSZWFkeSQgPSBhdXRoU3RhdGUodGhpcy5hdXRoKS5waXBlKFxuICAgICAgZmlsdGVyKCh1c2VyKTogdXNlciBpcyBVc2VyID0+ICEhdXNlciksXG4gICAgICBtYXAoKCkgPT4gdHJ1ZSksXG4gICAgICB0YWtlKDEpXG4gICAgKTtcblxuICAgIC8vIEVzY3VjaGFyIGNhbWJpb3MgZW4gZWwgZXN0YWRvIGRlIGF1dGVudGljYWNpw7NuXG4gICAgYXV0aFN0YXRlKHRoaXMuYXV0aCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHVzZXIgPT4ge1xuICAgICAgICAvLyBNYW50ZW5lciBgZmlyZWJhc2VBdXRoUmVhZHlgIHNpbmNyb25pemFkbyBjb24gbGEgc2VzacOzbiByZWFsOlxuICAgICAgICAvLyB0cnVlIGFsIGhhYmVyIFVzZXIsIGZhbHNlIGVuIHNpZ25vdXQuIFBlcm1pdGUgcXVlIGxvcyBnYXRlc1xuICAgICAgICAvLyByZS1ldmFsw7plbiB0cmFzIHVuIGxvZ291dC9sb2dpbiBkZW50cm8gZGUgbGEgbWlzbWEgc2VzacOzbiBkZSBww6FnaW5hLlxuICAgICAgICB0aGlzLl9maXJlYmFzZUF1dGhSZWFkeS5zZXQoISF1c2VyKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RhdGUubmV4dCh7XG4gICAgICAgICAgdXNlcjogdXNlciA/IHRoaXMubWFwVXNlcih1c2VyKSA6IG51bGwsXG4gICAgICAgICAgaXNBdXRoZW50aWNhdGVkOiAhIXVzZXIsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgdGhpcy5fZmlyZWJhc2VBdXRoUmVhZHkuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RhdGUubmV4dCh7XG4gICAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1ZWx2ZSBlbiBjdWFudG8gbGEgc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoIGVzdMOhIGxpc3RhIHBhcmEgbGVlclxuICAgKiBGaXJlc3RvcmUuIFNpIHlhIGVzdMOhIGxpc3RhLCByZXN1ZWx2ZSBpbm1lZGlhdGFtZW50ZS5cbiAgICpcbiAgICogw5p0aWwgcGFyYSBnYXRlYXIgbGEgcHJpbWVyYSBzdXNjcmlwY2nDs24gYSB1biBsaXN0ZW5lciBkZSBGaXJlc3RvcmUgeSBhc8OtXG4gICAqIGNlcnJhciBsYSB2ZW50YW5hIGRlIGBwZXJtaXNzaW9uLWRlbmllZGAgZW4gY29sZCBzdGFydC5cbiAgICovXG4gIHdoZW5GaXJlYmFzZUF1dGhSZWFkeSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5fZmlyZWJhc2VBdXRoUmVhZHkoKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuZmlyZWJhc2VBdXRoUmVhZHkkKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBVVRFTlRJQ0FDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXV0ZW50aWNhIGFsIHVzdWFyaW8gY29uIHVuIEN1c3RvbSBUb2tlbiBnZW5lcmFkbyBwb3IgZWwgYmFja2VuZC5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gRmlyZWJhc2UgQ3VzdG9tIFRva2VuIGdlbmVyYWRvIHBvciB0dSBiYWNrZW5kXG4gICAqIEByZXR1cm5zIFVzZXJDcmVkZW50aWFsIGNvbiBsYSBpbmZvcm1hY2nDs24gZGVsIHVzdWFyaW9cbiAgICogQHRocm93cyBFcnJvciBzaSBlbCB0b2tlbiBlcyBpbnbDoWxpZG8gbyBleHBpcsOzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRGVzcHXDqXMgZGUgbG9naW4gZXhpdG9zbyBjb24gdHUgYmFja2VuZFxuICAgKiBjb25zdCB7IGZpcmViYXNlVG9rZW4gfSA9IGF3YWl0IGJhY2tlbmRBdXRoLmxvZ2luKGVtYWlsLCBwYXNzd29yZCk7XG4gICAqIGF3YWl0IGZpcmViYXNlU2VydmljZS5zaWduSW5XaXRoQ3VzdG9tVG9rZW4oZmlyZWJhc2VUb2tlbik7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPFVzZXJDcmVkZW50aWFsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWwgPSBhd2FpdCBzaWduSW5XaXRoQ3VzdG9tVG9rZW4odGhpcy5hdXRoLCB0b2tlbik7XG5cbiAgICAgIC8vIEZvcnphciByZWZyZXNoIGRlbCB0b2tlbiBwYXJhIGFzZWd1cmFyIHF1ZSBsb3MgY2xhaW1zIGVzdMOpbiBhY3R1YWxpemFkb3NcbiAgICAgIC8vIEVzdG8gZXMgbmVjZXNhcmlvIHBvcnF1ZSBnZXRJZFRva2VuUmVzdWx0KCkgY2FjaGVhIGVsIHJlc3VsdGFkb1xuICAgICAgaWYgKGNyZWRlbnRpYWwudXNlcikge1xuICAgICAgICBhd2FpdCBjcmVkZW50aWFsLnVzZXIuZ2V0SWRUb2tlbih0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNyZWRlbnRpYWw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENpZXJyYSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlLlxuICAgKiBMbGFtYXIganVudG8gY29uIGVsIGxvZ291dCBkZSB0dSBzaXN0ZW1hIGRlIGF1dGVudGljYWNpw7NuIHByaW5jaXBhbC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhc3luYyBsb2dvdXQoKSB7XG4gICAqICAgYXdhaXQgdGhpcy5iYWNrZW5kQXV0aC5sb2dvdXQoKTsgICAgLy8gVHUgYXV0aFxuICAgKiAgIGF3YWl0IHRoaXMuZmlyZWJhc2Uuc2lnbk91dCgpOyAgICAgICAvLyBGaXJlYmFzZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc2lnbk91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2lnbk91dCh0aGlzLmF1dGgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBHRVRURVJTIFPDjU5DUk9OT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgdXN1YXJpbyBhY3R1YWwgZGUgRmlyZWJhc2UgKHPDrW5jcm9ubykuXG4gICAqIFJldG9ybmEgbnVsbCBzaSBubyBoYXkgdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAgICovXG4gIGdldCBjdXJyZW50VXNlcigpOiBGaXJlYmFzZVVzZXIgfCBudWxsIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5hdXRoLmN1cnJlbnRVc2VyO1xuICAgIHJldHVybiB1c2VyID8gdGhpcy5tYXBVc2VyKHVzZXIpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIFVJRCBkZWwgdXN1YXJpbyBhY3R1YWwuXG4gICAqIFJldG9ybmEgbnVsbCBzaSBubyBoYXkgdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAgICovXG4gIGdldCB1aWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aC5jdXJyZW50VXNlcj8udWlkID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhIHNpIGhheSB1biB1c3VhcmlvIGF1dGVudGljYWRvIGFjdHVhbG1lbnRlLlxuICAgKi9cbiAgZ2V0IGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmF1dGguY3VycmVudFVzZXI7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVE9LRU5TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIElEIFRva2VuIGRlIEZpcmViYXNlIHBhcmEgZWwgdXN1YXJpbyBhY3R1YWwuXG4gICAqIMOadGlsIHBhcmEgdmFsaWRhciBlbCB1c3VhcmlvIGVuIHR1IGJhY2tlbmQuXG4gICAqXG4gICAqIEBwYXJhbSBmb3JjZVJlZnJlc2ggLSBTaSB0cnVlLCBmdWVyemEgbGEgcmVub3ZhY2nDs24gZGVsIHRva2VuXG4gICAqIEByZXR1cm5zIElEIFRva2VuIG8gbnVsbCBzaSBubyBoYXkgdXN1YXJpb1xuICAgKi9cbiAgYXN5bmMgZ2V0SWRUb2tlbihmb3JjZVJlZnJlc2ggPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmF1dGguY3VycmVudFVzZXI7XG4gICAgaWYgKCF1c2VyKSByZXR1cm4gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdXNlci5nZXRJZFRva2VuKGZvcmNlUmVmcmVzaCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsb3MgY2xhaW1zIHBlcnNvbmFsaXphZG9zIGRlbCB0b2tlbiBkZWwgdXN1YXJpby5cbiAgICogTG9zIGNsYWltcyBzb24gZXN0YWJsZWNpZG9zIHBvciB0dSBiYWNrZW5kIGFsIGNyZWFyIGVsIEN1c3RvbSBUb2tlbi5cbiAgICpcbiAgICogQHBhcmFtIGZvcmNlUmVmcmVzaCAtIFNpIHRydWUsIGZ1ZXJ6YSBsYSByZW5vdmFjacOzbiBkZWwgdG9rZW4gcGFyYSBvYnRlbmVyIGNsYWltcyBhY3R1YWxpemFkb3NcbiAgICogQHJldHVybnMgT2JqZXRvIGNvbiBsb3MgY2xhaW1zIG8gdmFjw61vIHNpIG5vIGhheSB1c3VhcmlvXG4gICAqL1xuICBhc3luYyBnZXRDbGFpbXMoZm9yY2VSZWZyZXNoID0gZmFsc2UpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuYXV0aC5jdXJyZW50VXNlcjtcbiAgICBpZiAoIXVzZXIpIHJldHVybiB7fTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1c2VyLmdldElkVG9rZW5SZXN1bHQoZm9yY2VSZWZyZXNoKTtcbiAgICAgIHJldHVybiByZXN1bHQuY2xhaW1zO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIHVuIHJvbCBlc3BlY8OtZmljby5cbiAgICogRWwgcm9sIGRlYmUgZXN0YXIgZGVmaW5pZG8gZW4gbG9zIGNsYWltcyBkZWwgQ3VzdG9tIFRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0gcm9sZSAtIE5vbWJyZSBkZWwgcm9sIGEgdmVyaWZpY2FyXG4gICAqIEByZXR1cm5zIHRydWUgc2kgZWwgdXN1YXJpbyB0aWVuZSBlbCByb2xcbiAgICovXG4gIGFzeW5jIGhhc1JvbGUocm9sZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY2xhaW1zID0gYXdhaXQgdGhpcy5nZXRDbGFpbXMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgY2xhaW1zWydyb2xlJ10gPT09IHJvbGUgfHwgKEFycmF5LmlzQXJyYXkoY2xhaW1zWydyb2xlcyddKSAmJiBjbGFpbXNbJ3JvbGVzJ10uaW5jbHVkZXMocm9sZSkpXG4gICAgKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSQkFDIC0gUEVSTUlTT1MgWSBPUkdBTklaQUNJT05FU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSBsYXMgbWVtYmVyc2hpcHMgKG9yZ2FuaXphY2lvbmVzKSBkZWwgdXN1YXJpby5cbiAgICogQ2FkYSBtZW1iZXJzaGlwIGNvbnRpZW5lIGVsIHJvbCB5IHBlcm1pc29zIGVuIGVzYSBvcmdhbml6YWNpw7NuLlxuICAgKlxuICAgKiBAcGFyYW0gZm9yY2VSZWZyZXNoIC0gU2kgdHJ1ZSwgZnVlcnphIGxhIHJlbm92YWNpw7NuIGRlbCB0b2tlblxuICAgKiBAcmV0dXJucyBNYXBhIGRlIG9yZ0lkIOKGkiBNZW1iZXJzaGlwSW5mb1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG1lbWJlcnNoaXBzID0gYXdhaXQgZmlyZWJhc2VTZXJ2aWNlLmdldE1lbWJlcnNoaXBzKCk7XG4gICAqIC8vIHsgJ29yZ19hYmMnOiB7IHJvbGVJZDogJ2FkbWluJywgcm9sZU5hbWU6ICdhZG1pbicsIHBlcm1pc3Npb25zOiBbJ3VzZXJzOionLCAuLi5dIH0gfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldE1lbWJlcnNoaXBzKGZvcmNlUmVmcmVzaCA9IGZhbHNlKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBNZW1iZXJzaGlwSW5mbz4+IHtcbiAgICBjb25zdCBjbGFpbXMgPSBhd2FpdCB0aGlzLmdldENsYWltcyhmb3JjZVJlZnJlc2gpO1xuICAgIHJldHVybiAoY2xhaW1zWydtZW1iZXJzaGlwcyddIGFzIFJlY29yZDxzdHJpbmcsIE1lbWJlcnNoaXBJbmZvPikgfHwge307XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsYSBvcmdhbml6YWNpw7NuIGFjdGl2YSBkZWwgdXN1YXJpby5cbiAgICogTGEgb3JnYW5pemFjacOzbiBhY3RpdmEgc2UgZXN0YWJsZWNlIGFsIGhhY2VyIGxvZ2luIG8gYWwgY2FtYmlhciBkZSBvcmcuXG4gICAqXG4gICAqIEBwYXJhbSBmb3JjZVJlZnJlc2ggLSBTaSB0cnVlLCBmdWVyemEgbGEgcmVub3ZhY2nDs24gZGVsIHRva2VuXG4gICAqIEByZXR1cm5zIElEIGRlIGxhIG9yZ2FuaXphY2nDs24gYWN0aXZhIG8gbnVsbCBzaSBubyBoYXkgbmluZ3VuYVxuICAgKi9cbiAgYXN5bmMgZ2V0QWN0aXZlT3JnKGZvcmNlUmVmcmVzaCA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgY2xhaW1zID0gYXdhaXQgdGhpcy5nZXRDbGFpbXMoZm9yY2VSZWZyZXNoKTtcbiAgICByZXR1cm4gKGNsYWltc1snYWN0aXZlT3JnJ10gYXMgc3RyaW5nKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgaW5mb3JtYWNpw7NuIGRlIHRvZGFzIGxhcyBvcmdhbml6YWNpb25lcyBkZWwgdXN1YXJpby5cbiAgICpcbiAgICogQHBhcmFtIGZvcmNlUmVmcmVzaCAtIFNpIHRydWUsIGZ1ZXJ6YSBsYSByZW5vdmFjacOzbiBkZWwgdG9rZW5cbiAgICogQHJldHVybnMgQXJyYXkgY29uIGluZm9ybWFjacOzbiBkZSBjYWRhIG9yZ2FuaXphY2nDs25cbiAgICovXG4gIGFzeW5jIGdldE9yZ2FuaXphdGlvbnMoZm9yY2VSZWZyZXNoID0gZmFsc2UpOiBQcm9taXNlPE9yZ2FuaXphdGlvbkluZm9bXT4ge1xuICAgIGNvbnN0IG1lbWJlcnNoaXBzID0gYXdhaXQgdGhpcy5nZXRNZW1iZXJzaGlwcyhmb3JjZVJlZnJlc2gpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtZW1iZXJzaGlwcykubWFwKChbaWQsIGluZm9dKSA9PiAoe1xuICAgICAgaWQsXG4gICAgICByb2xlSWQ6IGluZm8ucm9sZUlkLFxuICAgICAgcm9sZU5hbWU6IGluZm8ucm9sZU5hbWUsXG4gICAgICBwZXJtaXNzaW9uczogaW5mby5wZXJtaXNzaW9ucyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsb3MgSURzIGRlIHRvZGFzIGxhcyBvcmdhbml6YWNpb25lcyBkZWwgdXN1YXJpby5cbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgZGUgSURzIGRlIG9yZ2FuaXphY2lvbmVzXG4gICAqL1xuICBhc3luYyBnZXRPcmdhbml6YXRpb25JZHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IG1lbWJlcnNoaXBzID0gYXdhaXQgdGhpcy5nZXRNZW1iZXJzaGlwcygpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtZW1iZXJzaGlwcyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyBwZXJ0ZW5lY2UgYSB1bmEgb3JnYW5pemFjacOzbi5cbiAgICpcbiAgICogQHBhcmFtIG9yZ0lkIC0gSUQgZGUgbGEgb3JnYW5pemFjacOzblxuICAgKiBAcmV0dXJucyB0cnVlIHNpIGVsIHVzdWFyaW8gZXMgbWllbWJyb1xuICAgKi9cbiAgYXN5bmMgaXNNZW1iZXJPZihvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbWVtYmVyc2hpcHMgPSBhd2FpdCB0aGlzLmdldE1lbWJlcnNoaXBzKCk7XG4gICAgcmV0dXJuIG9yZ0lkIGluIG1lbWJlcnNoaXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgcm9sIGRlbCB1c3VhcmlvIGVuIHVuYSBvcmdhbml6YWNpw7NuLlxuICAgKlxuICAgKiBAcGFyYW0gb3JnSWQgLSBJRCBkZSBsYSBvcmdhbml6YWNpw7NuXG4gICAqIEByZXR1cm5zIElEIGRlbCByb2wgbyBudWxsIHNpIG5vIGVzIG1pZW1icm9cbiAgICovXG4gIGFzeW5jIGdldFJvbGVJbk9yZyhvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgbWVtYmVyc2hpcHMgPSBhd2FpdCB0aGlzLmdldE1lbWJlcnNoaXBzKCk7XG4gICAgcmV0dXJuIG1lbWJlcnNoaXBzW29yZ0lkXT8ucm9sZUlkIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsb3MgcGVybWlzb3MgZGVsIHVzdWFyaW8gZW4gdW5hIG9yZ2FuaXphY2nDs24uXG4gICAqXG4gICAqIEBwYXJhbSBvcmdJZCAtIElEIGRlIGxhIG9yZ2FuaXphY2nDs25cbiAgICogQHJldHVybnMgQXJyYXkgZGUgcGVybWlzb3MgZW4gZm9ybWF0byAncmVzb3VyY2U6YWN0aW9uJ1xuICAgKi9cbiAgYXN5bmMgZ2V0UGVybWlzc2lvbnNJbk9yZyhvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IG1lbWJlcnNoaXBzID0gYXdhaXQgdGhpcy5nZXRNZW1iZXJzaGlwcygpO1xuICAgIHJldHVybiBtZW1iZXJzaGlwc1tvcmdJZF0/LnBlcm1pc3Npb25zIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgdW4gcGVybWlzbyBlc3BlY8OtZmljbyBlbiB1bmEgb3JnYW5pemFjacOzbi5cbiAgICogU29wb3J0YSB3aWxkY2FyZHM6ICdyZXNvdXJjZToqJyB5ICcqOionIChzdXBlciBhZG1pbikuXG4gICAqXG4gICAqIEBwYXJhbSBvcmdJZCAtIElEIGRlIGxhIG9yZ2FuaXphY2nDs25cbiAgICogQHBhcmFtIHJlc291cmNlIC0gUmVjdXJzbyBhIHZlcmlmaWNhciAoZWo6ICd1c2VycycsICdkb2N1bWVudHMnKVxuICAgKiBAcGFyYW0gYWN0aW9uIC0gQWNjacOzbiBhIHZlcmlmaWNhciAoZWo6ICdyZWFkJywgJ3dyaXRlJywgJ2NyZWF0ZScsICdkZWxldGUnKVxuICAgKiBAcmV0dXJucyB0cnVlIHNpIHRpZW5lIGVsIHBlcm1pc29cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBWZXJpZmljYXIgcGVybWlzbyBlc3BlY8OtZmljb1xuICAgKiBjb25zdCBjYW5SZWFkVXNlcnMgPSBhd2FpdCBmaXJlYmFzZVNlcnZpY2UuaGFzUGVybWlzc2lvbignb3JnX2FiYycsICd1c2VycycsICdyZWFkJyk7XG4gICAqXG4gICAqIC8vIFZlcmlmaWNhciBlbiBsYSBvcmdhbml6YWNpw7NuIGFjdGl2YVxuICAgKiBjb25zdCBvcmdJZCA9IGF3YWl0IGZpcmViYXNlU2VydmljZS5nZXRBY3RpdmVPcmcoKTtcbiAgICogY29uc3QgY2FuRWRpdCA9IGF3YWl0IGZpcmViYXNlU2VydmljZS5oYXNQZXJtaXNzaW9uKG9yZ0lkISwgJ2RvY3VtZW50cycsICd3cml0ZScpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGhhc1Blcm1pc3Npb24ob3JnSWQ6IHN0cmluZywgcmVzb3VyY2U6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9IGF3YWl0IHRoaXMuZ2V0UGVybWlzc2lvbnNJbk9yZyhvcmdJZCk7XG4gICAgY29uc3QgcGVybWlzc2lvbiA9IGAke3Jlc291cmNlfToke2FjdGlvbn1gO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHBlcm1pc3Npb25zLmluY2x1ZGVzKHBlcm1pc3Npb24pIHx8XG4gICAgICBwZXJtaXNzaW9ucy5pbmNsdWRlcyhgJHtyZXNvdXJjZX06KmApIHx8XG4gICAgICBwZXJtaXNzaW9ucy5pbmNsdWRlcygnKjoqJylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gcHVlZGUgbGVlciB1biByZWN1cnNvIGVuIHVuYSBvcmdhbml6YWNpw7NuLlxuICAgKiBBdGFqbyBwYXJhIGhhc1Blcm1pc3Npb24ob3JnSWQsIHJlc291cmNlLCAncmVhZCcpLlxuICAgKi9cbiAgYXN5bmMgY2FuUmVhZChvcmdJZDogc3RyaW5nLCByZXNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbihvcmdJZCwgcmVzb3VyY2UsICdyZWFkJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyBwdWVkZSBlc2NyaWJpciB1biByZWN1cnNvIGVuIHVuYSBvcmdhbml6YWNpw7NuLlxuICAgKiBBdGFqbyBwYXJhIGhhc1Blcm1pc3Npb24ob3JnSWQsIHJlc291cmNlLCAnd3JpdGUnKS5cbiAgICovXG4gIGFzeW5jIGNhbldyaXRlKG9yZ0lkOiBzdHJpbmcsIHJlc291cmNlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5oYXNQZXJtaXNzaW9uKG9yZ0lkLCByZXNvdXJjZSwgJ3dyaXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyBwdWVkZSBjcmVhciB1biByZWN1cnNvIGVuIHVuYSBvcmdhbml6YWNpw7NuLlxuICAgKiBBdGFqbyBwYXJhIGhhc1Blcm1pc3Npb24ob3JnSWQsIHJlc291cmNlLCAnY3JlYXRlJykuXG4gICAqL1xuICBhc3luYyBjYW5DcmVhdGUob3JnSWQ6IHN0cmluZywgcmVzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Blcm1pc3Npb24ob3JnSWQsIHJlc291cmNlLCAnY3JlYXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyBwdWVkZSBlbGltaW5hciB1biByZWN1cnNvIGVuIHVuYSBvcmdhbml6YWNpw7NuLlxuICAgKiBBdGFqbyBwYXJhIGhhc1Blcm1pc3Npb24ob3JnSWQsIHJlc291cmNlLCAnZGVsZXRlJykuXG4gICAqL1xuICBhc3luYyBjYW5EZWxldGUob3JnSWQ6IHN0cmluZywgcmVzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Blcm1pc3Npb24ob3JnSWQsIHJlc291cmNlLCAnZGVsZXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyBwdWVkZSBhZG1pbmlzdHJhciB1biByZWN1cnNvIGVuIHVuYSBvcmdhbml6YWNpw7NuLlxuICAgKiBFcXVpdmFsZSBhIHRlbmVyICdyZXNvdXJjZToqJyBvICcqOionLlxuICAgKi9cbiAgYXN5bmMgY2FuTWFuYWdlKG9yZ0lkOiBzdHJpbmcsIHJlc291cmNlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9IGF3YWl0IHRoaXMuZ2V0UGVybWlzc2lvbnNJbk9yZyhvcmdJZCk7XG4gICAgcmV0dXJuIHBlcm1pc3Npb25zLmluY2x1ZGVzKGAke3Jlc291cmNlfToqYCkgfHwgcGVybWlzc2lvbnMuaW5jbHVkZXMoJyo6KicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gZXMgc3VwZXIgYWRtaW4gZW4gdW5hIG9yZ2FuaXphY2nDs24uXG4gICAqIFN1cGVyIGFkbWluIHRpZW5lIGVsIHBlcm1pc28gJyo6KicuXG4gICAqL1xuICBhc3luYyBpc1N1cGVyQWRtaW4ob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgdGhpcy5nZXRQZXJtaXNzaW9uc0luT3JnKG9yZ0lkKTtcbiAgICByZXR1cm4gcGVybWlzc2lvbnMuaW5jbHVkZXMoJyo6KicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gZXMgYWRtaW4gZW4gdW5hIG9yZ2FuaXphY2nDs24uXG4gICAqL1xuICBhc3luYyBpc0FkbWluSW5Pcmcob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJvbGUgPSBhd2FpdCB0aGlzLmdldFJvbGVJbk9yZyhvcmdJZCk7XG4gICAgcmV0dXJuIHJvbGUgPT09ICdhZG1pbicgfHwgcm9sZSA9PT0gJ3N1cGVyX2FkbWluJztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVVElMSURBREVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBFc3BlcmEgYSBxdWUgZWwgZXN0YWRvIGRlIGF1dGVudGljYWNpw7NuIGVzdMOpIGRldGVybWluYWRvLlxuICAgKiDDmnRpbCBlbiBndWFyZHMgbyBhbCBpbmljaWFsaXphciBsYSBhcHAuXG4gICAqXG4gICAqIEByZXR1cm5zIFVzdWFyaW8gYWN0dWFsIG8gbnVsbFxuICAgKi9cbiAgd2FpdEZvckF1dGgoKTogUHJvbWlzZTxGaXJlYmFzZVVzZXIgfCBudWxsPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5zdGF0ZSQuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKCFzdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlLnVzZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGFjdHVhbCBkZSBGaXJlYmFzZS5cbiAgICovXG4gIGdldENvbmZpZygpOiBWYWx0ZWNoRmlyZWJhc2VDb25maWcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2Egc2kgbG9zIGVtdWxhZG9yZXMgZXN0w6FuIGhhYmlsaXRhZG9zLlxuICAgKi9cbiAgaXNVc2luZ0VtdWxhdG9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoXG4gICAgICB0aGlzLmNvbmZpZy5lbXVsYXRvcj8uZmlyZXN0b3JlIHx8XG4gICAgICB0aGlzLmNvbmZpZy5lbXVsYXRvcj8uYXV0aCB8fFxuICAgICAgdGhpcy5jb25maWcuZW11bGF0b3I/LnN0b3JhZ2VcbiAgICApO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE3DiVRPRE9TIFBSSVZBRE9TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBNYXBlYSB1biBVc2VyIGRlIEZpcmViYXNlIGEgbnVlc3RyYSBpbnRlcmZhY2UgRmlyZWJhc2VVc2VyXG4gICAqL1xuICBwcml2YXRlIG1hcFVzZXIodXNlcjogVXNlcik6IEZpcmViYXNlVXNlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVpZDogdXNlci51aWQsXG4gICAgICBlbWFpbDogdXNlci5lbWFpbCxcbiAgICAgIGRpc3BsYXlOYW1lOiB1c2VyLmRpc3BsYXlOYW1lLFxuICAgICAgcGhvdG9VUkw6IHVzZXIucGhvdG9VUkwsXG4gICAgICBlbWFpbFZlcmlmaWVkOiB1c2VyLmVtYWlsVmVyaWZpZWQsXG4gICAgICBpc0Fub255bW91czogdXNlci5pc0Fub255bW91cyxcbiAgICAgIHByb3ZpZGVySWQ6IHVzZXIucHJvdmlkZXJJZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZpZXJ0ZSBlcnJvcmVzIGRlIEZpcmViYXNlIGEgbWVuc2FqZXMgZW4gZXNwYcOxb2xcbiAgICovXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc3QgY29kZSA9IChlcnJvciBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZTtcblxuICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIGNhc2UgJ2F1dGgvaW52YWxpZC1jdXN0b20tdG9rZW4nOlxuICAgICAgICAgIHJldHVybiAnVG9rZW4gZGUgYXV0ZW50aWNhY2nDs24gaW52w6FsaWRvJztcbiAgICAgICAgY2FzZSAnYXV0aC9jdXN0b20tdG9rZW4tbWlzbWF0Y2gnOlxuICAgICAgICAgIHJldHVybiAnRWwgdG9rZW4gbm8gY29ycmVzcG9uZGUgYSBlc3RlIHByb3llY3RvJztcbiAgICAgICAgY2FzZSAnYXV0aC9uZXR3b3JrLXJlcXVlc3QtZmFpbGVkJzpcbiAgICAgICAgICByZXR1cm4gJ0Vycm9yIGRlIGNvbmV4acOzbi4gVmVyaWZpY2EgdHUgY29uZXhpw7NuIGEgaW50ZXJuZXQnO1xuICAgICAgICBjYXNlICdhdXRoL3Rvby1tYW55LXJlcXVlc3RzJzpcbiAgICAgICAgICByZXR1cm4gJ0RlbWFzaWFkb3MgaW50ZW50b3MuIEludGVudGEgZGUgbnVldm8gbcOhcyB0YXJkZSc7XG4gICAgICAgIGNhc2UgJ2F1dGgvdXNlci1kaXNhYmxlZCc6XG4gICAgICAgICAgcmV0dXJuICdFc3RhIGN1ZW50YSBoYSBzaWRvIGRlc2hhYmlsaXRhZGEnO1xuICAgICAgICBjYXNlICdhdXRoL3VzZXItbm90LWZvdW5kJzpcbiAgICAgICAgICByZXR1cm4gJ1VzdWFyaW8gbm8gZW5jb250cmFkbyc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgfHwgJ0Vycm9yIGRlIGF1dGVudGljYWNpw7NuIGRlc2Nvbm9jaWRvJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJ0Vycm9yIGRlIGF1dGVudGljYWNpw7NuIGRlc2Nvbm9jaWRvJztcbiAgfVxufVxuIl19
516
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZmlyZWJhc2UvZmlyZWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUVMLFNBQVMsRUFDVCxxQkFBcUIsRUFDckIsT0FBTyxHQUdSLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLGNBQWMsRUFDZCxHQUFHLEVBRUgsSUFBSSxHQUNMLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFTbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsTUFBTSxPQUFPLGVBQWU7SUF5RDFCLFlBQ1UsSUFBVSxFQUN1QixNQUE2QjtRQUQ5RCxTQUFJLEdBQUosSUFBSSxDQUFNO1FBQ3VCLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBMUR4RSxrQ0FBa0M7UUFDMUIsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBZTtZQUN2RCxJQUFJLEVBQUUsSUFBSTtZQUNWLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7UUFFSCxpREFBaUQ7UUFDeEMsV0FBTSxHQUE2QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBUTdFOzs7O1dBSUc7UUFDYyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBb0JHO1FBQ00sc0JBQWlCLEdBQW9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQWVqRiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDcEMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQy9DLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQ2xELENBQUM7UUFFRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFDbkIsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztRQUVGLDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ2pELE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFDdEMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUixDQUFDO1FBRUYsaURBQWlEO1FBQ2pELFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxnRUFBZ0U7Z0JBQ2hFLDhEQUE4RDtnQkFDOUQsdUVBQXVFO2dCQUN2RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FDVCxnQ0FBZ0MsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLHNCQUFzQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQ2xGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7b0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3RDLGVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSTtvQkFDdkIsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLEtBQUssRUFBRSxJQUFJO2lCQUNaLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLEtBQUssQ0FDWCw2QkFBNkIsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ3RGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7b0JBQ3JCLElBQUksRUFBRSxJQUFJO29CQUNWLGVBQWUsRUFBRSxLQUFLO29CQUN0QixTQUFTLEVBQUUsS0FBSztvQkFDaEIsS0FBSztpQkFDTixDQUFDLENBQUM7WUFDTCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHFCQUFxQjtRQUNuQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0RCxPQUFPLENBQUMsR0FBRyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7WUFDbEUsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsZ0JBQWdCO0lBQ2hCLDhFQUE4RTtJQUU5RTs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEtBQWE7UUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0scUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVqRSwyRUFBMkU7WUFDM0Usa0VBQWtFO1lBQ2xFLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQixNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1gsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLG9CQUFvQjtJQUNwQiw4RUFBOEU7SUFFOUU7OztPQUdHO0lBQ0gsSUFBSSxXQUFXO1FBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksZUFBZTtRQUNqQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLFNBQVM7SUFDVCw4RUFBOEU7SUFFOUU7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsS0FBSztRQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXZCLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsS0FBSztRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXJCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBWTtRQUN4QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxPQUFPLENBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUM5RixDQUFDO0lBQ0osQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxtQ0FBbUM7SUFDbkMsOEVBQThFO0lBRTlFOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLEtBQUs7UUFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xELE9BQVEsTUFBTSxDQUFDLGFBQWEsQ0FBb0MsSUFBSSxFQUFFLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLEtBQUs7UUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xELE9BQVEsTUFBTSxDQUFDLFdBQVcsQ0FBWSxJQUFJLElBQUksQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLEtBQUs7UUFDekMsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RCxFQUFFO1lBQ0YsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxrQkFBa0I7UUFDdEIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBYTtRQUM1QixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNoRCxPQUFPLEtBQUssSUFBSSxXQUFXLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFhO1FBQzlCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hELE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQWE7UUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEQsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBYSxFQUFFLFFBQWdCLEVBQUUsTUFBYztRQUNqRSxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxHQUFHLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUUzQyxPQUFPLENBQ0wsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDaEMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsSUFBSSxDQUFDO1lBQ3JDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBYSxFQUFFLFFBQWdCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQWEsRUFBRSxRQUFnQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBYSxFQUFFLFFBQWdCO1FBQzdDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFhO1FBQzlCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWE7UUFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLEtBQUssYUFBYSxDQUFDO0lBQ3BELENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsYUFBYTtJQUNiLDhFQUE4RTtJQUU5RTs7Ozs7T0FLRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNyQixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDZCxPQUFPLENBQUMsQ0FBQyxDQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVM7WUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSTtZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLG1CQUFtQjtJQUNuQiw4RUFBOEU7SUFFOUU7O09BRUc7SUFDSyxPQUFPLENBQUMsSUFBVTtRQUN4QixPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWUsQ0FBQyxLQUFjO1FBQ3BDLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxHQUFJLEtBQTJCLENBQUMsSUFBSSxDQUFDO1lBRS9DLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSywyQkFBMkI7b0JBQzlCLE9BQU8saUNBQWlDLENBQUM7Z0JBQzNDLEtBQUssNEJBQTRCO29CQUMvQixPQUFPLHlDQUF5QyxDQUFDO2dCQUNuRCxLQUFLLDZCQUE2QjtvQkFDaEMsT0FBTyxvREFBb0QsQ0FBQztnQkFDOUQsS0FBSyx3QkFBd0I7b0JBQzNCLE9BQU8saURBQWlELENBQUM7Z0JBQzNELEtBQUssb0JBQW9CO29CQUN2QixPQUFPLG1DQUFtQyxDQUFDO2dCQUM3QyxLQUFLLHFCQUFxQjtvQkFDeEIsT0FBTyx1QkFBdUIsQ0FBQztnQkFDakM7b0JBQ0UsT0FBTyxLQUFLLENBQUMsT0FBTyxJQUFJLG9DQUFvQyxDQUFDO1lBQ2pFLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxvQ0FBb0MsQ0FBQztJQUM5QyxDQUFDOytHQXpoQlUsZUFBZSxzQ0EyRGhCLHVCQUF1QjttSEEzRHRCLGVBQWUsY0FERixNQUFNOzs0RkFDbkIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQTREN0IsTUFBTTsyQkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpcmViYXNlIFNlcnZpY2VcbiAqXG4gKiBTZXJ2aWNpbyBwcmluY2lwYWwgcGFyYSBsYSBhdXRlbnRpY2FjacOzbiBjb24gRmlyZWJhc2UgdXNhbmRvIEN1c3RvbSBUb2tlbnMuXG4gKiBQZXJtaXRlIHF1ZSB1c3VhcmlvcyBhdXRlbnRpY2Fkb3MgY29uIHR1IGJhY2tlbmQgKENvZ25pdG8sIGV0Yy4pIGFjY2VkYW5cbiAqIGEgc2VydmljaW9zIGRlIEZpcmViYXNlIChGaXJlc3RvcmUsIFN0b3JhZ2UsIEZDTSkgZGUgbWFuZXJhIHNlZ3VyYS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBdXRoLFxuICBhdXRoU3RhdGUsXG4gIHNpZ25JbldpdGhDdXN0b21Ub2tlbixcbiAgc2lnbk91dCxcbiAgVXNlcixcbiAgVXNlckNyZWRlbnRpYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXV0aCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZpcnN0VmFsdWVGcm9tLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIEZpcmViYXNlVXNlcixcbiAgTWVtYmVyc2hpcEluZm8sXG4gIE9yZ2FuaXphdGlvbkluZm8sXG4gIFNlc3Npb25TdGF0ZSxcbiAgVmFsdGVjaEZpcmViYXNlQ29uZmlnLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTZXJ2aWNpbyBkZSBhdXRlbnRpY2FjacOzbiBkZSBGaXJlYmFzZS5cbiAqXG4gKiBFc3RlIHNlcnZpY2lvIE5PIG1hbmVqYSBlbCBsb2dpbiBkZSB1c3VhcmlvcyBkaXJlY3RhbWVudGUuXG4gKiBFbiBzdSBsdWdhciwgdHJhYmFqYSBjb24gQ3VzdG9tIFRva2VucyBnZW5lcmFkb3MgcG9yIHR1IGJhY2tlbmQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERlc3B1w6lzIGRlIGF1dGVudGljYXJ0ZSBjb24gdHUgYmFja2VuZCAoZWo6IENvZ25pdG8pXG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7ICAgICAvLyBUdSBzZXJ2aWNpbyBkZSBhdXRoXG4gKiAgIHByaXZhdGUgZmlyZWJhc2UgPSBpbmplY3QoRmlyZWJhc2VTZXJ2aWNlKTsgICAgLy8gRXN0ZSBzZXJ2aWNpb1xuICpcbiAqICAgYXN5bmMgbG9naW4oZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykge1xuICogICAgIC8vIDEuIEF1dGVudGljYXIgY29uIHR1IGJhY2tlbmRcbiAqICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXV0aFNlcnZpY2UubG9naW4oZW1haWwsIHBhc3N3b3JkKTtcbiAqXG4gKiAgICAgLy8gMi4gRWwgYmFja2VuZCBkZXZ1ZWx2ZSB1biBGaXJlYmFzZSBDdXN0b20gVG9rZW5cbiAqICAgICBpZiAocmVzcG9uc2UuZmlyZWJhc2VUb2tlbikge1xuICogICAgICAgYXdhaXQgdGhpcy5maXJlYmFzZS5zaWduSW5XaXRoQ3VzdG9tVG9rZW4ocmVzcG9uc2UuZmlyZWJhc2VUb2tlbik7XG4gKiAgICAgfVxuICpcbiAqICAgICAvLyBBaG9yYSBlbCB1c3VhcmlvIHB1ZWRlIGFjY2VkZXIgYSBGaXJlc3RvcmUsIFN0b3JhZ2UsIGV0Yy5cbiAqICAgfVxuICpcbiAqICAgYXN5bmMgbG9nb3V0KCkge1xuICogICAgIGF3YWl0IHRoaXMuYXV0aFNlcnZpY2UubG9nb3V0KCk7XG4gKiAgICAgYXdhaXQgdGhpcy5maXJlYmFzZS5zaWduT3V0KCk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZpcmViYXNlU2VydmljZSB7XG4gIC8qKiBFc3RhZG8gaW50ZXJubyBkZSBsYSBzZXNpw7NuICovXG4gIHByaXZhdGUgc2Vzc2lvblN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZXNzaW9uU3RhdGU+KHtcbiAgICB1c2VyOiBudWxsLFxuICAgIGlzQXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgIGVycm9yOiBudWxsLFxuICB9KTtcblxuICAvKiogRXN0YWRvIGFjdHVhbCBkZSBsYSBzZXNpw7NuIGNvbW8gT2JzZXJ2YWJsZSAqL1xuICByZWFkb25seSBzdGF0ZSQ6IE9ic2VydmFibGU8U2Vzc2lvblN0YXRlPiA9IHRoaXMuc2Vzc2lvblN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKiBVc3VhcmlvIGFjdHVhbCBkZSBGaXJlYmFzZSBjb21vIE9ic2VydmFibGUgKi9cbiAgcmVhZG9ubHkgdXNlciQ6IE9ic2VydmFibGU8RmlyZWJhc2VVc2VyIHwgbnVsbD47XG5cbiAgLyoqIEluZGljYSBzaSBlbCB1c3VhcmlvIGVzdMOhIGF1dGVudGljYWRvIGVuIEZpcmViYXNlICovXG4gIHJlYWRvbmx5IGlzQXV0aGVudGljYXRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFNpZ25hbCBpbnRlcm5hIHF1ZSByZXNwYWxkYSBgZmlyZWJhc2VBdXRoUmVhZHlgLlxuICAgKiBgdHJ1ZWAgY3VhbmRvIGhheSB1biBgZmlyZWJhc2UuVXNlcmAgYWN0aXZvIHkgcG9yIHRhbnRvIGxhcyByZWdsYXMgZGVcbiAgICogRmlyZXN0b3JlIGV2YWx1YXLDoW4gYHJlcXVlc3QuYXV0aCAhPSBudWxsYCBjb3JyZWN0YW1lbnRlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlyZWJhc2VBdXRoUmVhZHkgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBJbmRpY2Egc2kgbGEgc2VzacOzbiBkZSAqKkZpcmViYXNlIEF1dGgqKiBlc3TDoSBlc3RhYmxlY2lkYSB5IGxpc3RhIHBhcmFcbiAgICogbGVlciBGaXJlc3RvcmUuXG4gICAqXG4gICAqIElNUE9SVEFOVEU6IGVzdG8gZXMgZGlzdGludG8gZGVsIEpXVCBkZWwgYmFja2VuZC4gTGEgc2VzacOzbiBkZSBGaXJlYmFzZVxuICAgKiBBdXRoIGVzIHVuYSBzZXNpw7NuIHNlcGFyYWRhIHF1ZSBzZSBlc3RhYmxlY2UgdsOtYSBgc2lnbkluV2l0aEN1c3RvbVRva2VuYFxuICAgKiAodmVyIGBBdXRoU2VydmljZS5zaWduSW5XaXRoRmlyZWJhc2VgKS4gRW4gY29sZCBzdGFydCBkZSBQV0EsIGVsIEpXVCBkZWxcbiAgICogYmFja2VuZCBwdWVkZSBlc3RhciBsaXN0byB2YXJpb3MgY2llbnRvcyBkZSBtcyBhbnRlcyBkZSBxdWUgRmlyZWJhc2UgQXV0aFxuICAgKiBjb25maXJtZSBzdSBgVXNlcmAg4oCUIGFkanVudGFyIHVuIGxpc3RlbmVyIGRlIEZpcmVzdG9yZSBlbiBlc2EgdmVudGFuYVxuICAgKiBwcm9kdWNlIGBwZXJtaXNzaW9uLWRlbmllZGAuXG4gICAqXG4gICAqIFVzYXIgZXN0ZSBzaWduYWwgKG8gYHdoZW5GaXJlYmFzZUF1dGhSZWFkeSgpYCkgY29tbyBnYXRlIGFudGVzIGRlXG4gICAqIHN1c2NyaWJpcnNlIGEgY3VhbHF1aWVyIHF1ZXJ5L2xpc3RlbmVyIGRlIEZpcmVzdG9yZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpZiAodGhpcy5maXJlYmFzZS5maXJlYmFzZUF1dGhSZWFkeSgpKSB7XG4gICAqICAgLy8gc2VndXJvIGxlZXIgRmlyZXN0b3JlXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBmaXJlYmFzZUF1dGhSZWFkeTogU2lnbmFsPGJvb2xlYW4+ID0gdGhpcy5fZmlyZWJhc2VBdXRoUmVhZHkuYXNSZWFkb25seSgpO1xuXG4gIC8qKlxuICAgKiBFbWl0ZSBgdHJ1ZWAgdW5hIHNvbGEgdmV6IGVuIGN1YW50byBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggZXN0w6EgbGlzdGEsXG4gICAqIHkgY29tcGxldGEuIFNpIHlhIGVzdMOhIGxpc3RhLCBlbWl0ZSBpbm1lZGlhdGFtZW50ZS5cbiAgICpcbiAgICogUGVuc2FkbyBjb21vIGdhdGUgY29tcGFydGlkbyBwYXJhIGFicmlyIHN0cmVhbXMgRmlyZXN0b3JlIOKAlCBlc3BlcmEgbGFcbiAgICogdmVudGFuYSBkZSBoaWRyYXRhY2nDs24gZGUgRmlyZWJhc2UgQXV0aCBzaW4gbmVjZXNpZGFkIGRlIHJldHJpZXMuXG4gICAqL1xuICByZWFkb25seSBmaXJlYmFzZUF1dGhSZWFkeSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoLFxuICAgIEBJbmplY3QoVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoRmlyZWJhc2VDb25maWdcbiAgKSB7XG4gICAgLy8gSW5pY2lhbGl6YXIgb2JzZXJ2YWJsZXMgcXVlIGRlcGVuZGVuIGRlIGF1dGhcbiAgICB0aGlzLnVzZXIkID0gYXV0aFN0YXRlKHRoaXMuYXV0aCkucGlwZShcbiAgICAgIG1hcCh1c2VyID0+ICh1c2VyID8gdGhpcy5tYXBVc2VyKHVzZXIpIDogbnVsbCkpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGE/LnVpZCA9PT0gYj8udWlkKVxuICAgICk7XG5cbiAgICB0aGlzLmlzQXV0aGVudGljYXRlZCQgPSB0aGlzLnVzZXIkLnBpcGUoXG4gICAgICBtYXAodXNlciA9PiAhIXVzZXIpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG5cbiAgICAvLyBHYXRlIGNvbXBhcnRpZG86IGVtaXRlIHRydWUgZW4gY3VhbnRvIGhheWEgdW4gZmlyZWJhc2UuVXNlciB5IGNvbXBsZXRhLlxuICAgIHRoaXMuZmlyZWJhc2VBdXRoUmVhZHkkID0gYXV0aFN0YXRlKHRoaXMuYXV0aCkucGlwZShcbiAgICAgIGZpbHRlcigodXNlcik6IHVzZXIgaXMgVXNlciA9PiAhIXVzZXIpLFxuICAgICAgbWFwKCgpID0+IHRydWUpLFxuICAgICAgdGFrZSgxKVxuICAgICk7XG5cbiAgICAvLyBFc2N1Y2hhciBjYW1iaW9zIGVuIGVsIGVzdGFkbyBkZSBhdXRlbnRpY2FjacOzblxuICAgIGF1dGhTdGF0ZSh0aGlzLmF1dGgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiB1c2VyID0+IHtcbiAgICAgICAgLy8gTWFudGVuZXIgYGZpcmViYXNlQXV0aFJlYWR5YCBzaW5jcm9uaXphZG8gY29uIGxhIHNlc2nDs24gcmVhbDpcbiAgICAgICAgLy8gdHJ1ZSBhbCBoYWJlciBVc2VyLCBmYWxzZSBlbiBzaWdub3V0LiBQZXJtaXRlIHF1ZSBsb3MgZ2F0ZXNcbiAgICAgICAgLy8gcmUtZXZhbMO6ZW4gdHJhcyB1biBsb2dvdXQvbG9naW4gZGVudHJvIGRlIGxhIG1pc21hIHNlc2nDs24gZGUgcMOhZ2luYS5cbiAgICAgICAgdGhpcy5fZmlyZWJhc2VBdXRoUmVhZHkuc2V0KCEhdXNlcik7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbRkJBdXRoXSBhdXRoU3RhdGUgZW1pdCB1c2VyPSR7dXNlcj8udWlkID8/ICdudWxsJ30gZmlyZWJhc2VBdXRoUmVhZHk9JHshIXVzZXJ9YFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlc3Npb25TdGF0ZS5uZXh0KHtcbiAgICAgICAgICB1c2VyOiB1c2VyID8gdGhpcy5tYXBVc2VyKHVzZXIpIDogbnVsbCxcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6ICEhdXNlcixcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLl9maXJlYmFzZUF1dGhSZWFkeS5zZXQoZmFsc2UpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBbRkJBdXRoXSBhdXRoU3RhdGUgRVJST1I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RhdGUubmV4dCh7XG4gICAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1ZWx2ZSBlbiBjdWFudG8gbGEgc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoIGVzdMOhIGxpc3RhIHBhcmEgbGVlclxuICAgKiBGaXJlc3RvcmUuIFNpIHlhIGVzdMOhIGxpc3RhLCByZXN1ZWx2ZSBpbm1lZGlhdGFtZW50ZS5cbiAgICpcbiAgICogw5p0aWwgcGFyYSBnYXRlYXIgbGEgcHJpbWVyYSBzdXNjcmlwY2nDs24gYSB1biBsaXN0ZW5lciBkZSBGaXJlc3RvcmUgeSBhc8OtXG4gICAqIGNlcnJhciBsYSB2ZW50YW5hIGRlIGBwZXJtaXNzaW9uLWRlbmllZGAgZW4gY29sZCBzdGFydC5cbiAgICovXG4gIHdoZW5GaXJlYmFzZUF1dGhSZWFkeSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5fZmlyZWJhc2VBdXRoUmVhZHkoKSkge1xuICAgICAgY29uc29sZS5sb2coJ1tGQkF1dGhdIHdoZW5GaXJlYmFzZUF1dGhSZWFkeSByZXNvbHZlZCBpbW1lZGlhdGVseSAoYWxyZWFkeSByZWFkeSknKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdbRkJBdXRoXSB3aGVuRmlyZWJhc2VBdXRoUmVhZHkgd2FpdGluZyBmb3IgRmlyZWJhc2UgQXV0aCBzZXNzaW9uLi4uJyk7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuZmlyZWJhc2VBdXRoUmVhZHkkKS50aGVuKHYgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1tGQkF1dGhdIHdoZW5GaXJlYmFzZUF1dGhSZWFkeSByZXNvbHZlZCBhZnRlciB3YWl0Jyk7XG4gICAgICByZXR1cm4gdjtcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBVVRFTlRJQ0FDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXV0ZW50aWNhIGFsIHVzdWFyaW8gY29uIHVuIEN1c3RvbSBUb2tlbiBnZW5lcmFkbyBwb3IgZWwgYmFja2VuZC5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gRmlyZWJhc2UgQ3VzdG9tIFRva2VuIGdlbmVyYWRvIHBvciB0dSBiYWNrZW5kXG4gICAqIEByZXR1cm5zIFVzZXJDcmVkZW50aWFsIGNvbiBsYSBpbmZvcm1hY2nDs24gZGVsIHVzdWFyaW9cbiAgICogQHRocm93cyBFcnJvciBzaSBlbCB0b2tlbiBlcyBpbnbDoWxpZG8gbyBleHBpcsOzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRGVzcHXDqXMgZGUgbG9naW4gZXhpdG9zbyBjb24gdHUgYmFja2VuZFxuICAgKiBjb25zdCB7IGZpcmViYXNlVG9rZW4gfSA9IGF3YWl0IGJhY2tlbmRBdXRoLmxvZ2luKGVtYWlsLCBwYXNzd29yZCk7XG4gICAqIGF3YWl0IGZpcmViYXNlU2VydmljZS5zaWduSW5XaXRoQ3VzdG9tVG9rZW4oZmlyZWJhc2VUb2tlbik7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPFVzZXJDcmVkZW50aWFsPiB7XG4gICAgY29uc29sZS5sb2coYFtGQkF1dGhdIHNpZ25JbldpdGhDdXN0b21Ub2tlbiBjYWxsZWQgdG9rZW5MZW49JHt0b2tlbj8ubGVuZ3RoID8/IDB9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWwgPSBhd2FpdCBzaWduSW5XaXRoQ3VzdG9tVG9rZW4odGhpcy5hdXRoLCB0b2tlbik7XG5cbiAgICAgIC8vIEZvcnphciByZWZyZXNoIGRlbCB0b2tlbiBwYXJhIGFzZWd1cmFyIHF1ZSBsb3MgY2xhaW1zIGVzdMOpbiBhY3R1YWxpemFkb3NcbiAgICAgIC8vIEVzdG8gZXMgbmVjZXNhcmlvIHBvcnF1ZSBnZXRJZFRva2VuUmVzdWx0KCkgY2FjaGVhIGVsIHJlc3VsdGFkb1xuICAgICAgaWYgKGNyZWRlbnRpYWwudXNlcikge1xuICAgICAgICBhd2FpdCBjcmVkZW50aWFsLnVzZXIuZ2V0SWRUb2tlbih0cnVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coYFtGQkF1dGhdIHNpZ25JbldpdGhDdXN0b21Ub2tlbiBPSyB1aWQ9JHtjcmVkZW50aWFsLnVzZXI/LnVpZCA/PyAnbnVsbCd9YCk7XG4gICAgICByZXR1cm4gY3JlZGVudGlhbDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtGQkF1dGhdIHNpZ25JbldpdGhDdXN0b21Ub2tlbiBGQUlMRUQ6ICR7bWVzc2FnZX1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2llcnJhIGxhIHNlc2nDs24gZGUgRmlyZWJhc2UuXG4gICAqIExsYW1hciBqdW50byBjb24gZWwgbG9nb3V0IGRlIHR1IHNpc3RlbWEgZGUgYXV0ZW50aWNhY2nDs24gcHJpbmNpcGFsLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGFzeW5jIGxvZ291dCgpIHtcbiAgICogICBhd2FpdCB0aGlzLmJhY2tlbmRBdXRoLmxvZ291dCgpOyAgICAvLyBUdSBhdXRoXG4gICAqICAgYXdhaXQgdGhpcy5maXJlYmFzZS5zaWduT3V0KCk7ICAgICAgIC8vIEZpcmViYXNlXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBzaWduT3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzaWduT3V0KHRoaXMuYXV0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEdFVFRFUlMgU8ONTkNST05PU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB1c3VhcmlvIGFjdHVhbCBkZSBGaXJlYmFzZSAoc8OtbmNyb25vKS5cbiAgICogUmV0b3JuYSBudWxsIHNpIG5vIGhheSB1c3VhcmlvIGF1dGVudGljYWRvLlxuICAgKi9cbiAgZ2V0IGN1cnJlbnRVc2VyKCk6IEZpcmViYXNlVXNlciB8IG51bGwge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmF1dGguY3VycmVudFVzZXI7XG4gICAgcmV0dXJuIHVzZXIgPyB0aGlzLm1hcFVzZXIodXNlcikgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgVUlEIGRlbCB1c3VhcmlvIGFjdHVhbC5cbiAgICogUmV0b3JuYSBudWxsIHNpIG5vIGhheSB1c3VhcmlvIGF1dGVudGljYWRvLlxuICAgKi9cbiAgZ2V0IHVpZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoLmN1cnJlbnRVc2VyPy51aWQgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2Egc2kgaGF5IHVuIHVzdWFyaW8gYXV0ZW50aWNhZG8gYWN0dWFsbWVudGUuXG4gICAqL1xuICBnZXQgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuYXV0aC5jdXJyZW50VXNlcjtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUT0tFTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgSUQgVG9rZW4gZGUgRmlyZWJhc2UgcGFyYSBlbCB1c3VhcmlvIGFjdHVhbC5cbiAgICogw5p0aWwgcGFyYSB2YWxpZGFyIGVsIHVzdWFyaW8gZW4gdHUgYmFja2VuZC5cbiAgICpcbiAgICogQHBhcmFtIGZvcmNlUmVmcmVzaCAtIFNpIHRydWUsIGZ1ZXJ6YSBsYSByZW5vdmFjacOzbiBkZWwgdG9rZW5cbiAgICogQHJldHVybnMgSUQgVG9rZW4gbyBudWxsIHNpIG5vIGhheSB1c3VhcmlvXG4gICAqL1xuICBhc3luYyBnZXRJZFRva2VuKGZvcmNlUmVmcmVzaCA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuYXV0aC5jdXJyZW50VXNlcjtcbiAgICBpZiAoIXVzZXIpIHJldHVybiBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB1c2VyLmdldElkVG9rZW4oZm9yY2VSZWZyZXNoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxvcyBjbGFpbXMgcGVyc29uYWxpemFkb3MgZGVsIHRva2VuIGRlbCB1c3VhcmlvLlxuICAgKiBMb3MgY2xhaW1zIHNvbiBlc3RhYmxlY2lkb3MgcG9yIHR1IGJhY2tlbmQgYWwgY3JlYXIgZWwgQ3VzdG9tIFRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0gZm9yY2VSZWZyZXNoIC0gU2kgdHJ1ZSwgZnVlcnphIGxhIHJlbm92YWNpw7NuIGRlbCB0b2tlbiBwYXJhIG9idGVuZXIgY2xhaW1zIGFjdHVhbGl6YWRvc1xuICAgKiBAcmV0dXJucyBPYmpldG8gY29uIGxvcyBjbGFpbXMgbyB2YWPDrW8gc2kgbm8gaGF5IHVzdWFyaW9cbiAgICovXG4gIGFzeW5jIGdldENsYWltcyhmb3JjZVJlZnJlc2ggPSBmYWxzZSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5hdXRoLmN1cnJlbnRVc2VyO1xuICAgIGlmICghdXNlcikgcmV0dXJuIHt9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVzZXIuZ2V0SWRUb2tlblJlc3VsdChmb3JjZVJlZnJlc2gpO1xuICAgICAgcmV0dXJuIHJlc3VsdC5jbGFpbXM7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgdW4gcm9sIGVzcGVjw61maWNvLlxuICAgKiBFbCByb2wgZGViZSBlc3RhciBkZWZpbmlkbyBlbiBsb3MgY2xhaW1zIGRlbCBDdXN0b20gVG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSByb2xlIC0gTm9tYnJlIGRlbCByb2wgYSB2ZXJpZmljYXJcbiAgICogQHJldHVybnMgdHJ1ZSBzaSBlbCB1c3VhcmlvIHRpZW5lIGVsIHJvbFxuICAgKi9cbiAgYXN5bmMgaGFzUm9sZShyb2xlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjbGFpbXMgPSBhd2FpdCB0aGlzLmdldENsYWltcygpO1xuICAgIHJldHVybiAoXG4gICAgICBjbGFpbXNbJ3JvbGUnXSA9PT0gcm9sZSB8fCAoQXJyYXkuaXNBcnJheShjbGFpbXNbJ3JvbGVzJ10pICYmIGNsYWltc1sncm9sZXMnXS5pbmNsdWRlcyhyb2xlKSlcbiAgICApO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJCQUMgLSBQRVJNSVNPUyBZIE9SR0FOSVpBQ0lPTkVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhcyBtZW1iZXJzaGlwcyAob3JnYW5pemFjaW9uZXMpIGRlbCB1c3VhcmlvLlxuICAgKiBDYWRhIG1lbWJlcnNoaXAgY29udGllbmUgZWwgcm9sIHkgcGVybWlzb3MgZW4gZXNhIG9yZ2FuaXphY2nDs24uXG4gICAqXG4gICAqIEBwYXJhbSBmb3JjZVJlZnJlc2ggLSBTaSB0cnVlLCBmdWVyemEgbGEgcmVub3ZhY2nDs24gZGVsIHRva2VuXG4gICAqIEByZXR1cm5zIE1hcGEgZGUgb3JnSWQg4oaSIE1lbWJlcnNoaXBJbmZvXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbWVtYmVyc2hpcHMgPSBhd2FpdCBmaXJlYmFzZVNlcnZpY2UuZ2V0TWVtYmVyc2hpcHMoKTtcbiAgICogLy8geyAnb3JnX2FiYyc6IHsgcm9sZUlkOiAnYWRtaW4nLCByb2xlTmFtZTogJ2FkbWluJywgcGVybWlzc2lvbnM6IFsndXNlcnM6KicsIC4uLl0gfSB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0TWVtYmVyc2hpcHMoZm9yY2VSZWZyZXNoID0gZmFsc2UpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIE1lbWJlcnNoaXBJbmZvPj4ge1xuICAgIGNvbnN0IGNsYWltcyA9IGF3YWl0IHRoaXMuZ2V0Q2xhaW1zKGZvcmNlUmVmcmVzaCk7XG4gICAgcmV0dXJuIChjbGFpbXNbJ21lbWJlcnNoaXBzJ10gYXMgUmVjb3JkPHN0cmluZywgTWVtYmVyc2hpcEluZm8+KSB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIG9yZ2FuaXphY2nDs24gYWN0aXZhIGRlbCB1c3VhcmlvLlxuICAgKiBMYSBvcmdhbml6YWNpw7NuIGFjdGl2YSBzZSBlc3RhYmxlY2UgYWwgaGFjZXIgbG9naW4gbyBhbCBjYW1iaWFyIGRlIG9yZy5cbiAgICpcbiAgICogQHBhcmFtIGZvcmNlUmVmcmVzaCAtIFNpIHRydWUsIGZ1ZXJ6YSBsYSByZW5vdmFjacOzbiBkZWwgdG9rZW5cbiAgICogQHJldHVybnMgSUQgZGUgbGEgb3JnYW5pemFjacOzbiBhY3RpdmEgbyBudWxsIHNpIG5vIGhheSBuaW5ndW5hXG4gICAqL1xuICBhc3luYyBnZXRBY3RpdmVPcmcoZm9yY2VSZWZyZXNoID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBjbGFpbXMgPSBhd2FpdCB0aGlzLmdldENsYWltcyhmb3JjZVJlZnJlc2gpO1xuICAgIHJldHVybiAoY2xhaW1zWydhY3RpdmVPcmcnXSBhcyBzdHJpbmcpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBpbmZvcm1hY2nDs24gZGUgdG9kYXMgbGFzIG9yZ2FuaXphY2lvbmVzIGRlbCB1c3VhcmlvLlxuICAgKlxuICAgKiBAcGFyYW0gZm9yY2VSZWZyZXNoIC0gU2kgdHJ1ZSwgZnVlcnphIGxhIHJlbm92YWNpw7NuIGRlbCB0b2tlblxuICAgKiBAcmV0dXJucyBBcnJheSBjb24gaW5mb3JtYWNpw7NuIGRlIGNhZGEgb3JnYW5pemFjacOzblxuICAgKi9cbiAgYXN5bmMgZ2V0T3JnYW5pemF0aW9ucyhmb3JjZVJlZnJlc2ggPSBmYWxzZSk6IFByb21pc2U8T3JnYW5pemF0aW9uSW5mb1tdPiB7XG4gICAgY29uc3QgbWVtYmVyc2hpcHMgPSBhd2FpdCB0aGlzLmdldE1lbWJlcnNoaXBzKGZvcmNlUmVmcmVzaCk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG1lbWJlcnNoaXBzKS5tYXAoKFtpZCwgaW5mb10pID0+ICh7XG4gICAgICBpZCxcbiAgICAgIHJvbGVJZDogaW5mby5yb2xlSWQsXG4gICAgICByb2xlTmFtZTogaW5mby5yb2xlTmFtZSxcbiAgICAgIHBlcm1pc3Npb25zOiBpbmZvLnBlcm1pc3Npb25zLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxvcyBJRHMgZGUgdG9kYXMgbGFzIG9yZ2FuaXphY2lvbmVzIGRlbCB1c3VhcmlvLlxuICAgKlxuICAgKiBAcmV0dXJucyBBcnJheSBkZSBJRHMgZGUgb3JnYW5pemFjaW9uZXNcbiAgICovXG4gIGFzeW5jIGdldE9yZ2FuaXphdGlvbklkcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgbWVtYmVyc2hpcHMgPSBhd2FpdCB0aGlzLmdldE1lbWJlcnNoaXBzKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG1lbWJlcnNoaXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHBlcnRlbmVjZSBhIHVuYSBvcmdhbml6YWNpw7NuLlxuICAgKlxuICAgKiBAcGFyYW0gb3JnSWQgLSBJRCBkZSBsYSBvcmdhbml6YWNpw7NuXG4gICAqIEByZXR1cm5zIHRydWUgc2kgZWwgdXN1YXJpbyBlcyBtaWVtYnJvXG4gICAqL1xuICBhc3luYyBpc01lbWJlck9mKG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBtZW1iZXJzaGlwcyA9IGF3YWl0IHRoaXMuZ2V0TWVtYmVyc2hpcHMoKTtcbiAgICByZXR1cm4gb3JnSWQgaW4gbWVtYmVyc2hpcHM7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCByb2wgZGVsIHVzdWFyaW8gZW4gdW5hIG9yZ2FuaXphY2nDs24uXG4gICAqXG4gICAqIEBwYXJhbSBvcmdJZCAtIElEIGRlIGxhIG9yZ2FuaXphY2nDs25cbiAgICogQHJldHVybnMgSUQgZGVsIHJvbCBvIG51bGwgc2kgbm8gZXMgbWllbWJyb1xuICAgKi9cbiAgYXN5bmMgZ2V0Um9sZUluT3JnKG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBtZW1iZXJzaGlwcyA9IGF3YWl0IHRoaXMuZ2V0TWVtYmVyc2hpcHMoKTtcbiAgICByZXR1cm4gbWVtYmVyc2hpcHNbb3JnSWRdPy5yb2xlSWQgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxvcyBwZXJtaXNvcyBkZWwgdXN1YXJpbyBlbiB1bmEgb3JnYW5pemFjacOzbi5cbiAgICpcbiAgICogQHBhcmFtIG9yZ0lkIC0gSUQgZGUgbGEgb3JnYW5pemFjacOzblxuICAgKiBAcmV0dXJucyBBcnJheSBkZSBwZXJtaXNvcyBlbiBmb3JtYXRvICdyZXNvdXJjZTphY3Rpb24nXG4gICAqL1xuICBhc3luYyBnZXRQZXJtaXNzaW9uc0luT3JnKG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgbWVtYmVyc2hpcHMgPSBhd2FpdCB0aGlzLmdldE1lbWJlcnNoaXBzKCk7XG4gICAgcmV0dXJuIG1lbWJlcnNoaXBzW29yZ0lkXT8ucGVybWlzc2lvbnMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB0aWVuZSB1biBwZXJtaXNvIGVzcGVjw61maWNvIGVuIHVuYSBvcmdhbml6YWNpw7NuLlxuICAgKiBTb3BvcnRhIHdpbGRjYXJkczogJ3Jlc291cmNlOionIHkgJyo6KicgKHN1cGVyIGFkbWluKS5cbiAgICpcbiAgICogQHBhcmFtIG9yZ0lkIC0gSUQgZGUgbGEgb3JnYW5pemFjacOzblxuICAgKiBAcGFyYW0gcmVzb3VyY2UgLSBSZWN1cnNvIGEgdmVyaWZpY2FyIChlajogJ3VzZXJzJywgJ2RvY3VtZW50cycpXG4gICAqIEBwYXJhbSBhY3Rpb24gLSBBY2Npw7NuIGEgdmVyaWZpY2FyIChlajogJ3JlYWQnLCAnd3JpdGUnLCAnY3JlYXRlJywgJ2RlbGV0ZScpXG4gICAqIEByZXR1cm5zIHRydWUgc2kgdGllbmUgZWwgcGVybWlzb1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFZlcmlmaWNhciBwZXJtaXNvIGVzcGVjw61maWNvXG4gICAqIGNvbnN0IGNhblJlYWRVc2VycyA9IGF3YWl0IGZpcmViYXNlU2VydmljZS5oYXNQZXJtaXNzaW9uKCdvcmdfYWJjJywgJ3VzZXJzJywgJ3JlYWQnKTtcbiAgICpcbiAgICogLy8gVmVyaWZpY2FyIGVuIGxhIG9yZ2FuaXphY2nDs24gYWN0aXZhXG4gICAqIGNvbnN0IG9yZ0lkID0gYXdhaXQgZmlyZWJhc2VTZXJ2aWNlLmdldEFjdGl2ZU9yZygpO1xuICAgKiBjb25zdCBjYW5FZGl0ID0gYXdhaXQgZmlyZWJhc2VTZXJ2aWNlLmhhc1Blcm1pc3Npb24ob3JnSWQhLCAnZG9jdW1lbnRzJywgJ3dyaXRlJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgaGFzUGVybWlzc2lvbihvcmdJZDogc3RyaW5nLCByZXNvdXJjZTogc3RyaW5nLCBhY3Rpb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgdGhpcy5nZXRQZXJtaXNzaW9uc0luT3JnKG9yZ0lkKTtcbiAgICBjb25zdCBwZXJtaXNzaW9uID0gYCR7cmVzb3VyY2V9OiR7YWN0aW9ufWA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgcGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvbikgfHxcbiAgICAgIHBlcm1pc3Npb25zLmluY2x1ZGVzKGAke3Jlc291cmNlfToqYCkgfHxcbiAgICAgIHBlcm1pc3Npb25zLmluY2x1ZGVzKCcqOionKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyBwdWVkZSBsZWVyIHVuIHJlY3Vyc28gZW4gdW5hIG9yZ2FuaXphY2nDs24uXG4gICAqIEF0YWpvIHBhcmEgaGFzUGVybWlzc2lvbihvcmdJZCwgcmVzb3VyY2UsICdyZWFkJykuXG4gICAqL1xuICBhc3luYyBjYW5SZWFkKG9yZ0lkOiBzdHJpbmcsIHJlc291cmNlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5oYXNQZXJtaXNzaW9uKG9yZ0lkLCByZXNvdXJjZSwgJ3JlYWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHB1ZWRlIGVzY3JpYmlyIHVuIHJlY3Vyc28gZW4gdW5hIG9yZ2FuaXphY2nDs24uXG4gICAqIEF0YWpvIHBhcmEgaGFzUGVybWlzc2lvbihvcmdJZCwgcmVzb3VyY2UsICd3cml0ZScpLlxuICAgKi9cbiAgYXN5bmMgY2FuV3JpdGUob3JnSWQ6IHN0cmluZywgcmVzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Blcm1pc3Npb24ob3JnSWQsIHJlc291cmNlLCAnd3JpdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHB1ZWRlIGNyZWFyIHVuIHJlY3Vyc28gZW4gdW5hIG9yZ2FuaXphY2nDs24uXG4gICAqIEF0YWpvIHBhcmEgaGFzUGVybWlzc2lvbihvcmdJZCwgcmVzb3VyY2UsICdjcmVhdGUnKS5cbiAgICovXG4gIGFzeW5jIGNhbkNyZWF0ZShvcmdJZDogc3RyaW5nLCByZXNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbihvcmdJZCwgcmVzb3VyY2UsICdjcmVhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHB1ZWRlIGVsaW1pbmFyIHVuIHJlY3Vyc28gZW4gdW5hIG9yZ2FuaXphY2nDs24uXG4gICAqIEF0YWpvIHBhcmEgaGFzUGVybWlzc2lvbihvcmdJZCwgcmVzb3VyY2UsICdkZWxldGUnKS5cbiAgICovXG4gIGFzeW5jIGNhbkRlbGV0ZShvcmdJZDogc3RyaW5nLCByZXNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbihvcmdJZCwgcmVzb3VyY2UsICdkZWxldGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHB1ZWRlIGFkbWluaXN0cmFyIHVuIHJlY3Vyc28gZW4gdW5hIG9yZ2FuaXphY2nDs24uXG4gICAqIEVxdWl2YWxlIGEgdGVuZXIgJ3Jlc291cmNlOionIG8gJyo6KicuXG4gICAqL1xuICBhc3luYyBjYW5NYW5hZ2Uob3JnSWQ6IHN0cmluZywgcmVzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgdGhpcy5nZXRQZXJtaXNzaW9uc0luT3JnKG9yZ0lkKTtcbiAgICByZXR1cm4gcGVybWlzc2lvbnMuaW5jbHVkZXMoYCR7cmVzb3VyY2V9OipgKSB8fCBwZXJtaXNzaW9ucy5pbmNsdWRlcygnKjoqJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyBlcyBzdXBlciBhZG1pbiBlbiB1bmEgb3JnYW5pemFjacOzbi5cbiAgICogU3VwZXIgYWRtaW4gdGllbmUgZWwgcGVybWlzbyAnKjoqJy5cbiAgICovXG4gIGFzeW5jIGlzU3VwZXJBZG1pbihvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSBhd2FpdCB0aGlzLmdldFBlcm1pc3Npb25zSW5Pcmcob3JnSWQpO1xuICAgIHJldHVybiBwZXJtaXNzaW9ucy5pbmNsdWRlcygnKjoqJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyBlcyBhZG1pbiBlbiB1bmEgb3JnYW5pemFjacOzbi5cbiAgICovXG4gIGFzeW5jIGlzQWRtaW5Jbk9yZyhvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgcm9sZSA9IGF3YWl0IHRoaXMuZ2V0Um9sZUluT3JnKG9yZ0lkKTtcbiAgICByZXR1cm4gcm9sZSA9PT0gJ2FkbWluJyB8fCByb2xlID09PSAnc3VwZXJfYWRtaW4nO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEVzcGVyYSBhIHF1ZSBlbCBlc3RhZG8gZGUgYXV0ZW50aWNhY2nDs24gZXN0w6kgZGV0ZXJtaW5hZG8uXG4gICAqIMOadGlsIGVuIGd1YXJkcyBvIGFsIGluaWNpYWxpemFyIGxhIGFwcC5cbiAgICpcbiAgICogQHJldHVybnMgVXN1YXJpbyBhY3R1YWwgbyBudWxsXG4gICAqL1xuICB3YWl0Rm9yQXV0aCgpOiBQcm9taXNlPEZpcmViYXNlVXNlciB8IG51bGw+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnN0YXRlJC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBpZiAoIXN0YXRlLmlzTG9hZGluZykge1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUudXNlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgY29uZmlndXJhY2nDs24gYWN0dWFsIGRlIEZpcmViYXNlLlxuICAgKi9cbiAgZ2V0Q29uZmlnKCk6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYSBzaSBsb3MgZW11bGFkb3JlcyBlc3TDoW4gaGFiaWxpdGFkb3MuXG4gICAqL1xuICBpc1VzaW5nRW11bGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMuY29uZmlnLmVtdWxhdG9yPy5maXJlc3RvcmUgfHxcbiAgICAgIHRoaXMuY29uZmlnLmVtdWxhdG9yPy5hdXRoIHx8XG4gICAgICB0aGlzLmNvbmZpZy5lbXVsYXRvcj8uc3RvcmFnZVxuICAgICk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUFJJVkFET1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE1hcGVhIHVuIFVzZXIgZGUgRmlyZWJhc2UgYSBudWVzdHJhIGludGVyZmFjZSBGaXJlYmFzZVVzZXJcbiAgICovXG4gIHByaXZhdGUgbWFwVXNlcih1c2VyOiBVc2VyKTogRmlyZWJhc2VVc2VyIHtcbiAgICByZXR1cm4ge1xuICAgICAgdWlkOiB1c2VyLnVpZCxcbiAgICAgIGVtYWlsOiB1c2VyLmVtYWlsLFxuICAgICAgZGlzcGxheU5hbWU6IHVzZXIuZGlzcGxheU5hbWUsXG4gICAgICBwaG90b1VSTDogdXNlci5waG90b1VSTCxcbiAgICAgIGVtYWlsVmVyaWZpZWQ6IHVzZXIuZW1haWxWZXJpZmllZCxcbiAgICAgIGlzQW5vbnltb3VzOiB1c2VyLmlzQW5vbnltb3VzLFxuICAgICAgcHJvdmlkZXJJZDogdXNlci5wcm92aWRlcklkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmllcnRlIGVycm9yZXMgZGUgRmlyZWJhc2UgYSBtZW5zYWplcyBlbiBlc3Bhw7FvbFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBjb25zdCBjb2RlID0gKGVycm9yIGFzIHsgY29kZT86IHN0cmluZyB9KS5jb2RlO1xuXG4gICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSAnYXV0aC9pbnZhbGlkLWN1c3RvbS10b2tlbic6XG4gICAgICAgICAgcmV0dXJuICdUb2tlbiBkZSBhdXRlbnRpY2FjacOzbiBpbnbDoWxpZG8nO1xuICAgICAgICBjYXNlICdhdXRoL2N1c3RvbS10b2tlbi1taXNtYXRjaCc6XG4gICAgICAgICAgcmV0dXJuICdFbCB0b2tlbiBubyBjb3JyZXNwb25kZSBhIGVzdGUgcHJveWVjdG8nO1xuICAgICAgICBjYXNlICdhdXRoL25ldHdvcmstcmVxdWVzdC1mYWlsZWQnOlxuICAgICAgICAgIHJldHVybiAnRXJyb3IgZGUgY29uZXhpw7NuLiBWZXJpZmljYSB0dSBjb25leGnDs24gYSBpbnRlcm5ldCc7XG4gICAgICAgIGNhc2UgJ2F1dGgvdG9vLW1hbnktcmVxdWVzdHMnOlxuICAgICAgICAgIHJldHVybiAnRGVtYXNpYWRvcyBpbnRlbnRvcy4gSW50ZW50YSBkZSBudWV2byBtw6FzIHRhcmRlJztcbiAgICAgICAgY2FzZSAnYXV0aC91c2VyLWRpc2FibGVkJzpcbiAgICAgICAgICByZXR1cm4gJ0VzdGEgY3VlbnRhIGhhIHNpZG8gZGVzaGFiaWxpdGFkYSc7XG4gICAgICAgIGNhc2UgJ2F1dGgvdXNlci1ub3QtZm91bmQnOlxuICAgICAgICAgIHJldHVybiAnVXN1YXJpbyBubyBlbmNvbnRyYWRvJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCAnRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24gZGVzY29ub2NpZG8nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24gZGVzY29ub2NpZG8nO1xuICB9XG59XG4iXX0=
@@ -65,8 +65,11 @@ export class NotificationsService {
65
65
  return this.collectionReady$.asObservable();
66
66
  }
67
67
  return this.collectionReady$.pipe(switchMap(collection => {
68
- if (!collection)
68
+ if (!collection) {
69
+ console.log('[Notifs] collectionWhenAuthReady$ — collection is null (not initialized)');
69
70
  return of(null);
71
+ }
72
+ console.log('[Notifs] collectionWhenAuthReady$ — collection ready, awaiting Firebase Auth');
70
73
  return from(fb.whenFirebaseAuthReady()).pipe(map(() => collection));
71
74
  }));
72
75
  }
@@ -109,6 +112,7 @@ export class NotificationsService {
109
112
  * un userId diferente al del usuario autenticado.
110
113
  */
111
114
  initialize(userId) {
115
+ console.log(`[Notifs] initialize uid=${userId}`);
112
116
  if (!this.collectionFactory) {
113
117
  console.warn('[Notifications] FirestoreCollectionFactory not available. Ensure provideValtechFirebase() is configured.');
114
118
  return;
@@ -152,8 +156,11 @@ export class NotificationsService {
152
156
  */
153
157
  getAll(limit = DEFAULT_LIMIT) {
154
158
  return this.collectionWhenAuthReady$().pipe(switchMap(collection => {
155
- if (!collection)
159
+ if (!collection) {
160
+ console.warn('[Notifs] getAll — collection null → returning EMPTY (no emission)');
156
161
  return EMPTY;
162
+ }
163
+ console.log('[Notifs] getAll — attaching Firestore watchAll listener');
157
164
  return collection.watchAll({
158
165
  orderBy: [{ field: 'createdAt', direction: 'desc' }],
159
166
  limit,
@@ -271,4 +278,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
271
278
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.FirestoreCollectionFactory, decorators: [{
272
279
  type: Optional
273
280
  }] }] });
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9ub3RpZmljYXRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUlyRCxvREFBb0Q7QUFDcEQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBNkJ6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQWUvQixZQUNVLFFBQWtCLEVBQ04saUJBQTZDO1FBRHpELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDTixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTRCO1FBaEIzRCxlQUFVLEdBQWlELElBQUksQ0FBQztRQUNoRSxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDcEMscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQzVDLElBQUksQ0FDTCxDQUFDO1FBRUYsOERBQThEO1FBQ3RELGdCQUFXLEdBQXVCLElBQUksQ0FBQztRQUUvQyx3RUFBd0U7UUFDeEUsNkVBQTZFO1FBQzdFLHlCQUF5QjtRQUNqQixvQkFBZSxHQUEyQixJQUFJLENBQUM7UUFNckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMs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QUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDOytHQW5RVSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQURQLE1BQU07OzRGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFrQjdCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5vdGlmaWNhdGlvbnMgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIHBhcmEgbGVlciBub3RpZmljYWNpb25lcyBkZXNkZSBGaXJlc3RvcmUuXG4gKiBFbCBiYWNrZW5kIGVzY3JpYmUgbGFzIG5vdGlmaWNhY2lvbmVzLCBlbCBmcm9udGVuZCBzb2xvIGxhcyBsZWUgeSBhY3R1YWxpemEgZXN0YWRvLlxuICpcbiAqIFNlIGF1dG8taW5pY2lhbGl6YSBjdWFuZG8gQXV0aFNlcnZpY2UgdGllbmUgdW4gdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAqIFRhbWJpw6luIHB1ZWRlIGluaWNpYWxpemFyc2UgbWFudWFsbWVudGUgY29uIGBpbml0aWFsaXplKHVzZXJJZClgLlxuICovXG5cbmltcG9ydCB7IGVmZmVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9wdGlvbmFsLCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgRU1QVFksIGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuL2ZpcmViYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlyZXN0b3JlQ29sbGVjdGlvbkZhY3RvcnksIFR5cGVkQ29sbGVjdGlvbiB9IGZyb20gJy4vZmlyZXN0b3JlLWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgRmlyZXN0b3JlRG9jdW1lbnQgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqIEzDrW1pdGUgcG9yIGRlZmVjdG8gZGUgbm90aWZpY2FjaW9uZXMgYSBjYXJnYXIgKi9cbmNvbnN0IERFRkFVTFRfTElNSVQgPSA1MDtcblxuLyoqXG4gKiBEb2N1bWVudG8gZGUgbm90aWZpY2FjacOzbiBlbiBGaXJlc3RvcmUuXG4gKiBFc3RydWN0dXJhIGVzY3JpdGEgcG9yIGVsIGJhY2tlbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uRG9jdW1lbnQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudCB7XG4gIC8qKiBUw610dWxvIGRlIGxhIG5vdGlmaWNhY2nDs24gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIC8qKiBDdWVycG8gZGVsIG1lbnNhamUgKi9cbiAgYm9keT86IHN0cmluZztcbiAgLyoqIFVSTCBkZSBpbWFnZW4gKi9cbiAgaW1hZ2U/OiBzdHJpbmc7XG4gIC8qKiBEYXRvcyBwZXJzb25hbGl6YWRvcyAoZWo6IHJvdXRlLCBhY3Rpb25UeXBlKS4gTGVnYWN5IOKAlCBwcmVmZXJpciBhY3Rpb25Sb3V0ZSArIHBheWxvYWQgKi9cbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBUaXBvIGRlIG5vdGlmaWNhY2nDs24gKi9cbiAgdHlwZT86ICdmY20nIHwgJ3N5c3RlbScgfCAncmVtaW5kZXInIHwgc3RyaW5nO1xuICAvKiogU2kgbGEgbm90aWZpY2FjacOzbiBmdWUgbGXDrWRhICovXG4gIGlzUmVhZDogYm9vbGVhbjtcbiAgLyoqIEFwcElEIG9yaWdlbiAoZWo6ICdzaG93Y2FzZScsICdzaWdpZnknKS4gUGVybWl0ZSBjcm9zcy1hcHAgcm91dGluZyAqL1xuICBhcHBJZD86IHN0cmluZztcbiAgLyoqIE9yZ0lEIGFzb2NpYWRvIChzaSBsYSBub3RpZiBlcyBvcmctc2NvcGVkKS4gSGFiaWxpdGEgc3dpdGNoLW9yZyBhbCBhYnJpciAqL1xuICBvcmdJZD86IHN0cmluZztcbiAgLyoqIFJvdXRlIGRlc3Rpbm8gYWwgY2xpY2sgKGVqOiAnL2FwcC9kb2NzLzEyMycpICovXG4gIGFjdGlvblJvdXRlPzogc3RyaW5nO1xuICAvKiogUGF5bG9hZCBlc3RydWN0dXJhZG8gcGFyYSBhY2Npb25lcyAocmVlbXBsYXpvIHRpcGFkbyBkZSBgZGF0YWApICovXG4gIHBheWxvYWQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBTZXJ2aWNpbyBwYXJhIGxlZXIgbm90aWZpY2FjaW9uZXMgZGVzZGUgRmlyZXN0b3JlLlxuICpcbiAqIFNlIGF1dG8taW5pY2lhbGl6YSBjdWFuZG8gQXV0aFNlcnZpY2UgdGllbmUgdW4gdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAqIE5vIHJlcXVpZXJlIGxsYW1hciBhIGBpbml0aWFsaXplKClgIG1hbnVhbG1lbnRlIHNpIEF1dGhTZXJ2aWNlIGVzdMOhIGNvbmZpZ3VyYWRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDb24gQXV0aFNlcnZpY2UgY29uZmlndXJhZG86IGF1dG8taW5pY2lhbGl6YWNpw7NuXG4gKiAvLyBTb2xvIGlueWVjdGFyIHkgdXNhciBkaXJlY3RhbWVudGVcbiAqIHByaXZhdGUgbm90aWZpY2F0aW9ucyA9IGluamVjdChOb3RpZmljYXRpb25zU2VydmljZSk7XG4gKlxuICogbm90aWZpY2F0aW9ucyQgPSB0aGlzLm5vdGlmaWNhdGlvbnMuZ2V0QWxsKCk7XG4gKiB1bnJlYWRDb3VudCQgPSB0aGlzLm5vdGlmaWNhdGlvbnMuZ2V0VW5yZWFkQ291bnQoKTtcbiAqXG4gKiAvLyBTaW4gQXV0aFNlcnZpY2U6IGluaWNpYWxpemFjacOzbiBtYW51YWxcbiAqIHRoaXMubm90aWZpY2F0aW9ucy5pbml0aWFsaXplKHVzZXJJZCk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25zU2VydmljZSB7XG4gIHByaXZhdGUgY29sbGVjdGlvbjogVHlwZWRDb2xsZWN0aW9uPE5vdGlmaWNhdGlvbkRvY3VtZW50PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRVc2VySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbGxlY3Rpb25SZWFkeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFR5cGVkQ29sbGVjdGlvbjxOb3RpZmljYXRpb25Eb2N1bWVudD4gfCBudWxsPihcbiAgICBudWxsXG4gICk7XG5cbiAgLy8gSW55ZWNjacOzbiBvcGNpb25hbCAtIEF1dGhTZXJ2aWNlIHB1ZWRlIG5vIGVzdGFyIGNvbmZpZ3VyYWRvXG4gIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gSW55ZWNjacOzbiBvcGNpb25hbCAtIEZpcmViYXNlU2VydmljZSBnYXRlYSBsb3MgbGlzdGVuZXJzIGhhc3RhIHF1ZSBsYVxuICAvLyBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggZXN0w6kgbGlzdGEgKGNpZXJyYSBsYSB2ZW50YW5hIGRlIHBlcm1pc3Npb24tZGVuaWVkXG4gIC8vIGVuIGNvbGQgc3RhcnQgZGUgUFdBKS5cbiAgcHJpdmF0ZSBmaXJlYmFzZVNlcnZpY2U6IEZpcmViYXNlU2VydmljZSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgY29sbGVjdGlvbkZhY3Rvcnk6IEZpcmVzdG9yZUNvbGxlY3Rpb25GYWN0b3J5XG4gICkge1xuICAgIHRoaXMuZmlyZWJhc2VTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoRmlyZWJhc2VTZXJ2aWNlLCBudWxsKTtcbiAgICAvLyBJbnRlbnRhciBvYnRlbmVyIEF1dGhTZXJ2aWNlIGRlIGZvcm1hIGxhenkgKHB1ZWRlIG5vIGVzdGFyIGNvbmZpZ3VyYWRvKVxuICAgIHRoaXMuc2V0dXBBdXRvSW5pdGlhbGl6YXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHYXRlIGRlIEZpcmViYXNlIEF1dGg6IGVtaXRlIGxhIGNvbGVjY2nDs24gbGlzdGEgU09MTyBjdWFuZG8gbGEgc2VzacOzbiBkZVxuICAgKiBGaXJlYmFzZSBBdXRoIGVzdMOhIGNvbmZpcm1hZGEuIFNpbiBGaXJlYmFzZVNlcnZpY2UgZGlzcG9uaWJsZSwgbm8gZ2F0ZWFcbiAgICogKGRlZ3JhZGEgYWwgY29tcG9ydGFtaWVudG8gcHJldmlvKS4gRXNwZXJhIGEgcXVlIGBmaXJlYmFzZUF1dGhSZWFkeSRgXG4gICAqIGVtaXRhIGFudGVzIGRlIHByb3BhZ2FyIGxhIGNvbGVjY2nDs24g4oCUIGFzw60gZWwgbGlzdGVuZXIgRmlyZXN0b3JlIG51bmNhIHNlXG4gICAqIGFkanVudGEgYW50ZXMgZGUgcXVlIGByZXF1ZXN0LmF1dGhgIGVzdMOpIGRpc3BvbmlibGUuXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3Rpb25XaGVuQXV0aFJlYWR5JCgpOiBPYnNlcnZhYmxlPFR5cGVkQ29sbGVjdGlvbjxOb3RpZmljYXRpb25Eb2N1bWVudD4gfCBudWxsPiB7XG4gICAgY29uc3QgZmIgPSB0aGlzLmZpcmViYXNlU2VydmljZTtcbiAgICBpZiAoIWZiKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uUmVhZHkkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uUmVhZHkkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY29sbGVjdGlvbiA9PiB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbikgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICByZXR1cm4gZnJvbShmYi53aGVuRmlyZWJhc2VBdXRoUmVhZHkoKSkucGlwZShtYXAoKCkgPT4gY29sbGVjdGlvbikpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBhdXRvLWluaWNpYWxpemFjacOzbiBvYnNlcnZhbmRvIGVsIGVzdGFkbyBkZSBBdXRoU2VydmljZS5cbiAgICogU2UgZWplY3V0YSBlbiBlbCBjb250ZXh0byBkZWwgaW5qZWN0b3IgcGFyYSBwb2RlciB1c2FyIGVmZmVjdCgpLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cEF1dG9Jbml0aWFsaXphdGlvbigpOiB2b2lkIHtcbiAgICAvLyBPYnRlbmVyIEF1dGhTZXJ2aWNlIGRlIGZvcm1hIGxhenlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hdXRoU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEF1dGhTZXJ2aWNlLCBudWxsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEF1dGhTZXJ2aWNlIG5vIGVzdMOhIGNvbmZpZ3VyYWRvLCBubyBoYXkgYXV0by1pbmljaWFsaXphY2nDs25cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVc2FyIHJ1bkluSW5qZWN0aW9uQ29udGV4dCBwYXJhIHBvZGVyIGNyZWFyIGVsIGVmZmVjdFxuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5hdXRoU2VydmljZSEudXNlcigpO1xuXG4gICAgICAgIGlmICh1c2VyPy51c2VySWQgJiYgdGhpcy5jdXJyZW50VXNlcklkICE9PSB1c2VyLnVzZXJJZCkge1xuICAgICAgICAgIC8vIFVzdWFyaW8gYXV0ZW50aWNhZG86IGluaWNpYWxpemFyIGNvbiBzdSBJRFxuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSh1c2VyLnVzZXJJZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXVzZXIgJiYgdGhpcy5jdXJyZW50VXNlcklkKSB7XG4gICAgICAgICAgLy8gTG9nb3V0OiBsaW1waWFyIGVzdGFkb1xuICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBwYXJhIHVuIHVzdWFyaW8gZXNwZWPDrWZpY28uXG4gICAqXG4gICAqIE5PVEE6IFNlIGxsYW1hIGF1dG9tw6F0aWNhbWVudGUgc2kgQXV0aFNlcnZpY2UgZXN0w6EgY29uZmlndXJhZG8uXG4gICAqIFNvbG8gdXNhciBtYW51YWxtZW50ZSBzaSBBdXRoU2VydmljZSBubyBlc3TDoSBkaXNwb25pYmxlIG8gc2UgbmVjZXNpdGFcbiAgICogdW4gdXNlcklkIGRpZmVyZW50ZSBhbCBkZWwgdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAgICovXG4gIGluaXRpYWxpemUodXNlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbkZhY3RvcnkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tOb3RpZmljYXRpb25zXSBGaXJlc3RvcmVDb2xsZWN0aW9uRmFjdG9yeSBub3QgYXZhaWxhYmxlLiBFbnN1cmUgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSgpIGlzIGNvbmZpZ3VyZWQuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRVc2VySWQgPSB1c2VySWQ7XG5cbiAgICAvLyBQYXRoIGdsb2JhbCBjcm9zcy1hcHA6IC91c2Vycy97dWlkfS9ub3RpZmljYXRpb25zIChzaW4gcHJlZmlqbyBhcHBzL3thcHBJZH0vKS5cbiAgICAvLyBza2lwQXBwUHJlZml4IGJ5cGFzc2EgRmlyZXN0b3JlU2VydmljZS5wcmVmaXhDb2xsZWN0aW9uUGF0aCBwYXJhIGZhbi1vdXQgY29tcGFydGlkby5cbiAgICBjb25zdCBiYXNlUGF0aCA9IGB1c2Vycy8ke3VzZXJJZH0vbm90aWZpY2F0aW9uc2A7XG5cbiAgICB0aGlzLmNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb25GYWN0b3J5LmNyZWF0ZTxOb3RpZmljYXRpb25Eb2N1bWVudD4oYmFzZVBhdGgsIHtcbiAgICAgIHRpbWVzdGFtcHM6IHRydWUsXG4gICAgICBza2lwQXBwUHJlZml4OiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMuY29sbGVjdGlvblJlYWR5JC5uZXh0KHRoaXMuY29sbGVjdGlvbik7XG5cbiAgICBjb25zb2xlLmxvZygnW05vdGlmaWNhdGlvbnNdIEluaXRpYWxpemVkIHdpdGggcGF0aDonLCBiYXNlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgc2VydmljaW8gZXN0w6EgaW5pY2lhbGl6YWRvLlxuICAgKi9cbiAgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbiAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIElEIGRlbCB1c3VhcmlvIGFjdHVhbC5cbiAgICovXG4gIGdldCB1c2VySWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXJJZDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRUNUVVJBXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIG5vdGlmaWNhY2lvbmVzIG9yZGVuYWRhcyBwb3IgZmVjaGEgZGVzY2VuZGVudGUgKHJlYWwtdGltZSkuXG4gICAqIFNlIGFjdHVhbGl6YSBhdXRvbcOhdGljYW1lbnRlIGN1YW5kbyBjYW1iaWFuIGxvcyBkYXRvcy5cbiAgICpcbiAgICogRWwgbGlzdGVuZXIgRmlyZXN0b3JlIE5PIHNlIGFkanVudGEgaGFzdGEgcXVlIGxhIHNlc2nDs24gZGUgRmlyZWJhc2UgQXV0aFxuICAgKiBlc3TDqSBjb25maXJtYWRhIChgRmlyZWJhc2VTZXJ2aWNlLmZpcmViYXNlQXV0aFJlYWR5YCkuIEVzdG8gY2llcnJhIGxhXG4gICAqIHZlbnRhbmEgZGUgYHBlcm1pc3Npb24tZGVuaWVkYCBlbiBjb2xkIHN0YXJ0IGRlIFBXQSwgZG9uZGUgZWwgSldUIGRlbFxuICAgKiBiYWNrZW5kIHB1ZWRlIGVzdGFyIGxpc3RvIGFudGVzIHF1ZSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGguXG4gICAqXG4gICAqIEBwYXJhbSBsaW1pdCAtIE3DoXhpbW8gZGUgbm90aWZpY2FjaW9uZXMgYSBjYXJnYXIgKGRlZmF1bHQ6IDUwKVxuICAgKi9cbiAgZ2V0QWxsKGxpbWl0ID0gREVGQVVMVF9MSU1JVCk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uRG9jdW1lbnRbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25XaGVuQXV0aFJlYWR5JCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY29sbGVjdGlvbiA9PiB7XG4gICAgICAgIGlmICghY29sbGVjdGlvbikgcmV0dXJuIEVNUFRZO1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi53YXRjaEFsbCh7XG4gICAgICAgICAgb3JkZXJCeTogW3sgZmllbGQ6ICdjcmVhdGVkQXQnLCBkaXJlY3Rpb246ICdkZXNjJyB9XSxcbiAgICAgICAgICBsaW1pdCxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBub3RpZmljYWNpb25lcyAob25lLXRpbWUgZmV0Y2ggc2luIGxpc3RlbmVyKS5cbiAgICogw5p0aWwgcGFyYSBjYXJnYXMgaW5pY2lhbGVzIHNpbiBuZWNlc2lkYWQgZGUgdXBkYXRlcyBlbiB0aWVtcG8gcmVhbC5cbiAgICpcbiAgICogQHBhcmFtIGxpbWl0IC0gTcOheGltbyBkZSBub3RpZmljYWNpb25lcyBhIGNhcmdhciAoZGVmYXVsdDogNTApXG4gICAqL1xuICBhc3luYyBnZXRBbGxPbmNlKGxpbWl0ID0gREVGQVVMVF9MSU1JVCk6IFByb21pc2U8Tm90aWZpY2F0aW9uRG9jdW1lbnRbXT4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uLmdldEFsbE9uY2Uoe1xuICAgICAgb3JkZXJCeTogW3sgZmllbGQ6ICdjcmVhdGVkQXQnLCBkaXJlY3Rpb246ICdkZXNjJyB9XSxcbiAgICAgIGxpbWl0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgc29sbyBub3RpZmljYWNpb25lcyBubyBsZcOtZGFzIChyZWFsLXRpbWUsIGZpbHRyYWRvIHNlcnZlci1zaWRlKS5cbiAgICpcbiAgICogQHBhcmFtIGxpbWl0IC0gTcOheGltbyBkZSBub3RpZmljYWNpb25lcyAoZGVmYXVsdDogNTApXG4gICAqL1xuICBnZXRVbnJlYWQobGltaXQgPSBERUZBVUxUX0xJTUlUKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25Eb2N1bWVudFtdPiB7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHJldHVybiBvZihbXSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uLndhdGNoQWxsKHtcbiAgICAgIHdoZXJlOiBbeyBmaWVsZDogJ2lzUmVhZCcsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZmFsc2UgfV0sXG4gICAgICBvcmRlckJ5OiBbeyBmaWVsZDogJ2NyZWF0ZWRBdCcsIGRpcmVjdGlvbjogJ2Rlc2MnIH1dLFxuICAgICAgbGltaXQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3VlbnRhIG5vdGlmaWNhY2lvbmVzIG5vIGxlw61kYXMgdXNhbmRvIHNlcnZlci1zaWRlIGFnZ3JlZ2F0aW9uIHF1ZXJ5LlxuICAgKiBObyBkZXNjYXJnYSBkb2N1bWVudG9zIOKAlCBlZmljaWVudGUgcGFyYSBiYWRnZXMgZW4gVUkuXG4gICAqXG4gICAqIEdhdGVhZG8gcG9yIGBmaXJlYmFzZUF1dGhSZWFkeWAg4oCUIGxhIGFnZ3JlZ2F0aW9uIHF1ZXJ5IG5vIHNlIGVqZWN1dGEgaGFzdGFcbiAgICogcXVlIGxhIHNlc2nDs24gZGUgRmlyZWJhc2UgQXV0aCBlc3TDqSBsaXN0YS5cbiAgICovXG4gIGdldFVucmVhZENvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbldoZW5BdXRoUmVhZHkkKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChjb2xsZWN0aW9uID0+IHtcbiAgICAgICAgaWYgKCFjb2xsZWN0aW9uKSByZXR1cm4gb2YoMCk7XG4gICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgIGNvbGxlY3Rpb24uY291bnQoe1xuICAgICAgICAgICAgd2hlcmU6IFt7IGZpZWxkOiAnaXNSZWFkJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmYWxzZSB9XSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW5hIG5vdGlmaWNhY2nDs24gcG9yIElELlxuICAgKi9cbiAgYXN5bmMgZ2V0QnlJZChub3RpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxOb3RpZmljYXRpb25Eb2N1bWVudCB8IG51bGw+IHtcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbi5nZXRCeUlkKG5vdGlmaWNhdGlvbklkKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBQ0NJT05FU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogTWFyY2EgdW5hIG5vdGlmaWNhY2nDs24gY29tbyBsZcOtZGEuXG4gICAqL1xuICBhc3luYyBtYXJrQXNSZWFkKG5vdGlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi51cGRhdGUobm90aWZpY2F0aW9uSWQsIHsgaXNSZWFkOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmNhIHRvZGFzIGxhcyBub3RpZmljYWNpb25lcyBubyBsZcOtZGFzIGNvbW8gbGXDrWRhcyAoYmF0Y2ggd3JpdGUpLlxuICAgKi9cbiAgYXN5bmMgbWFya0FsbEFzUmVhZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgdW5yZWFkID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnF1ZXJ5KHtcbiAgICAgIHdoZXJlOiBbeyBmaWVsZDogJ2lzUmVhZCcsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZmFsc2UgfV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBpZHMgPSB1bnJlYWQubWFwKG4gPT4gbi5pZCEpLmZpbHRlcihCb29sZWFuKTtcbiAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uYmF0Y2hVcGRhdGUoaWRzLCB7IGlzUmVhZDogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbGltaW5hIHVuYSBub3RpZmljYWNpw7NuLlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKG5vdGlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGUobm90aWZpY2F0aW9uSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgdG9kYXMgbGFzIG5vdGlmaWNhY2lvbmVzIGRlbCB1c3VhcmlvIChiYXRjaCBkZWxldGUpLlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlQWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm47XG5cbiAgICBjb25zdCBhbGwgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZ2V0QWxsKCk7XG4gICAgY29uc3QgaWRzID0gYWxsLm1hcChuID0+IG4uaWQhKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmJhdGNoRGVsZXRlKGlkcyk7XG4gIH1cblxuICAvKipcbiAgICogTGltcGlhIGVsIGVzdGFkbyBkZWwgc2VydmljaW8uXG4gICAqIMOadGlsIHBhcmEgbG9nb3V0LlxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb2xsZWN0aW9uID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRVc2VySWQgPSBudWxsO1xuICAgIHRoaXMuY29sbGVjdGlvblJlYWR5JC5uZXh0KG51bGwpO1xuICB9XG59XG4iXX0=
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9ub3RpZmljYXRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUlyRCxvREFBb0Q7QUFDcEQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBNkJ6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQWUvQixZQUNVLFFBQWtCLEVBQ04saUJBQTZDO1FBRHpELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDTixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTRCO1FBaEIzRCxlQUFVLEdBQWlELElBQUksQ0FBQztRQUNoRSxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDcEMscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQzVDLElBQUksQ0FDTCxDQUFDO1FBRUYsOERBQThEO1FBQ3RELGdCQUFXLEdBQXVCLElBQUksQ0FBQztRQUUvQyx3RUFBd0U7UUFDeEUsNkVBQTZFO1FBQzdFLHlCQUF5QjtRQUNqQixvQkFBZSxHQUEyQixJQUFJLENBQUM7UUFNckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMs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QixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQzsrR0E1UVUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FEUCxNQUFNOzs0RkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBa0I3QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOb3RpZmljYXRpb25zIFNlcnZpY2VcbiAqXG4gKiBTZXJ2aWNpbyBwYXJhIGxlZXIgbm90aWZpY2FjaW9uZXMgZGVzZGUgRmlyZXN0b3JlLlxuICogRWwgYmFja2VuZCBlc2NyaWJlIGxhcyBub3RpZmljYWNpb25lcywgZWwgZnJvbnRlbmQgc29sbyBsYXMgbGVlIHkgYWN0dWFsaXphIGVzdGFkby5cbiAqXG4gKiBTZSBhdXRvLWluaWNpYWxpemEgY3VhbmRvIEF1dGhTZXJ2aWNlIHRpZW5lIHVuIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gKiBUYW1iacOpbiBwdWVkZSBpbmljaWFsaXphcnNlIG1hbnVhbG1lbnRlIGNvbiBgaW5pdGlhbGl6ZSh1c2VySWQpYC5cbiAqL1xuXG5pbXBvcnQgeyBlZmZlY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9maXJlYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpcmVzdG9yZUNvbGxlY3Rpb25GYWN0b3J5LCBUeXBlZENvbGxlY3Rpb24gfSBmcm9tICcuL2ZpcmVzdG9yZS1jb2xsZWN0aW9uJztcbmltcG9ydCB7IEZpcmVzdG9yZURvY3VtZW50IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKiBMw61taXRlIHBvciBkZWZlY3RvIGRlIG5vdGlmaWNhY2lvbmVzIGEgY2FyZ2FyICovXG5jb25zdCBERUZBVUxUX0xJTUlUID0gNTA7XG5cbi8qKlxuICogRG9jdW1lbnRvIGRlIG5vdGlmaWNhY2nDs24gZW4gRmlyZXN0b3JlLlxuICogRXN0cnVjdHVyYSBlc2NyaXRhIHBvciBlbCBiYWNrZW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkRvY3VtZW50IGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQge1xuICAvKiogVMOtdHVsbyBkZSBsYSBub3RpZmljYWNpw7NuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICAvKiogQ3VlcnBvIGRlbCBtZW5zYWplICovXG4gIGJvZHk/OiBzdHJpbmc7XG4gIC8qKiBVUkwgZGUgaW1hZ2VuICovXG4gIGltYWdlPzogc3RyaW5nO1xuICAvKiogRGF0b3MgcGVyc29uYWxpemFkb3MgKGVqOiByb3V0ZSwgYWN0aW9uVHlwZSkuIExlZ2FjeSDigJQgcHJlZmVyaXIgYWN0aW9uUm91dGUgKyBwYXlsb2FkICovXG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogVGlwbyBkZSBub3RpZmljYWNpw7NuICovXG4gIHR5cGU/OiAnZmNtJyB8ICdzeXN0ZW0nIHwgJ3JlbWluZGVyJyB8IHN0cmluZztcbiAgLyoqIFNpIGxhIG5vdGlmaWNhY2nDs24gZnVlIGxlw61kYSAqL1xuICBpc1JlYWQ6IGJvb2xlYW47XG4gIC8qKiBBcHBJRCBvcmlnZW4gKGVqOiAnc2hvd2Nhc2UnLCAnc2lnaWZ5JykuIFBlcm1pdGUgY3Jvc3MtYXBwIHJvdXRpbmcgKi9cbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIC8qKiBPcmdJRCBhc29jaWFkbyAoc2kgbGEgbm90aWYgZXMgb3JnLXNjb3BlZCkuIEhhYmlsaXRhIHN3aXRjaC1vcmcgYWwgYWJyaXIgKi9cbiAgb3JnSWQ/OiBzdHJpbmc7XG4gIC8qKiBSb3V0ZSBkZXN0aW5vIGFsIGNsaWNrIChlajogJy9hcHAvZG9jcy8xMjMnKSAqL1xuICBhY3Rpb25Sb3V0ZT86IHN0cmluZztcbiAgLyoqIFBheWxvYWQgZXN0cnVjdHVyYWRvIHBhcmEgYWNjaW9uZXMgKHJlZW1wbGF6byB0aXBhZG8gZGUgYGRhdGFgKSAqL1xuICBwYXlsb2FkPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBsZWVyIG5vdGlmaWNhY2lvbmVzIGRlc2RlIEZpcmVzdG9yZS5cbiAqXG4gKiBTZSBhdXRvLWluaWNpYWxpemEgY3VhbmRvIEF1dGhTZXJ2aWNlIHRpZW5lIHVuIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gKiBObyByZXF1aWVyZSBsbGFtYXIgYSBgaW5pdGlhbGl6ZSgpYCBtYW51YWxtZW50ZSBzaSBBdXRoU2VydmljZSBlc3TDoSBjb25maWd1cmFkby5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ29uIEF1dGhTZXJ2aWNlIGNvbmZpZ3VyYWRvOiBhdXRvLWluaWNpYWxpemFjacOzblxuICogLy8gU29sbyBpbnllY3RhciB5IHVzYXIgZGlyZWN0YW1lbnRlXG4gKiBwcml2YXRlIG5vdGlmaWNhdGlvbnMgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICpcbiAqIG5vdGlmaWNhdGlvbnMkID0gdGhpcy5ub3RpZmljYXRpb25zLmdldEFsbCgpO1xuICogdW5yZWFkQ291bnQkID0gdGhpcy5ub3RpZmljYXRpb25zLmdldFVucmVhZENvdW50KCk7XG4gKlxuICogLy8gU2luIEF1dGhTZXJ2aWNlOiBpbmljaWFsaXphY2nDs24gbWFudWFsXG4gKiB0aGlzLm5vdGlmaWNhdGlvbnMuaW5pdGlhbGl6ZSh1c2VySWQpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uc1NlcnZpY2Uge1xuICBwcml2YXRlIGNvbGxlY3Rpb246IFR5cGVkQ29sbGVjdGlvbjxOb3RpZmljYXRpb25Eb2N1bWVudD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VXNlcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uUmVhZHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUeXBlZENvbGxlY3Rpb248Tm90aWZpY2F0aW9uRG9jdW1lbnQ+IHwgbnVsbD4oXG4gICAgbnVsbFxuICApO1xuXG4gIC8vIElueWVjY2nDs24gb3BjaW9uYWwgLSBBdXRoU2VydmljZSBwdWVkZSBubyBlc3RhciBjb25maWd1cmFkb1xuICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIElueWVjY2nDs24gb3BjaW9uYWwgLSBGaXJlYmFzZVNlcnZpY2UgZ2F0ZWEgbG9zIGxpc3RlbmVycyBoYXN0YSBxdWUgbGFcbiAgLy8gc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoIGVzdMOpIGxpc3RhIChjaWVycmEgbGEgdmVudGFuYSBkZSBwZXJtaXNzaW9uLWRlbmllZFxuICAvLyBlbiBjb2xkIHN0YXJ0IGRlIFBXQSkuXG4gIHByaXZhdGUgZmlyZWJhc2VTZXJ2aWNlOiBGaXJlYmFzZVNlcnZpY2UgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbGxlY3Rpb25GYWN0b3J5OiBGaXJlc3RvcmVDb2xsZWN0aW9uRmFjdG9yeVxuICApIHtcbiAgICB0aGlzLmZpcmViYXNlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEZpcmViYXNlU2VydmljZSwgbnVsbCk7XG4gICAgLy8gSW50ZW50YXIgb2J0ZW5lciBBdXRoU2VydmljZSBkZSBmb3JtYSBsYXp5IChwdWVkZSBubyBlc3RhciBjb25maWd1cmFkbylcbiAgICB0aGlzLnNldHVwQXV0b0luaXRpYWxpemF0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogR2F0ZSBkZSBGaXJlYmFzZSBBdXRoOiBlbWl0ZSBsYSBjb2xlY2Npw7NuIGxpc3RhIFNPTE8gY3VhbmRvIGxhIHNlc2nDs24gZGVcbiAgICogRmlyZWJhc2UgQXV0aCBlc3TDoSBjb25maXJtYWRhLiBTaW4gRmlyZWJhc2VTZXJ2aWNlIGRpc3BvbmlibGUsIG5vIGdhdGVhXG4gICAqIChkZWdyYWRhIGFsIGNvbXBvcnRhbWllbnRvIHByZXZpbykuIEVzcGVyYSBhIHF1ZSBgZmlyZWJhc2VBdXRoUmVhZHkkYFxuICAgKiBlbWl0YSBhbnRlcyBkZSBwcm9wYWdhciBsYSBjb2xlY2Npw7NuIOKAlCBhc8OtIGVsIGxpc3RlbmVyIEZpcmVzdG9yZSBudW5jYSBzZVxuICAgKiBhZGp1bnRhIGFudGVzIGRlIHF1ZSBgcmVxdWVzdC5hdXRoYCBlc3TDqSBkaXNwb25pYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBjb2xsZWN0aW9uV2hlbkF1dGhSZWFkeSQoKTogT2JzZXJ2YWJsZTxUeXBlZENvbGxlY3Rpb248Tm90aWZpY2F0aW9uRG9jdW1lbnQ+IHwgbnVsbD4ge1xuICAgIGNvbnN0IGZiID0gdGhpcy5maXJlYmFzZVNlcnZpY2U7XG4gICAgaWYgKCFmYikge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvblJlYWR5JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvblJlYWR5JC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNvbGxlY3Rpb24gPT4ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnW05vdGlmc10gY29sbGVjdGlvbldoZW5BdXRoUmVhZHkkIOKAlCBjb2xsZWN0aW9uIGlzIG51bGwgKG5vdCBpbml0aWFsaXplZCknKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ1tOb3RpZnNdIGNvbGxlY3Rpb25XaGVuQXV0aFJlYWR5JCDigJQgY29sbGVjdGlvbiByZWFkeSwgYXdhaXRpbmcgRmlyZWJhc2UgQXV0aCcpO1xuICAgICAgICByZXR1cm4gZnJvbShmYi53aGVuRmlyZWJhc2VBdXRoUmVhZHkoKSkucGlwZShtYXAoKCkgPT4gY29sbGVjdGlvbikpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBhdXRvLWluaWNpYWxpemFjacOzbiBvYnNlcnZhbmRvIGVsIGVzdGFkbyBkZSBBdXRoU2VydmljZS5cbiAgICogU2UgZWplY3V0YSBlbiBlbCBjb250ZXh0byBkZWwgaW5qZWN0b3IgcGFyYSBwb2RlciB1c2FyIGVmZmVjdCgpLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cEF1dG9Jbml0aWFsaXphdGlvbigpOiB2b2lkIHtcbiAgICAvLyBPYnRlbmVyIEF1dGhTZXJ2aWNlIGRlIGZvcm1hIGxhenlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hdXRoU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEF1dGhTZXJ2aWNlLCBudWxsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEF1dGhTZXJ2aWNlIG5vIGVzdMOhIGNvbmZpZ3VyYWRvLCBubyBoYXkgYXV0by1pbmljaWFsaXphY2nDs25cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVc2FyIHJ1bkluSW5qZWN0aW9uQ29udGV4dCBwYXJhIHBvZGVyIGNyZWFyIGVsIGVmZmVjdFxuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5hdXRoU2VydmljZSEudXNlcigpO1xuXG4gICAgICAgIGlmICh1c2VyPy51c2VySWQgJiYgdGhpcy5jdXJyZW50VXNlcklkICE9PSB1c2VyLnVzZXJJZCkge1xuICAgICAgICAgIC8vIFVzdWFyaW8gYXV0ZW50aWNhZG86IGluaWNpYWxpemFyIGNvbiBzdSBJRFxuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSh1c2VyLnVzZXJJZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXVzZXIgJiYgdGhpcy5jdXJyZW50VXNlcklkKSB7XG4gICAgICAgICAgLy8gTG9nb3V0OiBsaW1waWFyIGVzdGFkb1xuICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBwYXJhIHVuIHVzdWFyaW8gZXNwZWPDrWZpY28uXG4gICAqXG4gICAqIE5PVEE6IFNlIGxsYW1hIGF1dG9tw6F0aWNhbWVudGUgc2kgQXV0aFNlcnZpY2UgZXN0w6EgY29uZmlndXJhZG8uXG4gICAqIFNvbG8gdXNhciBtYW51YWxtZW50ZSBzaSBBdXRoU2VydmljZSBubyBlc3TDoSBkaXNwb25pYmxlIG8gc2UgbmVjZXNpdGFcbiAgICogdW4gdXNlcklkIGRpZmVyZW50ZSBhbCBkZWwgdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAgICovXG4gIGluaXRpYWxpemUodXNlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhgW05vdGlmc10gaW5pdGlhbGl6ZSB1aWQ9JHt1c2VySWR9YCk7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb25GYWN0b3J5KSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdbTm90aWZpY2F0aW9uc10gRmlyZXN0b3JlQ29sbGVjdGlvbkZhY3Rvcnkgbm90IGF2YWlsYWJsZS4gRW5zdXJlIHByb3ZpZGVWYWx0ZWNoRmlyZWJhc2UoKSBpcyBjb25maWd1cmVkLidcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50VXNlcklkID0gdXNlcklkO1xuXG4gICAgLy8gUGF0aCBnbG9iYWwgY3Jvc3MtYXBwOiAvdXNlcnMve3VpZH0vbm90aWZpY2F0aW9ucyAoc2luIHByZWZpam8gYXBwcy97YXBwSWR9LykuXG4gICAgLy8gc2tpcEFwcFByZWZpeCBieXBhc3NhIEZpcmVzdG9yZVNlcnZpY2UucHJlZml4Q29sbGVjdGlvblBhdGggcGFyYSBmYW4tb3V0IGNvbXBhcnRpZG8uXG4gICAgY29uc3QgYmFzZVBhdGggPSBgdXNlcnMvJHt1c2VySWR9L25vdGlmaWNhdGlvbnNgO1xuXG4gICAgdGhpcy5jb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uRmFjdG9yeS5jcmVhdGU8Tm90aWZpY2F0aW9uRG9jdW1lbnQ+KGJhc2VQYXRoLCB7XG4gICAgICB0aW1lc3RhbXBzOiB0cnVlLFxuICAgICAgc2tpcEFwcFByZWZpeDogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmNvbGxlY3Rpb25SZWFkeSQubmV4dCh0aGlzLmNvbGxlY3Rpb24pO1xuXG4gICAgY29uc29sZS5sb2coJ1tOb3RpZmljYXRpb25zXSBJbml0aWFsaXplZCB3aXRoIHBhdGg6JywgYmFzZVBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHNlcnZpY2lvIGVzdMOhIGluaWNpYWxpemFkby5cbiAgICovXG4gIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24gIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCBJRCBkZWwgdXN1YXJpbyBhY3R1YWwuXG4gICAqL1xuICBnZXQgdXNlcklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VySWQ7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVDVFVSQVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSBub3RpZmljYWNpb25lcyBvcmRlbmFkYXMgcG9yIGZlY2hhIGRlc2NlbmRlbnRlIChyZWFsLXRpbWUpLlxuICAgKiBTZSBhY3R1YWxpemEgYXV0b23DoXRpY2FtZW50ZSBjdWFuZG8gY2FtYmlhbiBsb3MgZGF0b3MuXG4gICAqXG4gICAqIEVsIGxpc3RlbmVyIEZpcmVzdG9yZSBOTyBzZSBhZGp1bnRhIGhhc3RhIHF1ZSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGhcbiAgICogZXN0w6kgY29uZmlybWFkYSAoYEZpcmViYXNlU2VydmljZS5maXJlYmFzZUF1dGhSZWFkeWApLiBFc3RvIGNpZXJyYSBsYVxuICAgKiB2ZW50YW5hIGRlIGBwZXJtaXNzaW9uLWRlbmllZGAgZW4gY29sZCBzdGFydCBkZSBQV0EsIGRvbmRlIGVsIEpXVCBkZWxcbiAgICogYmFja2VuZCBwdWVkZSBlc3RhciBsaXN0byBhbnRlcyBxdWUgbGEgc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoLlxuICAgKlxuICAgKiBAcGFyYW0gbGltaXQgLSBNw6F4aW1vIGRlIG5vdGlmaWNhY2lvbmVzIGEgY2FyZ2FyIChkZWZhdWx0OiA1MClcbiAgICovXG4gIGdldEFsbChsaW1pdCA9IERFRkFVTFRfTElNSVQpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbkRvY3VtZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uV2hlbkF1dGhSZWFkeSQoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNvbGxlY3Rpb24gPT4ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tOb3RpZnNdIGdldEFsbCDigJQgY29sbGVjdGlvbiBudWxsIOKGkiByZXR1cm5pbmcgRU1QVFkgKG5vIGVtaXNzaW9uKScpO1xuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnW05vdGlmc10gZ2V0QWxsIOKAlCBhdHRhY2hpbmcgRmlyZXN0b3JlIHdhdGNoQWxsIGxpc3RlbmVyJyk7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uLndhdGNoQWxsKHtcbiAgICAgICAgICBvcmRlckJ5OiBbeyBmaWVsZDogJ2NyZWF0ZWRBdCcsIGRpcmVjdGlvbjogJ2Rlc2MnIH1dLFxuICAgICAgICAgIGxpbWl0LFxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIG5vdGlmaWNhY2lvbmVzIChvbmUtdGltZSBmZXRjaCBzaW4gbGlzdGVuZXIpLlxuICAgKiDDmnRpbCBwYXJhIGNhcmdhcyBpbmljaWFsZXMgc2luIG5lY2VzaWRhZCBkZSB1cGRhdGVzIGVuIHRpZW1wbyByZWFsLlxuICAgKlxuICAgKiBAcGFyYW0gbGltaXQgLSBNw6F4aW1vIGRlIG5vdGlmaWNhY2lvbmVzIGEgY2FyZ2FyIChkZWZhdWx0OiA1MClcbiAgICovXG4gIGFzeW5jIGdldEFsbE9uY2UobGltaXQgPSBERUZBVUxUX0xJTUlUKTogUHJvbWlzZTxOb3RpZmljYXRpb25Eb2N1bWVudFtdPiB7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHJldHVybiBbXTtcblxuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24uZ2V0QWxsT25jZSh7XG4gICAgICBvcmRlckJ5OiBbeyBmaWVsZDogJ2NyZWF0ZWRBdCcsIGRpcmVjdGlvbjogJ2Rlc2MnIH1dLFxuICAgICAgbGltaXQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBzb2xvIG5vdGlmaWNhY2lvbmVzIG5vIGxlw61kYXMgKHJlYWwtdGltZSwgZmlsdHJhZG8gc2VydmVyLXNpZGUpLlxuICAgKlxuICAgKiBAcGFyYW0gbGltaXQgLSBNw6F4aW1vIGRlIG5vdGlmaWNhY2lvbmVzIChkZWZhdWx0OiA1MClcbiAgICovXG4gIGdldFVucmVhZChsaW1pdCA9IERFRkFVTFRfTElNSVQpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbkRvY3VtZW50W10+IHtcbiAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikgcmV0dXJuIG9mKFtdKTtcblxuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24ud2F0Y2hBbGwoe1xuICAgICAgd2hlcmU6IFt7IGZpZWxkOiAnaXNSZWFkJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmYWxzZSB9XSxcbiAgICAgIG9yZGVyQnk6IFt7IGZpZWxkOiAnY3JlYXRlZEF0JywgZGlyZWN0aW9uOiAnZGVzYycgfV0sXG4gICAgICBsaW1pdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdWVudGEgbm90aWZpY2FjaW9uZXMgbm8gbGXDrWRhcyB1c2FuZG8gc2VydmVyLXNpZGUgYWdncmVnYXRpb24gcXVlcnkuXG4gICAqIE5vIGRlc2NhcmdhIGRvY3VtZW50b3Mg4oCUIGVmaWNpZW50ZSBwYXJhIGJhZGdlcyBlbiBVSS5cbiAgICpcbiAgICogR2F0ZWFkbyBwb3IgYGZpcmViYXNlQXV0aFJlYWR5YCDigJQgbGEgYWdncmVnYXRpb24gcXVlcnkgbm8gc2UgZWplY3V0YSBoYXN0YVxuICAgKiBxdWUgbGEgc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoIGVzdMOpIGxpc3RhLlxuICAgKi9cbiAgZ2V0VW5yZWFkQ291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uV2hlbkF1dGhSZWFkeSQoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNvbGxlY3Rpb24gPT4ge1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHJldHVybiBvZigwKTtcbiAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgY29sbGVjdGlvbi5jb3VudCh7XG4gICAgICAgICAgICB3aGVyZTogW3sgZmllbGQ6ICdpc1JlYWQnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZhbHNlIH1dLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSB1bmEgbm90aWZpY2FjacOzbiBwb3IgSUQuXG4gICAqL1xuICBhc3luYyBnZXRCeUlkKG5vdGlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPE5vdGlmaWNhdGlvbkRvY3VtZW50IHwgbnVsbD4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uLmdldEJ5SWQobm90aWZpY2F0aW9uSWQpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEFDQ0lPTkVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBNYXJjYSB1bmEgbm90aWZpY2FjacOzbiBjb21vIGxlw61kYS5cbiAgICovXG4gIGFzeW5jIG1hcmtBc1JlYWQobm90aWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZShub3RpZmljYXRpb25JZCwgeyBpc1JlYWQ6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFyY2EgdG9kYXMgbGFzIG5vdGlmaWNhY2lvbmVzIG5vIGxlw61kYXMgY29tbyBsZcOtZGFzIChiYXRjaCB3cml0ZSkuXG4gICAqL1xuICBhc3luYyBtYXJrQWxsQXNSZWFkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm47XG5cbiAgICBjb25zdCB1bnJlYWQgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24ucXVlcnkoe1xuICAgICAgd2hlcmU6IFt7IGZpZWxkOiAnaXNSZWFkJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmYWxzZSB9XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlkcyA9IHVucmVhZC5tYXAobiA9PiBuLmlkISkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5iYXRjaFVwZGF0ZShpZHMsIHsgaXNSZWFkOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgdW5hIG5vdGlmaWNhY2nDs24uXG4gICAqL1xuICBhc3luYyBkZWxldGUobm90aWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZShub3RpZmljYXRpb25JZCk7XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSB0b2RhcyBsYXMgbm90aWZpY2FjaW9uZXMgZGVsIHVzdWFyaW8gKGJhdGNoIGRlbGV0ZSkuXG4gICAqL1xuICBhc3luYyBkZWxldGVBbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHJldHVybjtcblxuICAgIGNvbnN0IGFsbCA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5nZXRBbGwoKTtcbiAgICBjb25zdCBpZHMgPSBhbGwubWFwKG4gPT4gbi5pZCEpLmZpbHRlcihCb29sZWFuKTtcbiAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uYmF0Y2hEZWxldGUoaWRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgZWwgZXN0YWRvIGRlbCBzZXJ2aWNpby5cbiAgICogw5p0aWwgcGFyYSBsb2dvdXQuXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbGxlY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFVzZXJJZCA9IG51bGw7XG4gICAgdGhpcy5jb2xsZWN0aW9uUmVhZHkkLm5leHQobnVsbCk7XG4gIH1cbn1cbiJdfQ==
@@ -21,7 +21,7 @@ import { inject, Injector } from '@angular/core';
21
21
  import { toObservable, toSignal } from '@angular/core/rxjs-interop';
22
22
  import { signal } from '@angular/core';
23
23
  import { of, race, timer } from 'rxjs';
24
- import { catchError, retry, switchMap, take, tap, timeout } from 'rxjs/operators';
24
+ import { catchError, map, retry, switchMap, take, tap, timeout } from 'rxjs/operators';
25
25
  import { FirebaseService } from '../firebase/firebase.service';
26
26
  /**
27
27
  * Crea un stream refrescable a partir de una factory de Observable.
@@ -72,8 +72,18 @@ export function createRefreshableStream(factory, options) {
72
72
  // sesión NUNCA se establece (token inválido, signInWithFirebase falló), el
73
73
  // gate igual se libera tras `authGateTimeoutMs` y la factory procede: si no
74
74
  // hay permiso terminará en estado `error`, jamás en skeleton infinito.
75
+ // Tag los dos inputs del `race` para distinguir en logs cuál ganó: la sesión
76
+ // de Firebase Auth (`auth-ready`) o el timeout de seguridad (`timeout`).
75
77
  const authGate$ = firebase
76
- ? race(firebase.firebaseAuthReady$, timer(authGateTimeoutMs)).pipe(take(1))
78
+ ? race(firebase.firebaseAuthReady$.pipe(map(() => 'auth-ready')), timer(authGateTimeoutMs).pipe(map(() => 'timeout'))).pipe(take(1), tap(winner => {
79
+ if (winner === 'timeout') {
80
+ console.warn(`[RefreshStream] auth gate resolved by TIMEOUT after ${authGateTimeoutMs}ms ` +
81
+ '(Firebase Auth session never confirmed)');
82
+ }
83
+ else {
84
+ console.log('[RefreshStream] auth gate resolved by firebaseAuthReady$ (session ready)');
85
+ }
86
+ }))
77
87
  : of(true);
78
88
  const data = toSignal(toObservable(_reload, { injector }).pipe(tap(() => {
79
89
  _loading.set(true);
@@ -85,6 +95,7 @@ export function createRefreshableStream(factory, options) {
85
95
  switchMap(() => authGate$.pipe(switchMap(() => factory().pipe(tap(() => {
86
96
  _loading.set(false);
87
97
  _error.set(false);
98
+ console.log('[RefreshStream] factory emitted first value — loading=false');
88
99
  }),
89
100
  // Backoff corto exponencial acotado — solo red de seguridad para
90
101
  // reconexiones transitorias, NO para cubrir cold start.
@@ -97,9 +108,10 @@ export function createRefreshableStream(factory, options) {
97
108
  // silencio), `timeout` dispara un error → `catchError` → estado
98
109
  // `error`. Nunca skeleton perpetuo. Va DESPUÉS de `retry` para
99
110
  // que cuente el tiempo total, no por intento.
100
- timeout({ first: firstEmitTimeoutMs }), catchError(() => {
111
+ timeout({ first: firstEmitTimeoutMs }), catchError(err => {
101
112
  _loading.set(false);
102
113
  _error.set(true);
114
+ console.error(`[RefreshStream] factory failed/timed out → error state: ${err instanceof Error ? err.message : String(err)}`);
103
115
  return of(fallback);
104
116
  })))))), { initialValue: null, injector });
105
117
  return {
@@ -109,4 +121,4 @@ export function createRefreshableStream(factory, options) {
109
121
  reload: () => _reload.update(n => n + 1),
110
122
  };
111
123
  }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9yZWZyZXNoYWJsZS1zdHJlYW0vcmVmcmVzaGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQWdFL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsT0FBNEIsRUFDNUIsT0FBcUM7SUFFckMsTUFBTSxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBYSxDQUFDO0lBQ3pELE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDO0lBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxFQUFFLGdCQUFnQixJQUFJLEdBQUcsQ0FBQztJQUMxRCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sRUFBRSxrQkFBa0IsSUFBSSxJQUFJLENBQUM7SUFDL0QsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLEVBQUUsaUJBQWlCLElBQUksS0FBSyxDQUFDO0lBQzlELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxFQUFFLGtCQUFrQixJQUFJLEtBQUssQ0FBQztJQUVoRSx3RUFBd0U7SUFDeEUsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFFakYsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0IsNEVBQTRFO0lBQzVFLHdFQUF3RTtJQUN4RSwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSxNQUFNLFNBQVMsR0FBd0IsUUFBUTtRQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUViLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FDbkIsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1AsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQztJQUNGLG9FQUFvRTtJQUNwRSxxRUFBcUU7SUFDckUsbUVBQW1FO0lBQ25FLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDYixTQUFTLENBQUMsSUFBSSxDQUNaLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDYixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQ1osR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNQLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUM7SUFDRixpRUFBaUU7SUFDakUsd0RBQXdEO0lBQ3hELEtBQUssQ0FBQztRQUNKLEtBQUssRUFBRSxVQUFVO1FBQ2pCLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDL0QsQ0FBQztJQUNGLGlFQUFpRTtJQUNqRSw2REFBNkQ7SUFDN0QsZ0VBQWdFO0lBQ2hFLCtEQUErRDtJQUMvRCw4Q0FBOEM7SUFDOUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLENBQUMsRUFDdEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEVBQUUsQ0FBQyxRQUFhLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FDRixDQUNGLEVBQ0QsRUFBRSxZQUFZLEVBQUUsSUFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FDN0MsQ0FBQztJQUVGLE9BQU87UUFDTCxJQUFJO1FBQ0osT0FBTyxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUU7UUFDOUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDMUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWZyZXNoYWJsZSBTdHJlYW1cbiAqXG4gKiBIZWxwZXIgZXN0w6FuZGFyIHBhcmEgdmlzdGFzIHF1ZSBjb25zdW1lbiBkYXRvcyBkZSBGaXJlc3RvcmUuIFNvcG9ydGEgRE9TXG4gKiBtb2RvcyDigJQgZWwgY2FsbGVyIGRlY2lkZSBjdcOhbCB2w61hIGxhIGBmYWN0b3J5YDpcbiAqXG4gKiAgLSAqKm9uZS1zaG90KiogKHJlY29tZW5kYWRvIHBvciBkZWZlY3RvKTogYCgpID0+IGZyb20oc3ZjLmdldEFsbE9uY2UoKSlgLlxuICogICAgQ2FyZ2EgdW5hIHZleiB5IGNvbXBsZXRhLiBNw6FzIGJhcmF0byDigJQgc2luIGxpc3RlbmVyIHZpdm8uXG4gKiAgLSAqKnJlYWwtdGltZSoqOiBgKCkgPT4gc3ZjLmdldEFsbCgpYC4gTGlzdGVuZXIgRmlyZXN0b3JlIHF1ZSBhdXRvLWFjdHVhbGl6YS5cbiAqICAgIFNvbG8gZG9uZGUgaW1wb3J0YSAoaW5ib3ggZGUgbm90aWZpY2FjaW9uZXMsIGJhZGdlcykuXG4gKlxuICogRW4gYW1ib3MgbW9kb3MgbGEgcHJpbWVyYSBzdXNjcmlwY2nDs24gc2UgZ2F0ZWEgcG9yIGBmaXJlYmFzZUF1dGhSZWFkeWBcbiAqIChzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggbGlzdGEpIOKAlCBhc8OtIGVsIGxpc3RlbmVyL2xlY3R1cmEgbnVuY2Egc2UgYWRqdW50YVxuICogYW50ZXMgZGUgcXVlIGByZXF1ZXN0LmF1dGhgIGVzdMOpIGRpc3BvbmlibGUgZW4gbGFzIHJlZ2xhcyBkZSBGaXJlc3RvcmUsIGxvXG4gKiBxdWUgY2llcnJhIGxhIHZlbnRhbmEgZGUgYHBlcm1pc3Npb24tZGVuaWVkYCBlbiBjb2xkIHN0YXJ0IGRlIFBXQS5cbiAqXG4gKiBFbCBgcmV0cnlgIGNvbiBiYWNrb2ZmIGNvcnRvIGVzIHNvbG8gcmVkIGRlIHNlZ3VyaWRhZCBwYXJhIHJlY29uZXhpb25lc1xuICogdHJhbnNpdG9yaWFzIChubyBwYXJhIGN1YnJpciBjb2xkIHN0YXJ0IOKAlCBlc28gbG8gY3VicmUgZWwgZ2F0ZSBkZSBhdXRoKS5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdG9yLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCByYWNlLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgcmV0cnksIHN3aXRjaE1hcCwgdGFrZSwgdGFwLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuLi9maXJlYmFzZS9maXJlYmFzZS5zZXJ2aWNlJztcblxuLyoqIE9wY2lvbmVzIGRlIGNvbmZpZ3VyYWNpw7NuIHBhcmEgYGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaGFibGVTdHJlYW1PcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIFZhbG9yIGVtaXRpZG8gY3VhbmRvIGxhIGZhY3RvcnkgZmFsbGEgdHJhcyBhZ290YXIgbG9zIHJlaW50ZW50b3MuXG4gICAqIERlZmF1bHQ6IGBudWxsYC5cbiAgICovXG4gIGZhbGxiYWNrPzogVDtcbiAgLyoqXG4gICAqIE7Dum1lcm8gbcOheGltbyBkZSByZWludGVudG9zIGFudGUgdW4gZXJyb3IgZGUgbGEgZmFjdG9yeS5cbiAgICogQmFja29mZiBjb3J0byDigJQgTk8gY3VicmUgY29sZCBzdGFydCAoZXNvIGxvIGhhY2UgZWwgZ2F0ZSBkZSBhdXRoKSwgc29sb1xuICAgKiByZWNvbmV4aW9uZXMgdHJhbnNpdG9yaWFzLiBEZWZhdWx0OiA0LlxuICAgKi9cbiAgcmV0cnlDb3VudD86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlbGF5IGJhc2UgZGVsIGJhY2tvZmYgKG1zKS4gRWwgZGVsYXkgZWZlY3Rpdm8gY3JlY2UgZXhwb25lbmNpYWxtZW50ZVxuICAgKiBhY290YWRvOiA1MDBtcyDihpIgMXMg4oaSIDJzIC4uLiBEZWZhdWx0OiA1MDAuXG4gICAqL1xuICByZXRyeUJhc2VEZWxheU1zPzogbnVtYmVyO1xuICAvKipcbiAgICogU2kgYGZhbHNlYCwgTk8gZXNwZXJhIGEgYGZpcmViYXNlQXV0aFJlYWR5YCBhbnRlcyBkZSBsYSBwcmltZXJhXG4gICAqIHN1c2NyaXBjacOzbi4gw5p0aWwgcGFyYSBzdHJlYW1zIHF1ZSBubyBsZWVuIEZpcmVzdG9yZS4gRGVmYXVsdDogYHRydWVgLlxuICAgKi9cbiAgZ2F0ZU9uRmlyZWJhc2VBdXRoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRpbWVvdXQgKG1zKSBkZWwgZ2F0ZSBkZSBGaXJlYmFzZSBBdXRoLiBTaSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggbm9cbiAgICogc2UgZXN0YWJsZWNlIGVuIGVzdGUgdGllbXBvLCBlbCBzdHJlYW0gcHJvY2VkZSBpZ3VhbCAobGEgZmFjdG9yeSBjb3JyZXLDoVxuICAgKiB5LCBzaSBubyBoYXkgcGVybWlzbywgdGVybWluYXLDoSBlbiBlc3RhZG8gYGVycm9yYCDigJQgTlVOQ0EgZW4gc2tlbGV0b25cbiAgICogaW5maW5pdG8pLiBNdXkgcG9yIGVuY2ltYSBkZSBjdWFscXVpZXIgaGFuZHNoYWtlIHJlYWwuIERlZmF1bHQ6IDIwMDAwLlxuICAgKi9cbiAgYXV0aEdhdGVUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaW1lb3V0IChtcykgZGUgbGEgUFJJTUVSQSBlbWlzacOzbiBkZSBsYSBmYWN0b3J5LiBTaSBsYSBmYWN0b3J5IG5vIGVtaXRlXG4gICAqIG5pIHVuIHZhbG9yIG5pIHVuIGVycm9yIGVuIGVzdGUgdGllbXBvIChjYXNvIHTDrXBpY286IHVuIHNlcnZpY2lvIEZpcmVzdG9yZVxuICAgKiBxdWUgbnVuY2Egc2UgaW5pY2lhbGl6w7Mg4oaSIGBFTVBUWWAg4oaSIHNpbGVuY2lvIHRvdGFsKSwgZWwgc3RyZWFtIHBhc2EgYVxuICAgKiBlc3RhZG8gYGVycm9yYCBlbiB2ZXogZGUgcXVlZGFyc2UgZW4gc2tlbGV0b24gcGVycGV0dW8uIERlZmF1bHQ6IDIwMDAwLlxuICAgKi9cbiAgZmlyc3RFbWl0VGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogSW5qZWN0b3IgZXhwbMOtY2l0by4gU29sbyBuZWNlc2FyaW8gc2kgYGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtYCBzZSBsbGFtYVxuICAgKiBmdWVyYSBkZSB1biBpbmplY3Rpb24gY29udGV4dCAocmFybykuIFBvciBkZWZlY3RvIHVzYSBgaW5qZWN0KEluamVjdG9yKWAuXG4gICAqL1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xufVxuXG4vKipcbiAqIFJlc3VsdGFkbyBkZSBgY3JlYXRlUmVmcmVzaGFibGVTdHJlYW1gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hhYmxlU3RyZWFtPFQ+IHtcbiAgLyoqIERhdG9zIGFjdHVhbGVzLiBgbnVsbGAgbWllbnRyYXMgbGEgcHJpbWVyYSBlbWlzacOzbiBubyBoYSBsbGVnYWRvLiAqL1xuICByZWFkb25seSBkYXRhOiBTaWduYWw8VCB8IG51bGw+O1xuICAvKiogYHRydWVgIG1pZW50cmFzIHNlIGVzcGVyYSBsYSBwcmltZXJhIGVtaXNpw7NuIGRlIGxhIHN1c2NyaXBjacOzbiBhY3R1YWwuICovXG4gIHJlYWRvbmx5IGxvYWRpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIGB0cnVlYCBzaSBsYSBmYWN0b3J5IGZhbGzDsyB0cmFzIGFnb3RhciBsb3MgcmVpbnRlbnRvcy4gKi9cbiAgcmVhZG9ubHkgZXJyb3I6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqXG4gICAqIFJlLXN1c2NyaWJlIGxhIGZhY3RvcnkgZGVzZGUgY2VybyAobnVldm8gbGlzdGVuZXIgLyBudWV2YSBsZWN0dXJhKS5cbiAgICogRXMgbG8gcXVlIHJlZ2lzdHJhIGVsIGBQYWdlUmVmcmVzaFNlcnZpY2VgIGNvbW8gaGFuZGxlciBkZSBwdWxsLXRvLXJlZnJlc2gsXG4gICAqIHkgdGFtYmnDqW4gZWwgXCJyZWNvbmVjdGFyIG1hbnVhbFwiIHNpIHVuIGxpc3RlbmVyIG11cmnDsy5cbiAgICovXG4gIHJlbG9hZDogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBDcmVhIHVuIHN0cmVhbSByZWZyZXNjYWJsZSBhIHBhcnRpciBkZSB1bmEgZmFjdG9yeSBkZSBPYnNlcnZhYmxlLlxuICpcbiAqIERFQkUgbGxhbWFyc2UgZW4gdW4gaW5qZWN0aW9uIGNvbnRleHQgKGZpZWxkIGluaXRpYWxpemVyIG8gY29uc3RydWN0b3IpIOKAlFxuICogdXNhIGB0b1NpZ25hbGAvYHRvT2JzZXJ2YWJsZWAvYGluamVjdGAgaW50ZXJuYW1lbnRlLlxuICpcbiAqIEBwYXJhbSBmYWN0b3J5IC0gRnVuY2nDs24gcXVlIHByb2R1Y2UgZWwgT2JzZXJ2YWJsZSBhIGNvbnN1bWlyLiBFbCBjYWxsZXJcbiAqICAgZGVjaWRlIGVsIG1vZG86IGAoKSA9PiBmcm9tKHN2Yy5nZXRBbGxPbmNlKCkpYCAob25lLXNob3QpIG9cbiAqICAgYCgpID0+IHN2Yy5nZXRBbGwoKWAgKHJlYWwtdGltZSkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYWNpw7NuIG9wY2lvbmFsIChmYWxsYmFjaywgcmV0cnksIGdhdGUpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBvbmUtc2hvdCAocmVjb21lbmRhZG8gcG9yIGRlZmVjdG8pXG4gKiBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKFxuICogICAoKSA9PiBmcm9tKHRoaXMuc3ZjLmdldEFsbE9uY2UoKSksXG4gKiApO1xuICpcbiAqIC8vIHJlYWwtdGltZSAoaW5ib3gpXG4gKiBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKFxuICogICAoKSA9PiB0aGlzLm5vdGlmcy5nZXRBbGwoNTApLFxuICogKTtcbiAqXG4gKiByZWFkb25seSBpdGVtcyA9IHRoaXMuc3RyZWFtLmRhdGE7XG4gKiByZWFkb25seSBsb2FkaW5nID0gdGhpcy5zdHJlYW0ubG9hZGluZztcbiAqXG4gKiBpb25WaWV3V2lsbEVudGVyKCkge1xuICogICB0aGlzLnBhZ2VSZWZyZXNoLnJlZ2lzdGVyKCgpID0+IHRoaXMuc3RyZWFtLnJlbG9hZCgpKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmcmVzaGFibGVTdHJlYW08VD4oXG4gIGZhY3Rvcnk6ICgpID0+IE9ic2VydmFibGU8VD4sXG4gIG9wdGlvbnM/OiBSZWZyZXNoYWJsZVN0cmVhbU9wdGlvbnM8VD5cbik6IFJlZnJlc2hhYmxlU3RyZWFtPFQ+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zPy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBmYWxsYmFjayA9IChvcHRpb25zPy5mYWxsYmFjayA/PyBudWxsKSBhcyBUIHwgbnVsbDtcbiAgY29uc3QgcmV0cnlDb3VudCA9IG9wdGlvbnM/LnJldHJ5Q291bnQgPz8gNDtcbiAgY29uc3QgcmV0cnlCYXNlRGVsYXlNcyA9IG9wdGlvbnM/LnJldHJ5QmFzZURlbGF5TXMgPz8gNTAwO1xuICBjb25zdCBnYXRlT25GaXJlYmFzZUF1dGggPSBvcHRpb25zPy5nYXRlT25GaXJlYmFzZUF1dGggPz8gdHJ1ZTtcbiAgY29uc3QgYXV0aEdhdGVUaW1lb3V0TXMgPSBvcHRpb25zPy5hdXRoR2F0ZVRpbWVvdXRNcyA/PyAyMDAwMDtcbiAgY29uc3QgZmlyc3RFbWl0VGltZW91dE1zID0gb3B0aW9ucz8uZmlyc3RFbWl0VGltZW91dE1zID8/IDIwMDAwO1xuXG4gIC8vIEZpcmViYXNlU2VydmljZSBlcyBvcGNpb25hbCDigJQgc2luIMOpbCAoYXBwcyBzaW4gRmlyZWJhc2UpIG5vIHNlIGdhdGVhLlxuICBjb25zdCBmaXJlYmFzZSA9IGdhdGVPbkZpcmViYXNlQXV0aCA/IGluamVjdG9yLmdldChGaXJlYmFzZVNlcnZpY2UsIG51bGwpIDogbnVsbDtcblxuICBjb25zdCBfcmVsb2FkID0gc2lnbmFsKDApO1xuICBjb25zdCBfbG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgY29uc3QgX2Vycm9yID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBHYXRlIGRlIEZpcmViYXNlIEF1dGg6IGVsIHN0cmVhbSBubyBhYnJlIGxhIHByaW1lcmEgc3VzY3JpcGNpw7NuIGhhc3RhIHF1ZVxuICAvLyBsYSBzZXNpw7NuIGVzdMOpIGNvbmZpcm1hZGEuIGByYWNlYCBjb24gdW4gYHRpbWVyYCBkZSBzZWd1cmlkYWQg4oCUIHNpIGxhXG4gIC8vIHNlc2nDs24gTlVOQ0Egc2UgZXN0YWJsZWNlICh0b2tlbiBpbnbDoWxpZG8sIHNpZ25JbldpdGhGaXJlYmFzZSBmYWxsw7MpLCBlbFxuICAvLyBnYXRlIGlndWFsIHNlIGxpYmVyYSB0cmFzIGBhdXRoR2F0ZVRpbWVvdXRNc2AgeSBsYSBmYWN0b3J5IHByb2NlZGU6IHNpIG5vXG4gIC8vIGhheSBwZXJtaXNvIHRlcm1pbmFyw6EgZW4gZXN0YWRvIGBlcnJvcmAsIGphbcOhcyBlbiBza2VsZXRvbiBpbmZpbml0by5cbiAgY29uc3QgYXV0aEdhdGUkOiBPYnNlcnZhYmxlPHVua25vd24+ID0gZmlyZWJhc2VcbiAgICA/IHJhY2UoZmlyZWJhc2UuZmlyZWJhc2VBdXRoUmVhZHkkLCB0aW1lcihhdXRoR2F0ZVRpbWVvdXRNcykpLnBpcGUodGFrZSgxKSlcbiAgICA6IG9mKHRydWUpO1xuXG4gIGNvbnN0IGRhdGEgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUoX3JlbG9hZCwgeyBpbmplY3RvciB9KS5waXBlKFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgX2xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICBfZXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgIH0pLFxuICAgICAgLy8gRXNwZXJhciBhIEZpcmViYXNlIEF1dGggbGlzdG8gYW50ZXMgZGUgY2FkYSAocmUpc3VzY3JpcGNpw7NuLiBDb21vXG4gICAgICAvLyBgZmlyZWJhc2VBdXRoUmVhZHkkYCBjb21wbGV0YSB0cmFzIGxhIHByaW1lcmEgZW1pc2nDs24sIGxhcyByZWxvYWRzXG4gICAgICAvLyBwb3N0ZXJpb3JlcyByZXN1ZWx2ZW4gZWwgZ2F0ZSBkZSBpbm1lZGlhdG8gKGF1dGggeWEgZXN0w6EgbGlzdG8pLlxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIGF1dGhHYXRlJC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgZmFjdG9yeSgpLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgX2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBfZXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC8vIEJhY2tvZmYgY29ydG8gZXhwb25lbmNpYWwgYWNvdGFkbyDigJQgc29sbyByZWQgZGUgc2VndXJpZGFkIHBhcmFcbiAgICAgICAgICAgICAgLy8gcmVjb25leGlvbmVzIHRyYW5zaXRvcmlhcywgTk8gcGFyYSBjdWJyaXIgY29sZCBzdGFydC5cbiAgICAgICAgICAgICAgcmV0cnkoe1xuICAgICAgICAgICAgICAgIGNvdW50OiByZXRyeUNvdW50LFxuICAgICAgICAgICAgICAgIGRlbGF5OiAoX2VyciwgYXR0ZW1wdCkgPT5cbiAgICAgICAgICAgICAgICAgIHRpbWVyKE1hdGgubWluKHJldHJ5QmFzZURlbGF5TXMgKiAyICoqIChhdHRlbXB0IC0gMSksIDQwMDApKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC8vIFRlY2hvIGFic29sdXRvIHBhcmEgbGEgUFJJTUVSQSBlbWlzacOzbi4gU2kgbGEgZmFjdG9yeSBubyBlbWl0ZVxuICAgICAgICAgICAgICAvLyBuaSB2YWxvciBuaSBlcnJvciAoc2VydmljaW8gbnVuY2EgaW5pY2lhbGl6YWRvIOKGkiBgRU1QVFlgIOKGklxuICAgICAgICAgICAgICAvLyBzaWxlbmNpbyksIGB0aW1lb3V0YCBkaXNwYXJhIHVuIGVycm9yIOKGkiBgY2F0Y2hFcnJvcmAg4oaSIGVzdGFkb1xuICAgICAgICAgICAgICAvLyBgZXJyb3JgLiBOdW5jYSBza2VsZXRvbiBwZXJwZXR1by4gVmEgREVTUFXDiVMgZGUgYHJldHJ5YCBwYXJhXG4gICAgICAgICAgICAgIC8vIHF1ZSBjdWVudGUgZWwgdGllbXBvIHRvdGFsLCBubyBwb3IgaW50ZW50by5cbiAgICAgICAgICAgICAgdGltZW91dCh7IGZpcnN0OiBmaXJzdEVtaXRUaW1lb3V0TXMgfSksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgICAgIF9sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgX2Vycm9yLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsbGJhY2sgYXMgVCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogbnVsbCBhcyBUIHwgbnVsbCwgaW5qZWN0b3IgfVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBsb2FkaW5nOiBfbG9hZGluZy5hc1JlYWRvbmx5KCksXG4gICAgZXJyb3I6IF9lcnJvci5hc1JlYWRvbmx5KCksXG4gICAgcmVsb2FkOiAoKSA9PiBfcmVsb2FkLnVwZGF0ZShuID0+IG4gKyAxKSxcbiAgfTtcbn1cbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9yZWZyZXNoYWJsZS1zdHJlYW0vcmVmcmVzaGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFnRS9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE9BQTRCLEVBQzVCLE9BQXFDO0lBRXJDLE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQWEsQ0FBQztJQUN6RCxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLENBQUMsQ0FBQztJQUM1QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxHQUFHLENBQUM7SUFDMUQsTUFBTSxrQkFBa0IsR0FBRyxPQUFP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QzlDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQ3RDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNmLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLENBQUMsS0FBSyxDQUNYLDJEQUNFLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ2pELEVBQUUsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxFQUFFLENBQUMsUUFBYSxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQ0YsQ0FDRixFQUNELEVBQUUsWUFBWSxFQUFFLElBQWdCLEVBQUUsUUFBUSxFQUFFLENBQzdDLENBQUM7SUFFRixPQUFPO1FBQ0wsSUFBSTtRQUNKLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFO1FBQzlCLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQzFCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVmcmVzaGFibGUgU3RyZWFtXG4gKlxuICogSGVscGVyIGVzdMOhbmRhciBwYXJhIHZpc3RhcyBxdWUgY29uc3VtZW4gZGF0b3MgZGUgRmlyZXN0b3JlLiBTb3BvcnRhIERPU1xuICogbW9kb3Mg4oCUIGVsIGNhbGxlciBkZWNpZGUgY3XDoWwgdsOtYSBsYSBgZmFjdG9yeWA6XG4gKlxuICogIC0gKipvbmUtc2hvdCoqIChyZWNvbWVuZGFkbyBwb3IgZGVmZWN0byk6IGAoKSA9PiBmcm9tKHN2Yy5nZXRBbGxPbmNlKCkpYC5cbiAqICAgIENhcmdhIHVuYSB2ZXogeSBjb21wbGV0YS4gTcOhcyBiYXJhdG8g4oCUIHNpbiBsaXN0ZW5lciB2aXZvLlxuICogIC0gKipyZWFsLXRpbWUqKjogYCgpID0+IHN2Yy5nZXRBbGwoKWAuIExpc3RlbmVyIEZpcmVzdG9yZSBxdWUgYXV0by1hY3R1YWxpemEuXG4gKiAgICBTb2xvIGRvbmRlIGltcG9ydGEgKGluYm94IGRlIG5vdGlmaWNhY2lvbmVzLCBiYWRnZXMpLlxuICpcbiAqIEVuIGFtYm9zIG1vZG9zIGxhIHByaW1lcmEgc3VzY3JpcGNpw7NuIHNlIGdhdGVhIHBvciBgZmlyZWJhc2VBdXRoUmVhZHlgXG4gKiAoc2VzacOzbiBkZSBGaXJlYmFzZSBBdXRoIGxpc3RhKSDigJQgYXPDrSBlbCBsaXN0ZW5lci9sZWN0dXJhIG51bmNhIHNlIGFkanVudGFcbiAqIGFudGVzIGRlIHF1ZSBgcmVxdWVzdC5hdXRoYCBlc3TDqSBkaXNwb25pYmxlIGVuIGxhcyByZWdsYXMgZGUgRmlyZXN0b3JlLCBsb1xuICogcXVlIGNpZXJyYSBsYSB2ZW50YW5hIGRlIGBwZXJtaXNzaW9uLWRlbmllZGAgZW4gY29sZCBzdGFydCBkZSBQV0EuXG4gKlxuICogRWwgYHJldHJ5YCBjb24gYmFja29mZiBjb3J0byBlcyBzb2xvIHJlZCBkZSBzZWd1cmlkYWQgcGFyYSByZWNvbmV4aW9uZXNcbiAqIHRyYW5zaXRvcmlhcyAobm8gcGFyYSBjdWJyaXIgY29sZCBzdGFydCDigJQgZXNvIGxvIGN1YnJlIGVsIGdhdGUgZGUgYXV0aCkuXG4gKi9cblxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RvciwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgcmFjZSwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgcmV0cnksIHN3aXRjaE1hcCwgdGFrZSwgdGFwLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuLi9maXJlYmFzZS9maXJlYmFzZS5zZXJ2aWNlJztcblxuLyoqIE9wY2lvbmVzIGRlIGNvbmZpZ3VyYWNpw7NuIHBhcmEgYGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaGFibGVTdHJlYW1PcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIFZhbG9yIGVtaXRpZG8gY3VhbmRvIGxhIGZhY3RvcnkgZmFsbGEgdHJhcyBhZ290YXIgbG9zIHJlaW50ZW50b3MuXG4gICAqIERlZmF1bHQ6IGBudWxsYC5cbiAgICovXG4gIGZhbGxiYWNrPzogVDtcbiAgLyoqXG4gICAqIE7Dum1lcm8gbcOheGltbyBkZSByZWludGVudG9zIGFudGUgdW4gZXJyb3IgZGUgbGEgZmFjdG9yeS5cbiAgICogQmFja29mZiBjb3J0byDigJQgTk8gY3VicmUgY29sZCBzdGFydCAoZXNvIGxvIGhhY2UgZWwgZ2F0ZSBkZSBhdXRoKSwgc29sb1xuICAgKiByZWNvbmV4aW9uZXMgdHJhbnNpdG9yaWFzLiBEZWZhdWx0OiA0LlxuICAgKi9cbiAgcmV0cnlDb3VudD86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlbGF5IGJhc2UgZGVsIGJhY2tvZmYgKG1zKS4gRWwgZGVsYXkgZWZlY3Rpdm8gY3JlY2UgZXhwb25lbmNpYWxtZW50ZVxuICAgKiBhY290YWRvOiA1MDBtcyDihpIgMXMg4oaSIDJzIC4uLiBEZWZhdWx0OiA1MDAuXG4gICAqL1xuICByZXRyeUJhc2VEZWxheU1zPzogbnVtYmVyO1xuICAvKipcbiAgICogU2kgYGZhbHNlYCwgTk8gZXNwZXJhIGEgYGZpcmViYXNlQXV0aFJlYWR5YCBhbnRlcyBkZSBsYSBwcmltZXJhXG4gICAqIHN1c2NyaXBjacOzbi4gw5p0aWwgcGFyYSBzdHJlYW1zIHF1ZSBubyBsZWVuIEZpcmVzdG9yZS4gRGVmYXVsdDogYHRydWVgLlxuICAgKi9cbiAgZ2F0ZU9uRmlyZWJhc2VBdXRoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRpbWVvdXQgKG1zKSBkZWwgZ2F0ZSBkZSBGaXJlYmFzZSBBdXRoLiBTaSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggbm9cbiAgICogc2UgZXN0YWJsZWNlIGVuIGVzdGUgdGllbXBvLCBlbCBzdHJlYW0gcHJvY2VkZSBpZ3VhbCAobGEgZmFjdG9yeSBjb3JyZXLDoVxuICAgKiB5LCBzaSBubyBoYXkgcGVybWlzbywgdGVybWluYXLDoSBlbiBlc3RhZG8gYGVycm9yYCDigJQgTlVOQ0EgZW4gc2tlbGV0b25cbiAgICogaW5maW5pdG8pLiBNdXkgcG9yIGVuY2ltYSBkZSBjdWFscXVpZXIgaGFuZHNoYWtlIHJlYWwuIERlZmF1bHQ6IDIwMDAwLlxuICAgKi9cbiAgYXV0aEdhdGVUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaW1lb3V0IChtcykgZGUgbGEgUFJJTUVSQSBlbWlzacOzbiBkZSBsYSBmYWN0b3J5LiBTaSBsYSBmYWN0b3J5IG5vIGVtaXRlXG4gICAqIG5pIHVuIHZhbG9yIG5pIHVuIGVycm9yIGVuIGVzdGUgdGllbXBvIChjYXNvIHTDrXBpY286IHVuIHNlcnZpY2lvIEZpcmVzdG9yZVxuICAgKiBxdWUgbnVuY2Egc2UgaW5pY2lhbGl6w7Mg4oaSIGBFTVBUWWAg4oaSIHNpbGVuY2lvIHRvdGFsKSwgZWwgc3RyZWFtIHBhc2EgYVxuICAgKiBlc3RhZG8gYGVycm9yYCBlbiB2ZXogZGUgcXVlZGFyc2UgZW4gc2tlbGV0b24gcGVycGV0dW8uIERlZmF1bHQ6IDIwMDAwLlxuICAgKi9cbiAgZmlyc3RFbWl0VGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogSW5qZWN0b3IgZXhwbMOtY2l0by4gU29sbyBuZWNlc2FyaW8gc2kgYGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtYCBzZSBsbGFtYVxuICAgKiBmdWVyYSBkZSB1biBpbmplY3Rpb24gY29udGV4dCAocmFybykuIFBvciBkZWZlY3RvIHVzYSBgaW5qZWN0KEluamVjdG9yKWAuXG4gICAqL1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xufVxuXG4vKipcbiAqIFJlc3VsdGFkbyBkZSBgY3JlYXRlUmVmcmVzaGFibGVTdHJlYW1gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hhYmxlU3RyZWFtPFQ+IHtcbiAgLyoqIERhdG9zIGFjdHVhbGVzLiBgbnVsbGAgbWllbnRyYXMgbGEgcHJpbWVyYSBlbWlzacOzbiBubyBoYSBsbGVnYWRvLiAqL1xuICByZWFkb25seSBkYXRhOiBTaWduYWw8VCB8IG51bGw+O1xuICAvKiogYHRydWVgIG1pZW50cmFzIHNlIGVzcGVyYSBsYSBwcmltZXJhIGVtaXNpw7NuIGRlIGxhIHN1c2NyaXBjacOzbiBhY3R1YWwuICovXG4gIHJlYWRvbmx5IGxvYWRpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIGB0cnVlYCBzaSBsYSBmYWN0b3J5IGZhbGzDsyB0cmFzIGFnb3RhciBsb3MgcmVpbnRlbnRvcy4gKi9cbiAgcmVhZG9ubHkgZXJyb3I6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqXG4gICAqIFJlLXN1c2NyaWJlIGxhIGZhY3RvcnkgZGVzZGUgY2VybyAobnVldm8gbGlzdGVuZXIgLyBudWV2YSBsZWN0dXJhKS5cbiAgICogRXMgbG8gcXVlIHJlZ2lzdHJhIGVsIGBQYWdlUmVmcmVzaFNlcnZpY2VgIGNvbW8gaGFuZGxlciBkZSBwdWxsLXRvLXJlZnJlc2gsXG4gICAqIHkgdGFtYmnDqW4gZWwgXCJyZWNvbmVjdGFyIG1hbnVhbFwiIHNpIHVuIGxpc3RlbmVyIG11cmnDsy5cbiAgICovXG4gIHJlbG9hZDogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBDcmVhIHVuIHN0cmVhbSByZWZyZXNjYWJsZSBhIHBhcnRpciBkZSB1bmEgZmFjdG9yeSBkZSBPYnNlcnZhYmxlLlxuICpcbiAqIERFQkUgbGxhbWFyc2UgZW4gdW4gaW5qZWN0aW9uIGNvbnRleHQgKGZpZWxkIGluaXRpYWxpemVyIG8gY29uc3RydWN0b3IpIOKAlFxuICogdXNhIGB0b1NpZ25hbGAvYHRvT2JzZXJ2YWJsZWAvYGluamVjdGAgaW50ZXJuYW1lbnRlLlxuICpcbiAqIEBwYXJhbSBmYWN0b3J5IC0gRnVuY2nDs24gcXVlIHByb2R1Y2UgZWwgT2JzZXJ2YWJsZSBhIGNvbnN1bWlyLiBFbCBjYWxsZXJcbiAqICAgZGVjaWRlIGVsIG1vZG86IGAoKSA9PiBmcm9tKHN2Yy5nZXRBbGxPbmNlKCkpYCAob25lLXNob3QpIG9cbiAqICAgYCgpID0+IHN2Yy5nZXRBbGwoKWAgKHJlYWwtdGltZSkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYWNpw7NuIG9wY2lvbmFsIChmYWxsYmFjaywgcmV0cnksIGdhdGUpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBvbmUtc2hvdCAocmVjb21lbmRhZG8gcG9yIGRlZmVjdG8pXG4gKiBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKFxuICogICAoKSA9PiBmcm9tKHRoaXMuc3ZjLmdldEFsbE9uY2UoKSksXG4gKiApO1xuICpcbiAqIC8vIHJlYWwtdGltZSAoaW5ib3gpXG4gKiBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKFxuICogICAoKSA9PiB0aGlzLm5vdGlmcy5nZXRBbGwoNTApLFxuICogKTtcbiAqXG4gKiByZWFkb25seSBpdGVtcyA9IHRoaXMuc3RyZWFtLmRhdGE7XG4gKiByZWFkb25seSBsb2FkaW5nID0gdGhpcy5zdHJlYW0ubG9hZGluZztcbiAqXG4gKiBpb25WaWV3V2lsbEVudGVyKCkge1xuICogICB0aGlzLnBhZ2VSZWZyZXNoLnJlZ2lzdGVyKCgpID0+IHRoaXMuc3RyZWFtLnJlbG9hZCgpKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmcmVzaGFibGVTdHJlYW08VD4oXG4gIGZhY3Rvcnk6ICgpID0+IE9ic2VydmFibGU8VD4sXG4gIG9wdGlvbnM/OiBSZWZyZXNoYWJsZVN0cmVhbU9wdGlvbnM8VD5cbik6IFJlZnJlc2hhYmxlU3RyZWFtPFQ+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zPy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBmYWxsYmFjayA9IChvcHRpb25zPy5mYWxsYmFjayA/PyBudWxsKSBhcyBUIHwgbnVsbDtcbiAgY29uc3QgcmV0cnlDb3VudCA9IG9wdGlvbnM/LnJldHJ5Q291bnQgPz8gNDtcbiAgY29uc3QgcmV0cnlCYXNlRGVsYXlNcyA9IG9wdGlvbnM/LnJldHJ5QmFzZURlbGF5TXMgPz8gNTAwO1xuICBjb25zdCBnYXRlT25GaXJlYmFzZUF1dGggPSBvcHRpb25zPy5nYXRlT25GaXJlYmFzZUF1dGggPz8gdHJ1ZTtcbiAgY29uc3QgYXV0aEdhdGVUaW1lb3V0TXMgPSBvcHRpb25zPy5hdXRoR2F0ZVRpbWVvdXRNcyA/PyAyMDAwMDtcbiAgY29uc3QgZmlyc3RFbWl0VGltZW91dE1zID0gb3B0aW9ucz8uZmlyc3RFbWl0VGltZW91dE1zID8/IDIwMDAwO1xuXG4gIC8vIEZpcmViYXNlU2VydmljZSBlcyBvcGNpb25hbCDigJQgc2luIMOpbCAoYXBwcyBzaW4gRmlyZWJhc2UpIG5vIHNlIGdhdGVhLlxuICBjb25zdCBmaXJlYmFzZSA9IGdhdGVPbkZpcmViYXNlQXV0aCA/IGluamVjdG9yLmdldChGaXJlYmFzZVNlcnZpY2UsIG51bGwpIDogbnVsbDtcblxuICBjb25zdCBfcmVsb2FkID0gc2lnbmFsKDApO1xuICBjb25zdCBfbG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgY29uc3QgX2Vycm9yID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBHYXRlIGRlIEZpcmViYXNlIEF1dGg6IGVsIHN0cmVhbSBubyBhYnJlIGxhIHByaW1lcmEgc3VzY3JpcGNpw7NuIGhhc3RhIHF1ZVxuICAvLyBsYSBzZXNpw7NuIGVzdMOpIGNvbmZpcm1hZGEuIGByYWNlYCBjb24gdW4gYHRpbWVyYCBkZSBzZWd1cmlkYWQg4oCUIHNpIGxhXG4gIC8vIHNlc2nDs24gTlVOQ0Egc2UgZXN0YWJsZWNlICh0b2tlbiBpbnbDoWxpZG8sIHNpZ25JbldpdGhGaXJlYmFzZSBmYWxsw7MpLCBlbFxuICAvLyBnYXRlIGlndWFsIHNlIGxpYmVyYSB0cmFzIGBhdXRoR2F0ZVRpbWVvdXRNc2AgeSBsYSBmYWN0b3J5IHByb2NlZGU6IHNpIG5vXG4gIC8vIGhheSBwZXJtaXNvIHRlcm1pbmFyw6EgZW4gZXN0YWRvIGBlcnJvcmAsIGphbcOhcyBlbiBza2VsZXRvbiBpbmZpbml0by5cbiAgLy8gVGFnIGxvcyBkb3MgaW5wdXRzIGRlbCBgcmFjZWAgcGFyYSBkaXN0aW5ndWlyIGVuIGxvZ3MgY3XDoWwgZ2Fuw7M6IGxhIHNlc2nDs25cbiAgLy8gZGUgRmlyZWJhc2UgQXV0aCAoYGF1dGgtcmVhZHlgKSBvIGVsIHRpbWVvdXQgZGUgc2VndXJpZGFkIChgdGltZW91dGApLlxuICBjb25zdCBhdXRoR2F0ZSQ6IE9ic2VydmFibGU8dW5rbm93bj4gPSBmaXJlYmFzZVxuICAgID8gcmFjZShcbiAgICAgICAgZmlyZWJhc2UuZmlyZWJhc2VBdXRoUmVhZHkkLnBpcGUobWFwKCgpID0+ICdhdXRoLXJlYWR5JyBhcyBjb25zdCkpLFxuICAgICAgICB0aW1lcihhdXRoR2F0ZVRpbWVvdXRNcykucGlwZShtYXAoKCkgPT4gJ3RpbWVvdXQnIGFzIGNvbnN0KSlcbiAgICAgICkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFwKHdpbm5lciA9PiB7XG4gICAgICAgICAgaWYgKHdpbm5lciA9PT0gJ3RpbWVvdXQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIGBbUmVmcmVzaFN0cmVhbV0gYXV0aCBnYXRlIHJlc29sdmVkIGJ5IFRJTUVPVVQgYWZ0ZXIgJHthdXRoR2F0ZVRpbWVvdXRNc31tcyBgICtcbiAgICAgICAgICAgICAgICAnKEZpcmViYXNlIEF1dGggc2Vzc2lvbiBuZXZlciBjb25maXJtZWQpJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tSZWZyZXNoU3RyZWFtXSBhdXRoIGdhdGUgcmVzb2x2ZWQgYnkgZmlyZWJhc2VBdXRoUmVhZHkkIChzZXNzaW9uIHJlYWR5KScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICA6IG9mKHRydWUpO1xuXG4gIGNvbnN0IGRhdGEgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUoX3JlbG9hZCwgeyBpbmplY3RvciB9KS5waXBlKFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgX2xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICBfZXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgIH0pLFxuICAgICAgLy8gRXNwZXJhciBhIEZpcmViYXNlIEF1dGggbGlzdG8gYW50ZXMgZGUgY2FkYSAocmUpc3VzY3JpcGNpw7NuLiBDb21vXG4gICAgICAvLyBgZmlyZWJhc2VBdXRoUmVhZHkkYCBjb21wbGV0YSB0cmFzIGxhIHByaW1lcmEgZW1pc2nDs24sIGxhcyByZWxvYWRzXG4gICAgICAvLyBwb3N0ZXJpb3JlcyByZXN1ZWx2ZW4gZWwgZ2F0ZSBkZSBpbm1lZGlhdG8gKGF1dGggeWEgZXN0w6EgbGlzdG8pLlxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIGF1dGhHYXRlJC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgZmFjdG9yeSgpLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgX2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBfZXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1JlZnJlc2hTdHJlYW1dIGZhY3RvcnkgZW1pdHRlZCBmaXJzdCB2YWx1ZSDigJQgbG9hZGluZz1mYWxzZScpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8gQmFja29mZiBjb3J0byBleHBvbmVuY2lhbCBhY290YWRvIOKAlCBzb2xvIHJlZCBkZSBzZWd1cmlkYWQgcGFyYVxuICAgICAgICAgICAgICAvLyByZWNvbmV4aW9uZXMgdHJhbnNpdG9yaWFzLCBOTyBwYXJhIGN1YnJpciBjb2xkIHN0YXJ0LlxuICAgICAgICAgICAgICByZXRyeSh7XG4gICAgICAgICAgICAgICAgY291bnQ6IHJldHJ5Q291bnQsXG4gICAgICAgICAgICAgICAgZGVsYXk6IChfZXJyLCBhdHRlbXB0KSA9PlxuICAgICAgICAgICAgICAgICAgdGltZXIoTWF0aC5taW4ocmV0cnlCYXNlRGVsYXlNcyAqIDIgKiogKGF0dGVtcHQgLSAxKSwgNDAwMCkpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8gVGVjaG8gYWJzb2x1dG8gcGFyYSBsYSBQUklNRVJBIGVtaXNpw7NuLiBTaSBsYSBmYWN0b3J5IG5vIGVtaXRlXG4gICAgICAgICAgICAgIC8vIG5pIHZhbG9yIG5pIGVycm9yIChzZXJ2aWNpbyBudW5jYSBpbmljaWFsaXphZG8g4oaSIGBFTVBUWWAg4oaSXG4gICAgICAgICAgICAgIC8vIHNpbGVuY2lvKSwgYHRpbWVvdXRgIGRpc3BhcmEgdW4gZXJyb3Ig4oaSIGBjYXRjaEVycm9yYCDihpIgZXN0YWRvXG4gICAgICAgICAgICAgIC8vIGBlcnJvcmAuIE51bmNhIHNrZWxldG9uIHBlcnBldHVvLiBWYSBERVNQVcOJUyBkZSBgcmV0cnlgIHBhcmFcbiAgICAgICAgICAgICAgLy8gcXVlIGN1ZW50ZSBlbCB0aWVtcG8gdG90YWwsIG5vIHBvciBpbnRlbnRvLlxuICAgICAgICAgICAgICB0aW1lb3V0KHsgZmlyc3Q6IGZpcnN0RW1pdFRpbWVvdXRNcyB9KSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIF9sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgX2Vycm9yLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgYFtSZWZyZXNoU3RyZWFtXSBmYWN0b3J5IGZhaWxlZC90aW1lZCBvdXQg4oaSIGVycm9yIHN0YXRlOiAke1xuICAgICAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsbGJhY2sgYXMgVCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogbnVsbCBhcyBUIHwgbnVsbCwgaW5qZWN0b3IgfVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBsb2FkaW5nOiBfbG9hZGluZy5hc1JlYWRvbmx5KCksXG4gICAgZXJyb3I6IF9lcnJvci5hc1JlYWRvbmx5KCksXG4gICAgcmVsb2FkOiAoKSA9PiBfcmVsb2FkLnVwZGF0ZShuID0+IG4gKyAxKSxcbiAgfTtcbn1cbiJdfQ==
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '2.0.825';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC44MjUnO1xuIl19
5
+ export const VERSION = '2.0.827';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC44MjcnO1xuIl19