@c8y/ngx-components 1018.503.94 → 1018.503.97

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.
@@ -492,7 +492,12 @@ export class EcosystemService {
492
492
  this.alertService.success(gettext('Archive deleted.'));
493
493
  }
494
494
  catch (ex) {
495
- this.alertError(ex);
495
+ if (ex) {
496
+ this.alertError(ex);
497
+ }
498
+ else {
499
+ return Promise.reject('cancelled');
500
+ }
496
501
  }
497
502
  }
498
503
  async deployApp(selectedPackage, formGroupValue, model) {
@@ -816,4 +821,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
816
821
  providedIn: 'root'
817
822
  }]
818
823
  }], ctorParameters: function () { return [{ type: i1.ModalService }, { type: i1.AlertService }, { type: i1.HumanizeAppNamePipe }, { type: i2.TranslateService }, { type: i3.ApplicationService }, { type: i1.AppStateService }, { type: i1.ZipService }, { type: i3.TenantService }, { type: i3.InventoryService }, { type: i1.WizardModalService }, { type: i1.PluginsService }]; } });
819
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2Vjb3N5c3RlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFXZixnQkFBZ0IsRUFJaEIsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBRVosZUFBZSxFQUNmLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFdBQVcsRUFDWCxjQUFjLEVBQ2QsTUFBTSxFQUNOLGtCQUFrQixFQUNsQixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQW9CLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFB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QkFBa0IsQ0FDOUIsT0FBYSxFQUNiLEdBQWlCO1FBRWpCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2RSxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQy9ELE9BQU87WUFDTCxPQUFPLEVBQUUsVUFBVTtZQUNuQixPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLGtGQUFrRjthQUMzRjtZQUNELGdCQUFnQixFQUFFLG1CQUFtQjtZQUNyQyxXQUFXLEVBQUU7Z0JBQ1gsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2FBQy9FO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFZO1FBQ3hDLE1BQU0sYUFBYSxHQUFHLG9DQUFvQyxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQUksRUFBRSxPQUFPO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyw0QkFBNEIsSUFBSSxPQUFPLEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQztJQUNoRyxDQUFDOzs2R0F0K0JVLGdCQUFnQjtpSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25TZXJ2aWNlLFxuICBBcHBsaWNhdGlvblR5cGUsXG4gIElBcHBsaWNhdGlvbixcbiAgSUFwcGxpY2F0aW9uQmluYXJ5LFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uRGVsZXRlUGFyYW1zLFxuICBJQ3VycmVudFRlbmFudCxcbiAgSWRSZWZlcmVuY2UsXG4gIElGZXRjaFJlc3BvbnNlLFxuICBJSWRlbnRpZmllZCxcbiAgSU1hbmFnZWRPYmplY3QsXG4gIElNYW5pZmVzdCxcbiAgSW52ZW50b3J5U2VydmljZSxcbiAgSVJlc3VsdCxcbiAgSVJlc3VsdExpc3QsXG4gIElVcGxvYWRQYXJhbXNPdmVycmlkZSxcbiAgVGVuYW50U2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIEFwcGxpY2F0aW9uUGx1Z2luLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFja2FnZVR5cGUsXG4gIFBsdWdpbnNTZXJ2aWNlLFxuICBTdGF0dXMsXG4gIFdpemFyZE1vZGFsU2VydmljZSxcbiAgWmlwU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBnZXQsIGdyb3VwQnksIGtlYmFiQ2FzZSwgcGljaywgdW5pcUJ5LCBvbWl0LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGRlZmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2UsIG1hcCwgZmlsdGVyLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGd0LCBjb2VyY2UsIHNhdGlzZmllcyB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBFY29zeXN0ZW1FcnJvciB9IGZyb20gJy4vZWNvc3lzdGVtLWVycm9yJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU3RhdGUsIEFQUF9TVEFURSwgRVJST1JfTUVTU0FHRVMgfSBmcm9tICcuL2Vjb3N5c3RlbS5jb25zdGFudHMnO1xuaW1wb3J0IHsgRWNvc3lzdGVtV2l6YXJkcywgRVJST1JfVFlQRSwgTGljZW5zZWRBcHBsaWNhdGlvblBsdWdpbiB9IGZyb20gJy4vZWNvc3lzdGVtLm1vZGVsJztcbmltcG9ydCB7IEFwcEZpbHRlclByb3BzIH0gZnJvbSAnLi9saXN0LWZpbHRlcnMvbGlzdC1maWx0ZXJzLm1vZGVsJztcblxuY29uc3QgQ1VNVUxPQ0lUWV9KU09OID0gJ2N1bXVsb2NpdHkuanNvbic7XG5jb25zdCBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIID0gMjM7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEVjb3N5c3RlbVNlcnZpY2Uge1xuICBhcHBEZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJQXBwbGljYXRpb24+KCk7XG4gIHByb2dyZXNzOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihudWxsKTtcbiAgcHJpdmF0ZSBhcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGgkOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIElBcHBsaWNhdGlvbltdPj47XG4gIHByaXZhdGUgeGhyOiBYTUxIdHRwUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGh1bWFuaXplQXBwTmFtZTogSHVtYW5pemVBcHBOYW1lUGlwZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgemlwU2VydmljZTogWmlwU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgd2l6YXJkTW9kYWxTZXJ2aWNlOiBXaXphcmRNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbHVnaW5TZXJ2aWNlOiBQbHVnaW5zU2VydmljZVxuICApIHtcbiAgICB0aGlzLmFwcHNHcm91cGVkQnlDb250ZXh0UGF0aCQgPSBkZWZlcigoKSA9PiB0aGlzLmdldFdlYkFwcGxpY2F0aW9ucygpKS5waXBlKFxuICAgICAgbWFwKHdlYkFwcHMgPT4gZ3JvdXBCeSh3ZWJBcHBzLCAnY29udGV4dFBhdGgnKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldFVuaXF1ZUFwcENvbmZpZyhzcmNBcHA6IElBcHBsaWNhdGlvbiwgZXhpc3RpbmdBcHBzOiBJQXBwbGljYXRpb25bXSk6IElBcHBsaWNhdGlvbiB7XG4gICAgbGV0IGFwcDogSUFwcGxpY2F0aW9uID0ge1xuICAgICAgbmFtZTogc3JjQXBwLm5hbWUsXG4gICAgICBrZXk6IHNyY0FwcC5rZXksXG4gICAgICBjb250ZXh0UGF0aDogc3JjQXBwLmNvbnRleHRQYXRoXG4gICAgfTtcbiAgICBmb3IgKGxldCByZXRyeU5vID0gMDsgcmV0cnlObyA8IDk7ICkge1xuICAgICAgaWYgKHRoaXMuY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKGV4aXN0aW5nQXBwcywgYXBwLCByZXRyeU5vKSkge1xuICAgICAgICByZXRyeU5vKys7XG4gICAgICAgIGFwcCA9IHtcbiAgICAgICAgICBuYW1lOiBbc3JjQXBwLm5hbWUsIHJldHJ5Tm9dLmpvaW4oJy0nKSxcbiAgICAgICAgICBrZXk6IFtzcmNBcHAua2V5LCByZXRyeU5vXS5qb2luKCctJyksXG4gICAgICAgICAgY29udGV4dFBhdGg6IFtzcmNBcHAuY29udGV4dFBhdGgsIHJldHJ5Tm9dLmpvaW4oJy0nKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdmVyc2lvbnMgY29tcGF0aWJpbGl0eSBmb3IgYmx1ZXByaW50cy4gSWYgYSBibHVlcHJpbnQgdmVyc2lvblxuICAgKiBpcyBub3QgY29tcGF0aWJsZSwgYSB3YXJuaW5nIGlzIHNob3duLlxuICAgKlxuICAgKiBAcGFyYW0gYmx1ZXByaW50IFRoZSBibHVlcHJpbnQgdG8gaW5zdGFsbC5cbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5zdGFsbGF0aW9uIGNhbiBjb250aW51ZSBvciBmYWxzZSBpZiBpdCBzaG91bGQgYmUgYWJvcnRlZC5cbiAgICovXG4gIGFzeW5jIHZlcmlmeUJsdWVwcmludFZlcnNpb25zQ29tcGF0aWJpbGl0eShibHVlcHJpbnQ6IFBhcnRpYWw8SU1hbmlmZXN0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGFwaSA9IGF3YWl0IHRoaXMuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgaWYgKGJsdWVwcmludC52ZXJzaW9uaW5nTWF0cml4KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwbHVnaW5BcGlWZXJzaW9uID0gYmx1ZXByaW50LnZlcnNpb25pbmdNYXRyaXhbYmx1ZXByaW50LnZlcnNpb25dLmFwaTtcbiAgICAgICAgaWYgKCFzYXRpc2ZpZXMoYXBpLCBwbHVnaW5BcGlWZXJzaW9uKSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNob3dNb2RhbChibHVlcHJpbnQsIGZhbHNlLCBhcGkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2hvd01vZGFsKGJsdWVwcmludCwgZmFsc2UsIGFwaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB2ZXJzaW9ucyBjb21wYXRpYmlsaXR5IGZvciBwbHVnaW5zLiBJbiBjYXNlIGEgdmVyc2lvbiBkb2VzIG5vdCBleGlzdCBpbiB0aGVcbiAgICogdmVyc2lvbmluZ01hdHJpeCB3ZSBkb24ndCBkbyBhbnl0aGluZyBkdWUgdG8gYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gSWYgYSBwbHVnaW4gdmVyc2lvblxuICAgKiBpcyBub3QgY29tcGF0aWJsZSwgYSB3YXJuaW5nIGlzIHNob3duLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luc1RvSW5zdGFsbCBUaGUgbGlzdCBvZiBwbHVnaW5zIHRvIGluc3RhbGwuXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluc3RhbGxhdGlvbiBjYW4gY29udGludWUgb3IgZmFsc2UgaWYgaXQgc2hvdWxkIGJlIGFib3J0ZWQuXG4gICAqL1xuICBhc3luYyB2ZXJpZnlQbHVnaW5WZXJzaW9uc0NvbXBhdGliaWxpdHkoXG4gICAgcGx1Z2luc1RvSW5zdGFsbDogQXBwbGljYXRpb25QbHVnaW5bXSxcbiAgICBhcHA6IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBhcGkgPSBhd2FpdCB0aGlzLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgIGNvbnN0IHNkayA9IGFwcC5tYW5pZmVzdD8ud2ViU2RrVmVyc2lvbjtcbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zVG9JbnN0YWxsKSB7XG4gICAgICBpZiAocGx1Z2luLnZlcnNpb25pbmdNYXRyaXgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwbHVnaW5TZGtWZXJzaW9uID0gcGx1Z2luLnZlcnNpb25pbmdNYXRyaXhbcGx1Z2luLnZlcnNpb25dLnNkaztcbiAgICAgICAgICBjb25zdCBwbHVnaW5BcGlWZXJzaW9uID0gcGx1Z2luLnZlcnNpb25pbmdNYXRyaXhbcGx1Z2luLnZlcnNpb25dLmFwaTtcbiAgICAgICAgICBpZiAoIXNhdGlzZmllcyhzZGssIHBsdWdpblNka1ZlcnNpb24pIHx8ICFzYXRpc2ZpZXMoYXBpLCBwbHVnaW5BcGlWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2hvd01vZGFsKHBsdWdpbiwgdHJ1ZSwgYXBpLCBzZGspO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2hvd01vZGFsKHBsdWdpbiwgZmFsc2UsIGFwaSwgc2RrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbW11bml0eSBwbHVnaW5zIG5lZWQgdG8gdmVyaWZ5IHRoZSBsaWNlbnNlIGFncmVlbWVudC4gSWYgYSBwYWNrYWdlIGlzIGEgY29tbXVuaXR5XG4gICAqIHBhY2thZ2UsIHRoZSBsaWNlbnNlIGlzIHNob3duLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luc1RvSW5zdGFsbCBUaGUgbGlzdCBvZiBwbHVnaW5zIHRvIGluc3RhbGwuXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluc3RhbGxhdGlvbiBjYW4gY29udGludWUuXG4gICAqL1xuICBhc3luYyB2ZXJpZnlMaWNlbnNlcyhwbHVnaW5zVG9JbnN0YWxsOiBBcnJheTxMaWNlbnNlZEFwcGxpY2F0aW9uUGx1Z2luPikge1xuICAgIGxldCBfcmVzb2x2ZTtcbiAgICBjb25zdCByZXN1bHQ6IFByb21pc2U8Ym9vbGVhbj4gPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIHBsdWdpbnNUb0luc3RhbGwgPSBwbHVnaW5zVG9JbnN0YWxsLmZpbHRlcihwbHVnaW4gPT4gcGx1Z2luLnR5cGUgIT09IFBhY2thZ2VUeXBlLkNVU1RPTSk7XG5cbiAgICBpZiAocGx1Z2luc1RvSW5zdGFsbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBhbnkgPSB7XG4gICAgICBpZDogRWNvc3lzdGVtV2l6YXJkcy5MSUNFTlNFX0NPTkZJUk0sXG4gICAgICBjb21wb25lbnRJbml0aWFsU3RhdGU6IHtcbiAgICAgICAgcGx1Z2luc1RvSW5zdGFsbFxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbW9kYWxPcHRpb25zID0geyBpbml0aWFsU3RhdGUgfTtcbiAgICBjb25zdCB3aXphcmQgPSB0aGlzLndpemFyZE1vZGFsU2VydmljZS5zaG93KG1vZGFsT3B0aW9ucyk7XG5cbiAgICB3aXphcmQuY29udGVudC5vbkNsb3NlLnN1YnNjcmliZShjb25maXJtZWQgPT4ge1xuICAgICAgX3Jlc29sdmUoY29uZmlybWVkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENvbXBhcmVzIGN1cnJlbnRseSBkZXBsb3llZCBhcHBsaWNhdGlvbiB2ZXJzaW9uIHdpdGggYXBwbGljYXRpb24gdmVyc2lvbiB0YWdnZWQgYXMgXCJsYXRlc3RcIlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudEFwcGxpY2F0aW9uVmVyc2lvbiBEZXBsb3llZCBhcHBsaWNhdGlvbiB2ZXJzaW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXRlc3RBcHAgTGF0ZXN0IGFwcGxpY2F0aW9uIHZlcnNpb24gb2JqZWN0XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgbGF0ZXN0IHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQsIG90aGVyd2lzZSBmYWxzZVxuICAgKi9cbiAgc2hvdWxkVXBncmFkZVBhY2thZ2UoY3VycmVudEFwcGxpY2F0aW9uVmVyc2lvbjogc3RyaW5nLCBsYXRlc3RBcHA6IElBcHBsaWNhdGlvblZlcnNpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBsYXRlc3RBcHBsaWNhdGlvblZlcnNpb24gPSBsYXRlc3RBcHA/LnZlcnNpb247XG5cbiAgICBpZiAoIWxhdGVzdEFwcGxpY2F0aW9uVmVyc2lvbiB8fCAhY3VycmVudEFwcGxpY2F0aW9uVmVyc2lvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBndChjb2VyY2UobGF0ZXN0QXBwbGljYXRpb25WZXJzaW9uKSwgY29lcmNlKGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR2V0cyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBzZWFyY2hlZCB0YWdcbiAgICpcbiAgICogQHBhcmFtIHthcnJheX0gYXBwbGljYXRpb25WZXJzaW9ucyBBcnJheSB3aXRoIGFsbCBhdmFpbGFibGUgdmVyc2lvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgU2VhcmNoZWQgdGFnXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggc2VhcmNoZWQgdGFnXG4gICAqL1xuICBnZXRBcHBsaWNhdGlvblZlcnNpb25PYmplY3RCeVRhZyhcbiAgICBhcHBsaWNhdGlvblZlcnNpb25zOiBJQXBwbGljYXRpb25WZXJzaW9uW10sXG4gICAgdGFnTmFtZTogc3RyaW5nXG4gICk6IElBcHBsaWNhdGlvblZlcnNpb24ge1xuICAgIHJldHVybiBhcHBsaWNhdGlvblZlcnNpb25zPy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC50YWdzLmluY2x1ZGVzKHRhZ05hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldEFwcGxpY2F0aW9uKGFwcElkOiBJZFJlZmVyZW5jZSk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZXRhaWwoYXBwSWQpKS5kYXRhO1xuICB9XG5cbiAgZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElSZXN1bHRMaXN0PElBcHBsaWNhdGlvbj4+IHtcbiAgICBjb25zdCBmaWx0ZXI6IG9iamVjdCA9IHtcbiAgICAgIHBhZ2VTaXplOiAyMDAwLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24oZmlsdGVyLCBjdXN0b21GaWx0ZXIpO1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlUZW5hbnQoY3VycmVudFRlbmFudC5uYW1lLCBmaWx0ZXIpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TWljcm9zZXJ2aWNlcygpOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgYXBwcyA9IChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9ucygpKS5kYXRhO1xuICAgIGNvbnN0IG1pY3Jvc2VydmljZXMgPSBhcHBzLmZpbHRlcihhcHAgPT4gdGhpcy5pc01pY3Jvc2VydmljZShhcHApKTtcbiAgICByZXR1cm4gbWljcm9zZXJ2aWNlcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldFdlYkFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyKSkuZGF0YTtcbiAgICBjb25zdCB3ZWJBcHBzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNBcHBsaWNhdGlvbihhcHApKTtcbiAgICByZXR1cm4gd2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZlYXR1cmVBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcikpLmRhdGE7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzRmVhdHVyZShhcHApKTtcbiAgICByZXR1cm4gd2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldFBhY2thZ2VBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBmaWx0ZXJDYWxsYmFjayA9IGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApO1xuICAgIHJldHVybiB0aGlzLmdldEFwcGxpY2F0aW9uc0ZpbHRlcmVkKGN1c3RvbUZpbHRlciwgZmlsdGVyQ2FsbGJhY2spO1xuICB9XG5cbiAgYXN5bmMgZ2V0SG9zdGVkQW5kUGFja2FnZUFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGZpbHRlckNhbGxiYWNrID0gYXBwID0+IHRoaXMuaXNQYWNrYWdlKGFwcCkgfHwgdGhpcy5pc0FwcGxpY2F0aW9uKGFwcCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXBwbGljYXRpb25zRmlsdGVyZWQoY3VzdG9tRmlsdGVyLCBmaWx0ZXJDYWxsYmFjayk7XG4gIH1cblxuICBhc3luYyBnZXRBcHBsaWNhdGlvbnNGaWx0ZXJlZChcbiAgICBjdXN0b21GaWx0ZXI6IGFueSA9IHt9LFxuICAgIGZpbHRlckNhbGxiYWNrID0gKGFwcDogSUFwcGxpY2F0aW9uKSA9PiAhIWFwcFxuICApOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbih7fSwgY3VzdG9tRmlsdGVyKTtcbiAgICBjb25zdCBzaGFyZWRGaWx0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRCxcbiAgICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICAgIHBhZ2VTaXplOiAyMDAwXG4gICAgICB9LFxuICAgICAgY3VzdG9tRmlsdGVyXG4gICAgKTtcbiAgICBjb25zdCBbeyBkYXRhOiBhcHBzIH0sIHsgZGF0YTogc2hhcmVkIH1dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5nZXRBcHBsaWNhdGlvbnMoZmlsdGVyKSxcbiAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3Qoc2hhcmVkRmlsdGVyKVxuICAgIF0pO1xuICAgIGNvbnN0IHdlYkFwcHMgPSBbLi4uYXBwcywgLi4uc2hhcmVkXS5maWx0ZXIoZmlsdGVyQ2FsbGJhY2spO1xuICAgIC8vIGFuIGFwcCBjb3VsZCBiZSBzdWJzY3JpYmVkIHRvIGEgdGVuYW50LCBidXQgYWxzbyBoYXZlIGl0J3MgYXZhaWxhYmlsaXR5IHNldCB0byBTSEFSRUQsIGluIHRoYXQgY2FzZSBpdCB3b3VsZCBvY2N1ciB0d2ljZS5cbiAgICBjb25zdCB1bmlxV2ViQXBwcyA9IHVuaXFCeSh3ZWJBcHBzLCAoYXBwOiBJQXBwbGljYXRpb24pID0+IGFwcC5pZCk7XG4gICAgcmV0dXJuIHVuaXFXZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgaXNNaWNyb3NlcnZpY2VIb3N0aW5nQWxsb3dlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRhdGE6IGFwcHMgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeU5hbWUoJ2ZlYXR1cmUtbWljcm9zZXJ2aWNlLWhvc3RpbmcnKTtcbiAgICByZXR1cm4gISFhcHBzLmZpbHRlcihhcHAgPT4gYXBwLm93bmVyPy50ZW5hbnQ/LmlkID09PSAnbWFuYWdlbWVudCcpLmxlbmd0aDtcbiAgfVxuXG4gIGNhbk9wZW5BcHBJbkJyb3dzZXIoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBpc05vdEFGZWF0dXJlID0gIXRoaXMuaXNGZWF0dXJlKGFwcCk7XG4gICAgY29uc3QgaGFzUHJvcGVyVHlwZSA9IFtBcHBsaWNhdGlvblR5cGUuSE9TVEVELCBBcHBsaWNhdGlvblR5cGUuRVhURVJOQUxdLmluY2x1ZGVzKGFwcC50eXBlKTtcbiAgICBjb25zdCBpc05vdFBhY2thZ2UgPSAhdGhpcy5pc1BhY2thZ2UoYXBwKTtcbiAgICByZXR1cm4gaXNOb3RBRmVhdHVyZSAmJiBoYXNQcm9wZXJUeXBlICYmIGlzTm90UGFja2FnZTtcbiAgfVxuXG4gIG9wZW5BcHAoYXBwKSB7XG4gICAgd2luZG93Lm9wZW4odGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0SHJlZihhcHApLCAnX2JsYW5rJywgJ25vb3BlbmVyLG5vcmVmZXJyZXInKTtcbiAgfVxuXG4gIGFzeW5jIGNhbkRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzT3duZXIoYXBwKSAmJiAoIXRoaXMuaXNDdXJyZW50QXBwKGFwcCkgfHwgKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKSlcbiAgICApO1xuICB9XG5cbiAgaXNPd25lcihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICBjb25zdCBhcHBPd25lciA9IGdldChhcHAsICdvd25lci50ZW5hbnQuaWQnKTtcbiAgICByZXR1cm4gY3VycmVudFRlbmFudC5uYW1lID09PSBhcHBPd25lcjtcbiAgfVxuXG4gIGlzRmVhdHVyZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWFwcC5uYW1lLm1hdGNoKC9mZWF0dXJlLS8pO1xuICB9XG5cbiAgaXNNaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLnR5cGUgPT09ICdNSUNST1NFUlZJQ0UnO1xuICB9XG5cbiAgaXNFeHRlcm5hbChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAudHlwZSA9PT0gJ0VYVEVSTkFMJztcbiAgfVxuXG4gIGlzUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAubWFuaWZlc3Q/LmlzUGFja2FnZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGlzUGx1Z2luKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC5tYW5pZmVzdD8ucGFja2FnZSA9PT0gJ3BsdWdpbic7XG4gIH1cblxuICBjYW5jZWxBcHBDcmVhdGlvbihhcHA6IElBcHBsaWNhdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICB9XG4gICAgaWYgKGFwcCkge1xuICAgICAgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVXBsb2FkUHJvZ3Jlc3MoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgY29uc3QgY3VycmVudFByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy52YWx1ZTtcbiAgICAgIHRoaXMucHJvZ3Jlc3MubmV4dChjdXJyZW50UHJvZ3Jlc3MgKyAoZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpICogKDk1IC0gY3VycmVudFByb2dyZXNzKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QXBwQWN0aXZlVmVyc2lvbihhcHA6IElBcHBsaWNhdGlvbiwgYWN0aXZlVmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoeyBpZDogYXBwLmlkLCBhY3RpdmVWZXJzaW9uSWQgfSk7XG4gIH1cblxuICBzZXRQYWNrYWdlVmVyc2lvblRhZyhhcHA6IElBcHBsaWNhdGlvbiwgdmVyc2lvbjogc3RyaW5nLCB0YWdzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5zZXRQYWNrYWdlVmVyc2lvblRhZyhhcHAsIHZlcnNpb24sIHRhZ3MpO1xuICB9XG5cbiAgZGVsZXRlUGFja2FnZVZlcnNpb24oYXBwOiBJQXBwbGljYXRpb24sIHBhcmFtczogSUFwcGxpY2F0aW9uVmVyc2lvbkRlbGV0ZVBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShhcHAsIHBhcmFtcyk7XG4gIH1cblxuICBnZXRIdW1hbml6ZWRBcHBOYW1lKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5odW1hbml6ZUFwcE5hbWUudHJhbnNmb3JtKGFwcC5uYW1lKS5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGNyZWF0ZUNvbmZpZyhhcHA6IElBcHBsaWNhdGlvbiwgZm9ybUdyb3VwVmFsdWU6IEZvcm1Hcm91cCk6IFBhcnRpYWw8SUFwcGxpY2F0aW9uPiB7XG4gICAgY29uc3QgeyBpZCwgdHlwZSwgYXZhaWxhYmlsaXR5IH0gPSBhcHA7XG4gICAgbGV0IGNvbmZpZyA9IHBpY2soZm9ybUdyb3VwVmFsdWUsIFsnbmFtZScsICdrZXknLCAnY29udGV4dFBhdGgnXSk7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgaXNTZXR1cDogdHJ1ZSxcbiAgICAgIGlkLFxuICAgICAgdHlwZSxcbiAgICAgIGF2YWlsYWJpbGl0eVxuICAgIH07XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGxpc3RBcmNoaXZlcyhhcHBJZDogc3RyaW5nIHwgbnVtYmVyIHwgSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxJQXBwbGljYXRpb25CaW5hcnlbXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiAxMDBcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcElkKS5saXN0KGZpbHRlcikpLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGVBcmNoaXZlKGFyY2hpdmU6IElBcHBsaWNhdGlvbkJpbmFyeSwgYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcmNoaXZlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0SHVtYW5pemVkQXBwTmFtZShhcmNoaXZlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgYXJjaGl2ZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGFyY2hpdmUgXCJ7eyBodW1hbml6ZWRBcmNoaXZlTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaHVtYW5pemVkQXJjaGl2ZU5hbWUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmUuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIGRlbGV0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGdldChleCwgJ2RhdGEubWVzc2FnZScpLCBleC5kYXRhKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXJjaGl2ZU1hbmFnZWRPYmplY3QoYmluYXJ5SWQ6IHN0cmluZyk6IFByb21pc2U8SU1hbmFnZWRPYmplY3Q+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5SWQpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRBcmNoaXZlKFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGFyY2hpdmU6IFBpY2s8SUFwcGxpY2F0aW9uQmluYXJ5LCAnbmFtZScgfCAnaWQnPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5nZXRCaW5hcnkoYXBwLCBhcmNoaXZlKTtcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24veC16aXAtY29tcHJlc3NlZCcgfSk7XG4gICAgICBzYXZlQXMoZmlsZUJpbmFyeSwgYXJjaGl2ZS5uYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgZGVsZXRlT25GYWlsdXJlID0gZmFsc2UpOiBQcm9taXNlPElSZXN1bHQ8SUFwcGxpY2F0aW9uPj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKGFwcCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgICBpZiAoZGVsZXRlT25GYWlsdXJlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHAuaWQpO1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5BUFBMSUNBVElPTl9DUkVBVElPTl9GQUlMRUQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgc2lsZW50ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcHBOYW1lID0gYXdhaXQgdGhpcy5nZXRIdW1hbml6ZWRBcHBOYW1lKGFwcCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGFwcGxpY2F0aW9uJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgYXBwbGljYXRpb24gXCJ7eyBodW1hbml6ZWRBcHBOYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICksXG4gICAgICAgICAgeyBodW1hbml6ZWRBcHBOYW1lIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcC5pZCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gZGVsZXRlZC4nKSk7XG4gICAgfVxuICAgIHRoaXMuYXBwRGVsZXRlZC5lbWl0KGFwcCk7XG4gIH1cblxuICBhc3luYyBjaGVja0lmU3Vic2NyaWJlZChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpO1xuICAgIGNvbnN0IHN1YnNjcmliZWRBcHBzID0gY3VycmVudFRlbmFudC5kYXRhLmFwcGxpY2F0aW9ucy5yZWZlcmVuY2VzO1xuICAgIHJldHVybiBzdWJzY3JpYmVkQXBwcy5zb21lKGFwcGxpY2F0aW9uID0+IGFwcGxpY2F0aW9uLmFwcGxpY2F0aW9uLmlkID09PSBhcHAuaWQpO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2Uuc3Vic2NyaWJlQXBwbGljYXRpb24oY3VycmVudFRlbmFudCwgYXBwKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudW5zdWJzY3JpYmVBcHBsaWNhdGlvbihjdXJyZW50VGVuYW50LCBhcHApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdTdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzVmFsaWRBcHBUeXBlKGFyY2hpdmU6IEZpbGUsIGFwcFR5cGU6IEFwcGxpY2F0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50VHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICAgIGlmIChjdXJyZW50VHlwZSAhPT0gYXBwVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEFyY2hpdmVUb0FwcChcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGlzTmV3VmVyc2lvbiA9IGZhbHNlXG4gICk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IHVwbG9hZE92ZXJyaWRlczogSVVwbG9hZFBhcmFtc092ZXJyaWRlO1xuICAgIGlmIChpc05ld1ZlcnNpb24pIHtcbiAgICAgIHVwbG9hZE92ZXJyaWRlcyA9IGF3YWl0IHRoaXMuZ2V0VXBsb2FkT3ZlcnJpZGVzKGFyY2hpdmUsIGFwcCk7XG4gICAgfVxuICAgIGNvbnN0IGJpbmFyeVNlcnZpY2UgPSB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKTtcbiAgICB0aGlzLnhociA9IGJpbmFyeVNlcnZpY2UudXBsb2FkV2l0aFByb2dyZXNzWGhyKFxuICAgICAgYXJjaGl2ZSxcbiAgICAgIHRoaXMudXBkYXRlVXBsb2FkUHJvZ3Jlc3MuYmluZCh0aGlzKSxcbiAgICAgICcnLFxuICAgICAgdXBsb2FkT3ZlcnJpZGVzXG4gICAgKTtcblxuICAgIGNvbnN0IGJpbmFyeU1vID0gYXdhaXQgYmluYXJ5U2VydmljZS5nZXRYTUxIdHRwUmVzcG9uc2UodGhpcy54aHIpO1xuICAgIC8vIFRPRE8gY29tbWVudGVkIGl0IGR1ZSB0bzogaHR0cHM6Ly9jdW11bG9jaXR5LmF0bGFzc2lhbi5uZXQvYnJvd3NlL01UTS00ODU1M1xuICAgIC8vIEFkZCBpdCBiYWNrIHdoZW4gQkUgZml4ZXMgaXNzdWVzIHdpdGggYWN0aXZlVmVyc2lvbi5cbiAgICAvLyBpZiAoaXNOZXdWZXJzaW9uKSB7XG4gICAgLy8gICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbihhcHApO1xuICAgIC8vIH1cbiAgICBjb25zdCBub3RJbml0aWFsUGFja2FnZSA9IGFwcC5hcHBsaWNhdGlvblZlcnNpb25zPy5sZW5ndGggPiAwO1xuICAgIGlmIChub3RJbml0aWFsUGFja2FnZSkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoeyBpZDogYXBwLmlkIH0pKS5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2V0QXBwQWN0aXZlVmVyc2lvbihhcHAsIChiaW5hcnlNby5iaW5hcnlJZCB8fCBiaW5hcnlNby5pZCkgYXMgc3RyaW5nKSkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQXJjaGl2ZVRvQXBwQ29tcGF0aWJpbGl0eShhcmNoaXZlOiBGaWxlLCBhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgaWYgKGFwcFR5cGUgIT09IGFwcC50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX0FQUExJQ0FUSU9OKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTWljcm9zZXJ2aWNlKGFwcCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmUpO1xuICAgIC8vIEEgdXNlciBjYW4gdXBsb2FkIGFuIGFwcCB3aXRob3V0IGEgQ3VtdWxvY2l0eSBKU09OIGZpbGUgKGUuZy4gYSByZWFjdCBhcHApLlxuICAgIC8vIFRoaXMgaXMgYWxsb3dlZCBhbmQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgdmFsaWRhdGlvbiBlcnJvci5cbiAgICBpZiAoIW1hbmlmZXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3QsIGFwcCk7XG4gIH1cblxuICBhc3luYyBnZXRDdW11bG9jaXR5SnNvbihhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxJTWFuaWZlc3QgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGM4eU1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSkudG9Qcm9taXNlKCk7XG4gICAgICByZXR1cm4gYzh5TWFuaWZlc3Q7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFwcEZvckFyY2hpdmUoYXJjaGl2ZSwgaXNQYWNrYWdlVHlwZUFyY2hpdmUgPSBmYWxzZSk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IGlzUGFja2FnZSA9IGZhbHNlO1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgbGV0IGFwcE1vZGVsOiBhbnkgPSB7fTtcbiAgICBjb25zdCBzdXBwb3J0ZWRBcHBUeXBlcyA9IFtBcHBsaWNhdGlvblR5cGUuSE9TVEVELCBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFXTtcblxuICAgIGlmIChzdXBwb3J0ZWRBcHBUeXBlcy5pbmNsdWRlcyhhcHBUeXBlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwTW9kZWwgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICAgICAgaXNQYWNrYWdlID0gYXBwTW9kZWwuaXNQYWNrYWdlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nLCB3ZSBhbGxvdyBoYXZpbmcgSE9TVEVEIGFwcGxpY2F0aW9ucyB3aXRob3V0IHRoZSBtYW5pZmVzdCBmaWxlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldEJhc2VOYW1lRnJvbUFyY2hpdmVPckFwcE1vZGVsKGFyY2hpdmUsIGFwcFR5cGUsIGFwcE1vZGVsKTtcbiAgICBjb25zdCBjbGVhcmVkTmFtZSA9IHRoaXMucmVtb3ZlRm9yYmlkZGVuQ2hhcmFjdGVycyhuYW1lKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEFwcEtleShhcHBNb2RlbCwgY2xlYXJlZE5hbWUpO1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGhpcy5nZXRDb250ZXh0UGF0aChhcHBNb2RlbCwgbmFtZSk7XG5cbiAgICBjb25zdCBhcHBUb1NhdmUgPSB7XG4gICAgICB0eXBlOiBhcHBUeXBlLFxuICAgICAgbmFtZSxcbiAgICAgIGtleSxcbiAgICAgIGNvbnRleHRQYXRoXG4gICAgfTtcblxuICAgIGlmIChpc1BhY2thZ2VUeXBlQXJjaGl2ZSAmJiAhaXNQYWNrYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX1BBQ0tBR0UpO1xuICAgIH0gZWxzZSBpZiAoIWlzUGFja2FnZVR5cGVBcmNoaXZlICYmIGlzUGFja2FnZSkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuSU5WQUxJRF9BUFBMSUNBVElPTik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzTmFtZUxlbmd0aEV4Y2VlZGVkKG5hbWUsIGFwcFR5cGUpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgICAgZXJyb3IubmFtZSA9IEVSUk9SX1RZUEUuTUlDUk9TRVJWSUNFX05BTUVfVE9PX0xPTkc7XG4gICAgICBlcnJvci5tZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoRVJST1JfTUVTU0FHRVNbZXJyb3IubmFtZV0sIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbWF4Q2hhcnM6IE1JQ1JPU0VSVklDRV9OQU1FX01BWF9MRU5HVEhcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jcmVhdGUoe1xuICAgICAgICAuLi5hcHBUb1NhdmUsXG4gICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgaXNQYWNrYWdlLFxuICAgICAgICAgIC4uLihhcHBNb2RlbD8ucGFja2FnZSAmJiB7IHBhY2thZ2U6IGFwcE1vZGVsLnBhY2thZ2UgfSlcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIElNYW5pZmVzdFxuICAgICAgfSlcbiAgICApLmRhdGE7XG4gIH1cblxuICBhc3luYyByZWFjdGl2YXRlQXJjaGl2ZShhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5yZWFjdGl2YXRlQXJjaGl2ZShhcHAuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcHBsaWNhdGlvbiByZWFjdGl2YXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlT2xkZXN0QXJjaGl2ZShhcHA6IElBcHBsaWNhdGlvbiwgYXJjaGl2ZXM6IElBcHBsaWNhdGlvbkJpbmFyeVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIG9sZGVzdCBhcmNoaXZlIGFuZCBjb250aW51ZScpLFxuICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICdVcCB0byA2IGFyY2hpdmVzIGNhbiBiZSBzYXZlZCBpbiB0aGUgcGxhdGZvcm0uIElmIHlvdSB1cGxvYWQgYSBuZXcgYXJjaGl2ZSwgdGhlIG9sZGVzdCBhcmNoaXZlIHRoYXQgaXMgbm90IGFjdGl2ZSB3aWxsIGJlIGRlbGV0ZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuSU5GTyxcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlIGFuZCBjb250aW51ZScpIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBhcmNoaXZlVG9EZWxldGUgPSBhcmNoaXZlc1thcmNoaXZlcy5sZW5ndGggLSAyXTtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRlbGV0ZShhcmNoaXZlVG9EZWxldGUuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIGRlbGV0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlcGxveUFwcChzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbiwgZm9ybUdyb3VwVmFsdWUsIG1vZGVsKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICAvLyBDcmVhdGUgbmV3IGFwcCBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNyZWF0ZUNvbmZpZyhzZWxlY3RlZFBhY2thZ2UsIGZvcm1Hcm91cFZhbHVlKTtcbiAgICBjb25zdCByZXF1ZXN0ZWRWZXJzaW9uID0gbW9kZWwuc2VsZWN0ZWQudmVyc2lvbjtcbiAgICBsZXQgY2xlYW5NYW5pZmVzdDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRBcHBNYW5pZmVzdChcbiAgICAgICAgc2VsZWN0ZWRQYWNrYWdlLFxuICAgICAgICByZXF1ZXN0ZWRWZXJzaW9uXG4gICAgICApO1xuICAgICAgY2xlYW5NYW5pZmVzdCA9IG9taXQobWFuaWZlc3QsIFsnbmFtZScsICdjb250ZXh0UGF0aCcsICdrZXknXSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLlZFUlNJT05fTk9UX0ZPVU5EKTtcbiAgICB9XG5cbiAgICBjb25maWcuaXNTZXR1cCA9IHRydWU7XG4gICAgY29uZmlnLm1hbmlmZXN0ID0gY2xlYW5NYW5pZmVzdDtcbiAgICBjb25maWcuYXZhaWxhYmlsaXR5ID0gQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuUFJJVkFURTtcbiAgICBjb25maWcubWFuaWZlc3QuaXNQYWNrYWdlID0gZmFsc2U7XG4gICAgY29uZmlnLm1hbmlmZXN0LnNvdXJjZSA9IHNlbGVjdGVkUGFja2FnZS5pZDtcbiAgICBjb25maWcubWFuaWZlc3QucGFja2FnZSA9ICdibHVlcHJpbnQnO1xuXG4gICAgLy8gYmVjYXVzZSBvZiBhIGlzc3VlIHdpdGggU0hBUkVEIGF2YWlsYWJpbGl0eSB3ZSBhbHdheXMgc2hvdWxkIGNoZWNrIGFnYWluXG4gICAgLy8gaWYgdGhlIGFwcCBub3QgZXhpc3QgYWxyZWFkeVxuICAgIGNvbnN0IGFsbEV4aXN0aW5nQXBwcyA9IGF3YWl0IHRoaXMuZ2V0SG9zdGVkQW5kUGFja2FnZUFwcGxpY2F0aW9ucygpO1xuICAgIGNvbnN0IGRvZXNBcHBLZXlPckNvbnRleHRQYXRoRXhpc3QgPSB0aGlzLmNoZWNrSWZBcHBOYW1lS2V5UGF0aEV4aXN0cyhhbGxFeGlzdGluZ0FwcHMsIGNvbmZpZyk7XG4gICAgaWYgKGRvZXNBcHBLZXlPckNvbnRleHRQYXRoRXhpc3QpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLkFMUkVBRFlfRVhJU1QpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBuZXcgYXBwXG4gICAgY29uc3QgbmV3QXBwID0gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNyZWF0ZShjb25maWcpKS5kYXRhO1xuICAgIHRyeSB7XG4gICAgICAvLyBCaW5hcnkgdXBsb2FkIGNhbiBmYWlsIGlmIFNIQVJFRCBwYWNrYWdlXG4gICAgICAvLyBpbiB0aGlzIGNhc2UsIGNhdGNoIGVycm9yIGFuZCBmYWxsIGJhY2sgdG9cbiAgICAgIC8vIGNsb25lIEFQSS5cbiAgICAgIGF3YWl0IHRoaXMudXBsb2FkQmluYXJ5RnJvbU90aGVyUGFja2FnZShcbiAgICAgICAgc2VsZWN0ZWRQYWNrYWdlLFxuICAgICAgICBuZXdBcHAsXG4gICAgICAgIG1vZGVsLnNlbGVjdGVkLmJpbmFyeUlkLFxuICAgICAgICByZXF1ZXN0ZWRWZXJzaW9uXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3I/LnJlcz8uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5mYWxsYmFja1RvQ2xvbmUobmV3QXBwLCBzZWxlY3RlZFBhY2thZ2UsIHJlcXVlc3RlZFZlcnNpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwZGF0ZSB0aGUgaWNvbiBpZiBhIGN1c3RvbSBvbmUgaXMgc2VsZWN0ZWRcbiAgICBpZiAoZm9ybUdyb3VwVmFsdWUuaWNvbikge1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgaWQ6IG5ld0FwcC5pZCxcbiAgICAgICAgY29uZmlnOiB7IGljb246IGZvcm1Hcm91cFZhbHVlLmljb24gfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdBcHA7XG4gIH1cblxuICBhc3luYyBmYWxsYmFja1RvQ2xvbmUoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbixcbiAgICByZXF1ZXN0ZWRWZXJzaW9uPzogc3RyaW5nXG4gICkge1xuICAgIGxldCB3YXNTdWNjZXNzID0gdHJ1ZTtcbiAgICBsZXQgY2xvbmVkUGtnO1xuICAgIHRyeSB7XG4gICAgICBjbG9uZWRQa2cgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY2xvbmUoc2VsZWN0ZWRQYWNrYWdlLCByZXF1ZXN0ZWRWZXJzaW9uKSkuZGF0YTtcbiAgICAgIGF3YWl0IHRoaXMudXBsb2FkQmluYXJ5RnJvbU90aGVyUGFja2FnZShcbiAgICAgICAgc2VsZWN0ZWRQYWNrYWdlLFxuICAgICAgICBhcHBsaWNhdGlvbixcbiAgICAgICAgY2xvbmVkUGtnLmFjdGl2ZVZlcnNpb25JZCxcbiAgICAgICAgcmVxdWVzdGVkVmVyc2lvbixcbiAgICAgICAgY2xvbmVkUGtnXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXJyb3IpO1xuICAgICAgd2FzU3VjY2VzcyA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZUFwcChjbG9uZWRQa2csIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gd2FzU3VjY2VzcztcbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEJpbmFyeUZyb21PdGhlclBhY2thZ2UoXG4gICAgc2VsZWN0ZWRQYWNrYWdlOiBJQXBwbGljYXRpb24sXG4gICAgYXBwbGljYXRpb25Ub1VwbG9hZEJpbmFyeVRvOiBJQXBwbGljYXRpb24sXG4gICAgYmluYXJ5SWQ6IHN0cmluZyxcbiAgICByZXF1ZXN0ZWRWZXJzaW9uPzogc3RyaW5nLFxuICAgIHVzZUJpbmFyaWVzRnJvbT86IElBcHBsaWNhdGlvblxuICApIHtcbiAgICBjb25zdCB7IGRhdGE6IGJpbmFyeURldGFpbHMgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5SWQpO1xuXG4gICAgLy8gR2V0IGJpbmFyeSBmcm9tIHNwZWNpZmljIHBhY2thZ2UgdmVyc2lvblxuICAgIGNvbnN0IGJpbmFyeSA9IGF3YWl0IHRoaXMuZ2V0QmluYXJ5KHVzZUJpbmFyaWVzRnJvbSB8fCBzZWxlY3RlZFBhY2thZ2UsIHtcbiAgICAgIGlkOiBiaW5hcnlJZFxuICAgIH0pO1xuICAgIC8vIENyZWF0ZSB6aXBcbiAgICBjb25zdCBmaWxlQmluYXJ5ID0gbmV3IEJsb2IoW2JpbmFyeV0sIHsgdHlwZTogYmluYXJ5RGV0YWlscy5jb250ZW50VHlwZSB9KTtcbiAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2ZpbGVCaW5hcnldLCBiaW5hcnlEZXRhaWxzLm5hbWUsIHtcbiAgICAgIHR5cGU6IGJpbmFyeURldGFpbHMuY29udGVudFR5cGVcbiAgICB9KTtcblxuICAgIC8vIFVwbG9hZCBiaW5hcnkgdG8gbmV3IGFwcFxuICAgIGF3YWl0IHRoaXMudXBsb2FkQXJjaGl2ZVRvQXBwKGZpbGUsIGFwcGxpY2F0aW9uVG9VcGxvYWRCaW5hcnlUbyk7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGFwcCBtYW5pZmVzdFxuICAgIGF3YWl0IHRoaXMudXBkYXRlQXBwTWFuaWZlc3QoYXBwbGljYXRpb25Ub1VwbG9hZEJpbmFyeVRvLCBzZWxlY3RlZFBhY2thZ2UsIHJlcXVlc3RlZFZlcnNpb24pO1xuICB9XG5cbiAgZ2V0QXBwU3RhdGUoYXBwOiBJQXBwbGljYXRpb24pOiBBcHBsaWNhdGlvblN0YXRlIHtcbiAgICBpZiAoIXRoaXMuaXNPd25lcihhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlNVQlNDUklCRUQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVW5wYWNrZWQoYXBwKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5VTlBBQ0tFRDtcbiAgICB9IGVsc2UgaWYgKGFwcC50eXBlID09PSBBcHBsaWNhdGlvblR5cGUuRVhURVJOQUwpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuRVhURVJOQUw7XG4gICAgfVxuICAgIHJldHVybiBBUFBfU1RBVEUuQ1VTVE9NO1xuICB9XG5cbiAgZ2V0UGFja2FnZUNvbnRlbnRTdGF0ZShhcHA6IElBcHBsaWNhdGlvbik6IEFwcGxpY2F0aW9uU3RhdGUge1xuICAgIGlmICghdGhpcy5pc1BhY2thZ2UoYXBwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BhY2thZ2VCbHVlcHJpbnQoYXBwKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5QQUNLQUdFX0JMVUVQUklOVDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNQbHVnaW5zUGFja2FnZShhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlBBQ0tBR0VfUExVR0lOO1xuICAgIH1cbiAgICByZXR1cm4gQVBQX1NUQVRFLlBBQ0tBR0VfVU5LTk9XTjtcbiAgfVxuXG4gIGlzUGFja2FnZUJsdWVwcmludChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGFja2FnZShhcHApICYmIGFwcC5tYW5pZmVzdC5wYWNrYWdlID09PSAnYmx1ZXByaW50JztcbiAgfVxuXG4gIGlzUGx1Z2luc1BhY2thZ2UoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhY2thZ2UoYXBwKSAmJiBhcHAubWFuaWZlc3QucGFja2FnZSA9PT0gJ3BsdWdpbic7XG4gIH1cblxuICBpc1VucGFja2VkKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhYXBwLm1hbmlmZXN0Py5zb3VyY2U7XG4gIH1cblxuICBoYXNFeHBvcnRzKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhYXBwLm1hbmlmZXN0Py5leHBvcnRzPy5sZW5ndGg7XG4gIH1cblxuICBpc0FwcGxpY2F0aW9uKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGFwcC50eXBlICE9PSBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFICYmICF0aGlzLmlzRmVhdHVyZShhcHApICYmICF0aGlzLmlzUGFja2FnZShhcHApXG4gICAgKTtcbiAgfVxuXG4gIGlzQ3VzdG9tTWljcm9zZXJ2aWNlKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNPd25lcihhcHApICYmIGFwcC50eXBlID09PSBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFO1xuICB9XG5cbiAgYXN5bmMgZ2V0QmluYXJ5KFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGFyY2hpdmU6IElBcHBsaWNhdGlvbkJpbmFyeSB8IElJZGVudGlmaWVkXG4gICk6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICBsZXQgYmluYXJ5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKS5kb3dubG9hZEFyY2hpdmUoYXJjaGl2ZS5pZCk7XG4gICAgICBiaW5hcnkgPSBhd2FpdCByZXMuYXJyYXlCdWZmZXIoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnQ291bGQgbm90IGdldCB0aGUgYmluYXJ5LicpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKG1zZyk7XG4gICAgfVxuICAgIHJldHVybiBiaW5hcnk7XG4gIH1cblxuICBhc3luYyBpc092ZXJ3cml0dGVuQnlDdXN0b21BcHAoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gIXRoaXMuaXNPd25lcihhcHApICYmIChhd2FpdCB0aGlzLmhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwKSk7XG4gIH1cblxuICBhc3luYyBoYXNTdWJzY3JpYmVkQXBwUGFyZW50KGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoID0gYXdhaXQgdGhpcy5hcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGgkLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gICAgcmV0dXJuIGFwcC5jb250ZXh0UGF0aCAmJiBhcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGhbYXBwLmNvbnRleHRQYXRoXT8ubGVuZ3RoID09PSAyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzZXRBdmFpbGFiaWxpdHlUb1ByaXZhdGVJZk5vdFNldEFscmVhZHkoYXBwOiBJQXBwbGljYXRpb24pOiBJQXBwbGljYXRpb24ge1xuICAgIGFwcC5hdmFpbGFiaWxpdHkgPSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5QUklWQVRFO1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYW4gZXJyb3IgZGlhbG9nLlxuICAgKiBAcGFyYW0gZXJyb3IgRWl0aGVyIGEgc2VydmVyIGVycm9yIG9yIGFuIGludGVybmFsIFtbRWNvc3lzdGVtRXJyb3JdXS5cbiAgICovXG4gIGFsZXJ0RXJyb3IoZXJyb3I6IEVycm9yIHwgRWNvc3lzdGVtRXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFY29zeXN0ZW1FcnJvcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGVycm9yLm1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZVBhY2thZ2VLZXlBbmRDb250ZXh0UGF0aChtYW5pZmVzdDogSU1hbmlmZXN0LCBhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gZ2V0KG1hbmlmZXN0LCAnY29udGV4dFBhdGgnKTtcbiAgICBjb25zdCBhcHBLZXkgPSBnZXQobWFuaWZlc3QsICdrZXknKTtcbiAgICBpZiAoY29udGV4dFBhdGggIT09IGFwcC5jb250ZXh0UGF0aCB8fCBhcHBLZXkgIT09IGFwcC5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLktFWV9PUl9DT05URVhUX1BBVEhfTUlTTUFUQ0gpO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlckNvbnRhaW5TdHJpbmcobmFtZTogc3RyaW5nLCBmaWx0ZXJUZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ZXJtID0gZmlsdGVyVGVybS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICByZXR1cm4gbmFtZSAmJiBuYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtKSA+IC0xO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXBwTWFuaWZlc3QoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbixcbiAgICByZXF1ZXN0ZWRWZXJzaW9uPzogc3RyaW5nXG4gICk6IFByb21pc2U8eyByZXM6IElGZXRjaFJlc3BvbnNlOyBkYXRhOiBhbnkgfT4ge1xuICAgIGNvbnN0IHsgaWQgfSA9IGFwcGxpY2F0aW9uO1xuICAgIGNvbnN0IGNsZWFuZWRBcHAgPSB0aGlzLnJlbW92ZUFwcFByb3BlcnRpZXMoYXBwbGljYXRpb24pO1xuICAgIGxldCBtYW5pZmVzdDogUGFydGlhbDxJTWFuaWZlc3Q+ID0gc2VsZWN0ZWRQYWNrYWdlLm1hbmlmZXN0IHx8IHt9O1xuICAgIGlmIChyZXF1ZXN0ZWRWZXJzaW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uZWRBcHBNYW5pZmVzdCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcE1hbmlmZXN0KFxuICAgICAgICAgIHNlbGVjdGVkUGFja2FnZSxcbiAgICAgICAgICByZXF1ZXN0ZWRWZXJzaW9uXG4gICAgICAgICk7XG4gICAgICAgIG1hbmlmZXN0ID0gdmVyc2lvbmVkQXBwTWFuaWZlc3Q7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5WRVJTSU9OX05PVF9GT1VORCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdCA9IG1hbmlmZXN0O1xuICAgIGNsZWFuZWRBcHAubWFuaWZlc3QuaXNQYWNrYWdlID0gZmFsc2U7XG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdC5zb3VyY2UgPSBzZWxlY3RlZFBhY2thZ2UuaWQ7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2VcbiAgICAgIC5iaW5hcnkoaWQpXG4gICAgICAudXBkYXRlRmlsZXMoW3sgcGF0aDogQ1VNVUxPQ0lUWV9KU09OLCBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoY2xlYW5lZEFwcCkgYXMgYW55IH1dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgZm9yIGZpbHRlcmluZyBhcHBsaWNhdGlvbnMgb24gbGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcHAgQXBwbGljYXRpb24gdG8gY3JlYXRlIGZpbHRlciBwcm9wZXJ0aWVzIGZyb20uXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFByb3BlcnRpZXMgdG8gZmlsdGVyIGJ5IGFwcGxpY2F0aW9ucyBsaXN0LlxuICAgKi9cbiAgZ2V0QXBwRmlsdGVyUHJvcHMoYXBwOiBJQXBwbGljYXRpb24pOiBBcHBGaWx0ZXJQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMucGx1Z2luU2VydmljZS5nZXRQYWNrYWdlVHlwZShhcHApLFxuICAgICAgYXZhaWxhYmlsaXR5OiB0aGlzLmdldEFwcFN0YXRlKGFwcCk/LmxhYmVsLFxuICAgICAgY29udGVudDogdGhpcy5nZXRQYWNrYWdlQ29udGVudFN0YXRlKGFwcCk/LmxhYmVsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKFxuICAgIGV4aXN0aW5nQXBwczogSUFwcGxpY2F0aW9uW10sXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcmV0cnlObz86IG51bWJlclxuICApOiBJQXBwbGljYXRpb24ge1xuICAgIGlmIChpc1VuZGVmaW5lZChyZXRyeU5vKSkge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nQXBwcy5maW5kKFxuICAgICAgICBleGlzdGluZ0FwcCA9PlxuICAgICAgICAgIGV4aXN0aW5nQXBwLm5hbWUgPT09IGFwcC5uYW1lIHx8XG4gICAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBhcHAua2V5IHx8XG4gICAgICAgICAgZXhpc3RpbmdBcHAuY29udGV4dFBhdGggPT09IGFwcC5jb250ZXh0UGF0aFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nQXBwcy5maW5kKFxuICAgICAgZXhpc3RpbmdBcHAgPT5cbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gYXBwLm5hbWUgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBhcHAua2V5IHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGggfHxcbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gW2FwcC5uYW1lLCByZXRyeU5vXS5qb2luKCctJykgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBbYXBwLmtleSwgcmV0cnlOb10uam9pbignLScpIHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBbYXBwLmNvbnRleHRQYXRoLCByZXRyeU5vXS5qb2luKCctJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93TW9kYWwoXG4gICAgcGFja2FnZVR5cGU6IFBhcnRpYWw8SU1hbmlmZXN0PiB8IEFwcGxpY2F0aW9uUGx1Z2luLFxuICAgIGlzUGx1Z2luOiBib29sZWFuLFxuICAgIGFwaVZlcnNpb246IHN0cmluZyxcbiAgICBzZGtWZXJzaW9uPzogc3RyaW5nXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xuICAgICAgaWYgKHBhY2thZ2VUeXBlLm5hbWUpIHtcbiAgICAgICAgbWVzc2FnZSA9IGdldHRleHQoXG4gICAgICAgICAgJ1RoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHBhY2thZ2UgXCJ7eyBuYW1lIH19XCIgdGhhdCB5b3UgYXJlIHRyeWluZyB0byBpbnN0YWxsIGRvZXMgbm90IHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIGZvbGxvd2luZyBBUEkgdmVyc2lvbiBcInt7IGFwaVZlcnNpb24gfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzUGx1Z2luKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBnZXR0ZXh0KFxuICAgICAgICAgICdUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4gdGhhdCB5b3UgYXJlIHRyeWluZyB0byBpbnN0YWxsIGRvZXMgbm90IHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIGZvbGxvd2luZyBBUEkgdmVyc2lvbiBcInt7IGFwaVZlcnNpb24gfX1cIiBvciBTREsgdmVyc2lvbiBcInt7IHNka1ZlcnNpb24gfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlID0gZ2V0dGV4dChcbiAgICAgICAgICAnVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYmx1ZXByaW50IHRoYXQgeW91IGFyZSB0cnlpbmcgdG8gaW5zdGFsbCBkb2VzIG5vdCBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoZSBmb2xsb3dpbmcgQVBJIHZlcnNpb24gXCJ7eyBhcGlWZXJzaW9uIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgdHJhbnNsYXRlZEJvZHkgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtZXNzYWdlLCB7XG4gICAgICAgIG5hbWU6IHBhY2thZ2VUeXBlLm5hbWUsXG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIHNka1ZlcnNpb25cbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKGdldHRleHQoJ0JsdWVwcmludCBpbnN0YWxsYXRpb24nKSwgdHJhbnNsYXRlZEJvZHksICd3YXJuaW5nJywge1xuICAgICAgICBvazogZ2V0dGV4dCgnQ29udGludWUnKSxcbiAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBtb2RhbCBjYW5jZWxlZFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRQbGF0Zm9ybVZlcnNpb24oKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLnN0YXRlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcChzdGF0ZSA9PiBzdGF0ZT8udmVyc2lvbnM/LmJhY2tlbmQpLFxuICAgICAgICBmaWx0ZXIoYmFja2VuZFZlcnNpb24gPT4gISFiYWNrZW5kVmVyc2lvbilcbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXBwS2V5KGFwcE1vZGVsOiBJQXBwbGljYXRpb24sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGtleSA9IGFwcE1vZGVsPy5rZXk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIGtleSA9IGAke2tlYmFiQ2FzZShuYW1lKX0ta2V5YDtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGV4dFBhdGgoYXBwTW9kZWw6IElBcHBsaWNhdGlvbiwgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYXBwTW9kZWw/LmNvbnRleHRQYXRoIHx8IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRm9yYmlkZGVuQ2hhcmFjdGVycyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXmEtekEtWjAtOS1fXS9nLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGlzQ3VycmVudEFwcChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRBcHAgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5zdGF0ZS5hcHA7XG4gICAgcmV0dXJuIGN1cnJlbnRBcHAuY29udGV4dFBhdGggPT09IGFwcC5jb250ZXh0UGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VtdWxvY2l0eUpzb24kKGFyY2hpdmU6IEZpbGUpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnppcFNlcnZpY2UuZ2V0SnNvbkRhdGEoYXJjaGl2ZSwge1xuICAgICAgZmlsZW5hbWU6IENVTVVMT0NJVFlfSlNPTlxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBUeXBlKGFyY2hpdmU6IEZpbGUpOiBQcm9taXNlPEFwcGxpY2F0aW9uVHlwZT4ge1xuICAgIHJldHVybiB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihcbiAgICAgICAgZGF0YSA9PlxuICAgICAgICAgIGdldChkYXRhLCAndHlwZScpIHx8XG4gICAgICAgICAgKGdldChkYXRhLCAnYXBpVmVyc2lvbicpID8gQXBwbGljYXRpb25UeXBlLk1JQ1JPU0VSVklDRSA6IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQpXG4gICAgICApXG4gICAgICAuY2F0Y2goKCkgPT4gQXBwbGljYXRpb25UeXBlLkhPU1RFRCk7XG4gIH1cblxuICBwcml2YXRlIGdldEJhc2VOYW1lRnJvbUFyY2hpdmVPckFwcE1vZGVsKFxuICAgIGFyY2hpdmU6IGFueSxcbiAgICBhcHBUeXBlOiBBcHBsaWNhdGlvblR5cGUsXG4gICAgYXBwTW9kZWw/OiBJQXBwbGljYXRpb25cbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgYmFzZU5hbWUgPSBhcHBNb2RlbD8ubmFtZSB8fCBhcmNoaXZlLm5hbWUucmVwbGFjZSgvXFwuemlwJC9pLCAnJyk7XG4gICAgaWYgKGFwcFR5cGUgPT09ICdNSUNST1NFUlZJQ0UnKSB7XG4gICAgICBiYXNlTmFtZSA9IHRoaXMucmVtb3ZlVmVyc2lvbkZyb21OYW1lKGJhc2VOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2VOYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBcHBQcm9wZXJ0aWVzKGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBjb25zdCB0ZW1wQXBwID0gY2xvbmVEZWVwKGFwcCk7XG4gICAgY29uc3QgcHJvcGVydGllc1RvUmVtb3ZlID0gWydpZCcsICdvd25lcicsICdhY3RpdmVWZXJzaW9uSWQnLCAnc2VsZicsICd0eXBlJ107XG5cbiAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuZm9yRWFjaChwcm9wID0+IGRlbGV0ZSB0ZW1wQXBwW3Byb3BdKTtcbiAgICByZXR1cm4gdGVtcEFwcDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0VXBsb2FkT3ZlcnJpZGVzKFxuICAgIGFyY2hpdmU6IEZpbGUsXG4gICAgYXBwOiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTxJVXBsb2FkUGFyYW1zT3ZlcnJpZGU+IHtcbiAgICBjb25zdCB7IHZlcnNpb24gfSA9IGF3YWl0IHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb24kKGFyY2hpdmUpLnRvUHJvbWlzZSgpO1xuICAgIGNvbnN0IGlzSW5pdGlhbFBhY2thZ2UgPSBhcHAuYXBwbGljYXRpb25WZXJzaW9ucz8ubGVuZ3RoID09PSAwO1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0VXJsOiAndmVyc2lvbnMnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi92bmQuY29tLm5zbi5jdW11bG9jaXR5LmFwcGxpY2F0aW9uVmVyc2lvbitqc29uO2NoYXJzZXQ9VVRGLTg7dmVyPTAuOSdcbiAgICAgIH0sXG4gICAgICBib2R5RmlsZVByb3BlcnR5OiAnYXBwbGljYXRpb25CaW5hcnknLFxuICAgICAgcmVxdWVzdEJvZHk6IHtcbiAgICAgICAgYXBwbGljYXRpb25WZXJzaW9uOiB7IHZlcnNpb24sIC4uLihpc0luaXRpYWxQYWNrYWdlICYmIHsgdGFnczogWydsYXRlc3QnXSB9KSB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlVmVyc2lvbkZyb21OYW1lKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHZlcnNpb25SZWdFeHAgPSAvLVxcZCtcXC5cXGQrXFwuXFxkKyhcXC5cXGQrKT8oLVxcZCspPyguKikkLztcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKHZlcnNpb25SZWdFeHAsICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNOYW1lTGVuZ3RoRXhjZWVkZWQobmFtZSwgYXBwVHlwZSkge1xuICAgIHJldHVybiBuYW1lLmxlbmd0aCA+IE1JQ1JPU0VSVklDRV9OQU1FX01BWF9MRU5HVEggJiYgYXBwVHlwZSA9PT0gQXBwbGljYXRpb25UeXBlLk1JQ1JPU0VSVklDRTtcbiAgfVxufVxuIl19
824
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2Vjb3N5c3RlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFXZixnQkFBZ0IsRUFJaEIsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBRVosZUFBZSxFQUNmLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFdBQVcsRUFDWCxjQUFjLEVBQ2QsTUFBTSxFQUNOLGtCQUFrQixFQUNsQixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQW9CLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFB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ZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25TZXJ2aWNlLFxuICBBcHBsaWNhdGlvblR5cGUsXG4gIElBcHBsaWNhdGlvbixcbiAgSUFwcGxpY2F0aW9uQmluYXJ5LFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uRGVsZXRlUGFyYW1zLFxuICBJQ3VycmVudFRlbmFudCxcbiAgSWRSZWZlcmVuY2UsXG4gIElGZXRjaFJlc3BvbnNlLFxuICBJSWRlbnRpZmllZCxcbiAgSU1hbmFnZWRPYmplY3QsXG4gIElNYW5pZmVzdCxcbiAgSW52ZW50b3J5U2VydmljZSxcbiAgSVJlc3VsdCxcbiAgSVJlc3VsdExpc3QsXG4gIElVcGxvYWRQYXJhbXNPdmVycmlkZSxcbiAgVGVuYW50U2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIEFwcGxpY2F0aW9uUGx1Z2luLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFja2FnZVR5cGUsXG4gIFBsdWdpbnNTZXJ2aWNlLFxuICBTdGF0dXMsXG4gIFdpemFyZE1vZGFsU2VydmljZSxcbiAgWmlwU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBnZXQsIGdyb3VwQnksIGtlYmFiQ2FzZSwgcGljaywgdW5pcUJ5LCBvbWl0LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGRlZmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2UsIG1hcCwgZmlsdGVyLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGd0LCBjb2VyY2UsIHNhdGlzZmllcyB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBFY29zeXN0ZW1FcnJvciB9IGZyb20gJy4vZWNvc3lzdGVtLWVycm9yJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU3RhdGUsIEFQUF9TVEFURSwgRVJST1JfTUVTU0FHRVMgfSBmcm9tICcuL2Vjb3N5c3RlbS5jb25zdGFudHMnO1xuaW1wb3J0IHsgRWNvc3lzdGVtV2l6YXJkcywgRVJST1JfVFlQRSwgTGljZW5zZWRBcHBsaWNhdGlvblBsdWdpbiB9IGZyb20gJy4vZWNvc3lzdGVtLm1vZGVsJztcbmltcG9ydCB7IEFwcEZpbHRlclByb3BzIH0gZnJvbSAnLi9saXN0LWZpbHRlcnMvbGlzdC1maWx0ZXJzLm1vZGVsJztcblxuY29uc3QgQ1VNVUxPQ0lUWV9KU09OID0gJ2N1bXVsb2NpdHkuanNvbic7XG5jb25zdCBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIID0gMjM7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEVjb3N5c3RlbVNlcnZpY2Uge1xuICBhcHBEZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJQXBwbGljYXRpb24+KCk7XG4gIHByb2dyZXNzOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihudWxsKTtcbiAgcHJpdmF0ZSBhcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGgkOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIElBcHBsaWNhdGlvbltdPj47XG4gIHByaXZhdGUgeGhyOiBYTUxIdHRwUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGh1bWFuaXplQXBwTmFtZTogSHVtYW5pemVBcHBOYW1lUGlwZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgemlwU2VydmljZTogWmlwU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgd2l6YXJkTW9kYWxTZXJ2aWNlOiBXaXphcmRNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbHVnaW5TZXJ2aWNlOiBQbHVnaW5zU2VydmljZVxuICApIHtcbiAgICB0aGlzLmFwcHNHcm91cGVkQnlDb250ZXh0UGF0aCQgPSBkZWZlcigoKSA9PiB0aGlzLmdldFdlYkFwcGxpY2F0aW9ucygpKS5waXBlKFxuICAgICAgbWFwKHdlYkFwcHMgPT4gZ3JvdXBCeSh3ZWJBcHBzLCAnY29udGV4dFBhdGgnKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldFVuaXF1ZUFwcENvbmZpZyhzcmNBcHA6IElBcHBsaWNhdGlvbiwgZXhpc3RpbmdBcHBzOiBJQXBwbGljYXRpb25bXSk6IElBcHBsaWNhdGlvbiB7XG4gICAgbGV0IGFwcDogSUFwcGxpY2F0aW9uID0ge1xuICAgICAgbmFtZTogc3JjQXBwLm5hbWUsXG4gICAgICBrZXk6IHNyY0FwcC5rZXksXG4gICAgICBjb250ZXh0UGF0aDogc3JjQXBwLmNvbnRleHRQYXRoXG4gICAgfTtcbiAgICBmb3IgKGxldCByZXRyeU5vID0gMDsgcmV0cnlObyA8IDk7ICkge1xuICAgICAgaWYgKHRoaXMuY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKGV4aXN0aW5nQXBwcywgYXBwLCByZXRyeU5vKSkge1xuICAgICAgICByZXRyeU5vKys7XG4gICAgICAgIGFwcCA9IHtcbiAgICAgICAgICBuYW1lOiBbc3JjQXBwLm5hbWUsIHJldHJ5Tm9dLmpvaW4oJy0nKSxcbiAgICAgICAgICBrZXk6IFtzcmNBcHAua2V5LCByZXRyeU5vXS5qb2luKCctJyksXG4gICAgICAgICAgY29udGV4dFBhdGg6IFtzcmNBcHAuY29udGV4dFBhdGgsIHJldHJ5Tm9dLmpvaW4oJy0nKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdmVyc2lvbnMgY29tcGF0aWJpbGl0eSBmb3IgYmx1ZXByaW50cy4gSWYgYSBibHVlcHJpbnQgdmVyc2lvblxuICAgKiBpcyBub3QgY29tcGF0aWJsZSwgYSB3YXJuaW5nIGlzIHNob3duLlxuICAgKlxuICAgKiBAcGFyYW0gYmx1ZXByaW50IFRoZSBibHVlcHJpbnQgdG8gaW5zdGFsbC5cbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5zdGFsbGF0aW9uIGNhbiBjb250aW51ZSBvciBmYWxzZSBpZiBpdCBzaG91bGQgYmUgYWJvcnRlZC5cbiAgICovXG4gIGFzeW5jIHZlcmlmeUJsdWVwcmludFZlcnNpb25zQ29tcGF0aWJpbGl0eShibHVlcHJpbnQ6IFBhcnRpYWw8SU1hbmlmZXN0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGFwaSA9IGF3YWl0IHRoaXMuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgaWYgKGJsdWVwcmludC52ZXJzaW9uaW5nTWF0cml4KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwbHVnaW5BcGlWZXJzaW9uID0gYmx1ZXByaW50LnZlcnNpb25pbmdNYXRyaXhbYmx1ZXByaW50LnZlcnNpb25dLmFwaTtcbiAgICAgICAgaWYgKCFzYXRpc2ZpZXMoYXBpLCBwbHVnaW5BcGlWZXJzaW9uKSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNob3dNb2RhbChibHVlcHJpbnQsIGZhbHNlLCBhcGkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2hvd01vZGFsKGJsdWVwcmludCwgZmFsc2UsIGFwaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB2ZXJzaW9ucyBjb21wYXRpYmlsaXR5IGZvciBwbHVnaW5zLiBJbiBjYXNlIGEgdmVyc2lvbiBkb2VzIG5vdCBleGlzdCBpbiB0aGVcbiAgICogdmVyc2lvbmluZ01hdHJpeCB3ZSBkb24ndCBkbyBhbnl0aGluZyBkdWUgdG8gYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gSWYgYSBwbHVnaW4gdmVyc2lvblxuICAgKiBpcyBub3QgY29tcGF0aWJsZSwgYSB3YXJuaW5nIGlzIHNob3duLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luc1RvSW5zdGFsbCBUaGUgbGlzdCBvZiBwbHVnaW5zIHRvIGluc3RhbGwuXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluc3RhbGxhdGlvbiBjYW4gY29udGludWUgb3IgZmFsc2UgaWYgaXQgc2hvdWxkIGJlIGFib3J0ZWQuXG4gICAqL1xuICBhc3luYyB2ZXJpZnlQbHVnaW5WZXJzaW9uc0NvbXBhdGliaWxpdHkoXG4gICAgcGx1Z2luc1RvSW5zdGFsbDogQXBwbGljYXRpb25QbHVnaW5bXSxcbiAgICBhcHA6IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBhcGkgPSBhd2FpdCB0aGlzLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgIGNvbnN0IHNkayA9IGFwcC5tYW5pZmVzdD8ud2ViU2RrVmVyc2lvbjtcbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zVG9JbnN0YWxsKSB7XG4gICAgICBpZiAocGx1Z2luLnZlcnNpb25pbmdNYXRyaXgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwbHVnaW5TZGtWZXJzaW9uID0gcGx1Z2luLnZlcnNpb25pbmdNYXRyaXhbcGx1Z2luLnZlcnNpb25dLnNkaztcbiAgICAgICAgICBjb25zdCBwbHVnaW5BcGlWZXJzaW9uID0gcGx1Z2luLnZlcnNpb25pbmdNYXRyaXhbcGx1Z2luLnZlcnNpb25dLmFwaTtcbiAgICAgICAgICBpZiAoIXNhdGlzZmllcyhzZGssIHBsdWdpblNka1ZlcnNpb24pIHx8ICFzYXRpc2ZpZXMoYXBpLCBwbHVnaW5BcGlWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2hvd01vZGFsKHBsdWdpbiwgdHJ1ZSwgYXBpLCBzZGspO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2hvd01vZGFsKHBsdWdpbiwgZmFsc2UsIGFwaSwgc2RrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbW11bml0eSBwbHVnaW5zIG5lZWQgdG8gdmVyaWZ5IHRoZSBsaWNlbnNlIGFncmVlbWVudC4gSWYgYSBwYWNrYWdlIGlzIGEgY29tbXVuaXR5XG4gICAqIHBhY2thZ2UsIHRoZSBsaWNlbnNlIGlzIHNob3duLlxuICAgKlxuICAgKiBAcGFyYW0gcGx1Z2luc1RvSW5zdGFsbCBUaGUgbGlzdCBvZiBwbHVnaW5zIHRvIGluc3RhbGwuXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluc3RhbGxhdGlvbiBjYW4gY29udGludWUuXG4gICAqL1xuICBhc3luYyB2ZXJpZnlMaWNlbnNlcyhwbHVnaW5zVG9JbnN0YWxsOiBBcnJheTxMaWNlbnNlZEFwcGxpY2F0aW9uUGx1Z2luPikge1xuICAgIGxldCBfcmVzb2x2ZTtcbiAgICBjb25zdCByZXN1bHQ6IFByb21pc2U8Ym9vbGVhbj4gPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIHBsdWdpbnNUb0luc3RhbGwgPSBwbHVnaW5zVG9JbnN0YWxsLmZpbHRlcihwbHVnaW4gPT4gcGx1Z2luLnR5cGUgIT09IFBhY2thZ2VUeXBlLkNVU1RPTSk7XG5cbiAgICBpZiAocGx1Z2luc1RvSW5zdGFsbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBhbnkgPSB7XG4gICAgICBpZDogRWNvc3lzdGVtV2l6YXJkcy5MSUNFTlNFX0NPTkZJUk0sXG4gICAgICBjb21wb25lbnRJbml0aWFsU3RhdGU6IHtcbiAgICAgICAgcGx1Z2luc1RvSW5zdGFsbFxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbW9kYWxPcHRpb25zID0geyBpbml0aWFsU3RhdGUgfTtcbiAgICBjb25zdCB3aXphcmQgPSB0aGlzLndpemFyZE1vZGFsU2VydmljZS5zaG93KG1vZGFsT3B0aW9ucyk7XG5cbiAgICB3aXphcmQuY29udGVudC5vbkNsb3NlLnN1YnNjcmliZShjb25maXJtZWQgPT4ge1xuICAgICAgX3Jlc29sdmUoY29uZmlybWVkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENvbXBhcmVzIGN1cnJlbnRseSBkZXBsb3llZCBhcHBsaWNhdGlvbiB2ZXJzaW9uIHdpdGggYXBwbGljYXRpb24gdmVyc2lvbiB0YWdnZWQgYXMgXCJsYXRlc3RcIlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudEFwcGxpY2F0aW9uVmVyc2lvbiBEZXBsb3llZCBhcHBsaWNhdGlvbiB2ZXJzaW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXRlc3RBcHAgTGF0ZXN0IGFwcGxpY2F0aW9uIHZlcnNpb24gb2JqZWN0XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgbGF0ZXN0IHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQsIG90aGVyd2lzZSBmYWxzZVxuICAgKi9cbiAgc2hvdWxkVXBncmFkZVBhY2thZ2UoY3VycmVudEFwcGxpY2F0aW9uVmVyc2lvbjogc3RyaW5nLCBsYXRlc3RBcHA6IElBcHBsaWNhdGlvblZlcnNpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBsYXRlc3RBcHBsaWNhdGlvblZlcnNpb24gPSBsYXRlc3RBcHA/LnZlcnNpb247XG5cbiAgICBpZiAoIWxhdGVzdEFwcGxpY2F0aW9uVmVyc2lvbiB8fCAhY3VycmVudEFwcGxpY2F0aW9uVmVyc2lvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBndChjb2VyY2UobGF0ZXN0QXBwbGljYXRpb25WZXJzaW9uKSwgY29lcmNlKGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR2V0cyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBzZWFyY2hlZCB0YWdcbiAgICpcbiAgICogQHBhcmFtIHthcnJheX0gYXBwbGljYXRpb25WZXJzaW9ucyBBcnJheSB3aXRoIGFsbCBhdmFpbGFibGUgdmVyc2lvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgU2VhcmNoZWQgdGFnXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGggc2VhcmNoZWQgdGFnXG4gICAqL1xuICBnZXRBcHBsaWNhdGlvblZlcnNpb25PYmplY3RCeVRhZyhcbiAgICBhcHBsaWNhdGlvblZlcnNpb25zOiBJQXBwbGljYXRpb25WZXJzaW9uW10sXG4gICAgdGFnTmFtZTogc3RyaW5nXG4gICk6IElBcHBsaWNhdGlvblZlcnNpb24ge1xuICAgIHJldHVybiBhcHBsaWNhdGlvblZlcnNpb25zPy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC50YWdzLmluY2x1ZGVzKHRhZ05hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldEFwcGxpY2F0aW9uKGFwcElkOiBJZFJlZmVyZW5jZSk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZXRhaWwoYXBwSWQpKS5kYXRhO1xuICB9XG5cbiAgZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElSZXN1bHRMaXN0PElBcHBsaWNhdGlvbj4+IHtcbiAgICBjb25zdCBmaWx0ZXI6IG9iamVjdCA9IHtcbiAgICAgIHBhZ2VTaXplOiAyMDAwLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24oZmlsdGVyLCBjdXN0b21GaWx0ZXIpO1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlUZW5hbnQoY3VycmVudFRlbmFudC5uYW1lLCBmaWx0ZXIpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TWljcm9zZXJ2aWNlcygpOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgYXBwcyA9IChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9ucygpKS5kYXRhO1xuICAgIGNvbnN0IG1pY3Jvc2VydmljZXMgPSBhcHBzLmZpbHRlcihhcHAgPT4gdGhpcy5pc01pY3Jvc2VydmljZShhcHApKTtcbiAgICByZXR1cm4gbWljcm9zZXJ2aWNlcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldFdlYkFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyKSkuZGF0YTtcbiAgICBjb25zdCB3ZWJBcHBzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNBcHBsaWNhdGlvbihhcHApKTtcbiAgICByZXR1cm4gd2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZlYXR1cmVBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcikpLmRhdGE7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzRmVhdHVyZShhcHApKTtcbiAgICByZXR1cm4gd2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldFBhY2thZ2VBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBmaWx0ZXJDYWxsYmFjayA9IGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApO1xuICAgIHJldHVybiB0aGlzLmdldEFwcGxpY2F0aW9uc0ZpbHRlcmVkKGN1c3RvbUZpbHRlciwgZmlsdGVyQ2FsbGJhY2spO1xuICB9XG5cbiAgYXN5bmMgZ2V0SG9zdGVkQW5kUGFja2FnZUFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGZpbHRlckNhbGxiYWNrID0gYXBwID0+IHRoaXMuaXNQYWNrYWdlKGFwcCkgfHwgdGhpcy5pc0FwcGxpY2F0aW9uKGFwcCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXBwbGljYXRpb25zRmlsdGVyZWQoY3VzdG9tRmlsdGVyLCBmaWx0ZXJDYWxsYmFjayk7XG4gIH1cblxuICBhc3luYyBnZXRBcHBsaWNhdGlvbnNGaWx0ZXJlZChcbiAgICBjdXN0b21GaWx0ZXI6IGFueSA9IHt9LFxuICAgIGZpbHRlckNhbGxiYWNrID0gKGFwcDogSUFwcGxpY2F0aW9uKSA9PiAhIWFwcFxuICApOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbih7fSwgY3VzdG9tRmlsdGVyKTtcbiAgICBjb25zdCBzaGFyZWRGaWx0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRCxcbiAgICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICAgIHBhZ2VTaXplOiAyMDAwXG4gICAgICB9LFxuICAgICAgY3VzdG9tRmlsdGVyXG4gICAgKTtcbiAgICBjb25zdCBbeyBkYXRhOiBhcHBzIH0sIHsgZGF0YTogc2hhcmVkIH1dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5nZXRBcHBsaWNhdGlvbnMoZmlsdGVyKSxcbiAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3Qoc2hhcmVkRmlsdGVyKVxuICAgIF0pO1xuICAgIGNvbnN0IHdlYkFwcHMgPSBbLi4uYXBwcywgLi4uc2hhcmVkXS5maWx0ZXIoZmlsdGVyQ2FsbGJhY2spO1xuICAgIC8vIGFuIGFwcCBjb3VsZCBiZSBzdWJzY3JpYmVkIHRvIGEgdGVuYW50LCBidXQgYWxzbyBoYXZlIGl0J3MgYXZhaWxhYmlsaXR5IHNldCB0byBTSEFSRUQsIGluIHRoYXQgY2FzZSBpdCB3b3VsZCBvY2N1ciB0d2ljZS5cbiAgICBjb25zdCB1bmlxV2ViQXBwcyA9IHVuaXFCeSh3ZWJBcHBzLCAoYXBwOiBJQXBwbGljYXRpb24pID0+IGFwcC5pZCk7XG4gICAgcmV0dXJuIHVuaXFXZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgaXNNaWNyb3NlcnZpY2VIb3N0aW5nQWxsb3dlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRhdGE6IGFwcHMgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeU5hbWUoJ2ZlYXR1cmUtbWljcm9zZXJ2aWNlLWhvc3RpbmcnKTtcbiAgICByZXR1cm4gISFhcHBzLmZpbHRlcihhcHAgPT4gYXBwLm93bmVyPy50ZW5hbnQ/LmlkID09PSAnbWFuYWdlbWVudCcpLmxlbmd0aDtcbiAgfVxuXG4gIGNhbk9wZW5BcHBJbkJyb3dzZXIoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBpc05vdEFGZWF0dXJlID0gIXRoaXMuaXNGZWF0dXJlKGFwcCk7XG4gICAgY29uc3QgaGFzUHJvcGVyVHlwZSA9IFtBcHBsaWNhdGlvblR5cGUuSE9TVEVELCBBcHBsaWNhdGlvblR5cGUuRVhURVJOQUxdLmluY2x1ZGVzKGFwcC50eXBlKTtcbiAgICBjb25zdCBpc05vdFBhY2thZ2UgPSAhdGhpcy5pc1BhY2thZ2UoYXBwKTtcbiAgICByZXR1cm4gaXNOb3RBRmVhdHVyZSAmJiBoYXNQcm9wZXJUeXBlICYmIGlzTm90UGFja2FnZTtcbiAgfVxuXG4gIG9wZW5BcHAoYXBwKSB7XG4gICAgd2luZG93Lm9wZW4odGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0SHJlZihhcHApLCAnX2JsYW5rJywgJ25vb3BlbmVyLG5vcmVmZXJyZXInKTtcbiAgfVxuXG4gIGFzeW5jIGNhbkRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzT3duZXIoYXBwKSAmJiAoIXRoaXMuaXNDdXJyZW50QXBwKGFwcCkgfHwgKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKSlcbiAgICApO1xuICB9XG5cbiAgaXNPd25lcihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICBjb25zdCBhcHBPd25lciA9IGdldChhcHAsICdvd25lci50ZW5hbnQuaWQnKTtcbiAgICByZXR1cm4gY3VycmVudFRlbmFudC5uYW1lID09PSBhcHBPd25lcjtcbiAgfVxuXG4gIGlzRmVhdHVyZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWFwcC5uYW1lLm1hdGNoKC9mZWF0dXJlLS8pO1xuICB9XG5cbiAgaXNNaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLnR5cGUgPT09ICdNSUNST1NFUlZJQ0UnO1xuICB9XG5cbiAgaXNFeHRlcm5hbChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAudHlwZSA9PT0gJ0VYVEVSTkFMJztcbiAgfVxuXG4gIGlzUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAubWFuaWZlc3Q/LmlzUGFja2FnZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGlzUGx1Z2luKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC5tYW5pZmVzdD8ucGFja2FnZSA9PT0gJ3BsdWdpbic7XG4gIH1cblxuICBjYW5jZWxBcHBDcmVhdGlvbihhcHA6IElBcHBsaWNhdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICB9XG4gICAgaWYgKGFwcCkge1xuICAgICAgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVXBsb2FkUHJvZ3Jlc3MoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgY29uc3QgY3VycmVudFByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy52YWx1ZTtcbiAgICAgIHRoaXMucHJvZ3Jlc3MubmV4dChjdXJyZW50UHJvZ3Jlc3MgKyAoZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpICogKDk1IC0gY3VycmVudFByb2dyZXNzKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QXBwQWN0aXZlVmVyc2lvbihhcHA6IElBcHBsaWNhdGlvbiwgYWN0aXZlVmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoeyBpZDogYXBwLmlkLCBhY3RpdmVWZXJzaW9uSWQgfSk7XG4gIH1cblxuICBzZXRQYWNrYWdlVmVyc2lvblRhZyhhcHA6IElBcHBsaWNhdGlvbiwgdmVyc2lvbjogc3RyaW5nLCB0YWdzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5zZXRQYWNrYWdlVmVyc2lvblRhZyhhcHAsIHZlcnNpb24sIHRhZ3MpO1xuICB9XG5cbiAgZGVsZXRlUGFja2FnZVZlcnNpb24oYXBwOiBJQXBwbGljYXRpb24sIHBhcmFtczogSUFwcGxpY2F0aW9uVmVyc2lvbkRlbGV0ZVBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShhcHAsIHBhcmFtcyk7XG4gIH1cblxuICBnZXRIdW1hbml6ZWRBcHBOYW1lKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5odW1hbml6ZUFwcE5hbWUudHJhbnNmb3JtKGFwcC5uYW1lKS5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGNyZWF0ZUNvbmZpZyhhcHA6IElBcHBsaWNhdGlvbiwgZm9ybUdyb3VwVmFsdWU6IEZvcm1Hcm91cCk6IFBhcnRpYWw8SUFwcGxpY2F0aW9uPiB7XG4gICAgY29uc3QgeyBpZCwgdHlwZSwgYXZhaWxhYmlsaXR5IH0gPSBhcHA7XG4gICAgbGV0IGNvbmZpZyA9IHBpY2soZm9ybUdyb3VwVmFsdWUsIFsnbmFtZScsICdrZXknLCAnY29udGV4dFBhdGgnXSk7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgaXNTZXR1cDogdHJ1ZSxcbiAgICAgIGlkLFxuICAgICAgdHlwZSxcbiAgICAgIGF2YWlsYWJpbGl0eVxuICAgIH07XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGxpc3RBcmNoaXZlcyhhcHBJZDogc3RyaW5nIHwgbnVtYmVyIHwgSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxJQXBwbGljYXRpb25CaW5hcnlbXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiAxMDBcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcElkKS5saXN0KGZpbHRlcikpLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGVBcmNoaXZlKGFyY2hpdmU6IElBcHBsaWNhdGlvbkJpbmFyeSwgYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcmNoaXZlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0SHVtYW5pemVkQXBwTmFtZShhcmNoaXZlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgYXJjaGl2ZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGFyY2hpdmUgXCJ7eyBodW1hbml6ZWRBcmNoaXZlTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaHVtYW5pemVkQXJjaGl2ZU5hbWUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmUuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIGRlbGV0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGdldChleCwgJ2RhdGEubWVzc2FnZScpLCBleC5kYXRhKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXJjaGl2ZU1hbmFnZWRPYmplY3QoYmluYXJ5SWQ6IHN0cmluZyk6IFByb21pc2U8SU1hbmFnZWRPYmplY3Q+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5SWQpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRBcmNoaXZlKFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGFyY2hpdmU6IFBpY2s8SUFwcGxpY2F0aW9uQmluYXJ5LCAnbmFtZScgfCAnaWQnPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5nZXRCaW5hcnkoYXBwLCBhcmNoaXZlKTtcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24veC16aXAtY29tcHJlc3NlZCcgfSk7XG4gICAgICBzYXZlQXMoZmlsZUJpbmFyeSwgYXJjaGl2ZS5uYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgZGVsZXRlT25GYWlsdXJlID0gZmFsc2UpOiBQcm9taXNlPElSZXN1bHQ8SUFwcGxpY2F0aW9uPj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKGFwcCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgICBpZiAoZGVsZXRlT25GYWlsdXJlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHAuaWQpO1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5BUFBMSUNBVElPTl9DUkVBVElPTl9GQUlMRUQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgc2lsZW50ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcHBOYW1lID0gYXdhaXQgdGhpcy5nZXRIdW1hbml6ZWRBcHBOYW1lKGFwcCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGFwcGxpY2F0aW9uJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgYXBwbGljYXRpb24gXCJ7eyBodW1hbml6ZWRBcHBOYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICksXG4gICAgICAgICAgeyBodW1hbml6ZWRBcHBOYW1lIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcC5pZCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gZGVsZXRlZC4nKSk7XG4gICAgfVxuICAgIHRoaXMuYXBwRGVsZXRlZC5lbWl0KGFwcCk7XG4gIH1cblxuICBhc3luYyBjaGVja0lmU3Vic2NyaWJlZChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpO1xuICAgIGNvbnN0IHN1YnNjcmliZWRBcHBzID0gY3VycmVudFRlbmFudC5kYXRhLmFwcGxpY2F0aW9ucy5yZWZlcmVuY2VzO1xuICAgIHJldHVybiBzdWJzY3JpYmVkQXBwcy5zb21lKGFwcGxpY2F0aW9uID0+IGFwcGxpY2F0aW9uLmFwcGxpY2F0aW9uLmlkID09PSBhcHAuaWQpO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2Uuc3Vic2NyaWJlQXBwbGljYXRpb24oY3VycmVudFRlbmFudCwgYXBwKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudW5zdWJzY3JpYmVBcHBsaWNhdGlvbihjdXJyZW50VGVuYW50LCBhcHApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdTdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzVmFsaWRBcHBUeXBlKGFyY2hpdmU6IEZpbGUsIGFwcFR5cGU6IEFwcGxpY2F0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50VHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICAgIGlmIChjdXJyZW50VHlwZSAhPT0gYXBwVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEFyY2hpdmVUb0FwcChcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGlzTmV3VmVyc2lvbiA9IGZhbHNlXG4gICk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IHVwbG9hZE92ZXJyaWRlczogSVVwbG9hZFBhcmFtc092ZXJyaWRlO1xuICAgIGlmIChpc05ld1ZlcnNpb24pIHtcbiAgICAgIHVwbG9hZE92ZXJyaWRlcyA9IGF3YWl0IHRoaXMuZ2V0VXBsb2FkT3ZlcnJpZGVzKGFyY2hpdmUsIGFwcCk7XG4gICAgfVxuICAgIGNvbnN0IGJpbmFyeVNlcnZpY2UgPSB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKTtcbiAgICB0aGlzLnhociA9IGJpbmFyeVNlcnZpY2UudXBsb2FkV2l0aFByb2dyZXNzWGhyKFxuICAgICAgYXJjaGl2ZSxcbiAgICAgIHRoaXMudXBkYXRlVXBsb2FkUHJvZ3Jlc3MuYmluZCh0aGlzKSxcbiAgICAgICcnLFxuICAgICAgdXBsb2FkT3ZlcnJpZGVzXG4gICAgKTtcblxuICAgIGNvbnN0IGJpbmFyeU1vID0gYXdhaXQgYmluYXJ5U2VydmljZS5nZXRYTUxIdHRwUmVzcG9uc2UodGhpcy54aHIpO1xuICAgIC8vIFRPRE8gY29tbWVudGVkIGl0IGR1ZSB0bzogaHR0cHM6Ly9jdW11bG9jaXR5LmF0bGFzc2lhbi5uZXQvYnJvd3NlL01UTS00ODU1M1xuICAgIC8vIEFkZCBpdCBiYWNrIHdoZW4gQkUgZml4ZXMgaXNzdWVzIHdpdGggYWN0aXZlVmVyc2lvbi5cbiAgICAvLyBpZiAoaXNOZXdWZXJzaW9uKSB7XG4gICAgLy8gICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbihhcHApO1xuICAgIC8vIH1cbiAgICBjb25zdCBub3RJbml0aWFsUGFja2FnZSA9IGFwcC5hcHBsaWNhdGlvblZlcnNpb25zPy5sZW5ndGggPiAwO1xuICAgIGlmIChub3RJbml0aWFsUGFja2FnZSkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoeyBpZDogYXBwLmlkIH0pKS5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2V0QXBwQWN0aXZlVmVyc2lvbihhcHAsIChiaW5hcnlNby5iaW5hcnlJZCB8fCBiaW5hcnlNby5pZCkgYXMgc3RyaW5nKSkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQXJjaGl2ZVRvQXBwQ29tcGF0aWJpbGl0eShhcmNoaXZlOiBGaWxlLCBhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgaWYgKGFwcFR5cGUgIT09IGFwcC50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX0FQUExJQ0FUSU9OKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTWljcm9zZXJ2aWNlKGFwcCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmUpO1xuICAgIC8vIEEgdXNlciBjYW4gdXBsb2FkIGFuIGFwcCB3aXRob3V0IGEgQ3VtdWxvY2l0eSBKU09OIGZpbGUgKGUuZy4gYSByZWFjdCBhcHApLlxuICAgIC8vIFRoaXMgaXMgYWxsb3dlZCBhbmQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgdmFsaWRhdGlvbiBlcnJvci5cbiAgICBpZiAoIW1hbmlmZXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3QsIGFwcCk7XG4gIH1cblxuICBhc3luYyBnZXRDdW11bG9jaXR5SnNvbihhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxJTWFuaWZlc3QgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGM4eU1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSkudG9Qcm9taXNlKCk7XG4gICAgICByZXR1cm4gYzh5TWFuaWZlc3Q7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFwcEZvckFyY2hpdmUoYXJjaGl2ZSwgaXNQYWNrYWdlVHlwZUFyY2hpdmUgPSBmYWxzZSk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IGlzUGFja2FnZSA9IGZhbHNlO1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgbGV0IGFwcE1vZGVsOiBhbnkgPSB7fTtcbiAgICBjb25zdCBzdXBwb3J0ZWRBcHBUeXBlcyA9IFtBcHBsaWNhdGlvblR5cGUuSE9TVEVELCBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFXTtcblxuICAgIGlmIChzdXBwb3J0ZWRBcHBUeXBlcy5pbmNsdWRlcyhhcHBUeXBlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwTW9kZWwgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICAgICAgaXNQYWNrYWdlID0gYXBwTW9kZWwuaXNQYWNrYWdlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nLCB3ZSBhbGxvdyBoYXZpbmcgSE9TVEVEIGFwcGxpY2F0aW9ucyB3aXRob3V0IHRoZSBtYW5pZmVzdCBmaWxlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldEJhc2VOYW1lRnJvbUFyY2hpdmVPckFwcE1vZGVsKGFyY2hpdmUsIGFwcFR5cGUsIGFwcE1vZGVsKTtcbiAgICBjb25zdCBjbGVhcmVkTmFtZSA9IHRoaXMucmVtb3ZlRm9yYmlkZGVuQ2hhcmFjdGVycyhuYW1lKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEFwcEtleShhcHBNb2RlbCwgY2xlYXJlZE5hbWUpO1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGhpcy5nZXRDb250ZXh0UGF0aChhcHBNb2RlbCwgbmFtZSk7XG5cbiAgICBjb25zdCBhcHBUb1NhdmUgPSB7XG4gICAgICB0eXBlOiBhcHBUeXBlLFxuICAgICAgbmFtZSxcbiAgICAgIGtleSxcbiAgICAgIGNvbnRleHRQYXRoXG4gICAgfTtcblxuICAgIGlmIChpc1BhY2thZ2VUeXBlQXJjaGl2ZSAmJiAhaXNQYWNrYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX1BBQ0tBR0UpO1xuICAgIH0gZWxzZSBpZiAoIWlzUGFja2FnZVR5cGVBcmNoaXZlICYmIGlzUGFja2FnZSkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuSU5WQUxJRF9BUFBMSUNBVElPTik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzTmFtZUxlbmd0aEV4Y2VlZGVkKG5hbWUsIGFwcFR5cGUpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgICAgZXJyb3IubmFtZSA9IEVSUk9SX1RZUEUuTUlDUk9TRVJWSUNFX05BTUVfVE9PX0xPTkc7XG4gICAgICBlcnJvci5tZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoRVJST1JfTUVTU0FHRVNbZXJyb3IubmFtZV0sIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbWF4Q2hhcnM6IE1JQ1JPU0VSVklDRV9OQU1FX01BWF9MRU5HVEhcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jcmVhdGUoe1xuICAgICAgICAuLi5hcHBUb1NhdmUsXG4gICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgaXNQYWNrYWdlLFxuICAgICAgICAgIC4uLihhcHBNb2RlbD8ucGFja2FnZSAmJiB7IHBhY2thZ2U6IGFwcE1vZGVsLnBhY2thZ2UgfSlcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIElNYW5pZmVzdFxuICAgICAgfSlcbiAgICApLmRhdGE7XG4gIH1cblxuICBhc3luYyByZWFjdGl2YXRlQXJjaGl2ZShhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5yZWFjdGl2YXRlQXJjaGl2ZShhcHAuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcHBsaWNhdGlvbiByZWFjdGl2YXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlT2xkZXN0QXJjaGl2ZShhcHA6IElBcHBsaWNhdGlvbiwgYXJjaGl2ZXM6IElBcHBsaWNhdGlvbkJpbmFyeVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIG9sZGVzdCBhcmNoaXZlIGFuZCBjb250aW51ZScpLFxuICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICdVcCB0byA2IGFyY2hpdmVzIGNhbiBiZSBzYXZlZCBpbiB0aGUgcGxhdGZvcm0uIElmIHlvdSB1cGxvYWQgYSBuZXcgYXJjaGl2ZSwgdGhlIG9sZGVzdCBhcmNoaXZlIHRoYXQgaXMgbm90IGFjdGl2ZSB3aWxsIGJlIGRlbGV0ZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuSU5GTyxcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlIGFuZCBjb250aW51ZScpIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBhcmNoaXZlVG9EZWxldGUgPSBhcmNoaXZlc1thcmNoaXZlcy5sZW5ndGggLSAyXTtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRlbGV0ZShhcmNoaXZlVG9EZWxldGUuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIGRlbGV0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnY2FuY2VsbGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVwbG95QXBwKHNlbGVjdGVkUGFja2FnZTogSUFwcGxpY2F0aW9uLCBmb3JtR3JvdXBWYWx1ZSwgbW9kZWwpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIC8vIENyZWF0ZSBuZXcgYXBwIGNvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY3JlYXRlQ29uZmlnKHNlbGVjdGVkUGFja2FnZSwgZm9ybUdyb3VwVmFsdWUpO1xuICAgIGNvbnN0IHJlcXVlc3RlZFZlcnNpb24gPSBtb2RlbC5zZWxlY3RlZC52ZXJzaW9uO1xuICAgIGxldCBjbGVhbk1hbmlmZXN0O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcE1hbmlmZXN0KFxuICAgICAgICBzZWxlY3RlZFBhY2thZ2UsXG4gICAgICAgIHJlcXVlc3RlZFZlcnNpb25cbiAgICAgICk7XG4gICAgICBjbGVhbk1hbmlmZXN0ID0gb21pdChtYW5pZmVzdCwgWyduYW1lJywgJ2NvbnRleHRQYXRoJywgJ2tleSddKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuVkVSU0lPTl9OT1RfRk9VTkQpO1xuICAgIH1cblxuICAgIGNvbmZpZy5pc1NldHVwID0gdHJ1ZTtcbiAgICBjb25maWcubWFuaWZlc3QgPSBjbGVhbk1hbmlmZXN0O1xuICAgIGNvbmZpZy5hdmFpbGFiaWxpdHkgPSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5QUklWQVRFO1xuICAgIGNvbmZpZy5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjb25maWcubWFuaWZlc3Quc291cmNlID0gc2VsZWN0ZWRQYWNrYWdlLmlkO1xuICAgIGNvbmZpZy5tYW5pZmVzdC5wYWNrYWdlID0gJ2JsdWVwcmludCc7XG5cbiAgICAvLyBiZWNhdXNlIG9mIGEgaXNzdWUgd2l0aCBTSEFSRUQgYXZhaWxhYmlsaXR5IHdlIGFsd2F5cyBzaG91bGQgY2hlY2sgYWdhaW5cbiAgICAvLyBpZiB0aGUgYXBwIG5vdCBleGlzdCBhbHJlYWR5XG4gICAgY29uc3QgYWxsRXhpc3RpbmdBcHBzID0gYXdhaXQgdGhpcy5nZXRIb3N0ZWRBbmRQYWNrYWdlQXBwbGljYXRpb25zKCk7XG4gICAgY29uc3QgZG9lc0FwcEtleU9yQ29udGV4dFBhdGhFeGlzdCA9IHRoaXMuY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKGFsbEV4aXN0aW5nQXBwcywgY29uZmlnKTtcbiAgICBpZiAoZG9lc0FwcEtleU9yQ29udGV4dFBhdGhFeGlzdCkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuQUxSRUFEWV9FWElTVCk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHBcbiAgICBjb25zdCBuZXdBcHAgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKGNvbmZpZykpLmRhdGE7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEJpbmFyeSB1cGxvYWQgY2FuIGZhaWwgaWYgU0hBUkVEIHBhY2thZ2VcbiAgICAgIC8vIGluIHRoaXMgY2FzZSwgY2F0Y2ggZXJyb3IgYW5kIGZhbGwgYmFjayB0b1xuICAgICAgLy8gY2xvbmUgQVBJLlxuICAgICAgYXdhaXQgdGhpcy51cGxvYWRCaW5hcnlGcm9tT3RoZXJQYWNrYWdlKFxuICAgICAgICBzZWxlY3RlZFBhY2thZ2UsXG4gICAgICAgIG5ld0FwcCxcbiAgICAgICAgbW9kZWwuc2VsZWN0ZWQuYmluYXJ5SWQsXG4gICAgICAgIHJlcXVlc3RlZFZlcnNpb25cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvcj8ucmVzPy5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICBhd2FpdCB0aGlzLmZhbGxiYWNrVG9DbG9uZShuZXdBcHAsIHNlbGVjdGVkUGFja2FnZSwgcmVxdWVzdGVkVmVyc2lvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHRoZSBpY29uIGlmIGEgY3VzdG9tIG9uZSBpcyBzZWxlY3RlZFxuICAgIGlmIChmb3JtR3JvdXBWYWx1ZS5pY29uKSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoe1xuICAgICAgICBpZDogbmV3QXBwLmlkLFxuICAgICAgICBjb25maWc6IHsgaWNvbjogZm9ybUdyb3VwVmFsdWUuaWNvbiB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0FwcDtcbiAgfVxuXG4gIGFzeW5jIGZhbGxiYWNrVG9DbG9uZShcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHNlbGVjdGVkUGFja2FnZTogSUFwcGxpY2F0aW9uLFxuICAgIHJlcXVlc3RlZFZlcnNpb24/OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IHdhc1N1Y2Nlc3MgPSB0cnVlO1xuICAgIGxldCBjbG9uZWRQa2c7XG4gICAgdHJ5IHtcbiAgICAgIGNsb25lZFBrZyA9IChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jbG9uZShzZWxlY3RlZFBhY2thZ2UsIHJlcXVlc3RlZFZlcnNpb24pKS5kYXRhO1xuICAgICAgYXdhaXQgdGhpcy51cGxvYWRCaW5hcnlGcm9tT3RoZXJQYWNrYWdlKFxuICAgICAgICBzZWxlY3RlZFBhY2thZ2UsXG4gICAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAgICBjbG9uZWRQa2cuYWN0aXZlVmVyc2lvbklkLFxuICAgICAgICByZXF1ZXN0ZWRWZXJzaW9uLFxuICAgICAgICBjbG9uZWRQa2dcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihlcnJvcik7XG4gICAgICB3YXNTdWNjZXNzID0gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQXBwKGNsb25lZFBrZywgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB3YXNTdWNjZXNzO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkQmluYXJ5RnJvbU90aGVyUGFja2FnZShcbiAgICBzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbixcbiAgICBhcHBsaWNhdGlvblRvVXBsb2FkQmluYXJ5VG86IElBcHBsaWNhdGlvbixcbiAgICBiaW5hcnlJZDogc3RyaW5nLFxuICAgIHJlcXVlc3RlZFZlcnNpb24/OiBzdHJpbmcsXG4gICAgdXNlQmluYXJpZXNGcm9tPzogSUFwcGxpY2F0aW9uXG4gICkge1xuICAgIGNvbnN0IHsgZGF0YTogYmluYXJ5RGV0YWlscyB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRldGFpbChiaW5hcnlJZCk7XG5cbiAgICAvLyBHZXQgYmluYXJ5IGZyb20gc3BlY2lmaWMgcGFja2FnZSB2ZXJzaW9uXG4gICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5nZXRCaW5hcnkodXNlQmluYXJpZXNGcm9tIHx8IHNlbGVjdGVkUGFja2FnZSwge1xuICAgICAgaWQ6IGJpbmFyeUlkXG4gICAgfSk7XG4gICAgLy8gQ3JlYXRlIHppcFxuICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiBiaW5hcnlEZXRhaWxzLmNvbnRlbnRUeXBlIH0pO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbZmlsZUJpbmFyeV0sIGJpbmFyeURldGFpbHMubmFtZSwge1xuICAgICAgdHlwZTogYmluYXJ5RGV0YWlscy5jb250ZW50VHlwZVxuICAgIH0pO1xuXG4gICAgLy8gVXBsb2FkIGJpbmFyeSB0byBuZXcgYXBwXG4gICAgYXdhaXQgdGhpcy51cGxvYWRBcmNoaXZlVG9BcHAoZmlsZSwgYXBwbGljYXRpb25Ub1VwbG9hZEJpbmFyeVRvKTtcblxuICAgIC8vIHVwZGF0ZSB0aGUgYXBwIG1hbmlmZXN0XG4gICAgYXdhaXQgdGhpcy51cGRhdGVBcHBNYW5pZmVzdChhcHBsaWNhdGlvblRvVXBsb2FkQmluYXJ5VG8sIHNlbGVjdGVkUGFja2FnZSwgcmVxdWVzdGVkVmVyc2lvbik7XG4gIH1cblxuICBnZXRBcHBTdGF0ZShhcHA6IElBcHBsaWNhdGlvbik6IEFwcGxpY2F0aW9uU3RhdGUge1xuICAgIGlmICghdGhpcy5pc093bmVyKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuU1VCU0NSSUJFRDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbnBhY2tlZChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlVOUEFDS0VEO1xuICAgIH0gZWxzZSBpZiAoYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5FWFRFUk5BTCkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5FWFRFUk5BTDtcbiAgICB9XG4gICAgcmV0dXJuIEFQUF9TVEFURS5DVVNUT007XG4gIH1cblxuICBnZXRQYWNrYWdlQ29udGVudFN0YXRlKGFwcDogSUFwcGxpY2F0aW9uKTogQXBwbGljYXRpb25TdGF0ZSB7XG4gICAgaWYgKCF0aGlzLmlzUGFja2FnZShhcHApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUGFja2FnZUJsdWVwcmludChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlBBQ0tBR0VfQkxVRVBSSU5UO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BsdWdpbnNQYWNrYWdlKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9QTFVHSU47XG4gICAgfVxuICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9VTktOT1dOO1xuICB9XG5cbiAgaXNQYWNrYWdlQmx1ZXByaW50KGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYWNrYWdlKGFwcCkgJiYgYXBwLm1hbmlmZXN0LnBhY2thZ2UgPT09ICdibHVlcHJpbnQnO1xuICB9XG5cbiAgaXNQbHVnaW5zUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGFja2FnZShhcHApICYmIGFwcC5tYW5pZmVzdC5wYWNrYWdlID09PSAncGx1Z2luJztcbiAgfVxuXG4gIGlzVW5wYWNrZWQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LnNvdXJjZTtcbiAgfVxuXG4gIGhhc0V4cG9ydHMoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LmV4cG9ydHM/Lmxlbmd0aDtcbiAgfVxuXG4gIGlzQXBwbGljYXRpb24oYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXBwLnR5cGUgIT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgJiYgIXRoaXMuaXNGZWF0dXJlKGFwcCkgJiYgIXRoaXMuaXNQYWNrYWdlKGFwcClcbiAgICApO1xuICB9XG5cbiAgaXNDdXN0b21NaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc093bmVyKGFwcCkgJiYgYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cblxuICBhc3luYyBnZXRCaW5hcnkoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgYXJjaGl2ZTogSUFwcGxpY2F0aW9uQmluYXJ5IHwgSUlkZW50aWZpZWRcbiAgKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgIGxldCBiaW5hcnk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRvd25sb2FkQXJjaGl2ZShhcmNoaXZlLmlkKTtcbiAgICAgIGJpbmFyeSA9IGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIobXNnKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmFyeTtcbiAgfVxuXG4gIGFzeW5jIGlzT3ZlcndyaXR0ZW5CeUN1c3RvbUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAhdGhpcy5pc093bmVyKGFwcCkgJiYgKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKTtcbiAgfVxuXG4gIGFzeW5jIGhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBhcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGggPSBhd2FpdCB0aGlzLmFwcHNHcm91cGVkQnlDb250ZXh0UGF0aCQucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICByZXR1cm4gYXBwLmNvbnRleHRQYXRoICYmIGFwcHNHcm91cGVkQnlDb250ZXh0UGF0aFthcHAuY29udGV4dFBhdGhdPy5sZW5ndGggPT09IDI7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHNldEF2YWlsYWJpbGl0eVRvUHJpdmF0ZUlmTm90U2V0QWxyZWFkeShhcHA6IElBcHBsaWNhdGlvbik6IElBcHBsaWNhdGlvbiB7XG4gICAgYXBwLmF2YWlsYWJpbGl0eSA9IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlBSSVZBVEU7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhbiBlcnJvciBkaWFsb2cuXG4gICAqIEBwYXJhbSBlcnJvciBFaXRoZXIgYSBzZXJ2ZXIgZXJyb3Igb3IgYW4gaW50ZXJuYWwgW1tFY29zeXN0ZW1FcnJvcl1dLlxuICAgKi9cbiAgYWxlcnRFcnJvcihlcnJvcjogRXJyb3IgfCBFY29zeXN0ZW1FcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVjb3N5c3RlbUVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoZXJyb3IubWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlUGFja2FnZUtleUFuZENvbnRleHRQYXRoKG1hbmlmZXN0OiBJTWFuaWZlc3QsIGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dFBhdGggPSBnZXQobWFuaWZlc3QsICdjb250ZXh0UGF0aCcpO1xuICAgIGNvbnN0IGFwcEtleSA9IGdldChtYW5pZmVzdCwgJ2tleScpO1xuICAgIGlmIChjb250ZXh0UGF0aCAhPT0gYXBwLmNvbnRleHRQYXRoIHx8IGFwcEtleSAhPT0gYXBwLmtleSkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuS0VZX09SX0NPTlRFWFRfUEFUSF9NSVNNQVRDSCk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyQ29udGFpblN0cmluZyhuYW1lOiBzdHJpbmcsIGZpbHRlclRlcm06IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRlcm0gPSBmaWx0ZXJUZXJtLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIHJldHVybiBuYW1lICYmIG5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRlcm0pID4gLTE7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBNYW5pZmVzdChcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHNlbGVjdGVkUGFja2FnZTogSUFwcGxpY2F0aW9uLFxuICAgIHJlcXVlc3RlZFZlcnNpb24/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IHJlczogSUZldGNoUmVzcG9uc2U7IGRhdGE6IGFueSB9PiB7XG4gICAgY29uc3QgeyBpZCB9ID0gYXBwbGljYXRpb247XG4gICAgY29uc3QgY2xlYW5lZEFwcCA9IHRoaXMucmVtb3ZlQXBwUHJvcGVydGllcyhhcHBsaWNhdGlvbik7XG4gICAgbGV0IG1hbmlmZXN0OiBQYXJ0aWFsPElNYW5pZmVzdD4gPSBzZWxlY3RlZFBhY2thZ2UubWFuaWZlc3QgfHwge307XG4gICAgaWYgKHJlcXVlc3RlZFZlcnNpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb25lZEFwcE1hbmlmZXN0ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0QXBwTWFuaWZlc3QoXG4gICAgICAgICAgc2VsZWN0ZWRQYWNrYWdlLFxuICAgICAgICAgIHJlcXVlc3RlZFZlcnNpb25cbiAgICAgICAgKTtcbiAgICAgICAgbWFuaWZlc3QgPSB2ZXJzaW9uZWRBcHBNYW5pZmVzdDtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLlZFUlNJT05fTk9UX0ZPVU5EKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhbmVkQXBwLm1hbmlmZXN0ID0gbWFuaWZlc3Q7XG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjbGVhbmVkQXBwLm1hbmlmZXN0LnNvdXJjZSA9IHNlbGVjdGVkUGFja2FnZS5pZDtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZVxuICAgICAgLmJpbmFyeShpZClcbiAgICAgIC51cGRhdGVGaWxlcyhbeyBwYXRoOiBDVU1VTE9DSVRZX0pTT04sIGNvbnRlbnRzOiBKU09OLnN0cmluZ2lmeShjbGVhbmVkQXBwKSBhcyBhbnkgfV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyBmb3IgZmlsdGVyaW5nIGFwcGxpY2F0aW9ucyBvbiBsaXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGFwcCBBcHBsaWNhdGlvbiB0byBjcmVhdGUgZmlsdGVyIHByb3BlcnRpZXMgZnJvbS5cbiAgICogQHJldHVybnMge29iamVjdH0gUHJvcGVydGllcyB0byBmaWx0ZXIgYnkgYXBwbGljYXRpb25zIGxpc3QuXG4gICAqL1xuICBnZXRBcHBGaWx0ZXJQcm9wcyhhcHA6IElBcHBsaWNhdGlvbik6IEFwcEZpbHRlclByb3BzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdGhpcy5wbHVnaW5TZXJ2aWNlLmdldFBhY2thZ2VUeXBlKGFwcCksXG4gICAgICBhdmFpbGFiaWxpdHk6IHRoaXMuZ2V0QXBwU3RhdGUoYXBwKT8ubGFiZWwsXG4gICAgICBjb250ZW50OiB0aGlzLmdldFBhY2thZ2VDb250ZW50U3RhdGUoYXBwKT8ubGFiZWxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmQXBwTmFtZUtleVBhdGhFeGlzdHMoXG4gICAgZXhpc3RpbmdBcHBzOiBJQXBwbGljYXRpb25bXSxcbiAgICBhcHA6IElBcHBsaWNhdGlvbixcbiAgICByZXRyeU5vPzogbnVtYmVyXG4gICk6IElBcHBsaWNhdGlvbiB7XG4gICAgaWYgKGlzVW5kZWZpbmVkKHJldHJ5Tm8pKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdBcHBzLmZpbmQoXG4gICAgICAgIGV4aXN0aW5nQXBwID0+XG4gICAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gYXBwLm5hbWUgfHxcbiAgICAgICAgICBleGlzdGluZ0FwcC5rZXkgPT09IGFwcC5rZXkgfHxcbiAgICAgICAgICBleGlzdGluZ0FwcC5jb250ZXh0UGF0aCA9PT0gYXBwLmNvbnRleHRQYXRoXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3RpbmdBcHBzLmZpbmQoXG4gICAgICBleGlzdGluZ0FwcCA9PlxuICAgICAgICBleGlzdGluZ0FwcC5uYW1lID09PSBhcHAubmFtZSB8fFxuICAgICAgICBleGlzdGluZ0FwcC5rZXkgPT09IGFwcC5rZXkgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAuY29udGV4dFBhdGggPT09IGFwcC5jb250ZXh0UGF0aCB8fFxuICAgICAgICBleGlzdGluZ0FwcC5uYW1lID09PSBbYXBwLm5hbWUsIHJldHJ5Tm9dLmpvaW4oJy0nKSB8fFxuICAgICAgICBleGlzdGluZ0FwcC5rZXkgPT09IFthcHAua2V5LCByZXRyeU5vXS5qb2luKCctJykgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAuY29udGV4dFBhdGggPT09IFthcHAuY29udGV4dFBhdGgsIHJldHJ5Tm9dLmpvaW4oJy0nKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dNb2RhbChcbiAgICBwYWNrYWdlVHlwZTogUGFydGlhbDxJTWFuaWZlc3Q+IHwgQXBwbGljYXRpb25QbHVnaW4sXG4gICAgaXNQbHVnaW46IGJvb2xlYW4sXG4gICAgYXBpVmVyc2lvbjogc3RyaW5nLFxuICAgIHNka1ZlcnNpb24/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBtZXNzYWdlOiBzdHJpbmc7XG4gICAgICBpZiAocGFja2FnZVR5cGUubmFtZSkge1xuICAgICAgICBtZXNzYWdlID0gZ2V0dGV4dChcbiAgICAgICAgICAnVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSBcInt7IG5hbWUgfX1cIiB0aGF0IHlvdSBhcmUgdHJ5aW5nIHRvIGluc3RhbGwgZG9lcyBub3Qgc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGUgZm9sbG93aW5nIEFQSSB2ZXJzaW9uIFwie3sgYXBpVmVyc2lvbiB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNQbHVnaW4pIHtcbiAgICAgICAgbWVzc2FnZSA9IGdldHRleHQoXG4gICAgICAgICAgJ1RoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHBsdWdpbiB0aGF0IHlvdSBhcmUgdHJ5aW5nIHRvIGluc3RhbGwgZG9lcyBub3Qgc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGUgZm9sbG93aW5nIEFQSSB2ZXJzaW9uIFwie3sgYXBpVmVyc2lvbiB9fVwiIG9yIFNESyB2ZXJzaW9uIFwie3sgc2RrVmVyc2lvbiB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2UgPSBnZXR0ZXh0KFxuICAgICAgICAgICdUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBibHVlcHJpbnQgdGhhdCB5b3UgYXJlIHRyeWluZyB0byBpbnN0YWxsIGRvZXMgbm90IHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIGZvbGxvd2luZyBBUEkgdmVyc2lvbiBcInt7IGFwaVZlcnNpb24gfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCB0cmFuc2xhdGVkQm9keSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1lc3NhZ2UsIHtcbiAgICAgICAgbmFtZTogcGFja2FnZVR5cGUubmFtZSxcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgc2RrVmVyc2lvblxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oZ2V0dGV4dCgnQmx1ZXByaW50IGluc3RhbGxhdGlvbicpLCB0cmFuc2xhdGVkQm9keSwgJ3dhcm5pbmcnLCB7XG4gICAgICAgIG9rOiBnZXR0ZXh0KCdDb250aW51ZScpLFxuICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG1vZGFsIGNhbmNlbGVkXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFBsYXRmb3JtVmVyc2lvbigpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKHN0YXRlID0+IHN0YXRlPy52ZXJzaW9ucz8uYmFja2VuZCksXG4gICAgICAgIGZpbHRlcihiYWNrZW5kVmVyc2lvbiA9PiAhIWJhY2tlbmRWZXJzaW9uKVxuICAgICAgKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBLZXkoYXBwTW9kZWw6IElBcHBsaWNhdGlvbiwgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQga2V5ID0gYXBwTW9kZWw/LmtleTtcbiAgICBpZiAoIWtleSkge1xuICAgICAga2V5ID0gYCR7a2ViYWJDYXNlKG5hbWUpfS1rZXlgO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0UGF0aChhcHBNb2RlbDogSUFwcGxpY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBhcHBNb2RlbD8uY29udGV4dFBhdGggfHwgbmFtZS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGb3JiaWRkZW5DaGFyYWN0ZXJzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1teYS16QS1aMC05LV9dL2csICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDdXJyZW50QXBwKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudEFwcCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLnN0YXRlLmFwcDtcbiAgICByZXR1cm4gY3VycmVudEFwcC5jb250ZXh0UGF0aCA9PT0gYXBwLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZTogRmlsZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuemlwU2VydmljZS5nZXRKc29uRGF0YShhcmNoaXZlLCB7XG4gICAgICBmaWxlbmFtZTogQ1VNVUxPQ0lUWV9KU09OXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFwcFR5cGUoYXJjaGl2ZTogRmlsZSk6IFByb21pc2U8QXBwbGljYXRpb25UeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb24kKGFyY2hpdmUpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKFxuICAgICAgICBkYXRhID0+XG4gICAgICAgICAgZ2V0KGRhdGEsICd0eXBlJykgfHxcbiAgICAgICAgICAoZ2V0KGRhdGEsICdhcGlWZXJzaW9uJykgPyBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFIDogQXBwbGljYXRpb25UeXBlLkhPU1RFRClcbiAgICAgIClcbiAgICAgIC5jYXRjaCgoKSA9PiBBcHBsaWNhdGlvblR5cGUuSE9TVEVEKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QmFzZU5hbWVGcm9tQXJjaGl2ZU9yQXBwTW9kZWwoXG4gICAgYXJjaGl2ZTogYW55LFxuICAgIGFwcFR5cGU6IEFwcGxpY2F0aW9uVHlwZSxcbiAgICBhcHBNb2RlbD86IElBcHBsaWNhdGlvblxuICApOiBzdHJpbmcge1xuICAgIGxldCBiYXNlTmFtZSA9IGFwcE1vZGVsPy5uYW1lIHx8IGFyY2hpdmUubmFtZS5yZXBsYWNlKC9cXC56aXAkL2ksICcnKTtcbiAgICBpZiAoYXBwVHlwZSA9PT0gJ01JQ1JPU0VSVklDRScpIHtcbiAgICAgIGJhc2VOYW1lID0gdGhpcy5yZW1vdmVWZXJzaW9uRnJvbU5hbWUoYmFzZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZU5hbWU7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUFwcFByb3BlcnRpZXMoYXBwOiBJQXBwbGljYXRpb24pOiBJQXBwbGljYXRpb24ge1xuICAgIGNvbnN0IHRlbXBBcHAgPSBjbG9uZURlZXAoYXBwKTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzVG9SZW1vdmUgPSBbJ2lkJywgJ293bmVyJywgJ2FjdGl2ZVZlcnNpb25JZCcsICdzZWxmJywgJ3R5cGUnXTtcblxuICAgIHByb3BlcnRpZXNUb1JlbW92ZS5mb3JFYWNoKHByb3AgPT4gZGVsZXRlIHRlbXBBcHBbcHJvcF0pO1xuICAgIHJldHVybiB0ZW1wQXBwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRVcGxvYWRPdmVycmlkZXMoXG4gICAgYXJjaGl2ZTogRmlsZSxcbiAgICBhcHA6IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPElVcGxvYWRQYXJhbXNPdmVycmlkZT4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbiB9ID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSkudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgaXNJbml0aWFsUGFja2FnZSA9IGFwcC5hcHBsaWNhdGlvblZlcnNpb25zPy5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3RVcmw6ICd2ZXJzaW9ucycsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL3ZuZC5jb20ubnNuLmN1bXVsb2NpdHkuYXBwbGljYXRpb25WZXJzaW9uK2pzb247Y2hhcnNldD1VVEYtODt2ZXI9MC45J1xuICAgICAgfSxcbiAgICAgIGJvZHlGaWxlUHJvcGVydHk6ICdhcHBsaWNhdGlvbkJpbmFyeScsXG4gICAgICByZXF1ZXN0Qm9keToge1xuICAgICAgICBhcHBsaWNhdGlvblZlcnNpb246IHsgdmVyc2lvbiwgLi4uKGlzSW5pdGlhbFBhY2thZ2UgJiYgeyB0YWdzOiBbJ2xhdGVzdCddIH0pIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVWZXJzaW9uRnJvbU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdmVyc2lvblJlZ0V4cCA9IC8tXFxkK1xcLlxcZCtcXC5cXGQrKFxcLlxcZCspPygtXFxkKyk/KC4qKSQvO1xuICAgIHJldHVybiBuYW1lLnJlcGxhY2UodmVyc2lvblJlZ0V4cCwgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05hbWVMZW5ndGhFeGNlZWRlZChuYW1lLCBhcHBUeXBlKSB7XG4gICAgcmV0dXJuIG5hbWUubGVuZ3RoID4gTUlDUk9TRVJWSUNFX05BTUVfTUFYX0xFTkdUSCAmJiBhcHBUeXBlID09PSBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFO1xuICB9XG59XG4iXX0=
@@ -62,6 +62,9 @@ export class UploadArchiveComponent {
62
62
  }
