valtech-components 4.0.157 → 4.0.159

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.
@@ -832,7 +832,7 @@ export class LoginComponent {
832
832
  oauthProvider,
833
833
  });
834
834
  if (this.props.redirectOnSuccess) {
835
- this.router.navigate([this.props.redirectOnSuccess]);
835
+ void this.router.navigate([this.props.redirectOnSuccess], { replaceUrl: true });
836
836
  }
837
837
  }
838
838
  handleError(err, operation) {
@@ -952,4 +952,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
952
952
  }], onMFARequired: [{
953
953
  type: Output
954
954
  }] } });
955
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFFBQVEsRUFDUixPQUFPLEVBQ1AsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1D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O3dCQUNaLFNBQVM7d0JBQ1QsVUFBVTt3QkFDVixVQUFVO3dCQUNWLFNBQVM7d0JBQ1QsT0FBTzt3QkFDUCxRQUFRO3dCQUNSLE9BQU87d0JBQ1AsVUFBVTt3QkFDVixhQUFhO3dCQUNiLGNBQWM7cUJBQ2Y7OEJBS1EsS0FBSztzQkFBYixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgYXV0aFBhc3N3b3JkVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIElvbkJ1dHRvbixcbiAgSW9uQnV0dG9ucyxcbiAgSW9uQ29udGVudCxcbiAgSW9uSGVhZGVyLFxuICBJb25JY29uLFxuICBJb25Nb2RhbCxcbiAgSW9uVGV4dCxcbiAgSW9uVG9vbGJhcixcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aCc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlLCBJbnB1dEkxOG5IZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IExlZ2FsTGlua1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sZWdhbC1saW5rL2xlZ2FsLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtTWV0YWRhdGEsIEZvcm1TdWJtaXQsIElucHV0VHlwZSwgQ29tcG9uZW50U3RhdGVzLCBDb21wb25lbnRTdGF0ZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGJ1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9mYWN0b3J5JztcbmltcG9ydCB7IEltYWdlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9hdG9tcy9pbWFnZS90eXBlcyc7XG5pbXBvcnQge1xuICBMb2dpbk1ldGFkYXRhLFxuICBMb2dpblN1Y2Nlc3NFdmVudCxcbiAgTG9naW5FcnJvckV2ZW50LFxuICBNRkFSZXF1aXJlZEV2ZW50LFxuICBMT0dJTl9ERUZBVUxUUyxcbiAgREVGQVVMVF9MT0dJTl9MT0dPLFxufSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWxvZ2luJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uQnV0dG9ucyxcbiAgICBJb25Db250ZW50LFxuICAgIElvbkhlYWRlcixcbiAgICBJb25JY29uLFxuICAgIElvbk1vZGFsLFxuICAgIElvblRleHQsXG4gICAgSW9uVG9vbGJhcixcbiAgICBGb3JtQ29tcG9uZW50LFxuICAgIEltYWdlQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9naW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sb2dpbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcHJvcHM6IExvZ2luTWV0YWRhdGEgPSB7fTtcblxuICBAT3V0cHV0KCkgb25TdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxMb2dpblN1Y2Nlc3NFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPExvZ2luRXJyb3JFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uTUZBUmVxdWlyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1GQVJlcXVpcmVkRXZlbnQ+KCk7XG5cbiAgLy8gU2VydmljZXNcbiAgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG5IZWxwZXIgPSBpbmplY3QoSW5wdXRJMThuSGVscGVyKTtcbiAgcHJpdmF0ZSBsZWdhbExpbmsgPSBpbmplY3QoTGVnYWxMaW5rU2VydmljZSk7XG5cbiAgLyoqIFVSTCBkZWwgc2l0aW8gcHJpbmNpcGFsIHJlc3VlbHRhIHBvciBhbWJpZW50ZSDigJQgZmFsbGJhY2sgY3VhbmRvIGVsIGNvbnN1bWVyIG5vIHBhc2EgY29tcGFueUxpbmsuICovXG4gIGdldCByZXNvbHZlZENvbXBhbnlMaW5rKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubGVnYWw/LmNvbXBhbnlMaW5rID8/IHRoaXMubGVnYWxMaW5rLmJhc2VVcmwgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgZm9yIHRyYW5zbGF0aW5nIGF1dGgtcmVsYXRlZCBzdHJpbmdzLlxuICAgKiBFeHBvc2VkIHRvIHRlbXBsYXRlIGZvciBkeW5hbWljIHRleHQuXG4gICAqL1xuICB0KGtleTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgJ19hdXRoJywgZGF0YSk7XG4gIH1cblxuICAvLyBUaW1lcnNcbiAgcHJpdmF0ZSByZXNlbmRUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVzZXRSZXNlbmRUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gU3RhdGVcbiAgaXNPQXV0aExvYWRpbmcgPSBmYWxzZTtcbiAgaXNSZWdpc3Rlck1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc1ZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzUmVzZXRQYXNzd29yZE1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc01GQVZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIF9tZmFTdWNjZXNzUGVuZGluZyA9IGZhbHNlO1xuXG4gIHBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCA9ICcnO1xuICBwZW5kaW5nUmVzZXRFbWFpbCA9ICcnO1xuICByZXNlbmRDb29sZG93biA9IDA7XG4gIHJlc2V0UmVzZW5kQ29vbGRvd24gPSAwO1xuXG4gIC8vIFJlc29sdmVkIHByb3BzIHdpdGggZGVmYXVsdHNcbiAgZ2V0IGNvbmZpZygpOiBSZXF1aXJlZDxcbiAgICBPbWl0PExvZ2luTWV0YWRhdGEsICdsb2dvJyB8ICdsZWdhbCcgfCAncmVkaXJlY3RPblN1Y2Nlc3MnIHwgJ2luaXRpYWxPcGVyYXRpb24nIHwgJ2xvZ2luUm91dGUnPlxuICA+ICZcbiAgICBMb2dpbk1ldGFkYXRhIHtcbiAgICByZXR1cm4geyAuLi5MT0dJTl9ERUZBVUxUUywgLi4udGhpcy5wcm9wcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ28gYSByZW5kZXJpemFyIGFycmliYSBkZWwgZm9ybS4gU2kgZWwgY29uc3VtZXIgbm8gcGFzYSBgbG9nb2AsIGNhZSBhbFxuICAgKiBkZWZhdWx0IGRlIG1hcmNhIGRlbCBmYWN0b3J5IChgLS1tYWluLWxvZ29gIHBvciBhcHApLiBWZXIgREVGQVVMVF9MT0dJTl9MT0dPLlxuICAgKi9cbiAgZ2V0IHJlc29sdmVkTG9nbygpOiBJbWFnZU1ldGFkYXRhIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2dvID8/IERFRkFVTFRfTE9HSU5fTE9HTztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGT1JNIFNUQVRFIFNJR05BTFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBfbG9naW5Gb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfcmVnaXN0ZXJGb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfdmVyaWZ5Rm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZSA9IHNpZ25hbCgnJyk7XG4gIHByaXZhdGUgX21mYVZlcmlmeUZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9tZmFNZXRob2QgPSBzaWduYWw8J1RPVFAnIHwgJ0VNQUlMJyB8ICdTTVMnPignVE9UUCcpO1xuICAvKiogTcOpdG9kbyBNRkEgcGVuZGllbnRlIOKAlCBleHB1ZXN0byBhbCB0ZW1wbGF0ZSBwYXJhIGdhdGVhciBlbCBsaW5rIGRlIGJhY2t1cCAoc29sbyBUT1RQKS4gKi9cbiAgcmVhZG9ubHkgbWZhTWV0aG9kID0gdGhpcy5fbWZhTWV0aG9kLmFzUmVhZG9ubHkoKTtcbiAgLyoqIEE6IGVsIHVzZXIgdG9nZ2xlYSBhIFwiY8OzZGlnbyBkZSByZXNwYWxkb1wiICg4IGNoYXJzIGFsZmFudW3DqXJpY29zKSBjdWFuZG8gcGVyZGnDsyBlbCAywrogZmFjdG9yLiAqL1xuICByZWFkb25seSBtZmFVc2VCYWNrdXBDb2RlID0gc2lnbmFsKGZhbHNlKTtcbiAgLy8gQjogcmVzZXQgZGUgTUZBIHBvciBlbWFpbCAoY3VhbmRvIGVsIHVzZXIgbm8gdGllbmUgYmFja3VwIGNvZGVzKS5cbiAgaXNNRkFSZXNldE1vZGFsT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIF9tZmFSZXNldFN0ZXAgPSBzaWduYWw8J3JlcXVlc3QnIHwgJ2NvbmZpcm0nPigncmVxdWVzdCcpO1xuICByZWFkb25seSBtZmFSZXNldFN0ZXAgPSB0aGlzLl9tZmFSZXNldFN0ZXAuYXNSZWFkb25seSgpO1xuICBwcml2YXRlIF9tZmFSZXNldEZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9tZmFSZXNldEVtYWlsID0gc2lnbmFsKCcnKTtcbiAgcHJpdmF0ZSBfZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfcmVzZXRQYXNzd29yZEZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9yZXNldEZvcm1TZWN0aW9uTmFtZSA9IHNpZ25hbCgnJyk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExPR0lOIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBsb2dpbkZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ2xvZ2luVGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLkVNQUlMLFxuICAgICAgICAgICAgICBuYW1lOiAnZW1haWwnLFxuICAgICAgICAgICAgICB0b2tlbjogJ2xvZ2luLWVtYWlsJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnZW1haWwnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ2VtYWlsUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2VtYWlsUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIGVtYWlsOiAnZW1haWxJbnZhbGlkJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBBU1NXT1JELFxuICAgICAgICAgICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgICAgICAgICB0b2tlbjogJ2xvZ2luLXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAncGFzc3dvcmQnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ3Bhc3N3b3JkUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ3Bhc3N3b3JkUmVxdWlyZWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5idXR0b24oeyB0ZXh0OiAnJywgdHlwZTogJ3N1Ym1pdCcsIGZpbGw6ICdzb2xpZCcsIGV4cGFuZDogJ2Jsb2NrJyB9KSxcbiAgICAgICAgdG9rZW46ICdsb2dpbi1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAnbG9naW5TdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9sb2dpbkZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFR0lTVEVSIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSByZWdpc3RlckZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ3JlZ2lzdGVyVGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlRFWFQsXG4gICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1uYW1lJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnZnVsbE5hbWUnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ25hbWVQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnbmFtZVJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICduYW1lTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5FTUFJTCxcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1lbWFpbCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdlbWFpbFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdlbWFpbFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBlbWFpbDogJ2VtYWlsSW52YWxpZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QQVNTV09SRCxcbiAgICAgICAgICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1wYXNzd29yZCcsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdwYXNzd29yZFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdwYXNzd29yZFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBhdXRoUGFzc3dvcmQ6ICdwYXNzd29yZFN0cmVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIGF1dGhQYXNzd29yZFZhbGlkYXRvcigpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLmJ1dHRvbih7IHRleHQ6ICcnLCB0eXBlOiAnc3VibWl0JywgZmlsbDogJ3NvbGlkJywgZXhwYW5kOiAnYmxvY2snIH0pLFxuICAgICAgICB0b2tlbjogJ3JlZ2lzdGVyLXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICdyZWdpc3RlclN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX3JlZ2lzdGVyRm9ybVN0YXRlKCksXG4gICAgfSlcbiAgKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVkVSSUZZIEVNQUlMIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSB2ZXJpZnlGb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+IHtcbiAgICBjb25zdCBzZWN0aW9uTmFtZSA9IHRoaXMuX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZSgpIHx8IHRoaXMudCgndmVyaWZ5RGVzY3JpcHRpb24nKTtcbiAgICByZXR1cm4gdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICd2ZXJpZnlUaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHNlY3Rpb25OYW1lLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2NvZGUnLFxuICAgICAgICAgICAgICB0b2tlbjogJ3ZlcmlmeS1waW4nLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2NvZGVSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAnY29kZU1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICAgIGxlbmd0aDogNixcbiAgICAgICAgICAgICAgYWxsb3dOdW1iZXJzT25seTogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uYnV0dG9uKHsgdGV4dDogJycsIHR5cGU6ICdzdWJtaXQnLCBmaWxsOiAnc29saWQnLCBleHBhbmQ6ICdibG9jaycgfSksXG4gICAgICAgIHRva2VuOiAndmVyaWZ5LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICd2ZXJpZnlTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl92ZXJpZnlGb3JtU3RhdGUoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1GQSBWRVJJRlkgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IG1mYVZlcmlmeUZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuX21mYU1ldGhvZCgpO1xuICAgIGNvbnN0IHVzZUJhY2t1cCA9IHRoaXMubWZhVXNlQmFja3VwQ29kZSgpO1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gdXNlQmFja3VwXG4gICAgICA/IHRoaXMudCgnbWZhQmFja3VwQ29kZScpXG4gICAgICA6IG1ldGhvZCA9PT0gJ1RPVFAnXG4gICAgICAgID8gdGhpcy50KCdtZmFUT1RQJylcbiAgICAgICAgOiBtZXRob2QgPT09ICdFTUFJTCdcbiAgICAgICAgICA/IHRoaXMudCgnbWZhRW1haWwnKVxuICAgICAgICAgIDogdGhpcy50KCdtZmFTTVMnKTtcblxuICAgIC8vIEE6IGJhY2t1cCBjb2RlID0gOCBjaGFycyBhbGZhbnVtw6lyaWNvcyDihpIgaW5wdXQgZGUgdGV4dG8gKGVsIFBJTiBkZSA2XG4gICAgLy8gY2VsZGFzIG51bcOpcmljYXMgbm8gcHVlZGUgY2FwdHVyYXJsbykuIEVsIGJhY2tlbmQgcnV0ZWEgcG9yIGxvbmdpdHVkLlxuICAgIGNvbnN0IGNvZGVGaWVsZCA9IHVzZUJhY2t1cFxuICAgICAgPyB7XG4gICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlRFWFQsXG4gICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICB0b2tlbjogJ21mYS1iYWNrdXAnLFxuICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiAnY29kZVJlcXVpcmVkJyxcbiAgICAgICAgICAgIG1pbmxlbmd0aDogJ2JhY2t1cENvZGVNaW5MZW5ndGgnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpXSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICB0b2tlbjogJ21mYS1waW4nLFxuICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiAnY29kZVJlcXVpcmVkJyxcbiAgICAgICAgICAgIG1pbmxlbmd0aDogJ2NvZGVNaW5MZW5ndGgnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpXSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgbGVuZ3RoOiA2LFxuICAgICAgICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnbWZhVGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBzZWN0aW9uTmFtZSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtjb2RlRmllbGRdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uYnV0dG9uKHsgdGV4dDogJycsIHR5cGU6ICdzdWJtaXQnLCBmaWxsOiAnc29saWQnLCBleHBhbmQ6ICdibG9jaycgfSksXG4gICAgICAgIHRva2VuOiAnbWZhLXZlcmlmeS1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAndmVyaWZ5U3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fbWZhVmVyaWZ5Rm9ybVN0YXRlKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRkEgUkVTRVQgRk9STSAoY29tcHV0ZWQpIOKAlCBCOiByZWNvdmVyeSBwb3IgZW1haWxcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgbWZhUmVzZXRSZXF1ZXN0Rm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PlxuICAgIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnbWZhUmVzZXRUaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHRoaXMudCgnbWZhUmVzZXRSZXF1ZXN0RGVzY3JpcHRpb24nKSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLkVNQUlMLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnbWZhLXJlc2V0LWVtYWlsJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAnZW1haWxQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9tZmFSZXNldEVtYWlsKCksXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnZW1haWxSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgZW1haWw6ICdlbWFpbEludmFsaWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5idXR0b24oeyB0ZXh0OiAnJywgdHlwZTogJ3N1Ym1pdCcsIGZpbGw6ICdzb2xpZCcsIGV4cGFuZDogJ2Jsb2NrJyB9KSxcbiAgICAgICAgdG9rZW46ICdtZmEtcmVzZXQtcmVxdWVzdC1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAnbWZhUmVzZXRTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9tZmFSZXNldEZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgbWZhUmVzZXRDb25maXJtRm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PlxuICAgIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnbWZhUmVzZXRUaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHRoaXMudCgnbWZhUmVzZXRDb25maXJtRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdtZmEtcmVzZXQtcGluJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdjb2RlUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogJ2NvZGVNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgICBsZW5ndGg6IDYsXG4gICAgICAgICAgICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLmJ1dHRvbih7IHRleHQ6ICcnLCB0eXBlOiAnc3VibWl0JywgZmlsbDogJ3NvbGlkJywgZXhwYW5kOiAnYmxvY2snIH0pLFxuICAgICAgICB0b2tlbjogJ21mYS1yZXNldC1jb25maXJtLXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICdtZmFSZXNldENvbmZpcm1TdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9tZmFSZXNldEZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZPUkdPVCBQQVNTV09SRCBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgZm9yZ290UGFzc3dvcmRGb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+XG4gICAgdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICdmb3Jnb3RUaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHRoaXMudCgnZm9yZ290RGVzY3JpcHRpb24nKSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLkVNQUlMLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnZm9yZ290LWVtYWlsJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAnZW1haWxQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnZW1haWxSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgZW1haWw6ICdlbWFpbEludmFsaWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5idXR0b24oeyB0ZXh0OiAnJywgdHlwZTogJ3N1Ym1pdCcsIGZpbGw6ICdzb2xpZCcsIGV4cGFuZDogJ2Jsb2NrJyB9KSxcbiAgICAgICAgdG9rZW46ICdmb3Jnb3Qtc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ2ZvcmdvdFN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlKCksXG4gICAgfSlcbiAgKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVTRVQgUEFTU1dPUkQgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IHJlc2V0UGFzc3dvcmRGb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+IHtcbiAgICBjb25zdCBzZWN0aW9uTmFtZSA9IHRoaXMuX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lKCkgfHwgdGhpcy50KCdyZXNldERlc2NyaXB0aW9uJyk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAncmVzZXRUaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHNlY3Rpb25OYW1lLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2NvZGUnLFxuICAgICAgICAgICAgICB0b2tlbjogJ3Jlc2V0LXBpbicsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnY29kZVJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICdjb2RlTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgICAgbGVuZ3RoOiA2LFxuICAgICAgICAgICAgICBhbGxvd051bWJlcnNPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgICAgICAgICAgIG5hbWU6ICduZXdQYXNzd29yZCcsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVzZXQtbmV3LXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICduZXdQYXNzd29yZCcsXG4gICAgICAgICAgICAgIGhpbnRLZXk6ICduZXdQYXNzd29yZEhpbnQnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ3Bhc3N3b3JkUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ3Bhc3N3b3JkUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIGF1dGhQYXNzd29yZDogJ3Bhc3N3b3JkU3RyZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgYXV0aFBhc3N3b3JkVmFsaWRhdG9yKCldLFxuICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uYnV0dG9uKHsgdGV4dDogJycsIHR5cGU6ICdzdWJtaXQnLCBmaWxsOiAnc29saWQnLCBleHBhbmQ6ICdibG9jaycgfSksXG4gICAgICAgIHRva2VuOiAncmVzZXQtc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ3Jlc2V0U3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZSgpLFxuICAgIH0pO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgbG9naW5IYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgZW1haWwgPSBldmVudC5maWVsZHNbJ2VtYWlsJ107XG4gICAgY29uc3QgcGFzc3dvcmQgPSBldmVudC5maWVsZHNbJ3Bhc3N3b3JkJ107XG5cbiAgICBpZiAoIWVtYWlsIHx8ICFwYXNzd29yZCkge1xuICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdjb21wbGV0ZUFsbEZpZWxkcycpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dpbkZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5zaWduaW4oeyBlbWFpbCwgcGFzc3dvcmQgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5fbG9naW5Gb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcblxuICAgICAgICBpZiAodGhpcy5hdXRoU2VydmljZS5tZmFQZW5kaW5nKCkucmVxdWlyZWQpIHtcbiAgICAgICAgICB0aGlzLl9tZmFSZXNldEVtYWlsLnNldChlbWFpbCk7IC8vIEI6IHByZWZpbGwgZGVsIHJlc2V0IHBvciBlbWFpbFxuICAgICAgICAgIHRoaXMub3Blbk1GQVZlcmlmeU1vZGFsKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3MoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fbG9naW5Gb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcblxuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSAoZXJyIGFzIHsgY29kZT86IHN0cmluZyB9KT8uY29kZTtcbiAgICAgICAgaWYgKGVycm9yQ29kZSA9PT0gJ0FVVEhWMl9FTUFJTF9OT1RfVkVSSUZJRUQnKSB7XG4gICAgICAgICAgdGhpcy5vcGVuVmVyaWZ5TW9kYWwoZW1haWwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnc2lnbmluJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgbG9naW5XaXRoT0F1dGgocHJvdmlkZXI6ICdnb29nbGUnIHwgJ2FwcGxlJyB8ICdtaWNyb3NvZnQnKTogdm9pZCB7XG4gICAgdGhpcy5pc09BdXRoTG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ25pbldpdGhPQXV0aChwcm92aWRlcikuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc09BdXRoTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dGhTZXJ2aWNlLm1mYVBlbmRpbmcoKS5yZXF1aXJlZCkge1xuICAgICAgICAgIHRoaXMub3Blbk1GQVZlcmlmeU1vZGFsKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3MocHJvdmlkZXIpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLmlzT0F1dGhMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGU7XG4gICAgICAgIGlmIChlcnJvckNvZGUgPT09ICdQT1BVUF9DTE9TRUQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdvYXV0aCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRUdJU1RFUiBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKiogTmF2ZWdhY2nDs24gcGVuZGllbnRlIGEgbGEgcMOhZ2luYSBkZSBsb2dpbiB0cmFzIGNlcnJhciBlbCBtb2RhbCBkZSByZWdpc3Ryby4gKi9cbiAgcHJpdmF0ZSBfcGVuZGluZ0xvZ2luTmF2ID0gZmFsc2U7XG5cbiAgb3BlblJlZ2lzdGVyTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JlZ2lzdGVyTW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlUmVnaXN0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVnaXN0ZXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAvLyBOYXZlZ2FjacOzbiBkaWZlcmlkYTogc2UgaGFjZSBlbiBlbCBjaWVycmUgZGVsIG1vZGFsIChkaWREaXNtaXNzIGxsYW1hIGFjw6EpXG4gICAgLy8gcGFyYSBxdWUgaW9uLW1vZGFsIGNvbXBsZXRlIHN1IGFuaW1hY2nDs24gYW50ZXMgZGUgZW5ydXRhciDigJQgc2luIGVzdG8gZWxcbiAgICAvLyBtb2RhbCBwdWVkZSBxdWVkYXIgdmlzaWJsZSBzb2JyZSBsYSBww6FnaW5hIGRlc3Rpbm8uXG4gICAgaWYgKHRoaXMuX3BlbmRpbmdMb2dpbk5hdikge1xuICAgICAgdGhpcy5fcGVuZGluZ0xvZ2luTmF2ID0gZmFsc2U7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMucHJvcHMubG9naW5Sb3V0ZTtcbiAgICAgIGlmIChyb3V0ZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpbmsgXCLCv1lhIHRpZW5lcyBjdWVudGE/XCIgZGVsIG1vZGFsIGRlIHJlZ2lzdHJvLiBTaSBgcHJvcHMubG9naW5Sb3V0ZWAgZXN0w6FcbiAgICogY29uZmlndXJhZG8sIGNpZXJyYSBlbCBtb2RhbCB5IG5hdmVnYSBhIGxhIHDDoWdpbmEgZGUgbG9naW47IHNpIG5vLCBzb2xvXG4gICAqIGNpZXJyYSBlbCBtb2RhbCAoY29tcG9ydGFtaWVudG8gcG9yIGRlZmVjdG8pLlxuICAgKi9cbiAgb25SZWdpc3RlclN3aXRjaFRvTG9naW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMubG9naW5Sb3V0ZSkge1xuICAgICAgdGhpcy5fcGVuZGluZ0xvZ2luTmF2ID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNSZWdpc3Rlck1vZGFsT3BlbiA9IGZhbHNlOyAvLyBkaXNwYXJhIChkaWREaXNtaXNzKSDihpIgY2xvc2VSZWdpc3Rlck1vZGFsXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2VSZWdpc3Rlck1vZGFsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IGV2ZW50LmZpZWxkc1snbmFtZSddO1xuICAgIGNvbnN0IGVtYWlsID0gZXZlbnQuZmllbGRzWydlbWFpbCddO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZXZlbnQuZmllbGRzWydwYXNzd29yZCddO1xuXG4gICAgaWYgKCFuYW1lIHx8ICFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29tcGxldGVBbGxGaWVsZHMnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVnaXN0ZXJGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbnVwKHsgbmFtZSwgZW1haWwsIHBhc3N3b3JkIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuY2xvc2VSZWdpc3Rlck1vZGFsKCk7XG4gICAgICAgIHRoaXMub3BlblZlcmlmeU1vZGFsKGVtYWlsKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fcmVnaXN0ZXJGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdzaWdudXAnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVkVSSUZZIEVNQUlMIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5WZXJpZnlNb2RhbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSBlbWFpbDtcbiAgICB0aGlzLl92ZXJpZnlGb3JtU2VjdGlvbk5hbWUuc2V0KGAke3RoaXMudCgndmVyaWZ5RGVzY3JpcHRpb24nKS5yZXBsYWNlKCcuJywgJycpfSAoJHtlbWFpbH0pYCk7XG4gICAgdGhpcy5fdmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgdGhpcy5pc1ZlcmlmeU1vZGFsT3BlbiA9IHRydWU7XG4gICAgdGhpcy5zdGFydFJlc2VuZENvb2xkb3duKCk7XG4gIH1cblxuICBjbG9zZVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCA9ICcnO1xuICAgIHRoaXMuX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZS5zZXQoJycpO1xuICAgIHRoaXMuc3RvcFJlc2VuZENvb2xkb3duKCk7XG4gIH1cblxuICB2ZXJpZnlIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmZpZWxkc1snY29kZSddO1xuXG4gICAgdGhpcy5fdmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAudmVyaWZ5RW1haWwoe1xuICAgICAgICBlbWFpbDogdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgICAgIGNvZGUsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl92ZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2VtYWlsVmVyaWZpZWQnKSk7XG4gICAgICAgICAgdGhpcy5jbG9zZVZlcmlmeU1vZGFsKCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3MoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5fdmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICd2ZXJpZnknKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcmVzZW5kQ29kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNlbmRDb29sZG93biA+IDApIHJldHVybjtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNlbmRDb2RlKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsLFxuICAgICAgICB0eXBlOiAnRU1BSUxfVkVSSUZZJyxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29kZVNlbnQnKSk7XG4gICAgICAgICAgdGhpcy5zdGFydFJlc2VuZENvb2xkb3duKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAndmVyaWZ5Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRkEgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3Blbk1GQVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuYXV0aFNlcnZpY2UubWZhUGVuZGluZygpLm1ldGhvZCBhcyAnVE9UUCcgfCAnRU1BSUwnIHwgJ1NNUyc7XG4gICAgdGhpcy5fbWZhTWV0aG9kLnNldChtZXRob2QpO1xuICAgIHRoaXMubWZhVXNlQmFja3VwQ29kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSB0cnVlO1xuXG4gICAgdGhpcy5vbk1GQVJlcXVpcmVkLmVtaXQoeyBtZXRob2QgfSk7XG4gIH1cblxuICBjbG9zZU1GQVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBBOiBhbHRlcm5hIGVudHJlIGVsIGPDs2RpZ28gVE9UUCAoNiBkw61nKSB5IHVuIGPDs2RpZ28gZGUgcmVzcGFsZG8gKDggY2hhcnMpLiAqL1xuICB0b2dnbGVNRkFCYWNrdXBDb2RlKCk6IHZvaWQge1xuICAgIHRoaXMubWZhVXNlQmFja3VwQ29kZS51cGRhdGUodiA9PiAhdik7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUZBIFJFU0VUIEhBTkRMRVJTIOKAlCBCOiByZWNvdmVyeSBwb3IgZW1haWxcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3Blbk1GQVJlc2V0TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5fbWZhUmVzZXRTdGVwLnNldCgncmVxdWVzdCcpO1xuICAgIHRoaXMuX21mYVJlc2V0Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgdGhpcy5pc01GQVJlc2V0TW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlTUZBUmVzZXRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTUZBUmVzZXRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLl9tZmFSZXNldFN0ZXAuc2V0KCdyZXF1ZXN0Jyk7XG4gIH1cblxuICBtZmFSZXNldFJlcXVlc3RIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgZW1haWwgPSBldmVudC5maWVsZHNbJ2VtYWlsJ107XG4gICAgaWYgKCFlbWFpbCkge1xuICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdlbnRlckVtYWlsJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21mYVJlc2V0Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG4gICAgdGhpcy5fbWZhUmVzZXRFbWFpbC5zZXQoZW1haWwpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5yZXF1ZXN0TUZBUmVzZXQoeyBlbWFpbCB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZmFSZXNldEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLl9tZmFSZXNldFN0ZXAuc2V0KCdjb25maXJtJyk7XG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnbWZhUmVzZXRDb2RlU2VudCcpKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fbWZhUmVzZXRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdtZmEnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBtZmFSZXNldENvbmZpcm1IYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmZpZWxkc1snY29kZSddO1xuXG4gICAgdGhpcy5fbWZhUmVzZXRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2UuY29uZmlybU1GQVJlc2V0KHsgZW1haWw6IHRoaXMuX21mYVJlc2V0RW1haWwoKSwgY29kZSB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9tZmFSZXNldEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAvLyBNRkEgZGVzaGFiaWxpdGFkbyDihpIgY2VycmFtb3MgYW1ib3MgbW9kYWxlczsgZWwgdXNlciByZWluaWNpYSBlbCBsb2dpblxuICAgICAgICAvLyAoYWhvcmEgc2luIDLCuiBmYWN0b3IpIHkgcmUtZW5yb2xhIFRPVFAgZGVzZGUgYWp1c3Rlcy5cbiAgICAgICAgdGhpcy5jbG9zZU1GQVJlc2V0TW9kYWwoKTtcbiAgICAgICAgdGhpcy5jbG9zZU1GQVZlcmlmeU1vZGFsKCk7XG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnbWZhUmVzZXREb25lJykpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLl9tZmFSZXNldEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ21mYScpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeU1GQUhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG5cbiAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2UudmVyaWZ5TUZBKGNvZGUpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAvLyBEaWZlcmltb3MgaGFuZGxlTG9naW5TdWNjZXNzIGhhc3RhIHF1ZSBpb24tbW9kYWwgY29tcGxldGUgc3VcbiAgICAgICAgLy8gYW5pbWFjacOzbiBkZSBjaWVycmUgKGRpZERpc21pc3MpLiBTaW4gZXN0bywgYHJvdXRlci5uYXZpZ2F0ZWAgZGVsXG4gICAgICAgIC8vIHBhZHJlIGRlc3RydXllIGFsIGhvc3QgZGVsIG1vZGFsIGFudGVzIGRlIHF1ZSBJb25pYyBwcm9jZXNlIGVsXG4gICAgICAgIC8vIGRpc21pc3MsIHkgZWwgbW9kYWwgcXVlZGEgdmlzaWJsZSBlbmNpbWEgZGUgbGEgcMOhZ2luYSBkZXN0aW5vXG4gICAgICAgIC8vIChpT1MgUFdBKS5cbiAgICAgICAgdGhpcy5fbWZhU3VjY2Vzc1BlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsb3NlTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fbWZhVmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnbWZhJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgb25NRkFWZXJpZnlEaXNtaXNzZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21mYVN1Y2Nlc3NQZW5kaW5nKSB7XG4gICAgICB0aGlzLl9tZmFTdWNjZXNzUGVuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3ModW5kZWZpbmVkLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5Gb3Jnb3RQYXNzd29yZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBmb3Jnb3RQYXNzd29yZEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcblxuICAgIGlmICghZW1haWwpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnZW50ZXJFbWFpbCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5mb3Jnb3RQYXNzd29yZCh7IGVtYWlsIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKCk7XG4gICAgICAgIHRoaXMub3BlblJlc2V0UGFzc3dvcmRNb2RhbChlbWFpbCk7XG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29kZVNlbnQnKSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnZm9yZ290Jyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFU0VUIFBBU1NXT1JEIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5SZXNldFBhc3N3b3JkTW9kYWwoZW1haWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ1Jlc2V0RW1haWwgPSBlbWFpbDtcbiAgICB0aGlzLl9yZXNldEZvcm1TZWN0aW9uTmFtZS5zZXQoYCR7dGhpcy50KCdyZXNldERlc2NyaXB0aW9uJykucmVwbGFjZSgnLicsICcnKX0gKCR7ZW1haWx9KWApO1xuICAgIHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICB0aGlzLmlzUmVzZXRQYXNzd29yZE1vZGFsT3BlbiA9IHRydWU7XG4gICAgdGhpcy5zdGFydFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgfVxuXG4gIGNsb3NlUmVzZXRQYXNzd29yZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCA9ICcnO1xuICAgIHRoaXMuX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lLnNldCgnJyk7XG4gICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgcmVzZXRQYXNzd29yZEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBldmVudC5maWVsZHNbJ25ld1Bhc3N3b3JkJ107XG5cbiAgICB0aGlzLl9yZXNldFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZXRQYXNzd29yZCh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdSZXNldEVtYWlsLFxuICAgICAgICBjb2RlLFxuICAgICAgICBuZXdQYXNzd29yZCxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ3Bhc3N3b3JkVXBkYXRlZCcpKTtcbiAgICAgICAgICB0aGlzLmNsb3NlUmVzZXRQYXNzd29yZE1vZGFsKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3Jlc2V0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc2VuZFJlc2V0Q29kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNldFJlc2VuZENvb2xkb3duID4gMCkgcmV0dXJuO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLnJlc2VuZENvZGUoe1xuICAgICAgICBlbWFpbDogdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCxcbiAgICAgICAgdHlwZTogJ1BBU1NXT1JEX1JFU0VUJyxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29kZVNlbnQnKSk7XG4gICAgICAgICAgdGhpcy5zdGFydFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdyZXNldCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSEVMUEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIGhhbmRsZUxvZ2luU3VjY2VzcyhvYXV0aFByb3ZpZGVyPzogJ2dvb2dsZScgfCAnYXBwbGUnIHwgJ21pY3Jvc29mdCcsIG1mYUNvbXBsZXRlZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ3dlbGNvbWUnKSk7XG5cbiAgICB0aGlzLm9uU3VjY2Vzcy5lbWl0KHtcbiAgICAgIHVzZXI6IHRoaXMuYXV0aFNlcnZpY2UudXNlcigpLFxuICAgICAgbWZhQ29tcGxldGVkLFxuICAgICAgb2F1dGhQcm92aWRlcixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByb3BzLnJlZGlyZWN0T25TdWNjZXNzKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5wcm9wcy5yZWRpcmVjdE9uU3VjY2Vzc10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyOiB1bmtub3duLCBvcGVyYXRpb246IExvZ2luRXJyb3JFdmVudFsnb3BlcmF0aW9uJ10pOiB2b2lkIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICB0aGlzLnNob3dUb2FzdChtZXNzYWdlKTtcblxuICAgIHRoaXMub25FcnJvci5lbWl0KHtcbiAgICAgIGNvZGU6IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG9wZXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnJvciA9IGVyciBhcyB7XG4gICAgICBlcnJvcj86IHsgbWVzc2FnZT86IHN0cmluZzsgY29kZT86IHN0cmluZyB9O1xuICAgICAgY29kZT86IHN0cmluZztcbiAgICB9O1xuXG4gICAgLy8gTWFwIGVycm9yIGNvZGVzIHRvIGkxOG4ga2V5c1xuICAgIGNvbnN0IGVycm9yS2V5TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLy8gU2lnbmluXG4gICAgICBBVVRIVjJfSU5WQUxJRF9DUkVERU5USUFMUzogJ2Vycm9ySW52YWxpZENyZWRlbnRpYWxzJyxcbiAgICAgIEFVVEhWMl9FTUFJTF9OT1RfVkVSSUZJRUQ6ICdlcnJvckVtYWlsTm90VmVyaWZpZWQnLFxuICAgICAgQVVUSFYyX0FDQ09VTlRfU1VTUEVOREVEOiAnZXJyb3JBY2NvdW50U3VzcGVuZGVkJyxcblxuICAgICAgLy8gU2lnbnVwXG4gICAgICBBVVRIVjJfRU1BSUxfRVhJU1RTOiAnZXJyb3JFbWFpbEV4aXN0cycsXG4gICAgICBBVVRIVjJfV0VBS19QQVNTV09SRDogJ2Vycm9yV2Vha1Bhc3N3b3JkJyxcblxuICAgICAgLy8gVmVyaWZpY2F0aW9uIGNvZGVzXG4gICAgICBBVVRIVjJfSU5WQUxJRF9DT0RFOiAnZXJyb3JJbnZhbGlkQ29kZScsXG4gICAgICBBVVRIVjJfRVhQSVJFRF9DT0RFOiAnZXJyb3JFeHBpcmVkQ29kZScsXG4gICAgICBBVVRIVjJfQ09ERV9FWFBJUkVEOiAnZXJyb3JFeHBpcmVkQ29kZScsXG4gICAgICBBVVRIVjJfVE9PX01BTllfQVRURU1QVFM6ICdlcnJvclRvb01hbnlBdHRlbXB0cycsXG5cbiAgICAgIC8vIE1GQVxuICAgICAgQVVUSFYyX01GQV9JTlZBTElEX0NPREU6ICdlcnJvck1GQUludmFsaWRDb2RlJyxcblxuICAgICAgLy8gT0F1dGhcbiAgICAgIFBPUFVQX0JMT0NLRUQ6ICdlcnJvclBvcHVwQmxvY2tlZCcsXG4gICAgICBPQVVUSF9GQUlMRUQ6ICdlcnJvck9BdXRoRmFpbGVkJyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXJyb3JDb2RlID0gZXJyb3I/LmVycm9yPy5jb2RlIHx8IGVycm9yPy5jb2RlO1xuICAgIGlmIChlcnJvckNvZGUgJiYgZXJyb3JLZXlNYXBbZXJyb3JDb2RlXSkge1xuICAgICAgcmV0dXJuIHRoaXMudChlcnJvcktleU1hcFtlcnJvckNvZGVdKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3I/LmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZXJyb3IuZXJyb3IubWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50KCdlcnJvckdlbmVyaWMnKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT09MRE9XTiBUSU1FUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBzdGFydFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZW5kQ29vbGRvd24gPSAzMDtcbiAgICB0aGlzLnJlc2VuZFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNlbmRDb29sZG93bi0tO1xuICAgICAgaWYgKHRoaXMucmVzZW5kQ29vbGRvd24gPD0gMCkge1xuICAgICAgICB0aGlzLnN0b3BSZXNlbmRDb29sZG93bigpO1xuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZW5kVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZXNlbmRUaW1lcik7XG4gICAgICB0aGlzLnJlc2VuZFRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5yZXNlbmRDb29sZG93biA9IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UmVzZXRSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPSAzMDtcbiAgICB0aGlzLnJlc2V0UmVzZW5kVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24tLTtcbiAgICAgIGlmICh0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPD0gMCkge1xuICAgICAgICB0aGlzLnN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2V0UmVzZW5kVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZXNldFJlc2VuZFRpbWVyKTtcbiAgICAgIHRoaXMucmVzZXRSZXNlbmRUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA9IDA7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy5pbml0aWFsT3BlcmF0aW9uID09PSAnc2lnbnVwJykge1xuICAgICAgdGhpcy5pc1JlZ2lzdGVyTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZXNlbmRDb29sZG93bigpO1xuICAgIHRoaXMuc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInZhbC1sb2dpblwiIFtjbGFzcy52YWwtbG9naW4tLWNhcmRdPVwiY29uZmlnLnNob3dDYXJkXCI+XG4gIDwhLS0gTG9nbyDigJQgZGVmYXVsdCBkZSBtYXJjYSAoLS1tYWluLWxvZ28pIHNpIGVsIGNvbnN1bWVyIG5vIHBhc2EgbG9nbyAtLT5cbiAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicmVzb2x2ZWRMb2dvXCIgLz5cbiAgPC9kaXY+XG5cbiAgPCEtLSBMb2dpbiBGb3JtIC0tPlxuICA8dmFsLWZvcm0gW3Byb3BzXT1cImxvZ2luRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwibG9naW5IYW5kbGVyKCRldmVudClcIiAvPlxuXG4gIDwhLS0gT0F1dGggU2VjdGlvbiAtLT5cbiAgQGlmIChjb25maWcuc2hvd09BdXRoICYmIGNvbmZpZy5vYXV0aFByb3ZpZGVycy5sZW5ndGggPiAwKSB7XG4gIDxkaXYgY2xhc3M9XCJvYXV0aC1zZXBhcmF0b3JcIj5cbiAgICA8c3Bhbj57eyB0KCdvckNvbnRpbnVlV2l0aCcpIH19PC9zcGFuPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwib2F1dGgtYnV0dG9uc1wiPlxuICAgIEBmb3IgKHByb3ZpZGVyIG9mIGNvbmZpZy5vYXV0aFByb3ZpZGVyczsgdHJhY2sgcHJvdmlkZXIpIHtcbiAgICA8aW9uLWJ1dHRvblxuICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgY29sb3I9XCJkYXJrXCJcbiAgICAgIChjbGljayk9XCJsb2dpbldpdGhPQXV0aChwcm92aWRlcilcIlxuICAgICAgW2Rpc2FibGVkXT1cImlzT0F1dGhMb2FkaW5nXCJcbiAgICA+XG4gICAgICBAc3dpdGNoIChwcm92aWRlcikgeyBAY2FzZSAoJ2dvb2dsZScpIHtcbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1nb29nbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lvbi1pY29uPlxuICAgICAge3sgaXNPQXV0aExvYWRpbmcgPyB0KCdjb25uZWN0aW5nJykgOiB0KCdjb250aW51ZVdpdGhHb29nbGUnKSB9fSB9IEBjYXNlICgnYXBwbGUnKSB7XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImxvZ28tYXBwbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lvbi1pY29uPlxuICAgICAge3sgaXNPQXV0aExvYWRpbmcgPyB0KCdjb25uZWN0aW5nJykgOiB0KCdjb250aW51ZVdpdGhBcHBsZScpIH19IH0gQGNhc2UgKCdtaWNyb3NvZnQnKSB7XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImxvZ28tbWljcm9zb2Z0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pb24taWNvbj5cbiAgICAgIHt7IGlzT0F1dGhMb2FkaW5nID8gdCgnY29ubmVjdGluZycpIDogdCgnY29udGludWVXaXRoTWljcm9zb2Z0JykgfX0gfSB9XG4gICAgPC9pb24tYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG4gIH1cblxuICA8IS0tIFJlZ2lzdGVyIExpbmsgLS0+XG4gIEBpZiAoY29uZmlnLnNob3dSZWdpc3Rlcikge1xuICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rXCI+XG4gICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAge3sgdCgnbm9BY2NvdW50JykgfX1cbiAgICAgIDxhIChjbGljayk9XCJvcGVuUmVnaXN0ZXJNb2RhbCgpXCI+e3sgdCgncmVnaXN0ZXInKSB9fTwvYT5cbiAgICA8L2lvbi10ZXh0PlxuICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gRm9yZ290IFBhc3N3b3JkIExpbmsgLS0+XG4gIEBpZiAoY29uZmlnLnNob3dGb3Jnb3RQYXNzd29yZCkge1xuICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rIGZvcmdvdC1wYXNzd29yZFwiPlxuICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgIHt7IHQoJ2ZvcmdvdExpbmsnKSB9fVxuICAgICAgPGEgKGNsaWNrKT1cIm9wZW5Gb3Jnb3RQYXNzd29yZE1vZGFsKClcIj57eyB0KCdyZWNvdmVyUGFzc3dvcmQnKSB9fTwvYT5cbiAgICA8L2lvbi10ZXh0PlxuICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gTGVnYWwgTm90aWNlIC0tPlxuICBAaWYgKHByb3BzLmxlZ2FsKSB7XG4gIDxkaXYgY2xhc3M9XCJsZWdhbC1ub3RpY2VcIj5cbiAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICA8cD5cbiAgICAgICAge3sgdCgnbGVnYWxQcmVmaXgnKSB9fSBAaWYgKHJlc29sdmVkQ29tcGFueUxpbmspIHtcbiAgICAgICAgPGEgW2hyZWZdPVwicmVzb2x2ZWRDb21wYW55TGlua1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgID48c3Ryb25nPnt7IHByb3BzLmxlZ2FsLmNvbXBhbnlOYW1lIH19PC9zdHJvbmc+PC9hXG4gICAgICAgID5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxzdHJvbmc+e3sgcHJvcHMubGVnYWwuY29tcGFueU5hbWUgfX08L3N0cm9uZz5cbiAgICAgICAgfSB7eyB0KCdsZWdhbFN1ZmZpeCcpIH19IEBpZiAocHJvcHMubGVnYWwudGVybXNMaW5rKSB7XG4gICAgICAgIDxhIFtocmVmXT1cInByb3BzLmxlZ2FsLnRlcm1zTGlua1wiPnt7IHQoJ3Rlcm1zQW5kQ29uZGl0aW9ucycpIH19PC9hPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHNwYW4+e3sgdCgndGVybXNBbmRDb25kaXRpb25zJykgfX08L3NwYW4+XG4gICAgICAgIH0ge3sgdCgnYW5kJykgfX0gQGlmIChwcm9wcy5sZWdhbC5wcml2YWN5TGluaykge1xuICAgICAgICA8YSBbaHJlZl09XCJwcm9wcy5sZWdhbC5wcml2YWN5TGlua1wiPnt7IHQoJ3ByaXZhY3lQb2xpY3knKSB9fTwvYT5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxzcGFuPnt7IHQoJ3ByaXZhY3lQb2xpY3knKSB9fTwvc3Bhbj5cbiAgICAgICAgfS5cbiAgICAgIDwvcD5cbiAgICA8L2lvbi10ZXh0PlxuICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjwhLS0gUmVnaXN0ZXIgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNSZWdpc3Rlck1vZGFsT3BlblwiIChkaWREaXNtaXNzKT1cImNsb3NlUmVnaXN0ZXJNb2RhbCgpXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwiY2xvc2VSZWdpc3Rlck1vZGFsKClcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdCgnY2xvc2UnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJyZXNvbHZlZExvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJyZWdpc3RlckZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cInJlZ2lzdGVySGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF1dGgtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIHt7IHQoJ2hhc0FjY291bnQnKSB9fVxuICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9uUmVnaXN0ZXJTd2l0Y2hUb0xvZ2luKClcIj57eyB0KCdzaWduSW4nKSB9fTwvYT5cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gVmVyaWZ5IEVtYWlsIE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzVmVyaWZ5TW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImNsb3NlVmVyaWZ5TW9kYWwoKVwiPlxuICAgICAgICAgICAgPHN0cm9uZz57eyB0KCdjbG9zZScpIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInJlc29sdmVkTG9nb1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInZlcmlmeUZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cInZlcmlmeUhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIHt7IHQoJ25vQ29kZVJlY2VpdmVkJykgfX0gQGlmIChyZXNlbmRDb29sZG93biA+IDApIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29vbGRvd25cIj57eyB0KCdyZXNlbmRJbicsIHsgc2Vjb25kczogcmVzZW5kQ29vbGRvd24udG9TdHJpbmcoKSB9KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGEgKGNsaWNrKT1cInJlc2VuZENvZGUoKVwiPnt7IHQoJ3Jlc2VuZCcpIH19PC9hPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBGb3Jnb3QgUGFzc3dvcmQgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlblwiIChkaWREaXNtaXNzKT1cImNsb3NlRm9yZ290UGFzc3dvcmRNb2RhbCgpXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwiY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdCgnY2xvc2UnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJyZXNvbHZlZExvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJmb3Jnb3RQYXNzd29yZEZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cImZvcmdvdFBhc3N3b3JkSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gUmVzZXQgUGFzc3dvcmQgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImNsb3NlUmVzZXRQYXNzd29yZE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdCgnY2xvc2UnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJyZXNvbHZlZExvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJyZXNldFBhc3N3b3JkRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwicmVzZXRQYXNzd29yZEhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIHt7IHQoJ25vQ29kZVJlY2VpdmVkJykgfX0gQGlmIChyZXNldFJlc2VuZENvb2xkb3duID4gMCkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb29sZG93blwiPnt7IHQoJ3Jlc2VuZEluJywgeyBzZWNvbmRzOiByZXNldFJlc2VuZENvb2xkb3duLnRvU3RyaW5nKCkgfSkgfX08L3NwYW4+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxhIChjbGljayk9XCJyZXNlbmRSZXNldENvZGUoKVwiPnt7IHQoJ3Jlc2VuZCcpIH19PC9hPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBNRkEgVmVyaWZ5IE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzTUZBVmVyaWZ5TW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiIChkaWREaXNtaXNzKT1cIm9uTUZBVmVyaWZ5RGlzbWlzc2VkKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJjbG9zZU1GQVZlcmlmeU1vZGFsKClcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdCgnY2xvc2UnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJyZXNvbHZlZExvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJtZmFWZXJpZnlGb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJ2ZXJpZnlNRkFIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgICBAaWYgKG1mYU1ldGhvZCgpID09PSAnVE9UUCcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuZC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAgQGlmIChtZmFVc2VCYWNrdXBDb2RlKCkpIHtcbiAgICAgICAgICAgIDxhIChjbGljayk9XCJ0b2dnbGVNRkFCYWNrdXBDb2RlKClcIj57eyB0KCdtZmFVc2VUb3RwQWN0aW9uJykgfX08L2E+XG4gICAgICAgICAgICB9IEBlbHNlIHsge3sgdCgnbWZhVXNlQmFja3VwTGluaycpIH19XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwidG9nZ2xlTUZBQmFja3VwQ29kZSgpXCI+e3sgdCgnbWZhVXNlQmFja3VwQWN0aW9uJykgfX08L2E+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuZC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAge3sgdCgnbWZhTG9zdEJhY2t1cExpbmsnKSB9fVxuICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW5NRkFSZXNldE1vZGFsKClcIj57eyB0KCdtZmFSZXNldEFjdGlvbicpIH19PC9hPlxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBNRkEgUmVzZXQgTW9kYWwgKEIpIOKAlCByZWNvdmVyeSBwb3IgZW1haWwgY3VhbmRvIG5vIGhheSBiYWNrdXAgY29kZXMgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNNRkFSZXNldE1vZGFsT3BlblwiIFtiYWNrZHJvcERpc21pc3NdPVwiZmFsc2VcIiAoZGlkRGlzbWlzcyk9XCJjbG9zZU1GQVJlc2V0TW9kYWwoKVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImNsb3NlTUZBUmVzZXRNb2RhbCgpXCI+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2Nsb3NlJykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicmVzb2x2ZWRMb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAobWZhUmVzZXRTdGVwKCkgPT09ICdyZXF1ZXN0Jykge1xuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cIm1mYVJlc2V0UmVxdWVzdEZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cIm1mYVJlc2V0UmVxdWVzdEhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cIm1mYVJlc2V0Q29uZmlybUZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cIm1mYVJlc2V0Q29uZmlybUhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG4iXX0=
955
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFFBQVEsRUFDUixPQUFPLEVBQ1AsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1D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QkFDRSxXQUFXLGNBQ1QsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxVQUFVO3dCQUNWLFVBQVU7d0JBQ1YsU0FBUzt3QkFDVCxPQUFPO3dCQUNQLFFBQVE7d0JBQ1IsT0FBTzt3QkFDUCxVQUFVO3dCQUNWLGFBQWE7d0JBQ2IsY0FBYztxQkFDZjs4QkFLUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBhdXRoUGFzc3dvcmRWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgSW9uQnV0dG9uLFxuICBJb25CdXR0b25zLFxuICBJb25Db250ZW50LFxuICBJb25IZWFkZXIsXG4gIElvbkljb24sXG4gIElvbk1vZGFsLFxuICBJb25UZXh0LFxuICBJb25Ub29sYmFyLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UsIElucHV0STE4bkhlbHBlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgTGVnYWxMaW5rU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xlZ2FsLWxpbmsvbGVnYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvaW1hZ2UvaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1NZXRhZGF0YSwgRm9ybVN1Ym1pdCwgSW5wdXRUeXBlLCBDb21wb25lbnRTdGF0ZXMsIENvbXBvbmVudFN0YXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgYnV0dG9uIH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2ZhY3RvcnknO1xuaW1wb3J0IHsgSW1hZ2VNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL3R5cGVzJztcbmltcG9ydCB7XG4gIExvZ2luTWV0YWRhdGEsXG4gIExvZ2luU3VjY2Vzc0V2ZW50LFxuICBMb2dpbkVycm9yRXZlbnQsXG4gIE1GQVJlcXVpcmVkRXZlbnQsXG4gIExPR0lOX0RFRkFVTFRTLFxuICBERUZBVUxUX0xPR0lOX0xPR08sXG59IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbG9naW4nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIElvbkJ1dHRvbixcbiAgICBJb25CdXR0b25zLFxuICAgIElvbkNvbnRlbnQsXG4gICAgSW9uSGVhZGVyLFxuICAgIElvbkljb24sXG4gICAgSW9uTW9kYWwsXG4gICAgSW9uVGV4dCxcbiAgICBJb25Ub29sYmFyLFxuICAgIEZvcm1Db21wb25lbnQsXG4gICAgSW1hZ2VDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2dpbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xvZ2luLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwcm9wczogTG9naW5NZXRhZGF0YSA9IHt9O1xuXG4gIEBPdXRwdXQoKSBvblN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPExvZ2luU3VjY2Vzc0V2ZW50PigpO1xuICBAT3V0cHV0KCkgb25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8TG9naW5FcnJvckV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25NRkFSZXF1aXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TUZBUmVxdWlyZWRFdmVudD4oKTtcblxuICAvLyBTZXJ2aWNlc1xuICBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgaTE4bkhlbHBlciA9IGluamVjdChJbnB1dEkxOG5IZWxwZXIpO1xuICBwcml2YXRlIGxlZ2FsTGluayA9IGluamVjdChMZWdhbExpbmtTZXJ2aWNlKTtcblxuICAvKiogVVJMIGRlbCBzaXRpbyBwcmluY2lwYWwgcmVzdWVsdGEgcG9yIGFtYmllbnRlIOKAlCBmYWxsYmFjayBjdWFuZG8gZWwgY29uc3VtZXIgbm8gcGFzYSBjb21wYW55TGluay4gKi9cbiAgZ2V0IHJlc29sdmVkQ29tcGFueUxpbmsoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sZWdhbD8uY29tcGFueUxpbmsgPz8gdGhpcy5sZWdhbExpbmsuYmFzZVVybCA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCBmb3IgdHJhbnNsYXRpbmcgYXV0aC1yZWxhdGVkIHN0cmluZ3MuXG4gICAqIEV4cG9zZWQgdG8gdGVtcGxhdGUgZm9yIGR5bmFtaWMgdGV4dC5cbiAgICovXG4gIHQoa2V5OiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCAnX2F1dGgnLCBkYXRhKTtcbiAgfVxuXG4gIC8vIFRpbWVyc1xuICBwcml2YXRlIHJlc2VuZFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZXNldFJlc2VuZFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcblxuICAvLyBTdGF0ZVxuICBpc09BdXRoTG9hZGluZyA9IGZhbHNlO1xuICBpc1JlZ2lzdGVyTW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzVmVyaWZ5TW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzRm9yZ290UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzTUZBVmVyaWZ5TW9kYWxPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgX21mYVN1Y2Nlc3NQZW5kaW5nID0gZmFsc2U7XG5cbiAgcGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsID0gJyc7XG4gIHBlbmRpbmdSZXNldEVtYWlsID0gJyc7XG4gIHJlc2VuZENvb2xkb3duID0gMDtcbiAgcmVzZXRSZXNlbmRDb29sZG93biA9IDA7XG5cbiAgLy8gUmVzb2x2ZWQgcHJvcHMgd2l0aCBkZWZhdWx0c1xuICBnZXQgY29uZmlnKCk6IFJlcXVpcmVkPFxuICAgIE9taXQ8TG9naW5NZXRhZGF0YSwgJ2xvZ28nIHwgJ2xlZ2FsJyB8ICdyZWRpcmVjdE9uU3VjY2VzcycgfCAnaW5pdGlhbE9wZXJhdGlvbicgfCAnbG9naW5Sb3V0ZSc+XG4gID4gJlxuICAgIExvZ2luTWV0YWRhdGEge1xuICAgIHJldHVybiB7IC4uLkxPR0lOX0RFRkFVTFRTLCAuLi50aGlzLnByb3BzIH07XG4gIH1cblxuICAvKipcbiAgICogTG9nbyBhIHJlbmRlcml6YXIgYXJyaWJhIGRlbCBmb3JtLiBTaSBlbCBjb25zdW1lciBubyBwYXNhIGBsb2dvYCwgY2FlIGFsXG4gICAqIGRlZmF1bHQgZGUgbWFyY2EgZGVsIGZhY3RvcnkgKGAtLW1haW4tbG9nb2AgcG9yIGFwcCkuIFZlciBERUZBVUxUX0xPR0lOX0xPR08uXG4gICAqL1xuICBnZXQgcmVzb2x2ZWRMb2dvKCk6IEltYWdlTWV0YWRhdGEge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvZ28gPz8gREVGQVVMVF9MT0dJTl9MT0dPO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZPUk0gU1RBVEUgU0lHTkFMU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIF9sb2dpbkZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9yZWdpc3RlckZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF92ZXJpZnlGb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfdmVyaWZ5Rm9ybVNlY3Rpb25OYW1lID0gc2lnbmFsKCcnKTtcbiAgcHJpdmF0ZSBfbWZhVmVyaWZ5Rm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX21mYU1ldGhvZCA9IHNpZ25hbDwnVE9UUCcgfCAnRU1BSUwnIHwgJ1NNUyc+KCdUT1RQJyk7XG4gIC8qKiBNw6l0b2RvIE1GQSBwZW5kaWVudGUg4oCUIGV4cHVlc3RvIGFsIHRlbXBsYXRlIHBhcmEgZ2F0ZWFyIGVsIGxpbmsgZGUgYmFja3VwIChzb2xvIFRPVFApLiAqL1xuICByZWFkb25seSBtZmFNZXRob2QgPSB0aGlzLl9tZmFNZXRob2QuYXNSZWFkb25seSgpO1xuICAvKiogQTogZWwgdXNlciB0b2dnbGVhIGEgXCJjw7NkaWdvIGRlIHJlc3BhbGRvXCIgKDggY2hhcnMgYWxmYW51bcOpcmljb3MpIGN1YW5kbyBwZXJkacOzIGVsIDLCuiBmYWN0b3IuICovXG4gIHJlYWRvbmx5IG1mYVVzZUJhY2t1cENvZGUgPSBzaWduYWwoZmFsc2UpO1xuICAvLyBCOiByZXNldCBkZSBNRkEgcG9yIGVtYWlsIChjdWFuZG8gZWwgdXNlciBubyB0aWVuZSBiYWNrdXAgY29kZXMpLlxuICBpc01GQVJlc2V0TW9kYWxPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgX21mYVJlc2V0U3RlcCA9IHNpZ25hbDwncmVxdWVzdCcgfCAnY29uZmlybSc+KCdyZXF1ZXN0Jyk7XG4gIHJlYWRvbmx5IG1mYVJlc2V0U3RlcCA9IHRoaXMuX21mYVJlc2V0U3RlcC5hc1JlYWRvbmx5KCk7XG4gIHByaXZhdGUgX21mYVJlc2V0Rm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX21mYVJlc2V0RW1haWwgPSBzaWduYWwoJycpO1xuICBwcml2YXRlIF9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9yZXNldFBhc3N3b3JkRm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lID0gc2lnbmFsKCcnKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTE9HSU4gRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IGxvZ2luRm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PlxuICAgIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnbG9naW5UaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnbG9naW4tZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAnZW1haWxQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnZW1haWxSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgZW1haWw6ICdlbWFpbEludmFsaWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgICAgICAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnbG9naW4tcGFzc3dvcmQnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAncGFzc3dvcmRQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAncGFzc3dvcmRSZXF1aXJlZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLmJ1dHRvbih7IHRleHQ6ICcnLCB0eXBlOiAnc3VibWl0JywgZmlsbDogJ3NvbGlkJywgZXhwYW5kOiAnYmxvY2snIH0pLFxuICAgICAgICB0b2tlbjogJ2xvZ2luLXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICdsb2dpblN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX2xvZ2luRm9ybVN0YXRlKCksXG4gICAgfSlcbiAgKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVHSVNURVIgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IHJlZ2lzdGVyRm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PlxuICAgIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAncmVnaXN0ZXJUaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuVEVYVCxcbiAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICB0b2tlbjogJ3JlZ2lzdGVyLW5hbWUnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdmdWxsTmFtZScsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAnbmFtZVBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICduYW1lUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogJ25hbWVNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMildLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLkVNQUlMLFxuICAgICAgICAgICAgICBuYW1lOiAnZW1haWwnLFxuICAgICAgICAgICAgICB0b2tlbjogJ3JlZ2lzdGVyLWVtYWlsJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnZW1haWwnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ2VtYWlsUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2VtYWlsUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIGVtYWlsOiAnZW1haWxJbnZhbGlkJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxuICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBBU1NXT1JELFxuICAgICAgICAgICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgICAgICAgICB0b2tlbjogJ3JlZ2lzdGVyLXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAncGFzc3dvcmQnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcktleTogJ3Bhc3N3b3JkUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ3Bhc3N3b3JkUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIGF1dGhQYXNzd29yZDogJ3Bhc3N3b3JkU3RyZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgYXV0aFBhc3N3b3JkVmFsaWRhdG9yKCldLFxuICAgICAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uYnV0dG9uKHsgdGV4dDogJycsIHR5cGU6ICdzdWJtaXQnLCBmaWxsOiAnc29saWQnLCBleHBhbmQ6ICdibG9jaycgfSksXG4gICAgICAgIHRva2VuOiAncmVnaXN0ZXItc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ3JlZ2lzdGVyU3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fcmVnaXN0ZXJGb3JtU3RhdGUoKSxcbiAgICB9KVxuICApO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBWRVJJRlkgRU1BSUwgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IHZlcmlmeUZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gdGhpcy5fdmVyaWZ5Rm9ybVNlY3Rpb25OYW1lKCkgfHwgdGhpcy50KCd2ZXJpZnlEZXNjcmlwdGlvbicpO1xuICAgIHJldHVybiB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ3ZlcmlmeVRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogc2VjdGlvbk5hbWUsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QSU5fQ09ERSxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgIHRva2VuOiAndmVyaWZ5LXBpbicsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnY29kZVJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICdjb2RlTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgICAgbGVuZ3RoOiA2LFxuICAgICAgICAgICAgICBhbGxvd051bWJlcnNPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5idXR0b24oeyB0ZXh0OiAnJywgdHlwZTogJ3N1Ym1pdCcsIGZpbGw6ICdzb2xpZCcsIGV4cGFuZDogJ2Jsb2NrJyB9KSxcbiAgICAgICAgdG9rZW46ICd2ZXJpZnktc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ3ZlcmlmeVN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZSgpLFxuICAgIH0pO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUZBIFZFUklGWSBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgbWZhVmVyaWZ5Rm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PiB7XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5fbWZhTWV0aG9kKCk7XG4gICAgY29uc3QgdXNlQmFja3VwID0gdGhpcy5tZmFVc2VCYWNrdXBDb2RlKCk7XG4gICAgY29uc3Qgc2VjdGlvbk5hbWUgPSB1c2VCYWNrdXBcbiAgICAgID8gdGhpcy50KCdtZmFCYWNrdXBDb2RlJylcbiAgICAgIDogbWV0aG9kID09PSAnVE9UUCdcbiAgICAgICAgPyB0aGlzLnQoJ21mYVRPVFAnKVxuICAgICAgICA6IG1ldGhvZCA9PT0gJ0VNQUlMJ1xuICAgICAgICAgID8gdGhpcy50KCdtZmFFbWFpbCcpXG4gICAgICAgICAgOiB0aGlzLnQoJ21mYVNNUycpO1xuXG4gICAgLy8gQTogYmFja3VwIGNvZGUgPSA4IGNoYXJzIGFsZmFudW3DqXJpY29zIOKGkiBpbnB1dCBkZSB0ZXh0byAoZWwgUElOIGRlIDZcbiAgICAvLyBjZWxkYXMgbnVtw6lyaWNhcyBubyBwdWVkZSBjYXB0dXJhcmxvKS4gRWwgYmFja2VuZCBydXRlYSBwb3IgbG9uZ2l0dWQuXG4gICAgY29uc3QgY29kZUZpZWxkID0gdXNlQmFja3VwXG4gICAgICA/IHtcbiAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuVEVYVCxcbiAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgbmFtZTogJ2NvZGUnLFxuICAgICAgICAgIHRva2VuOiAnbWZhLWJhY2t1cCcsXG4gICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgcmVxdWlyZWQ6ICdjb2RlUmVxdWlyZWQnLFxuICAgICAgICAgICAgbWlubGVuZ3RoOiAnYmFja3VwQ29kZU1pbkxlbmd0aCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCldLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QSU5fQ09ERSxcbiAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgbmFtZTogJ2NvZGUnLFxuICAgICAgICAgIHRva2VuOiAnbWZhLXBpbicsXG4gICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgcmVxdWlyZWQ6ICdjb2RlUmVxdWlyZWQnLFxuICAgICAgICAgICAgbWlubGVuZ3RoOiAnY29kZU1pbkxlbmd0aCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICBsZW5ndGg6IDYsXG4gICAgICAgICAgYWxsb3dOdW1iZXJzT25seTogdHJ1ZSxcbiAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICdtZmFUaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHNlY3Rpb25OYW1lLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW2NvZGVGaWVsZF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5idXR0b24oeyB0ZXh0OiAnJywgdHlwZTogJ3N1Ym1pdCcsIGZpbGw6ICdzb2xpZCcsIGV4cGFuZDogJ2Jsb2NrJyB9KSxcbiAgICAgICAgdG9rZW46ICdtZmEtdmVyaWZ5LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICd2ZXJpZnlTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1GQSBSRVNFVCBGT1JNIChjb21wdXRlZCkg4oCUIEI6IHJlY292ZXJ5IHBvciBlbWFpbFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBtZmFSZXNldFJlcXVlc3RGb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+XG4gICAgdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICdtZmFSZXNldFRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy50KCdtZmFSZXNldFJlcXVlc3REZXNjcmlwdGlvbicpLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdtZmEtcmVzZXQtZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdlbWFpbFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX21mYVJlc2V0RW1haWwoKSxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdlbWFpbFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBlbWFpbDogJ2VtYWlsSW52YWxpZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLmJ1dHRvbih7IHRleHQ6ICcnLCB0eXBlOiAnc3VibWl0JywgZmlsbDogJ3NvbGlkJywgZXhwYW5kOiAnYmxvY2snIH0pLFxuICAgICAgICB0b2tlbjogJ21mYS1yZXNldC1yZXF1ZXN0LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICdtZmFSZXNldFN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX21mYVJlc2V0Rm9ybVN0YXRlKCksXG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBtZmFSZXNldENvbmZpcm1Gb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+XG4gICAgdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICdtZmFSZXNldFRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy50KCdtZmFSZXNldENvbmZpcm1EZXNjcmlwdGlvbicpLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2NvZGUnLFxuICAgICAgICAgICAgICB0b2tlbjogJ21mYS1yZXNldC1waW4nLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2NvZGVSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAnY29kZU1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICAgIGxlbmd0aDogNixcbiAgICAgICAgICAgICAgYWxsb3dOdW1iZXJzT25seTogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uYnV0dG9uKHsgdGV4dDogJycsIHR5cGU6ICdzdWJtaXQnLCBmaWxsOiAnc29saWQnLCBleHBhbmQ6ICdibG9jaycgfSksXG4gICAgICAgIHRva2VuOiAnbWZhLXJlc2V0LWNvbmZpcm0tc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ21mYVJlc2V0Q29uZmlybVN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX21mYVJlc2V0Rm9ybVN0YXRlKCksXG4gICAgfSlcbiAgKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBmb3Jnb3RQYXNzd29yZEZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ2ZvcmdvdFRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy50KCdmb3Jnb3REZXNjcmlwdGlvbicpLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdmb3Jnb3QtZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdlbWFpbFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdlbWFpbFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBlbWFpbDogJ2VtYWlsSW52YWxpZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLmJ1dHRvbih7IHRleHQ6ICcnLCB0eXBlOiAnc3VibWl0JywgZmlsbDogJ3NvbGlkJywgZXhwYW5kOiAnYmxvY2snIH0pLFxuICAgICAgICB0b2tlbjogJ2ZvcmdvdC1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAnZm9yZ290U3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUoKSxcbiAgICB9KVxuICApO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVNFVCBQQVNTV09SRCBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgcmVzZXRQYXNzd29yZEZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gdGhpcy5fcmVzZXRGb3JtU2VjdGlvbk5hbWUoKSB8fCB0aGlzLnQoJ3Jlc2V0RGVzY3JpcHRpb24nKTtcbiAgICByZXR1cm4gdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICdyZXNldFRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogc2VjdGlvbk5hbWUsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QSU5fQ09ERSxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVzZXQtcGluJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdjb2RlUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogJ2NvZGVNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgICBsZW5ndGg6IDYsXG4gICAgICAgICAgICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QQVNTV09SRCxcbiAgICAgICAgICAgICAgbmFtZTogJ25ld1Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZXNldC1uZXctcGFzc3dvcmQnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ25ld1Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgaGludEtleTogJ25ld1Bhc3N3b3JkSGludCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAncGFzc3dvcmRQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAncGFzc3dvcmRSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgYXV0aFBhc3N3b3JkOiAncGFzc3dvcmRTdHJlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBhdXRoUGFzc3dvcmRWYWxpZGF0b3IoKV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5idXR0b24oeyB0ZXh0OiAnJywgdHlwZTogJ3N1Ym1pdCcsIGZpbGw6ICdzb2xpZCcsIGV4cGFuZDogJ2Jsb2NrJyB9KSxcbiAgICAgICAgdG9rZW46ICdyZXNldC1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAncmVzZXRTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9yZXNldFBhc3N3b3JkRm9ybVN0YXRlKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBsb2dpbkhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcbiAgICBjb25zdCBwYXNzd29yZCA9IGV2ZW50LmZpZWxkc1sncGFzc3dvcmQnXTtcblxuICAgIGlmICghZW1haWwgfHwgIXBhc3N3b3JkKSB7XG4gICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvbXBsZXRlQWxsRmllbGRzJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2luRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ25pbih7IGVtYWlsLCBwYXNzd29yZCB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9sb2dpbkZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dGhTZXJ2aWNlLm1mYVBlbmRpbmcoKS5yZXF1aXJlZCkge1xuICAgICAgICAgIHRoaXMuX21mYVJlc2V0RW1haWwuc2V0KGVtYWlsKTsgLy8gQjogcHJlZmlsbCBkZWwgcmVzZXQgcG9yIGVtYWlsXG4gICAgICAgICAgdGhpcy5vcGVuTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUxvZ2luU3VjY2VzcygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLl9sb2dpbkZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuXG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlO1xuICAgICAgICBpZiAoZXJyb3JDb2RlID09PSAnQVVUSFYyX0VNQUlMX05PVF9WRVJJRklFRCcpIHtcbiAgICAgICAgICB0aGlzLm9wZW5WZXJpZnlNb2RhbChlbWFpbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdzaWduaW4nKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBsb2dpbldpdGhPQXV0aChwcm92aWRlcjogJ2dvb2dsZScgfCAnYXBwbGUnIHwgJ21pY3Jvc29mdCcpOiB2b2lkIHtcbiAgICB0aGlzLmlzT0F1dGhMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbmluV2l0aE9BdXRoKHByb3ZpZGVyKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzT0F1dGhMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuYXV0aFNlcnZpY2UubWZhUGVuZGluZygpLnJlcXVpcmVkKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUxvZ2luU3VjY2Vzcyhwcm92aWRlcik7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuaXNPQXV0aExvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSAoZXJyIGFzIHsgY29kZT86IHN0cmluZyB9KT8uY29kZTtcbiAgICAgICAgaWYgKGVycm9yQ29kZSA9PT0gJ1BPUFVQX0NMT1NFRCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ29hdXRoJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFR0lTVEVSIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBOYXZlZ2FjacOzbiBwZW5kaWVudGUgYSBsYSBww6FnaW5hIGRlIGxvZ2luIHRyYXMgY2VycmFyIGVsIG1vZGFsIGRlIHJlZ2lzdHJvLiAqL1xuICBwcml2YXRlIF9wZW5kaW5nTG9naW5OYXYgPSBmYWxzZTtcblxuICBvcGVuUmVnaXN0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVnaXN0ZXJNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VSZWdpc3Rlck1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSZWdpc3Rlck1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIC8vIE5hdmVnYWNpw7NuIGRpZmVyaWRhOiBzZSBoYWNlIGVuIGVsIGNpZXJyZSBkZWwgbW9kYWwgKGRpZERpc21pc3MgbGxhbWEgYWPDoSlcbiAgICAvLyBwYXJhIHF1ZSBpb24tbW9kYWwgY29tcGxldGUgc3UgYW5pbWFjacOzbiBhbnRlcyBkZSBlbnJ1dGFyIOKAlCBzaW4gZXN0byBlbFxuICAgIC8vIG1vZGFsIHB1ZWRlIHF1ZWRhciB2aXNpYmxlIHNvYnJlIGxhIHDDoWdpbmEgZGVzdGluby5cbiAgICBpZiAodGhpcy5fcGVuZGluZ0xvZ2luTmF2KSB7XG4gICAgICB0aGlzLl9wZW5kaW5nTG9naW5OYXYgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5wcm9wcy5sb2dpblJvdXRlO1xuICAgICAgaWYgKHJvdXRlKSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGVdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGluayBcIsK/WWEgdGllbmVzIGN1ZW50YT9cIiBkZWwgbW9kYWwgZGUgcmVnaXN0cm8uIFNpIGBwcm9wcy5sb2dpblJvdXRlYCBlc3TDoVxuICAgKiBjb25maWd1cmFkbywgY2llcnJhIGVsIG1vZGFsIHkgbmF2ZWdhIGEgbGEgcMOhZ2luYSBkZSBsb2dpbjsgc2kgbm8sIHNvbG9cbiAgICogY2llcnJhIGVsIG1vZGFsIChjb21wb3J0YW1pZW50byBwb3IgZGVmZWN0bykuXG4gICAqL1xuICBvblJlZ2lzdGVyU3dpdGNoVG9Mb2dpbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy5sb2dpblJvdXRlKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nTG9naW5OYXYgPSB0cnVlO1xuICAgICAgdGhpcy5pc1JlZ2lzdGVyTW9kYWxPcGVuID0gZmFsc2U7IC8vIGRpc3BhcmEgKGRpZERpc21pc3MpIOKGkiBjbG9zZVJlZ2lzdGVyTW9kYWxcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZVJlZ2lzdGVyTW9kYWwoKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3RlckhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lID0gZXZlbnQuZmllbGRzWyduYW1lJ107XG4gICAgY29uc3QgZW1haWwgPSBldmVudC5maWVsZHNbJ2VtYWlsJ107XG4gICAgY29uc3QgcGFzc3dvcmQgPSBldmVudC5maWVsZHNbJ3Bhc3N3b3JkJ107XG5cbiAgICBpZiAoIW5hbWUgfHwgIWVtYWlsIHx8ICFwYXNzd29yZCkge1xuICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdjb21wbGV0ZUFsbEZpZWxkcycpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWdpc3RlckZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5zaWdudXAoeyBuYW1lLCBlbWFpbCwgcGFzc3dvcmQgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVnaXN0ZXJGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5jbG9zZVJlZ2lzdGVyTW9kYWwoKTtcbiAgICAgICAgdGhpcy5vcGVuVmVyaWZ5TW9kYWwoZW1haWwpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLl9yZWdpc3RlckZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3NpZ251cCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBWRVJJRlkgRU1BSUwgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblZlcmlmeU1vZGFsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZS5zZXQoYCR7dGhpcy50KCd2ZXJpZnlEZXNjcmlwdGlvbicpLnJlcGxhY2UoJy4nLCAnJyl9ICgke2VtYWlsfSlgKTtcbiAgICB0aGlzLl92ZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICB0aGlzLmlzVmVyaWZ5TW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0UmVzZW5kQ29vbGRvd24oKTtcbiAgfVxuXG4gIGNsb3NlVmVyaWZ5TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsID0gJyc7XG4gICAgdGhpcy5fdmVyaWZ5Rm9ybVNlY3Rpb25OYW1lLnNldCgnJyk7XG4gICAgdGhpcy5zdG9wUmVzZW5kQ29vbGRvd24oKTtcbiAgfVxuXG4gIHZlcmlmeUhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG5cbiAgICB0aGlzLl92ZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC52ZXJpZnlFbWFpbCh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCxcbiAgICAgICAgY29kZSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnZW1haWxWZXJpZmllZCcpKTtcbiAgICAgICAgICB0aGlzLmNsb3NlVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUxvZ2luU3VjY2VzcygpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICB0aGlzLl92ZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3ZlcmlmeScpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICByZXNlbmRDb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2VuZENvb2xkb3duID4gMCkgcmV0dXJuO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgLnJlc2VuZENvZGUoe1xuICAgICAgICBlbWFpbDogdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgICAgIHR5cGU6ICdFTUFJTF9WRVJJRlknLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdjb2RlU2VudCcpKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICd2ZXJpZnknKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1GQSBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuTUZBVmVyaWZ5TW9kYWwoKTogdm9pZCB7XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5hdXRoU2VydmljZS5tZmFQZW5kaW5nKCkubWV0aG9kIGFzICdUT1RQJyB8ICdFTUFJTCcgfCAnU01TJztcbiAgICB0aGlzLl9tZmFNZXRob2Quc2V0KG1ldGhvZCk7XG4gICAgdGhpcy5tZmFVc2VCYWNrdXBDb2RlLnNldChmYWxzZSk7XG4gICAgdGhpcy5fbWZhVmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgdGhpcy5pc01GQVZlcmlmeU1vZGFsT3BlbiA9IHRydWU7XG5cbiAgICB0aGlzLm9uTUZBUmVxdWlyZWQuZW1pdCh7IG1ldGhvZCB9KTtcbiAgfVxuXG4gIGNsb3NlTUZBVmVyaWZ5TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc01GQVZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIEE6IGFsdGVybmEgZW50cmUgZWwgY8OzZGlnbyBUT1RQICg2IGTDrWcpIHkgdW4gY8OzZGlnbyBkZSByZXNwYWxkbyAoOCBjaGFycykuICovXG4gIHRvZ2dsZU1GQUJhY2t1cENvZGUoKTogdm9pZCB7XG4gICAgdGhpcy5tZmFVc2VCYWNrdXBDb2RlLnVwZGF0ZSh2ID0+ICF2KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRkEgUkVTRVQgSEFORExFUlMg4oCUIEI6IHJlY292ZXJ5IHBvciBlbWFpbFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuTUZBUmVzZXRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tZmFSZXNldFN0ZXAuc2V0KCdyZXF1ZXN0Jyk7XG4gICAgdGhpcy5fbWZhUmVzZXRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICB0aGlzLmlzTUZBUmVzZXRNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VNRkFSZXNldE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNRkFSZXNldE1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuX21mYVJlc2V0U3RlcC5zZXQoJ3JlcXVlc3QnKTtcbiAgfVxuXG4gIG1mYVJlc2V0UmVxdWVzdEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcbiAgICBpZiAoIWVtYWlsKSB7XG4gICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2VudGVyRW1haWwnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWZhUmVzZXRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcbiAgICB0aGlzLl9tZmFSZXNldEVtYWlsLnNldChlbWFpbCk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnJlcXVlc3RNRkFSZXNldCh7IGVtYWlsIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX21mYVJlc2V0Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuX21mYVJlc2V0U3RlcC5zZXQoJ2NvbmZpcm0nKTtcbiAgICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdtZmFSZXNldENvZGVTZW50JykpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLl9tZmFSZXNldEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ21mYScpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG1mYVJlc2V0Q29uZmlybUhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG5cbiAgICB0aGlzLl9tZmFSZXNldEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5jb25maXJtTUZBUmVzZXQoeyBlbWFpbDogdGhpcy5fbWZhUmVzZXRFbWFpbCgpLCBjb2RlIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX21mYVJlc2V0Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIC8vIE1GQSBkZXNoYWJpbGl0YWRvIOKGkiBjZXJyYW1vcyBhbWJvcyBtb2RhbGVzOyBlbCB1c2VyIHJlaW5pY2lhIGVsIGxvZ2luXG4gICAgICAgIC8vIChhaG9yYSBzaW4gMsK6IGZhY3RvcikgeSByZS1lbnJvbGEgVE9UUCBkZXNkZSBhanVzdGVzLlxuICAgICAgICB0aGlzLmNsb3NlTUZBUmVzZXRNb2RhbCgpO1xuICAgICAgICB0aGlzLmNsb3NlTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdtZmFSZXNldERvbmUnKSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuX21mYVJlc2V0Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnbWZhJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5TUZBSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5maWVsZHNbJ2NvZGUnXTtcblxuICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS52ZXJpZnlNRkEoY29kZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5fbWZhVmVyaWZ5Rm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIC8vIERpZmVyaW1vcyBoYW5kbGVMb2dpblN1Y2Nlc3MgaGFzdGEgcXVlIGlvbi1tb2RhbCBjb21wbGV0ZSBzdVxuICAgICAgICAvLyBhbmltYWNpw7NuIGRlIGNpZXJyZSAoZGlkRGlzbWlzcykuIFNpbiBlc3RvLCBgcm91dGVyLm5hdmlnYXRlYCBkZWxcbiAgICAgICAgLy8gcGFkcmUgZGVzdHJ1eWUgYWwgaG9zdCBkZWwgbW9kYWwgYW50ZXMgZGUgcXVlIElvbmljIHByb2Nlc2UgZWxcbiAgICAgICAgLy8gZGlzbWlzcywgeSBlbCBtb2RhbCBxdWVkYSB2aXNpYmxlIGVuY2ltYSBkZSBsYSBww6FnaW5hIGRlc3Rpbm9cbiAgICAgICAgLy8gKGlPUyBQV0EpLlxuICAgICAgICB0aGlzLl9tZmFTdWNjZXNzUGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY2xvc2VNRkFWZXJpZnlNb2RhbCgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdtZmEnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBvbk1GQVZlcmlmeURpc21pc3NlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWZhU3VjY2Vzc1BlbmRpbmcpIHtcbiAgICAgIHRoaXMuX21mYVN1Y2Nlc3NQZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmhhbmRsZUxvZ2luU3VjY2Vzcyh1bmRlZmluZWQsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGT1JHT1QgUEFTU1dPUkQgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlbkZvcmdvdFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlRm9yZ290UGFzc3dvcmRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9yZ290UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGZvcmdvdFBhc3N3b3JkSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGVtYWlsID0gZXZlbnQuZmllbGRzWydlbWFpbCddO1xuXG4gICAgaWYgKCFlbWFpbCkge1xuICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdlbnRlckVtYWlsJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuV09SS0lORyk7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmZvcmdvdFBhc3N3b3JkKHsgZW1haWwgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5fZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5jbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKTtcbiAgICAgICAgdGhpcy5vcGVuUmVzZXRQYXNzd29yZE1vZGFsKGVtYWlsKTtcbiAgICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdjb2RlU2VudCcpKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5fZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdmb3Jnb3QnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVTRVQgUEFTU1dPUkQgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblJlc2V0UGFzc3dvcmRNb2RhbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lLnNldChgJHt0aGlzLnQoJ3Jlc2V0RGVzY3JpcHRpb24nKS5yZXBsYWNlKCcuJywgJycpfSAoJHtlbWFpbH0pYCk7XG4gICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgIHRoaXMuaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0UmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdSZXNldEVtYWlsID0gJyc7XG4gICAgdGhpcy5fcmVzZXRGb3JtU2VjdGlvbk5hbWUuc2V0KCcnKTtcbiAgICB0aGlzLnN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gIH1cblxuICByZXNldFBhc3N3b3JkSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5maWVsZHNbJ2NvZGUnXTtcbiAgICBjb25zdCBuZXdQYXNzd29yZCA9IGV2ZW50LmZpZWxkc1snbmV3UGFzc3dvcmQnXTtcblxuICAgIHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNldFBhc3N3b3JkKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1Jlc2V0RW1haWwsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIG5ld1Bhc3N3b3JkLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgncGFzc3dvcmRVcGRhdGVkJykpO1xuICAgICAgICAgIHRoaXMuY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAncmVzZXQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcmVzZW5kUmVzZXRDb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPiAwKSByZXR1cm47XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZW5kQ29kZSh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdSZXNldEVtYWlsLFxuICAgICAgICB0eXBlOiAnUEFTU1dPUkRfUkVTRVQnLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QodGhpcy50KCdjb2RlU2VudCcpKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0UmVzZXRSZXNlbmRDb29sZG93bigpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3Jlc2V0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBIRUxQRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgaGFuZGxlTG9naW5TdWNjZXNzKG9hdXRoUHJvdmlkZXI/OiAnZ29vZ2xlJyB8ICdhcHBsZScgfCAnbWljcm9zb2Z0JywgbWZhQ29tcGxldGVkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnd2VsY29tZScpKTtcblxuICAgIHRoaXMub25TdWNjZXNzLmVtaXQoe1xuICAgICAgdXNlcjogdGhpcy5hdXRoU2VydmljZS51c2VyKCksXG4gICAgICBtZmFDb21wbGV0ZWQsXG4gICAgICBvYXV0aFByb3ZpZGVyLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucHJvcHMucmVkaXJlY3RPblN1Y2Nlc3MpIHtcbiAgICAgIHZvaWQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucHJvcHMucmVkaXJlY3RPblN1Y2Nlc3NdLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnI6IHVua25vd24sIG9wZXJhdGlvbjogTG9naW5FcnJvckV2ZW50WydvcGVyYXRpb24nXSk6IHZvaWQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShlcnIpO1xuICAgIHRoaXMuc2hvd1RvYXN0KG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5vbkVycm9yLmVtaXQoe1xuICAgICAgY29kZTogKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGUsXG4gICAgICBtZXNzYWdlLFxuICAgICAgb3BlcmF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93VG9hc3QobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgZHVyYXRpb246IDM1MDAsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGVycm9yID0gZXJyIGFzIHtcbiAgICAgIGVycm9yPzogeyBtZXNzYWdlPzogc3RyaW5nOyBjb2RlPzogc3RyaW5nIH07XG4gICAgICBjb2RlPzogc3RyaW5nO1xuICAgIH07XG5cbiAgICAvLyBNYXAgZXJyb3IgY29kZXMgdG8gaTE4biBrZXlzXG4gICAgY29uc3QgZXJyb3JLZXlNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAvLyBTaWduaW5cbiAgICAgIEFVVEhWMl9JTlZBTElEX0NSRURFTlRJQUxTOiAnZXJyb3JJbnZhbGlkQ3JlZGVudGlhbHMnLFxuICAgICAgQVVUSFYyX0VNQUlMX05PVF9WRVJJRklFRDogJ2Vycm9yRW1haWxOb3RWZXJpZmllZCcsXG4gICAgICBBVVRIVjJfQUNDT1VOVF9TVVNQRU5ERUQ6ICdlcnJvckFjY291bnRTdXNwZW5kZWQnLFxuXG4gICAgICAvLyBTaWdudXBcbiAgICAgIEFVVEhWMl9FTUFJTF9FWElTVFM6ICdlcnJvckVtYWlsRXhpc3RzJyxcbiAgICAgIEFVVEhWMl9XRUFLX1BBU1NXT1JEOiAnZXJyb3JXZWFrUGFzc3dvcmQnLFxuXG4gICAgICAvLyBWZXJpZmljYXRpb24gY29kZXNcbiAgICAgIEFVVEhWMl9JTlZBTElEX0NPREU6ICdlcnJvckludmFsaWRDb2RlJyxcbiAgICAgIEFVVEhWMl9FWFBJUkVEX0NPREU6ICdlcnJvckV4cGlyZWRDb2RlJyxcbiAgICAgIEFVVEhWMl9DT0RFX0VYUElSRUQ6ICdlcnJvckV4cGlyZWRDb2RlJyxcbiAgICAgIEFVVEhWMl9UT09fTUFOWV9BVFRFTVBUUzogJ2Vycm9yVG9vTWFueUF0dGVtcHRzJyxcblxuICAgICAgLy8gTUZBXG4gICAgICBBVVRIVjJfTUZBX0lOVkFMSURfQ09ERTogJ2Vycm9yTUZBSW52YWxpZENvZGUnLFxuXG4gICAgICAvLyBPQXV0aFxuICAgICAgUE9QVVBfQkxPQ0tFRDogJ2Vycm9yUG9wdXBCbG9ja2VkJyxcbiAgICAgIE9BVVRIX0ZBSUxFRDogJ2Vycm9yT0F1dGhGYWlsZWQnLFxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvckNvZGUgPSBlcnJvcj8uZXJyb3I/LmNvZGUgfHwgZXJyb3I/LmNvZGU7XG4gICAgaWYgKGVycm9yQ29kZSAmJiBlcnJvcktleU1hcFtlcnJvckNvZGVdKSB7XG4gICAgICByZXR1cm4gdGhpcy50KGVycm9yS2V5TWFwW2Vycm9yQ29kZV0pO1xuICAgIH1cblxuICAgIGlmIChlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBlcnJvci5lcnJvci5tZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnQoJ2Vycm9yR2VuZXJpYycpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPT0xET1dOIFRJTUVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHN0YXJ0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNlbmRDb29sZG93biA9IDMwO1xuICAgIHRoaXMucmVzZW5kVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnJlc2VuZENvb2xkb3duLS07XG4gICAgICBpZiAodGhpcy5yZXNlbmRDb29sZG93biA8PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcFJlc2VuZENvb2xkb3duKCk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNlbmRUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlc2VuZFRpbWVyKTtcbiAgICAgIHRoaXMucmVzZW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnJlc2VuZENvb2xkb3duID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZXNldFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA9IDMwO1xuICAgIHRoaXMucmVzZXRSZXNlbmRUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRSZXNlbmRDb29sZG93bi0tO1xuICAgICAgaWYgKHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA8PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZXRSZXNlbmRUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlc2V0UmVzZW5kVGltZXIpO1xuICAgICAgdGhpcy5yZXNldFJlc2VuZFRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5yZXNldFJlc2VuZENvb2xkb3duID0gMDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmluaXRpYWxPcGVyYXRpb24gPT09ICdzaWdudXAnKSB7XG4gICAgICB0aGlzLmlzUmVnaXN0ZXJNb2RhbE9wZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlc2VuZENvb2xkb3duKCk7XG4gICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidmFsLWxvZ2luXCIgW2NsYXNzLnZhbC1sb2dpbi0tY2FyZF09XCJjb25maWcuc2hvd0NhcmRcIj5cbiAgPCEtLSBMb2dvIOKAlCBkZWZhdWx0IGRlIG1hcmNhICgtLW1haW4tbG9nbykgc2kgZWwgY29uc3VtZXIgbm8gcGFzYSBsb2dvIC0tPlxuICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICA8dmFsLWltYWdlIFtwcm9wc109XCJyZXNvbHZlZExvZ29cIiAvPlxuICA8L2Rpdj5cblxuICA8IS0tIExvZ2luIEZvcm0gLS0+XG4gIDx2YWwtZm9ybSBbcHJvcHNdPVwibG9naW5Gb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJsb2dpbkhhbmRsZXIoJGV2ZW50KVwiIC8+XG5cbiAgPCEtLSBPQXV0aCBTZWN0aW9uIC0tPlxuICBAaWYgKGNvbmZpZy5zaG93T0F1dGggJiYgY29uZmlnLm9hdXRoUHJvdmlkZXJzLmxlbmd0aCA+IDApIHtcbiAgPGRpdiBjbGFzcz1cIm9hdXRoLXNlcGFyYXRvclwiPlxuICAgIDxzcGFuPnt7IHQoJ29yQ29udGludWVXaXRoJykgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJvYXV0aC1idXR0b25zXCI+XG4gICAgQGZvciAocHJvdmlkZXIgb2YgY29uZmlnLm9hdXRoUHJvdmlkZXJzOyB0cmFjayBwcm92aWRlcikge1xuICAgIDxpb24tYnV0dG9uXG4gICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgICBjb2xvcj1cImRhcmtcIlxuICAgICAgKGNsaWNrKT1cImxvZ2luV2l0aE9BdXRoKHByb3ZpZGVyKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNPQXV0aExvYWRpbmdcIlxuICAgID5cbiAgICAgIEBzd2l0Y2ggKHByb3ZpZGVyKSB7IEBjYXNlICgnZ29vZ2xlJykge1xuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsb2dvLWdvb2dsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICB7eyBpc09BdXRoTG9hZGluZyA/IHQoJ2Nvbm5lY3RpbmcnKSA6IHQoJ2NvbnRpbnVlV2l0aEdvb2dsZScpIH19IH0gQGNhc2UgKCdhcHBsZScpIHtcbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1hcHBsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICB7eyBpc09BdXRoTG9hZGluZyA/IHQoJ2Nvbm5lY3RpbmcnKSA6IHQoJ2NvbnRpbnVlV2l0aEFwcGxlJykgfX0gfSBAY2FzZSAoJ21pY3Jvc29mdCcpIHtcbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1taWNyb3NvZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lvbi1pY29uPlxuICAgICAge3sgaXNPQXV0aExvYWRpbmcgPyB0KCdjb25uZWN0aW5nJykgOiB0KCdjb250aW51ZVdpdGhNaWNyb3NvZnQnKSB9fSB9IH1cbiAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gUmVnaXN0ZXIgTGluayAtLT5cbiAgQGlmIChjb25maWcuc2hvd1JlZ2lzdGVyKSB7XG4gIDxkaXYgY2xhc3M9XCJhdXRoLWxpbmtcIj5cbiAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICB7eyB0KCdub0FjY291bnQnKSB9fVxuICAgICAgPGEgKGNsaWNrKT1cIm9wZW5SZWdpc3Rlck1vZGFsKClcIj57eyB0KCdyZWdpc3RlcicpIH19PC9hPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBGb3Jnb3QgUGFzc3dvcmQgTGluayAtLT5cbiAgQGlmIChjb25maWcuc2hvd0ZvcmdvdFBhc3N3b3JkKSB7XG4gIDxkaXYgY2xhc3M9XCJhdXRoLWxpbmsgZm9yZ290LXBhc3N3b3JkXCI+XG4gICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAge3sgdCgnZm9yZ290TGluaycpIH19XG4gICAgICA8YSAoY2xpY2spPVwib3BlbkZvcmdvdFBhc3N3b3JkTW9kYWwoKVwiPnt7IHQoJ3JlY292ZXJQYXNzd29yZCcpIH19PC9hPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBMZWdhbCBOb3RpY2UgLS0+XG4gIEBpZiAocHJvcHMubGVnYWwpIHtcbiAgPGRpdiBjbGFzcz1cImxlZ2FsLW5vdGljZVwiPlxuICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgIDxwPlxuICAgICAgICB7eyB0KCdsZWdhbFByZWZpeCcpIH19IEBpZiAocmVzb2x2ZWRDb21wYW55TGluaykge1xuICAgICAgICA8YSBbaHJlZl09XCJyZXNvbHZlZENvbXBhbnlMaW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgPjxzdHJvbmc+e3sgcHJvcHMubGVnYWwuY29tcGFueU5hbWUgfX08L3N0cm9uZz48L2FcbiAgICAgICAgPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHN0cm9uZz57eyBwcm9wcy5sZWdhbC5jb21wYW55TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICB9IHt7IHQoJ2xlZ2FsU3VmZml4JykgfX0gQGlmIChwcm9wcy5sZWdhbC50ZXJtc0xpbmspIHtcbiAgICAgICAgPGEgW2hyZWZdPVwicHJvcHMubGVnYWwudGVybXNMaW5rXCI+e3sgdCgndGVybXNBbmRDb25kaXRpb25zJykgfX08L2E+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8c3Bhbj57eyB0KCd0ZXJtc0FuZENvbmRpdGlvbnMnKSB9fTwvc3Bhbj5cbiAgICAgICAgfSB7eyB0KCdhbmQnKSB9fSBAaWYgKHByb3BzLmxlZ2FsLnByaXZhY3lMaW5rKSB7XG4gICAgICAgIDxhIFtocmVmXT1cInByb3BzLmxlZ2FsLnByaXZhY3lMaW5rXCI+e3sgdCgncHJpdmFjeVBvbGljeScpIH19PC9hPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHNwYW4+e3sgdCgncHJpdmFjeVBvbGljeScpIH19PC9zcGFuPlxuICAgICAgICB9LlxuICAgICAgPC9wPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPCEtLSBSZWdpc3RlciBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1JlZ2lzdGVyTW9kYWxPcGVuXCIgKGRpZERpc21pc3MpPVwiY2xvc2VSZWdpc3Rlck1vZGFsKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJjbG9zZVJlZ2lzdGVyTW9kYWwoKVwiPlxuICAgICAgICAgICAgPHN0cm9uZz57eyB0KCdjbG9zZScpIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInJlc29sdmVkTG9nb1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInJlZ2lzdGVyRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwicmVnaXN0ZXJIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAge3sgdCgnaGFzQWNjb3VudCcpIH19XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwib25SZWdpc3RlclN3aXRjaFRvTG9naW4oKVwiPnt7IHQoJ3NpZ25JbicpIH19PC9hPlxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBWZXJpZnkgRW1haWwgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNWZXJpZnlNb2RhbE9wZW5cIiBbYmFja2Ryb3BEaXNtaXNzXT1cImZhbHNlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwiY2xvc2VWZXJpZnlNb2RhbCgpXCI+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2Nsb3NlJykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicmVzb2x2ZWRMb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwidmVyaWZ5Rm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwidmVyaWZ5SGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuZC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAge3sgdCgnbm9Db2RlUmVjZWl2ZWQnKSB9fSBAaWYgKHJlc2VuZENvb2xkb3duID4gMCkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb29sZG93blwiPnt7IHQoJ3Jlc2VuZEluJywgeyBzZWNvbmRzOiByZXNlbmRDb29sZG93bi50b1N0cmluZygpIH0pIH19PC9zcGFuPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwicmVzZW5kQ29kZSgpXCI+e3sgdCgncmVzZW5kJykgfX08L2E+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG48IS0tIEZvcmdvdCBQYXNzd29yZCBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuXCIgKGRpZERpc21pc3MpPVwiY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKVwiPlxuICAgICAgICAgICAgPHN0cm9uZz57eyB0KCdjbG9zZScpIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInJlc29sdmVkTG9nb1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cImZvcmdvdFBhc3N3b3JkRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwiZm9yZ290UGFzc3dvcmRIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBSZXNldCBQYXNzd29yZCBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW5cIiBbYmFja2Ryb3BEaXNtaXNzXT1cImZhbHNlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwiY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKVwiPlxuICAgICAgICAgICAgPHN0cm9uZz57eyB0KCdjbG9zZScpIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInJlc29sdmVkTG9nb1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInJlc2V0UGFzc3dvcmRGb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJyZXNldFBhc3N3b3JkSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuZC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAge3sgdCgnbm9Db2RlUmVjZWl2ZWQnKSB9fSBAaWYgKHJlc2V0UmVzZW5kQ29vbGRvd24gPiAwKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvb2xkb3duXCI+e3sgdCgncmVzZW5kSW4nLCB7IHNlY29uZHM6IHJlc2V0UmVzZW5kQ29vbGRvd24udG9TdHJpbmcoKSB9KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGEgKGNsaWNrKT1cInJlc2VuZFJlc2V0Q29kZSgpXCI+e3sgdCgncmVzZW5kJykgfX08L2E+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG48IS0tIE1GQSBWZXJpZnkgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNNRkFWZXJpZnlNb2RhbE9wZW5cIiBbYmFja2Ryb3BEaXNtaXNzXT1cImZhbHNlXCIgKGRpZERpc21pc3MpPVwib25NRkFWZXJpZnlEaXNtaXNzZWQoKVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImNsb3NlTUZBVmVyaWZ5TW9kYWwoKVwiPlxuICAgICAgICAgICAgPHN0cm9uZz57eyB0KCdjbG9zZScpIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInJlc29sdmVkTG9nb1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cIm1mYVZlcmlmeUZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cInZlcmlmeU1GQUhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIEBpZiAobWZhTWV0aG9kKCkgPT09ICdUT1RQJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZW5kLWxpbmtcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgICAgICBAaWYgKG1mYVVzZUJhY2t1cENvZGUoKSkge1xuICAgICAgICAgICAgPGEgKGNsaWNrKT1cInRvZ2dsZU1GQUJhY2t1cENvZGUoKVwiPnt7IHQoJ21mYVVzZVRvdHBBY3Rpb24nKSB9fTwvYT5cbiAgICAgICAgICAgIH0gQGVsc2UgeyB7eyB0KCdtZmFVc2VCYWNrdXBMaW5rJykgfX1cbiAgICAgICAgICAgIDxhIChjbGljayk9XCJ0b2dnbGVNRkFCYWNrdXBDb2RlKClcIj57eyB0KCdtZmFVc2VCYWNrdXBBY3Rpb24nKSB9fTwvYT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZW5kLWxpbmtcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgICAgICB7eyB0KCdtZmFMb3N0QmFja3VwTGluaycpIH19XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwib3Blbk1GQVJlc2V0TW9kYWwoKVwiPnt7IHQoJ21mYVJlc2V0QWN0aW9uJykgfX08L2E+XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG48IS0tIE1GQSBSZXNldCBNb2RhbCAoQikg4oCUIHJlY292ZXJ5IHBvciBlbWFpbCBjdWFuZG8gbm8gaGF5IGJhY2t1cCBjb2RlcyAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc01GQVJlc2V0TW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiIChkaWREaXNtaXNzKT1cImNsb3NlTUZBUmVzZXRNb2RhbCgpXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwiY2xvc2VNRkFSZXNldE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdCgnY2xvc2UnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJyZXNvbHZlZExvZ29cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChtZmFSZXNldFN0ZXAoKSA9PT0gJ3JlcXVlc3QnKSB7XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwibWZhUmVzZXRSZXF1ZXN0Rm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwibWZhUmVzZXRSZXF1ZXN0SGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwibWZhUmVzZXRDb25maXJtRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwibWZhUmVzZXRDb25maXJtSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cbiJdfQ==
@@ -1,5 +1,7 @@
1
1
  import { inject } from '@angular/core';
