@trudb/tru-common-lib 0.1.233 → 0.1.235

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.
@@ -289,13 +289,22 @@ export class TruEntityAccessor {
289
289
  return (source);
290
290
  };
291
291
  downloadFromUrl = (url, data) => {
292
- if (data)
293
- data = this.formatAsUrlParameters(data);
294
- const body = { title: 'download request' };
295
- const headers = { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' };
296
- this.http.post(this._baseUrl + url, body, { headers }).subscribe((response) => {
297
- this.saveDownloadedFile(response);
298
- });
292
+ let xhr = new XMLHttpRequest();
293
+ xhr.onreadystatechange = (response) => {
294
+ if (xhr.readyState == XMLHttpRequest.DONE) {
295
+ if (xhr.status == 200) {
296
+ this.saveDownloadedFile(response);
297
+ }
298
+ else {
299
+ this.uiNotification.error(xhr.status + ': ' + xhr.statusText);
300
+ console.log(xhr.responseText);
301
+ }
302
+ }
303
+ };
304
+ xhr.open('POST', this._baseUrl + url);
305
+ xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
306
+ xhr.responseType = 'arraybuffer';
307
+ xhr.send(JSON.stringify(data));
299
308
  };
300
309
  downloadFromService = (serviceName, data) => {
301
310
  this.downloadFromUrl(serviceName, data);
@@ -349,4 +358,4 @@ export class TruEntityAccessor {
349
358
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TruEntityAccessor, decorators: [{
350
359
  type: Injectable
351
360
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.TruAppEnvironment }, { type: i3.TruUiNotification }, { type: i4.TruUser }] });
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWVudGl0eS1hY2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvc2VydmljZXMvdHJ1LWVudGl0eS1hY2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBc0MsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS2xGLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDO0FBRWhDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBT25ELE1BQU0sT0FBTyxpQkFBaUI7SUFPbEI7SUFDQTtJQUNBO0lBQ0E7SUFURixjQUFjLENBQW9CO0lBQ2xDLGNBQWMsQ0FBaUI7SUFDL0IsZUFBZSxHQUFXLENBQUMsQ0FBQztJQUM1QixRQUFRLENBQVM7SUFFekIsWUFDVSxJQUFnQixFQUNoQixjQUFpQyxFQUNqQyxjQUFpQyxFQUNqQyxJQUFhO1FBSGIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQVM7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQztRQUMxRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxXQUEyQjtRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO0lBQ2xELENBQUM7SUFFTyxtQkFBbUIsR0FBRyxDQUFDLE1BQTRCLEVBQUUsRUFBRTtRQUM3RCxPQUFPLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUMsQ0FBQTtJQUVPLGdCQUFnQixHQUFHLENBQUMsUUFBZSxFQUFFLFVBQWtCLEVBQUUsRUFBRTtRQUNqRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjO1lBQ3ZELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsNkNBQTZDLENBQUMsQ0FBQztJQUNsRyxDQUFDLENBQUE7SUFFTyxrQkFBa0IsR0FBRyxDQUFDLEtBQWtCLEVBQUUsUUFBdUIsRUFBRSxRQUFnQixFQUFFLE1BQXFCLElBQUksRUFBb0IsRUFBRTtRQUMxSSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsYUFBYTtZQUM5QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVoSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BJLENBQUMsQ0FBQTtJQUVPLGdCQUFnQixHQUFHLENBQUMsS0FBa0IsRUFBRSxRQUF1QixFQUFFLFFBQWdCLEVBQXVCLEVBQUU7UUFDOUcsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLGFBQWE7WUFDOUIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQVcsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRXZILE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdILENBQUMsQ0FBQTtJQUVELEdBQUcsR0FBRyxDQUFDLE1BQTRCLEVBQUUsaUJBQXNCLElBQUksRUFBRSxFQUFFO1FBQ2pFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLENBQUMsTUFBNEIsRUFDcEMsYUFBeUIsSUFBSSxFQUM3QixPQUFrQixFQUNsQixNQUFlLEVBQXdCLEVBQUU7UUFFekMsSUFBSSxLQUFVLENBQUM7UUFDZixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsSUFBSSxNQUFNO2dCQUNSLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztnQkFFckcsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakosQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLE1BQU07Z0JBQ1IsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOztnQkFFMUUsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RILENBQUM7UUFFRCxJQUFJLFVBQVUsSUFBSSxJQUFJO1lBQ3BCLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUIsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQ3RGLElBQUksQ0FBQyxNQUFNO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0lBRUYsZUFBZSxHQUFHLENBQ2hCLE1BQTRCLEVBQzVCLGFBQXlCLElBQUksRUFDN0IsVUFBcUIsSUFBSSxFQUF3QixFQUFFO1FBQ25ELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksVUFBVTtZQUNaLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FBQztJQUVGLDRCQUE0QixHQUFHLENBQzdCLE1BQTRCLEVBQzVCLGFBQXlCLElBQUksRUFDN0IsVUFBcUIsSUFBSSxFQUFjLEVBQUU7UUFDekMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxVQUFVO1lBQ1osS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDO0lBRUYsaUNBQWlDLEdBQUcsQ0FDbEMsTUFBNEIsRUFDNUIsTUFBaUMsU0FBUyxFQUMxQyxVQUFxQixJQUFJLEVBQWMsRUFBRTtRQUN6QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLEdBQUc7WUFDTCxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQztJQUVGLGtCQUFrQixHQUFHLENBQ25CLE1BQTRCLEVBQzVCLGFBQXlCLElBQUksRUFDN0IsTUFBcUIsSUFBSSxFQUN6QixhQUFzQixLQUFLLEVBQzNCLE1BQWlDLFNBQVMsRUFBMkIsRUFBRTtRQUV2RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQWtCLENBQUM7UUFDbEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxVQUFVO1lBQ1osS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDckMsSUFBSSxHQUFHO1lBQ0wsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtnQkFDdEYsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQyxDQUFDO0lBRUYseUJBQXlCLEdBQUcsQ0FDMUIsTUFBNEIsRUFDNUIsYUFBeUIsSUFBSSxFQUM3QixNQUFpQyxTQUFTLEVBQThCLEVBQUU7UUFFMUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFrQixDQUFDO1FBQ2xELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksVUFBVTtZQUNWLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3ZDLElBQUksR0FBRztZQUNILEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDLENBQUM7SUFFRixXQUFXLEdBQUcsQ0FDWixNQUE0QixFQUM1QixHQUE4QixFQUFFLEVBQUU7UUFFbEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFrQixDQUFDO1FBQ2xELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUN4RCxhQUFhLEVBQUUsYUFBYSxDQUFDLFVBQVU7U0FDeEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEksT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQ3RGLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUM7SUFFRix3QkFBd0IsR0FBRyxDQUN6QixNQUE0QixFQUM1QixHQUE4QixFQUFFLEVBQUU7UUFDbEMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztnQkFDeEQsYUFBYSxFQUFFLGFBQWEsQ0FBQyxjQUFjO2FBQzVDLENBQUMsQ0FBQztZQUNILElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hJLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtnQkFDdEYsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN4RCxhQUFhLEVBQUUsYUFBYSxDQUFDLFVBQVU7YUFDeEMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEksT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO2dCQUN0RixPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLG9CQUFvQixHQUFHLENBQ3JCLE1BQTRCLEVBQzVCLEdBQThCLEVBQzlCLGlCQUEwQixLQUFLLEVBQUUsRUFBRTtRQUVuQyxJQUFJLENBQUMsY0FBYztZQUNqQixjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUN4RCxjQUFjLEVBQUUsY0FBYztZQUM5QixhQUFhLEVBQUUsYUFBYSxDQUFDLGNBQWM7U0FDNUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLE1BQU07WUFDUixPQUFPLE1BQU0sQ0FBQztRQUNoQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGLHlCQUF5QixHQUFHLENBQzFCLE1BQTRCLEVBQzVCLGFBQXlCLElBQUksRUFDN0IsSUFBbUIsRUFDbkIsaUJBQTBCLEtBQUssRUFBRSxFQUFFO1FBRW5DLElBQUksQ0FBQyxjQUFjO1lBQ2pCLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQ3hELGNBQWMsRUFBRSxjQUFjO1lBQzlCLGFBQWEsRUFBRSxhQUFhLENBQUMsY0FBYztTQUM1QyxDQUFDLENBQUM7UUFFSCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbEcsSUFBSSxVQUFVO1lBQ1osS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUMsOENBQThDO1lBQy9ELE9BQU8sRUFBRSxDQUFDO1FBQ1osSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBRXBCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBa0IsQ0FBQztZQUNsRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUc7Z0JBQ25DLFNBQVMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTTtZQUMzQixPQUFPLE9BQU8sQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQTtJQUVELG9CQUFvQixHQUFHLENBQ3JCLE1BQTRCLEVBQzVCLFVBQWUsRUFDZixHQUFXLEVBQXdCLEVBQUU7UUFDckMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUUsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUcxQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQWtCLENBQUM7UUFDbEQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUvQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxFLElBQUksWUFBWSxDQUFDLE1BQU07WUFDckIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFMUIsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2pGLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUM7SUFFRix3QkFBd0IsR0FBRyxDQUN6QixHQUE4QixFQUM5QixpQkFBMEIsS0FBSyxFQUFFLEVBQUU7UUFFbkMsSUFBSSxDQUFDLGNBQWM7WUFDakIsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDeEQsY0FBYyxFQUFFLGNBQWM7WUFDOUIsYUFBYSxFQUFFLGFBQWEsQ0FBQyxjQUFjO1NBQzVDLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ILElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxNQUFNO1lBQ1IsT0FBTyxNQUFNLENBQUM7UUFDaEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRixZQUFZLEdBQUcsQ0FDYixNQUE0QixFQUM1QixLQUFVLEVBQUUsRUFBRTtRQUNkLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtZQUN0RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEQsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztJQUVGLE1BQU0sR0FBRyxDQUNQLE1BQTRCLEVBQzVCLFFBQWdCLEVBQ2hCLFVBQXNCLEVBQ3RCLFVBQXlCLEVBQ3pCLE9BQVksRUFBRSxFQUFFO1FBRWhCLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxHQUFHO1lBQ1QsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsS0FBSztZQUNmLFlBQVksRUFBRSxLQUFLO1lBQ25CLFVBQVUsRUFBRSxJQUFxQjtZQUNqQyxjQUFjLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDM0IsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQztRQUNGLElBQUksT0FBTyxDQUFDLEtBQUs7WUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLE9BQU8sQ0FBQyxRQUFRO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksT0FBTyxDQUFDLFlBQVk7WUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RELElBQUksVUFBVTtnQkFDWixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2dCQUM1RCxPQUFPO1lBQ1QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDOUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFL0UsSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMvQixHQUFHLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1lBQzVCLElBQUksR0FBRyxDQUFDLFVBQVUsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzFDLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFFeEIsQ0FBQztxQkFDSSxDQUFDO29CQUNKLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcscUJBQXFCLENBQUMsQ0FBQztRQUN4RCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDeEUsR0FBRyxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUM7UUFDakMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsS0FBSyxFQUFFLFNBQVM7U0FDakIsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDLENBQUM7SUFFTSxxQkFBcUIsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFO1FBQzVDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLFNBQVM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQ1Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDO2dCQUN4QixHQUFHLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUMxQixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUE7SUFFRCxlQUFlLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBUyxFQUFFLEVBQUU7UUFDM0MsSUFBSSxJQUFJO1lBQ04sSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLEVBQUUsY0FBYyxFQUFFLGtEQUFrRCxFQUFFLENBQUM7UUFFdkYsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQ25CLElBQUksRUFDSixFQUFFLE9BQU8sRUFBRSxDQUNaLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsbUJBQW1CLEdBQUcsQ0FBQyxXQUFtQixFQUFFLElBQVMsRUFBRSxFQUFFO1FBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQztJQUVGOzs7Ozs7TUFNRTtJQUNGLGFBQWEsR0FBRyxDQUFDLFVBQWtCLEVBQUUsVUFBa0IsRUFBRSxFQUFFO1FBQ3pELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUM7YUFDeEUsY0FBYyxDQUFDO1lBQ2QsT0FBTyxFQUFFLE1BQU07WUFDZixTQUFTLEVBQUUsTUFBTTtZQUNqQixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1NBQzVCLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtZQUFFLENBQUM7WUFDekYsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsQ0FBQTtJQUFBLENBQUMsQ0FBQTtJQUVPLGtCQUFrQixHQUFHLENBQUMsUUFBYSxFQUFFLEVBQUU7UUFDN0MsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0I7WUFDckIsT0FBTyxDQUFDLHdDQUF3QztRQUNsRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMscUNBQXFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5RSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDLENBQUE7SUFHTyxxQ0FBcUMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQy9ELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUN6QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxNQUFNLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsWUFBWTtZQUNmLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUE7dUdBemFVLGlCQUFpQjsyR0FBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5TWFuYWdlciwgRW50aXR5UXVlcnksIEZldGNoU3RyYXRlZ3kgfSBmcm9tIFwiYnJlZXplLWNsaWVudFwiO1xyXG5pbXBvcnQgeyBUcnVFbnRpdHlCYXNlIH0gZnJvbSAnLi4vYmFzZS1jbGFzc2VzL3RydS1lbnRpdHktYmFzZSdcclxuaW1wb3J0IHsgVHJ1VWlOb3RpZmljYXRpb24gfSBmcm9tIFwiLi90cnUtdWktbm90aWZpY2F0aW9uXCI7XHJcbmltcG9ydCB7IFRydURhdGFDb250ZXh0IH0gZnJvbSBcIi4vdHJ1LWRhdGEtY29udGV4dFwiO1xyXG5pbXBvcnQgeyBUcnVCcmVlemVDb250ZXh0IH0gZnJvbSBcIi4vdHJ1LWJyZWV6ZS1jb250ZXh0LWZhY3RvcnlcIjtcclxuaW1wb3J0ICogYXMgXyBmcm9tIFwidW5kZXJzY29yZVwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IGRlZmVyLCBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcnVBcHBFbnZpcm9ubWVudCB9IGZyb20gXCIuL3RydS1hcHAtZW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHsgVHJ1Q2hvaWNlIH0gZnJvbSBcIi4uL2NsYXNzZXMvdHJ1LWNob2ljZVwiO1xyXG5pbXBvcnQgeyBUcnVOYW1lVmFsdWUgfSBmcm9tIFwiLi4vY2xhc3Nlcy90cnUtbmFtZS12YWx1ZVwiO1xyXG5pbXBvcnQgeyBUcnVVc2VyIH0gZnJvbSBcIi4vdHJ1LXVzZXJcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRydUVudGl0eUFjY2Vzc29yIHtcclxuICBwcml2YXRlIF9icmVlemVDb250ZXh0ITogVHJ1QnJlZXplQ29udGV4dDtcclxuICBwcml2YXRlIF9lbnRpdHlNYW5hZ2VyITogRW50aXR5TWFuYWdlcjtcclxuICBwcml2YXRlIF9tYXhSZWNvcmRDb3VudDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9iYXNlVXJsOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBhcHBFbnZpcm9ubWVudDogVHJ1QXBwRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIHVpTm90aWZpY2F0aW9uOiBUcnVVaU5vdGlmaWNhdGlvbixcclxuICAgIHByaXZhdGUgdXNlcjogVHJ1VXNlcikge1xyXG4gICAgdGhpcy5fbWF4UmVjb3JkQ291bnQgPSB0aGlzLmFwcEVudmlyb25tZW50Lm1heFJlY29yZENvdW50O1xyXG4gICAgdGhpcy5fYmFzZVVybCA9IHRoaXMuYXBwRW52aXJvbm1lbnQuYXBwVXJpO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNvbnRleHQoZGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0KSB7XHJcbiAgICB0aGlzLl9icmVlemVDb250ZXh0ID0gZGF0YUNvbnRleHQuYnJlZXplQ29udGV4dDtcclxuICAgIHRoaXMuX2VudGl0eU1hbmFnZXIgPSBkYXRhQ29udGV4dC5lbnRpdHlNYW5hZ2VyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRRdWVyeVNlcnZpY2VOYW1lID0gKGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UpID0+IHtcclxuICAgIHJldHVybiAnUXVlcnknICsgZW50aXR5Lm5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhcm5JZk1heFJlY29yZHMgPSAoZW50aXRpZXM6IGFueVtdLCBlbnRpdHlOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGlmIChlbnRpdGllcy5sZW5ndGggPj0gdGhpcy5hcHBFbnZpcm9ubWVudC5tYXhSZWNvcmRDb3VudClcclxuICAgICAgdGhpcy51aU5vdGlmaWNhdGlvbi53YXJuaW5nKCdbJyArIGVudGl0eU5hbWUgKyAnXSBoYXMgbW9yZSByZWNvcmRzIGF2YWlsYWJsZSB0aGFuIHN1cHBvcnRlZCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRRdWVyeUNob2ljZXMgPSAocXVlcnk6IEVudGl0eVF1ZXJ5LCBlbnRpdGllczogQXJyYXk8RW50aXR5PiwgcEtleU5hbWU6IHN0cmluZywgaGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IEFycmF5PFRydUNob2ljZT4gPT4ge1xyXG4gICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5Lm9yZGVyQnlDbGF1c2UpXHJcbiAgICAgIHJldHVybiBfLm1hcChlbnRpdGllcywgKGVudGl0eTogYW55KSA9PiB7IHJldHVybiB7IHZhbHVlOiB7ICQ6IGVudGl0eVtwS2V5TmFtZV0gfSwgbGFiZWw6IGhpZCAhPT0gbnVsbCA/IGhpZCA6IGVudGl0eS5ISUQgfTsgfSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBfLm1hcChlbnRpdGllcywgKGVudGl0eTogYW55KSA9PiB7IHJldHVybiB7IHZhbHVlOiB7ICQ6IGVudGl0eVtwS2V5TmFtZV0gfSwgbGFiZWw6IGhpZCAhPT0gbnVsbCA/IGhpZCA6IGVudGl0eS5ISUQgfTsgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE5hbWVWYWx1ZXMgPSAocXVlcnk6IEVudGl0eVF1ZXJ5LCBlbnRpdGllczogQXJyYXk8RW50aXR5PiwgcEtleU5hbWU6IHN0cmluZyk6IEFycmF5PFRydU5hbWVWYWx1ZT4gPT4ge1xyXG4gICAgICBpZiAocXVlcnkgJiYgcXVlcnkub3JkZXJCeUNsYXVzZSlcclxuICAgICAgICByZXR1cm4gXy5tYXAoZW50aXRpZXMsIChlbnRpdHk6IGFueSkgPT4geyByZXR1cm4geyBuYW1lOiBlbnRpdHkuTmFtZSwgdmFsdWU6IHsgJDogZW50aXR5LlZhbHVlIH0sIGVudGl0eTogZW50aXR5IH07IH0pO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIF8ubWFwKGVudGl0aWVzLCAoZW50aXR5OiBhbnkpID0+IHsgcmV0dXJuIHsgbmFtZTogZW50aXR5Lk5hbWUsIHZhbHVlOiB7ICQ6IGVudGl0eS5WYWx1ZSB9LCBlbnRpdHk6IGVudGl0eSB9OyB9KTtcclxuICB9XHJcblxyXG4gIGFkZCA9IChlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLCBjb250ZXh0RmlsdGVyczogYW55ID0gbnVsbCkgPT4ge1xyXG4gICAgbGV0IG5ld0VudGl0eSA9IHRoaXMuX2VudGl0eU1hbmFnZXIuY3JlYXRlRW50aXR5KGVudGl0eS5wcm90b3R5cGUuZW50aXR5VHlwZSk7XHJcbiAgICByZXR1cm4gbmV3RW50aXR5O1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaCA9IChlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgc2V0dXBRdWVyeTogYW55IHwgbnVsbCA9IG51bGwsXHJcbiAgICBleHBhbmRzOiBbXSB8IG51bGwsXHJcbiAgICBnbG9iYWw6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEVudGl0eVtdPiA9PiB7XHJcblxyXG4gICAgdmFyIHF1ZXJ5OiBhbnk7XHJcbiAgICBpZiAoZXhwYW5kcyAmJiBleHBhbmRzLmxlbmd0aCkge1xyXG4gICAgICBpZiAoZ2xvYmFsKVxyXG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkuZXhwYW5kKGV4cGFuZHMuam9pbignLCAnKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpLmV4cGFuZChleHBhbmRzLmpvaW4oJywgJykpLnRvcCh0aGlzLmFwcEVudmlyb25tZW50Lm1heFJlY29yZENvdW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChnbG9iYWwpXHJcbiAgICAgICAgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkudG9wKHRoaXMuYXBwRW52aXJvbm1lbnQubWF4UmVjb3JkQ291bnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZXR1cFF1ZXJ5ICE9IG51bGwpXHJcbiAgICAgIHF1ZXJ5ID0gc2V0dXBRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5fZW50aXR5TWFuYWdlci5leGVjdXRlUXVlcnkocXVlcnkpLnRoZW4oKHF1ZXJ5RGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghZ2xvYmFsKVxyXG4gICAgICAgIHRoaXMud2FybklmTWF4UmVjb3JkcyhxdWVyeURhdGEucmVzdWx0cywgZW50aXR5Lm5hbWUpO1xyXG4gICAgICByZXR1cm4gcXVlcnlEYXRhLnJlc3VsdHM7XHJcbiAgICB9KSkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaENhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIGV4cGFuZHM6IFtdIHwgbnVsbCA9IG51bGwpOiBPYnNlcnZhYmxlPEVudGl0eVtdPiA9PiB7XHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG4gICAgcmV0dXJuIG9mKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaENhY2hlT25seVN5bmNocm9ub3VzbHkgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgc2V0dXBRdWVyeTogYW55IHwgbnVsbCA9IG51bGwsXHJcbiAgICBleHBhbmRzOiBbXSB8IG51bGwgPSBudWxsKTogQXJyYXk8YW55PiA9PiB7XHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZDYWNoZU9ubHlTeW5jaHJvbm91c2x5ID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcclxuICAgIGV4cGFuZHM6IFtdIHwgbnVsbCA9IG51bGwpOiBBcnJheTxhbnk+ID0+IHtcclxuICAgIGxldCBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpO1xyXG4gICAgaWYgKHJlZilcclxuICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShlbnRpdHkubmFtZSArICdSZWYnLCAnPT0nLCByZWYpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoUXVlcnlDaG9pY2VzID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHNldHVwUXVlcnk6IGFueSB8IG51bGwgPSBudWxsLFxyXG4gICAgaGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcclxuICAgIGdvVG9TZXJ2ZXI6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VHJ1Q2hvaWNlW10+ID0+IHtcclxuICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgIGNvbnN0IHBrZXlOYW1lID0gZW50aXR5Lm5hbWUgKyAnUmVmJyBhcyBPYmplY3RLZXk7XHJcbiAgICBsZXQgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpID8/IHF1ZXJ5O1xyXG4gICAgaWYgKHJlZilcclxuICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShlbnRpdHkubmFtZSArICdSZWYnLCAnPT0nLCByZWYpO1xyXG4gICAgcXVlcnkgPSBxdWVyeS50b3AodGhpcy5hcHBFbnZpcm9ubWVudC5tYXhSZWNvcmRDb3VudCk7XHJcbiAgICBpZiAoZ29Ub1NlcnZlcikge1xyXG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHF1ZXJ5RGF0YS5yZXN1bHRzLCBwa2V5TmFtZSwgbnVsbCk7XHJcbiAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YodGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSksIHBrZXlOYW1lLCBudWxsKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoTmFtZVZhbHVlc0NhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VHJ1TmFtZVZhbHVlW10+ID0+IHtcclxuICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgIGNvbnN0IHBrZXlOYW1lID0gZW50aXR5Lm5hbWUgKyAnUmVmJyBhcyBPYmplY3RLZXk7XHJcbiAgICBsZXQgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICAgIHF1ZXJ5ID0gc2V0dXBRdWVyeShxdWVyeSkgPz8gcXVlcnk7XHJcbiAgICBpZiAocmVmKVxyXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKTtcclxuICAgIHJldHVybiBvZih0aGlzLmZvcm1hdE5hbWVWYWx1ZXMocXVlcnksIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSksIHBrZXlOYW1lKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWYgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBwa2V5TmFtZSA9IGVudGl0eS5uYW1lICsgJ1JlZicgYXMgT2JqZWN0S2V5O1xyXG4gICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgZmV0Y2hTdHJhdGVneTogRmV0Y2hTdHJhdGVneS5Gcm9tU2VydmVyXHJcbiAgICB9KTtcclxuICAgIHZhciBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpLndoZXJlKGVudGl0eS5uYW1lICsgJ1JlZicsICc9PScsIHJlZikudXNpbmcocXVlcnlPcHRpb25zKTtcclxuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHF1ZXJ5RGF0YS5yZXN1bHRzLCBwa2V5TmFtZSwgbnVsbCk7XHJcbiAgICB9KSkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaEJ5UmVmUHJlZmVyZWRDYWNoZSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICByZWY6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGxldCBjYWNoZWRFbnRpdHkgPSB0aGlzLnNlYXJjaEJ5UmVmQ2FjaGVPbmx5KGVudGl0eSwgcmVmKTtcclxuICAgIGlmIChjYWNoZWRFbnRpdHkpIHtcclxuICAgICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgICBmZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LkZyb21Mb2NhbENhY2hlXHJcbiAgICAgIH0pO1xyXG4gICAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKS53aGVyZShlbnRpdHkubmFtZSArICdSZWYnLCAnPT0nLCByZWYpLnVzaW5nKHF1ZXJ5T3B0aW9ucyk7XHJcbiAgICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBxdWVyeURhdGEucmVzdWx0c1swXTtcclxuICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbVNlcnZlclxyXG4gICAgICB9KTtcclxuICAgICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gcXVlcnlEYXRhLnJlc3VsdHNbMF07XHJcbiAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZDYWNoZU9ubHkgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG5cclxuICAgIGlmICghaW5jbHVkZURlbGV0ZWQpXHJcbiAgICAgIGluY2x1ZGVEZWxldGVkID0gZmFsc2U7XHJcbiAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICBpbmNsdWRlRGVsZXRlZDogaW5jbHVkZURlbGV0ZWQsXHJcbiAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbUxvY2FsQ2FjaGVcclxuICAgIH0pO1xyXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSlbMF07XHJcbiAgICBpZiAocmVzdWx0KVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZBcnJheUNhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIHJlZnM6IEFycmF5PG51bWJlcj4sXHJcbiAgICBpbmNsdWRlRGVsZXRlZDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgXHJcbiAgICBpZiAoIWluY2x1ZGVEZWxldGVkKVxyXG4gICAgICBpbmNsdWRlRGVsZXRlZCA9IGZhbHNlO1xyXG4gICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgaW5jbHVkZURlbGV0ZWQ6IGluY2x1ZGVEZWxldGVkLFxyXG4gICAgICBmZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LkZyb21Mb2NhbENhY2hlXHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG5cclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG4gICAgaWYgKHF1ZXJ5ID09PSBudWxsKS8vc2V0dXBRdWVyeSgpIHJldHVybmVkIG51bGwgdG8gc2VsZWN0IG5vIHJvd3NcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgaWYgKHJlZnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICAgIGNvbnN0IHBrZXlOYW1lID0gZW50aXR5Lm5hbWUgKyAnUmVmJyBhcyBPYmplY3RLZXk7XHJcbiAgICAgIHZhciBwcmVkaWNhdGUgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVByZWRpY2F0ZShwa2V5TmFtZSwgJz09JywgcmVmc1swXSk7XHJcbiAgICAgIF8ucmVzdChyZWZzLCAxKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUub3IocGtleU5hbWUsICc9PScsIHJlZik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKHByZWRpY2F0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlc3VsdHMgPSB0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG4gICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGgpXHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hCeVJlZldpdGhRdWVyeSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnksXHJcbiAgICByZWY6IG51bWJlcik6IE9ic2VydmFibGU8RW50aXR5W10+ID0+IHtcclxuICAgIHZhciBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpO1xyXG4gICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBwa2V5TmFtZSA9IGVudGl0eS5uYW1lICsgJ1JlZicgYXMgT2JqZWN0S2V5O1xyXG4gICAgdmFyIHByZWRpY2F0ZSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUHJlZGljYXRlKHBrZXlOYW1lLCAnPT0nLCByZWYpO1xyXG4gICAgcXVlcnkgPSBxdWVyeS53aGVyZShwcmVkaWNhdGUpO1xyXG5cclxuICAgIHZhciBsb2NhbFJlc3VsdHMgPSB0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG5cclxuICAgIGlmIChsb2NhbFJlc3VsdHMubGVuZ3RoKVxyXG4gICAgICByZXR1cm4gb2YobG9jYWxSZXN1bHRzKTtcclxuXHJcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhKSA9PiB7XHJcbiAgICAgIHJldHVybiBxdWVyeURhdGEucmVzdWx0cztcclxuICAgIH0pKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoVXNlckJ5UmVmQ2FjaGVPbmx5ID0gKFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG5cclxuICAgIGlmICghaW5jbHVkZURlbGV0ZWQpXHJcbiAgICAgIGluY2x1ZGVEZWxldGVkID0gZmFsc2U7XHJcbiAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICBpbmNsdWRlRGVsZXRlZDogaW5jbHVkZURlbGV0ZWQsXHJcbiAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbUxvY2FsQ2FjaGVcclxuICAgIH0pO1xyXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSgnUXVlcnlUcnVEYlVzZXInKS53aGVyZSgnVHJ1RGJVc2VyUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSlbMF07XHJcbiAgICBpZiAocmVzdWx0KVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgY3VzdG9tU2VhcmNoID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHF1ZXJ5OiBhbnkpID0+IHtcclxuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLndhcm5JZk1heFJlY29yZHMocXVlcnlEYXRhLnJlc3VsdHMsIGVudGl0eS5uYW1lKTtcclxuICAgICAgcmV0dXJuIHF1ZXJ5RGF0YS5yZXN1bHRzO1xyXG4gICAgfSkpKTtcclxuICB9O1xyXG5cclxuICBleHBvcnQgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgZ3JpZFNwZWM6IHN0cmluZyxcclxuICAgIHNldHVwUXVlcnk6IGFueSB8IG51bGwsXHJcbiAgICBlbnRpdHlSZWZzOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgb3B0aW9uczogYW55KSA9PiB7XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICB2YXIgYXJncyA9IHtcclxuICAgICAgcnVuQXN5bmM6IGZhbHNlLFxyXG4gICAgICB1c2VOYW1lczogZmFsc2UsXHJcbiAgICAgIHVzZUVtcHR5VGFnczogZmFsc2UsXHJcbiAgICAgIGVudGl0eVJlZnM6IG51bGwgYXMgc3RyaW5nIHwgbnVsbCxcclxuICAgICAgZW50aXR5VHlwZU5hbWU6IGVudGl0eS5uYW1lLFxyXG4gICAgICBncmlkU3BlYzogZ3JpZFNwZWNcclxuICAgIH07XHJcbiAgICBpZiAob3B0aW9ucy5hc3luYylcclxuICAgICAgYXJncy5ydW5Bc3luYyA9IHRydWU7XHJcbiAgICBpZiAob3B0aW9ucy51c2VOYW1lcylcclxuICAgICAgYXJncy51c2VOYW1lcyA9IHRydWU7XHJcbiAgICBpZiAob3B0aW9ucy51c2VFbXB0eVRhZ3MpXHJcbiAgICAgIGFyZ3MudXNlRW1wdHlUYWdzID0gdHJ1ZTtcclxuICAgIHZhciBxdWVyeVRleHQ7XHJcbiAgICBpZiAob3B0aW9ucy51c2VHcmlkKSB7XHJcbiAgICAgIGFyZ3MuZW50aXR5UmVmcyA9IGVudGl0eVJlZnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KCdub25hbWUnKTtcclxuICAgICAgaWYgKHNldHVwUXVlcnkpXHJcbiAgICAgICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgaWYgKHF1ZXJ5ID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy51aU5vdGlmaWNhdGlvbi53YXJuaW5nKCdObyByZWNvcmRzIHNlbGVjdGVkIGJ5IHF1ZXJ5Jyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXJ5VGV4dCA9IHF1ZXJ5Ll90b1VyaSh0aGlzLl9lbnRpdHlNYW5hZ2VyKTtcclxuICAgICAgICBxdWVyeVRleHQgPSBxdWVyeVRleHQuc3BsaXQoJz8nKVsxXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlOb3RpZmljYXRpb24uaW5mbyhhcmdzLnJ1bkFzeW5jID8gJ1F1ZXVpbmcgZXhwb3J0Li4uJyA6ICdFeHBvcnRpbmcuLi4nKTtcclxuXHJcbiAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh4aHIucmVzcG9uc2VUeXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuX2Jhc2VVcmwgKyAnL2FwaS9leHBvcnQvZXhlY3V0ZScpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04Jyk7XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgdXNlclJlZjogdGhpcy51c2VyLmFjdGl2ZVVzZXJSZWYsXHJcbiAgICAgIHJ1bkFzeW5jOiBhcmdzLnJ1bkFzeW5jLFxyXG4gICAgICB1c2VOYW1lczogYXJncy51c2VOYW1lcyxcclxuICAgICAgdXNlRW1wdHlUYWdzOiBhcmdzLnVzZUVtcHR5VGFncyxcclxuICAgICAgZW50aXR5UmVmczogYXJncy5lbnRpdHlSZWZzLFxyXG4gICAgICBlbnRpdHlUeXBlTmFtZTogYXJncy5lbnRpdHlUeXBlTmFtZSxcclxuICAgICAgZ3JpZFNwZWM6IGFyZ3MuZ3JpZFNwZWMsXHJcbiAgICAgIHF1ZXJ5OiBxdWVyeVRleHRcclxuICAgIH0pKVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0QXNVcmxQYXJhbWV0ZXJzID0gKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgdmFyIGJ1ZmZlciA9IFtdO1xyXG4gICAgZm9yICh2YXIgbmFtZSBpbiBkYXRhKSB7XHJcbiAgICAgIGlmICghZGF0YS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbbmFtZV07XHJcbiAgICAgIGJ1ZmZlci5wdXNoKFxyXG4gICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSArXHJcbiAgICAgICAgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICB2YXIgc291cmNlID0gYnVmZmVyLmpvaW4oJyYnKVxyXG4gICAgICAucmVwbGFjZSgvJTIwL2csICcrJyk7XHJcbiAgICByZXR1cm4gKHNvdXJjZSk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZEZyb21VcmwgPSAodXJsOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xyXG4gICAgaWYgKGRhdGEpXHJcbiAgICAgIGRhdGEgPSB0aGlzLmZvcm1hdEFzVXJsUGFyYW1ldGVycyhkYXRhKTtcclxuICAgIGNvbnN0IGJvZHkgPSB7IHRpdGxlOiAnZG93bmxvYWQgcmVxdWVzdCcgfTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04JyB9O1xyXG5cclxuICAgIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLl9iYXNlVXJsICsgdXJsLFxyXG4gICAgICBib2R5LFxyXG4gICAgICB7IGhlYWRlcnMgfVxyXG4gICAgKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zYXZlRG93bmxvYWRlZEZpbGUocmVzcG9uc2UpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgZG93bmxvYWRGcm9tU2VydmljZSA9IChzZXJ2aWNlTmFtZTogc3RyaW5nLCBkYXRhOiBhbnkpID0+IHtcclxuICAgIHRoaXMuZG93bmxvYWRGcm9tVXJsKHNlcnZpY2VOYW1lLCBkYXRhKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAqIFJlcXVlc3QgYW4gYWN0aW9uLlxyXG4gICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhY3Rpb24uXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gZW50aXR5UmVmcyAtIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGVudGl0eSBwa2V5IHZhbHVlcy5cclxuICAqIEByZXR1cm5zIHtwcm9taXNlfSBvbiBzdWNjZXNzLCBwYXNzZXMgdGhlIHJlc3VsdHMgdG8gc3VjY2VzcyBoYW5kbGVyOyBcclxuICAqICAgICAgb24gZmFpbHVyZSwgcGFzc2VzIGV4Y2VwdGlvbiB0byBmYWlsIGhhbmRsZXIuXHJcbiAgKi9cclxuICByZXF1ZXN0QWN0aW9uID0gKGFjdGlvbk5hbWU6IHN0cmluZywgZW50aXR5UmVmczogc3RyaW5nKSA9PiB7XHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KCdSZXF1ZXN0QWN0aW9uJyArIGFjdGlvbk5hbWUpXHJcbiAgICAud2l0aFBhcmFtZXRlcnMoe1xyXG4gICAgICAkbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICRlbmNvZGluZzogJ0pTT04nLFxyXG4gICAgICAkZGF0YTogeyByZWZzOiBlbnRpdHlSZWZzIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5fZW50aXR5TWFuYWdlci5leGVjdXRlUXVlcnkocXVlcnkpLnRoZW4oKHF1ZXJ5RGF0YTogYW55KSA9PiB7O1xyXG4gICAgICByZXR1cm4gcXVlcnlEYXRhLnJlc3VsdHM7XHJcbiAgICB9KSkpO1xyXG5gYH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlRG93bmxvYWRlZEZpbGUgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgdmFyIGhlYWRlcnMgPSByZXNwb25zZS5oZWFkZXJzO1xyXG4gICAgdmFyIGNvbnRlbnREaXNwb3NpdGlvbiA9IGhlYWRlcnMoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcclxuICAgIGlmICghY29udGVudERpc3Bvc2l0aW9uKVxyXG4gICAgICByZXR1cm47IC8vIE5PVEU6IGNhbm5vdCBzYXZlIHdpdGhvdXQgaGVhZGVyIGluZm9cclxuICAgIHZhciBmaWxlbmFtZSA9IHRoaXMuZXh0cmFjdEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbihjb250ZW50RGlzcG9zaXRpb24pO1xyXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVzcG9uc2UuZGF0YV0sIHsgdHlwZTogaGVhZGVycygnY29udGVudC10eXBlJykgfSk7XHJcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlbmFtZSk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBsaW5rLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbiA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcclxuICAgIHZhciBwYXJ0cyA9IF8ubWFwKHRleHQuc3BsaXQoJzsnKSwgZnVuY3Rpb24gKHBhcnQpIHsgcmV0dXJuIHBhcnQudHJpbSgpOyB9KTtcclxuICAgIHZhciBwcmVmaXggPSAnZmlsZW5hbWU9JztcclxuICAgIHZhciBmaWxlbmFtZVBhcnQgPSBfLmZpbmQocGFydHMsIGZ1bmN0aW9uIChwYXJ0KSB7IHJldHVybiBwYXJ0LnN1YnN0cmluZygwLCBwcmVmaXgubGVuZ3RoKSA9PT0gcHJlZml4IH0pO1xyXG4gICAgaWYgKCFmaWxlbmFtZVBhcnQpXHJcbiAgICAgIHJldHVybiAnZmlsZSc7XHJcbiAgICB2YXIgZmlsZW5hbWUgPSBmaWxlbmFtZVBhcnQuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpO1xyXG4gICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKC9cIi9nLCAnJyk7XHJcbiAgICByZXR1cm4gZmlsZW5hbWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWVudGl0eS1hY2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvc2VydmljZXMvdHJ1LWVudGl0eS1hY2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBc0MsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS2xGLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDO0FBRWhDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBT25ELE1BQU0sT0FBTyxpQkFBaUI7SUFPbEI7SUFDQTtJQUNBO0lBQ0E7SUFURixjQUFjLENBQW9CO0lBQ2xDLGNBQWMsQ0FBaUI7SUFDL0IsZUFBZSxHQUFXLENBQUMsQ0FBQztJQUM1QixRQUFRLENBQVM7SUFFekIsWUFDVSxJQUFnQixFQUNoQixjQUFpQyxFQUNqQyxjQUFpQyxFQUNqQyxJQUFhO1FBSGIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQVM7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQztRQUMxRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxXQUEyQjtRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO0lBQ2xELENBQUM7SUFFTyxtQkFB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QUE7SUFHTyxxQ0FBcUMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQy9ELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUN6QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxNQUFNLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsWUFBWTtZQUNmLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUE7dUdBN2FVLGlCQUFpQjsyR0FBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5TWFuYWdlciwgRW50aXR5UXVlcnksIEZldGNoU3RyYXRlZ3kgfSBmcm9tIFwiYnJlZXplLWNsaWVudFwiO1xyXG5pbXBvcnQgeyBUcnVFbnRpdHlCYXNlIH0gZnJvbSAnLi4vYmFzZS1jbGFzc2VzL3RydS1lbnRpdHktYmFzZSdcclxuaW1wb3J0IHsgVHJ1VWlOb3RpZmljYXRpb24gfSBmcm9tIFwiLi90cnUtdWktbm90aWZpY2F0aW9uXCI7XHJcbmltcG9ydCB7IFRydURhdGFDb250ZXh0IH0gZnJvbSBcIi4vdHJ1LWRhdGEtY29udGV4dFwiO1xyXG5pbXBvcnQgeyBUcnVCcmVlemVDb250ZXh0IH0gZnJvbSBcIi4vdHJ1LWJyZWV6ZS1jb250ZXh0LWZhY3RvcnlcIjtcclxuaW1wb3J0ICogYXMgXyBmcm9tIFwidW5kZXJzY29yZVwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IGRlZmVyLCBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcnVBcHBFbnZpcm9ubWVudCB9IGZyb20gXCIuL3RydS1hcHAtZW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHsgVHJ1Q2hvaWNlIH0gZnJvbSBcIi4uL2NsYXNzZXMvdHJ1LWNob2ljZVwiO1xyXG5pbXBvcnQgeyBUcnVOYW1lVmFsdWUgfSBmcm9tIFwiLi4vY2xhc3Nlcy90cnUtbmFtZS12YWx1ZVwiO1xyXG5pbXBvcnQgeyBUcnVVc2VyIH0gZnJvbSBcIi4vdHJ1LXVzZXJcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRydUVudGl0eUFjY2Vzc29yIHtcclxuICBwcml2YXRlIF9icmVlemVDb250ZXh0ITogVHJ1QnJlZXplQ29udGV4dDtcclxuICBwcml2YXRlIF9lbnRpdHlNYW5hZ2VyITogRW50aXR5TWFuYWdlcjtcclxuICBwcml2YXRlIF9tYXhSZWNvcmRDb3VudDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9iYXNlVXJsOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBhcHBFbnZpcm9ubWVudDogVHJ1QXBwRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIHVpTm90aWZpY2F0aW9uOiBUcnVVaU5vdGlmaWNhdGlvbixcclxuICAgIHByaXZhdGUgdXNlcjogVHJ1VXNlcikge1xyXG4gICAgdGhpcy5fbWF4UmVjb3JkQ291bnQgPSB0aGlzLmFwcEVudmlyb25tZW50Lm1heFJlY29yZENvdW50O1xyXG4gICAgdGhpcy5fYmFzZVVybCA9IHRoaXMuYXBwRW52aXJvbm1lbnQuYXBwVXJpO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNvbnRleHQoZGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0KSB7XHJcbiAgICB0aGlzLl9icmVlemVDb250ZXh0ID0gZGF0YUNvbnRleHQuYnJlZXplQ29udGV4dDtcclxuICAgIHRoaXMuX2VudGl0eU1hbmFnZXIgPSBkYXRhQ29udGV4dC5lbnRpdHlNYW5hZ2VyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRRdWVyeVNlcnZpY2VOYW1lID0gKGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UpID0+IHtcclxuICAgIHJldHVybiAnUXVlcnknICsgZW50aXR5Lm5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhcm5JZk1heFJlY29yZHMgPSAoZW50aXRpZXM6IGFueVtdLCBlbnRpdHlOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIGlmIChlbnRpdGllcy5sZW5ndGggPj0gdGhpcy5hcHBFbnZpcm9ubWVudC5tYXhSZWNvcmRDb3VudClcclxuICAgICAgdGhpcy51aU5vdGlmaWNhdGlvbi53YXJuaW5nKCdbJyArIGVudGl0eU5hbWUgKyAnXSBoYXMgbW9yZSByZWNvcmRzIGF2YWlsYWJsZSB0aGFuIHN1cHBvcnRlZCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRRdWVyeUNob2ljZXMgPSAocXVlcnk6IEVudGl0eVF1ZXJ5LCBlbnRpdGllczogQXJyYXk8RW50aXR5PiwgcEtleU5hbWU6IHN0cmluZywgaGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IEFycmF5PFRydUNob2ljZT4gPT4ge1xyXG4gICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5Lm9yZGVyQnlDbGF1c2UpXHJcbiAgICAgIHJldHVybiBfLm1hcChlbnRpdGllcywgKGVudGl0eTogYW55KSA9PiB7IHJldHVybiB7IHZhbHVlOiB7ICQ6IGVudGl0eVtwS2V5TmFtZV0gfSwgbGFiZWw6IGhpZCAhPT0gbnVsbCA/IGhpZCA6IGVudGl0eS5ISUQgfTsgfSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBfLm1hcChlbnRpdGllcywgKGVudGl0eTogYW55KSA9PiB7IHJldHVybiB7IHZhbHVlOiB7ICQ6IGVudGl0eVtwS2V5TmFtZV0gfSwgbGFiZWw6IGhpZCAhPT0gbnVsbCA/IGhpZCA6IGVudGl0eS5ISUQgfTsgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE5hbWVWYWx1ZXMgPSAocXVlcnk6IEVudGl0eVF1ZXJ5LCBlbnRpdGllczogQXJyYXk8RW50aXR5PiwgcEtleU5hbWU6IHN0cmluZyk6IEFycmF5PFRydU5hbWVWYWx1ZT4gPT4ge1xyXG4gICAgICBpZiAocXVlcnkgJiYgcXVlcnkub3JkZXJCeUNsYXVzZSlcclxuICAgICAgICByZXR1cm4gXy5tYXAoZW50aXRpZXMsIChlbnRpdHk6IGFueSkgPT4geyByZXR1cm4geyBuYW1lOiBlbnRpdHkuTmFtZSwgdmFsdWU6IHsgJDogZW50aXR5LlZhbHVlIH0sIGVudGl0eTogZW50aXR5IH07IH0pO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIF8ubWFwKGVudGl0aWVzLCAoZW50aXR5OiBhbnkpID0+IHsgcmV0dXJuIHsgbmFtZTogZW50aXR5Lk5hbWUsIHZhbHVlOiB7ICQ6IGVudGl0eS5WYWx1ZSB9LCBlbnRpdHk6IGVudGl0eSB9OyB9KTtcclxuICB9XHJcblxyXG4gIGFkZCA9IChlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLCBjb250ZXh0RmlsdGVyczogYW55ID0gbnVsbCkgPT4ge1xyXG4gICAgbGV0IG5ld0VudGl0eSA9IHRoaXMuX2VudGl0eU1hbmFnZXIuY3JlYXRlRW50aXR5KGVudGl0eS5wcm90b3R5cGUuZW50aXR5VHlwZSk7XHJcbiAgICByZXR1cm4gbmV3RW50aXR5O1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaCA9IChlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgc2V0dXBRdWVyeTogYW55IHwgbnVsbCA9IG51bGwsXHJcbiAgICBleHBhbmRzOiBbXSB8IG51bGwsXHJcbiAgICBnbG9iYWw6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEVudGl0eVtdPiA9PiB7XHJcblxyXG4gICAgdmFyIHF1ZXJ5OiBhbnk7XHJcbiAgICBpZiAoZXhwYW5kcyAmJiBleHBhbmRzLmxlbmd0aCkge1xyXG4gICAgICBpZiAoZ2xvYmFsKVxyXG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkuZXhwYW5kKGV4cGFuZHMuam9pbignLCAnKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpLmV4cGFuZChleHBhbmRzLmpvaW4oJywgJykpLnRvcCh0aGlzLmFwcEVudmlyb25tZW50Lm1heFJlY29yZENvdW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChnbG9iYWwpXHJcbiAgICAgICAgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkudG9wKHRoaXMuYXBwRW52aXJvbm1lbnQubWF4UmVjb3JkQ291bnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZXR1cFF1ZXJ5ICE9IG51bGwpXHJcbiAgICAgIHF1ZXJ5ID0gc2V0dXBRdWVyeShxdWVyeSk7XHJcblxyXG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5fZW50aXR5TWFuYWdlci5leGVjdXRlUXVlcnkocXVlcnkpLnRoZW4oKHF1ZXJ5RGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghZ2xvYmFsKVxyXG4gICAgICAgIHRoaXMud2FybklmTWF4UmVjb3JkcyhxdWVyeURhdGEucmVzdWx0cywgZW50aXR5Lm5hbWUpO1xyXG4gICAgICByZXR1cm4gcXVlcnlEYXRhLnJlc3VsdHM7XHJcbiAgICB9KSkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaENhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIGV4cGFuZHM6IFtdIHwgbnVsbCA9IG51bGwpOiBPYnNlcnZhYmxlPEVudGl0eVtdPiA9PiB7XHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG4gICAgcmV0dXJuIG9mKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaENhY2hlT25seVN5bmNocm9ub3VzbHkgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgc2V0dXBRdWVyeTogYW55IHwgbnVsbCA9IG51bGwsXHJcbiAgICBleHBhbmRzOiBbXSB8IG51bGwgPSBudWxsKTogQXJyYXk8YW55PiA9PiB7XHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZDYWNoZU9ubHlTeW5jaHJvbm91c2x5ID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcclxuICAgIGV4cGFuZHM6IFtdIHwgbnVsbCA9IG51bGwpOiBBcnJheTxhbnk+ID0+IHtcclxuICAgIGxldCBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpO1xyXG4gICAgaWYgKHJlZilcclxuICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShlbnRpdHkubmFtZSArICdSZWYnLCAnPT0nLCByZWYpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoUXVlcnlDaG9pY2VzID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHNldHVwUXVlcnk6IGFueSB8IG51bGwgPSBudWxsLFxyXG4gICAgaGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcclxuICAgIGdvVG9TZXJ2ZXI6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VHJ1Q2hvaWNlW10+ID0+IHtcclxuICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgIGNvbnN0IHBrZXlOYW1lID0gZW50aXR5Lm5hbWUgKyAnUmVmJyBhcyBPYmplY3RLZXk7XHJcbiAgICBsZXQgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpID8/IHF1ZXJ5O1xyXG4gICAgaWYgKHJlZilcclxuICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShlbnRpdHkubmFtZSArICdSZWYnLCAnPT0nLCByZWYpO1xyXG4gICAgcXVlcnkgPSBxdWVyeS50b3AodGhpcy5hcHBFbnZpcm9ubWVudC5tYXhSZWNvcmRDb3VudCk7XHJcbiAgICBpZiAoZ29Ub1NlcnZlcikge1xyXG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHF1ZXJ5RGF0YS5yZXN1bHRzLCBwa2V5TmFtZSwgbnVsbCk7XHJcbiAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YodGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSksIHBrZXlOYW1lLCBudWxsKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoTmFtZVZhbHVlc0NhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIHJlZjogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VHJ1TmFtZVZhbHVlW10+ID0+IHtcclxuICAgIHR5cGUgT2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgIGNvbnN0IHBrZXlOYW1lID0gZW50aXR5Lm5hbWUgKyAnUmVmJyBhcyBPYmplY3RLZXk7XHJcbiAgICBsZXQgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKTtcclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICAgIHF1ZXJ5ID0gc2V0dXBRdWVyeShxdWVyeSkgPz8gcXVlcnk7XHJcbiAgICBpZiAocmVmKVxyXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKTtcclxuICAgIHJldHVybiBvZih0aGlzLmZvcm1hdE5hbWVWYWx1ZXMocXVlcnksIHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSksIHBrZXlOYW1lKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWYgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBwa2V5TmFtZSA9IGVudGl0eS5uYW1lICsgJ1JlZicgYXMgT2JqZWN0S2V5O1xyXG4gICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgZmV0Y2hTdHJhdGVneTogRmV0Y2hTdHJhdGVneS5Gcm9tU2VydmVyXHJcbiAgICB9KTtcclxuICAgIHZhciBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpLndoZXJlKGVudGl0eS5uYW1lICsgJ1JlZicsICc9PScsIHJlZikudXNpbmcocXVlcnlPcHRpb25zKTtcclxuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRRdWVyeUNob2ljZXMocXVlcnksIHF1ZXJ5RGF0YS5yZXN1bHRzLCBwa2V5TmFtZSwgbnVsbCk7XHJcbiAgICB9KSkpO1xyXG4gIH07XHJcblxyXG4gIHNlYXJjaEJ5UmVmUHJlZmVyZWRDYWNoZSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICByZWY6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGxldCBjYWNoZWRFbnRpdHkgPSB0aGlzLnNlYXJjaEJ5UmVmQ2FjaGVPbmx5KGVudGl0eSwgcmVmKTtcclxuICAgIGlmIChjYWNoZWRFbnRpdHkpIHtcclxuICAgICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgICBmZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LkZyb21Mb2NhbENhY2hlXHJcbiAgICAgIH0pO1xyXG4gICAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKS53aGVyZShlbnRpdHkubmFtZSArICdSZWYnLCAnPT0nLCByZWYpLnVzaW5nKHF1ZXJ5T3B0aW9ucyk7XHJcbiAgICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBxdWVyeURhdGEucmVzdWx0c1swXTtcclxuICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbVNlcnZlclxyXG4gICAgICB9KTtcclxuICAgICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gcXVlcnlEYXRhLnJlc3VsdHNbMF07XHJcbiAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZDYWNoZU9ubHkgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG5cclxuICAgIGlmICghaW5jbHVkZURlbGV0ZWQpXHJcbiAgICAgIGluY2x1ZGVEZWxldGVkID0gZmFsc2U7XHJcbiAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICBpbmNsdWRlRGVsZXRlZDogaW5jbHVkZURlbGV0ZWQsXHJcbiAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbUxvY2FsQ2FjaGVcclxuICAgIH0pO1xyXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSh0aGlzLmdldFF1ZXJ5U2VydmljZU5hbWUoZW50aXR5KSkud2hlcmUoZW50aXR5Lm5hbWUgKyAnUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSlbMF07XHJcbiAgICBpZiAocmVzdWx0KVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoQnlSZWZBcnJheUNhY2hlT25seSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnkgfCBudWxsID0gbnVsbCxcclxuICAgIHJlZnM6IEFycmF5PG51bWJlcj4sXHJcbiAgICBpbmNsdWRlRGVsZXRlZDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgXHJcbiAgICBpZiAoIWluY2x1ZGVEZWxldGVkKVxyXG4gICAgICBpbmNsdWRlRGVsZXRlZCA9IGZhbHNlO1xyXG4gICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IHRoaXMuX2VudGl0eU1hbmFnZXIucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICAgICAgaW5jbHVkZURlbGV0ZWQ6IGluY2x1ZGVEZWxldGVkLFxyXG4gICAgICBmZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LkZyb21Mb2NhbENhY2hlXHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KHRoaXMuZ2V0UXVlcnlTZXJ2aWNlTmFtZShlbnRpdHkpKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG5cclxuICAgIGlmIChzZXR1cFF1ZXJ5KVxyXG4gICAgICBxdWVyeSA9IHNldHVwUXVlcnkocXVlcnkpO1xyXG4gICAgaWYgKHF1ZXJ5ID09PSBudWxsKS8vc2V0dXBRdWVyeSgpIHJldHVybmVkIG51bGwgdG8gc2VsZWN0IG5vIHJvd3NcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgaWYgKHJlZnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICAgIGNvbnN0IHBrZXlOYW1lID0gZW50aXR5Lm5hbWUgKyAnUmVmJyBhcyBPYmplY3RLZXk7XHJcbiAgICAgIHZhciBwcmVkaWNhdGUgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVByZWRpY2F0ZShwa2V5TmFtZSwgJz09JywgcmVmc1swXSk7XHJcbiAgICAgIF8ucmVzdChyZWZzLCAxKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUub3IocGtleU5hbWUsICc9PScsIHJlZik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKHByZWRpY2F0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlc3VsdHMgPSB0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG4gICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGgpXHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hCeVJlZldpdGhRdWVyeSA9IChcclxuICAgIGVudGl0eTogdHlwZW9mIFRydUVudGl0eUJhc2UsXHJcbiAgICBzZXR1cFF1ZXJ5OiBhbnksXHJcbiAgICByZWY6IG51bWJlcik6IE9ic2VydmFibGU8RW50aXR5W10+ID0+IHtcclxuICAgIHZhciBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkodGhpcy5nZXRRdWVyeVNlcnZpY2VOYW1lKGVudGl0eSkpO1xyXG4gICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcbiAgICB0eXBlIE9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBwa2V5TmFtZSA9IGVudGl0eS5uYW1lICsgJ1JlZicgYXMgT2JqZWN0S2V5O1xyXG4gICAgdmFyIHByZWRpY2F0ZSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUHJlZGljYXRlKHBrZXlOYW1lLCAnPT0nLCByZWYpO1xyXG4gICAgcXVlcnkgPSBxdWVyeS53aGVyZShwcmVkaWNhdGUpO1xyXG5cclxuICAgIHZhciBsb2NhbFJlc3VsdHMgPSB0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG5cclxuICAgIGlmIChsb2NhbFJlc3VsdHMubGVuZ3RoKVxyXG4gICAgICByZXR1cm4gb2YobG9jYWxSZXN1bHRzKTtcclxuXHJcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhKSA9PiB7XHJcbiAgICAgIHJldHVybiBxdWVyeURhdGEucmVzdWx0cztcclxuICAgIH0pKSk7XHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoVXNlckJ5UmVmQ2FjaGVPbmx5ID0gKFxyXG4gICAgcmVmOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG5cclxuICAgIGlmICghaW5jbHVkZURlbGV0ZWQpXHJcbiAgICAgIGluY2x1ZGVEZWxldGVkID0gZmFsc2U7XHJcbiAgICB2YXIgcXVlcnlPcHRpb25zID0gdGhpcy5fZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnMudXNpbmcoe1xyXG4gICAgICBpbmNsdWRlRGVsZXRlZDogaW5jbHVkZURlbGV0ZWQsXHJcbiAgICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbUxvY2FsQ2FjaGVcclxuICAgIH0pO1xyXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5fYnJlZXplQ29udGV4dC5jcmVhdGVRdWVyeSgnUXVlcnlUcnVEYlVzZXInKS53aGVyZSgnVHJ1RGJVc2VyUmVmJywgJz09JywgcmVmKS51c2luZyhxdWVyeU9wdGlvbnMpO1xyXG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5TG9jYWxseShxdWVyeSlbMF07XHJcbiAgICBpZiAocmVzdWx0KVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgY3VzdG9tU2VhcmNoID0gKFxyXG4gICAgZW50aXR5OiB0eXBlb2YgVHJ1RW50aXR5QmFzZSxcclxuICAgIHF1ZXJ5OiBhbnkpID0+IHtcclxuICAgIHJldHVybiBkZWZlcigoKSA9PiBmcm9tKHRoaXMuX2VudGl0eU1hbmFnZXIuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KS50aGVuKChxdWVyeURhdGE6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLndhcm5JZk1heFJlY29yZHMocXVlcnlEYXRhLnJlc3VsdHMsIGVudGl0eS5uYW1lKTtcclxuICAgICAgcmV0dXJuIHF1ZXJ5RGF0YS5yZXN1bHRzO1xyXG4gICAgfSkpKTtcclxuICB9O1xyXG5cclxuICBleHBvcnQgPSAoXHJcbiAgICBlbnRpdHk6IHR5cGVvZiBUcnVFbnRpdHlCYXNlLFxyXG4gICAgZ3JpZFNwZWM6IHN0cmluZyxcclxuICAgIHNldHVwUXVlcnk6IGFueSB8IG51bGwsXHJcbiAgICBlbnRpdHlSZWZzOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgb3B0aW9uczogYW55KSA9PiB7XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICB2YXIgYXJncyA9IHtcclxuICAgICAgcnVuQXN5bmM6IGZhbHNlLFxyXG4gICAgICB1c2VOYW1lczogZmFsc2UsXHJcbiAgICAgIHVzZUVtcHR5VGFnczogZmFsc2UsXHJcbiAgICAgIGVudGl0eVJlZnM6IG51bGwgYXMgc3RyaW5nIHwgbnVsbCxcclxuICAgICAgZW50aXR5VHlwZU5hbWU6IGVudGl0eS5uYW1lLFxyXG4gICAgICBncmlkU3BlYzogZ3JpZFNwZWNcclxuICAgIH07XHJcbiAgICBpZiAob3B0aW9ucy5hc3luYylcclxuICAgICAgYXJncy5ydW5Bc3luYyA9IHRydWU7XHJcbiAgICBpZiAob3B0aW9ucy51c2VOYW1lcylcclxuICAgICAgYXJncy51c2VOYW1lcyA9IHRydWU7XHJcbiAgICBpZiAob3B0aW9ucy51c2VFbXB0eVRhZ3MpXHJcbiAgICAgIGFyZ3MudXNlRW1wdHlUYWdzID0gdHJ1ZTtcclxuICAgIHZhciBxdWVyeVRleHQ7XHJcbiAgICBpZiAob3B0aW9ucy51c2VHcmlkKSB7XHJcbiAgICAgIGFyZ3MuZW50aXR5UmVmcyA9IGVudGl0eVJlZnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgcXVlcnkgPSB0aGlzLl9icmVlemVDb250ZXh0LmNyZWF0ZVF1ZXJ5KCdub25hbWUnKTtcclxuICAgICAgaWYgKHNldHVwUXVlcnkpXHJcbiAgICAgICAgcXVlcnkgPSBzZXR1cFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgaWYgKHF1ZXJ5ID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy51aU5vdGlmaWNhdGlvbi53YXJuaW5nKCdObyByZWNvcmRzIHNlbGVjdGVkIGJ5IHF1ZXJ5Jyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXJ5VGV4dCA9IHF1ZXJ5Ll90b1VyaSh0aGlzLl9lbnRpdHlNYW5hZ2VyKTtcclxuICAgICAgICBxdWVyeVRleHQgPSBxdWVyeVRleHQuc3BsaXQoJz8nKVsxXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudWlOb3RpZmljYXRpb24uaW5mbyhhcmdzLnJ1bkFzeW5jID8gJ1F1ZXVpbmcgZXhwb3J0Li4uJyA6ICdFeHBvcnRpbmcuLi4nKTtcclxuXHJcbiAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh4aHIucmVzcG9uc2VUeXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuX2Jhc2VVcmwgKyAnL2FwaS9leHBvcnQvZXhlY3V0ZScpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04Jyk7XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgdXNlclJlZjogdGhpcy51c2VyLmFjdGl2ZVVzZXJSZWYsXHJcbiAgICAgIHJ1bkFzeW5jOiBhcmdzLnJ1bkFzeW5jLFxyXG4gICAgICB1c2VOYW1lczogYXJncy51c2VOYW1lcyxcclxuICAgICAgdXNlRW1wdHlUYWdzOiBhcmdzLnVzZUVtcHR5VGFncyxcclxuICAgICAgZW50aXR5UmVmczogYXJncy5lbnRpdHlSZWZzLFxyXG4gICAgICBlbnRpdHlUeXBlTmFtZTogYXJncy5lbnRpdHlUeXBlTmFtZSxcclxuICAgICAgZ3JpZFNwZWM6IGFyZ3MuZ3JpZFNwZWMsXHJcbiAgICAgIHF1ZXJ5OiBxdWVyeVRleHRcclxuICAgIH0pKVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0QXNVcmxQYXJhbWV0ZXJzID0gKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgdmFyIGJ1ZmZlciA9IFtdO1xyXG4gICAgZm9yICh2YXIgbmFtZSBpbiBkYXRhKSB7XHJcbiAgICAgIGlmICghZGF0YS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbbmFtZV07XHJcbiAgICAgIGJ1ZmZlci5wdXNoKFxyXG4gICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSArXHJcbiAgICAgICAgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICB2YXIgc291cmNlID0gYnVmZmVyLmpvaW4oJyYnKVxyXG4gICAgICAucmVwbGFjZSgvJTIwL2csICcrJyk7XHJcbiAgICByZXR1cm4gKHNvdXJjZSk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZEZyb21VcmwgPSAodXJsOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xyXG4gICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5zYXZlRG93bmxvYWRlZEZpbGUocmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudWlOb3RpZmljYXRpb24uZXJyb3IoeGhyLnN0YXR1cyArICc6ICcgKyB4aHIuc3RhdHVzVGV4dCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh4aHIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuX2Jhc2VVcmwgKyB1cmwpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04Jyk7XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICB9O1xyXG5cclxuICBkb3dubG9hZEZyb21TZXJ2aWNlID0gKHNlcnZpY2VOYW1lOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5kb3dubG9hZEZyb21Vcmwoc2VydmljZU5hbWUsIGRhdGEpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICogUmVxdWVzdCBhbiBhY3Rpb24uXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFjdGlvbi5cclxuICAqIEBwYXJhbSB7c3RyaW5nfSBlbnRpdHlSZWZzIC0gQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZW50aXR5IHBrZXkgdmFsdWVzLlxyXG4gICogQHJldHVybnMge3Byb21pc2V9IG9uIHN1Y2Nlc3MsIHBhc3NlcyB0aGUgcmVzdWx0cyB0byBzdWNjZXNzIGhhbmRsZXI7IFxyXG4gICogICAgICBvbiBmYWlsdXJlLCBwYXNzZXMgZXhjZXB0aW9uIHRvIGZhaWwgaGFuZGxlci5cclxuICAqL1xyXG4gIHJlcXVlc3RBY3Rpb24gPSAoYWN0aW9uTmFtZTogc3RyaW5nLCBlbnRpdHlSZWZzOiBzdHJpbmcpID0+IHtcclxuICAgIHZhciBxdWVyeSA9IHRoaXMuX2JyZWV6ZUNvbnRleHQuY3JlYXRlUXVlcnkoJ1JlcXVlc3RBY3Rpb24nICsgYWN0aW9uTmFtZSlcclxuICAgIC53aXRoUGFyYW1ldGVycyh7XHJcbiAgICAgICRtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgJGVuY29kaW5nOiAnSlNPTicsXHJcbiAgICAgICRkYXRhOiB7IHJlZnM6IGVudGl0eVJlZnMgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLl9lbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeShxdWVyeSkudGhlbigocXVlcnlEYXRhOiBhbnkpID0+IHs7XHJcbiAgICAgIHJldHVybiBxdWVyeURhdGEucmVzdWx0cztcclxuICAgIH0pKSk7XHJcbmBgfVxyXG5cclxuICBwcml2YXRlIHNhdmVEb3dubG9hZGVkRmlsZSA9IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICB2YXIgaGVhZGVycyA9IHJlc3BvbnNlLmhlYWRlcnM7XHJcbiAgICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gaGVhZGVycygnY29udGVudC1kaXNwb3NpdGlvbicpO1xyXG4gICAgaWYgKCFjb250ZW50RGlzcG9zaXRpb24pXHJcbiAgICAgIHJldHVybjsgLy8gTk9URTogY2Fubm90IHNhdmUgd2l0aG91dCBoZWFkZXIgaW5mb1xyXG4gICAgdmFyIGZpbGVuYW1lID0gdGhpcy5leHRyYWN0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uKGNvbnRlbnREaXNwb3NpdGlvbik7XHJcbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtyZXNwb25zZS5kYXRhXSwgeyB0eXBlOiBoZWFkZXJzKCdjb250ZW50LXR5cGUnKSB9KTtcclxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uID0gKHRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgdmFyIHBhcnRzID0gXy5tYXAodGV4dC5zcGxpdCgnOycpLCBmdW5jdGlvbiAocGFydCkgeyByZXR1cm4gcGFydC50cmltKCk7IH0pO1xyXG4gICAgdmFyIHByZWZpeCA9ICdmaWxlbmFtZT0nO1xyXG4gICAgdmFyIGZpbGVuYW1lUGFydCA9IF8uZmluZChwYXJ0cywgZnVuY3Rpb24gKHBhcnQpIHsgcmV0dXJuIHBhcnQuc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGgpID09PSBwcmVmaXggfSk7XHJcbiAgICBpZiAoIWZpbGVuYW1lUGFydClcclxuICAgICAgcmV0dXJuICdmaWxlJztcclxuICAgIHZhciBmaWxlbmFtZSA9IGZpbGVuYW1lUGFydC5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XHJcbiAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1wiL2csICcnKTtcclxuICAgIHJldHVybiBmaWxlbmFtZTtcclxuICB9XHJcbn1cclxuIl19
@@ -1126,13 +1126,22 @@ class TruEntityAccessor {
1126
1126
  return (source);
1127
1127
  };
1128
1128
  downloadFromUrl = (url, data) => {
1129
- if (data)
1130
- data = this.formatAsUrlParameters(data);
1131
- const body = { title: 'download request' };
1132
- const headers = { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' };
1133
- this.http.post(this._baseUrl + url, body, { headers }).subscribe((response) => {
1134
- this.saveDownloadedFile(response);
1135
- });
1129
+ let xhr = new XMLHttpRequest();
1130
+ xhr.onreadystatechange = (response) => {
1131
+ if (xhr.readyState == XMLHttpRequest.DONE) {
1132
+ if (xhr.status == 200) {
1133
+ this.saveDownloadedFile(response);
1134
+ }
1135
+ else {
1136
+ this.uiNotification.error(xhr.status + ': ' + xhr.statusText);
1137
+ console.log(xhr.responseText);
1138
+ }
1139
+ }
1140
+ };
1141
+ xhr.open('POST', this._baseUrl + url);
1142
+ xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
1143
+ xhr.responseType = 'arraybuffer';
1144
+ xhr.send(JSON.stringify(data));
1136
1145
  };
1137
1146
  downloadFromService = (serviceName, data) => {
1138
1147
  this.downloadFromUrl(serviceName, data);