63
63
  catch (ex) {
64
64
  this.uploadInProgress = false;
65
+ if (ex === 'cancelled') {
66
+ return;
67
+ }
65
68
  this.ecosystemService.alertError(ex);
66
69
  }
67
70
  }
@@ -82,4 +85,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
82
85
  }], refresh: [{
83
86
  type: Output
84
87
  }] } });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWFyY2hpdmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3NoYXJlZC91cGxvYWQtYXJjaGl2ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL3VwbG9hZC1hcmNoaXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFNdkQsTUFBTSxPQUFPLHNCQUFzQjtJQWVqQyxZQUNVLGdCQUFrQyxFQUNsQyxZQUEwQjtRQUQxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBZjNCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV4QixzQkFBaUIsR0FBK0IsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFDakYsWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTFELGFBQVEsR0FBeUIsRUFBRSxDQUFDO1FBS3BDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixrQkFBYSxHQUFHLEtBQUssQ0FBQztJQUtuQixDQUFDO0lBRUosSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUs7UUFDNUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQ2hDO1lBQUMsT0FB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QTFCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24sIElBcHBsaWNhdGlvbkJpbmFyeSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlIH0gZnJvbSAnLi9lY29zeXN0ZW0uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS11cGxvYWQtYXJjaGl2ZScsXG4gIHRlbXBsYXRlVXJsOiAndXBsb2FkLWFyY2hpdmUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZEFyY2hpdmVDb21wb25lbnQge1xuICBASW5wdXQoKSBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uO1xuICBASW5wdXQoKSB1cGxvYWROZXdWZXJzaW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHByZVVwbG9hZENhbGxiYWNrOiAoKSA9PiBQcm9taXNlPGFueT47XG4gIEBPdXRwdXQoKSBhcHBsaWNhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPElBcHBsaWNhdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPElBcHBsaWNhdGlvbj4oKTtcbiAgQE91dHB1dCgpIHJlZnJlc2g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGFyY2hpdmVzOiBJQXBwbGljYXRpb25CaW5hcnlbXSA9IFtdO1xuICB0b0FjdGl2YXRlVmVyc2lvbklkOiBzdHJpbmc7XG4gIGxhc3Q6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBmaWxlTGlzdDogRmlsZUxpc3Q7XG4gIHVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgY2FuUmVhY3RpdmF0ZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXG4gICkge31cblxuICBnZXQgdXBsb2FkUHJvZ3Jlc3MoKTogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVjb3N5c3RlbVNlcnZpY2UucHJvZ3Jlc3M7XG4gIH1cblxuICBhc3luYyBvbkZpbGVEcm9wcGVkRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5wcmVVcGxvYWRDYWxsYmFjaykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVVcGxvYWRDYWxsYmFjaygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nLCBpLmUuIHdoZW4gY29uZmlybSBtb2RhbCBjYW5jZWxzIGFuZCB0aHJvd3MgdW5kZWZpbmVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBldmVudFswXS5maWxlO1xuICAgICAgdGhpcy5vbkZpbGUoZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkZpbGUoZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudmFsaWRhdGVBcmNoaXZlVG9BcHBDb21wYXRpYmlsaXR5KGZpbGUsIHRoaXMuYXBwbGljYXRpb24pO1xuICAgICAgY29uc3QgaXNDdXN0b21NaWNyb3NlcnZpY2UgPSB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNDdXN0b21NaWNyb3NlcnZpY2UodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgICBjb25zdCBpc1BhY2thZ2UgPSB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNQYWNrYWdlKHRoaXMuYXBwbGljYXRpb24pO1xuICAgICAgdGhpcy5hcmNoaXZlcyA9IGlzQ3VzdG9tTWljcm9zZXJ2aWNlXG4gICAgICAgID8gW11cbiAgICAgICAgOiBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UubGlzdEFyY2hpdmVzKHRoaXMuYXBwbGljYXRpb24uaWQpO1xuICAgICAgdGhpcy5hcmNoaXZlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiAobmV3IERhdGUoYi5jcmVhdGVkKSBhcyBhbnkpIC0gKG5ldyBEYXRlKGEuY3JlYXRlZCkgYXMgYW55KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3MubmV4dCgwKTtcbiAgICAgIGlmICh0aGlzLmFyY2hpdmVzLmxlbmd0aCA9PT0gNiAmJiAhaXNDdXN0b21NaWNyb3NlcnZpY2UgJiYgIWlzUGFja2FnZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UucmVtb3ZlT2xkZXN0QXJjaGl2ZSh0aGlzLmFwcGxpY2F0aW9uLCB0aGlzLmFyY2hpdmVzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcCA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGxvYWRBcmNoaXZlVG9BcHAoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24sXG4gICAgICAgIHRoaXMudXBsb2FkTmV3VmVyc2lvblxuICAgICAgKTtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25DaGFuZ2UuZW1pdChhcHApO1xuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5uZXh0KDEwMCk7XG4gICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmcmVzaC5lbWl0KCk7XG4gICAgICBpZiAodGhpcy51cGxvYWROZXdWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXJjaGl2ZSB1cGxvYWRlZCBhbmQgYWN0aXZhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuYWxlcnRFcnJvcihleCk7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LWRyb3AtYXJlYVxuICAoZHJvcHBlZCk9XCJvbkZpbGVEcm9wcGVkRXZlbnQoJGV2ZW50KVwiXG4gIFthY2NlcHRdPVwiJy56aXAnXCJcbiAgW2xvYWRpbmddPVwidXBsb2FkSW5Qcm9ncmVzc1wiXG4gIFttYXhBbGxvd2VkRmlsZXNdPVwiMVwiXG4gIFttZXNzYWdlXT1cIidVcGxvYWQgYSAqLnppcCBmaWxlJyB8IHRyYW5zbGF0ZVwiXG4gIFtwcm9ncmVzc109XCJ1cGxvYWRQcm9ncmVzcyB8IGFzeW5jXCJcbiAgW2ZvcmNlSGlkZUxpc3RdPVwidHJ1ZVwiXG4gIGNsYXNzPVwiZHJvcC1hcmVhLXNtXCJcbj5cbjwvYzh5LWRyb3AtYXJlYT5cbiJdfQ==
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWFyY2hpdmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3NoYXJlZC91cGxvYWQtYXJjaGl2ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL3VwbG9hZC1hcmNoaXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFNdkQsTUFBTSxPQUFPLHNCQUFzQjtJQWVqQyxZQUNVLGdCQUFrQyxFQUNsQyxZQUEwQjtRQUQxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBZjNCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV4QixzQkFBaUIsR0FBK0IsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFDakYsWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTFELGFBQVEsR0FBeUIsRUFBRSxDQUFDO1FBS3BDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixrQkFBYSxHQUFHLEtBQUssQ0FBQztJQUtuQixDQUFDO0lBRUosSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUs7UUFDNUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQ2hDO1lBQUMsT0FB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LEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElBcHBsaWNhdGlvbiwgSUFwcGxpY2F0aW9uQmluYXJ5IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVjb3N5c3RlbVNlcnZpY2UgfSBmcm9tICcuL2Vjb3N5c3RlbS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXVwbG9hZC1hcmNoaXZlJyxcbiAgdGVtcGxhdGVVcmw6ICd1cGxvYWQtYXJjaGl2ZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkQXJjaGl2ZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb247XG4gIEBJbnB1dCgpIHVwbG9hZE5ld1ZlcnNpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgcHJlVXBsb2FkQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8YW55PjtcbiAgQE91dHB1dCgpIGFwcGxpY2F0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUFwcGxpY2F0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUFwcGxpY2F0aW9uPigpO1xuICBAT3V0cHV0KCkgcmVmcmVzaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgYXJjaGl2ZXM6IElBcHBsaWNhdGlvbkJpbmFyeVtdID0gW107XG4gIHRvQWN0aXZhdGVWZXJzaW9uSWQ6IHN0cmluZztcbiAgbGFzdDogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIGZpbGVMaXN0OiBGaWxlTGlzdDtcbiAgdXBsb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICBjYW5SZWFjdGl2YXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2VcbiAgKSB7fVxuXG4gIGdldCB1cGxvYWRQcm9ncmVzcygpOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZWNvc3lzdGVtU2VydmljZS5wcm9ncmVzcztcbiAgfVxuXG4gIGFzeW5jIG9uRmlsZURyb3BwZWRFdmVudChldmVudCkge1xuICAgIGlmICh0aGlzLnByZVVwbG9hZENhbGxiYWNrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnByZVVwbG9hZENhbGxiYWNrKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmcsIGkuZS4gd2hlbiBjb25maXJtIG1vZGFsIGNhbmNlbHMgYW5kIHRocm93cyB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlsZSA9IGV2ZW50WzBdLmZpbGU7XG4gICAgICB0aGlzLm9uRmlsZShmaWxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uRmlsZShmaWxlOiBGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS52YWxpZGF0ZUFyY2hpdmVUb0FwcENvbXBhdGliaWxpdHkoZmlsZSwgdGhpcy5hcHBsaWNhdGlvbik7XG4gICAgICBjb25zdCBpc0N1c3RvbU1pY3Jvc2VydmljZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc0N1c3RvbU1pY3Jvc2VydmljZSh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICAgIGNvbnN0IGlzUGFja2FnZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc1BhY2thZ2UodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgICB0aGlzLmFyY2hpdmVzID0gaXNDdXN0b21NaWNyb3NlcnZpY2VcbiAgICAgICAgPyBbXVxuICAgICAgICA6IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5saXN0QXJjaGl2ZXModGhpcy5hcHBsaWNhdGlvbi5pZCk7XG4gICAgICB0aGlzLmFyY2hpdmVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShiLmNyZWF0ZWQpIGFzIGFueSkgLSAobmV3IERhdGUoYS5jcmVhdGVkKSBhcyBhbnkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5uZXh0KDApO1xuICAgICAgaWYgKHRoaXMuYXJjaGl2ZXMubGVuZ3RoID09PSA2ICYmICFpc0N1c3RvbU1pY3Jvc2VydmljZSAmJiAhaXNQYWNrYWdlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5yZW1vdmVPbGRlc3RBcmNoaXZlKHRoaXMuYXBwbGljYXRpb24sIHRoaXMuYXJjaGl2ZXMpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwbG9hZEFyY2hpdmVUb0FwcChcbiAgICAgICAgZmlsZSxcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbixcbiAgICAgICAgdGhpcy51cGxvYWROZXdWZXJzaW9uXG4gICAgICApO1xuICAgICAgdGhpcy5hcHBsaWNhdGlvbkNoYW5nZS5lbWl0KGFwcCk7XG4gICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLm5leHQoMTAwKTtcbiAgICAgIHRoaXMudXBsb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgICAgIGlmICh0aGlzLnVwbG9hZE5ld1ZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIHVwbG9hZGVkIGFuZCBhY3RpdmF0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIGlmIChleCA9PT0gJ2NhbmNlbGxlZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGM4eS1kcm9wLWFyZWFcbiAgKGRyb3BwZWQpPVwib25GaWxlRHJvcHBlZEV2ZW50KCRldmVudClcIlxuICBbYWNjZXB0XT1cIicuemlwJ1wiXG4gIFtsb2FkaW5nXT1cInVwbG9hZEluUHJvZ3Jlc3NcIlxuICBbbWF4QWxsb3dlZEZpbGVzXT1cIjFcIlxuICBbbWVzc2FnZV09XCInVXBsb2FkIGEgKi56aXAgZmlsZScgfCB0cmFuc2xhdGVcIlxuICBbcHJvZ3Jlc3NdPVwidXBsb2FkUHJvZ3Jlc3MgfCBhc3luY1wiXG4gIFtmb3JjZUhpZGVMaXN0XT1cInRydWVcIlxuICBjbGFzcz1cImRyb3AtYXJlYS1zbVwiXG4+XG48L2M4eS1kcm9wLWFyZWE+XG4iXX0=
@@ -740,7 +740,12 @@ class EcosystemService {
740
740
  this.alertService.success(gettext('Archive deleted.'));
741
741
  }
742
742
  catch (ex) {
743
- this.alertError(ex);
743
+ if (ex) {
744
+ this.alertError(ex);
745
+ }
746
+ else {
747
+ return Promise.reject('cancelled');
748
+ }
744
749
  }
745
750
  });
746
751
  }
@@ -1859,6 +1864,9 @@ class UploadArchiveComponent {
1859
1864
  }
1860
1865
  catch (ex) {
1861
1866
  this.uploadInProgress = false;
1867
+ if (ex === 'cancelled') {
1868
+ return;
1869
+ }
1862
1870
  this.ecosystemService.alertError(ex);
1863
1871
  }
1864
1872
  });