2
2
  import { Router, } from '@angular/router';
3
+ import { toObservable } from '@angular/core/rxjs-interop';
4
+ import { filter, firstValueFrom } from 'rxjs';
3
5
  import { AuthService } from './auth.service';
4
6
  import { VALTECH_AUTH_CONFIG } from './config';
5
7
  /**
@@ -51,14 +53,24 @@ export const authGuard = (_route, state) => {
51
53
  * ];
52
54
  * ```
53
55
  */
54
- export const guestGuard = () => {
56
+ export const guestGuard = async () => {
55
57
  const authService = inject(AuthService);
56
58
  const router = inject(Router);
57
59
  const config = inject(VALTECH_AUTH_CONFIG);
60
+ // Esperar a que la inicializacion de auth termine (Firebase restaura sesion
61
+ // de forma async). Sin esto, `isAuthenticated()` puede ser false aunque el
62
+ // token en localStorage sea valido, y el guard deja pasar al login → pantalla
63
+ // de login con botones cargando (especialmente en swipe-back en PWA).
64
+ if (authService.isLoading()) {
65
+ await firstValueFrom(toObservable(authService.isLoading).pipe(filter(loading => !loading)));
66
+ }
58
67
  if (!authService.isAuthenticated()) {
59
68
  return true;
60
69
  }
61
- return router.createUrlTree([config.homeRoute]);
70
+ // replaceUrl: true saca /login del stack del browser → el swipe-back en
71
+ // PWA no vuelve a la pantalla de login.
72
+ await router.navigateByUrl(config.homeRoute, { replaceUrl: true });
73
+ return false;
62
74
  };
63
75
  /**
64
76
  * Factory para crear guard de permisos.
@@ -243,4 +255,4 @@ export function roleGuard(roles) {
243
255
  return router.createUrlTree([config.unauthorizedRoute]);
244
256
  };
245
257
  }
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2d1YXJkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEdBS1AsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFrQixDQUN0QyxNQUE4QixFQUM5QixLQUEwQixFQUNQLEVBQUU7SUFDckIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUUzQyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMvQyxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRTtLQUN0QyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEdBQXNCLEVBQUU7SUFDL0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxN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LE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUzQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVsRSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEUsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBSb3V0ZXIsXG4gIENhbkFjdGl2YXRlRm4sXG4gIFVybFRyZWUsXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFZBTFRFQ0hfQVVUSF9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8qKlxuICogR3VhcmQgcXVlIHZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gZXN0w6EgYXV0ZW50aWNhZG8uXG4gKiBSZWRpcmlnZSBhIGxvZ2luUm91dGUgc2kgbm8gZXN0w6EgYXV0ZW50aWNhZG8uXG4gKlxuICogUHJlc2VydmEgbGEgVVJMIHNvbGljaXRhZGEgZW4gZWwgcXVlcnkgcGFyYW0gYHJldHVyblVybGAgcGFyYSBxdWUgbGFcbiAqIHDDoWdpbmEgZGUgbG9naW4gcHVlZGEgZGV2b2x2ZXIgYWwgdXN1YXJpbyBhIHN1IGRlc3Rpbm8gdHJhcyBhdXRlbnRpY2Fyc2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGF1dGhHdWFyZCB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnZGFzaGJvYXJkJyxcbiAqICAgICBjYW5BY3RpdmF0ZTogW2F1dGhHdWFyZF0sXG4gKiAgICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2Rhc2hib2FyZC5wYWdlJyksXG4gKiAgIH0sXG4gKiBdO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBhdXRoR3VhcmQ6IENhbkFjdGl2YXRlRm4gPSAoXG4gIF9yb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3Rcbik6IGJvb2xlYW4gfCBVcmxUcmVlID0+IHtcbiAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgY29uc3QgY29uZmlnID0gaW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpO1xuXG4gIGlmIChhdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKFtjb25maWcubG9naW5Sb3V0ZV0sIHtcbiAgICBxdWVyeVBhcmFtczogeyByZXR1cm5Vcmw6IHN0YXRlLnVybCB9LFxuICB9KTtcbn07XG5cbi8qKlxuICogR3VhcmQgcXVlIHZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gTk8gZXN0w6EgYXV0ZW50aWNhZG8uXG4gKiBSZWRpcmlnZSBhIGhvbWVSb3V0ZSBzaSB5YSBlc3TDoSBhdXRlbnRpY2Fkby5cbiAqIMOadGlsIHBhcmEgcMOhZ2luYXMgZGUgbG9naW4vcmVnaXN0cm8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGd1ZXN0R3VhcmQgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJ2xvZ2luJyxcbiAqICAgICBjYW5BY3RpdmF0ZTogW2d1ZXN0R3VhcmRdLFxuICogICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9sb2dpbi5wYWdlJyksXG4gKiAgIH0sXG4gKiBdO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBndWVzdEd1YXJkOiBDYW5BY3RpdmF0ZUZuID0gKCk6IGJvb2xlYW4gfCBVcmxUcmVlID0+IHtcbiAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgY29uc3QgY29uZmlnID0gaW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpO1xuXG4gIGlmICghYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByb3V0ZXIuY3JlYXRlVXJsVHJlZShbY29uZmlnLmhvbWVSb3V0ZV0pO1xufTtcblxuLyoqXG4gKiBGYWN0b3J5IHBhcmEgY3JlYXIgZ3VhcmQgZGUgcGVybWlzb3MuXG4gKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIGVsIHBlcm1pc28gZXNwZWNpZmljYWRvLlxuICpcbiAqIEBwYXJhbSBwZXJtaXNzaW9ucyAtIFBlcm1pc28gbyBsaXN0YSBkZSBwZXJtaXNvcyByZXF1ZXJpZG9zIChPUilcbiAqIEByZXR1cm5zIEd1YXJkIGZ1bmN0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGF1dGhHdWFyZCwgcGVybWlzc2lvbkd1YXJkIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICd0ZW1wbGF0ZXMnLFxuICogICAgIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkLCBwZXJtaXNzaW9uR3VhcmQoJ3RlbXBsYXRlczpyZWFkJyldLFxuICogICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi90ZW1wbGF0ZXMucGFnZScpLFxuICogICB9LFxuICogICB7XG4gKiAgICAgcGF0aDogJ2FkbWluJyxcbiAqICAgICBjYW5BY3RpdmF0ZTogW2F1dGhHdWFyZCwgcGVybWlzc2lvbkd1YXJkKFsnYWRtaW46KicsICdzdXBlcl9hZG1pbiddKV0sXG4gKiAgICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2FkbWluLnBhZ2UnKSxcbiAqICAgfSxcbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcm1pc3Npb25HdWFyZChwZXJtaXNzaW9uczogc3RyaW5nIHwgc3RyaW5nW10pOiBDYW5BY3RpdmF0ZUZuIHtcbiAgcmV0dXJuICgpOiBib29sZWFuIHwgVXJsVHJlZSA9PiB7XG4gICAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICAgIGNvbnN0IHBlcm1BcnJheSA9IEFycmF5LmlzQXJyYXkocGVybWlzc2lvbnMpID8gcGVybWlzc2lvbnMgOiBbcGVybWlzc2lvbnNdO1xuXG4gICAgaWYgKGF1dGhTZXJ2aWNlLmhhc0FueVBlcm1pc3Npb24ocGVybUFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBbVmFsdGVjaEF1dGhdIFBlcm1pc28gZGVuZWdhZG8uIFJlcXVlcmlkbzogJHtwZXJtQXJyYXkuam9pbignIG8gJyl9YCk7XG4gICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKFtjb25maWcudW5hdXRob3JpemVkUm91dGVdKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBGYWN0b3J5IGRlIGd1YXJkIFJCQUMgcGFyYW1ldHJpemFibGUg4oCUIGRlZmVuc2UtaW4tZGVwdGggYSBuaXZlbCBkZSBSVVRBLlxuICpcbiAqIFZhcmlhbnRlIGVyZ29uw7NtaWNhIGRlIHtAbGluayBwZXJtaXNzaW9uR3VhcmR9IGNvbiBmaXJtYSB2YXJpw6FkaWNhXG4gKiAoYHJiYWNHdWFyZCgnYTpyZWFkJywgJ2I6bWFuYWdlJylgIGVuIHZleiBkZSBgcGVybWlzc2lvbkd1YXJkKFsnYTpyZWFkJywgJ2I6bWFuYWdlJ10pYCksXG4gKiBwZW5zYWRhIHBhcmEgZ2F0ZWFyIHZpc3RhcyBhZG1pbmlzdHJhdGl2YXMgbW9udGFkYXMgdsOtYSBsb3MgYHByb3ZpZGVWYWx0ZWNoKlJvdXRlc2BcbiAqIGRlIGxhIGxpYi4gUGFzYSBzaSBlbCB1c3VhcmlvIHRpZW5lICoqQUwgTUVOT1MgVU5PKiogZGUgbG9zIHBlcm1pc29zIChPUiksIGlndWFsIHF1ZVxuICogZWwgcmVzdG8gZGVsIGdhdGluZyBkZWwgZmFjdG9yeSAoYCp2YWxIYXNQZXJtaXNzaW9uYCwgbWVuw7opLiBFbCBtYXRjaCBkZSB3aWxkY2FyZHNcbiAqIChgKjoqYCwgYHJlc291cmNlOipgLCBgKjphY3Rpb25gKSBsbyByZXN1ZWx2ZSBgQXV0aFNlcnZpY2UuaGFzUGVybWlzc2lvbmAuXG4gKlxuICogRXMgdW5hIGNhcGEgQURJQ0lPTkFMIGFsIGdhdGluZyBmaW5vIGRlbnRybyBkZSBsb3MgY29tcG9uZW50ZXMgKGJvdG9uZXMgcG9yXG4gKiBgKnZhbEhhc1Blcm1pc3Npb25gKSB5IGFsIDQwMyBkZWwgYmFja2VuZCDigJQgbm8gbG9zIHJlZW1wbGF6YS4gU2luIHBlcm1pc28gcmVkaXJpZ2VcbiAqIGEgYHVuYXV0aG9yaXplZFJvdXRlYCAobWlzbW8gZGVzdGlubyBxdWUgYHBlcm1pc3Npb25HdWFyZGApLlxuICpcbiAqIEBwYXJhbSBwZXJtaXNzaW9ucyAtIFVubyBvIG3DoXMgcGVybWlzb3MgcmVxdWVyaWRvcyAoT1IpXG4gKiBAcmV0dXJucyBHdWFyZCBmdW5jdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyByYmFjR3VhcmQgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJ2FwaS1rZXlzJyxcbiAqICAgICBjYW5BY3RpdmF0ZTogW3JiYWNHdWFyZCgnYXBpLWtleXM6cmVhZCcpXSxcbiAqICAgICBjb21wb25lbnQ6IEFwaUtleXNWaWV3Q29tcG9uZW50LFxuICogICB9LFxuICogICB7XG4gKiAgICAgcGF0aDogJ3Blcm1pc3Npb25zJyxcbiAqICAgICBjYW5BY3RpdmF0ZTogW3JiYWNHdWFyZCgncm9sZXM6cmVhZCcsICdyYmFjOm1hbmFnZScpXSxcbiAqICAgICBjb21wb25lbnQ6IFBlcm1pc3Npb25zVmlld0NvbXBvbmVudCxcbiAqICAgfSxcbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJiYWNHdWFyZCguLi5wZXJtaXNzaW9uczogc3RyaW5nW10pOiBDYW5BY3RpdmF0ZUZuIHtcbiAgcmV0dXJuICgpOiBib29sZWFuIHwgVXJsVHJlZSA9PiB7XG4gICAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICAgIGlmIChwZXJtaXNzaW9ucy5sZW5ndGggPT09IDAgfHwgYXV0aFNlcnZpY2UuaGFzQW55UGVybWlzc2lvbihwZXJtaXNzaW9ucykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUud2FybihgW1ZhbHRlY2hBdXRoXSBBY2Nlc28gYSBydXRhIGRlbmVnYWRvLiBSZXF1ZXJpZG86ICR7cGVybWlzc2lvbnMuam9pbignIG8gJyl9YCk7XG4gICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKFtjb25maWcudW5hdXRob3JpemVkUm91dGVdKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBHdWFyZCBxdWUgbGVlIHBlcm1pc29zIGRlc2RlIHJvdXRlLmRhdGEuXG4gKiBQZXJtaXRlIGNvbmZpZ3VyYXIgcGVybWlzb3MgZGlyZWN0YW1lbnRlIGVuIGxhIGRlZmluaWNpw7NuIGRlIHJ1dGFzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBhdXRoR3VhcmQsIHBlcm1pc3Npb25HdWFyZEZyb21Sb3V0ZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnYWRtaW4vdXNlcnMnLFxuICogICAgIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkLCBwZXJtaXNzaW9uR3VhcmRGcm9tUm91dGVdLFxuICogICAgIGRhdGE6IHtcbiAqICAgICAgIHBlcm1pc3Npb25zOiBbJ3VzZXJzOnJlYWQnLCAndXNlcnM6bWFuYWdlJ10sXG4gKiAgICAgICByZXF1aXJlQWxsOiBmYWxzZSAgLy8gdHJ1ZSA9IEFORCwgZmFsc2UgPSBPUiAoZGVmYXVsdClcbiAqICAgICB9LFxuICogICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi91c2Vycy5wYWdlJyksXG4gKiAgIH0sXG4gKiBdO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBwZXJtaXNzaW9uR3VhcmRGcm9tUm91dGU6IENhbkFjdGl2YXRlRm4gPSAoXG4gIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90XG4pOiBib29sZWFuIHwgVXJsVHJlZSA9PiB7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICBjb25zdCBwZXJtaXNzaW9ucyA9IHJvdXRlLmRhdGFbJ3Blcm1pc3Npb25zJ10gYXMgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlcXVpcmVBbGwgPSByb3V0ZS5kYXRhWydyZXF1aXJlQWxsJ10gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBpZiAoIXBlcm1pc3Npb25zIHx8IHBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgaGFzQWNjZXNzID0gcmVxdWlyZUFsbFxuICAgID8gYXV0aFNlcnZpY2UuaGFzQWxsUGVybWlzc2lvbnMocGVybWlzc2lvbnMpXG4gICAgOiBhdXRoU2VydmljZS5oYXNBbnlQZXJtaXNzaW9uKHBlcm1pc3Npb25zKTtcblxuICBpZiAoaGFzQWNjZXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zb2xlLndhcm4oXG4gICAgYFtWYWx0ZWNoQXV0aF0gUGVybWlzbyBkZW5lZ2Fkby4gUmVxdWVyaWRvOiAke3Blcm1pc3Npb25zLmpvaW4ocmVxdWlyZUFsbCA/ICcgeSAnIDogJyBvICcpfWBcbiAgKTtcbiAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKFtjb25maWcudW5hdXRob3JpemVkUm91dGVdKTtcbn07XG5cbi8qKlxuICogR3VhcmQgcXVlIHZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gZXMgc3VwZXIgYWRtaW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGF1dGhHdWFyZCwgc3VwZXJBZG1pbkd1YXJkIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICdzdXBlci1hZG1pbicsXG4gKiAgICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmQsIHN1cGVyQWRtaW5HdWFyZF0sXG4gKiAgICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3N1cGVyLWFkbWluLnBhZ2UnKSxcbiAqICAgfSxcbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHN1cGVyQWRtaW5HdWFyZDogQ2FuQWN0aXZhdGVGbiA9ICgpOiBib29sZWFuIHwgVXJsVHJlZSA9PiB7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICBpZiAoYXV0aFNlcnZpY2UuaXNTdXBlckFkbWluKCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBBY2Nlc28gZGUgc3VwZXIgYWRtaW4gcmVxdWVyaWRvJyk7XG4gIHJldHVybiByb3V0ZXIuY3JlYXRlVXJsVHJlZShbY29uZmlnLnVuYXV0aG9yaXplZFJvdXRlXSk7XG59O1xuXG4vKipcbiAqIEd1YXJkIHF1ZSB2ZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIHVuIHJvbCBlc3BlY8OtZmljby5cbiAqXG4gKiBAcGFyYW0gcm9sZXMgLSBSb2wgbyBsaXN0YSBkZSByb2xlcyByZXF1ZXJpZG9zIChPUilcbiAqIEByZXR1cm5zIEd1YXJkIGZ1bmN0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGF1dGhHdWFyZCwgcm9sZUd1YXJkIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICdlZGl0b3InLFxuICogICAgIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkLCByb2xlR3VhcmQoWydlZGl0b3InLCAnYWRtaW4nXSldLFxuICogICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9lZGl0b3IucGFnZScpLFxuICogICB9LFxuICogXTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9sZUd1YXJkKHJvbGVzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IENhbkFjdGl2YXRlRm4ge1xuICByZXR1cm4gKCk6IGJvb2xlYW4gfCBVcmxUcmVlID0+IHtcbiAgICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gICAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgY29uc3QgY29uZmlnID0gaW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpO1xuXG4gICAgY29uc3Qgcm9sZUFycmF5ID0gQXJyYXkuaXNBcnJheShyb2xlcykgPyByb2xlcyA6IFtyb2xlc107XG5cbiAgICBjb25zdCBoYXNSb2xlID0gcm9sZUFycmF5LnNvbWUocm9sZSA9PiBhdXRoU2VydmljZS5oYXNSb2xlKHJvbGUpKTtcblxuICAgIGlmIChoYXNSb2xlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFtWYWx0ZWNoQXV0aF0gUm9sIHJlcXVlcmlkbzogJHtyb2xlQXJyYXkuam9pbignIG8gJyl9YCk7XG4gICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKFtjb25maWcudW5hdXRob3JpemVkUm91dGVdKTtcbiAgfTtcbn1cbiJdfQ==
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2d1YXJkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEdBS1AsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBa0IsQ0FDdEMsTUFBOEIsRUFDOUIsS0FBMEIsRUFDUCxFQUFFO0lBQ3JCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFM0MsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDL0MsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUU7S0FDdEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxH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QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgUm91dGVyLFxuICBDYW5BY3RpdmF0ZUZuLFxuICBVcmxUcmVlLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBWQUxURUNIX0FVVEhfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuXG4vKipcbiAqIEd1YXJkIHF1ZSB2ZXJpZmljYSBzaSBlbCB1c3VhcmlvIGVzdMOhIGF1dGVudGljYWRvLlxuICogUmVkaXJpZ2UgYSBsb2dpblJvdXRlIHNpIG5vIGVzdMOhIGF1dGVudGljYWRvLlxuICpcbiAqIFByZXNlcnZhIGxhIFVSTCBzb2xpY2l0YWRhIGVuIGVsIHF1ZXJ5IHBhcmFtIGByZXR1cm5VcmxgIHBhcmEgcXVlIGxhXG4gKiBww6FnaW5hIGRlIGxvZ2luIHB1ZWRhIGRldm9sdmVyIGFsIHVzdWFyaW8gYSBzdSBkZXN0aW5vIHRyYXMgYXV0ZW50aWNhcnNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBhdXRoR3VhcmQgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJ2Rhc2hib2FyZCcsXG4gKiAgICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmRdLFxuICogICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9kYXNoYm9hcmQucGFnZScpLFxuICogICB9LFxuICogXTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgYXV0aEd1YXJkOiBDYW5BY3RpdmF0ZUZuID0gKFxuICBfcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4pOiBib29sZWFuIHwgVXJsVHJlZSA9PiB7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICBpZiAoYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByb3V0ZXIuY3JlYXRlVXJsVHJlZShbY29uZmlnLmxvZ2luUm91dGVdLCB7XG4gICAgcXVlcnlQYXJhbXM6IHsgcmV0dXJuVXJsOiBzdGF0ZS51cmwgfSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEd1YXJkIHF1ZSB2ZXJpZmljYSBzaSBlbCB1c3VhcmlvIE5PIGVzdMOhIGF1dGVudGljYWRvLlxuICogUmVkaXJpZ2UgYSBob21lUm91dGUgc2kgeWEgZXN0w6EgYXV0ZW50aWNhZG8uXG4gKiDDmnRpbCBwYXJhIHDDoWdpbmFzIGRlIGxvZ2luL3JlZ2lzdHJvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBndWVzdEd1YXJkIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICdsb2dpbicsXG4gKiAgICAgY2FuQWN0aXZhdGU6IFtndWVzdEd1YXJkXSxcbiAqICAgICBsb2FkQ29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vbG9naW4ucGFnZScpLFxuICogICB9LFxuICogXTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgZ3Vlc3RHdWFyZDogQ2FuQWN0aXZhdGVGbiA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPiA9PiB7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICAvLyBFc3BlcmFyIGEgcXVlIGxhIGluaWNpYWxpemFjaW9uIGRlIGF1dGggdGVybWluZSAoRmlyZWJhc2UgcmVzdGF1cmEgc2VzaW9uXG4gIC8vIGRlIGZvcm1hIGFzeW5jKS4gU2luIGVzdG8sIGBpc0F1dGhlbnRpY2F0ZWQoKWAgcHVlZGUgc2VyIGZhbHNlIGF1bnF1ZSBlbFxuICAvLyB0b2tlbiBlbiBsb2NhbFN0b3JhZ2Ugc2VhIHZhbGlkbywgeSBlbCBndWFyZCBkZWphIHBhc2FyIGFsIGxvZ2luIOKGkiBwYW50YWxsYVxuICAvLyBkZSBsb2dpbiBjb24gYm90b25lcyBjYXJnYW5kbyAoZXNwZWNpYWxtZW50ZSBlbiBzd2lwZS1iYWNrIGVuIFBXQSkuXG4gIGlmIChhdXRoU2VydmljZS5pc0xvYWRpbmcoKSkge1xuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRvT2JzZXJ2YWJsZShhdXRoU2VydmljZS5pc0xvYWRpbmcpLnBpcGUoZmlsdGVyKGxvYWRpbmcgPT4gIWxvYWRpbmcpKSk7XG4gIH1cblxuICBpZiAoIWF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyByZXBsYWNlVXJsOiB0cnVlIHNhY2EgL2xvZ2luIGRlbCBzdGFjayBkZWwgYnJvd3NlciDihpIgZWwgc3dpcGUtYmFjayBlblxuICAvLyBQV0Egbm8gdnVlbHZlIGEgbGEgcGFudGFsbGEgZGUgbG9naW4uXG4gIGF3YWl0IHJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGNvbmZpZy5ob21lUm91dGUsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBGYWN0b3J5IHBhcmEgY3JlYXIgZ3VhcmQgZGUgcGVybWlzb3MuXG4gKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIGVsIHBlcm1pc28gZXNwZWNpZmljYWRvLlxuICpcbiAqIEBwYXJhbSBwZXJtaXNzaW9ucyAtIFBlcm1pc28gbyBsaXN0YSBkZSBwZXJtaXNvcyByZXF1ZXJpZG9zIChPUilcbiAqIEByZXR1cm5zIEd1YXJkIGZ1bmN0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGF1dGhHdWFyZCwgcGVybWlzc2lvbkd1YXJkIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICd0ZW1wbGF0ZXMnLFxuICogICAgIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkLCBwZXJtaXNzaW9uR3VhcmQoJ3RlbXBsYXRlczpyZWFkJyldLFxuICogICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi90ZW1wbGF0ZXMucGFnZScpLFxuICogICB9LFxuICogICB7XG4gKiAgICAgcGF0aDogJ2FkbWluJyxcbiAqICAgICBjYW5BY3RpdmF0ZTogW2F1dGhHdWFyZCwgcGVybWlzc2lvbkd1YXJkKFsnYWRtaW46KicsICdzdXBlcl9hZG1pbiddKV0sXG4gKiAgICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2FkbWluLnBhZ2UnKSxcbiAqICAgfSxcbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcm1pc3Npb25HdWFyZChwZXJtaXNzaW9uczogc3RyaW5nIHwgc3RyaW5nW10pOiBDYW5BY3RpdmF0ZUZuIHtcbiAgcmV0dXJuICgpOiBib29sZWFuIHwgVXJsVHJlZSA9PiB7XG4gICAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICAgIGNvbnN0IHBlcm1BcnJheSA9IEFycmF5LmlzQXJyYXkocGVybWlzc2lvbnMpID8gcGVybWlzc2lvbnMgOiBbcGVybWlzc2lvbnNdO1xuXG4gICAgaWYgKGF1dGhTZXJ2aWNlLmhhc0FueVBlcm1pc3Npb24ocGVybUFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBbVmFsdGVjaEF1dGhdIFBlcm1pc28gZGVuZWdhZG8uIFJlcXVlcmlkbzogJHtwZXJtQXJyYXkuam9pbignIG8gJyl9YCk7XG4gICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKFtjb25maWcudW5hdXRob3JpemVkUm91dGVdKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBGYWN0b3J5IGRlIGd1YXJkIFJCQUMgcGFyYW1ldHJpemFibGUg4oCUIGRlZmVuc2UtaW4tZGVwdGggYSBuaXZlbCBkZSBSVVRBLlxuICpcbiAqIFZhcmlhbnRlIGVyZ29uw7NtaWNhIGRlIHtAbGluayBwZXJtaXNzaW9uR3VhcmR9IGNvbiBmaXJtYSB2YXJpw6FkaWNhXG4gKiAoYHJiYWNHdWFyZCgnYTpyZWFkJywgJ2I6bWFuYWdlJylgIGVuIHZleiBkZSBgcGVybWlzc2lvbkd1YXJkKFsnYTpyZWFkJywgJ2I6bWFuYWdlJ10pYCksXG4gKiBwZW5zYWRhIHBhcmEgZ2F0ZWFyIHZpc3RhcyBhZG1pbmlzdHJhdGl2YXMgbW9udGFkYXMgdsOtYSBsb3MgYHByb3ZpZGVWYWx0ZWNoKlJvdXRlc2BcbiAqIGRlIGxhIGxpYi4gUGFzYSBzaSBlbCB1c3VhcmlvIHRpZW5lICoqQUwgTUVOT1MgVU5PKiogZGUgbG9zIHBlcm1pc29zIChPUiksIGlndWFsIHF1ZVxuICogZWwgcmVzdG8gZGVsIGdhdGluZyBkZWwgZmFjdG9yeSAoYCp2YWxIYXNQZXJtaXNzaW9uYCwgbWVuw7opLiBFbCBtYXRjaCBkZSB3aWxkY2FyZHNcbiAqIChgKjoqYCwgYHJlc291cmNlOipgLCBgKjphY3Rpb25gKSBsbyByZXN1ZWx2ZSBgQXV0aFNlcnZpY2UuaGFzUGVybWlzc2lvbmAuXG4gKlxuICogRXMgdW5hIGNhcGEgQURJQ0lPTkFMIGFsIGdhdGluZyBmaW5vIGRlbnRybyBkZSBsb3MgY29tcG9uZW50ZXMgKGJvdG9uZXMgcG9yXG4gKiBgKnZhbEhhc1Blcm1pc3Npb25gKSB5IGFsIDQwMyBkZWwgYmFja2VuZCDigJQgbm8gbG9zIHJlZW1wbGF6YS4gU2luIHBlcm1pc28gcmVkaXJpZ2VcbiAqIGEgYHVuYXV0aG9yaXplZFJvdXRlYCAobWlzbW8gZGVzdGlubyBxdWUgYHBlcm1pc3Npb25HdWFyZGApLlxuICpcbiAqIEBwYXJhbSBwZXJtaXNzaW9ucyAtIFVubyBvIG3DoXMgcGVybWlzb3MgcmVxdWVyaWRvcyAoT1IpXG4gKiBAcmV0dXJucyBHdWFyZCBmdW5jdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyByYmFjR3VhcmQgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJ2FwaS1rZXlzJyxcbiAqICAgICBjYW5BY3RpdmF0ZTogW3JiYWNHdWFyZCgnYXBpLWtleXM6cmVhZCcpXSxcbiAqICAgICBjb21wb25lbnQ6IEFwaUtleXNWaWV3Q29tcG9uZW50LFxuICogICB9LFxuICogICB7XG4gKiAgICAgcGF0aDogJ3Blcm1pc3Npb25zJyxcbiAqICAgICBjYW5BY3RpdmF0ZTogW3JiYWNHdWFyZCgncm9sZXM6cmVhZCcsICdyYmFjOm1hbmFnZScpXSxcbiAqICAgICBjb21wb25lbnQ6IFBlcm1pc3Npb25zVmlld0NvbXBvbmVudCxcbiAqICAgfSxcbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJiYWNHdWFyZCguLi5wZXJtaXNzaW9uczogc3RyaW5nW10pOiBDYW5BY3RpdmF0ZUZuIHtcbiAgcmV0dXJuICgpOiBib29sZWFuIHwgVXJsVHJlZSA9PiB7XG4gICAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICAgIGlmIChwZXJtaXNzaW9ucy5sZW5ndGggPT09IDAgfHwgYXV0aFNlcnZpY2UuaGFzQW55UGVybWlzc2lvbihwZXJtaXNzaW9ucykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUud2FybihgW1ZhbHRlY2hBdXRoXSBBY2Nlc28gYSBydXRhIGRlbmVnYWRvLiBSZXF1ZXJpZG86ICR7cGVybWlzc2lvbnMuam9pbignIG8gJyl9YCk7XG4gICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKFtjb25maWcudW5hdXRob3JpemVkUm91dGVdKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBHdWFyZCBxdWUgbGVlIHBlcm1pc29zIGRlc2RlIHJvdXRlLmRhdGEuXG4gKiBQZXJtaXRlIGNvbmZpZ3VyYXIgcGVybWlzb3MgZGlyZWN0YW1lbnRlIGVuIGxhIGRlZmluaWNpw7NuIGRlIHJ1dGFzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBhdXRoR3VhcmQsIHBlcm1pc3Npb25HdWFyZEZyb21Sb3V0ZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnYWRtaW4vdXNlcnMnLFxuICogICAgIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkLCBwZXJtaXNzaW9uR3VhcmRGcm9tUm91dGVdLFxuICogICAgIGRhdGE6IHtcbiAqICAgICAgIHBlcm1pc3Npb25zOiBbJ3VzZXJzOnJlYWQnLCAndXNlcnM6bWFuYWdlJ10sXG4gKiAgICAgICByZXF1aXJlQWxsOiBmYWxzZSAgLy8gdHJ1ZSA9IEFORCwgZmFsc2UgPSBPUiAoZGVmYXVsdClcbiAqICAgICB9LFxuICogICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi91c2Vycy5wYWdlJyksXG4gKiAgIH0sXG4gKiBdO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBwZXJtaXNzaW9uR3VhcmRGcm9tUm91dGU6IENhbkFjdGl2YXRlRm4gPSAoXG4gIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90XG4pOiBib29sZWFuIHwgVXJsVHJlZSA9PiB7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICBjb25zdCBwZXJtaXNzaW9ucyA9IHJvdXRlLmRhdGFbJ3Blcm1pc3Npb25zJ10gYXMgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlcXVpcmVBbGwgPSByb3V0ZS5kYXRhWydyZXF1aXJlQWxsJ10gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBpZiAoIXBlcm1pc3Npb25zIHx8IHBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgaGFzQWNjZXNzID0gcmVxdWlyZUFsbFxuICAgID8gYXV0aFNlcnZpY2UuaGFzQWxsUGVybWlzc2lvbnMocGVybWlzc2lvbnMpXG4gICAgOiBhdXRoU2VydmljZS5oYXNBbnlQZXJtaXNzaW9uKHBlcm1pc3Npb25zKTtcblxuICBpZiAoaGFzQWNjZXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zb2xlLndhcm4oXG4gICAgYFtWYWx0ZWNoQXV0aF0gUGVybWlzbyBkZW5lZ2Fkby4gUmVxdWVyaWRvOiAke3Blcm1pc3Npb25zLmpvaW4ocmVxdWlyZUFsbCA/ICcgeSAnIDogJyBvICcpfWBcbiAgKTtcbiAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKFtjb25maWcudW5hdXRob3JpemVkUm91dGVdKTtcbn07XG5cbi8qKlxuICogR3VhcmQgcXVlIHZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gZXMgc3VwZXIgYWRtaW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGF1dGhHdWFyZCwgc3VwZXJBZG1pbkd1YXJkIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICdzdXBlci1hZG1pbicsXG4gKiAgICAgY2FuQWN0aXZhdGU6IFthdXRoR3VhcmQsIHN1cGVyQWRtaW5HdWFyZF0sXG4gKiAgICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3N1cGVyLWFkbWluLnBhZ2UnKSxcbiAqICAgfSxcbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHN1cGVyQWRtaW5HdWFyZDogQ2FuQWN0aXZhdGVGbiA9ICgpOiBib29sZWFuIHwgVXJsVHJlZSA9PiB7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICBpZiAoYXV0aFNlcnZpY2UuaXNTdXBlckFkbWluKCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBBY2Nlc28gZGUgc3VwZXIgYWRtaW4gcmVxdWVyaWRvJyk7XG4gIHJldHVybiByb3V0ZXIuY3JlYXRlVXJsVHJlZShbY29uZmlnLnVuYXV0aG9yaXplZFJvdXRlXSk7XG59O1xuXG4vKipcbiAqIEd1YXJkIHF1ZSB2ZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIHVuIHJvbCBlc3BlY8OtZmljby5cbiAqXG4gKiBAcGFyYW0gcm9sZXMgLSBSb2wgbyBsaXN0YSBkZSByb2xlcyByZXF1ZXJpZG9zIChPUilcbiAqIEByZXR1cm5zIEd1YXJkIGZ1bmN0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGF1dGhHdWFyZCwgcm9sZUd1YXJkIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICdlZGl0b3InLFxuICogICAgIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkLCByb2xlR3VhcmQoWydlZGl0b3InLCAnYWRtaW4nXSldLFxuICogICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9lZGl0b3IucGFnZScpLFxuICogICB9LFxuICogXTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9sZUd1YXJkKHJvbGVzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IENhbkFjdGl2YXRlRm4ge1xuICByZXR1cm4gKCk6IGJvb2xlYW4gfCBVcmxUcmVlID0+IHtcbiAgICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gICAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgY29uc3QgY29uZmlnID0gaW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpO1xuXG4gICAgY29uc3Qgcm9sZUFycmF5ID0gQXJyYXkuaXNBcnJheShyb2xlcykgPyByb2xlcyA6IFtyb2xlc107XG5cbiAgICBjb25zdCBoYXNSb2xlID0gcm9sZUFycmF5LnNvbWUocm9sZSA9PiBhdXRoU2VydmljZS5oYXNSb2xlKHJvbGUpKTtcblxuICAgIGlmIChoYXNSb2xlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFtWYWx0ZWNoQXV0aF0gUm9sIHJlcXVlcmlkbzogJHtyb2xlQXJyYXkuam9pbignIG8gJyl9YCk7XG4gICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKFtjb25maWcudW5hdXRob3JpemVkUm91dGVdKTtcbiAgfTtcbn1cbiJdfQ==
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.157';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xNTcnO1xuIl19
5
+ export const VERSION = '4.0.159';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xNTknO1xuIl19