sigesp 0.9.15-20221221 → 0.9.17-20221221

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.
@@ -894,7 +894,7 @@ export class SigespService {
894
894
  * @returns
895
895
  */
896
896
  getMonedas(tipo, id) {
897
- return this.http.get(`${this.URL}/dao/cfg/moneda_dao.php?tipo=${tipo}&id=${id}`, { headers: this.getHttpHeaders() }).pipe(retry(3), catchError(this.handlerError), map((resp) => resp.map(element => new MMoneda(element))));
897
+ return this.http.get(`${this.URL}/dao/cfg/moneda_dao.php?tipo=${tipo}&id=${id}`, { headers: this.getHttpHeaders() }).pipe(retry(3), catchError(this.handlerError), map((resp) => resp.data.map(element => new MMoneda(element))));
898
898
  }
899
899
  /**
900
900
  * @Description: Obtiene la tasa de cambio
@@ -903,7 +903,7 @@ export class SigespService {
903
903
  * @returns array/null
904
904
  */
905
905
  getCurrencyExchangeRate(tipo = null, id) {
906
- return this.http.get(`${this.URL}/dao/cfg/sigesp_tasacambio_moneda.php?tipo=${tipo}&id=${id}`, { headers: this.getHttpHeaders() }).pipe(retry(3), catchError(this.handlerError), map((resp) => resp.map(element => new MExchangeRate(element))));
906
+ return this.http.get(`${this.URL}/dao/cfg/sigesp_tasa_cambio_dao.php?tipo=${tipo}&id=${id}`, { headers: this.getHttpHeaders() }).pipe(retry(3), catchError(this.handlerError), map((resp) => resp.data.map(element => new MExchangeRate(element))));
907
907
  }
908
908
  /**
909
909
  * @description Abre el dialog de las las cuentas contables (Cuentas Institucionales)
@@ -1952,4 +1952,4 @@ SigespService.ctorParameters = () => [
1952
1952
  { type: MatDialog },
1953
1953
  { type: ToastrService }
1954
1954
  ];
1955
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZXNwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovQXBwU2Vydi93d3cvc2lnZXNwdjMoZ2l0KS9zaWdlc3AtZXN0YWJsZS9zaWdlc3BfY29yZS9wcm9qZWN0cy9zaWdlc3Avc3JjLyIsInNvdXJjZXMiOlsibGliL3NpZ2VzcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBcUIsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFakYsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDL0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDhCQUE4QixFQUFFLDZCQUE2QixFQUFFLHFDQUFxQyxFQUFFLDZCQUE2QixFQUEwQyxhQUFhLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUUxVCxPQUFPLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBRXZILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUMxSSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWxILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRS9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakYsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFBO0FBQzlCLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7OztBQU1qRSxNQUFNLE9BQU8sYUFBYTtJQU94Qix5REFBeUQ7SUFDekQsOEJBQThCO0lBQzlCLGtCQUFrQjtJQUNsQix1Q0FBdUM7SUFDdkMsMEJBQTBCO0lBQzFCLHlCQUF5QjtJQUN6Qix5REFBeUQ7SUFDekQsK0JBQStCO0lBQy9CLHNCQUFzQjtJQUN0QixnQ0FBZ0M7SUFDaEMsT0FBTztJQUNQLGVBQWU7SUFDZixhQUFhO0lBQ2IsbUNBQW1DO0lBQ25DLDRCQUE0QjtJQUM1QixPQUFPO0lBQ1Asc0JBQXNCO0lBQ3RCLDBhQUEwYTtJQUMxYSxJQUFJO0lBQ0osOEJBQThCO0lBQzlCLDBCQUEwQjtJQUcxQixZQUFvQixJQUFnQixFQUFVLE1BQWlCLEVBQVUsS0FBb0I7UUFBekUsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFlO1FBNUJ0RixrQkFBYSxHQUFhLElBQUksQ0FBQztRQUUvQixxQkFBZ0IsR0FBZSxJQUFJLENBQUM7UUFDcEMsYUFBUSxHQUFJLElBQUksQ0FBQztRQUNqQixjQUFTLEdBQUcsV0FBVyxDQUFDO0lBd0JrRSxDQUFDO0lBRWxHOzs7T0FHRztJQUNJLGtCQUFrQixDQUFDLEtBQVU7UUFDbEMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRTtZQUMxQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSx1QkFBdUIsQ0FBQyxNQUFjLEVBQUUsYUFBcUI7UUFDbEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTSxHQUFHLElBQUksQ0FBQyxHQUFHLDRDQUE0QyxFQUFFO1lBQ2pGLE1BQU0sRUFBRSxNQUFNO1lBQ2QsY0FBYyxFQUFFLGFBQWE7U0FDOUIsRUFBRTtZQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1NBQy9CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxzQ0FBc0MsQ0FBQyxXQUE4QztRQUMxRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcscURBQXFELGtDQUNyRixXQUFXLEtBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxZQUFZLEtBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQ7O09BRUc7SUFDSSxtQ0FBbUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBc0MsR0FBRyxJQUFJLENBQUMsR0FBRyxxREFBcUQsRUFBRTtZQUMxSCxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtTQUMvQixDQUFDLENBQUMsSUFBSSxDQUNMLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxpQ0FBaUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQzNGLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksdUNBQXVDLENBQUMsV0FBK0M7UUFDNUYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTSxHQUFHLElBQUksQ0FBQyxHQUFHLHFEQUFxRCxrQ0FDckYsV0FBVyxLQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsWUFBWSxLQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0NBQW9DO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXVDLEdBQUcsSUFBSSxDQUFDLEdBQUcsc0RBQXNELEVBQUU7WUFDNUgsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7U0FDL0IsQ0FBQyxDQUFDLElBQUksQ0FDTCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksa0NBQWtDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdDQUFnQyxDQUFDLFlBQWlDO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxrQ0FBa0MsRUFBRSxZQUFZLEVBQ2hGLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLCtCQUErQixDQUFDLFlBQXlDO1FBQzlFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxtQ0FBbUMsRUFBRSxZQUFZLEVBQzVGLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUFDO2FBQ2hDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBQztnQkFDZCxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSx3Q0FBd0MsQ0FBQyxZQUF5QyxFQUFFLEtBQWE7UUFDdEcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUFFLFlBQVksRUFDdEcsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUM7YUFDaEMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFDO2dCQUNkLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3pEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksMEJBQTBCLENBQUMsS0FBYSxFQUFFLEVBQVU7UUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBbUIsR0FBRyxJQUFJLENBQUMsR0FBRztlQUN6QyxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUM7YUFDM0QsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ3ZFLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksb0NBQW9DLENBQUMsSUFBVyxFQUFFLGFBQWdDO1FBQ3ZGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQzlELElBQUksRUFBRTtnQkFDSixJQUFJO2dCQUNKLGFBQWE7YUFDZDtZQUNELEtBQUssRUFBRSxPQUFPO1lBQ2QsU0FBUyxFQUFFLE1BQU07U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxrQkFBa0IsQ0FBQyxnQkFBeUIsS0FBSztRQUN2RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFtQixHQUFHLElBQUksQ0FBQyxHQUFHLG1DQUNoRCxhQUFhLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUN0QyxFQUFFLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUM7YUFDcEMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ3ZFLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUN2RCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7d0JBQ3hELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTs0QkFDdEQsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dDQUM3RCxPQUFPLENBQUMsSUFBSSxhQUFhLENBQUM7b0NBQ3hCLFlBQVk7b0NBQ1osWUFBWTtvQ0FDWixjQUFjO29DQUNkLGFBQWE7b0NBQ2IsYUFBYTtpQ0FDZCxDQUFDLENBQUMsQ0FBQzs0QkFDTixDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNVLDBCQUEwQjs7WUFDckMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFPLE9BQU8sRUFBRSxFQUFFO2dCQUVuQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBRWQsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUE7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFBO2dCQUNGLHNFQUFzRTtnQkFDdEUseUJBQXlCO2dCQUN6QixLQUFLO2dCQUVMLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXRCLENBQUMsQ0FBQSxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFRDs7Ozs7T0FLRztJQUNJLHlCQUF5QixDQUFDLFlBQW1CO1FBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQzNGLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSx5QkFBeUIsQ0FBQyxVQUEyQztRQUMxRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQUUsVUFBVSxFQUN6RixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHNCQUFzQixDQUFDLFVBQTJDO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFBRSxVQUFVLEVBQzFGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxzQkFBc0IsQ0FBQyxRQUFnQixJQUFJO1FBQ2hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsMkRBQTJELEVBQ3hFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUkscUNBQXFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDNUYsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSw2QkFBNkIsQ0FBQyxLQUFjO1FBQ2pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsOENBQThDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQzVGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUN6RixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0kseUJBQXlCLENBQUMsWUFBbUI7UUFDbEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFDM0YsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHlCQUF5QixDQUFDLFVBQTJDO1FBQzFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFBRSxVQUFVLEVBQ3pGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksc0JBQXNCLENBQUMsVUFBMkM7UUFDdkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUFFLFVBQVUsRUFDMUYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxzQkFBc0IsQ0FBQyxLQUFjO1FBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsOENBQThDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQzVGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUN6RixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksMEJBQTBCLENBQUMsWUFBbUI7UUFDbkQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFDM0YsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLDBCQUEwQixDQUFDLFVBQTRDO1FBQzVFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFBRSxVQUFVLEVBQ3pGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksdUJBQXVCLENBQUMsVUFBNEM7UUFDekUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUFFLFVBQVUsRUFDMUYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLCtCQUErQixDQUFDLEtBQWE7UUFDbEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRywyREFBMkQsRUFDeEUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxxQ0FBcUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUN4RyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksdUJBQXVCLENBQUMsS0FBYztRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxHQUFHLDhDQUE4QyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUM1RixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDMUYsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHdCQUF3QixDQUFDLFlBQW1CO1FBQ2pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQzNGLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHdCQUF3QixDQUFDLFNBQXlDO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFBRSxTQUFTLEVBQ3hGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0kscUJBQXFCLENBQUMsZ0JBQWdEO1FBQzNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFDOUUsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHFCQUFxQixDQUFDLEtBQWE7UUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBaUMsR0FBRyxJQUFJLENBQUMsR0FBRyxzREFBc0QsS0FBSyxFQUFFLEVBQzdILEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDMUYsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksd0JBQXdCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWlDLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQzdHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDMUYsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHdCQUF3QixDQUFDLFlBQW1CO1FBQ2pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLEVBQzNGLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHdCQUF3QixDQUFDLFNBQXlDO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFBRSxTQUFTLEVBQ3hGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0kscUJBQXFCLENBQUMsZ0JBQWdEO1FBQzNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFDOUUsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHFCQUFxQjtRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFpQyxHQUFHLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxFQUM3RyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzFGLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFtQjtRQUV4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLG1EQUFtRCxFQUN0RyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFDRDs7OztPQUlHO0lBQ0ksbUJBQW1CO1FBRXhCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsbUNBQW1DLEVBQ3RGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsSUFBZSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQzdDO1lBQ0QsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQkFBbUI7UUFFekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLHVDQUF1QyxlQUFlLEVBQUUsRUFDbkcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFlLEVBQUUsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUcsSUFBSSxDQUFDLElBQUksSUFBRyxJQUFJLEVBQUM7b0JBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLEdBQUMsRUFBRSxDQUFDO2lCQUNkO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBR00sWUFBWSxDQUFDLElBQVU7UUFDNUIsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFDMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFDM0UsSUFDRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUM1RCxFQUFFLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVk7UUFFakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLG1DQUFtQyxFQUM5RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQWUsRUFBRSxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDdEM7WUFDRCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0sYUFBYSxDQUFDLGFBQXFCLElBQUksRUFBRSxNQUFlO1FBRTdELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0NBQWdDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxVQUFVLEdBQzFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUNULEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUNuQyxDQUFDLElBQUksQ0FFSixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDUixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUE7SUFFSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHVCQUF1QjtRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUEwQixHQUFHLElBQUksQ0FBQyxHQUFHLHdDQUF3QyxFQUNqRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDakYsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBQyxJQUFXO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyx3Q0FBd0MsSUFBSSxFQUFFLEVBQ3pGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUM7Ozs7T0FJRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLCtCQUErQixFQUMxRSxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FDL0IsQ0FBQyxJQUFJLENBQ0osS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQWMsRUFBRSxFQUFFO1lBQ3JCLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTthQUM5RDtZQUNELE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxNQUFhO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxrREFBa0QsTUFBTSxFQUFFLEVBQ3JHLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUMvQixDQUFDLElBQUksQ0FDSixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUU7WUFDckIsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7YUFDckU7WUFDRCxPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBR0Q7Ozs7O09BS0c7SUFDSSxxQkFBcUI7SUFDMUIsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIseUJBQXlCO0lBQ3pCLE9BQWlCLEVBQ2pCLEtBQWEsRUFDYixVQUFpQixFQUNqQixjQUF3QixJQUFJLEVBQzVCLFFBQWdCLE9BQU8sRUFDdkIsVUFJSTtRQUNGLFlBQVksRUFBRSxLQUFLO1FBQ25CLFdBQVcsRUFBRSxLQUFLO0tBRW5CO1FBRUQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDckQsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsV0FBVzthQUVaO1lBQ0QsS0FBSyxFQUFFLEtBQUs7WUFDWixTQUFTLEVBQUUsTUFBTTtZQUNqQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7WUFDaEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1NBQ25DLENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFDRDs7OztPQUlHO0lBQ1UsMEJBQTBCOztZQUNyQyxJQUFJLE1BQU0sR0FBdUIsTUFBTSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyRixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFO29CQUNKLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUM7b0JBQ25DLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUM7b0JBQ3ZDLEtBQUssRUFBRSxxQ0FBcUM7b0JBQzVDLFVBQVUsRUFBRSxNQUFNO2lCQUNOO2dCQUNkLEtBQUssRUFBRSxPQUFPO2dCQUNkLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDSSwwQkFBMEI7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsR0FBRyxJQUFJLENBQUMsR0FBRyw2QkFBNkIsRUFDakYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQzVFLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBc0IsR0FBRyxJQUFJLENBQUMsR0FBRyw2Q0FBNkMsRUFDbEcsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQy9CLENBQUMsSUFBSSxDQUNKLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQzdFLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksaUJBQWlCLENBQUMsS0FBYSxFQUFFLE9BQWdCO1FBQ3RELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ2pELElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJO2FBQ3BDO1lBQ0QsS0FBSyxFQUFFLE9BQU87WUFDZCxTQUFTLEVBQUUsTUFBTTtTQUNsQixDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksaUJBQWlCLENBQUMsU0FBb0IsRUFBRSxJQUFZO1FBQ3pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGtCQUFrQixDQUFDLFNBQW9CLEVBQUUsSUFBWTtRQUMxRCxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFdBQVcsQ0FBQyxLQUFXO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUU7WUFDN0MsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFdBQVcsQ0FBQyxLQUFXO1FBQzVCLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFO1lBQzdDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFQTs7Ozs7O01BTUU7SUFDTSxRQUFRLENBQUMsS0FBVztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzlHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsT0FBTyxJQUFFLEVBQUU7ZUFDL0csS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLEVBQUc7WUFDeEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNIOzs7Ozs7T0FNRztJQUNNLFFBQVEsQ0FBQyxLQUFXO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUc7ZUFDNUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7ZUFDN0csS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQU0sS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUcsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzFHLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFNLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRztlQUMxRyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBRyxLQUFLLENBQUMsT0FBTyxJQUFFLElBQUksSUFBSyxLQUFLLENBQUMsT0FBTyxJQUFFLEdBQUcsSUFBRyxLQUFLLENBQUMsT0FBTyxJQUFFLEdBQUcsRUFBQztZQUN0RyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7O0tBS0M7SUFDTyxRQUFRLENBQUMsS0FBVztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUUsR0FBRyxDQUFDLElBQUssS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBRSxHQUFHO2VBQzlHLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSyxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFFLEdBQUcsRUFBQztZQUMzRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUg7Ozs7T0FJRztJQUNVLDZCQUE2Qjs7WUFDeEMsSUFBSSxhQUFhLEdBQXdCLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDekYsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2xELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDO29CQUNuSCxLQUFLLEVBQUUsa0NBQWtDO29CQUN6QyxVQUFVLEVBQUUsYUFBYTtpQkFDYjtnQkFDZCxLQUFLLEVBQUUsT0FBTztnQkFDZCxTQUFTLEVBQUUsTUFBTTthQUNsQixDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0ksc0JBQXNCO1FBQzNCLE1BQU0sT0FBTyxHQUFhO1lBQ3hCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLGVBQWUsRUFBRTtnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTthQUMzQztTQUNGLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFzQixHQUFHLElBQUksQ0FBQyxHQUFHLGdDQUFnQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDbkcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUMxRSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDVSxvQkFBb0IsQ0FDL0IsT0FBaUIsRUFDakIsS0FBYSxFQUNiLFVBQWlCLEVBQ2pCLGNBQXdCLElBQUksRUFDNUIsUUFBZ0IsT0FBTyxFQUN2QixVQUdJLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFDOztZQUU3QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFO29CQUNKLE9BQU87b0JBQ1AsS0FBSztvQkFDTCxVQUFVO29CQUNWLFdBQVc7aUJBQ0M7Z0JBQ2QsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUM5RCxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSzthQUNsRSxDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFRDs7Ozs7OztPQU9HO0lBQ1UscUJBQXFCLENBQ2hDLE9BQWlCLEVBQ2pCLEtBQWEsRUFDYixVQUFpQixFQUNqQixVQUF3QixFQUN4QixjQUF3QixJQUFJLEVBQzVCLFFBQWdCLE9BQU87O1lBRXZCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO2dCQUM1RCxJQUFJLEVBQUU7b0JBQ0osT0FBTztvQkFDUCxLQUFLO29CQUNMLFVBQVU7b0JBQ1YsV0FBVztvQkFDWCxVQUFVO2lCQUNFO2dCQUNkLEtBQUssRUFBRSxLQUFLO2dCQUNaLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDVSxtQkFBbUI7O1lBQzlCLElBQUksV0FBVyxHQUFpQixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4RSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFO29CQUNKLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQztvQkFDdkYsS0FBSyxFQUFFLHlCQUF5QjtvQkFDaEMsVUFBVSxFQUFFLFdBQVc7aUJBQ1g7Z0JBQ2QsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsU0FBUyxFQUFFLE1BQU07YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0MsQ0FBQztLQUFBO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWM7UUFDbkIsTUFBTSxPQUFPLEdBQWE7WUFDeEIsU0FBUyxFQUFFLGFBQWE7WUFDeEIsZUFBZSxFQUFFO2dCQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRztnQkFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFO2FBQzNDO1NBQ0YsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyw4QkFBOEIsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzFGLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNVLGlCQUFpQjs7WUFDNUIsSUFBSSxLQUFLLEdBQWMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNsRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO29CQUNyRCxLQUFLLEVBQUUscUJBQXFCO29CQUM1QixXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUM7b0JBQ3pELFVBQVUsRUFBRSxLQUFLO2lCQUNMO2dCQUNkLEtBQUssRUFBRSxPQUFPO2dCQUNkLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVIOzs7Ozs7OztPQVFHO0lBR00sVUFBVSxDQUFDLElBQVcsRUFBQyxFQUFVO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxnQ0FBZ0MsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUMxRixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDaEUsQ0FBQztJQUNKLENBQUM7SUFHRDs7Ozs7T0FLRztJQUNJLHVCQUF1QixDQUFDLE9BQXVCLElBQUksRUFBRSxFQUFVO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsOENBQThDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDOUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBTUQ7Ozs7T0FJRztJQUNVLGdDQUFnQzs7WUFDM0MsSUFBSSxRQUFRLEdBQTJCLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUYsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2xELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDO29CQUNuQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDO29CQUN2QyxLQUFLLEVBQUUsMENBQTBDO29CQUNqRCxVQUFVLEVBQUUsUUFBUTtpQkFDUjtnQkFDZCxLQUFLLEVBQUUsT0FBTztnQkFDZCxTQUFTLEVBQUUsTUFBTTthQUNsQixDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0kseUJBQXlCLENBQUMsU0FBbUI7UUFDbEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBeUIsR0FBRyxJQUFJLENBQUMsR0FBRywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUN6SCxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDaEYsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ1UsNEJBQTRCOztZQUN2QyxJQUFJLFFBQVEsR0FBeUIsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwRixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEQsSUFBSSxFQUFFO29CQUNKLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUM7b0JBQ25DLEtBQUssRUFBRSxvQ0FBb0M7b0JBQzNDLFVBQVUsRUFBRSxRQUFRO2lCQUNSO2dCQUNkLEtBQUssRUFBRSxPQUFPO2dCQUNkLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDSSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsR0FBRyxJQUFJLENBQUMsR0FBRyxxQ0FBcUMsRUFDekYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQzVFLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDVSwrQkFBK0IsQ0FDMUMsTUFBYyxFQUNkLFNBQW1DLElBQUksRUFDdkMsUUFBZ0IsT0FBTzs7WUFFdkIsSUFBSSxPQUFPLEdBQXlCLEVBQUUsQ0FBQztZQUV2QyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMxRCxPQUFPLEdBQUcsR0FBRyxDQUFDO2dCQUNkLElBQUksTUFBTSxFQUFFO29CQUNWLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTt3QkFDakIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQzNCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFBO3dCQUNsQyxDQUFDLENBQUMsQ0FBQTtxQkFDSDtvQkFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7d0JBQ2YsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQzNCLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFBO3dCQUM5QixDQUFDLENBQUMsQ0FBQTtxQkFDSDtpQkFDRjtnQkFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDeEIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQTtvQkFDbEUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtvQkFDekQsT0FBTyxDQUFDLENBQUE7Z0JBQ1YsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUMsQ0FBQTtZQUNGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUM5QixDQUFDLFFBQVEsRUFBQyxjQUFjLEVBQUMsWUFBWSxFQUFDLFVBQVUsQ0FBQyxFQUNqRCxNQUFNLEVBQ04sT0FBTyxFQUNQLENBQUMsUUFBUSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsTUFBTSxDQUFDLEVBQ3pDLEtBQUssQ0FDTixDQUFBO1FBQ0gsQ0FBQztLQUFBO0lBRUQ7Ozs7O09BS0c7SUFDVSx5QkFBeUIsQ0FDcEMsTUFBYyxFQUNkLGNBQXVCLElBQUksRUFDM0IsUUFBZ0IsT0FBTzs7WUFFdkIsSUFBSSxPQUFPLEdBQXFCLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDckQsT0FBTyxHQUFHLEdBQUcsQ0FBQTtnQkFDYixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDM0IsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQTtnQkFDeEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNULENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUE7b0JBQ2xFLE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7WUFDRixJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FDL0IsQ0FBQyxRQUFRLEVBQUMsY0FBYyxFQUFDLFlBQVksRUFBQyxZQUFZLENBQUMsRUFDbkQsTUFBTSxFQUNOLE9BQU8sRUFDUCxDQUFDO3dCQUNDLFdBQVcsRUFBRSxRQUFRO3dCQUNyQixRQUFRLEVBQUUsUUFBUTtxQkFDbkIsRUFBRTt3QkFDRCxXQUFXLEVBQUUsWUFBWTt3QkFDekIsUUFBUSxFQUFFLFlBQVk7cUJBQ3ZCLENBQUMsRUFDRixDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxFQUNsRCxLQUFLLENBQ04sQ0FBQTthQUNGO2lCQUFNO2dCQUNMLElBQUksZ0JBQWdCLEdBQXFCLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUNyRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7cUJBQ3pCO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUNGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUM5QixDQUFDLFFBQVEsRUFBQyxjQUFjLEVBQUMsWUFBWSxDQUFDLEVBQ3RDLE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxFQUNwQyxLQUFLLENBQ04sQ0FBQTthQUNGO1FBQ0gsQ0FBQztLQUFBO0lBRUQ7Ozs7O09BS0c7SUFDVSwwQkFBMEIsQ0FDckMsTUFBYyxFQUNkLGNBQXVCLElBQUksRUFDM0IsUUFBZ0IsT0FBTzs7WUFFdkIsSUFBSSxPQUFPLEdBQXNCLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQWMsRUFBRSxFQUFFO2dCQUNqRSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTtnQkFDbEIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzNCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUE7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDVCxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFBO29CQUNsRSxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQy9CLENBQUMsUUFBUSxFQUFDLGNBQWMsRUFBQyxZQUFZLEVBQUMsWUFBWSxDQUFDLEVBQ25ELE1BQU0sRUFDTixPQUFPLEVBQ1AsQ0FBQzt3QkFDQyxXQUFXLEVBQUUsUUFBUTt3QkFDckIsUUFBUSxFQUFFLFFBQVE7cUJBQ25CLEVBQUU7d0JBQ0QsV0FBVyxFQUFFLFlBQVk7d0JBQ3pCLFFBQVEsRUFBRSxZQUFZO3FCQUN2QixDQUFDLEVBQ0YsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsRUFDbEQsS0FBSyxDQUNOLENBQUE7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLGdCQUFnQixHQUFzQixFQUFFLENBQUM7Z0JBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDckQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO3FCQUN6QjtnQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDRixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FDOUIsQ0FBQyxRQUFRLEVBQUMsY0FBYyxFQUFDLFlBQVksQ0FBQyxFQUN0QyxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsRUFDcEMsS0FBSyxDQUNOLENBQUE7YUFDRjtRQUNILENBQUM7S0FBQTtJQUVNLHVCQUF1QjtRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsd0NBQXdDLEVBQ3hFLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUFDO2FBQ2hDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRTtZQUNkLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxpQkFBaUIsQ0FBQyxZQUFtQixJQUFJO1FBQzlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxrQ0FDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxFQUFFLEVBQ0YsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFQTs7Ozs7OztNQU9FO0lBQ00sWUFBWSxDQUFDLE1BQWM7UUFFaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLGtDQUFrQyxNQUFNLEVBQUUsRUFDcEYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxNQUFjO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxtQ0FBbUMsTUFBTSxFQUFFLEVBQ25GLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGlCQUFpQixDQUFDLElBQVksRUFBQyxNQUFjO1FBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsb0NBQW9DLElBQUksV0FBVyxNQUFNLEVBQUUsRUFDMUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMzRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxXQUFXLENBQUMsSUFBWSxFQUFDLE1BQWMsRUFBQyxTQUFpQjtRQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsb0NBQW9DLElBQUksV0FBVyxNQUFNLGNBQWMsU0FBUyxFQUFFLEVBQzNILEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDckQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDTSxPQUFPLENBQUMsSUFBWSxFQUFDLE1BQWM7UUFDMUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBUSxHQUFHLElBQUksQ0FBQyxHQUFHLGtDQUFrQyxJQUFJLFdBQVcsTUFBTSxFQUFFLEVBQ2hHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFSzs7Ozs7OztFQU9IO0lBQ00sY0FBYyxDQUFDLElBQVksRUFBQyxNQUFjLEVBQUUsU0FBaUIsRUFBQyxTQUFpQjtRQUNwRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcscUNBQXFDLElBQUksV0FBVyxNQUFNLGNBQWMsU0FBUyxjQUFjLFNBQVMsRUFBRSxFQUN0SixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3hELENBQUM7SUFDSixDQUFDO0lBRUw7Ozs7T0FJRztJQUNJLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLDJCQUEyQixFQUNyRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLGdDQUFnQyxRQUFRLEVBQUUsRUFDckYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRzs7Ozs7O0dBTUQ7SUFDUyxhQUFhLENBQUMsT0FBMkIsSUFBSSxFQUFFLEVBQVU7UUFDL0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDhCQUE4QixFQUN6RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUdMOzs7O09BSUc7SUFDSSxvQkFBb0I7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLG9DQUFvQyxFQUMvRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLCtCQUErQixFQUMxRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyw0QkFBNEIsRUFDdkUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxnQ0FBZ0MsRUFDM0UsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxhQUFhLENBQUMsU0FBbUIsSUFBSSxFQUFFLE9BQWUsSUFBSTtRQUUvRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsa0NBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxNQUFNLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzlDLEVBQUUsRUFDRixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUdEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxTQUF3QixJQUFJLEVBQUUsT0FBZSxJQUFJO1FBRWhFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxrQ0FDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLE1BQU0sU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDOUMsRUFBRSxFQUNGLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNVLHFCQUFxQjs7WUFDaEMsSUFBSSxXQUFXLEdBQWlCLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNsRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUM7b0JBQ2xDLEtBQUssRUFBRSx5Q0FBeUM7b0JBQ2hELFVBQVUsRUFBRSxXQUFXO2lCQUNYO2dCQUNkLEtBQUssRUFBRSxPQUFPO2dCQUNkLFNBQVMsRUFBRSxNQUFNO2FBQ2xCLENBQUMsQ0FBQztZQUVILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDSSxjQUFjO1FBQ25CLElBQUksT0FBTyxHQUFhO1lBQ3RCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLGVBQWUsRUFBRTtnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTthQUMzQztTQUNGLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcseUNBQXlDLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNyRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUMvRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSw0QkFBNEIsQ0FBQyxPQUFlLElBQUk7UUFDckQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDBDQUEwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQzVILEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFHRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLEVBQVU7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLCtCQUErQixFQUFFLEVBQUUsRUFDOUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyx3QkFBd0IsRUFDbkUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxvQ0FBb0MsRUFDL0UsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0NBQWdDLEVBQ2hFLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxDQUFDO2FBQ2hDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRTtZQUNkLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUMvRDtpQkFBTTtnQkFDTCxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUNmO1lBQ0QsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxtQ0FBbUMsRUFDOUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0NBQWdDLEVBQzNFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckM7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsaUNBQWlDLEVBQzVFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0saUJBQWlCLENBQUMsZ0JBQXlCLEtBQUs7UUFDckQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLG9DQUM5QixhQUFhLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUN0QyxFQUFFLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3hDLEdBQUcsQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO1lBQ2QsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2FBQ3JEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVNLFVBQVU7UUFFZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxHQUFHLHlCQUF5QixFQUNwQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FDbkMsQ0FBQyxJQUFJLENBQ0osR0FBRyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUU7WUFDckIsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2FBQzVDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBRUgsQ0FBQztJQUVNLGFBQWE7UUFFbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRyw4QkFBOEIsRUFDekMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQ25DLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEdBQWMsRUFBRSxFQUFFO1lBQ3JCLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNoRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUVILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFVBQVUsQ0FBQyxJQUFZLEVBQUMsRUFBVTtRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsa0NBQWtDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDNUYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFQTs7Ozs7TUFLRTtJQUNNLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkNBQTZDLFFBQVEsWUFBWSxTQUFTLEVBQUUsRUFDdkgsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVGOzs7Ozs7Ozs7OztPQVdHO0lBQ00scUJBQXFCLENBQUMsR0FBTyxFQUFFLENBQVM7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDJDQUEyQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQ2xHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUN6RDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFDSDs7Ozs7T0FLRztJQUVNLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLHVDQUF1QyxRQUFRLEVBQUUsRUFDNUYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFQTs7Ozs7SUFLQTtJQUVRLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcscUNBQXFDLFdBQVcsRUFBRSxFQUM3RixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0Q7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUo7Ozs7TUFJRTtJQUNNLHVCQUF1QjtRQUU1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsdUNBQXVDLGVBQWUsRUFBRSxFQUNuRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDO29CQUNwQixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4RDthQUNKO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRUosQ0FBQztJQUVGOzs7Ozs7Ozs7TUFTRTtJQUVPLFNBQVMsQ0FBQyxJQUFXLEVBQUMsRUFBVTtRQUN0QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsMkNBQTJDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDckcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVKOzs7OztPQUtHO0lBQ08sZUFBZSxDQUFDLElBQVcsRUFBQyxFQUFVO1FBQzNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRywyQ0FBMkMsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUNyRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7S0FJQztJQUNPLGNBQWMsQ0FBQyxJQUFXLEVBQUMsRUFBVTtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsa0NBQWtDLElBQUksT0FBTyxFQUFFLEVBQUUsRUFDNUYsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsRDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztLQUlDO0lBQ08sZUFBZSxDQUFDLElBQVcsRUFBQyxFQUFVO1FBQzVDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxpQ0FBaUMsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUMzRixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVIOzs7O09BSUc7SUFDVyxhQUFhLENBQUMsSUFBVyxFQUFDLFVBQWtCLEVBQUMsUUFBZ0I7UUFDbkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBWSxHQUFHLElBQUksQ0FBQyxHQUFHLDJDQUEyQyxVQUFVLGFBQWEsUUFBUSxFQUFFLEVBQ3ZILEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBT0EsYUFBYSxDQUFDLE1BRVU7UUFFN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRyxpREFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFDeEIsV0FBVyxNQUFNLEVBQUUsRUFDbkIsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQ25DLENBQUE7SUFFSCxDQUFDO0lBRUY7Ozs7OztRQU1JO0lBQ0ksY0FBYyxDQUFDLElBQVk7UUFDaEMsQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLElBQUksR0FBQyxrQkFBa0IsQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFO1NBQy9DLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNVLE9BQU87O1lBQ2xCLElBQUksUUFBUSxHQUFjLENBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMzSCx1QkFBdUI7WUFDdkIsV0FBVztZQUNYLElBQUksUUFBUSxFQUFFO2dCQUNaLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7YUFDOUI7UUFFSCxDQUFDO0tBQUE7SUFFRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFDLE9BQWU7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLE9BQWU7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVDOzs7OztLQUtDO0lBQ08sb0JBQW9CLENBQUMsT0FBZTtRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1IsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUlGOzs7OztNQUtFO0lBQ0ksa0JBQWtCLENBQUMsT0FBZTtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1IsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFFBQVEsQ0FBQyxJQUFlO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixJQUFJLGFBQWEsR0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxHQUFXO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksSUFBSTtRQUNULGdHQUFnRztRQUNoRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEMsOENBQThDO1lBQzlDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ1UsUUFBUTs7WUFDbkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7aUJBQ2Q7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2lCQUNmO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO0tBQUE7SUFFTyxZQUFZLENBQUMsS0FBd0I7UUFDM0MsT0FBTyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0lBRUM7Ozs7OztLQU1DO0lBQ08sV0FBVyxDQUFDLElBQVcsRUFBRSxJQUFTO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRztlQUNwQyxJQUFJLFdBQVcsSUFBSSxDQUFDLE1BQU0sV0FBVyxJQUFJLENBQUMsTUFBTSxhQUFhLElBQUksQ0FBQyxRQUFRLGVBQWUsSUFBSSxDQUFDLFVBQVUsV0FBVyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQ3JJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7S0FPQztJQUNRLGlCQUFpQixDQUFDLElBQVcsRUFBQyxJQUFTO1FBQzVDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRztpQkFDcEMsSUFBSSxXQUFXLElBQUksQ0FBQyxNQUFNLFdBQVcsSUFBSSxDQUFDLE1BQU0sYUFBYSxJQUFJLENBQUMsUUFBUSxlQUFlLElBQUksQ0FBQyxVQUFVLFdBQVcsSUFBSSxDQUFDLE1BQU0sYUFBYSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2pLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBR1A7Ozs7OztPQU1HO0lBRUkseUJBQXlCLENBQUMsVUFBaUIsRUFBQyxJQUFXO1FBQzFELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyx3Q0FBd0MsVUFBVSxTQUFTLElBQUksRUFBRSxFQUM1RyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVJOzs7O01BSUU7SUFDUSxvQkFBb0IsQ0FBQyxVQUFpQixFQUFDLE9BQWMsRUFBRSxhQUFxQjtRQUNqRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0RBQWdELFVBQVUsWUFBWSxPQUFPLGtCQUFrQixhQUFhLEVBQUUsRUFDOUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSixDQUFDO0lBRVAsQ0FBQztJQUVEOzs7O01BSUU7SUFDTSxXQUFXLENBQUMsVUFBaUIsRUFBQyxPQUFjO1FBQ2pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxvQ0FBb0MsVUFBVSxZQUFZLE9BQU8sRUFBRSxFQUNuRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFFSixDQUFDO0lBRUE7Ozs7R0FJRDtJQUNLLEdBQUcsQ0FBQyxJQUFVO1FBRW5CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxzQkFBc0IsRUFBRSxJQUFJLEVBQUc7WUFDMUQsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7U0FDbkMsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUViLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUVMLENBQUM7SUFJRjs7OztPQUlHO0lBQ0ssV0FBVyxDQUFFLFNBQWtCO1FBQ25DLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsOENBQThDO1FBQ3hHLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0RBQWtEO1FBQzNHLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsSCxPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O01BSUU7SUFDSyxXQUFXLENBQUUsU0FBa0I7UUFDbkMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyw4Q0FBOEM7UUFDeEcsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxrREFBa0Q7UUFDM0csSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoSCxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsT0FBTyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUdEOzs7Ozs7Ozs7Ozs7Ozs7OztNQWlCRTtJQUNNLHdCQUF3QixDQUFFLGFBQXNCLEVBQUUsUUFBaUI7UUFDckUsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxDQUFFO1FBQzVELElBQUksT0FBTyxJQUFFLEdBQUcsRUFBQztZQUNiLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNsQixDQUFDO0lBRUw7Ozs7U0FJSztJQUNHLFlBQVk7UUFFakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsQ0FBQzthQUN4RCxJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1lBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDakQsdUJBQXVCO1lBRXZCLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUksOEJBQThCO1FBQzNELENBQUMsQ0FBQyxDQUNILENBQUM7SUFFSixDQUFDO0lBQ0Y7Ozs7T0FJRztJQUNLLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBRSxDQUFDLElBQVMsRUFBSSxFQUFFO1lBQzFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0Y7Ozs7T0FJRztJQUNLLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFQTs7OztLQUlDO0lBRU8sZUFBZSxDQUFDLEdBQWE7UUFDbEMsSUFBSSxJQUFJLEdBQUMsRUFBRSxDQUFDO1FBQ1osR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUEsRUFBRSxHQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUEsQ0FBQSxDQUFDLENBQUMsQ0FBQztRQUMvQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsNkJBQTZCLEVBQUMsSUFBSSxFQUM5RSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsQ0FBQzthQUNqQyxJQUFJLENBQ0gsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLEdBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FDakMsQ0FBQztJQUNKLENBQUM7SUFFSjs7Ozs7Ozs7T0FRRztJQUNLLGNBQWMsQ0FBQyxPQUFjLEVBQUMsVUFBaUIsRUFBQyxTQUFpQjtRQUN0RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsK0NBQStDLE9BQU8sT0FBTyxVQUFVLE1BQU0sU0FBUyxFQUFFLEVBQ25JLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkQ7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzs7O1lBbitFQSxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQXZFTSxVQUFVO1lBS1YsU0FBUztZQU9ULGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNUHJlZmlqbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL01QcmVmaWpvLm1vZGVsJztcclxuaW1wb3J0IHsgTUVudGVycHJpc2UgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9FbnRlcnByaXNlLm1vZGVsJztcclxuaW1wb3J0IHsgTVBlcnNvbmFsTm9taW5hIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTVBlcnNvbmFsTm9taW5hLm1vZGVsJztcclxuaW1wb3J0IHsgTUhvamFUaWVtcG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NSG9qYVRpZW1wby5tb2RlbCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTVVzdWFyaW8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy91c2VyLm1vZGVsJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IElSZXF1ZXN0IH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvUmVxdWVzdCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTVByb3ZlZWRvciB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3Byb3ZlZWRvcmVzLm1vZGVsJztcclxuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yLCByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTVVzdWFyaW9QcmVmaWpvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvdXNlclByZWZpeC5tb2RlbCc7XHJcbmltcG9ydCB7IElDYXRhbG9nbywgZmlsdGVyRGF0YSB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL0NhdGFsb2dvJztcclxuaW1wb3J0IHsgQ2F0YWxvZ29Db21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL2NhdGFsb2dvL2NhdGFsb2dvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1DdWVudGFQcmVzdXB1ZXN0byB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2N1ZW50YVByZXN1cHVlc3RvLm1vZGVsJztcclxuaW1wb3J0IHsgTUN1ZW50YUluc3RpdHVjaW9uYWwgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9jdWVudGFJbnN0aXR1Y2lvbmFsLm1vZGVsJztcclxuaW1wb3J0IHsgTU1vbmVkYSwgTU1vbmVkYUNvbmZpZyB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL21vbmVkYS5tb2RlbCc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgTVVuaWRhZFRyaWJ1dGFyaWEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NUQi91bmlkYWRUcmlidXRhcmlhLm1vZGVsJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbmZpcm1Db21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL2NvbmZpcm0vY29uZmlybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhY2lvblNDRyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL2NvbmZpZ3VyYWNpb25TQ0cubW9kZWwnO1xyXG5pbXBvcnQgeyBNUGxhblVuaWNvQ3VlbnRhIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0cvcGxhblVuaWNvQ3VlbnRhLm1vZGVsJztcclxuaW1wb3J0IHsgSUNvbmV4aW9uIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvVXN1YXJpbyc7XHJcbmltcG9ydCB7IFRhYmxlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9zaGFyZWQvY29tcG9uZW50cy90YWJsZS1zZWxlY3QvdGFibGUtc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1Db25maWd1cmF0aW9uU1BHIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvY29uZmlndXJhdGlvblNQRy5tb2RlbCc7XHJcbmltcG9ydCB7IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFPbmUsIE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd28sIE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZSwgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXIsIE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGUsIE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWVDb21wbGV0ZSwgTUFsbFN0cnVjdHVyZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2VzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYS5tb2RlbCc7XHJcbmltcG9ydCB7IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFPbmUsIElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd28sIElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZSwgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXIsIElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGUsIElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhJztcclxuaW1wb3J0IHsgTUNlbnRyb0Nvc3RvLCBNVXN1YXJpb0NlbnRyb0Nvc3RvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0cvY2VudHJvQ29zdG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNRnVlbnRlRmluYW5jaWFtaWVudG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9mdWVudGVGaW5hbmNpYW1pZW50by5tb2RlbCc7XHJcbmltcG9ydCB7IE1DdWVudGFFZ3Jlc29zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvZXhwZW5zaXZlQWNjb3VudC5tb2RlbCc7XHJcbmltcG9ydCB7IENhdGFsb2dvRXN0cnVjdHVyYXNDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL2NhdGFsb2dvLWVzdHJ1Y3R1cmFzL2NhdGFsb2dvLWVzdHJ1Y3R1cmFzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElVcGRhdGVEaXN0cmlidXRpb24sIElVcGRhdGVEaXN0cmlidXRpb25JbmdyZXNvcyB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL0N1ZW50YUVncmVzb3MnO1xyXG5pbXBvcnQgeyBDYXRhbG9nb0RvYmxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL2NhdGFsb2dvLWRvYmxlLWlucHV0L2NhdGFsb2dvLWRvYmxlLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1TaXN0ZW1hIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TU1Mvc2lzdGVtYSc7XHJcbmltcG9ydCB7IElDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcywgSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL0NvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW8nO1xyXG5pbXBvcnQgeyBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MsIE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9jb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvLm1vZGVsJztcclxuaW1wb3J0IHsgTUN1ZW50YUluZ3Jlc29zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0cvSW5jb21lQWNjb3VudCc7XHJcbmltcG9ydCB7IE1JbmNvbWVTdHJ1Y3R1cmVBY2NvdW50IH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvaW5jb21lU3RydWN0dXJlQWNjb3VudC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Pcmdhbml6YXRpb25UeXBlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvb3JnYW5pemF0aW9uVHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1TcGVjaWFsdHkgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9zcGVjaWFsdHkubW9kZWwnO1xyXG5pbXBvcnQgeyBNRG9jdW1lbnQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9kb2N1bWVudC5tb2RlbCc7XHJcbmltcG9ydCB7IE1DbGFzaWZpY2F0aW9uIH0gZnJvbSAnLi9jb3JlL21vZGVscy9SUEMvY2xhc2lmaWNhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db3VudHJ5LCBNU3RhdGUsIE1NdW5pY2lwYWxpdHksIE1QYXJpc2gsIE1DaXR5LCBNQ29tbXVuaXR5IH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvbG9jYXRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgTVByb3ZpZGVyQmVuZWZpY2lhcnkgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9wcm92aWRlckJlbmVmaWNpYXJ5Lm1vZGVsJztcclxuaW1wb3J0IHsgTVNpZ2Vjb2ZCYW5rLCBNQmFuaywgTUJhbmtBY2NvdW50VHlwZSwgTUFnZW5jaWFCYW5jbywgTUN1ZW50YUJhbmNvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0IvYmFuay5tb2RlbCc7XHJcbmltcG9ydCB7IElSZXNwb25zZSB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzL1Jlc3BvbnNlJztcclxuaW1wb3J0IHsgTUNvbmZpZ3VyYXRpb25SUEMgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9jb25maWd1cmFjaW9uUlBDLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbmZpZ1NPQyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU09DL2NvbmZpZ3VyYWNpb25TT0MubW9kZWwnO1xyXG5pbXBvcnQgeyBNRGVkdWN0aW9uVHlwZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1RCL2RlZHVjdGlvblR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ2FyZ28gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NPQy9jaGFyZ2UubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uY2VwdG9SZXRlbmNpb24sIE1EZWR1Y3Rpb24gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NUQi9kZWR1Y3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uZmlnU1NTIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TU1Mvc2VjdXJpdHlDb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTUFkbWluaXN0cmF0aXZlVW5pdCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2FkbWluaXN0cmF0aXZlVW5pdC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db21wb25lbnQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9jb21wb25lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBNTG9nIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TU1MvbG9nLm1vZGVsJztcclxuaW1wb3J0IHsgTVNlcnZpY2VDaGFyZ2UgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NPQy9zZXJ2aWNlQ2hhcmdlLm1vZGVsJztcclxuaW1wb3J0IHsgTUVtcHJlc2EgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9FbXByZXNhLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbmNlcHRvc0NYUCB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ1hQL01Db25jZXB0b3NDWFAubW9kZWwnO1xyXG5pbXBvcnQgeyBNVGlwb0RvY3VtZW50b0NYUCB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ1hQL01UaXBvRG9jdW1lbnRvQ1hQLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbmZpZ3VyYWNpb25TTk8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NQ29uZmlndXJhY2lvblNOTy5tb2RlbCc7XHJcbmltcG9ydCB7IE1EZWZpbmljaW9uTm9taW5hIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTURlZmluaWNpb25Ob21pbmEubW9kZWwnO1xyXG5pbXBvcnQgeyBNQXNpZ25hY2lvbkNhcmdvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUFzaWduYWNpb25DYXJnby5tb2RlbCc7XHJcbmltcG9ydCB7IE1Ob21pbmFTaW1wbGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NTm9taW5hU2ltcGxlLm1vZGVsJztcclxuaW1wb3J0IHsgTVBlcnNvbmFsIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTVBlcnNvbmFsLm1vZGVsJztcclxuaW1wb3J0IHsgTUVudHJhZGFTdW1pbmlzdHJvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0lWL01FbnRyYWRhU3VtaW5pc3Ryby5tb2RlbCc7XHJcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJ1xyXG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnOyBcclxuaW1wb3J0IHsgTVNub0xvZyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01BdWRpdG9yaWEubW9kZWwnO1xyXG5pbXBvcnQgeyBNVGlwb0RlcG9zaXRvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0lWL01UaXBvRGVwb3NpdG9zLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbXVuaWRhZCB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL2NvbXVuaWRhZC5tb2RlbCc7XHJcbmltcG9ydCB7IE1FeGNoYW5nZVJhdGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9UYXNhQ2FtYmlvLm1vZGVsJztcclxuXHJcbiAgXHJcbiAgQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbiAgfSlcclxuICBleHBvcnQgY2xhc3MgU2lnZXNwU2VydmljZSB7XHJcblxyXG4gICAgcHVibGljIHVzdWFyaW9BY3Rpdm86IE1Vc3VhcmlvID0gbnVsbDtcclxuICAgIHB1YmxpYyBVUkw6IHN0cmluZztcclxuICAgIHB1YmxpYyBjdXJyZW50Q29tcG9uZW50OiBNQ29tcG9uZW50ID0gbnVsbDtcclxuICAgIHB1YmxpYyB1c2VyTWVudSAgPSBudWxsOyBcclxuICAgIHB1YmxpYyBpcF9hZHJlc3MgPSAnMTI3LjAuMC4xJztcclxuICAgIC8vIHB1YmxpYyBVUkw6IHN0cmluZyA9IFwiaHR0cDovLzE5Mi4xNjguMS42Ny9zaWdlc3BfcGhwXCI7XHJcbiAgICAvLyB1c3VhcmlvQWN0aXZvOiBNVXN1YXJpbyA9IHtcclxuICAgIC8vICAgY29uZXhpb25EQjoge1xyXG4gICAgLy8gICAgIGJhc2VEZURhdG9zOiBcImRiX3NpZ2VzcF9kZW1vdjNcIixcclxuICAgIC8vICAgICBnZXN0b3I6IFwicG9zdGdyZXNcIixcclxuICAgIC8vICAgICBsb2dpbjogXCJwb3N0Z3Jlc1wiLFxyXG4gICAgLy8gICAgIG5vbWJyZTogXCJTSUdFU1AgQy5BLCBzZXJ2aWRvciA4NSAoU0UgUFVFREUgVVNBUilcIixcclxuICAgIC8vICAgICBwYXNzd29yZDogXCJhZG1pbnNpZ2VzcFwiLFxyXG4gICAgLy8gICAgIHB1ZXJ0bzogXCI1NDMyXCIsXHJcbiAgICAvLyAgICAgc2Vydmlkb3I6IFwiMTkyLjE2OC4xLjY3XCIsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIGVtcHJlc2E6IHtcclxuICAgIC8vICAgICBpZDogMSxcclxuICAgIC8vICAgICBwZXJpb2RvRmlzY2FsOiBcIjIwMTktMDEtMDFcIixcclxuICAgIC8vICAgICB0aXR1bG86IFwiU0lHRVNQIEMuQS5cIlxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBub21icmU6IFwiU0lHRVNQXCIsXHJcbiAgICAvLyAgIHRva2VuOiBcImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVek00TkNKOS5leUp3WVhOemQyOXlaRjkxYzNVaU9pSXhNak0wTlRZM09DSXNJbWxrWDJWdGNISmxjMkVpT2lJeElpd2lkR2wwWlcxd0lqb2lVMGxIUlZOUUlFTXVRUzRpTENKd1pYSm1hWE5qWVd3aU9pSXlNREU1TFRBeExUQXhJaXdpYkY5MWMzVmhjbWx2SWpvaVUwbEhSVk5RSWl3aWMyVnlkbWxrYjNJaU9pSXhPVEl1TVRZNExqRXVOamNpTENKd2RXVnlkRzhpT2lJMU5ETXlJaXdpWW1GelpXUmxaR0YwYjNNaU9pSmtZbDl6YVdkbGMzQmZaR1Z0YjNZeklpd2liRzluYVc0aU9pSndiM04wWjNKbGN5SXNJbkJoYzNOM2IzSmtJam9pWVdSdGFXNXphV2RsYzNBaWZRLlBJU0JTZnVlUkFkc1dzSjFBYUdjVkNnVy0yYUprZ3R2TGRzVzBCZ281bHR5WW93RDhveV9ucUs1c2pFMlVSR2tcIlxyXG4gICAgLy8gfVxyXG4gICAgLy8gcHJvY2VkZTogc3RyaW5nID0gJ1NDR0NNUCc7XHJcbiAgICAvLyBjb2RzaXM6IHN0cmluZyA9ICdTQ0cnO1xyXG5cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csIHByaXZhdGUgdG9hc3Q6IFRvYXN0clNlcnZpY2UpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFZhbGlkYSBxdWUgc2VsbyBzZSBlc2NyaWJhbiBndWlvbmVzIHkgOVxyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbmx5R3Vpb25lc0FuZE5pbmUoZXZlbnQ6IGFueSkge1xyXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnLScgfHwgZXZlbnQua2V5ID09PSAnOScpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIGVsIG1vbmNtcCBkZSBzaWdlc3BfY29tcHJvYmFudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUNvbXByb2JhbnRlQW1vdW50KGFtb3VudDogbnVtYmVyLCBpZENvbXByb2JhbnRlOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuVVJMfS9kYW8vc2lnZXNwL2NvbXByb2JhbnRlX2Rhby5waHA/bW9udG89dHJ1ZWAsIHtcclxuICAgICAgICBtb25jbXA6IGFtb3VudCxcclxuICAgICAgICBpZF9jb21wcm9iYW50ZTogaWRDb21wcm9iYW50ZVxyXG4gICAgICB9LCB7XHJcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSBlbCBjb21wcm9iYW50ZSBwcnN1cHVlc3RhcmlvIGRlIEVncmVzb3NcclxuICAgICAqIEBwYXJhbSBjb21wcm9iYW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MoY29tcHJvYmFudGU6IElDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9fZWdyZXNvc19kYW8ucGhwYCxcclxuICAgICAgeyAuLi5jb21wcm9iYW50ZSwgaWQ6IGNvbXByb2JhbnRlLmlkX2R0X3NwZ2NtcCB9LCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIGNvbXByb2JhbnRlIHByZXN1cHVlc3RhcmlvIGRlIEVncmVzb3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zKCk6IE9ic2VydmFibGU8TUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2NvbXByb2JhbnRlX3ByZXN1cHVlc3RhcmlvX2VncmVzb3NfZGFvLnBocGAsIHtcclxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgZWwgY29tcHJvYmFudGUgcHJzdXB1ZXN0YXJpbyBkZSBJbmdyZXNvc1xyXG4gICAgICogQHBhcmFtIGNvbXByb2JhbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MoY29tcHJvYmFudGU6IElDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2NvbXByb2JhbnRlX3ByZXN1cHVlc3RhcmlvX2VncmVzb3NfZGFvLnBocGAsXHJcbiAgICAgIHsgLi4uY29tcHJvYmFudGUsIGlkOiBjb21wcm9iYW50ZS5pZF9kdF9zcGljbXAgfSwgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBjb21wcm9iYW50ZSBwcmVzdXB1ZXN0YXJpbyBkZSBJbmdyZXNvc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zKCk6IE9ic2VydmFibGU8TUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvc1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGkvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9faW5ncmVzb3NfZGFvLnBocGAsIHtcclxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyhlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAQWN0dWFsaXphIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGEgY3VlbnRhIGRlIGVncmVzb1xyXG4gICAgICogQHBhcmFtIGRpc3RyaWJ1dGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlRGlzdHJpYnV0aW9uRXhwZW5zZUFjY291bnQoZGlzdHJpYnV0aW9uOiBJVXBkYXRlRGlzdHJpYnV0aW9uKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgSW5ncmVzb1xyXG4gICAgICogQHBhcmFtIGRpc3RyaWJ1dGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlRGlzdHJpYnV0aW9uSW5jb21lQWNjb3VudChkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb25JbmdyZXNvcyk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zcGkvY3VlbnRhc19pbmdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUN1ZW50YUluZ3Jlc29zKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgSW5ncmVzbyBkZSBFc3RydWN0dXJhXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVTdHJ1Y3R1cmVBY2NvdW50KGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zLCBsZXZlbDogbnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFfZXN0cnVjdHVyYV9pbmdyZXNvc19kYW8ucGhwYCwgZGlzdHJpYnV0aW9uLFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKXtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBuZXcgTUluY29tZVN0cnVjdHVyZUFjY291bnQocmVzLmRhdGEsIGxldmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjdWVudGFzIHBvciBuaXZlbCBkZSBsYXMgY3VlbmF0cyBkZSBlZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gbGV2ZWwgTsO6bWVybyBkZSBuaXZlbGVzIGRlIGxhIGNvbmZpZ3VyYWNpw7NuXHJcbiAgICAgKiBAcGFyYW0gaWQgaWQgZGVsIG5pdmVsIDMgbyA1IHF1ZSBzZSB2YSBhIGJ1c2NhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DdWVudGFFZ3Jlc29zW10+XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRFeHBlbnNlQWNjb3VudHNGb3JMZXZlbChsZXZlbDogbnVtYmVyLCBpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxNQ3VlbnRhRWdyZXNvc1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFFZ3Jlc29zW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2N1ZW50YXNfZWdyZXNvc19kYW8ucGhwXHJcbiAgICAgID9sZXZlbD0ke2xldmVsfSZpZD0ke2lkfWAsIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhRWdyZXNvcyhlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGNhdMOhbG9nbyBkZSBlc3RydWN0dXJhIHByZXN1cHVlc2FyaWFcclxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhclxyXG4gICAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gQ29uZmlndXJhY2nDs24gZGUgbGEgZXN0cnVjdHVyYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcGVuQ2F0YWxvZ29Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWEoZGF0YTogYW55W10sIGNvbmZpZ3VyYXRpb246IE1Db25maWd1cmF0aW9uU1BHKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgY29uc3QgY2F0YWxvZ28gPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvRXN0cnVjdHVyYXNDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgY29uZmlndXJhdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBjYXRhbG9nby5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgZGUgZWdyZXNvc1xyXG4gICAgICogQHBhcmFtIG9ubHlBdmFpbGFibGVcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ3VlbnRhRWdyZXNvc1tdPlxyXG4gICAgICovXHJcbiAgICAgcHVibGljIGdldEV4cGVuc2VBY2NvdW50cyhvbmx5QXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPE1DdWVudGFFZ3Jlc29zW10+e1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhRWdyZXNvc1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jdWVudGFzX2VncmVzb3NfZGFvLnBocCR7XHJcbiAgICAgICAgb25seUF2YWlsYWJsZSA/ICc/YXZhaWxhYmxlPXRydWUnIDogJydcclxuICAgICAgfWAsIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhRWdyZXNvcyhlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHRvZGFzIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXRzYXJpYXMgZGUgbGFzIDUgdGFibGFzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TUFsbFN0cnVjdHVyZT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBbGxCdWRnZXRTdHJ1Y3R1cmUoKTogUHJvbWlzZTxNQWxsU3RydWN0dXJlPiB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVPbmUoKS5zdWJzY3JpYmUoc3RydWN0dXJlT25lID0+IHtcclxuICAgICAgICAgIHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlVHdvQWxsKCkuc3Vic2NyaWJlKHN0cnVjdHVyZVR3byA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlVGhyZWUoKS5zdWJzY3JpYmUoc3RydWN0dXJlVGhyZWUgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlRm91cigpLnN1YnNjcmliZShzdHJ1Y3R1cmVGb3VyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZUJ5SWRFcDQoKS5zdWJzY3JpYmUoc3RydWN0dXJlRml2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IE1BbGxTdHJ1Y3R1cmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZU9uZSxcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVUd28sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlVGhyZWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlRm91cixcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVGaXZlXHJcbiAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBjb21wbGV0YSBkZXBlbmRpZW5kbyBkZSBsYSBjb25maWd1cmFjacOzblxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGdldEJ1ZGdldFN0cnVjdHVyZUNvbXBsZXRlKCk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBkYXRhID0gW107XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZSg1KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgIGRhdGEucHVzaCguLi5yZXN1bHQpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBhd2FpdCB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZVRocmVlQ29tcGxldGUoMykuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgLy8gICBkYXRhLnB1c2goLi4ucmVzdWx0KVxyXG4gICAgICAgIC8vIH0pXHJcblxyXG4gICAgICAgIGF3YWl0IHJlc29sdmUoZGF0YSk7XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbGltaW5hIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXNcclxuICAgICAqIEBwYXJhbSBpZFN0cnVjdHVyZXMgSWQgZGUgbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyA1IHF1ZSB2YW4gYSBzZXIgZWxpbWluYWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGVCdWRnZXRTdHJ1Y3R1cmVGaXZlKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE1X2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgNFxyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZXMgRXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHF1ZSB2YW4gYSBzZXIgYWN0dWFsaXphZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZUZpdmUoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE1X2Rhby5waHBgLCBzdHJ1Y3R1cmVzLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBZ3JlZ2EgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBMYXMgZXN0cnVjdHVyYXMgcXVlIHZhbiBhIHNlciByZWdpc3RyYWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVGaXZlKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgdG9kYSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDVcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZUZpdmUobGV2ZWw6IG51bWJlciA9IG51bGwpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlW10+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE1X2Rhby5waHA/Y29tcGxldGU9dHJ1ZWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZSA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZShlLCBsZXZlbCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSA1IHBvciBlbCBJZCBkZSBsYSBlc3RydWN0dXJhIDRcclxuICAgICAqIEBwYXJhbSBpZEVwNCBpZCBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZUZpdmVCeUlkRXA0KGlkRXA0Pzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocCR7aWRFcDQgPyBgP2lkX2VwND0ke2lkRXA0fWAgOiAnJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbGltaW5hIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXNcclxuICAgICAqIEBwYXJhbSBpZFN0cnVjdHVyZXMgSWQgZGUgbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyAzIHF1ZSB2YW5hICBzZXIgZWxpbWluYWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGVCdWRnZXRTdHJ1Y3R1cmVGb3VyKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE0X2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgNFxyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZXMgRXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHF1ZSB2YW4gYSBzZXIgYWN0dWFsaXphZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZUZvdXIoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXJbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWE0X2Rhby5waHBgLCBzdHJ1Y3R1cmVzLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBZ3JlZ2EgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBMYXMgZXN0cnVjdHVyYXMgcXVlIHZhbiBhIHNlciByZWdpc3RyYWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVGb3VyKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTRfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyA0XHJcbiAgICAgKiBAcGFyYW0gaWRFcDMgSWQgZGUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSAzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFwcmVzdXB1ZXN0YXJpYVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZUZvdXIoaWRFcDM/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXJbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTRfZGFvLnBocCR7aWRFcDMgPyBgP2lkX2VwMz0ke2lkRXAzfWAgOiAnJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGb3VyKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbGltaW5hIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXNcclxuICAgICAqIEBwYXJhbSBpZFN0cnVjdHVyZXMgSWQgZGUgbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyAzIHF1ZSB2YW5hICBzZXIgZWxpbWluYWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGVCdWRnZXRTdHJ1Y3R1cmVUaHJlZShpZFN0cnVjdHVyZXM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KCdkZWxldGUnLCBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhM19kYW8ucGhwYCxcclxuICAgICAgeyBib2R5OiBpZFN0cnVjdHVyZXMsIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIDNcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIEVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyBxdWUgdmFuIGEgc2VyIGFjdHVhbGl6YWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVCdWRnZXRTdHJ1Y3R1cmVUaHJlZShzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHBgLCBzdHJ1Y3R1cmVzLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBZ3JlZ2EgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyAzXHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBMYXMgZXN0cnVjdHVyYXMgcXVlIHZhbiBhIHNlciByZWdpc3RyYWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVUaHJlZShzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhM19kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2UgdHJhZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIGNvbXBsZXRhIGhhc3RhIGVsIG5pdmVsIDNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnlbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVUaHJlZUNvbXBsZXRlKGxldmVsOiBudW1iZXIpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlW10+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHA/Y29tcGxldGU9dHJ1ZWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZShlbGVtZW50LCBsZXZlbCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyAzXHJcbiAgICAgKiBAcGFyYW0gaWRFcDIgSWQgZGUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSAyXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFwcmVzdXB1ZXN0YXJpYVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZVRocmVlKGlkRXAyPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWVbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVGhyZWVbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocCR7aWRFcDIgPyBgP2lkX2VwMj0ke2lkRXAyfWAgOiAnJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZShlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRWxpbWluYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHVub1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYSBvIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZVR3byhpZFN0cnVjdHVyZXM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KCdkZWxldGUnLCBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMl9kYW8ucGhwYCxcclxuICAgICAgeyBib2R5OiBpZFN0cnVjdHVyZXMsIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgdW5hIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgZG9zXHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlIEVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgdW5vIHF1ZSBzZSB2YSBhIGFjdHVhbGl6YXJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVCdWRnZXRTdHJ1Y3R1cmVUd28oc3RydWN0dXJlOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMl9kYW8ucGhwYCwgc3RydWN0dXJlLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RyYSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdHJpYXMgZG9zIGVuIGxhIGJhc2UgZGUgZGF0b3NcclxuICAgICAqIEBwYXJhbSBidWRnZXRTdHJ1Y3R1cmVzIEFycmF5IGRlIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhIHF1ZSBzZSB2YW4gYSByZWdpc3RyYXJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0QnVkZ2V0U3RydWN0dXJlVHdvKGJ1ZGdldFN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMl9kYW8ucGhwYCxcclxuICAgICAgYnVkZ2V0U3RydWN0dXJlcywgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlVHdvKGlkRXAxOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHA/aWRfZXAxPSR7aWRFcDF9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3byhlbGVtZW50KSkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVUd29BbGwoKTogT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3byhlbGVtZW50KSkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyB1bm9cclxuICAgICAqIEBwYXJhbSBpZFN0cnVjdHVyZXMgSWQgZGUgbGEgbyBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHF1ZSB2YW4gYSBzZXIgZWxpbWluYWRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGVCdWRnZXRTdHJ1Y3R1cmVPbmUoaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTFfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIHVub1xyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZSBFc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIHVubyBxdWUgc2UgdmEgYSBhY3R1YWxpemFyXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlT25lKHN0cnVjdHVyZTogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTFfZGFvLnBocGAsIHN0cnVjdHVyZSxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0cmEgbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RyaWFzIGVuIGxhIGJhc2UgZGUgZGF0b3NcclxuICAgICAqIEBwYXJhbSBidWRnZXRTdHJ1Y3R1cmVzIEFycmF5IGRlIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhIHF1ZSBzIGV2YW4gYSByZWdpc3RyYXJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0QnVkZ2V0U3RydWN0dXJlT25lKGJ1ZGdldFN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFPbmVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMV9kYW8ucGhwYCxcclxuICAgICAgYnVkZ2V0U3RydWN0dXJlcywgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlT25lKCk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZVtdPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMV9kYW8ucGhwYCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lKGVsZW1lbnQpKSkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmF0aW9uU1BHW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNQRygpOiBPYnNlcnZhYmxlPE1Db25maWd1cmF0aW9uU1BHPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29uZmlndXJhdGlvblNQRz4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYV9jb25maWdfZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IG5ldyBNQ29uZmlndXJhdGlvblNQRyhyZXNwLmRhdGFbMF0pKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29uZmlndXJhY2lvbmVzIGRlIGxvcyBwcm92ZWVkb3Jlc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmF0aW9uUlBDW10+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblJQQygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbmZpZ3VyYXRpb25SUEM+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3Byb3ZlZWRvcl9jb25maWdfZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzcC5kYXRhID0gbmV3IE1Db25maWd1cmF0aW9uUlBDKHJlc3AuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNwXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBNQ29uZmlndXJhY2lvblNOTyBkZSBsYSBub21pbmFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29uZmlndXJhY2lvblNOT1tdPlxyXG4gICAgICogQGRhdGUgMjctMDctMjAyMVxyXG4gICAgICovXHJcbiAgICAgcHVibGljIGdldENvbmZpZ3VyYXRpb25TTk8oKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vY29uZmlndXJhY2lvbl9kYW8ucGhwP3RpcG89JHsnY29uZmlndXJhY2lvbid9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBpZihyZXNwLmRhdGEgIT1udWxsKXtcclxuICAgICAgICAgICAgICByZXNwLmRhdGEgPSByZXNwLmRhdGEubWFwKGUgPT4gbmV3IE1Db25maWd1cmFjaW9uU05PKGUpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXNwLmRhdGE9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNwXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGRhdGVUb1N0cmluZyhkYXRlOiBEYXRlKTogc3RyaW5ne1xyXG4gICAgICByZXR1cm4gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0ke1xyXG4gICAgICAgIGRhdGUuZ2V0TW9udGgoKSArIDEgPj0gMTAgPyBkYXRlLmdldE1vbnRoKCkgKyAxIDogYDAke2RhdGUuZ2V0TW9udGgoKSArIDF9YFxyXG4gICAgICB9LSR7XHJcbiAgICAgICAgZGF0ZS5nZXREYXRlKCkgPj0gMTAgPyBkYXRlLmdldERhdGUoKSA6IGAwJHtkYXRlLmdldERhdGUoKX1gXHJcbiAgICAgIH1gXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29uZmlndXJhY2lvbmVzIGRlIFNlZ3VyaWRhZFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWdTU1MoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zc3Mvc2VndXJpZGFkX2NvbmZpZ19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXNwLmRhdGEgPSBuZXcgTUNvbmZpZ1NTUyhyZXNwLmRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzcFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbXBvbmVudHMoc3lzdGVtQ29kZTogc3RyaW5nID0gbnVsbCwgcGVybWl0OiBib29sZWFuKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+e1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3Nzcy9jb21wb25lbnRlc19kYW8ucGhwPyR7c3lzdGVtQ29kZSA/IGBjb2RzaXM9JHtzeXN0ZW1Db2RlfSR7XHJcbiAgICAgICAgICBwZXJtaXQgPyBgJnBlcm1pdD10cnVlYCA6ICcnXHJcbiAgICAgICAgfWAgOiAnJ31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH1cclxuICAgICAgKS5waXBlKFxyXG4gIFxyXG4gICAgICAgIG1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Db21wb25lbnQoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgZnVlbnRlcyBkZSBmaW5hbmNpYW1pZW50b1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1GdWVudGVGaW5hbmNpYW1pZW50b1tdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEZ1ZW50ZUZpbmFuY2lhbWllbnRvKCk6IE9ic2VydmFibGU8TUZ1ZW50ZUZpbmFuY2lhbWllbnRvW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUZ1ZW50ZUZpbmFuY2lhbWllbnRvW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2Z1ZW50ZV9maW5hbmNpYW1pZW50b19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRnVlbnRlRmluYW5jaWFtaWVudG8oZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGNlbnRyb3MgZGUgY29zdG9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ2VudHJvQ29zdG9bXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKiBtb2RpZmljYWRvIDktMTEtMjAyMlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2VudHJvQ29zdG8odGlwbzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1DZW50cm9Db3N0b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY2VudHJvX2Nvc3RvX2Rhby5waHA/Y29kaWdvPSR7dGlwb31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DZW50cm9Db3N0byhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2VudHJvcyBkZSBjb3N0b1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb3N0Q2VudGVycygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NnL2NlbnRyb19jb3N0b19kYW8ucGhwYCwgXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUNlbnRyb0Nvc3RvKGVsZW1lbnQpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFVzZXJDb3N0Q2VudGVycyhjb2RpZ286c3RyaW5nKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jb250cm9sX251bWVyb191c3VhcmlvX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsIFxyXG4gICAgICB7aGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Vc3VhcmlvQ2VudHJvQ29zdG8oZWxlbWVudCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgY2hlY2trc1xyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlIGxhIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBEYXRhIHF1ZSBzIGV2YSBhIG1vc3RyYXIgZW4gbGEgdGFibGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5EaWFsb2dNdWx0aVNlbGVjdChcclxuICAgICAgLy8gY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICAvLyB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgLy8gZGF0YVNvdXJjZTogYW55W10sXHJcbiAgICAgIC8vIGNvbHVtbk5hbWVzPzogc3RyaW5nW11cclxuICAgICAgY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLCBcclxuICAgICAgd2lkdGg6IHN0cmluZyA9ICc0NTBweCcsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBoYXNCYWNrZHJvcD86IGJvb2xlYW4sXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlPzogYm9vbGVhbixcclxuICAgICAgIC8vIGRpc2FibGVNYXN0ZXJUb2dnbGU/OiBib29sZWFuXHJcbiAgICAgIH0gPSB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSwgXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLCBcclxuICAgICAgLy8gIGRpc2FibGVNYXN0ZXJUb2dnbGU6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgICk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVGFibGVTZWxlY3RDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogZGF0YVNvdXJjZSxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzLFxyXG4gICAgICAgICAvLyBkaXNhYmxlTWFzdGVyVG9nZ2xlOiBvcHRpb25zLmRpc2FibGVNYXN0ZXJUb2dnbGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcclxuICAgICAgICBoYXNCYWNrZHJvcDogb3B0aW9ucy5oYXNCYWNrZHJvcCxcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IG9wdGlvbnMuZGlzYWJsZUNsb3NlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TVBsYW5Vbmljb0N1ZW50YT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nUGxhblVuaWNvQ3VlbnRhcygpOiBQcm9taXNlPE1QbGFuVW5pY29DdWVudGE+IHtcclxuICAgICAgbGV0IHBsYW5lczogTVBsYW5Vbmljb0N1ZW50YVtdID0gYXdhaXQgdGhpcy5nZXRMaXN0YWRvUExhblVuaWNvQ3VlbnRhcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2lvbiddLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2nDs24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIFBsYW4gZGUgQ3VlbnRhcyBHw6luZXJhbCcsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBwbGFuZXNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgbGlzdGFkbyBkZWwgcGxhbiDDum5pY28gZGUgY3VlbnRhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1wbGFuVW5pY29DdWVudGFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRMaXN0YWRvUExhblVuaWNvQ3VlbnRhcygpOiBPYnNlcnZhYmxlPE1QbGFuVW5pY29DdWVudGFbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNUGxhblVuaWNvQ3VlbnRhW10+KGAke3RoaXMuVVJMfS9kYW8vc2NnL3BsYW5fdW5pY29fZGFvLnBocGAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTVBsYW5Vbmljb0N1ZW50YShlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIFNDR1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU0NHW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQG1vZGlmaXQgMjUtMDctMjAyMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNDRygpOiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU0NHW10+IHsgICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbmZpZ3VyYWNpb25TQ0dbXT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY29uZmlndXJhY2lvbl9jb250YWJpbGlkYWRfZGFvLnBocGAsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29uZmlndXJhY2lvblNDRyhlbGVtZW50KSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIHVuIGRpYWxvZyBkZSBjb25maXJtYWNpw7NuXHJcbiAgICAgKiBAcGFyYW0gdGl0bGUgVMOtdHVsbyBkZSBsYSBtb2RhbCBkZSBjb25maXJtXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIChvcGNpb25hbCkgcGFyYSBlbCB1c3VzYXJpb1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPGJvb2xlYW4+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbkRpYWxvZ0NvbmZpcm0odGl0bGU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgbWVzc2FnZTogKG1lc3NhZ2UpID8gbWVzc2FnZSA6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZpZXJ0ZSBlbCBjb250ZW5pZG8gZGUgdW4gQWJzdHJhY3RDb250cm9sIGVuIG1hecO6c2N1bGEgKFVzYXIgZW4gZXZlbnRvIGtleXVwKVxyXG4gICAgICogQHBhcmFtIGZvcm1Hcm91cCBGb3JtdWxhcmlvIGTDs25kZSBzZSB2YSBhIGJ1c2NhciBlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBwYXJhbSBuYW1lIE5vbWJyZSBkZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGFuZ2VUb1VwcGVyQ2FzZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuZ2V0QWJzdHJhY3RDb250cm9sKGZvcm1Hcm91cCwgbmFtZSkuc2V0VmFsdWUodGhpcy5nZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwLCBuYW1lKS52YWx1ZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEFic3RyYWN0Q29udHJvbCBkZSB1biBmb3JtdWxhcmlvXHJcbiAgICAgKiBAcGFyYW0gZm9ybUdyb3VwIEZvcm11bGFyaW8gZG9uZGUgc2UgdmEgYSBidXNjYXIgZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBOb21icmUgZGVsIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQHJldHVybiBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwOiBGb3JtR3JvdXAsIG5hbWU6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICAgIHJldHVybiBmb3JtR3JvdXAuZ2V0KG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFByZXZpZW5lIHF1ZSBzZSBlc2NyaWJhbiBsZXRyYXMgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKiBAbW9kaWZpY2FkbyBjb21vIG9ubHlOdW1lcm8gcGFyYSBjb3JyZWdpciBjb2RpZ28sIHVzYXIgY3VycmVuY3ktaW5wdXQgc2kgcXVpZXJlIHVzYXIgZGVjaW1hbGVzIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25seURlY2ltYWwoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWlzTmFOKCtldmVudC5rZXkpICYmIGV2ZW50LmtleUNvZGUgIT0gMzIpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUHJldmllbmUgcXVlIHNlIGVzY3JpYmFuIGxldHJhcyBlbiBlbCBpbnB1dCAoVXNhciBlbiBrZXlwcmVzcylcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ubHlOdW1iZXJzKGV2ZW50PzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgICAgaWYgKCFpc05hTigrZXZlbnQua2V5KSAmJiBldmVudC5rZXlDb2RlICE9IDMyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlIChhLXogQS1aIMOhLcO6IMOxw5Egw7zDnCAnLC4pIHF1ZSBzZSBlc2NyaWJhbiBudW1lcm9zIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAZGF0ZSAxNC0wNS0yMDIyXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgdHlwZU5hbWUoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoKGV2ZW50LmtleT49J2EnICYmIGV2ZW50LmtleTw9J3onKSAgfHwgKGV2ZW50LmtleT49J0EnICYmIGV2ZW50LmtleTw9J1onKSB8fCAgZXZlbnQua2V5PT1cIsOxXCIgfHwgIGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHwgKGV2ZW50LmtleT49J8OhJyAmJiBldmVudC5rZXk8PSfDuicpIHx8IGV2ZW50LmtleT49J8O8JyAgfHwgZXZlbnQua2V5Pj0nw5wnICB8fCBldmVudC5rZXk9PVwiJ1wiICB8fCBldmVudC5rZXlDb2RlPT0zMiBcclxuICAgICAgICAgIHx8ICBldmVudC5rZXk9PVwiLlwiIHx8ICBldmVudC5rZXk9PVwiLFwiICApe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSAoMC05IGEteiBBLVogw6Etw7ogw7HDkSDDvMOcICcsLi1fLzooKSUjwromJOKCrMKjwqUpIHF1ZSBzZSBlc2NyaWJhbiAgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBkYXRlIDE0LTA1LTIwMjJcclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyB0eXBlVGV4dChldmVudD86IGFueSk6IGJvb2xlYW4geyAgICAgIFxyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgICYmIGV2ZW50LmtleTw9J3onKSB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpIHx8IGV2ZW50LmtleT09XCLDsVwiIHx8IGV2ZW50LmtleT09XCLDkVwiIFxyXG4gICAgICAgICAgfHwgKGV2ZW50LmtleT49J8OhJyAmJiBldmVudC5rZXk8PSfDuicpIHx8IGV2ZW50LmtleT09J8O8JyB8fCBldmVudC5rZXk9PSfDnCcgfHwgZXZlbnQua2V5PT1cIidcIiB8fCBpc05hTigrZXZlbnQua2V5KSBcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09XCIuXCIgIHx8ICBldmVudC5rZXk9PVwiLFwiIHx8IGV2ZW50LmtleT09XCImXCIgfHwgIGV2ZW50LmtleT09XCJfXCJ8fCBldmVudC5rZXk9PVwiLVwiIHx8IGV2ZW50LmtleT09XCIjXCJcclxuICAgICAgICAgIHx8IGV2ZW50LmtleT09XCLCulwiICB8fCAgZXZlbnQua2V5PT1cIiRcIiB8fCBldmVudC5rZXk9PVwiKFwiIHx8IGV2ZW50LmtleT09XCIpXCIgfHwgZXZlbnQua2V5PT1cIiVcIiB8fCBldmVudC5rZXk9PScgJ1xyXG4gICAgICAgICAgfHwgZXZlbnQua2V5PT0nOicgIHx8ZXZlbnQua2V5PT0nLyd8fCBldmVudC5rZXlDb2RlPT04MzY0IHx8ICBldmVudC5rZXlDb2RlPT0xNjUgfHxldmVudC5rZXlDb2RlPT0xNjMpe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgIFxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlICgwLTkgYS16IEEtWiDDscORIC4tXykgcXVlIHNlIGVzY3JpYmFuICBlbiBlbCBpbnB1dCAoVXNhciBlbiBrZXlwcmVzcylcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGRhdGUgMTQtMDUtMjAyMlxyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgdHlwZUNvZGUoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoKGV2ZW50LmtleT49J2EnICAmJiBldmVudC5rZXk8PSd6JykgfHwgKGV2ZW50LmtleT49J0EnICYmIGV2ZW50LmtleTw9J1onKSAgfHwgZXZlbnQua2V5PT1cIsOxXCIgfHwgZXZlbnQua2V5PT1cIsORXCIgXHJcbiAgICAgICAgICB8fGlzTmFOKCtldmVudC5rZXkpIHx8IGV2ZW50LmtleT09XCIuXCIgfHwgIGV2ZW50LmtleT09XCJfXCIgfHwgZXZlbnQua2V5PT1cIi1cIil7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQ29tdW5pZGFkPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dVbmlkYWRlc1RyaWJ1dGFyaWFzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCB1ZFRyaWJ1dGFyaWFzOiBNVW5pZGFkVHJpYnV0YXJpYVtdID0gYXdhaXQgdGhpcy5nZXRVbmlkYWRlc1RyaWJ1dGFyaWFzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydhw7FvJywgJ25yb19kZWNyZXRvJywgJ2ZlY2hhX2RlY3JldG8nLCAnZW50cmFkYV92aWRlbmNpYScsICdwdWJsaWNhY2lvbl9nYWNldGEnLCAnbnJvX2dhY2V0YScsICd2YWxvcnV0J10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBVbmlkYWRlcyBUcmlidXRhcmlhcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiB1ZFRyaWJ1dGFyaWFzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyB1bmlkYWRlcyB0cmlidXRhcmlhc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRVbmlkYWRlc1RyaWJ1dGFyaWFzKCk6IE9ic2VydmFibGU8TVVuaWRhZFRyaWJ1dGFyaWFbXT4ge1xyXG4gICAgICBjb25zdCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1VbmlkYWRUcmlidXRhcmlhW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3VuZHRyaWJ1dGFyaWFfZGFvLnBocGAsIHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnlbXSkgPT4gcmVzcC5tYXAoZWxlbWVudCA9PiBuZXcgTVVuaWRhZFRyaWJ1dGFyaWEoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW5hIG1vZGFsIGfDqW5lcmljYVxyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlbCBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29HZW5lcmljbyhcclxuICAgICAgY29sdW1uczogc3RyaW5nW10sIFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLCBcclxuICAgICAgd2lkdGg6IHN0cmluZyA9ICc0NTBweCcsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBoYXNCYWNrZHJvcD86IGJvb2xlYW4sXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlPzogYm9vbGVhblxyXG4gICAgICB9ID0ge2Rpc2FibGVDbG9zZTogZmFsc2UsIGhhc0JhY2tkcm9wOiBmYWxzZX1cclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZSxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiBvcHRpb25zLmhhc0JhY2tkcm9wID8gb3B0aW9ucy5oYXNCYWNrZHJvcCA6IGZhbHNlLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZTogb3B0aW9ucy5kaXNhYmxlQ2xvc2UgPyBvcHRpb25zLmRpc2FibGVDbG9zZSA6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW5hIG1vZGFsIGfDqW5lcmljYSBjb24gMiBpbnB1dHNcclxuICAgICAqIEBwYXJhbSBjb2x1bW5zIENvbHVtbmFzIHF1ZSB2YSBhIHRlbmVyIGxhIHRhYmxhXHJcbiAgICAgKiBAcGFyYW0gdGl0bGUgVMOtdHVsbyBkZWwgZGlhbG9nXHJcbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSBEYXRhIHF1ZSBzZSB2YSBhIG1vc3RyYXIgZW4gbGEgdGFibGFcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkNhdGFsb2dvRG9zSW5wdXRzKFxyXG4gICAgICBjb2x1bW5zOiBzdHJpbmdbXSxcclxuICAgICAgdGl0bGU6IHN0cmluZywgXHJcbiAgICAgIGRhdGFTb3VyY2U6IGFueVtdLCBcclxuICAgICAgZmlsdGVyRGF0YTogZmlsdGVyRGF0YVtdLFxyXG4gICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBudWxsLFxyXG4gICAgICB3aWR0aDogc3RyaW5nID0gXCI0NTBweFwiXHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0RvYmxlSW5wdXRDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXMsXHJcbiAgICAgICAgICBmaWx0ZXJEYXRhXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGNvbXVuaWRhZGVzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TUNvbXVuaWRhZD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ29tdW5pZGFkKCk6IFByb21pc2U8TUNvbXVuaWRhZD4ge1xyXG4gICAgICBsZXQgY29tdW5pZGFkZXM6IE1Db211bmlkYWRbXSA9IGF3YWl0IHRoaXMuZ2V0Q29tdW5pZGFkZXMoKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ3ByZWZpam8nLCAncGFpcycsICdlc3RhZG8nLCAnbXVuaWNpcGlvJywgJ3BhcnJvcXVpYScsICdjb2RpZ28nLCAnY29tdW5pZGFkJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBDb211bmlkYWRlcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBjb211bmlkYWRlc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ29tdW5pZGFkW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tdW5pZGFkZXMoKTogT2JzZXJ2YWJsZTxNQ29tdW5pZGFkW10+IHtcclxuICAgICAgY29uc3QgcmVxdWVzdDogSVJlcXVlc3QgPSB7XHJcbiAgICAgICAgb3BlcmFjaW9uOiAnb2J0ZW5lckRhdGEnLFxyXG4gICAgICAgIHNpZ2VzcF9jb25leGlvbjoge1xyXG4gICAgICAgICAgc2Vydmlkb3I6IHRoaXMuVVJMLFxyXG4gICAgICAgICAgdXN1YXJpbzogdGhpcy51c3VhcmlvQWN0aXZvLmdldEludGVyZmFjZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNQ29tdW5pZGFkW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbXVuaWRhZGVzX2Rhby5waHBgLCByZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55W10pID0+IHJlc3AubWFwKGVsZW1lbnQgPT4gbmV3IE1Db211bmlkYWQoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIGRlIGxhcyBsYXMgbW9uZWRhc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1Nb25lZGE+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ01vbmVkYXMoKTogUHJvbWlzZTxNTW9uZWRhPiB7XHJcbiAgICAgIGxldCBjb2luczogTU1vbmVkYVtdID0gYXdhaXQgdGhpcy5nZXRNb25lZGFzKCd0b2RhcycpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY29kaWdvJywgJ2Rlbm9taW5hY2lvbicsICdpc28nLCAnc2ltYm9sbyddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgTW9uZWRhcycsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lczogWydjw7NkaWdvJywgJ2Rlbm9taW5hY2nDs24nLCAnaXNvJywgJ3NpbWJvbG8nXSxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGNvaW5zXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIG1vbmVkYXNcclxuICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU1vbmVkYVtdPlxyXG4gICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICogYWN0dWFsaXphZG8gNC0xMi0yMDIyXHJcbiAgICogQHBhcmFtIHRpcG8gOnN0cmluZyB7J3RvZGFzJywndW5vJywnYWN0dWFsfVxyXG4gICAqIEBwYXJhbSBpZCA6IG51bWJlclxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqLyBcclxuICAgIFxyXG4gICAgXHJcbiAgICBwdWJsaWMgZ2V0TW9uZWRhcyh0aXBvOnN0cmluZyxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxNTW9uZWRhW10+IHsgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNTW9uZWRhW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL21vbmVkYV9kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueVtdKSA9PiByZXNwLm1hcChlbGVtZW50ID0+IG5ldyBNTW9uZWRhKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBARGVzY3JpcHRpb246IE9idGllbmUgbGEgdGFzYSBkZSBjYW1iaW9cclxuICAgICAqIEBwYXJhbSB0aXBvIHN0cmluZ1xyXG4gICAgICogQHBhcmFtIGlkIGNvZGlnbyBtb25lZGFcclxuICAgICAqIEByZXR1cm5zIGFycmF5L251bGxcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1cnJlbmN5RXhjaGFuZ2VSYXRlKHRpcG86ICdhbGwnfCAnbW9uZWRhJz0gbnVsbCwgaWQ/Om51bWJlcik6IE9ic2VydmFibGU8TUV4Y2hhbmdlUmF0ZVtdPiB7ICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUV4Y2hhbmdlUmF0ZVtdPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9zaWdlc3BfdGFzYWNhbWJpb19tb25lZGEucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueVtdKSA9PiByZXNwLm1hcChlbGVtZW50ID0+IG5ldyBNRXhjaGFuZ2VSYXRlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNY3VlbnRhSW5zdGl0dWNpb25hbD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc0luc3RpdHVjaW9uYWxlcygpOiBQcm9taXNlPE1DdWVudGFJbnN0aXR1Y2lvbmFsPiB7XHJcbiAgICAgIGxldCBhY2NvdW50czogTUN1ZW50YUluc3RpdHVjaW9uYWxbXSA9IGF3YWl0IHRoaXMuZ2V0Q3VlbnRhc0luc3RpdHVjaW9uYWxlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2lvbiddLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2nDs24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIHBsYW4gZGUgY3VlbnRhIGluc3RpdHVjaW9uYWwnLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNJbnN0aXR1Y2lvbmFsZXMoaW52ZW50b3J5PzogYm9vbGVhbik6IE9ic2VydmFibGU8TUN1ZW50YUluc3RpdHVjaW9uYWxbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jdWVudGFzX2Rhby5waHAkeyhpbnZlbnRvcnkpID8gJz9pbnZlbnRvcnk9dHJ1ZScgOiAnJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFJbnN0aXR1Y2lvbmFsKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY3VlbnRhcyBkZSBwcmVzdXB1ZXN0byAoUmVjdXJzb3MgeSBFZ3Jlc29zKVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc1ByZXN1cHVlc3RvKCk6IFByb21pc2U8TUN1ZW50YVByZXN1cHVlc3RvPiB7XHJcbiAgICAgIGxldCBhY2NvdW50czogTUN1ZW50YVByZXN1cHVlc3RvW10gPSBhd2FpdCB0aGlzLmdldEN1ZW50YXNQcmVzdXB1ZXN0bygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpw7NuJ10sXHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpb24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIEN1ZW50YXMgZGUgUHJlc3VwdWVzdG8nLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgZGUgcmVjdXJzb3MgeSBlZ3Jlc29zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YVByZXN1cHVlc3RvPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNQcmVzdXB1ZXN0bygpOiBPYnNlcnZhYmxlPE1DdWVudGFQcmVzdXB1ZXN0b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFQcmVzdXB1ZXN0bz4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvcGxhbl91bmljb19jdWVudGFzX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhUHJlc3VwdWVzdG8oZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgY8OhdGFsb2dvIGRlIGN1ZW50YXMgZGUgbGEgdGFibGEgXCJzY2dfcGxhbl91bmljb19yZVwiXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIGZpbHRybzogSW5kaWNhIGJham8gcXVlIHBhcmFtZXRyb3Mgc2UgdmEgYSBmaWx0cmFyIGVsIGNhdGFsb2dvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzUHJlc3VzcHVlc3RvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgZmlsdHJvOiBmaWx0cm9DdWVudGFzUHJlc3VwdWVzdG8gPSBudWxsLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gJzc1MHB4J1xyXG4gICAgKTogUHJvbWlzZTxNQ3VlbnRhUHJlc3VwdWVzdG8+IHtcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFQcmVzdXB1ZXN0b1tdID0gW107XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmdldEN1ZW50YXNQcmVzdXB1ZXN0bygpLnRvUHJvbWlzZSgpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIGN1ZW50YXMgPSByZXM7XHJcbiAgICAgICAgaWYgKGZpbHRybykge1xyXG4gICAgICAgICAgaWYgKGZpbHRyby5lc3RhZG8pIHtcclxuICAgICAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjLnN0YXR1cyA9PSBmaWx0cm8uZXN0YWRvXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlsdHJvLnRpcG8pIHtcclxuICAgICAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjLnRpcG8gPT0gZmlsdHJvLnRpcG9cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgZVsncHJvdlN0YXR1cyddID0gZS5zdGF0dXMgPT0gXCJDXCIgPyBcIk1vdmltaWVudG9zXCIgOiBcIlRvdGFsaXphZG9yYVwiXHJcbiAgICAgICAgICBlWydwcm92VHlwZSddID0gZS5zdGF0dXMgPT0gXCJSXCIgPyBcIlJlY3Vyc29zXCIgOiBcIkluZ3Jlc29zXCJcclxuICAgICAgICAgIHJldHVybiBlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIixcInByb3ZUeXBlXCJdLFxyXG4gICAgICAgIHRpdHVsbyxcclxuICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgIFtcIkN1ZW50YVwiLFwiRGVub21pbmFjacOzblwiLFwiRXN0YWRvXCIsXCJUaXBvXCJdLFxyXG4gICAgICAgIGFuY2hvXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGPDoXRhbG9nbyBkZSBjdWVudGFzIGRlIGxhIHRhYmxhIFwic3BnX2N1ZW50YXNcIlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxNQ3VlbnRhRWdyZXNvcz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIHByZXN1cHVlc3RvOiBJbmRpY2Egc2kgc2UgYSB0cmFiYWphciBjb24gZXN0cnVjdHVyYSBkZSBwcmVzdXB1ZXN0byBvIG5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzRWdyZXNvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgcHJlc3VwdWVzdG86IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gXCI3NTBweFwiXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFFZ3Jlc29zPntcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRFeHBlbnNlQWNjb3VudHMoKS50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgY3VlbnRhcyA9IHJlc1xyXG4gICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihlID0+IHtcclxuICAgICAgICAgIHJldHVybiBlLnN0YXR1cyA9PSBcIkNcIlxyXG4gICAgICAgIH0pLm1hcChlID0+IHtcclxuICAgICAgICAgIGVbJ3Byb3ZTdGF0dXMnXSA9IGUuc3RhdHVzID09IFwiQ1wiID8gXCJNb3ZpbWllbnRvc1wiIDogXCJUb3RhbGl6YWRvcmFcIlxyXG4gICAgICAgICAgcmV0dXJuIGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgaWYgKHByZXN1cHVlc3RvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvRG9zSW5wdXRzKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcImVzdHJ1Y3R1cmFcIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgICAgW3tcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiQ3VlbnRhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImN1ZW50YVwiXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkVzdHJ1Y3R1cmFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiZXN0cnVjdHVyYVwiXHJcbiAgICAgICAgICB9XSxcclxuICAgICAgICAgIFtcIkN1ZW50YVwiLCBcIkRlbm9taW5hY2nDs25cIiwgXCJFc3RydWN0dXJhXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkQWNjb3VudHM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgICBjdWVudGFzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlcmVkQWNjb3VudHMuZmluZChlID0+IGUuY3VlbnRhID09IGMuY3VlbnRhKSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLnB1c2goYylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjw6F0YWxvZ28gZGUgY3VlbnRhcyBkZSBsYSB0YWJsYSBcInNwaV9jdWVudGFzXCJcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8TUN1ZW50YUluZ3Jlc29zPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBwYXJhbXMgcHJlc3VwdWVzdG86IEluZGljYSBzaSBzZSBhIHRyYWJhamFyIGNvbiBlc3RydWN0dXJhIGRlIHByZXN1cHVlc3RvIG8gbm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0N1ZW50YXNJbmdyZXNvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgcHJlc3VwdWVzdG86IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gXCI3NTBweFwiXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFJbmdyZXNvcz57XHJcbiAgICAgIGxldCBjdWVudGFzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEluY29tZUFjY291bnRzKCkudG9Qcm9taXNlKCkudGhlbigocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBjdWVudGFzID0gcmVzLmRhdGFcclxuICAgICAgICBjdWVudGFzID0gY3VlbnRhcy5maWx0ZXIoZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZS5lc3RhZG8gPT0gXCJDXCJcclxuICAgICAgICB9KS5tYXAoZSA9PiB7XHJcbiAgICAgICAgICBlWydwcm92U3RhdHVzJ10gPSBlLmVzdGFkbyA9PSBcIkNcIiA/IFwiTW92aW1pZW50b3NcIiA6IFwiVG90YWxpemFkb3JhXCJcclxuICAgICAgICAgIHJldHVybiBlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChwcmVzdXB1ZXN0bykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0Rvc0lucHV0cyhcclxuICAgICAgICAgIFtcImN1ZW50YVwiLFwiZGVub21pbmFjaW9uXCIsXCJlc3RydWN0dXJhXCIsXCJwcm92U3RhdHVzXCJdLFxyXG4gICAgICAgICAgdGl0dWxvLFxyXG4gICAgICAgICAgY3VlbnRhcyxcclxuICAgICAgICAgIFt7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkN1ZW50YVwiLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogXCJjdWVudGFcIlxyXG4gICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJFc3RydWN0dXJhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImVzdHJ1Y3R1cmFcIlxyXG4gICAgICAgICAgfV0sXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0cnVjdHVyYVwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZEFjY291bnRzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICAgIGN1ZW50YXMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgIGlmICghZmlsdGVyZWRBY2NvdW50cy5maW5kKGUgPT4gZS5jdWVudGEgPT0gYy5jdWVudGEpKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMucHVzaChjKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMsXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0gICAgXHJcblxyXG4gICAgcHVibGljIGdldFVuaWRhZEFkbWluaXN0cmF0aXZhKCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3BnL3VuaWRhZF9hZG1pbmlzdHJhdGl2YV9kYW8ucGhwYCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1BZG1pbmlzdHJhdGl2ZVVuaXQoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KSBcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjYXJnb3MgZGUgc2VydmljaW9zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZpY2VDaGFyZ2VzKHNlcnZpY2VJZDpudW1iZXIgPSBudWxsKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NvYy9zZXJ2aWNpb19jYXJnb19kYW8ucGhwJHtcclxuICAgICAgICBzZXJ2aWNlSWQgPyBgP3NlcnZpY2VfaWQ9JHtzZXJ2aWNlSWR9YCA6ICcnXHJcbiAgICAgIH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2VydmljZUNoYXJnZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwYWlzZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ291bnRyeT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAbW9kaWZpZWQgMTAtMDEtMjAyMlxyXG4gICAgICogQHBhcmFtIGNvZGlnbzogQ29kaWdvIGRlbCBwYWlzXHJcblxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRDb3VudHJpZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db3VudHJ5W10+IHtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ291bnRyeT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvcGFpc2VzX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvdW50cnkoZSkpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBlc3RhZG9zXHJcbiAgICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU3RhdGU+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDQtMTItMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gY29kaWdvOiBDb2RpZ28gZGVsIHBhaXNcclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRTdGF0ZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1TdGF0ZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVN0YXRlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lc3RhZG9zX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVN0YXRlKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgbXVuaWNpcGlvc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU11bmljaXBhbGl0eT5cclxuICAgICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAgICogQG1vZGlmaWNhZG8gMTAtMDEtMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gcGFpczogQ29kaWdvIGRlbCBwYWlzICxcclxuICAgICAgICogQHBhcmFtIGVzdGFkbzogQ29kaWdvIGRlbCBlc3RhZG9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG4gICAgICAgKi9cclxuICAgICAgcHVibGljIGdldE11bmljaXBhbGl0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TU11bmljaXBhbGl0eVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TU11bmljaXBhbGl0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvbXVuaWNpcGlvc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNTXVuaWNpcGFsaXR5KGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgcGFycm9xdWlhcyBcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG4gICAgICAgKiBAcGFyYW0gbXVuaWNpcGlvOmNvZGlnbyBNdW5pY2lwaW9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG5cclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRQYXJpc2hlcyhwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcsbXVuaWNpcGlvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1QYXJpc2hbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1QYXJpc2g+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3BhcnJvcXVpYXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGFyaXNoKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2l1ZGFkZXNcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG5cclxuXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRDaXR5KHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TUNpdHlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DaXR5PihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jaXVkYWRlc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2l0eShlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjaXVkYWRlc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVBhcmlzaD5cclxuICAgICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG5cclxuICAgICAgICovXHJcbiAgICAgICAgcHVibGljIGdldENvbW11bml0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZywgbXVuaWNpcGlvPzpzdHJpbmcscGFycm9xdWlhPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db21tdW5pdHlbXT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbW11bml0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY29tdW5pZGFkZXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99JnBhcnJvcXVpYT0ke3BhcnJvcXVpYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbW11bml0eShlKSkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHNpc3RlbWFzIGFjdGl2YXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU2lzdGVtYT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaXN0ZW1hcygpOiBPYnNlcnZhYmxlPE1TaXN0ZW1hW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVNpc3RlbWE+KGAke3RoaXMuVVJMfS9kYW8vc3NzL3Npc3RlbWFzX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2lzdGVtYShlKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBtb25lZGEgYWN0dWFsXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBhY3R1YWxpemFkbzogNC0xMi0yMDIyMlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudEN1cnJlbmN5KCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvbW9uZWRhX2Rhby5waHA/dGlwbz0keydhY3R1YWwnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Nb25lZGFDb25maWcocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGxpbmVhIGVtcHJlc2FcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBhY3R1YWxpemFkbzogNS0xMi0yMDIyMlxyXG4gICAgICogQHRpcG8gXHJcbiAgICAgKi9cclxuICAgICAgICAgcHVibGljIGdldEVudGVycHJpc2UodGlwbzondXN1YXJpbycgfCAnZGVmYXVsdCc9bnVsbCAsaWQ/Om51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2VudGVycHJpc2VfZGFvLnBocD9gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRW50ZXJwcmlzZShlKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIG9yZ2FuaXphY2lvblxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25UeXBlcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3RpcG9fb3JnYW5pemFjaW9uX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNT3JnYW5pemF0aW9uVHlwZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgb3JnYW5pemFjaW9uXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNwZWNpYWx0aWVzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvZXNwZWNpYWxpZGFkX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU3BlY2lhbHR5KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBkb2N1bWVudG9zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldERvY3VtZW50cygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL2RvY3VtZW50b19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURvY3VtZW50KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjbGFzaWZpY2FjaW9uZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2xhc2lmaWNhdGlvbnMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9jbGFzaWZpY2FjaW9uX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2xhc2lmaWNhdGlvbihlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBwcmVmaWpvIGRlIGxvcyB1c3Vhcmlvc1xyXG4gICAgICogQHBhcmFtIHByb2NlZGUgRGUgcXVlIG3Ds2R1bG8gcHJvY2VkZVxyXG4gICAgICogQHBhcmFtIGNvZHNpcyBDw7NkaWdvIGRlbCBzaXN0ZW1hXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVVzdWFyaW9QcmVmaWpvW10+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VXNlclByZWZpeChmaWx0ZXI6ICdkZXRhaWwnID0gbnVsbCwgY29kZTogc3RyaW5nID0gbnVsbCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbnRyb2xfbnVtZXJvX2Rhby5waHAke1xyXG4gICAgICAgIGZpbHRlciA/IGA/ZmlsdGVyPSR7ZmlsdGVyfSZjb2RlPSR7Y29kZX1gIDogJydcclxuICAgICAgfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Vc3VhcmlvUHJlZmlqbyhlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHBlZmlqb1xyXG4gICAgICogQHBhcmFtIHByb2NlZGUgRGUgcXVlIG3Ds2R1bG8gcHJvY2VkZVxyXG4gICAgICogQHBhcmFtIGNvZHNpcyBDw7NkaWdvIGRlbCBzaXN0ZW1hXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVVzdWFyaW9QcmVmaWpvW10+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseUNyZXNwbyAxNy0xMi0yMDIyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQcmVmaXgoZmlsdGVyOiAnYWxsJyB8ICdvbmUnID0gbnVsbCwgY29kZTogc3RyaW5nID0gbnVsbCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbnRyb2xfbnVtZXJvX2Rhby5waHAke1xyXG4gICAgICAgIGZpbHRlciA/IGA/ZmlsdGVyPSR7ZmlsdGVyfSZjb2RlPSR7Y29kZX1gIDogJydcclxuICAgICAgfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QcmVmaWpvKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBwYXJhIGJ1c2NhciBsb3MgcHJvdmVlZG9yZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNUHJvdmVlZG9yPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dQcm92ZWVkb3JlcygpOiBQcm9taXNlPE1Qcm92ZWVkb3I+IHtcclxuICAgICAgbGV0IHByb3ZlZWRvcmVzOiBNUHJvdmVlZG9yW10gPSBhd2FpdCB0aGlzLmdldFByb3ZlZWRvcmVzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWyd0aXBvJywgJ3JpZicsICdub21icmUnXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIFByb3ZlZWRvcmVzIHkgQmVuZWZpY2lhcmlvcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBwcm92ZWVkb3Jlc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVByb3ZlZWRvcltdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFByb3ZlZWRvcmVzKCk6IE9ic2VydmFibGU8TVByb3ZlZWRvcltdPiB7XHJcbiAgICAgIGxldCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1Qcm92ZWVkb3JbXT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2JlbmVmaWNpYXJpb19kYW8ucGhwYCwgcmVxdWVzdCkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMubWFwKGVsZW1lbnQgPT4gbmV3IE1Qcm92ZWVkb3IoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzIHkgYmVuZWZpY2lhcmlvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQcm92aWRlcnNBbmRCZW5lZmljaWFyaWVzKHR5cGU6IHN0cmluZyA9IG51bGwpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3Byb3ZlZWRvcl9iZW5lZmljaWFyaW9fZGFvLnBocCR7dHlwZSA/IGA/cHJvdmlkZXJfdHlwZT0ke3R5cGV9YCAgOiAnJ31gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVByb3ZpZGVyQmVuZWZpY2lhcnkoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHVuIFVzdWFyaW8gc2VndW4gc3UgSURcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VXNlckJ5SWQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zc3MvdXN1YXJpb19kYW8ucGhwP2lkPSR7aWR9YCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Vc3VhcmlvKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBiYW5jb3NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QmFua3MoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjYi9iYW5jb19kYW8ucGhwYCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1CYW5rKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBjdWVudGEgYmFuY2FyaWFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJhbmtBY2NvdW50VHlwZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjYi9iYW5jb190aXBvX2N1ZW50YV9kYW8ucGhwYCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1CYW5rQWNjb3VudFR5cGUoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBbGxCYW5rQWNjb3VudCgpeyAgICAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc2NiL2N1ZW50YV9iYW5jb19kYW8ucGhwP2AsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhQmFuY28oZWxlbWVudCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNcclxuICAgICAgICB9KSBcclxuICAgICAgKVxyXG4gICAgfSBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBiYW5jb3Mgc2lnZWNvZlxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaWdlY29mQmFua3MoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NpZ2VzcC9iYW5jb19zaWdlY29mX2Rhby5waHBgLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNpZ2Vjb2ZCYW5rKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpb24gZGUgU09DXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ1NPQygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc29jL2NvbmZpZ3VyYWNpb25fZGFvLnBocGAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNQ29uZmlnU09DKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkZWR1Y2Npb25cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RGVkdWN0aW9uVHlwZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3N0Yi90aXBvX2RlZHVjY2lvbl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURlZHVjdGlvblR5cGUoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbmNvbWVBY2NvdW50cyhvbmx5QXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPGFueT57XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3BpL2N1ZW50YXNfaW5ncmVzb3NfZGFvLnBocCR7XHJcbiAgICAgICAgb25seUF2YWlsYWJsZSA/ICc/YXZhaWxhYmxlPXRydWUnIDogJydcclxuICAgICAgfWAsIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DdWVudGFJbmdyZXNvcyhlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDaGFyZ2VzKCl7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3RiL2Nhcmdvc19kYW8ucGhwYCwgXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DYXJnbyhlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gIFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREZWR1Y3Rpb25zKCl7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3RiL2RlZHVjY2lvbmVzX2Rhby5waHBgLCBcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURlZHVjdGlvbihlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gIFxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGxvcyBkYXRvcyBkZSBFbXByZXNhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRDb21wYW55KHRpcG8/OnN0cmluZyxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lbXByZXNhc19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1FbXByZXNhKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gQ1hQXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAZGF0ZSAyMC0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgICAgcHVibGljIGdldFRpcG9zRG9jdW1ldG9zKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2N4cC90aXBvX2RvY3VtZW50b19kYW8ucGhwP29wZXJhY2lvbj0keydidXNjYXInfSZleGlzdGVuPSR7J2V4aXN0ZW4nfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVRpcG9Eb2N1bWVudG9DWFAoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAgKiBAcGFyYW0gZ2V0IHRvbWEgbG9zIHZhbG9yZXM6IFsgaWRPcmRlbkNvbXByYSAsJ3JlY2VwY2lvbicsJ2V4aXN0ZW4nLCdjb2RpZ28nLCAnb3JkZW5lc1NPQycsICdvcCcsICdhcnQnIF1cclxuICAgICAgKiBAcGFyYW0gbiBjb2RpZ28gRG9jdW1lbnRvIE9yZGVuLCBzZSB1c2EgcGFyYSBvYnRlbmVyIGxvcyBkZXRhbGxlcyBkZSBsYSBvcmRlbiBkZSBjb21wcmEsIGVzIG9ibGlnYXRvcmlvIGFsIGNvbWJpbmFyIGNvbiBsYSBvcGNpb24gZ2V0OiBpZE9yZGVuQ29tcHJhXHJcbiAgICAgICogQGRlc2NyaXB0aW9uICdyZWNlcGNpb24nOiBPYnRpbmUgbGFzIG9yZGVuZXMgZGUgc3VtaW5pc3RybyxcclxuICAgICAgKiBleGlzdGUgeSBjb2RpZ286IE9idGllbmUgbG9zIGNvZGlnb3MgcmVnaXN0cmFkb3MsIFxyXG4gICAgICAqIG9yZGVuZXNTT0M6IG9idGllbmUgbGFzIG9yZGVuZXMgZGUgY29tcHJhLFxyXG4gICAgICAqIG9wOiBvYnRpZW5lIGxhcyBvcmRlbmVzIHBlbmRpZW50ZXNcclxuICAgICAgKiBhcnQ6IG9idGllbmUgbG9zIGFydGljdWxvcyBcclxuICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICAqIEBkYXRlIDMtMTAtMjAyMVxyXG4gICAgICAqIEByZXR1cm5zIFxyXG4gICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldEVudHJhZGFTdW1pbmlzdHJvcyhnZXQ6YW55LCBuPzpzdHJpbmcpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zaXYvZW50cmFkYV9zdW1pbmlzdHJvX2Rhby5waHA/Z2V0PSR7Z2V0fSZuPSR7bn1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRW50cmFkYVN1bWluaXN0cm9zKGUpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkb2N1bWVudG9zIHJlZ2lzdHJhZG9zIGVuIENYUFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogQGRhdGUgMjAtMDctMjAyMVxyXG4gICAgICovXHJcblxyXG4gICAgICBwdWJsaWMgZ2V0Q29uY2VwdG9zQ3hQKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2N4cC9jb25jZXB0b19kYW8ucGhwP29wZXJhY2lvbj0keydidXNjYXInfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmNlcHRvc0NYUChlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGxvcyBjb25jZXB0b3MgUmV0ZW5jaW9uIElTUkxcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBkYXRlIDI2LTA3LTIwMjFcclxuICAgICAqL1xyXG5cclxuICAgICAgICBwdWJsaWMgZ2V0Q29uY2VwdG9zUmV0ZW5jaW9uKCl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3RiL2RlZHVjY2lvbmVzX2Rhby5waHA/Y29kZT0keydjb25jZXB0b3MnfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmNlcHRvUmV0ZW5jaW9uKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIFJSSEggeSBkZSBTTk9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgb2J0ZW5lckNvbmZpZ3VyYWNpb25TTk8oKXtcclxuICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9jb25maWd1cmFjaW9uX2Rhby5waHA/dGlwbz0keydjb25maWd1cmFjaW9uJ31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ29uZmlndXJhY2lvblNOTyhlKSk7ICBcclxuICAgICAgICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgICBcclxuICAgICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAgKiBcclxuICAgICAgKiBAcGFyYW0gdGlwbyBbJ2RlZmF1bHQnLCAndW5vJywgJ2NhcmdvcyddIGRhZmF1bHQ6VG9kYXMgbGFzIG5vbWluYXMsIHVubzogdW5hIG5vbWluYSwgJ2Nhcmdvcyc6IG5vbWluYXMgcG9yIGNhcmdvc1xyXG4gICAgICAqIEBwYXJhbSBpZCA6aWQgZGUgbGEgbm9taW5hLiBDYW1wbyByZXF1ZXJpZG8gcGFyYSB1bm8geSBjYXJnb3NcclxuICAgICAgKiBAcmV0dXJucyBhcnJheSgpICAgICAgXHJcbiAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIG5vbWluYXMgcmVnaXN0cmFkYXNcclxuICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICAqIEBkYXRlIDIwLTEwLTIxXHJcbiAgICAgICpcclxuICAgICAqLyAgICAgXHJcblxyXG4gICAgICAgcHVibGljIGdldE5vbWluYSh0aXBvOnN0cmluZyxpZD86bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2RlZmluaWNpb25fbm9taW5hX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRGVmaW5pY2lvbk5vbWluYShlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAvKipcclxuICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGNhcmdvcyBkZSBsYXMgbm9taW5hXHJcbiAgICAqIEBwYXJhbSB0aXBvIFsnY29kaWdvJywnZGVmYXVsdCddIC0+Y29kaWdvOiBvYnRpZW5lIGVsIHByb3hpbW8gY29kaWdvLiAtPmRlZmF1bHQ6IG9idGllbmUgdG9kb3MgbG9zIGNhcmdvcyBkZSBsYSBub21pbmFcclxuICAgICogQHBhcmFtIGlkIGlkIGRlIGxhIG5vbWluYVxyXG4gICAgKiBAcmV0dXJucyBhcnJheSgpXHJcbiAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0Q2FyZ29zTm9taW5hKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vYXNpZ25hY2lvbl9jYXJnb3NfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Bc2lnbmFjaW9uQ2FyZ28oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSAgXHJcbiAgICAgIFxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHVuIHBlcnNvbmFsIGRlIGxhIG7Ds21pbmFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFBlcnNvbmFsU1JIKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vcGVyc29uYWxfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QZXJzb25hbChlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9IFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgYWdlbmNpYSBkZSBiYW5jb1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0QWdlbmNpYUJhbmNvKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2IvYWdlbmNpYV9kYW8ucGhwP2NvZGU9JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUFnZW5jaWFCYW5jbyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9IFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgaG9qYXMgZGUgdGllbXBvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgICAgICAgICBwdWJsaWMgZ2V0SG9qYVRpZW1wbyh0aXBvOnN0cmluZyxpZFBlcnNvbmFsPzpudW1iZXIsaWROb21pbmE/Om51bWJlcil7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vaG9qYV90aWVtcG9fZGFvLnBocD9pZFBlcnNvbmFsPSR7aWRQZXJzb25hbH0maWROb21pbmE9JHtpZE5vbWluYX1gLFxyXG4gICAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Ib2phVGllbXBvKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBcclxuICAgICAgXHJcblxyXG4gICAgXHJcbiAgXHJcblxyXG5cclxuICAgIHB1YmxpYyB1c2VySGFzUmlnaHRzKGNvbHVtbjonYWRtaW5pc3RyYWRvcicgfCAnaW5zZXJ0YXInIHwgJ2FjdHVhbGl6YXInIHwgJ2NvbnN1bHRhcicgXHJcbiAgICB8ICdlbGltaW5hcicgfCAnYW51bGFyJyB8J2Rlc2NhcmdhcicgfCAnZWplY3V0YXJfX3Byb2Nlc2FyXycgfCAnaW1wcmltaXInIFxyXG4gICAgfCAnZW52aWFyX19jb3JyZW9fJyB8ICd2aXNpYmxlJyl7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3NzL2RlcmVjaG9zX3VzdWFyaW9fZGFvLnBocD9pZENvbXBvbmVudD0ke1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29tcG9uZW50LmlkXHJcbiAgICAgICAgfSZjb2x1bW49JHtjb2x1bW59YCwgXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApXHJcblxyXG4gICAgfVxyXG5cclxuICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0b3JuYSBsb3MgaGVhZGVycyBwYXJhIGhhY2VyIGxhcyBwZXRpY2lvbmVzXHJcbiAgICAgKiBAcGFyYW1zIHR5cGU6IFRpcG8gTUlNRSBwZXJtaXRpZG8gcG9yIGRlZmVjdG8gc2UgdG9tYSBhcHBsaWNhdGlvbi9qc29uXHJcbiAgICAgKiBAcmV0dXJuIEh0dHBIZWFkZXJzXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQGRhdGUtdXBkYXRlOiAxNS0wNi0yMDIyIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SHR0cEhlYWRlcnModHlwZT86c3RyaW5nKTogSHR0cEhlYWRlcnMgeyBcclxuICAgICAgIXR5cGU/IHR5cGU9J2FwcGxpY2F0aW9uL2pzb24nOicnOyAgICAgIFxyXG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogdHlwZSxcclxuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGAke3RoaXMudXN1YXJpb0FjdGl2by50b2tlbn1gXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gaGVhZGVycztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIHNlcnZpZG9yIGd1YXJkYWRvIGVuIGVsIHNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIHN0cmluZ1xyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZlcigpOiBzdHJpbmcge1xyXG4gICAgICByZXR1cm4gdGhpcy5VUkw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCB1c3VhcmlvIGd1YXJkYWRvIGVuIGVsIHNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIE1Vc3VhcmlvXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VXNlcigpIHtcclxuICAgICAgbGV0IGNvbmV4aW9uOiBJQ29uZXhpb24gPSBhd2FpdCAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSA/IEpTT04ucGFyc2UoYXRvYihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpKSA6IG51bGw7XHJcbiAgICAgIC8vY29uc29sZS5sb2coY29uZXhpb24pXHJcbiAgICAgIC8vIGRlYnVnZ2VyXHJcbiAgICAgIGlmIChjb25leGlvbikge1xyXG4gICAgICAgIHRoaXMudXN1YXJpb0FjdGl2byA9IG5ldyBNVXN1YXJpbyhjb25leGlvbi51c3VhcmlvKTtcclxuICAgICAgICB0aGlzLlVSTCA9IGNvbmV4aW9uLnNlcnZpZG9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gdG9hc3QgZGUgc3VjY2Vzc1xyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RTdWNjZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biB0b2FzdCBkZSBlcnJvclxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgdGhpcy50b2FzdC5lcnJvcihtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gc3dlZXRhbGVydDIgZGUgw6l4aXRvXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGRhdGUgMjItMTEtMjAyMVxyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgc2hvd1RvYXN0U3VjY2Vzc1N3YWwobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICAgIGljb246ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHRpdGxlOiAnw4l4aXRvJyxcclxuICAgICAgICAgIHRleHQ6IG1lc3NhZ2UsICAgICAgIFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBNdWVzdHJhIHVuIHN3ZWV0YWxlcnQyIGRlIGVycm9yXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGRhdGUgMjItMTEtMjAyMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvd1RvYXN0RXJyb3JTd2FsKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgIGljb246ICdlcnJvcicsXHJcbiAgICAgICAgdGl0bGU6ICfCoUVycm9yIScsXHJcbiAgICAgICAgdGV4dDogbWVzc2FnZSwgICAgICAgXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR3VhcmRhIGVsIHVzdWFyaW8gbG9ndWVhZG8gZW4gZWwgU2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSB1c2VyIFVzdWFyaW8gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbiBlbCBTZXNzaW9uU3RvcmFnZVxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2F2ZVVzZXIoZGF0YTogSUNvbmV4aW9uKTogdm9pZCB7XHJcbiAgICAgIHRoaXMudXN1YXJpb0FjdGl2byA9IG5ldyBNVXN1YXJpbyhkYXRhLnVzdWFyaW8pO1xyXG4gICAgICB0aGlzLlVSTCA9IGRhdGEuc2Vydmlkb3I7XHJcbiAgICAgIGxldCBlbmNyeXB0ZWRVc2VyOiBzdHJpbmcgPSBidG9hKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndXNlcicsIGVuY3J5cHRlZFVzZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNldGUgYSBsYSB1cmwgYSBsYSBjdWFsIHNlIGxlIHZhbiBhIHJlYWxpemFyIHBldGljaW9uZXMgYWwgYmFja0VuZFxyXG4gICAgICogQHBhcmFtIHVybCBVUmwgZG9uZGUgc2UgdmFuIGEgcmVhbGl6YXIgbGFzIHBldGljaW9uZXNcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLlVSTCA9IHVybDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIGRlIHNpZ2VzcFxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcclxuICAgICAgLy8gVmVyaWZpY2Ftb3Mgc2kgaGF5IHVuIHVzdWFyaW8gZW4gbGEgc2Vzc2lvblN0b3JhZ2UsIGVzdG8gZXMgbmVjZXNhcmlvIHBhcmEgcmVjYXJnYXIgbGEgcMOhZ2luYVxyXG4gICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKVxyXG4gICAgICAgIHRoaXMuZ2V0VXNlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmVyaWZpY2Egc2kgdW4gdXN1YXJpbyBlc3TDoSBsb2d1ZWFkb1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPGJvb2xlYW4+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgaXNMb2dnZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSkge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZXJFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBhbnkge1xyXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcignT2N1cnJpw7MgdW4gZXJyb3InKVxyXG4gICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gb2J0aWVuZSBlbCBwZXJzb25hbCBzZWd1biBmaWx0cm9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAZGF0ZSAxNS0xMS0yMDIxXHJcbiAgICAgKiBAcGFyYW0gdGlwbzogdmFsb3JlcyBbJ2NhdGFsb2dvJywnZGVmYXVsdCcsJ25vbWluYSddXHJcbiAgICAgKiBAcGFyYW1zIGRhdG86b2JqZWN0IHtub21icmU6c3RyaW5nLCBhcGVsbGlkbzpzdHJpbmcsIGNlZHVsYS5zdHJpbmd9IHVzZSBwYXJhIGxhIG9wY2lvbiAnY2F0YWxvZ28nXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRQZXJzb25hbCh0aXBvOnN0cmluZywgZGF0bz86YW55KXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL3BlcnNvbmFsX2Rhby5waHA/XHJcbiAgICAgICAgdGlwbz0ke3RpcG99JmNlZHVsYT0ke2RhdG8uY2VkdWxhfSZub21icmU9JHtkYXRvLm5vbWJyZX0mYXBlbGxpZG89JHtkYXRvLmFwZWxsaWRvfSZleHBlZGllbnRlPSR7ZGF0by5leHBlZGllbnRlfSZpZFRpcG89JHtkYXRvLnRpcG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGVyc29uYWwoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIG9idGVuZXIgcGVyc29uYWwgTm9taW5hIHNlZ3VuIGZpbHRyb1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBkYXRlIDE1LTExLTIwMjFcclxuICAgICAqICogQHBhcmFtIHRpcG86IHZhbG9yZXMgWydjYXRhbG9nbycsJ2RlZmF1bHQnLCdub21pbmEnXVxyXG4gICAgICogQHBhcmFtcyBkYXRvOm9iamVjdCB7bm9tYnJlOnN0cmluZywgYXBlbGxpZG86c3RyaW5nLCBjZWR1bGEuc3RyaW5nfSB1c2UgcGFyYSBsYSBvcGNpb24gJ2NhdGFsb2dvJ1xyXG5cclxuICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRQZXJzb25hbE5vbWluYSh0aXBvOnN0cmluZyxkYXRvPzphbnkpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9hc2lnbmFjaW9uX3BlcnNvbmFsX25vbWluYV9kYW8ucGhwP1xyXG4gICAgICAgICAgdGlwbz0ke3RpcG99JmNlZHVsYT0ke2RhdG8uY2VkdWxhfSZub21icmU9JHtkYXRvLm5vbWJyZX0mYXBlbGxpZG89JHtkYXRvLmFwZWxsaWRvfSZleHBlZGllbnRlPSR7ZGF0by5leHBlZGllbnRlfSZpZFRpcG89JHtkYXRvLmlkVGlwb30maWROb21pbmE9JHtkYXRvLmlkTm9taW5hfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBlcnNvbmFsTm9taW5hKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gaWRQZXJzb25hbDogaWQgZGVsIHBlcnNvbmFsXHJcbiAgICogQHBhcmFtIHRpcG86IHZhbG9yZXNbJ25vbWluYV9wZXJzb25hbCddIFxyXG4gICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBub21pbmFzIGRlbCBwZXJzb25hbCByZXN1bWlkYVxyXG4gICAqIEBkZXByZWNhdGVkOyAyMC0wMS0yMlxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIFxyXG4gIHB1YmxpYyBnZXRQZXJzb25hbE5vbWluYVJlc3VtaWRhKGlkUGVyc29uYWw6bnVtYmVyLHRpcG86c3RyaW5nKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9wZXJzb25hbF9kYW8ucGhwP2lkUGVyc29uYWw9JHtpZFBlcnNvbmFsfSZ0aXBvPSR7dGlwb31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Ob21pbmFTaW1wbGUoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIFxyXG4gICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgICAgKi9cclxuICAgICAgICAgIHB1YmxpYyBnZXRQZXJmaWxOb0NvbXBvbmVudChpZF91c3VhcmlvOm51bWJlcixzaXN0ZW1hOnN0cmluZywgbmFtZUNvbXBvbmVudDogc3RyaW5nICl7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3NzL2RlcmVjaG9zX3VzdWFyaW9fZGFvLnBocD9pZF91c3VhcmlvPSR7aWRfdXN1YXJpb30mc2lzdGVtYT0ke3Npc3RlbWF9Jm5hbWVjb21wb25lbnQ9JHtuYW1lQ29tcG9uZW50fWAsXHJcbiAgICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgfVxyXG4gIFxyXG4gICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgICAgKi9cclxuICAgICAgICBwdWJsaWMgZ2V0SnNvbk1lbnUoaWRfdXN1YXJpbzpudW1iZXIsc2lzdGVtYTpzdHJpbmcpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zc3MvbWVudV9kYW8ucGhwP2lkX3VzdWFyaW89JHtpZF91c3VhcmlvfSZzaXN0ZW1hPSR7c2lzdGVtYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHsgXHJcbiAgICAgICAgICAgICAgIHRoaXMudXNlck1lbnUgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlck1lbnU7XHJcbiAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAvKipcclxuICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBKc29uIE1lbnUgcGFyYSBlbCB1c3VhcmlvIGRlZmluaWRvIHNlZ3VuIHN1IHBlcm1pc29sb2dpYSBkZWwgU2lzdGVtYVxyXG4gICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAgICovXHJcbiAgICAgIHB1YmxpYyBsb2coYm9keTogTUxvZyApeyAgXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3Nzcy9sb2dfZGFvLnBocGAsIGJvZHkgLCB7XHJcbiAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpXHJcbiAgICAgICAgfSkucGlwZSggIFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyAgXHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICBcclxuICAgICAgICBcclxuICAgLyoqXHJcbiAgICAqIEBuYW1lIEVuY3J5cHREYXRhXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBFbnNjcmlwdGEgdW5hIGV4cHJlc2lvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2XDsW9cclxuICAgICovXHJcbiAgICBwdWJsaWMgRW5jcnlwdERhdGEoIGV4cHJlc2lvbiA6IHN0cmluZyl7XHJcbiAgICAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoXCIwMTIzNDU2Nzg5U0lHRVNQXCIpOyAvLyBuw7ptZXJvIGhleGFkZWNpbWFsIGRlIDE2IGTDrWdpdG9zIGNvbW8gY2xhdmVcclxuICAgICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKCdTSUdFU1AwMTIzNDU2Nzg5Jyk7IC8vIE7Dum1lcm8gaGV4YWRlY2ltYWwgY29tbyBkZXNwbGF6YW1pZW50byBkZSBjbGF2ZVxyXG4gICAgICAgbGV0IHNyY3MgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShleHByZXNpb24pO1xyXG4gICAgICAgbGV0IGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KHNyY3MsIGtleSwgeyBpdjogaXYsIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgfSk7XHJcbiAgICAgICByZXR1cm4gZW5jcnlwdGVkLmNpcGhlcnRleHQudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gXHJcbiAgICAvKipcclxuICAgICogQG5hbWUgRGVjcnlwdERhdGFcclxuICAgICogQGRlc2NyaXB0aW9uIERlc2VuY3JpcHRhIHVuYSBleHByZXNpb24gZGF0YVxyXG4gICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlw7FvXHJcbiAgICAqL1xyXG4gICAgcHVibGljIERlY3J5cHREYXRhKCBleHByZXNpb24gOiBzdHJpbmcpe1xyXG4gICAgICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKFwiMDEyMzQ1Njc4OVNJR0VTUFwiKTsgLy8gbsO6bWVybyBoZXhhZGVjaW1hbCBkZSAxNiBkw61naXRvcyBjb21vIGNsYXZlXHJcbiAgICAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlICgnU0lHRVNQMDEyMzQ1Njc4OScpOyAvLyBOw7ptZXJvIGhleGFkZWNpbWFsIGNvbW8gZGVzcGxhemFtaWVudG8gZGUgY2xhdmVcclxuICAgICAgIGxldCBlbmNyeXB0ZWRIZXhTdHIgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGV4cHJlc2lvbik7XHJcbiAgICAgICBsZXQgc3JjcyA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KGVuY3J5cHRlZEhleFN0cik7XHJcbiAgICAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHNyY3MsIGtleSwgeyBpdjogaXYsIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgfSk7XHJcbiAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XHJcbiAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiBcclxuIFxyXG4gICAgLyoqXHJcbiAgICAqIEBuYW1lIGdldFJlc3BvbnNlUGVyZmlsVG9vbGJhclxyXG4gICAgKiBAZGVzY3JpcHRpb24gTWV0b2RvIHF1ZSBvYnRpZW5lIHVuYSByZXNwdWVzdGEgdHJ1ZSBvIGZhbHNlIGJhc2FkbyBlbiB1bmEgZXN0cnVjdHVyYSBzcmluZyBiaW5hbnJpYSBzZWd1biBcclxuICAgICogICAgICAgICAgICAgIGxhIHBvc2ljaW9uIGRhZGEgZGVsIHRvb2xiYXIuIHNlIHBhc2Egc3RyaW5nIGJpbmFyaW8gcXVlIGNvbnRpZW5lIDEgeSAwIGVuIHJlcHJlc2VudGFjaW9uIFxyXG4gICAgKiAgICAgICAgICAgICAgZGUgbGFzIHByb3BpZXN0YWRlcyBhZG1pbmlzdHJhZG9yLGNvbnN1bHRhcixlamVjdXRhcixpbXByaW1pciBldGMgLi4uIGNhZGEgcG9zaWNpb24gc2VjdWVuY2lhbCBcclxuICAgICogICAgICAgICAgICAgIHNpIGVzdGEgZW4gMSBlcyB0cnVlIHkgMCBlbiBmYWxzZSB5IGRldnVsZXZlIGVsIHZhbG9yIHNlZ3VuIGxvIHJlcXVpZXJhIGVsIHVzdWFyaW86XHJcbiAgICAqICAgICAgICAgICAgICBzdHJpbmdiaW5hcmlvIDogJzEwMTEnIHkgcG9zaWNpb24gZXMgMiwgcG9yIHRhbnRvIHNlIHRhcmUgMCB5IGVzIGZhbHNlIHF1ZSByZXByZXNlbnRhIG9wY2lvbiBjb25zdWx0YXIuXHJcbiAgICAqICAgICAgICAgICAgICBFc3RydWN0dXJhIHN0cmluZyBiaW5hcmlvOlxyXG4gICAgKiAgICAgICAgICAgICAgUG9zaWNpw7NuIDpcclxuICAgICogICAgICAgICAgICAgIDAuICBBZG1pbmlzdHJhZG9yICAgICAgICA2LiAgRGVzY2FyZ2FyICAgICAgMTIuIFJldmVyc2FyIGFwcm9iYXIgICAgICAxOC4gUmV2ZXJzYXIgYW51bGFyIGNvbnRhYmlsaXphZG9cclxuICAgICogICAgICAgICAgICAgIDEuICBpbnNlcnRhciAgICAgICAgICAgICA3LiAgRWplY3V0YXIgICAgICAgMTMuIEFudWxhci5cclxuICAgICogICAgICAgICAgICAgIDIuICBBY3R1YWxpemFyICAgICAgICAgICA4LiAgRW52aWFyICAgICAgICAgMTQuIHJldmVyc2FyIGFudWxhclxyXG4gICAgKiAgICAgICAgICAgICAgMy4gIGNvbnN1bHRhciAgICAgICAgICAgIDkuIEltcHJpbWlyICAgICAgICAxNS4gY29udGFiaWxpemFyXHJcbiAgICAqICAgICAgICAgICAgICA0LiAgRWxpbWluYXIgICAgICAgICAgICAgMTAuIFZpc2libGUgICAgICAgIDE2LiByZXZlcnNhciBjb250YWJpbGl6YXJcclxuICAgICogICAgICAgICAgICAgIDUuICBBbnVsYXIgICAgICAgICAgICAgICAxMS4gQXByb2JhciAgICAgICAgMTcuIGFudWxhciBjb250YWJpbGl6YWRvICAgICAgIFxyXG4gICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlw7FvXHJcbiAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRSZXNwb25zZVBlcmZpbFRvb2xiYXIoIHN0cmluZ2JpbmFyaW8gOiBzdHJpbmcsIHBvc2l0aW9uIDogbnVtYmVyICl7XHJcbiAgICAgICAgICBsZXQgYmluYXJpbyA9IHN0cmluZ2JpbmFyaW8uc3Vic3RyaW5nKHBvc2l0aW9uLHBvc2l0aW9uKzEpIDtcclxuICAgICAgICAgIGlmIChiaW5hcmlvPT1cIjFcIil7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IFxyXG4gICAgICAgICAgfSAgIFxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlOyBcclxuICAgICB9XHJcblxyXG4gLyoqXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgKi9cclxuICBwdWJsaWMgZ2V0SVBBZGRyZXNzKCl7ICBcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcImh0dHA6Ly9hcGkuaXBpZnkub3JnLz9mb3JtYXQ9anNvblwiKSBcclxuICAgIC5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgY2F1Z2h0IGluIHNlcnZpY2UnKVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpcF9hZHJlc3MnLCAnMTI3LjAuMC4xJyk7XHJcbiAgICAgICAgLy9IYW5kbGUgdGhlIGVycm9yIGhlcmVcclxuXHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTsgICAgLy9SZXRocm93IGl0IGJhY2sgdG8gY29tcG9uZW50XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgXHJcbiAgfVxyXG4gLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBJcCBkZWwgY2xpZW50ZVxyXG4gICogQHJldHVybiBKc29uIGRhdGFcclxuICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICovXHJcbiAgcHVibGljIHNldElwQWRyZXNzKCl7XHJcbiAgICB0aGlzLmdldElQQWRkcmVzcygpLnN1YnNjcmliZSggKHJlc3A6IGFueSkgICA9PiB7XHJcbiAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lwX2FkcmVzcycsIHJlc3AuaXApO1xyXG4gICAgICAgICB0aGlzLmlwX2FkcmVzcyA9IHJlc3AuaXA7XHJcbiAgICB9KTsgIFxyXG4gIH0gXHJcbiAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgKi9cclxuICBwdWJsaWMgZ2V0SXBBZHJlc3MoKXtcclxuICAgIHRoaXMuaXBfYWRyZXNzID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXBfYWRyZXNzJyk7ICBcclxuICB9IFxyXG5cclxuICAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBJcCBkZWwgY2xpZW50ZVxyXG4gICogQHJldHVybiBKc29uIGRhdGFcclxuICAqIEBkaWEgMTktMDUtMjAyMlxyXG4gICovICBcclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlQXVkaXRvcmlhKHNubzpNU25vTG9nW10pe1xyXG4gICAgICBsZXQgYm9keT1bXTtcclxuICAgICAgc25vLmZvckVhY2goZT0+IHtib2R5LnB1c2goZS5kYXRhSW50ZWZhY2UoKSl9KTtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vc2VndXJpZGFkX2Rhby5waHA/YCxib2R5LFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtyZXR1cm4gcmVzO30pXHJcbiAgICAgICk7XHJcbiAgICB9ICBcclxuXHJcbiAvKiogIFxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRlcG9zaXRvcyAgKiBcclxuICAqIEBwYXJhbSBwcm9jZWRlIDogcHJvY2VkZSBkZWwgbW9kdWxvXHJcbiAgKiBAcGFyYW0gaWRBcnRpY3VsbyA6IGlkIGRlbCBhcnRpY3Vsb1xyXG4gICogQHBhcmFtIGlkVXN1YXJpbyA6IGlkIHVzdWFyaW8gcGVybWl0aWRvXHJcbiAgKiBAcmV0dXJucyBcclxuICAqIEBhdXRob3IgSmF2aWVyIFRvdmFyXHJcbiAgKiBAZGF0ZSAyMy0xMS0yMDIyXHJcbiAgKi8gICAgICBcclxuICBwdWJsaWMgZ2V0RGVwb3NpdFR5cGUocHJvY2VkZTpzdHJpbmcsaWRBcnRpY3VsbzpudW1iZXIsaWRVc3VhcmlvPzpudW1iZXIpe1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Npdi9jYXRhbG9nb19wYXJhbWV0cml6YWRvX2Rhby5waHA/Z2V0PSR7cHJvY2VkZX0maWQ9JHtpZEFydGljdWxvfSZpPSR7aWRVc3VhcmlvfWAsXHJcbiAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICByZXRyeSgzKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVRpcG9EZXBvc2l0b3MoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAgICAgICBcclxufVxyXG5cclxuICBcclxuaW50ZXJmYWNlIGZpbHRyb0N1ZW50YXNQcmVzdXB1ZXN0byB7XHJcbiAgdGlwbz86ICdFJyB8ICdSJyxcclxuICBlc3RhZG8/OiAnQycgfCAnUydcclxufVxyXG5cclxuXHJcbiJdfQ==
1955
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZXNwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovQXBwU2Vydi93d3cvc2lnZXNwdjMoZ2l0KS9zaWdlc3AtZXN0YWJsZS9zaWdlc3BfY29yZS9wcm9qZWN0cy9zaWdlc3Avc3JjLyIsInNvdXJjZXMiOlsibGliL3NpZ2VzcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBcUIsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFakYsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEs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QUUsR0FBRSxPQUFPLEdBQUcsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUVKOzs7Ozs7OztPQVFHO0lBQ0ssY0FBYyxDQUFDLE9BQWMsRUFBQyxVQUFpQixFQUFDLFNBQWlCO1FBQ3RFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRywrQ0FBK0MsT0FBTyxPQUFPLFVBQVUsTUFBTSxTQUFTLEVBQUUsRUFDbkksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNmLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2RDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Ozs7WUFuK0VBLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBdkVNLFVBQVU7WUFLVixTQUFTO1lBT1QsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1QcmVmaWpvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvTVByZWZpam8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNRW50ZXJwcmlzZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL0VudGVycHJpc2UubW9kZWwnO1xyXG5pbXBvcnQgeyBNUGVyc29uYWxOb21pbmEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NUGVyc29uYWxOb21pbmEubW9kZWwnO1xyXG5pbXBvcnQgeyBNSG9qYVRpZW1wbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Ib2phVGllbXBvLm1vZGVsJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNVXN1YXJpbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSVJlcXVlc3QgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9SZXF1ZXN0JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNUHJvdmVlZG9yIH0gZnJvbSAnLi9jb3JlL21vZGVscy9SUEMvcHJvdmVlZG9yZXMubW9kZWwnO1xyXG5pbXBvcnQgeyBtYXAsIGNhdGNoRXJyb3IsIHJldHJ5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNVXN1YXJpb1ByZWZpam8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy91c2VyUHJlZml4Lm1vZGVsJztcclxuaW1wb3J0IHsgSUNhdGFsb2dvLCBmaWx0ZXJEYXRhIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ2F0YWxvZ28nO1xyXG5pbXBvcnQgeyBDYXRhbG9nb0NvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY2F0YWxvZ28vY2F0YWxvZ28uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTUN1ZW50YVByZXN1cHVlc3RvIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvY3VlbnRhUHJlc3VwdWVzdG8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhSW5zdGl0dWNpb25hbCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU0NHL2N1ZW50YUluc3RpdHVjaW9uYWwubW9kZWwnO1xyXG5pbXBvcnQgeyBNTW9uZWRhLCBNTW9uZWRhQ29uZmlnIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvbW9uZWRhLm1vZGVsJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBNVW5pZGFkVHJpYnV0YXJpYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1RCL3VuaWRhZFRyaWJ1dGFyaWEubW9kZWwnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY29uZmlybS9jb25maXJtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1Db25maWd1cmFjaW9uU0NHIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TQ0cvY29uZmlndXJhY2lvblNDRy5tb2RlbCc7XHJcbmltcG9ydCB7IE1QbGFuVW5pY29DdWVudGEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9wbGFuVW5pY29DdWVudGEubW9kZWwnO1xyXG5pbXBvcnQgeyBJQ29uZXhpb24gfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9Vc3VhcmlvJztcclxuaW1wb3J0IHsgVGFibGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL3NoYXJlZC9jb21wb25lbnRzL3RhYmxlLXNlbGVjdC90YWJsZS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTUNvbmZpZ3VyYXRpb25TUEcgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9jb25maWd1cmF0aW9uU1BHLm1vZGVsJztcclxuaW1wb3J0IHsgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZSwgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3bywgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlLCBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91ciwgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZSwgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmUsIE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZUNvbXBsZXRlLCBNQWxsU3RydWN0dXJlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvZXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhLm1vZGVsJztcclxuaW1wb3J0IHsgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZSwgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3bywgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlLCBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91ciwgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZSwgSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmUgfSBmcm9tICcuL2NvcmUvaW50ZXJmYWNlcy9Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWEnO1xyXG5pbXBvcnQgeyBNQ2VudHJvQ29zdG8sIE1Vc3VhcmlvQ2VudHJvQ29zdG8gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9jZW50cm9Db3N0by5tb2RlbCc7XHJcbmltcG9ydCB7IE1GdWVudGVGaW5hbmNpYW1pZW50byB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2Z1ZW50ZUZpbmFuY2lhbWllbnRvLm1vZGVsJztcclxuaW1wb3J0IHsgTUN1ZW50YUVncmVzb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9leHBlbnNpdmVBY2NvdW50Lm1vZGVsJztcclxuaW1wb3J0IHsgQ2F0YWxvZ29Fc3RydWN0dXJhc0NvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY2F0YWxvZ28tZXN0cnVjdHVyYXMvY2F0YWxvZ28tZXN0cnVjdHVyYXMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVVwZGF0ZURpc3RyaWJ1dGlvbiwgSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ3VlbnRhRWdyZXNvcyc7XHJcbmltcG9ydCB7IENhdGFsb2dvRG9ibGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vc2hhcmVkL2NvbXBvbmVudHMvY2F0YWxvZ28tZG9ibGUtaW5wdXQvY2F0YWxvZ28tZG9ibGUtaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTVNpc3RlbWEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9zaXN0ZW1hJztcclxuaW1wb3J0IHsgSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zLCBJQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpbyc7XHJcbmltcG9ydCB7IE1Db21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcywgTUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1BHL2NvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW8ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ3VlbnRhSW5ncmVzb3MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDRy9JbmNvbWVBY2NvdW50JztcclxuaW1wb3J0IHsgTUluY29tZVN0cnVjdHVyZUFjY291bnQgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9pbmNvbWVTdHJ1Y3R1cmVBY2NvdW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTU9yZ2FuaXphdGlvblR5cGUgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NQRy9vcmdhbml6YXRpb25UeXBlLm1vZGVsJztcclxuaW1wb3J0IHsgTVNwZWNpYWx0eSB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3NwZWNpYWx0eS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Eb2N1bWVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2RvY3VtZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTUNsYXNpZmljYXRpb24gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1JQQy9jbGFzaWZpY2F0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTUNvdW50cnksIE1TdGF0ZSwgTU11bmljaXBhbGl0eSwgTVBhcmlzaCwgTUNpdHksIE1Db21tdW5pdHkgfSBmcm9tICcuL2NvcmUvbW9kZWxzL0NGRy9sb2NhdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBNUHJvdmlkZXJCZW5lZmljaWFyeSB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL3Byb3ZpZGVyQmVuZWZpY2lhcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBNU2lnZWNvZkJhbmssIE1CYW5rLCBNQmFua0FjY291bnRUeXBlLCBNQWdlbmNpYUJhbmNvLCBNQ3VlbnRhQmFuY28gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NDQi9iYW5rLm1vZGVsJztcclxuaW1wb3J0IHsgSVJlc3BvbnNlIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMvUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhdGlvblJQQyB9IGZyb20gJy4vY29yZS9tb2RlbHMvUlBDL2NvbmZpZ3VyYWNpb25SUEMubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uZmlnU09DIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TT0MvY29uZmlndXJhY2lvblNPQy5tb2RlbCc7XHJcbmltcG9ydCB7IE1EZWR1Y3Rpb25UeXBlIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TVEIvZGVkdWN0aW9uVHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1DYXJnbyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU09DL2NoYXJnZS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25jZXB0b1JldGVuY2lvbiwgTURlZHVjdGlvbiB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1RCL2RlZHVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IE1Db25maWdTU1MgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9zZWN1cml0eUNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBNQWRtaW5pc3RyYXRpdmVVbml0IH0gZnJvbSAnLi9jb3JlL21vZGVscy9TUEcvYWRtaW5pc3RyYXRpdmVVbml0Lm1vZGVsJztcclxuaW1wb3J0IHsgTUNvbXBvbmVudCB9IGZyb20gJy4vY29yZS9tb2RlbHMvU1NTL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IE1Mb2cgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NTUy9sb2cubW9kZWwnO1xyXG5pbXBvcnQgeyBNU2VydmljZUNoYXJnZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU09DL3NlcnZpY2VDaGFyZ2UubW9kZWwnO1xyXG5pbXBvcnQgeyBNRW1wcmVzYSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL0VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uY2VwdG9zQ1hQIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DWFAvTUNvbmNlcHRvc0NYUC5tb2RlbCc7XHJcbmltcG9ydCB7IE1UaXBvRG9jdW1lbnRvQ1hQIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DWFAvTVRpcG9Eb2N1bWVudG9DWFAubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29uZmlndXJhY2lvblNOTyB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Db25maWd1cmFjaW9uU05PLm1vZGVsJztcclxuaW1wb3J0IHsgTURlZmluaWNpb25Ob21pbmEgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NRGVmaW5pY2lvbk5vbWluYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1Bc2lnbmFjaW9uQ2FyZ28gfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NQXNpZ25hY2lvbkNhcmdvLm1vZGVsJztcclxuaW1wb3J0IHsgTU5vbWluYVNpbXBsZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvU05PL01Ob21pbmFTaW1wbGUubW9kZWwnO1xyXG5pbXBvcnQgeyBNUGVyc29uYWwgfSBmcm9tICcuL2NvcmUvbW9kZWxzL1NOTy9NUGVyc29uYWwubW9kZWwnO1xyXG5pbXBvcnQgeyBNRW50cmFkYVN1bWluaXN0cm9zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TSVYvTUVudHJhZGFTdW1pbmlzdHJvLm1vZGVsJztcclxuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInXHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7IFxyXG5pbXBvcnQgeyBNU25vTG9nIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TTk8vTUF1ZGl0b3JpYS5tb2RlbCc7XHJcbmltcG9ydCB7IE1UaXBvRGVwb3NpdG9zIH0gZnJvbSAnLi9jb3JlL21vZGVscy9TSVYvTVRpcG9EZXBvc2l0b3MubW9kZWwnO1xyXG5pbXBvcnQgeyBNQ29tdW5pZGFkIH0gZnJvbSAnLi9jb3JlL21vZGVscy9DRkcvY29tdW5pZGFkLm1vZGVsJztcclxuaW1wb3J0IHsgTUV4Y2hhbmdlUmF0ZSB9IGZyb20gJy4vY29yZS9tb2RlbHMvQ0ZHL1Rhc2FDYW1iaW8ubW9kZWwnO1xyXG5cclxuICBcclxuICBASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxuICB9KVxyXG4gIGV4cG9ydCBjbGFzcyBTaWdlc3BTZXJ2aWNlIHtcclxuXHJcbiAgICBwdWJsaWMgdXN1YXJpb0FjdGl2bzogTVVzdWFyaW8gPSBudWxsO1xyXG4gICAgcHVibGljIFVSTDogc3RyaW5nO1xyXG4gICAgcHVibGljIGN1cnJlbnRDb21wb25lbnQ6IE1Db21wb25lbnQgPSBudWxsO1xyXG4gICAgcHVibGljIHVzZXJNZW51ICA9IG51bGw7IFxyXG4gICAgcHVibGljIGlwX2FkcmVzcyA9ICcxMjcuMC4wLjEnO1xyXG4gICAgLy8gcHVibGljIFVSTDogc3RyaW5nID0gXCJodHRwOi8vMTkyLjE2OC4xLjY3L3NpZ2VzcF9waHBcIjtcclxuICAgIC8vIHVzdWFyaW9BY3Rpdm86IE1Vc3VhcmlvID0ge1xyXG4gICAgLy8gICBjb25leGlvbkRCOiB7XHJcbiAgICAvLyAgICAgYmFzZURlRGF0b3M6IFwiZGJfc2lnZXNwX2RlbW92M1wiLFxyXG4gICAgLy8gICAgIGdlc3RvcjogXCJwb3N0Z3Jlc1wiLFxyXG4gICAgLy8gICAgIGxvZ2luOiBcInBvc3RncmVzXCIsXHJcbiAgICAvLyAgICAgbm9tYnJlOiBcIlNJR0VTUCBDLkEsIHNlcnZpZG9yIDg1IChTRSBQVUVERSBVU0FSKVwiLFxyXG4gICAgLy8gICAgIHBhc3N3b3JkOiBcImFkbWluc2lnZXNwXCIsXHJcbiAgICAvLyAgICAgcHVlcnRvOiBcIjU0MzJcIixcclxuICAgIC8vICAgICBzZXJ2aWRvcjogXCIxOTIuMTY4LjEuNjdcIixcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgZW1wcmVzYToge1xyXG4gICAgLy8gICAgIGlkOiAxLFxyXG4gICAgLy8gICAgIHBlcmlvZG9GaXNjYWw6IFwiMjAxOS0wMS0wMVwiLFxyXG4gICAgLy8gICAgIHRpdHVsbzogXCJTSUdFU1AgQy5BLlwiXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIG5vbWJyZTogXCJTSUdFU1BcIixcclxuICAgIC8vICAgdG9rZW46IFwiZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6TTROQ0o5LmV5SndZWE56ZDI5eVpGOTFjM1VpT2lJeE1qTTBOVFkzT0NJc0ltbGtYMlZ0Y0hKbGMyRWlPaUl4SWl3aWRHbDBaVzF3SWpvaVUwbEhSVk5RSUVNdVFTNGlMQ0p3WlhKbWFYTmpZV3dpT2lJeU1ERTVMVEF4TFRBeElpd2liRjkxYzNWaGNtbHZJam9pVTBsSFJWTlFJaXdpYzJWeWRtbGtiM0lpT2lJeE9USXVNVFk0TGpFdU5qY2lMQ0p3ZFdWeWRHOGlPaUkxTkRNeUlpd2lZbUZ6WldSbFpHRjBiM01pT2lKa1lsOXphV2RsYzNCZlpHVnRiM1l6SWl3aWJHOW5hVzRpT2lKd2IzTjBaM0psY3lJc0luQmhjM04zYjNKa0lqb2lZV1J0YVc1emFXZGxjM0FpZlEuUElTQlNmdWVSQWRzV3NKMUFhR2NWQ2dXLTJhSmtndHZMZHNXMEJnbzVsdHlZb3dEOG95X25xSzVzakUyVVJHa1wiXHJcbiAgICAvLyB9XHJcbiAgICAvLyBwcm9jZWRlOiBzdHJpbmcgPSAnU0NHQ01QJztcclxuICAgIC8vIGNvZHNpczogc3RyaW5nID0gJ1NDRyc7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSB0b2FzdDogVG9hc3RyU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsaWRhIHF1ZSBzZWxvIHNlIGVzY3JpYmFuIGd1aW9uZXMgeSA5XHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ubHlHdWlvbmVzQW5kTmluZShldmVudDogYW55KSB7XHJcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICctJyB8fCBldmVudC5rZXkgPT09ICc5Jykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgZWwgbW9uY21wIGRlIHNpZ2VzcF9jb21wcm9iYW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQ29tcHJvYmFudGVBbW91bnQoYW1vdW50OiBudW1iZXIsIGlkQ29tcHJvYmFudGU6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5VUkx9L2Rhby9zaWdlc3AvY29tcHJvYmFudGVfZGFvLnBocD9tb250bz10cnVlYCwge1xyXG4gICAgICAgIG1vbmNtcDogYW1vdW50LFxyXG4gICAgICAgIGlkX2NvbXByb2JhbnRlOiBpZENvbXByb2JhbnRlXHJcbiAgICAgIH0sIHtcclxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKClcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIGVsIGNvbXByb2JhbnRlIHByc3VwdWVzdGFyaW8gZGUgRWdyZXNvc1xyXG4gICAgICogQHBhcmFtIGNvbXByb2JhbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvRWdyZXNvcyhjb21wcm9iYW50ZTogSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9FZ3Jlc29zKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55PihgJHt0aGlzLlVSTH0vZGFvL3NwZy9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19lZ3Jlc29zX2Rhby5waHBgLFxyXG4gICAgICB7IC4uLmNvbXByb2JhbnRlLCBpZDogY29tcHJvYmFudGUuaWRfZHRfc3BnY21wIH0sIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgY29tcHJvYmFudGUgcHJlc3VwdWVzdGFyaW8gZGUgRWdyZXNvc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MoKTogT2JzZXJ2YWJsZTxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3NbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9fZWdyZXNvc19kYW8ucGhwYCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0VncmVzb3MoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSBlbCBjb21wcm9iYW50ZSBwcnN1cHVlc3RhcmlvIGRlIEluZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gY29tcHJvYmFudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyhjb21wcm9iYW50ZTogSUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvcyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY29tcHJvYmFudGVfcHJlc3VwdWVzdGFyaW9fZWdyZXNvc19kYW8ucGhwYCxcclxuICAgICAgeyAuLi5jb21wcm9iYW50ZSwgaWQ6IGNvbXByb2JhbnRlLmlkX2R0X3NwaWNtcCB9LCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIGNvbXByb2JhbnRlIHByZXN1cHVlc3RhcmlvIGRlIEluZ3Jlc29zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb21wcm9iYW50ZVByZXN1cHVlc3RhcmlvSW5ncmVzb3MoKTogT2JzZXJ2YWJsZTxNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbXByb2JhbnRlUHJlc3VwdWVzdGFyaW9JbmdyZXNvc1tdPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jb21wcm9iYW50ZV9wcmVzdXB1ZXN0YXJpb19pbmdyZXNvc19kYW8ucGhwYCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKVxyXG4gICAgICB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ29tcHJvYmFudGVQcmVzdXB1ZXN0YXJpb0luZ3Jlc29zKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBBY3R1YWxpemEgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBjdWVudGEgZGUgZWdyZXNvXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25FeHBlbnNlQWNjb3VudChkaXN0cmlidXRpb246IElVcGRhdGVEaXN0cmlidXRpb24pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9jdWVudGFzX2VncmVzb3NfZGFvLnBocGAsIGRpc3RyaWJ1dGlvbixcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBJbmdyZXNvXHJcbiAgICAgKiBAcGFyYW0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVEaXN0cmlidXRpb25JbmNvbWVBY2NvdW50KGRpc3RyaWJ1dGlvbjogSVVwZGF0ZURpc3RyaWJ1dGlvbkluZ3Jlc29zKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NwaS9jdWVudGFzX2luZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNQ3VlbnRhSW5ncmVzb3MocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQEFjdHVhbGl6YSBsYSBkaXN0cmlidWNpw7NuIGRlIGxhIGN1ZW50YSBkZSBJbmdyZXNvIGRlIEVzdHJ1Y3R1cmFcclxuICAgICAqIEBwYXJhbSBkaXN0cmlidXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZURpc3RyaWJ1dGlvbkluY29tZVN0cnVjdHVyZUFjY291bnQoZGlzdHJpYnV0aW9uOiBJVXBkYXRlRGlzdHJpYnV0aW9uSW5ncmVzb3MsIGxldmVsOiBudW1iZXIpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3BpL2N1ZW50YV9lc3RydWN0dXJhX2luZ3Jlc29zX2Rhby5waHBgLCBkaXN0cmlidXRpb24sXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNSW5jb21lU3RydWN0dXJlQWNjb3VudChyZXMuZGF0YSwgbGV2ZWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgcG9yIG5pdmVsIGRlIGxhcyBjdWVuYXRzIGRlIGVncmVzb3NcclxuICAgICAqIEBwYXJhbSBsZXZlbCBOw7ptZXJvIGRlIG5pdmVsZXMgZGUgbGEgY29uZmlndXJhY2nDs25cclxuICAgICAqIEBwYXJhbSBpZCBpZCBkZWwgbml2ZWwgMyBvIDUgcXVlIHNlIHZhIGEgYnVzY2FyXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YUVncmVzb3NbXT5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEV4cGVuc2VBY2NvdW50c0ZvckxldmVsKGxldmVsOiBudW1iZXIsIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1DdWVudGFFZ3Jlc29zW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUN1ZW50YUVncmVzb3NbXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvY3VlbnRhc19lZ3Jlc29zX2Rhby5waHBcclxuICAgICAgP2xldmVsPSR7bGV2ZWx9JmlkPSR7aWR9YCwge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFFZ3Jlc29zKGVsZW1lbnQpKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgY2F0w6Fsb2dvIGRlIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzYXJpYVxyXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBDb25maWd1cmFjacOzbiBkZSBsYSBlc3RydWN0dXJhXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5DYXRhbG9nb0VzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYShkYXRhOiBhbnlbXSwgY29uZmlndXJhdGlvbjogTUNvbmZpZ3VyYXRpb25TUEcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBjb25zdCBjYXRhbG9nbyA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Fc3RydWN0dXJhc0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICBjb25maWd1cmF0aW9uXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGNhdGFsb2dvLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY3VlbnRhcyBkZSBlZ3Jlc29zXHJcbiAgICAgKiBAcGFyYW0gb25seUF2YWlsYWJsZVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DdWVudGFFZ3Jlc29zW10+XHJcbiAgICAgKi9cclxuICAgICBwdWJsaWMgZ2V0RXhwZW5zZUFjY291bnRzKG9ubHlBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8TUN1ZW50YUVncmVzb3NbXT57XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFFZ3Jlc29zW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2N1ZW50YXNfZWdyZXNvc19kYW8ucGhwJHtcclxuICAgICAgICBvbmx5QXZhaWxhYmxlID8gJz9hdmFpbGFibGU9dHJ1ZScgOiAnJ1xyXG4gICAgICB9YCwge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4gcmVzLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFFZ3Jlc29zKGVsZW1lbnQpKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgdG9kYXMgbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVldHNhcmlhcyBkZSBsYXMgNSB0YWJsYXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQWxsU3RydWN0dXJlPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFsbEJ1ZGdldFN0cnVjdHVyZSgpOiBQcm9taXNlPE1BbGxTdHJ1Y3R1cmU+IHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB0aGlzLmdldEJ1ZGdldFN0cnVjdHVyZU9uZSgpLnN1YnNjcmliZShzdHJ1Y3R1cmVPbmUgPT4ge1xyXG4gICAgICAgICAgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVUd29BbGwoKS5zdWJzY3JpYmUoc3RydWN0dXJlVHdvID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVUaHJlZSgpLnN1YnNjcmliZShzdHJ1Y3R1cmVUaHJlZSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVGb3VyKCkuc3Vic2NyaWJlKHN0cnVjdHVyZUZvdXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVGaXZlQnlJZEVwNCgpLnN1YnNjcmliZShzdHJ1Y3R1cmVGaXZlID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgTUFsbFN0cnVjdHVyZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlT25lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVR3byxcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVUaHJlZSxcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVGb3VyLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUZpdmVcclxuICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIGNvbXBsZXRhIGRlcGVuZGllbmRvIGRlIGxhIGNvbmZpZ3VyYWNpw7NuXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8YW55W10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QnVkZ2V0U3RydWN0dXJlQ29tcGxldGUoKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGRhdGEgPSBbXTtcclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRCdWRnZXRTdHJ1Y3R1cmVGaXZlKDUpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgZGF0YS5wdXNoKC4uLnJlc3VsdClcclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QnVkZ2V0U3RydWN0dXJlVGhyZWVDb21wbGV0ZSgzKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyAgIGRhdGEucHVzaCguLi5yZXN1bHQpXHJcbiAgICAgICAgLy8gfSlcclxuXHJcbiAgICAgICAgYXdhaXQgcmVzb2x2ZShkYXRhKTtcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDUgcXVlIHZhbiBhIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZUZpdmUoaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBFc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBhY3R1YWxpemFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlRml2ZShzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZUZpdmUoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNV9kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSB0b2RhIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgNVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZShsZXZlbDogbnVtYmVyID0gbnVsbCk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTVfZGFvLnBocD9jb21wbGV0ZT10cnVlYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlKGUsIGxldmVsKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDUgcG9yIGVsIElkIGRlIGxhIGVzdHJ1Y3R1cmEgNFxyXG4gICAgICogQHBhcmFtIGlkRXA0IGlkIGRlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgNFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRml2ZUJ5SWRFcDQoaWRFcDQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNV9kYW8ucGhwJHtpZEVwNCA/IGA/aWRfZXA0PSR7aWRFcDR9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmUoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDMgcXVlIHZhbmEgIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZUZvdXIoaWRTdHJ1Y3R1cmVzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCgnZGVsZXRlJywgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTRfZGFvLnBocGAsXHJcbiAgICAgIHsgYm9keTogaWRTdHJ1Y3R1cmVzLCBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWN0dWFsaXphIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyA0XHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlcyBFc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBhY3R1YWxpemFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQnVkZ2V0U3RydWN0dXJlRm91cihzdHJ1Y3R1cmVzOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cltdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTRfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZUZvdXIoc3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXJbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNF9kYW8ucGhwYCwgc3RydWN0dXJlcyxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDRcclxuICAgICAqIEBwYXJhbSBpZEVwMyBJZCBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYXByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlRm91cihpZEVwMz86IHN0cmluZyk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXJbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRm91cltdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhNF9kYW8ucGhwJHtpZEVwMyA/IGA/aWRfZXAzPSR7aWRFcDN9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZvdXIoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVsaW1pbmEgdW5hIG8gdmFyaWFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3Rhcmlhc1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDMgcXVlIHZhbmEgIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZVRocmVlKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgM1xyXG4gICAgICogQHBhcmFtIHN0cnVjdHVyZXMgRXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHF1ZSB2YW4gYSBzZXIgYWN0dWFsaXphZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZVRocmVlKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocGAsIHN0cnVjdHVyZXMsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFncmVnYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDNcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmVzIExhcyBlc3RydWN0dXJhcyBxdWUgdmFuIGEgc2VyIHJlZ2lzdHJhZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJ1ZGdldFN0cnVjdHVyZVRocmVlKHN0cnVjdHVyZXM6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEzX2Rhby5waHBgLCBzdHJ1Y3R1cmVzLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZSB0cmFlIGxhIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgY29tcGxldGEgaGFzdGEgZWwgbml2ZWwgM1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZVRocmVlQ29tcGxldGUobGV2ZWw6IG51bWJlcik6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYUZpdmVDb21wbGV0ZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFGaXZlQ29tcGxldGVbXT4oXHJcbiAgICAgICAgYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTNfZGFvLnBocD9jb21wbGV0ZT10cnVlYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhRml2ZUNvbXBsZXRlKGVsZW1lbnQsIGxldmVsKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIDNcclxuICAgICAqIEBwYXJhbSBpZEVwMiBJZCBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhIDJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYXByZXN1cHVlc3RhcmlhW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QnVkZ2V0U3RydWN0dXJlVGhyZWUoaWRFcDI/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUaHJlZVtdPihcclxuICAgICAgICBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhM19kYW8ucGhwJHtpZEVwMiA/IGA/aWRfZXAyPSR7aWRFcDJ9YCA6ICcnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnkpID0+IHJlc3AuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVRocmVlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbGltaW5hIHVuYSBvIHZhcmlhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgdW5vXHJcbiAgICAgKiBAcGFyYW0gaWRTdHJ1Y3R1cmVzIElkIGRlIGxhIG8gbGFzIGVzdHJ1Y3R1cmFzIHByZXN1cHVlc3RhcmlhcyBxdWUgdmFuIGEgc2VyIGVsaW1pbmFkYXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVsZXRlQnVkZ2V0U3RydWN0dXJlVHdvKGlkU3RydWN0dXJlczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoJ2RlbGV0ZScsIGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICB7IGJvZHk6IGlkU3RydWN0dXJlcywgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFjdHVhbGl6YSB1bmEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSBkb3NcclxuICAgICAqIEBwYXJhbSBzdHJ1Y3R1cmUgRXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYSB1bm8gcXVlIHNlIHZhIGEgYWN0dWFsaXphclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUJ1ZGdldFN0cnVjdHVyZVR3byhzdHJ1Y3R1cmU6IElFc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLCBzdHJ1Y3R1cmUsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdHJhIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0cmlhcyBkb3MgZW4gbGEgYmFzZSBkZSBkYXRvc1xyXG4gICAgICogQHBhcmFtIGJ1ZGdldFN0cnVjdHVyZXMgQXJyYXkgZGUgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWEgcXVlIHNlIHZhbiBhIHJlZ2lzdHJhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVUd28oYnVkZ2V0U3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICBidWRnZXRTdHJ1Y3R1cmVzLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVUd28oaWRFcDE6IHN0cmluZyk6IE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVR3b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZXN0cnVjdHVyYV9wcmVzdXB1ZXN0YXJpYTJfZGFvLnBocD9pZF9lcDE9JHtpZEVwMX1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvKGVsZW1lbnQpKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJ1ZGdldFN0cnVjdHVyZVR3b0FsbCgpOiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFUd29bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWEyX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhVHdvKGVsZW1lbnQpKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRWxpbWluYSB1bmEgbyB2YXJpYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWFzIHVub1xyXG4gICAgICogQHBhcmFtIGlkU3RydWN0dXJlcyBJZCBkZSBsYSBvIGxhcyBlc3RydWN0dXJhcyBwcmVzdXB1ZXN0YXJpYXMgcXVlIHZhbiBhIHNlciBlbGltaW5hZGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZUJ1ZGdldFN0cnVjdHVyZU9uZShpZFN0cnVjdHVyZXM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KCdkZWxldGUnLCBgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMV9kYW8ucGhwYCxcclxuICAgICAgeyBib2R5OiBpZFN0cnVjdHVyZXMsIGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBY3R1YWxpemEgdW5hIGVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgdW5vXHJcbiAgICAgKiBAcGFyYW0gc3RydWN0dXJlIEVzdHJ1Y3R1cmEgcHJlc3VwdWVzdGFyaWEgdW5vIHF1ZSBzZSB2YSBhIGFjdHVhbGl6YXJcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVCdWRnZXRTdHJ1Y3R1cmVPbmUoc3RydWN0dXJlOiBJRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhMV9kYW8ucGhwYCwgc3RydWN0dXJlLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RyYSBsYXMgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdHJpYXMgZW4gbGEgYmFzZSBkZSBkYXRvc1xyXG4gICAgICogQHBhcmFtIGJ1ZGdldFN0cnVjdHVyZXMgQXJyYXkgZGUgZXN0cnVjdHVyYXMgcHJlc3VwdWVzdGFyaWEgcXVlIHMgZXZhbiBhIHJlZ2lzdHJhclxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRCdWRnZXRTdHJ1Y3R1cmVPbmUoYnVkZ2V0U3RydWN0dXJlczogSUVzdHJ1Y3R1cmFQcmVzdXB1ZXN0YXJpYU9uZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWExX2Rhby5waHBgLFxyXG4gICAgICBidWRnZXRTdHJ1Y3R1cmVzLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgZXN0cnVjdHVyYSBwcmVzdXB1ZXN0YXJpYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCdWRnZXRTdHJ1Y3R1cmVPbmUoKTogT2JzZXJ2YWJsZTxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXN0cnVjdHVyYVByZXN1cHVlc3RhcmlhT25lW10+KGAke3RoaXMuVVJMfS9kYW8vc3BnL2VzdHJ1Y3R1cmFfcHJlc3VwdWVzdGFyaWExX2Rhby5waHBgLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Fc3RydWN0dXJhUHJlc3VwdWVzdGFyaWFPbmUoZWxlbWVudCkpKSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGNvbmZpZ3VyYWNpb25lcyBkZSBsYSBlc3RydWN0dXJhIHByZXN1cHVlc3RhcmlhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25TUEdbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uU1BHKCk6IE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25TUEc+IHtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Db25maWd1cmF0aW9uU1BHPihgJHt0aGlzLlVSTH0vZGFvL3NwZy9lc3RydWN0dXJhX3ByZXN1cHVlc3RhcmlhX2NvbmZpZ19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gbmV3IE1Db25maWd1cmF0aW9uU1BHKHJlc3AuZGF0YVswXSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYXRpb25SUENbXT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uUlBDKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29uZmlndXJhdGlvblJQQz4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2NvbmZpZ19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3Auc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXNwLmRhdGEgPSBuZXcgTUNvbmZpZ3VyYXRpb25SUEMocmVzcC5kYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIE1Db25maWd1cmFjaW9uU05PIGRlIGxhIG5vbWluYVxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db25maWd1cmFjaW9uU05PW10+XHJcbiAgICAgKiBAZGF0ZSAyNy0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgICBwdWJsaWMgZ2V0Q29uZmlndXJhdGlvblNOTygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9jb25maWd1cmFjaW9uX2Rhby5waHA/dGlwbz0keydjb25maWd1cmFjaW9uJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGlmKHJlc3AuZGF0YSAhPW51bGwpe1xyXG4gICAgICAgICAgICAgIHJlc3AuZGF0YSA9IHJlc3AuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmZpZ3VyYWNpb25TTk8oZSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlc3AuZGF0YT1bXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZGF0ZVRvU3RyaW5nKGRhdGU6IERhdGUpOiBzdHJpbmd7XHJcbiAgICAgIHJldHVybiBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7XHJcbiAgICAgICAgZGF0ZS5nZXRNb250aCgpICsgMSA+PSAxMCA/IGRhdGUuZ2V0TW9udGgoKSArIDEgOiBgMCR7ZGF0ZS5nZXRNb250aCgpICsgMX1gXHJcbiAgICAgIH0tJHtcclxuICAgICAgICBkYXRlLmdldERhdGUoKSA+PSAxMCA/IGRhdGUuZ2V0RGF0ZSgpIDogYDAke2RhdGUuZ2V0RGF0ZSgpfWBcclxuICAgICAgfWBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb25maWd1cmFjaW9uZXMgZGUgU2VndXJpZGFkXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ1NTUygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nzcy9zZWd1cmlkYWRfY29uZmlnX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlc3AuZGF0YSA9IG5ldyBNQ29uZmlnU1NTKHJlc3AuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNwXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29tcG9uZW50cyhzeXN0ZW1Db2RlOiBzdHJpbmcgPSBudWxsLCBwZXJtaXQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPElSZXNwb25zZT57XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3NzL2NvbXBvbmVudGVzX2Rhby5waHA/JHtzeXN0ZW1Db2RlID8gYGNvZHNpcz0ke3N5c3RlbUNvZGV9JHtcclxuICAgICAgICAgIHBlcm1pdCA/IGAmcGVybWl0PXRydWVgIDogJydcclxuICAgICAgICB9YCA6ICcnfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApLnBpcGUoXHJcbiAgXHJcbiAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbXBvbmVudChlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBmdWVudGVzIGRlIGZpbmFuY2lhbWllbnRvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUZ1ZW50ZUZpbmFuY2lhbWllbnRvW10+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RnVlbnRlRmluYW5jaWFtaWVudG8oKTogT2JzZXJ2YWJsZTxNRnVlbnRlRmluYW5jaWFtaWVudG9bXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRnVlbnRlRmluYW5jaWFtaWVudG9bXT4oYCR7dGhpcy5VUkx9L2Rhby9zcGcvZnVlbnRlX2ZpbmFuY2lhbWllbnRvX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1GdWVudGVGaW5hbmNpYW1pZW50byhlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgY2VudHJvcyBkZSBjb3N0b1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1DZW50cm9Db3N0b1tdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqIG1vZGlmaWNhZG8gOS0xMS0yMDIyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDZW50cm9Db3N0byh0aXBvOnN0cmluZyk6IE9ic2VydmFibGU8TUNlbnRyb0Nvc3RvW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jZW50cm9fY29zdG9fZGFvLnBocD9jb2RpZ289JHt0aXBvfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNlbnRyb0Nvc3RvKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjZW50cm9zIGRlIGNvc3RvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvc3RDZW50ZXJzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvY2VudHJvX2Nvc3RvX2Rhby5waHBgLCBcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ2VudHJvQ29zdG8oZWxlbWVudCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VXNlckNvc3RDZW50ZXJzKGNvZGlnbzpzdHJpbmcpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc2NnL2NvbnRyb2xfbnVtZXJvX3VzdWFyaW9fZGFvLnBocD9jb2RpZ289JHtjb2RpZ299YCwgXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZWxlbWVudCA9PiBuZXcgTVVzdWFyaW9DZW50cm9Db3N0byhlbGVtZW50KSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBjaGVja2tzXHJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBDb2x1bW5hcyBxdWUgdmEgYSB0ZW5lciBsYSB0YWJsYVxyXG4gICAgICogQHBhcmFtIHRpdGxlIFTDrXR1bG8gZGUgbGEgbW9kYWxcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHMgZXZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbkRpYWxvZ011bHRpU2VsZWN0KFxyXG4gICAgICAvLyBjb2x1bW5zOiBzdHJpbmdbXSwgXHJcbiAgICAgIC8vIHRpdGxlOiBzdHJpbmcsIFxyXG4gICAgICAvLyBkYXRhU291cmNlOiBhbnlbXSxcclxuICAgICAgLy8gY29sdW1uTmFtZXM/OiBzdHJpbmdbXVxyXG4gICAgICBjb2x1bW5zOiBzdHJpbmdbXSwgXHJcbiAgICAgIHRpdGxlOiBzdHJpbmcsIFxyXG4gICAgICBkYXRhU291cmNlOiBhbnlbXSwgXHJcbiAgICAgIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSA9IG51bGwsIFxyXG4gICAgICB3aWR0aDogc3RyaW5nID0gJzQ1MHB4JyxcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgIGhhc0JhY2tkcm9wPzogYm9vbGVhbixcclxuICAgICAgICBkaXNhYmxlQ2xvc2U/OiBib29sZWFuLFxyXG4gICAgICAgLy8gZGlzYWJsZU1hc3RlclRvZ2dsZT86IGJvb2xlYW5cclxuICAgICAgfSA9IHtcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLCBcclxuICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsIFxyXG4gICAgICAvLyAgZGlzYWJsZU1hc3RlclRvZ2dsZTogZmFsc2VcclxuICAgICAgfVxyXG4gICAgKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihUYWJsZVNlbGVjdENvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBkYXRhU291cmNlLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXMsXHJcbiAgICAgICAgIC8vIGRpc2FibGVNYXN0ZXJUb2dnbGU6IG9wdGlvbnMuZGlzYWJsZU1hc3RlclRvZ2dsZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiBvcHRpb25zLmhhc0JhY2tkcm9wLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZTogb3B0aW9ucy5kaXNhYmxlQ2xvc2VcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNUGxhblVuaWNvQ3VlbnRhPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dQbGFuVW5pY29DdWVudGFzKCk6IFByb21pc2U8TVBsYW5Vbmljb0N1ZW50YT4ge1xyXG4gICAgICBsZXQgcGxhbmVzOiBNUGxhblVuaWNvQ3VlbnRhW10gPSBhd2FpdCB0aGlzLmdldExpc3RhZG9QTGFuVW5pY29DdWVudGFzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydjdWVudGEnLCAnZGVub21pbmFjaW9uJ10sXHJcbiAgICAgICAgICBjb2x1bW5OYW1lczogWydjdWVudGEnLCAnZGVub21pbmFjacOzbiddLFxyXG4gICAgICAgICAgdGl0bGU6ICdDYXTDoWxvZ28gZGUgUGxhbiBkZSBDdWVudGFzIEfDqW5lcmFsJyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IHBsYW5lc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBsaXN0YWRvIGRlbCBwbGFuIMO6bmljbyBkZSBjdWVudGFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TXBsYW5Vbmljb0N1ZW50YVtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldExpc3RhZG9QTGFuVW5pY29DdWVudGFzKCk6IE9ic2VydmFibGU8TVBsYW5Vbmljb0N1ZW50YVtdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1QbGFuVW5pY29DdWVudGFbXT4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvcGxhbl91bmljb19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNUGxhblVuaWNvQ3VlbnRhKGVsZW1lbnQpKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgY29uZmlndXJhY2nDs24gZGUgU0NHXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUNvbmZpZ3VyYWNpb25TQ0dbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKiBAbW9kaWZpdCAyNS0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb25maWd1cmF0aW9uU0NHKCk6IE9ic2VydmFibGU8TUNvbmZpZ3VyYWNpb25TQ0dbXT4geyAgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ29uZmlndXJhY2lvblNDR1tdPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jb25maWd1cmFjaW9uX2NvbnRhYmlsaWRhZF9kYW8ucGhwYCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX1cclxuICAgICAgKS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Db25maWd1cmFjaW9uU0NHKGVsZW1lbnQpKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgdW4gZGlhbG9nIGRlIGNvbmZpcm1hY2nDs25cclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlIGxhIG1vZGFsIGRlIGNvbmZpcm1cclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIE1lbnNhamUgKG9wY2lvbmFsKSBwYXJhIGVsIHVzdXNhcmlvXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8Ym9vbGVhbj5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcGVuRGlhbG9nQ29uZmlybSh0aXRsZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICBtZXNzYWdlOiAobWVzc2FnZSkgPyBtZXNzYWdlIDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmllcnRlIGVsIGNvbnRlbmlkbyBkZSB1biBBYnN0cmFjdENvbnRyb2wgZW4gbWF5w7pzY3VsYSAoVXNhciBlbiBldmVudG8ga2V5dXApXHJcbiAgICAgKiBAcGFyYW0gZm9ybUdyb3VwIEZvcm11bGFyaW8gZMOzbmRlIHNlIHZhIGEgYnVzY2FyIGVsIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQHBhcmFtIG5hbWUgTm9tYnJlIGRlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoYW5nZVRvVXBwZXJDYXNlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgdGhpcy5nZXRBYnN0cmFjdENvbnRyb2woZm9ybUdyb3VwLCBuYW1lKS5zZXRWYWx1ZSh0aGlzLmdldEFic3RyYWN0Q29udHJvbChmb3JtR3JvdXAsIG5hbWUpLnZhbHVlLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgZWwgQWJzdHJhY3RDb250cm9sIGRlIHVuIGZvcm11bGFyaW9cclxuICAgICAqIEBwYXJhbSBmb3JtR3JvdXAgRm9ybXVsYXJpbyBkb25kZSBzZSB2YSBhIGJ1c2NhciBlbCBBYnN0cmFjdENvbnRyb2xcclxuICAgICAqIEBwYXJhbSBuYW1lIE5vbWJyZSBkZWwgQWJzdHJhY3RDb250cm9sXHJcbiAgICAgKiBAcmV0dXJuIEFic3RyYWN0Q29udHJvbFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFic3RyYWN0Q29udHJvbChmb3JtR3JvdXA6IEZvcm1Hcm91cCwgbmFtZTogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgcmV0dXJuIGZvcm1Hcm91cC5nZXQobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUHJldmllbmUgcXVlIHNlIGVzY3JpYmFuIGxldHJhcyBlbiBlbCBpbnB1dCAoVXNhciBlbiBrZXlwcmVzcylcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqIEBtb2RpZmljYWRvIGNvbW8gb25seU51bWVybyBwYXJhIGNvcnJlZ2lyIGNvZGlnbywgdXNhciBjdXJyZW5jeS1pbnB1dCBzaSBxdWllcmUgdXNhciBkZWNpbWFsZXMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbmx5RGVjaW1hbChldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghaXNOYU4oK2V2ZW50LmtleSkgJiYgZXZlbnQua2V5Q29kZSAhPSAzMikge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTsgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQcmV2aWVuZSBxdWUgc2UgZXNjcmliYW4gbGV0cmFzIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25seU51bWJlcnMoZXZlbnQ/OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coZXZlbnQpO1xyXG4gICAgICBpZiAoIWlzTmFOKCtldmVudC5rZXkpICYmIGV2ZW50LmtleUNvZGUgIT0gMzIpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFBlcm1pdGUgKGEteiBBLVogw6Etw7ogw7HDkSDDvMOcICcsLikgcXVlIHNlIGVzY3JpYmFuIG51bWVyb3MgZW4gZWwgaW5wdXQgKFVzYXIgZW4ga2V5cHJlc3MpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRlbCB0ZWNsYWRvXHJcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW5cclxuICAgICAqIEBkYXRlIDE0LTA1LTIwMjJcclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyB0eXBlTmFtZShldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgJiYgZXZlbnQua2V5PD0neicpICB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpIHx8ICBldmVudC5rZXk9PVwiw7FcIiB8fCAgZXZlbnQua2V5PT1cIsORXCIgXHJcbiAgICAgICAgICB8fCAoZXZlbnQua2V5Pj0nw6EnICYmIGV2ZW50LmtleTw9J8O6JykgfHwgZXZlbnQua2V5Pj0nw7wnICB8fCBldmVudC5rZXk+PSfDnCcgIHx8IGV2ZW50LmtleT09XCInXCIgIHx8IGV2ZW50LmtleUNvZGU9PTMyIFxyXG4gICAgICAgICAgfHwgIGV2ZW50LmtleT09XCIuXCIgfHwgIGV2ZW50LmtleT09XCIsXCIgICl7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlICgwLTkgYS16IEEtWiDDoS3DuiDDscORIMO8w5wgJywuLV8vOigpJSPCuiYk4oKswqPCpSkgcXVlIHNlIGVzY3JpYmFuICBlbiBlbCBpbnB1dCAoVXNhciBlbiBrZXlwcmVzcylcclxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHRlY2xhZG9cclxuICAgICAqIEByZXR1cm4gYm9vbGVhblxyXG4gICAgICogQGRhdGUgMTQtMDUtMjAyMlxyXG4gICAgICogXHJcbiAgICAgKi9cclxuICAgICAgcHVibGljIHR5cGVUZXh0KGV2ZW50PzogYW55KTogYm9vbGVhbiB7ICAgICAgXHJcbiAgICAgICAgaWYgKChldmVudC5rZXk+PSdhJyAgJiYgZXZlbnQua2V5PD0neicpIHx8IChldmVudC5rZXk+PSdBJyAmJiBldmVudC5rZXk8PSdaJykgfHwgZXZlbnQua2V5PT1cIsOxXCIgfHwgZXZlbnQua2V5PT1cIsORXCIgXHJcbiAgICAgICAgICB8fCAoZXZlbnQua2V5Pj0nw6EnICYmIGV2ZW50LmtleTw9J8O6JykgfHwgZXZlbnQua2V5PT0nw7wnIHx8IGV2ZW50LmtleT09J8OcJyB8fCBldmVudC5rZXk9PVwiJ1wiIHx8IGlzTmFOKCtldmVudC5rZXkpIFxyXG4gICAgICAgICAgfHwgZXZlbnQua2V5PT1cIi5cIiAgfHwgIGV2ZW50LmtleT09XCIsXCIgfHwgZXZlbnQua2V5PT1cIiZcIiB8fCAgZXZlbnQua2V5PT1cIl9cInx8IGV2ZW50LmtleT09XCItXCIgfHwgZXZlbnQua2V5PT1cIiNcIlxyXG4gICAgICAgICAgfHwgZXZlbnQua2V5PT1cIsK6XCIgIHx8ICBldmVudC5rZXk9PVwiJFwiIHx8IGV2ZW50LmtleT09XCIoXCIgfHwgZXZlbnQua2V5PT1cIilcIiB8fCBldmVudC5rZXk9PVwiJVwiIHx8IGV2ZW50LmtleT09JyAnXHJcbiAgICAgICAgICB8fCBldmVudC5rZXk9PSc6JyAgfHxldmVudC5rZXk9PScvJ3x8IGV2ZW50LmtleUNvZGU9PTgzNjQgfHwgIGV2ZW50LmtleUNvZGU9PTE2NSB8fGV2ZW50LmtleUNvZGU9PTE2Myl7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFBlcm1pdGUgKDAtOSBhLXogQS1aIMOxw5EgLi1fKSBxdWUgc2UgZXNjcmliYW4gIGVuIGVsIGlucHV0IChVc2FyIGVuIGtleXByZXNzKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgdGVjbGFkb1xyXG4gICAgICogQHJldHVybiBib29sZWFuXHJcbiAgICAgKiBAZGF0ZSAxNC0wNS0yMDIyXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyB0eXBlQ29kZShldmVudD86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICgoZXZlbnQua2V5Pj0nYScgICYmIGV2ZW50LmtleTw9J3onKSB8fCAoZXZlbnQua2V5Pj0nQScgJiYgZXZlbnQua2V5PD0nWicpICB8fCBldmVudC5rZXk9PVwiw7FcIiB8fCBldmVudC5rZXk9PVwiw5FcIiBcclxuICAgICAgICAgIHx8aXNOYU4oK2V2ZW50LmtleSkgfHwgZXZlbnQua2V5PT1cIi5cIiB8fCAgZXZlbnQua2V5PT1cIl9cIiB8fCBldmVudC5rZXk9PVwiLVwiKXtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBmYWxzZTsgICAgICBcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgZGlhbG9nIGRlIGxhcyBjb211bmlkYWRlc1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1Db211bmlkYWQ+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlbkRpYWxvZ1VuaWRhZGVzVHJpYnV0YXJpYXMoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgbGV0IHVkVHJpYnV0YXJpYXM6IE1VbmlkYWRUcmlidXRhcmlhW10gPSBhd2FpdCB0aGlzLmdldFVuaWRhZGVzVHJpYnV0YXJpYXMoKS50b1Byb21pc2UoKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ2HDsW8nLCAnbnJvX2RlY3JldG8nLCAnZmVjaGFfZGVjcmV0bycsICdlbnRyYWRhX3ZpZGVuY2lhJywgJ3B1YmxpY2FjaW9uX2dhY2V0YScsICducm9fZ2FjZXRhJywgJ3ZhbG9ydXQnXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIFVuaWRhZGVzIFRyaWJ1dGFyaWFzJyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IHVkVHJpYnV0YXJpYXNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIHVuaWRhZGVzIHRyaWJ1dGFyaWFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFVuaWRhZGVzVHJpYnV0YXJpYXMoKTogT2JzZXJ2YWJsZTxNVW5pZGFkVHJpYnV0YXJpYVtdPiB7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IElSZXF1ZXN0ID0ge1xyXG4gICAgICAgIG9wZXJhY2lvbjogJ29idGVuZXJEYXRhJyxcclxuICAgICAgICBzaWdlc3BfY29uZXhpb246IHtcclxuICAgICAgICAgIHNlcnZpZG9yOiB0aGlzLlVSTCxcclxuICAgICAgICAgIHVzdWFyaW86IHRoaXMudXN1YXJpb0FjdGl2by5nZXRJbnRlcmZhY2UoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TVVuaWRhZFRyaWJ1dGFyaWFbXT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvdW5kdHJpYnV0YXJpYV9kYW8ucGhwYCwgcmVxdWVzdCkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueVtdKSA9PiByZXNwLm1hcChlbGVtZW50ID0+IG5ldyBNVW5pZGFkVHJpYnV0YXJpYShlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSB1bmEgbW9kYWwgZ8OpbmVyaWNhXHJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBDb2x1bW5hcyBxdWUgdmEgYSB0ZW5lciBsYSB0YWJsYVxyXG4gICAgICogQHBhcmFtIHRpdGxlIFTDrXR1bG8gZGVsIGRpYWxvZ1xyXG4gICAgICogQHBhcmFtIGRhdGFTb3VyY2UgRGF0YSBxdWUgc2UgdmEgYSBtb3N0cmFyIGVuIGxhIHRhYmxhXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8YW55PlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICBjb2x1bW5zOiBzdHJpbmdbXSwgXHJcbiAgICAgIHRpdGxlOiBzdHJpbmcsIFxyXG4gICAgICBkYXRhU291cmNlOiBhbnlbXSwgXHJcbiAgICAgIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSA9IG51bGwsIFxyXG4gICAgICB3aWR0aDogc3RyaW5nID0gJzQ1MHB4JyxcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgIGhhc0JhY2tkcm9wPzogYm9vbGVhbixcclxuICAgICAgICBkaXNhYmxlQ2xvc2U/OiBib29sZWFuXHJcbiAgICAgIH0gPSB7ZGlzYWJsZUNsb3NlOiBmYWxzZSwgaGFzQmFja2Ryb3A6IGZhbHNlfVxyXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2F0YWxvZ29Db21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IG9wdGlvbnMuaGFzQmFja2Ryb3AgPyBvcHRpb25zLmhhc0JhY2tkcm9wIDogZmFsc2UsXHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBvcHRpb25zLmRpc2FibGVDbG9zZSA/IG9wdGlvbnMuZGlzYWJsZUNsb3NlIDogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSB1bmEgbW9kYWwgZ8OpbmVyaWNhIGNvbiAyIGlucHV0c1xyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgQ29sdW1uYXMgcXVlIHZhIGEgdGVuZXIgbGEgdGFibGFcclxuICAgICAqIEBwYXJhbSB0aXRsZSBUw610dWxvIGRlbCBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIERhdGEgcXVlIHNlIHZhIGEgbW9zdHJhciBlbiBsYSB0YWJsYVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPGFueT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29Eb3NJbnB1dHMoXHJcbiAgICAgIGNvbHVtbnM6IHN0cmluZ1tdLFxyXG4gICAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgICAgZGF0YVNvdXJjZTogYW55W10sIFxyXG4gICAgICBmaWx0ZXJEYXRhOiBmaWx0ZXJEYXRhW10sXHJcbiAgICAgIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSA9IG51bGwsXHJcbiAgICAgIHdpZHRoOiBzdHJpbmcgPSBcIjQ1MHB4XCJcclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvRG9ibGVJbnB1dENvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGRhdGFTb3VyY2UsXHJcbiAgICAgICAgICBjb2x1bW5OYW1lcyxcclxuICAgICAgICAgIGZpbHRlckRhdGFcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY29tdW5pZGFkZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNQ29tdW5pZGFkPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dDb211bmlkYWQoKTogUHJvbWlzZTxNQ29tdW5pZGFkPiB7XHJcbiAgICAgIGxldCBjb211bmlkYWRlczogTUNvbXVuaWRhZFtdID0gYXdhaXQgdGhpcy5nZXRDb211bmlkYWRlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsncHJlZmlqbycsICdwYWlzJywgJ2VzdGFkbycsICdtdW5pY2lwaW8nLCAncGFycm9xdWlhJywgJ2NvZGlnbycsICdjb211bmlkYWQnXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIENvbXVuaWRhZGVzJyxcclxuICAgICAgICAgIGRhdGFTb3VyY2U6IGNvbXVuaWRhZGVzXHJcbiAgICAgICAgfSBhcyBJQ2F0YWxvZ28sXHJcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTB2aCdcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjb211bmlkYWRlc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1Db211bmlkYWRbXT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb211bmlkYWRlcygpOiBPYnNlcnZhYmxlPE1Db211bmlkYWRbXT4ge1xyXG4gICAgICBjb25zdCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1Db211bmlkYWRbXT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY29tdW5pZGFkZXNfZGFvLnBocGAsIHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXNwOiBhbnlbXSkgPT4gcmVzcC5tYXAoZWxlbWVudCA9PiBuZXcgTUNvbXVuaWRhZChlbGVtZW50KSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBkaWFsb2cgZGUgbGFzIGxhcyBtb25lZGFzXHJcbiAgICAgKiBAcmV0dXJuIFByb21pc2U8TU1vbmVkYT5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nTW9uZWRhcygpOiBQcm9taXNlPE1Nb25lZGE+IHtcclxuICAgICAgbGV0IGNvaW5zOiBNTW9uZWRhW10gPSBhd2FpdCB0aGlzLmdldE1vbmVkYXMoJ3RvZGFzJykudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWydjb2RpZ28nLCAnZGVub21pbmFjaW9uJywgJ2lzbycsICdzaW1ib2xvJ10sXHJcbiAgICAgICAgICB0aXRsZTogJ0NhdMOhbG9nbyBkZSBNb25lZGFzJyxcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2PDs2RpZ28nLCAnZGVub21pbmFjacOzbicsICdpc28nLCAnc2ltYm9sbyddLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogY29pbnNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgbW9uZWRhc1xyXG4gICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNTW9uZWRhW10+XHJcbiAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgKiBhY3R1YWxpemFkbyA0LTEyLTIwMjJcclxuICAgKiBAcGFyYW0gdGlwbyA6c3RyaW5nIHsndG9kYXMnLCd1bm8nLCdhY3R1YWx9XHJcbiAgICogQHBhcmFtIGlkIDogbnVtYmVyXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovIFxyXG4gICAgXHJcbiAgICBcclxuICAgIHB1YmxpYyBnZXRNb25lZGFzKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpOiBPYnNlcnZhYmxlPE1Nb25lZGFbXT4geyAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1Nb25lZGFbXT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvbW9uZWRhX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1Nb25lZGEoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBEZXNjcmlwdGlvbjogT2J0aWVuZSBsYSB0YXNhIGRlIGNhbWJpb1xyXG4gICAgICogQHBhcmFtIHRpcG8gc3RyaW5nXHJcbiAgICAgKiBAcGFyYW0gaWQgY29kaWdvIG1vbmVkYVxyXG4gICAgICogQHJldHVybnMgYXJyYXkvbnVsbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVuY3lFeGNoYW5nZVJhdGUodGlwbzogJ2FsbCd8ICdtb25lZGEnPSBudWxsLCBpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxNRXhjaGFuZ2VSYXRlW10+IHsgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNRXhjaGFuZ2VSYXRlW10+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3NpZ2VzcF90YXNhX2NhbWJpb19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlc3A6IGFueSkgPT4gcmVzcC5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNRXhjaGFuZ2VSYXRlKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNY3VlbnRhSW5zdGl0dWNpb25hbD5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc0luc3RpdHVjaW9uYWxlcygpOiBQcm9taXNlPE1DdWVudGFJbnN0aXR1Y2lvbmFsPiB7XHJcbiAgICAgIGxldCBhY2NvdW50czogTUN1ZW50YUluc3RpdHVjaW9uYWxbXSA9IGF3YWl0IHRoaXMuZ2V0Q3VlbnRhc0luc3RpdHVjaW9uYWxlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbnM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2lvbiddLFxyXG4gICAgICAgICAgY29sdW1uTmFtZXM6IFsnY3VlbnRhJywgJ2Rlbm9taW5hY2nDs24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIHBsYW4gZGUgY3VlbnRhIGluc3RpdHVjaW9uYWwnLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgY29udGFibGVzIChDdWVudGFzIEluc3RpdHVjaW9uYWxlcylcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNJbnN0aXR1Y2lvbmFsZXMoaW52ZW50b3J5PzogYm9vbGVhbik6IE9ic2VydmFibGU8TUN1ZW50YUluc3RpdHVjaW9uYWxbXT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ3VlbnRhSW5zdGl0dWNpb25hbFtdPihgJHt0aGlzLlVSTH0vZGFvL3NjZy9jdWVudGFzX2Rhby5waHAkeyhpbnZlbnRvcnkpID8gJz9pbnZlbnRvcnk9dHJ1ZScgOiAnJ31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzcDogYW55KSA9PiByZXNwLmRhdGEubWFwKGVsZW1lbnQgPT4gbmV3IE1DdWVudGFJbnN0aXR1Y2lvbmFsKGVsZW1lbnQpKSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBkZSBsYXMgY3VlbnRhcyBkZSBwcmVzdXB1ZXN0byAoUmVjdXJzb3MgeSBFZ3Jlc29zKVxyXG4gICAgICogQHJldHVybiBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuRGlhbG9nQ3VlbnRhc1ByZXN1cHVlc3RvKCk6IFByb21pc2U8TUN1ZW50YVByZXN1cHVlc3RvPiB7XHJcbiAgICAgIGxldCBhY2NvdW50czogTUN1ZW50YVByZXN1cHVlc3RvW10gPSBhd2FpdCB0aGlzLmdldEN1ZW50YXNQcmVzdXB1ZXN0bygpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDYXRhbG9nb0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGNvbHVtbk5hbWVzOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpw7NuJ10sXHJcbiAgICAgICAgICBjb2x1bW5zOiBbJ2N1ZW50YScsICdkZW5vbWluYWNpb24nXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIEN1ZW50YXMgZGUgUHJlc3VwdWVzdG8nLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZTogYWNjb3VudHNcclxuICAgICAgICB9IGFzIElDYXRhbG9nbyxcclxuICAgICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIGN1ZW50YXMgZGUgcmVjdXJzb3MgeSBlZ3Jlc29zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TUN1ZW50YVByZXN1cHVlc3RvPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1ZW50YXNQcmVzdXB1ZXN0bygpOiBPYnNlcnZhYmxlPE1DdWVudGFQcmVzdXB1ZXN0b1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DdWVudGFQcmVzdXB1ZXN0bz4oYCR7dGhpcy5VUkx9L2Rhby9zY2cvcGxhbl91bmljb19jdWVudGFzX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhUHJlc3VwdWVzdG8oZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFicmUgZWwgY8OhdGFsb2dvIGRlIGN1ZW50YXMgZGUgbGEgdGFibGEgXCJzY2dfcGxhbl91bmljb19yZVwiXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPE1DdWVudGFQcmVzdXB1ZXN0bz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIGZpbHRybzogSW5kaWNhIGJham8gcXVlIHBhcmFtZXRyb3Mgc2UgdmEgYSBmaWx0cmFyIGVsIGNhdGFsb2dvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzUHJlc3VzcHVlc3RvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgZmlsdHJvOiBmaWx0cm9DdWVudGFzUHJlc3VwdWVzdG8gPSBudWxsLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gJzc1MHB4J1xyXG4gICAgKTogUHJvbWlzZTxNQ3VlbnRhUHJlc3VwdWVzdG8+IHtcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFQcmVzdXB1ZXN0b1tdID0gW107XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmdldEN1ZW50YXNQcmVzdXB1ZXN0bygpLnRvUHJvbWlzZSgpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIGN1ZW50YXMgPSByZXM7XHJcbiAgICAgICAgaWYgKGZpbHRybykge1xyXG4gICAgICAgICAgaWYgKGZpbHRyby5lc3RhZG8pIHtcclxuICAgICAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjLnN0YXR1cyA9PSBmaWx0cm8uZXN0YWRvXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZmlsdHJvLnRpcG8pIHtcclxuICAgICAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMuZmlsdGVyKGMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjLnRpcG8gPT0gZmlsdHJvLnRpcG9cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY3VlbnRhcyA9IGN1ZW50YXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgZVsncHJvdlN0YXR1cyddID0gZS5zdGF0dXMgPT0gXCJDXCIgPyBcIk1vdmltaWVudG9zXCIgOiBcIlRvdGFsaXphZG9yYVwiXHJcbiAgICAgICAgICBlWydwcm92VHlwZSddID0gZS5zdGF0dXMgPT0gXCJSXCIgPyBcIlJlY3Vyc29zXCIgOiBcIkluZ3Jlc29zXCJcclxuICAgICAgICAgIHJldHVybiBlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIixcInByb3ZUeXBlXCJdLFxyXG4gICAgICAgIHRpdHVsbyxcclxuICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgIFtcIkN1ZW50YVwiLFwiRGVub21pbmFjacOzblwiLFwiRXN0YWRvXCIsXCJUaXBvXCJdLFxyXG4gICAgICAgIGFuY2hvXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGPDoXRhbG9nbyBkZSBjdWVudGFzIGRlIGxhIHRhYmxhIFwic3BnX2N1ZW50YXNcIlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxNQ3VlbnRhRWdyZXNvcz5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAcGFyYW1zIHByZXN1cHVlc3RvOiBJbmRpY2Egc2kgc2UgYSB0cmFiYWphciBjb24gZXN0cnVjdHVyYSBkZSBwcmVzdXB1ZXN0byBvIG5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBvcGVuQ2F0YWxvZ29DdWVudGFzRWdyZXNvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgcHJlc3VwdWVzdG86IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gXCI3NTBweFwiXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFFZ3Jlc29zPntcclxuICAgICAgbGV0IGN1ZW50YXM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRFeHBlbnNlQWNjb3VudHMoKS50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgY3VlbnRhcyA9IHJlc1xyXG4gICAgICAgIGN1ZW50YXMgPSBjdWVudGFzLmZpbHRlcihlID0+IHtcclxuICAgICAgICAgIHJldHVybiBlLnN0YXR1cyA9PSBcIkNcIlxyXG4gICAgICAgIH0pLm1hcChlID0+IHtcclxuICAgICAgICAgIGVbJ3Byb3ZTdGF0dXMnXSA9IGUuc3RhdHVzID09IFwiQ1wiID8gXCJNb3ZpbWllbnRvc1wiIDogXCJUb3RhbGl6YWRvcmFcIlxyXG4gICAgICAgICAgcmV0dXJuIGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgaWYgKHByZXN1cHVlc3RvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvRG9zSW5wdXRzKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcImVzdHJ1Y3R1cmFcIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBjdWVudGFzLFxyXG4gICAgICAgICAgW3tcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiQ3VlbnRhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImN1ZW50YVwiXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkVzdHJ1Y3R1cmFcIixcclxuICAgICAgICAgICAgcHJvcGVydHk6IFwiZXN0cnVjdHVyYVwiXHJcbiAgICAgICAgICB9XSxcclxuICAgICAgICAgIFtcIkN1ZW50YVwiLCBcIkRlbm9taW5hY2nDs25cIiwgXCJFc3RydWN0dXJhXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkQWNjb3VudHM6IE1DdWVudGFFZ3Jlc29zW10gPSBbXTtcclxuICAgICAgICBjdWVudGFzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlcmVkQWNjb3VudHMuZmluZChlID0+IGUuY3VlbnRhID09IGMuY3VlbnRhKSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLnB1c2goYylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0dlbmVyaWNvKFxyXG4gICAgICAgICAgW1wiY3VlbnRhXCIsXCJkZW5vbWluYWNpb25cIixcInByb3ZTdGF0dXNcIl0sXHJcbiAgICAgICAgICB0aXR1bG8sXHJcbiAgICAgICAgICBmaWx0ZXJlZEFjY291bnRzLFxyXG4gICAgICAgICAgW1wiQ3VlbnRhXCIsIFwiRGVub21pbmFjacOzblwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWJyZSBlbCBjw6F0YWxvZ28gZGUgY3VlbnRhcyBkZSBsYSB0YWJsYSBcInNwaV9jdWVudGFzXCJcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8TUN1ZW50YUluZ3Jlc29zPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBwYXJhbXMgcHJlc3VwdWVzdG86IEluZGljYSBzaSBzZSBhIHRyYWJhamFyIGNvbiBlc3RydWN0dXJhIGRlIHByZXN1cHVlc3RvIG8gbm9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5DYXRhbG9nb0N1ZW50YXNJbmdyZXNvKFxyXG4gICAgICB0aXR1bG86IHN0cmluZyxcclxuICAgICAgcHJlc3VwdWVzdG86IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICBhbmNobzogc3RyaW5nID0gXCI3NTBweFwiXHJcbiAgICApOiBQcm9taXNlPE1DdWVudGFJbmdyZXNvcz57XHJcbiAgICAgIGxldCBjdWVudGFzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEluY29tZUFjY291bnRzKCkudG9Qcm9taXNlKCkudGhlbigocmVzOiBJUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBjdWVudGFzID0gcmVzLmRhdGFcclxuICAgICAgICBjdWVudGFzID0gY3VlbnRhcy5maWx0ZXIoZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZS5lc3RhZG8gPT0gXCJDXCJcclxuICAgICAgICB9KS5tYXAoZSA9PiB7XHJcbiAgICAgICAgICBlWydwcm92U3RhdHVzJ10gPSBlLmVzdGFkbyA9PSBcIkNcIiA/IFwiTW92aW1pZW50b3NcIiA6IFwiVG90YWxpemFkb3JhXCJcclxuICAgICAgICAgIHJldHVybiBlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChwcmVzdXB1ZXN0bykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5DYXRhbG9nb0Rvc0lucHV0cyhcclxuICAgICAgICAgIFtcImN1ZW50YVwiLFwiZGVub21pbmFjaW9uXCIsXCJlc3RydWN0dXJhXCIsXCJwcm92U3RhdHVzXCJdLFxyXG4gICAgICAgICAgdGl0dWxvLFxyXG4gICAgICAgICAgY3VlbnRhcyxcclxuICAgICAgICAgIFt7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkN1ZW50YVwiLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogXCJjdWVudGFcIlxyXG4gICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJFc3RydWN0dXJhXCIsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImVzdHJ1Y3R1cmFcIlxyXG4gICAgICAgICAgfV0sXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0cnVjdHVyYVwiLCBcIkVzdGFkb1wiXSxcclxuICAgICAgICAgIGFuY2hvXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZEFjY291bnRzOiBNQ3VlbnRhSW5ncmVzb3NbXSA9IFtdO1xyXG4gICAgICAgIGN1ZW50YXMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgIGlmICghZmlsdGVyZWRBY2NvdW50cy5maW5kKGUgPT4gZS5jdWVudGEgPT0gYy5jdWVudGEpKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMucHVzaChjKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkNhdGFsb2dvR2VuZXJpY28oXHJcbiAgICAgICAgICBbXCJjdWVudGFcIixcImRlbm9taW5hY2lvblwiLFwicHJvdlN0YXR1c1wiXSxcclxuICAgICAgICAgIHRpdHVsbyxcclxuICAgICAgICAgIGZpbHRlcmVkQWNjb3VudHMsXHJcbiAgICAgICAgICBbXCJDdWVudGFcIiwgXCJEZW5vbWluYWNpw7NuXCIsIFwiRXN0YWRvXCJdLFxyXG4gICAgICAgICAgYW5jaG9cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0gICAgXHJcblxyXG4gICAgcHVibGljIGdldFVuaWRhZEFkbWluaXN0cmF0aXZhKCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3BnL3VuaWRhZF9hZG1pbmlzdHJhdGl2YV9kYW8ucGhwYCxcclxuICAgICAge2hlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1BZG1pbmlzdHJhdGl2ZVVuaXQoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KSBcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBjYXJnb3MgZGUgc2VydmljaW9zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZpY2VDaGFyZ2VzKHNlcnZpY2VJZDpudW1iZXIgPSBudWxsKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NvYy9zZXJ2aWNpb19jYXJnb19kYW8ucGhwJHtcclxuICAgICAgICBzZXJ2aWNlSWQgPyBgP3NlcnZpY2VfaWQ9JHtzZXJ2aWNlSWR9YCA6ICcnXHJcbiAgICAgIH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2VydmljZUNoYXJnZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBwYWlzZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNQ291bnRyeT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKiBAbW9kaWZpZWQgMTAtMDEtMjAyMlxyXG4gICAgICogQHBhcmFtIGNvZGlnbzogQ29kaWdvIGRlbCBwYWlzXHJcblxyXG4gICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRDb3VudHJpZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db3VudHJ5W10+IHtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxNQ291bnRyeT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvcGFpc2VzX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvdW50cnkoZSkpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBlc3RhZG9zXHJcbiAgICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU3RhdGU+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDQtMTItMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gY29kaWdvOiBDb2RpZ28gZGVsIHBhaXNcclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRTdGF0ZXMoY29kaWdvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1TdGF0ZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVN0YXRlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lc3RhZG9zX2Rhby5waHA/Y29kaWdvPSR7Y29kaWdvfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVN0YXRlKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgbXVuaWNpcGlvc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TU11bmljaXBhbGl0eT5cclxuICAgICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAgICogQG1vZGlmaWNhZG8gMTAtMDEtMjAyMlxyXG4gICAgICAgKiBAcGFyYW0gcGFpczogQ29kaWdvIGRlbCBwYWlzICxcclxuICAgICAgICogQHBhcmFtIGVzdGFkbzogQ29kaWdvIGRlbCBlc3RhZG9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG4gICAgICAgKi9cclxuICAgICAgcHVibGljIGdldE11bmljaXBhbGl0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TU11bmljaXBhbGl0eVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TU11bmljaXBhbGl0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvbXVuaWNpcGlvc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNTXVuaWNpcGFsaXR5KGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgcGFycm9xdWlhcyBcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG4gICAgICAgKiBAcGFyYW0gbXVuaWNpcGlvOmNvZGlnbyBNdW5pY2lwaW9cclxuICAgICAgICogQGFjdHVhbGl6YWRvIDQtMTItMjAyMlxyXG5cclxuICAgICAgICovXHJcbiAgICAgIHB1YmxpYyBnZXRQYXJpc2hlcyhwYWlzPzpzdHJpbmcsZXN0YWRvPzpzdHJpbmcsbXVuaWNpcGlvPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1QYXJpc2hbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1QYXJpc2g+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL3BhcnJvcXVpYXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGFyaXNoKGUpKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgY2l1ZGFkZXNcclxuICAgICAgICogQHJldHVybiBPYnNlcnZhYmxlPE1QYXJpc2g+XHJcbiAgICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG4gICAgICAgKiBAcGFyYW0gZXN0YWRvOiBDb2RpZ28gZGVsIGVzdGFkb1xyXG5cclxuXHJcbiAgICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRDaXR5KHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZyk6IE9ic2VydmFibGU8TUNpdHlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1DaXR5PihgJHt0aGlzLlVSTH0vZGFvL2NmZy9jaXVkYWRlc19kYW8ucGhwP3BhaXM9JHtwYWlzfSZlc3RhZG89JHtlc3RhZG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2l0eShlKSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjaXVkYWRlc1xyXG4gICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVBhcmlzaD5cclxuICAgICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgICAqIEBtb2RpZmljYWRvIDEwLTAxLTIwMjJcclxuICAgICAgICogQHBhcmFtIHBhaXM6IENvZGlnbyBkZWwgcGFpc1xyXG5cclxuICAgICAgICovXHJcbiAgICAgICAgcHVibGljIGdldENvbW11bml0aWVzKHBhaXM/OnN0cmluZyxlc3RhZG8/OnN0cmluZywgbXVuaWNpcGlvPzpzdHJpbmcscGFycm9xdWlhPzpzdHJpbmcpOiBPYnNlcnZhYmxlPE1Db21tdW5pdHlbXT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TUNvbW11bml0eT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvY29tdW5pZGFkZXNfZGFvLnBocD9wYWlzPSR7cGFpc30mZXN0YWRvPSR7ZXN0YWRvfSZtdW5pY2lwaW89JHttdW5pY2lwaW99JnBhcnJvcXVpYT0ke3BhcnJvcXVpYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbW11bml0eShlKSkpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHNpc3RlbWFzIGFjdGl2YXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxNU2lzdGVtYT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaXN0ZW1hcygpOiBPYnNlcnZhYmxlPE1TaXN0ZW1hW10+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TVNpc3RlbWE+KGAke3RoaXMuVVJMfS9kYW8vc3NzL3Npc3RlbWFzX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU2lzdGVtYShlKSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYSBtb25lZGEgYWN0dWFsXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqIEBhY3R1YWxpemFkbzogNC0xMi0yMDIyMlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudEN1cnJlbmN5KCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9jZmcvbW9uZWRhX2Rhby5waHA/dGlwbz0keydhY3R1YWwnfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Nb25lZGFDb25maWcocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGxpbmVhIGVtcHJlc2FcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBhY3R1YWxpemFkbzogNS0xMi0yMDIyMlxyXG4gICAgICogQHRpcG8gXHJcbiAgICAgKi9cclxuICAgICAgICAgcHVibGljIGdldEVudGVycHJpc2UodGlwbzondXN1YXJpbycgfCAnZGVmYXVsdCc9bnVsbCAsaWQ/Om51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2VudGVycHJpc2VfZGFvLnBocD9gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRW50ZXJwcmlzZShlKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIG9yZ2FuaXphY2lvblxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcmdhbml6YXRpb25UeXBlcygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3RpcG9fb3JnYW5pemFjaW9uX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNT3JnYW5pemF0aW9uVHlwZShlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsb3MgdGlwb3MgZGUgb3JnYW5pemFjaW9uXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNwZWNpYWx0aWVzKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvZXNwZWNpYWxpZGFkX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNU3BlY2lhbHR5KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBkb2N1bWVudG9zXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldERvY3VtZW50cygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL2RvY3VtZW50b19kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURvY3VtZW50KGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBjbGFzaWZpY2FjaW9uZXNcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2xhc2lmaWNhdGlvbnMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3JwYy9jbGFzaWZpY2FjaW9uX2Rhby5waHBgLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ2xhc2lmaWNhdGlvbihlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBwcmVmaWpvIGRlIGxvcyB1c3Vhcmlvc1xyXG4gICAgICogQHBhcmFtIHByb2NlZGUgRGUgcXVlIG3Ds2R1bG8gcHJvY2VkZVxyXG4gICAgICogQHBhcmFtIGNvZHNpcyBDw7NkaWdvIGRlbCBzaXN0ZW1hXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVVzdWFyaW9QcmVmaWpvW10+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VXNlclByZWZpeChmaWx0ZXI6ICdkZXRhaWwnID0gbnVsbCwgY29kZTogc3RyaW5nID0gbnVsbCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbnRyb2xfbnVtZXJvX2Rhby5waHAke1xyXG4gICAgICAgIGZpbHRlciA/IGA/ZmlsdGVyPSR7ZmlsdGVyfSZjb2RlPSR7Y29kZX1gIDogJydcclxuICAgICAgfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Vc3VhcmlvUHJlZmlqbyhlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHBlZmlqb1xyXG4gICAgICogQHBhcmFtIHByb2NlZGUgRGUgcXVlIG3Ds2R1bG8gcHJvY2VkZVxyXG4gICAgICogQHBhcmFtIGNvZHNpcyBDw7NkaWdvIGRlbCBzaXN0ZW1hXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVVzdWFyaW9QcmVmaWpvW10+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseUNyZXNwbyAxNy0xMi0yMDIyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQcmVmaXgoZmlsdGVyOiAnYWxsJyB8ICdvbmUnID0gbnVsbCwgY29kZTogc3RyaW5nID0gbnVsbCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vY2ZnL2NvbnRyb2xfbnVtZXJvX2Rhby5waHAke1xyXG4gICAgICAgIGZpbHRlciA/IGA/ZmlsdGVyPSR7ZmlsdGVyfSZjb2RlPSR7Y29kZX1gIDogJydcclxuICAgICAgfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QcmVmaWpvKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBYnJlIGVsIGRpYWxvZyBwYXJhIGJ1c2NhciBsb3MgcHJvdmVlZG9yZXNcclxuICAgICAqIEByZXR1cm4gUHJvbWlzZTxNUHJvdmVlZG9yPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG9wZW5EaWFsb2dQcm92ZWVkb3JlcygpOiBQcm9taXNlPE1Qcm92ZWVkb3I+IHtcclxuICAgICAgbGV0IHByb3ZlZWRvcmVzOiBNUHJvdmVlZG9yW10gPSBhd2FpdCB0aGlzLmdldFByb3ZlZWRvcmVzKCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENhdGFsb2dvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgY29sdW1uczogWyd0aXBvJywgJ3JpZicsICdub21icmUnXSxcclxuICAgICAgICAgIHRpdGxlOiAnQ2F0w6Fsb2dvIGRlIFByb3ZlZWRvcmVzIHkgQmVuZWZpY2lhcmlvcycsXHJcbiAgICAgICAgICBkYXRhU291cmNlOiBwcm92ZWVkb3Jlc1xyXG4gICAgICAgIH0gYXMgSUNhdGFsb2dvLFxyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8TVByb3ZlZWRvcltdPlxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFByb3ZlZWRvcmVzKCk6IE9ic2VydmFibGU8TVByb3ZlZWRvcltdPiB7XHJcbiAgICAgIGxldCByZXF1ZXN0OiBJUmVxdWVzdCA9IHtcclxuICAgICAgICBvcGVyYWNpb246ICdvYnRlbmVyRGF0YScsXHJcbiAgICAgICAgc2lnZXNwX2NvbmV4aW9uOiB7XHJcbiAgICAgICAgICBzZXJ2aWRvcjogdGhpcy5VUkwsXHJcbiAgICAgICAgICB1c3VhcmlvOiB0aGlzLnVzdWFyaW9BY3Rpdm8uZ2V0SW50ZXJmYWNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1Qcm92ZWVkb3JbXT4oYCR7dGhpcy5VUkx9L2Rhby9ycGMvcHJvdmVlZG9yX2JlbmVmaWNpYXJpb19kYW8ucGhwYCwgcmVxdWVzdCkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMubWFwKGVsZW1lbnQgPT4gbmV3IE1Qcm92ZWVkb3IoZWxlbWVudCkpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzIHkgYmVuZWZpY2lhcmlvc1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQcm92aWRlcnNBbmRCZW5lZmljaWFyaWVzKHR5cGU6IHN0cmluZyA9IG51bGwpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vcnBjL3Byb3ZlZWRvcl9iZW5lZmljaWFyaW9fZGFvLnBocCR7dHlwZSA/IGA/cHJvdmlkZXJfdHlwZT0ke3R5cGV9YCAgOiAnJ31gLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVByb3ZpZGVyQmVuZWZpY2lhcnkoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHVuIFVzdWFyaW8gc2VndW4gc3UgSURcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VXNlckJ5SWQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zc3MvdXN1YXJpb19kYW8ucGhwP2lkPSR7aWR9YCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gbmV3IE1Vc3VhcmlvKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBiYW5jb3NcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QmFua3MoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjYi9iYW5jb19kYW8ucGhwYCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1CYW5rKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBjdWVudGEgYmFuY2FyaWFzXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJhbmtBY2NvdW50VHlwZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NjYi9iYW5jb190aXBvX2N1ZW50YV9kYW8ucGhwYCwgXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1CYW5rQWNjb3VudFR5cGUoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBbGxCYW5rQWNjb3VudCgpeyAgICAgICAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc2NiL2N1ZW50YV9iYW5jb19kYW8ucGhwP2AsXHJcbiAgICAgIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczphbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlbGVtZW50ID0+IG5ldyBNQ3VlbnRhQmFuY28oZWxlbWVudCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNcclxuICAgICAgICB9KSBcclxuICAgICAgKVxyXG4gICAgfSBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyBiYW5jb3Mgc2lnZWNvZlxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgQ2FybG9zIEFsYm9ybm96XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTaWdlY29mQmFua3MoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3NpZ2VzcC9iYW5jb19zaWdlY29mX2Rhby5waHBgLCBcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVNpZ2Vjb2ZCYW5rKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpb24gZGUgU09DXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBDYXJsb3MgQWxib3Jub3pcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldENvbmZpZ1NPQygpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc29jL2NvbmZpZ3VyYWNpb25fZGFvLnBocGAsIFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXMuZGF0YSA9IG5ldyBNQ29uZmlnU09DKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkZWR1Y2Npb25cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIENhcmxvcyBBbGJvcm5velxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RGVkdWN0aW9uVHlwZXMoKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3N0Yi90aXBvX2RlZHVjY2lvbl9kYW8ucGhwYCxcclxuICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURlZHVjdGlvblR5cGUoZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbmNvbWVBY2NvdW50cyhvbmx5QXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPGFueT57XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3BpL2N1ZW50YXNfaW5ncmVzb3NfZGFvLnBocCR7XHJcbiAgICAgICAgb25seUF2YWlsYWJsZSA/ICc/YXZhaWxhYmxlPXRydWUnIDogJydcclxuICAgICAgfWAsIHtoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCl9KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DdWVudGFJbmdyZXNvcyhlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDaGFyZ2VzKCl7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3RiL2Nhcmdvc19kYW8ucGhwYCwgXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IElSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1DYXJnbyhlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gIFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREZWR1Y3Rpb25zKCl7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3RiL2RlZHVjY2lvbmVzX2Rhby5waHBgLCBcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9XHJcbiAgICAgICkucGlwZShcclxuICAgICAgICBtYXAoKHJlczogSVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTURlZHVjdGlvbihlKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gIFxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGxvcyBkYXRvcyBkZSBFbXByZXNhXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRDb21wYW55KHRpcG8/OnN0cmluZyxpZD86bnVtYmVyKTogT2JzZXJ2YWJsZTxJUmVzcG9uc2U+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2NmZy9lbXByZXNhc19kYW8ucGhwP3RpcG89JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1FbXByZXNhKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gQ1hQXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKiBAZGF0ZSAyMC0wNy0yMDIxXHJcbiAgICAgKi9cclxuICAgICAgcHVibGljIGdldFRpcG9zRG9jdW1ldG9zKCk6IE9ic2VydmFibGU8SVJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2N4cC90aXBvX2RvY3VtZW50b19kYW8ucGhwP29wZXJhY2lvbj0keydidXNjYXInfSZleGlzdGVuPSR7J2V4aXN0ZW4nfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVRpcG9Eb2N1bWVudG9DWFAoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAgKiBAcGFyYW0gZ2V0IHRvbWEgbG9zIHZhbG9yZXM6IFsgaWRPcmRlbkNvbXByYSAsJ3JlY2VwY2lvbicsJ2V4aXN0ZW4nLCdjb2RpZ28nLCAnb3JkZW5lc1NPQycsICdvcCcsICdhcnQnIF1cclxuICAgICAgKiBAcGFyYW0gbiBjb2RpZ28gRG9jdW1lbnRvIE9yZGVuLCBzZSB1c2EgcGFyYSBvYnRlbmVyIGxvcyBkZXRhbGxlcyBkZSBsYSBvcmRlbiBkZSBjb21wcmEsIGVzIG9ibGlnYXRvcmlvIGFsIGNvbWJpbmFyIGNvbiBsYSBvcGNpb24gZ2V0OiBpZE9yZGVuQ29tcHJhXHJcbiAgICAgICogQGRlc2NyaXB0aW9uICdyZWNlcGNpb24nOiBPYnRpbmUgbGFzIG9yZGVuZXMgZGUgc3VtaW5pc3RybyxcclxuICAgICAgKiBleGlzdGUgeSBjb2RpZ286IE9idGllbmUgbG9zIGNvZGlnb3MgcmVnaXN0cmFkb3MsIFxyXG4gICAgICAqIG9yZGVuZXNTT0M6IG9idGllbmUgbGFzIG9yZGVuZXMgZGUgY29tcHJhLFxyXG4gICAgICAqIG9wOiBvYnRpZW5lIGxhcyBvcmRlbmVzIHBlbmRpZW50ZXNcclxuICAgICAgKiBhcnQ6IG9idGllbmUgbG9zIGFydGljdWxvcyBcclxuICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICAqIEBkYXRlIDMtMTAtMjAyMVxyXG4gICAgICAqIEByZXR1cm5zIFxyXG4gICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldEVudHJhZGFTdW1pbmlzdHJvcyhnZXQ6YW55LCBuPzpzdHJpbmcpOiBPYnNlcnZhYmxlPElSZXNwb25zZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zaXYvZW50cmFkYV9zdW1pbmlzdHJvX2Rhby5waHA/Z2V0PSR7Z2V0fSZuPSR7bn1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRW50cmFkYVN1bWluaXN0cm9zKGUpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxvcyB0aXBvcyBkZSBkb2N1bWVudG9zIHJlZ2lzdHJhZG9zIGVuIENYUFxyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICogQGRhdGUgMjAtMDctMjAyMVxyXG4gICAgICovXHJcblxyXG4gICAgICBwdWJsaWMgZ2V0Q29uY2VwdG9zQ3hQKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL2N4cC9jb25jZXB0b19kYW8ucGhwP29wZXJhY2lvbj0keydidXNjYXInfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmNlcHRvc0NYUChlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAgLyoqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGxvcyBjb25jZXB0b3MgUmV0ZW5jaW9uIElTUkxcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqIEBkYXRlIDI2LTA3LTIwMjFcclxuICAgICAqL1xyXG5cclxuICAgICAgICBwdWJsaWMgZ2V0Q29uY2VwdG9zUmV0ZW5jaW9uKCl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc3RiL2RlZHVjY2lvbmVzX2Rhby5waHA/Y29kZT0keydjb25jZXB0b3MnfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUNvbmNlcHRvUmV0ZW5jaW9uKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgIC8qKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIFJSSEggeSBkZSBTTk9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICBwdWJsaWMgb2J0ZW5lckNvbmZpZ3VyYWNpb25TTk8oKXtcclxuICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9jb25maWd1cmFjaW9uX2Rhby5waHA/dGlwbz0keydjb25maWd1cmFjaW9uJ31gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNQ29uZmlndXJhY2lvblNOTyhlKSk7ICBcclxuICAgICAgICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgICBcclxuICAgICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAgKiBcclxuICAgICAgKiBAcGFyYW0gdGlwbyBbJ2RlZmF1bHQnLCAndW5vJywgJ2NhcmdvcyddIGRhZmF1bHQ6VG9kYXMgbGFzIG5vbWluYXMsIHVubzogdW5hIG5vbWluYSwgJ2Nhcmdvcyc6IG5vbWluYXMgcG9yIGNhcmdvc1xyXG4gICAgICAqIEBwYXJhbSBpZCA6aWQgZGUgbGEgbm9taW5hLiBDYW1wbyByZXF1ZXJpZG8gcGFyYSB1bm8geSBjYXJnb3NcclxuICAgICAgKiBAcmV0dXJucyBhcnJheSgpICAgICAgXHJcbiAgICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGFzIG5vbWluYXMgcmVnaXN0cmFkYXNcclxuICAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICAqIEBkYXRlIDIwLTEwLTIxXHJcbiAgICAgICpcclxuICAgICAqLyAgICAgXHJcblxyXG4gICAgICAgcHVibGljIGdldE5vbWluYSh0aXBvOnN0cmluZyxpZD86bnVtYmVyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL2RlZmluaWNpb25fbm9taW5hX2Rhby5waHA/dGlwbz0ke3RpcG99JmlkPSR7aWR9YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNRGVmaW5pY2lvbk5vbWluYShlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAvKipcclxuICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIGNhcmdvcyBkZSBsYXMgbm9taW5hXHJcbiAgICAqIEBwYXJhbSB0aXBvIFsnY29kaWdvJywnZGVmYXVsdCddIC0+Y29kaWdvOiBvYnRpZW5lIGVsIHByb3hpbW8gY29kaWdvLiAtPmRlZmF1bHQ6IG9idGllbmUgdG9kb3MgbG9zIGNhcmdvcyBkZSBsYSBub21pbmFcclxuICAgICogQHBhcmFtIGlkIGlkIGRlIGxhIG5vbWluYVxyXG4gICAgKiBAcmV0dXJucyBhcnJheSgpXHJcbiAgICAqL1xyXG4gICAgICBwdWJsaWMgZ2V0Q2FyZ29zTm9taW5hKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vYXNpZ25hY2lvbl9jYXJnb3NfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Bc2lnbmFjaW9uQ2FyZ28oZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSAgXHJcbiAgICAgIFxyXG4gICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIHVuIHBlcnNvbmFsIGRlIGxhIG7Ds21pbmFcclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAYXV0aG9yIERpbWFseSBDcmVzcG9cclxuICAgICAqL1xyXG4gICAgICAgcHVibGljIGdldFBlcnNvbmFsU1JIKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vcGVyc29uYWxfZGFvLnBocD90aXBvPSR7dGlwb30maWQ9JHtpZH1gLFxyXG4gICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoXHJcbiAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1QZXJzb25hbChlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9IFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBsYXMgYWdlbmNpYSBkZSBiYW5jb1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBhdXRob3IgRGltYWx5IENyZXNwb1xyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgZ2V0QWdlbmNpYUJhbmNvKHRpcG86c3RyaW5nLGlkPzpudW1iZXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zY2IvYWdlbmNpYV9kYW8ucGhwP2NvZGU9JHt0aXBvfSZpZD0ke2lkfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZShcclxuICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTUFnZW5jaWFCYW5jbyhlKSk7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9IFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgaG9qYXMgZGUgdGllbXBvXHJcbiAgICAgKiBAcmV0dXJuIE9ic2VydmFibGU8SVJlc3BvbnNlPlxyXG4gICAgICogQGF1dGhvciBEaW1hbHkgQ3Jlc3BvXHJcbiAgICAgKi9cclxuICAgICAgICAgICBwdWJsaWMgZ2V0SG9qYVRpZW1wbyh0aXBvOnN0cmluZyxpZFBlcnNvbmFsPzpudW1iZXIsaWROb21pbmE/Om51bWJlcil7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vaG9qYV90aWVtcG9fZGFvLnBocD9pZFBlcnNvbmFsPSR7aWRQZXJzb25hbH0maWROb21pbmE9JHtpZE5vbWluYX1gLFxyXG4gICAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Ib2phVGllbXBvKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBcclxuICAgICAgXHJcblxyXG4gICAgXHJcbiAgXHJcblxyXG5cclxuICAgIHB1YmxpYyB1c2VySGFzUmlnaHRzKGNvbHVtbjonYWRtaW5pc3RyYWRvcicgfCAnaW5zZXJ0YXInIHwgJ2FjdHVhbGl6YXInIHwgJ2NvbnN1bHRhcicgXHJcbiAgICB8ICdlbGltaW5hcicgfCAnYW51bGFyJyB8J2Rlc2NhcmdhcicgfCAnZWplY3V0YXJfX3Byb2Nlc2FyXycgfCAnaW1wcmltaXInIFxyXG4gICAgfCAnZW52aWFyX19jb3JyZW9fJyB8ICd2aXNpYmxlJyl7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KFxyXG4gICAgICAgIGAke3RoaXMuVVJMfS9kYW8vc3NzL2RlcmVjaG9zX3VzdWFyaW9fZGFvLnBocD9pZENvbXBvbmVudD0ke1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29tcG9uZW50LmlkXHJcbiAgICAgICAgfSZjb2x1bW49JHtjb2x1bW59YCwgXHJcbiAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfVxyXG4gICAgICApXHJcblxyXG4gICAgfVxyXG5cclxuICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0b3JuYSBsb3MgaGVhZGVycyBwYXJhIGhhY2VyIGxhcyBwZXRpY2lvbmVzXHJcbiAgICAgKiBAcGFyYW1zIHR5cGU6IFRpcG8gTUlNRSBwZXJtaXRpZG8gcG9yIGRlZmVjdG8gc2UgdG9tYSBhcHBsaWNhdGlvbi9qc29uXHJcbiAgICAgKiBAcmV0dXJuIEh0dHBIZWFkZXJzXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICogQGRhdGUtdXBkYXRlOiAxNS0wNi0yMDIyIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SHR0cEhlYWRlcnModHlwZT86c3RyaW5nKTogSHR0cEhlYWRlcnMgeyBcclxuICAgICAgIXR5cGU/IHR5cGU9J2FwcGxpY2F0aW9uL2pzb24nOicnOyAgICAgIFxyXG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogdHlwZSxcclxuICAgICAgICAnQXV0aG9yaXphdGlvbic6IGAke3RoaXMudXN1YXJpb0FjdGl2by50b2tlbn1gXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gaGVhZGVycztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIHNlcnZpZG9yIGd1YXJkYWRvIGVuIGVsIHNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIHN0cmluZ1xyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlcnZlcigpOiBzdHJpbmcge1xyXG4gICAgICByZXR1cm4gdGhpcy5VUkw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCB1c3VhcmlvIGd1YXJkYWRvIGVuIGVsIHNlc3Npb25TdG9yYWdlXHJcbiAgICAgKiBAcmV0dXJuIE1Vc3VhcmlvXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VXNlcigpIHtcclxuICAgICAgbGV0IGNvbmV4aW9uOiBJQ29uZXhpb24gPSBhd2FpdCAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSA/IEpTT04ucGFyc2UoYXRvYihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1c2VyJykpKSA6IG51bGw7XHJcbiAgICAgIC8vY29uc29sZS5sb2coY29uZXhpb24pXHJcbiAgICAgIC8vIGRlYnVnZ2VyXHJcbiAgICAgIGlmIChjb25leGlvbikge1xyXG4gICAgICAgIHRoaXMudXN1YXJpb0FjdGl2byA9IG5ldyBNVXN1YXJpbyhjb25leGlvbi51c3VhcmlvKTtcclxuICAgICAgICB0aGlzLlVSTCA9IGNvbmV4aW9uLnNlcnZpZG9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gdG9hc3QgZGUgc3VjY2Vzc1xyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RTdWNjZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTXVlc3RyYSB1biB0b2FzdCBkZSBlcnJvclxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgTWVuc2FqZSBxdWUgc2UgdmEgYSBtb3N0cmFyXHJcbiAgICAgKiBAcmV0dXJuIHZvaWRcclxuICAgICAqIEBhdXRob3IgTWlndWVsIFJhbcOtcmV6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93VG9hc3RFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgdGhpcy50b2FzdC5lcnJvcihtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE11ZXN0cmEgdW4gc3dlZXRhbGVydDIgZGUgw6l4aXRvXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGRhdGUgMjItMTEtMjAyMVxyXG4gICAgICovXHJcbiAgICAgICBwdWJsaWMgc2hvd1RvYXN0U3VjY2Vzc1N3YWwobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICAgIGljb246ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHRpdGxlOiAnw4l4aXRvJyxcclxuICAgICAgICAgIHRleHQ6IG1lc3NhZ2UsICAgICAgIFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBNdWVzdHJhIHVuIHN3ZWV0YWxlcnQyIGRlIGVycm9yXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBNZW5zYWplIHF1ZSBzZSB2YSBhIG1vc3RyYXJcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGRhdGUgMjItMTEtMjAyMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvd1RvYXN0RXJyb3JTd2FsKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgIGljb246ICdlcnJvcicsXHJcbiAgICAgICAgdGl0bGU6ICfCoUVycm9yIScsXHJcbiAgICAgICAgdGV4dDogbWVzc2FnZSwgICAgICAgXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR3VhcmRhIGVsIHVzdWFyaW8gbG9ndWVhZG8gZW4gZWwgU2Vzc2lvblN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSB1c2VyIFVzdWFyaW8gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbiBlbCBTZXNzaW9uU3RvcmFnZVxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2F2ZVVzZXIoZGF0YTogSUNvbmV4aW9uKTogdm9pZCB7XHJcbiAgICAgIHRoaXMudXN1YXJpb0FjdGl2byA9IG5ldyBNVXN1YXJpbyhkYXRhLnVzdWFyaW8pO1xyXG4gICAgICB0aGlzLlVSTCA9IGRhdGEuc2Vydmlkb3I7XHJcbiAgICAgIGxldCBlbmNyeXB0ZWRVc2VyOiBzdHJpbmcgPSBidG9hKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndXNlcicsIGVuY3J5cHRlZFVzZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNldGUgYSBsYSB1cmwgYSBsYSBjdWFsIHNlIGxlIHZhbiBhIHJlYWxpemFyIHBldGljaW9uZXMgYWwgYmFja0VuZFxyXG4gICAgICogQHBhcmFtIHVybCBVUmwgZG9uZGUgc2UgdmFuIGEgcmVhbGl6YXIgbGFzIHBldGljaW9uZXNcclxuICAgICAqIEByZXR1cm4gdm9pZFxyXG4gICAgICogQGF1dGhvciBNaWd1ZWwgUmFtw61yZXpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICB0aGlzLlVSTCA9IHVybDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIGRlIHNpZ2VzcFxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcclxuICAgICAgLy8gVmVyaWZpY2Ftb3Mgc2kgaGF5IHVuIHVzdWFyaW8gZW4gbGEgc2Vzc2lvblN0b3JhZ2UsIGVzdG8gZXMgbmVjZXNhcmlvIHBhcmEgcmVjYXJnYXIgbGEgcMOhZ2luYVxyXG4gICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndXNlcicpKVxyXG4gICAgICAgIHRoaXMuZ2V0VXNlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmVyaWZpY2Egc2kgdW4gdXN1YXJpbyBlc3TDoSBsb2d1ZWFkb1xyXG4gICAgICogQHJldHVybiBQcm9taXNlPGJvb2xlYW4+XHJcbiAgICAgKiBAYXV0aG9yIE1pZ3VlbCBSYW3DrXJlelxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgaXNMb2dnZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VzZXInKSkge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZXJFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBhbnkge1xyXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcignT2N1cnJpw7MgdW4gZXJyb3InKVxyXG4gICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gb2J0aWVuZSBlbCBwZXJzb25hbCBzZWd1biBmaWx0cm9cclxuICAgICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxJUmVzcG9uc2U+XHJcbiAgICAgKiBAZGF0ZSAxNS0xMS0yMDIxXHJcbiAgICAgKiBAcGFyYW0gdGlwbzogdmFsb3JlcyBbJ2NhdGFsb2dvJywnZGVmYXVsdCcsJ25vbWluYSddXHJcbiAgICAgKiBAcGFyYW1zIGRhdG86b2JqZWN0IHtub21icmU6c3RyaW5nLCBhcGVsbGlkbzpzdHJpbmcsIGNlZHVsYS5zdHJpbmd9IHVzZSBwYXJhIGxhIG9wY2lvbiAnY2F0YWxvZ28nXHJcbiAgICAgKi9cclxuICAgICAgIHB1YmxpYyBnZXRQZXJzb25hbCh0aXBvOnN0cmluZywgZGF0bz86YW55KXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJUmVzcG9uc2U+KGAke3RoaXMuVVJMfS9kYW8vc25vL3BlcnNvbmFsX2Rhby5waHA/XHJcbiAgICAgICAgdGlwbz0ke3RpcG99JmNlZHVsYT0ke2RhdG8uY2VkdWxhfSZub21icmU9JHtkYXRvLm5vbWJyZX0mYXBlbGxpZG89JHtkYXRvLmFwZWxsaWRvfSZleHBlZGllbnRlPSR7ZGF0by5leHBlZGllbnRlfSZpZFRpcG89JHtkYXRvLnRpcG99YCxcclxuICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgcmV0cnkoMyksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlckVycm9yKSxcclxuICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHJlcy5kYXRhLm1hcChlID0+IG5ldyBNUGVyc29uYWwoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIG9idGVuZXIgcGVyc29uYWwgTm9taW5hIHNlZ3VuIGZpbHRyb1xyXG4gICAgICogQHJldHVybiBPYnNlcnZhYmxlPElSZXNwb25zZT5cclxuICAgICAqIEBkYXRlIDE1LTExLTIwMjFcclxuICAgICAqICogQHBhcmFtIHRpcG86IHZhbG9yZXMgWydjYXRhbG9nbycsJ2RlZmF1bHQnLCdub21pbmEnXVxyXG4gICAgICogQHBhcmFtcyBkYXRvOm9iamVjdCB7bm9tYnJlOnN0cmluZywgYXBlbGxpZG86c3RyaW5nLCBjZWR1bGEuc3RyaW5nfSB1c2UgcGFyYSBsYSBvcGNpb24gJ2NhdGFsb2dvJ1xyXG5cclxuICAgICAqL1xyXG4gICAgICAgIHB1YmxpYyBnZXRQZXJzb25hbE5vbWluYSh0aXBvOnN0cmluZyxkYXRvPzphbnkpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9hc2lnbmFjaW9uX3BlcnNvbmFsX25vbWluYV9kYW8ucGhwP1xyXG4gICAgICAgICAgdGlwbz0ke3RpcG99JmNlZHVsYT0ke2RhdG8uY2VkdWxhfSZub21icmU9JHtkYXRvLm5vbWJyZX0mYXBlbGxpZG89JHtkYXRvLmFwZWxsaWRvfSZleHBlZGllbnRlPSR7ZGF0by5leHBlZGllbnRlfSZpZFRpcG89JHtkYXRvLmlkVGlwb30maWROb21pbmE9JHtkYXRvLmlkTm9taW5hfWAsXHJcbiAgICAgICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgICAgICByZXRyeSgzKSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVBlcnNvbmFsTm9taW5hKGUpKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gaWRQZXJzb25hbDogaWQgZGVsIHBlcnNvbmFsXHJcbiAgICogQHBhcmFtIHRpcG86IHZhbG9yZXNbJ25vbWluYV9wZXJzb25hbCddIFxyXG4gICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhcyBub21pbmFzIGRlbCBwZXJzb25hbCByZXN1bWlkYVxyXG4gICAqIEBkZXByZWNhdGVkOyAyMC0wMS0yMlxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIFxyXG4gIHB1YmxpYyBnZXRQZXJzb25hbE5vbWluYVJlc3VtaWRhKGlkUGVyc29uYWw6bnVtYmVyLHRpcG86c3RyaW5nKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Nuby9wZXJzb25hbF9kYW8ucGhwP2lkUGVyc29uYWw9JHtpZFBlcnNvbmFsfSZ0aXBvPSR7dGlwb31gLFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJlcy5kYXRhID0gcmVzLmRhdGEubWFwKGUgPT4gbmV3IE1Ob21pbmFTaW1wbGUoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIFxyXG4gICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgICAgKi9cclxuICAgICAgICAgIHB1YmxpYyBnZXRQZXJmaWxOb0NvbXBvbmVudChpZF91c3VhcmlvOm51bWJlcixzaXN0ZW1hOnN0cmluZywgbmFtZUNvbXBvbmVudDogc3RyaW5nICl7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuVVJMfS9kYW8vc3NzL2RlcmVjaG9zX3VzdWFyaW9fZGFvLnBocD9pZF91c3VhcmlvPSR7aWRfdXN1YXJpb30mc2lzdGVtYT0ke3Npc3RlbWF9Jm5hbWVjb21wb25lbnQ9JHtuYW1lQ29tcG9uZW50fWAsXHJcbiAgICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpIH0pLnBpcGUoICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgfVxyXG4gIFxyXG4gICAgICAgLyoqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIEpzb24gTWVudSBwYXJhIGVsIHVzdWFyaW8gZGVmaW5pZG8gc2VndW4gc3UgcGVybWlzb2xvZ2lhIGRlbCBTaXN0ZW1hXHJcbiAgICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgICAgKi9cclxuICAgICAgICBwdWJsaWMgZ2V0SnNvbk1lbnUoaWRfdXN1YXJpbzpudW1iZXIsc2lzdGVtYTpzdHJpbmcpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5VUkx9L2Rhby9zc3MvbWVudV9kYW8ucGhwP2lkX3VzdWFyaW89JHtpZF91c3VhcmlvfSZzaXN0ZW1hPSR7c2lzdGVtYX1gLFxyXG4gICAgICAgICAgeyBoZWFkZXJzOiB0aGlzLmdldEh0dHBIZWFkZXJzKCkgfSkucGlwZSggICAgICAgICAgXHJcbiAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHsgXHJcbiAgICAgICAgICAgICAgIHRoaXMudXNlck1lbnUgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlck1lbnU7XHJcbiAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAvKipcclxuICAgICAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBKc29uIE1lbnUgcGFyYSBlbCB1c3VhcmlvIGRlZmluaWRvIHNlZ3VuIHN1IHBlcm1pc29sb2dpYSBkZWwgU2lzdGVtYVxyXG4gICAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAgICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgICAgICovXHJcbiAgICAgIHB1YmxpYyBsb2coYm9keTogTUxvZyApeyAgXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlVSTH0vZGFvL3Nzcy9sb2dfZGFvLnBocGAsIGJvZHkgLCB7XHJcbiAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIdHRwSGVhZGVycygpXHJcbiAgICAgICAgfSkucGlwZSggIFxyXG4gICAgICAgICAgbWFwKChyZXM6IGFueSkgPT4geyAgXHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgIFxyXG4gICAgfVxyXG5cclxuICBcclxuICAgICAgICBcclxuICAgLyoqXHJcbiAgICAqIEBuYW1lIEVuY3J5cHREYXRhXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBFbnNjcmlwdGEgdW5hIGV4cHJlc2lvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2XDsW9cclxuICAgICovXHJcbiAgICBwdWJsaWMgRW5jcnlwdERhdGEoIGV4cHJlc2lvbiA6IHN0cmluZyl7XHJcbiAgICAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSAoXCIwMTIzNDU2Nzg5U0lHRVNQXCIpOyAvLyBuw7ptZXJvIGhleGFkZWNpbWFsIGRlIDE2IGTDrWdpdG9zIGNvbW8gY2xhdmVcclxuICAgICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKCdTSUdFU1AwMTIzNDU2Nzg5Jyk7IC8vIE7Dum1lcm8gaGV4YWRlY2ltYWwgY29tbyBkZXNwbGF6YW1pZW50byBkZSBjbGF2ZVxyXG4gICAgICAgbGV0IHNyY3MgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShleHByZXNpb24pO1xyXG4gICAgICAgbGV0IGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KHNyY3MsIGtleSwgeyBpdjogaXYsIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgfSk7XHJcbiAgICAgICByZXR1cm4gZW5jcnlwdGVkLmNpcGhlcnRleHQudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gXHJcbiAgICAvKipcclxuICAgICogQG5hbWUgRGVjcnlwdERhdGFcclxuICAgICogQGRlc2NyaXB0aW9uIERlc2VuY3JpcHRhIHVuYSBleHByZXNpb24gZGF0YVxyXG4gICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlw7FvXHJcbiAgICAqL1xyXG4gICAgcHVibGljIERlY3J5cHREYXRhKCBleHByZXNpb24gOiBzdHJpbmcpe1xyXG4gICAgICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UgKFwiMDEyMzQ1Njc4OVNJR0VTUFwiKTsgLy8gbsO6bWVybyBoZXhhZGVjaW1hbCBkZSAxNiBkw61naXRvcyBjb21vIGNsYXZlXHJcbiAgICAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlICgnU0lHRVNQMDEyMzQ1Njc4OScpOyAvLyBOw7ptZXJvIGhleGFkZWNpbWFsIGNvbW8gZGVzcGxhemFtaWVudG8gZGUgY2xhdmVcclxuICAgICAgIGxldCBlbmNyeXB0ZWRIZXhTdHIgPSBDcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGV4cHJlc2lvbik7XHJcbiAgICAgICBsZXQgc3JjcyA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KGVuY3J5cHRlZEhleFN0cik7XHJcbiAgICAgICBsZXQgZGVjcnlwdCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHNyY3MsIGtleSwgeyBpdjogaXYsIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcgfSk7XHJcbiAgICAgICBsZXQgZGVjcnlwdGVkU3RyID0gZGVjcnlwdC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XHJcbiAgICAgICByZXR1cm4gZGVjcnlwdGVkU3RyLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiBcclxuIFxyXG4gICAgLyoqXHJcbiAgICAqIEBuYW1lIGdldFJlc3BvbnNlUGVyZmlsVG9vbGJhclxyXG4gICAgKiBAZGVzY3JpcHRpb24gTWV0b2RvIHF1ZSBvYnRpZW5lIHVuYSByZXNwdWVzdGEgdHJ1ZSBvIGZhbHNlIGJhc2FkbyBlbiB1bmEgZXN0cnVjdHVyYSBzcmluZyBiaW5hbnJpYSBzZWd1biBcclxuICAgICogICAgICAgICAgICAgIGxhIHBvc2ljaW9uIGRhZGEgZGVsIHRvb2xiYXIuIHNlIHBhc2Egc3RyaW5nIGJpbmFyaW8gcXVlIGNvbnRpZW5lIDEgeSAwIGVuIHJlcHJlc2VudGFjaW9uIFxyXG4gICAgKiAgICAgICAgICAgICAgZGUgbGFzIHByb3BpZXN0YWRlcyBhZG1pbmlzdHJhZG9yLGNvbnN1bHRhcixlamVjdXRhcixpbXByaW1pciBldGMgLi4uIGNhZGEgcG9zaWNpb24gc2VjdWVuY2lhbCBcclxuICAgICogICAgICAgICAgICAgIHNpIGVzdGEgZW4gMSBlcyB0cnVlIHkgMCBlbiBmYWxzZSB5IGRldnVsZXZlIGVsIHZhbG9yIHNlZ3VuIGxvIHJlcXVpZXJhIGVsIHVzdWFyaW86XHJcbiAgICAqICAgICAgICAgICAgICBzdHJpbmdiaW5hcmlvIDogJzEwMTEnIHkgcG9zaWNpb24gZXMgMiwgcG9yIHRhbnRvIHNlIHRhcmUgMCB5IGVzIGZhbHNlIHF1ZSByZXByZXNlbnRhIG9wY2lvbiBjb25zdWx0YXIuXHJcbiAgICAqICAgICAgICAgICAgICBFc3RydWN0dXJhIHN0cmluZyBiaW5hcmlvOlxyXG4gICAgKiAgICAgICAgICAgICAgUG9zaWNpw7NuIDpcclxuICAgICogICAgICAgICAgICAgIDAuICBBZG1pbmlzdHJhZG9yICAgICAgICA2LiAgRGVzY2FyZ2FyICAgICAgMTIuIFJldmVyc2FyIGFwcm9iYXIgICAgICAxOC4gUmV2ZXJzYXIgYW51bGFyIGNvbnRhYmlsaXphZG9cclxuICAgICogICAgICAgICAgICAgIDEuICBpbnNlcnRhciAgICAgICAgICAgICA3LiAgRWplY3V0YXIgICAgICAgMTMuIEFudWxhci5cclxuICAgICogICAgICAgICAgICAgIDIuICBBY3R1YWxpemFyICAgICAgICAgICA4LiAgRW52aWFyICAgICAgICAgMTQuIHJldmVyc2FyIGFudWxhclxyXG4gICAgKiAgICAgICAgICAgICAgMy4gIGNvbnN1bHRhciAgICAgICAgICAgIDkuIEltcHJpbWlyICAgICAgICAxNS4gY29udGFiaWxpemFyXHJcbiAgICAqICAgICAgICAgICAgICA0LiAgRWxpbWluYXIgICAgICAgICAgICAgMTAuIFZpc2libGUgICAgICAgIDE2LiByZXZlcnNhciBjb250YWJpbGl6YXJcclxuICAgICogICAgICAgICAgICAgIDUuICBBbnVsYXIgICAgICAgICAgICAgICAxMS4gQXByb2JhciAgICAgICAgMTcuIGFudWxhciBjb250YWJpbGl6YWRvICAgICAgIFxyXG4gICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgKiBAYXV0aG9yIEluZy4gV2lsbWVyIEJyaWNlw7FvXHJcbiAgICAqL1xyXG4gICAgIHB1YmxpYyBnZXRSZXNwb25zZVBlcmZpbFRvb2xiYXIoIHN0cmluZ2JpbmFyaW8gOiBzdHJpbmcsIHBvc2l0aW9uIDogbnVtYmVyICl7XHJcbiAgICAgICAgICBsZXQgYmluYXJpbyA9IHN0cmluZ2JpbmFyaW8uc3Vic3RyaW5nKHBvc2l0aW9uLHBvc2l0aW9uKzEpIDtcclxuICAgICAgICAgIGlmIChiaW5hcmlvPT1cIjFcIil7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IFxyXG4gICAgICAgICAgfSAgIFxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlOyBcclxuICAgICB9XHJcblxyXG4gLyoqXHJcbiAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgICAqIEByZXR1cm4gSnNvbiBkYXRhXHJcbiAgICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICAgKi9cclxuICBwdWJsaWMgZ2V0SVBBZGRyZXNzKCl7ICBcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcImh0dHA6Ly9hcGkuaXBpZnkub3JnLz9mb3JtYXQ9anNvblwiKSBcclxuICAgIC5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgY2F1Z2h0IGluIHNlcnZpY2UnKVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpcF9hZHJlc3MnLCAnMTI3LjAuMC4xJyk7XHJcbiAgICAgICAgLy9IYW5kbGUgdGhlIGVycm9yIGhlcmVcclxuXHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTsgICAgLy9SZXRocm93IGl0IGJhY2sgdG8gY29tcG9uZW50XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgXHJcbiAgfVxyXG4gLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBJcCBkZWwgY2xpZW50ZVxyXG4gICogQHJldHVybiBKc29uIGRhdGFcclxuICAqIEBhdXRob3IgSW5nLiBXaWxtZXIgQnJpY2Vub1xyXG4gICovXHJcbiAgcHVibGljIHNldElwQWRyZXNzKCl7XHJcbiAgICB0aGlzLmdldElQQWRkcmVzcygpLnN1YnNjcmliZSggKHJlc3A6IGFueSkgICA9PiB7XHJcbiAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lwX2FkcmVzcycsIHJlc3AuaXApO1xyXG4gICAgICAgICB0aGlzLmlwX2FkcmVzcyA9IHJlc3AuaXA7XHJcbiAgICB9KTsgIFxyXG4gIH0gXHJcbiAvKipcclxuICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGVsIElwIGRlbCBjbGllbnRlXHJcbiAgKiBAcmV0dXJuIEpzb24gZGF0YVxyXG4gICogQGF1dGhvciBJbmcuIFdpbG1lciBCcmljZW5vXHJcbiAgKi9cclxuICBwdWJsaWMgZ2V0SXBBZHJlc3MoKXtcclxuICAgIHRoaXMuaXBfYWRyZXNzID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaXBfYWRyZXNzJyk7ICBcclxuICB9IFxyXG5cclxuICAgLyoqXHJcbiAgKiBAZGVzY3JpcHRpb24gT2J0aWVuZSBlbCBJcCBkZWwgY2xpZW50ZVxyXG4gICogQHJldHVybiBKc29uIGRhdGFcclxuICAqIEBkaWEgMTktMDUtMjAyMlxyXG4gICovICBcclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlQXVkaXRvcmlhKHNubzpNU25vTG9nW10pe1xyXG4gICAgICBsZXQgYm9keT1bXTtcclxuICAgICAgc25vLmZvckVhY2goZT0+IHtib2R5LnB1c2goZS5kYXRhSW50ZWZhY2UoKSl9KTtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElSZXNwb25zZT4oYCR7dGhpcy5VUkx9L2Rhby9zbm8vc2VndXJpZGFkX2Rhby5waHA/YCxib2R5LFxyXG4gICAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKX0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHJldHJ5KDMpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVyRXJyb3IpLFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtyZXR1cm4gcmVzO30pXHJcbiAgICAgICk7XHJcbiAgICB9ICBcclxuXHJcbiAvKiogIFxyXG4gICogQGRlc2NyaXB0aW9uIE9idGllbmUgbG9zIHRpcG9zIGRlIGRlcG9zaXRvcyAgKiBcclxuICAqIEBwYXJhbSBwcm9jZWRlIDogcHJvY2VkZSBkZWwgbW9kdWxvXHJcbiAgKiBAcGFyYW0gaWRBcnRpY3VsbyA6IGlkIGRlbCBhcnRpY3Vsb1xyXG4gICogQHBhcmFtIGlkVXN1YXJpbyA6IGlkIHVzdWFyaW8gcGVybWl0aWRvXHJcbiAgKiBAcmV0dXJucyBcclxuICAqIEBhdXRob3IgSmF2aWVyIFRvdmFyXHJcbiAgKiBAZGF0ZSAyMy0xMS0yMDIyXHJcbiAgKi8gICAgICBcclxuICBwdWJsaWMgZ2V0RGVwb3NpdFR5cGUocHJvY2VkZTpzdHJpbmcsaWRBcnRpY3VsbzpudW1iZXIsaWRVc3VhcmlvPzpudW1iZXIpe1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVJlc3BvbnNlPihgJHt0aGlzLlVSTH0vZGFvL3Npdi9jYXRhbG9nb19wYXJhbWV0cml6YWRvX2Rhby5waHA/Z2V0PSR7cHJvY2VkZX0maWQ9JHtpZEFydGljdWxvfSZpPSR7aWRVc3VhcmlvfWAsXHJcbiAgICB7IGhlYWRlcnM6IHRoaXMuZ2V0SHR0cEhlYWRlcnMoKSB9KS5waXBlKFxyXG4gICAgICByZXRyeSgzKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZXJFcnJvciksXHJcbiAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzLmRhdGEgPSByZXMuZGF0YS5tYXAoZSA9PiBuZXcgTVRpcG9EZXBvc2l0b3MoZSkpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAgICAgICBcclxufVxyXG5cclxuICBcclxuaW50ZXJmYWNlIGZpbHRyb0N1ZW50YXNQcmVzdXB1ZXN0byB7XHJcbiAgdGlwbz86ICdFJyB8ICdSJyxcclxuICBlc3RhZG8/OiAnQycgfCAnUydcclxufVxyXG5cclxuXHJcbiJdfQ==