@sumaris-net/ngx-components 18.8.0 → 18.8.2
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.
- package/esm2022/src/app/core/menu/menu.service.mjs +5 -3
- package/esm2022/src/app/core/services/auth-guard.service.mjs +2 -2
- package/esm2022/src/environments/environment.class.mjs +3 -2
- package/fesm2022/sumaris-net.ngx-components.mjs +7 -4
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/assets/manifest.json +1 -1
- package/src/environments/environment.class.d.ts +1 -0
|
@@ -42,7 +42,7 @@ export class MenuService extends StartableObservableService {
|
|
|
42
42
|
_logPrefix = '[menu-service] ';
|
|
43
43
|
_$opened = new Subject();
|
|
44
44
|
_$splitPaneWhen = new BehaviorSubject(DEFAULT_MENU_SHOW_WHEN);
|
|
45
|
-
_$enabled
|
|
45
|
+
_$enabled;
|
|
46
46
|
_$enableSubMenu;
|
|
47
47
|
constructor(settings, configService, accountService, router, modalCtrl, alertController, navController, translate, environment, options, staticItems) {
|
|
48
48
|
super(settings);
|
|
@@ -65,8 +65,8 @@ export class MenuService extends StartableObservableService {
|
|
|
65
65
|
enable: options?.subMenu?.enable !== false && !this.settings.mobile,
|
|
66
66
|
},
|
|
67
67
|
};
|
|
68
|
+
this._$enabled = new BehaviorSubject(this.environment?.enableMenu !== false);
|
|
68
69
|
this._$enableSubMenu = new BehaviorSubject(this._options.subMenu.enable);
|
|
69
|
-
this._debug = !environment.production;
|
|
70
70
|
this._detachedSubItems = [];
|
|
71
71
|
this._staticItems = (staticItems || []).map((source) => {
|
|
72
72
|
const target = this.fromObject({ static: true, ...source }, { computeId: true, fillParent: true, fillDefaultFromParent: true });
|
|
@@ -78,6 +78,8 @@ export class MenuService extends StartableObservableService {
|
|
|
78
78
|
}
|
|
79
79
|
return target;
|
|
80
80
|
});
|
|
81
|
+
// DEBUG
|
|
82
|
+
this._debug = !environment.production;
|
|
81
83
|
}
|
|
82
84
|
get opened() {
|
|
83
85
|
return this._$opened.asObservable();
|
|
@@ -661,4 +663,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
661
663
|
type: Inject,
|
|
662
664
|
args: [APP_MENU_ITEMS]
|
|
663
665
|
}] }] });
|
|
664
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFhLFFBQVEsRUFBRSxTQUFTLEVBQWUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7QUFHM0Us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QyxhQUFhLENBQUMsQ0FBQztZQUN6RCxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQzt3R0EvcUJVLFdBQVcsa1FBdUJaLFdBQVcsYUFDQyxnQkFBZ0IsNkJBQ2hCLGNBQWM7NEdBekJ6QixXQUFXLGNBSFYsTUFBTTs7NEZBR1AsV0FBVztrQkFKdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtvQkFDbEIsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUNwQjs7MEJBd0JJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDbkMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVOVklST05NRU5ULCBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBEYXRlVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IGZpcnN0Tm90TmlsUHJvbWlzZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtb2JzZXJ2YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEljb25SZWYgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgQWJvdXRNb2RhbCB9IGZyb20gJy4uL2Fib3V0L2Fib3V0Lm1vZGFsJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJR19PUFRJT05TIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IFRyZWVJdGVtRW50aXR5VXRpbHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC90cmVlLWl0ZW0tZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IElNZW51SXRlbSwgTWVudUl0ZW0sIE1lbnVJdGVtcywgTWVudU9wdGlvbnMgfSBmcm9tICcuL21lbnUubW9kZWwnO1xuXG5leHBvcnQgdHlwZSBTcGxpdFBhbmVTaG93V2hlbiA9IGJvb2xlYW4gfCAnbGcnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUVOVV9TSE9XX1dIRU46IFNwbGl0UGFuZVNob3dXaGVuID0gJ2xnJztcbmV4cG9ydCBjb25zdCBBUFBfTUVOVV9JVEVNUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJTWVudUl0ZW1bXT4oJ21lbnVJdGVtcycpO1xuZXhwb3J0IGNvbnN0IEFQUF9NRU5VX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVudU9wdGlvbnM+KCdtZW51T3B0aW9ucycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVQYXRoUGFyYW0ge1xuICBwYXRoOiBzdHJpbmc7XG4gIHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGRlcHM6IFtFTlZJUk9OTUVOVF0sXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2U8TWVudUl0ZW1bXT4ge1xuICByZWFkb25seSBhY2NvdW50Q2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWNjb3VudD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgb25QaW5uZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVJdGVtPih0cnVlKTtcblxuICBwcml2YXRlIF9zdGF0aWNJdGVtczogTWVudUl0ZW1bXTtcbiAgcHJpdmF0ZSBfZGV0YWNoZWRTdWJJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIF9pdGVtQ291bnRlciA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IE1lbnVPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dQcmVmaXggPSAnW21lbnUtc2VydmljZV0gJztcbiAgcHJpdmF0ZSByZWFkb25seSBfJG9wZW5lZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRzcGxpdFBhbmVXaGVuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTcGxpdFBhbmVTaG93V2hlbj4oREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRlbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfJGVuYWJsZVN1Yk1lbnU6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfT1BUSU9OUykgb3B0aW9ucz86IE1lbnVPcHRpb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfSVRFTVMpIHN0YXRpY0l0ZW1zPzogSU1lbnVJdGVtW11cbiAgKSB7XG4gICAgc3VwZXIoc2V0dGluZ3MpO1xuICAgIHRoaXMuX29wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc3ViTWVudToge1xuICAgICAgICBkaXNhYmxlSWNvbjogZmFsc2UsXG4gICAgICAgIHNhdmVQaW5uZWQ6IHRydWUsXG4gICAgICAgIC4uLihvcHRpb25zPy5zdWJNZW51IHx8IHt9KSxcbiAgICAgICAgLy8gRm9yY2UgZGlzYWJsZSBvbiBtb2JpbGVcbiAgICAgICAgZW5hYmxlOiBvcHRpb25zPy5zdWJNZW51Py5lbmFibGUgIT09IGZhbHNlICYmICF0aGlzLnNldHRpbmdzLm1vYmlsZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLl8kZW5hYmxlU3ViTWVudSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fb3B0aW9ucy5zdWJNZW51LmVuYWJsZSk7XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcblxuICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBbXTtcbiAgICB0aGlzLl9zdGF0aWNJdGVtcyA9IChzdGF0aWNJdGVtcyB8fCBbXSkubWFwKChzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZnJvbU9iamVjdCh7IHN0YXRpYzogdHJ1ZSwgLi4uc291cmNlIH0sIHsgY29tcHV0ZUlkOiB0cnVlLCBmaWxsUGFyZW50OiB0cnVlLCBmaWxsRGVmYXVsdEZyb21QYXJlbnQ6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGRldGFjaGVkU3ViSXRlbXMgPSBUcmVlSXRlbUVudGl0eVV0aWxzLmRlbGV0ZVJlY3Vyc2l2ZWx5KHRhcmdldCwgKGl0ZW0pID0+IGl0ZW0uc3RhdGljICE9PSB0cnVlKTtcbiAgICAgIGlmIChkZXRhY2hlZFN1Ykl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgZGV0YWNoZWRTdWJJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB0aGlzLl9kZXRhY2hUb1BhcmVudChpdGVtKSk7XG4gICAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgJ0luaXRpYWwgZGV0YWNoZWQgc3ViIGl0ZW1zJywgZGV0YWNoZWRTdWJJdGVtcyk7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaCguLi5kZXRhY2hlZFN1Ykl0ZW1zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgb3BlbmVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl8kb3BlbmVkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNwbGl0UGFuZVdoZW4oKTogT2JzZXJ2YWJsZTxTcGxpdFBhbmVTaG93V2hlbj4ge1xuICAgIHJldHVybiB0aGlzLl8kc3BsaXRQYW5lV2hlbi5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl8kZW5hYmxlZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBzdWJNZW51RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fJGVuYWJsZVN1Yk1lbnUudmFsdWU7XG4gIH1cblxuICBnZXQgc3ViSXRlbXMoKTogTWVudUl0ZW1bXSB7XG4gICAgcmV0dXJuICh0aGlzLmRhdGEgfHwgW10pLnJlZHVjZSgocmVzLCByb290RWxlbWVudCkgPT4gcmVzLmNvbmNhdChyb290RWxlbWVudC5jaGlsZHJlbiksIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9zdGF0aWNTdWJJdGVtcygpOiBNZW51SXRlbVtdIHtcbiAgICByZXR1cm4gKHRoaXMuX3N0YXRpY0l0ZW1zIHx8IFtdKS5yZWR1Y2UoKHJlcywgcm9vdEVsZW1lbnQpID0+IHJlcy5jb25jYXQocm9vdEVsZW1lbnQuY2hpbGRyZW4pLCBbXSk7XG4gIH1cblxuICBlbmFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl8kZW5hYmxlZC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGVuYWJsZVN1Yk1lbnUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl8kZW5hYmxlU3ViTWVudS5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHNldFNwbGl0UGFuZVNob3dXaGVuKHZhbHVlOiBTcGxpdFBhbmVTaG93V2hlbikge1xuICAgIGlmICh0aGlzLl8kc3BsaXRQYW5lV2hlbi52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNwbGl0UGFuZVdoZW4oKSB7XG4gICAgaWYgKHRoaXMuXyRzcGxpdFBhbmVXaGVuLnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fJHNwbGl0UGFuZVdoZW4ubmV4dChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gICAgfVxuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IHsgd2l0aENoaWxkcmVuPzogYm9vbGVhbjsgY29tcHV0ZUlkPzogYm9vbGVhbjsgZmlsbFBhcmVudD86IGJvb2xlYW47IGZpbGxEZWZhdWx0RnJvbVBhcmVudD86IGJvb2xlYW4gfSk6IE1lbnVJdGVtIHtcbiAgICBjb25zdCB0YXJnZXQgPSBNZW51SXRlbS5mcm9tT2JqZWN0KHNvdXJjZSwgeyB3aXRoQ2hpbGRyZW46IGZhbHNlIH0pO1xuICAgIC8vIENvbXB1dGUgaWQgaWYgbmVlZFxuICAgIGlmIChvcHRzPy5jb21wdXRlSWQgJiYgaXNOaWwodGFyZ2V0LmlkKSkgdGFyZ2V0LmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG5cbiAgICAvLyBSZW1vdmUgaWNvbiBpZiBkaXNhYmxlZFxuICAgIGlmICh0aGlzLl9vcHRpb25zLnN1Yk1lbnUuZGlzYWJsZUljb24pIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCA8SWNvblJlZj57IGljb246IHVuZGVmaW5lZCwgbWF0SWNvbjogdW5kZWZpbmVkLCBtYXRTdmdJY29uOiB1bmRlZmluZWQgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzaXZlXG4gICAgdGFyZ2V0LmNoaWxkcmVuID0gKHNvdXJjZS5jaGlsZHJlbiB8fCBbXSkubWFwKChqc29uOiBhbnkpID0+IHRoaXMuZnJvbU9iamVjdChqc29uLCB7IC4uLm9wdHMsIGZpbGxQYXJlbnQ6IGZhbHNlIH0pKTtcblxuICAgIC8vIEZpbGwgcGFyZW50IChvbmNlLCB3aGVuIHRoZSBmdWxsIHRyZWUgaXMgcmVhZHkpXG4gICAgaWYgKG9wdHM/LmZpbGxQYXJlbnQpIHtcbiAgICAgIFRyZWVJdGVtRW50aXR5VXRpbHMudHJlZUZpbGxQYXJlbnQodGFyZ2V0KTtcblxuICAgICAgLy8gRmlsbCBkZWZhdWx0cyBmcm9tIHRoZSBwYXJlbnQgKG9uY2UgZmlsbGVkKVxuICAgICAgaWYgKG9wdHM/LmZpbGxEZWZhdWx0RnJvbVBhcmVudCkge1xuICAgICAgICBUcmVlSXRlbUVudGl0eVV0aWxzLnZpc2l0KHRhcmdldCwgKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoIWl0ZW0ucGFyZW50KSByZXR1cm47IC8vIFNraXAgaWYgbm8gcGFyZW50XG4gICAgICAgICAgaXRlbS5wYXJlbnRQYXRoID0gaXRlbS5wYXJlbnRQYXRoIHx8IGl0ZW0ucGFyZW50LnBhdGg7XG4gICAgICAgICAgaXRlbS5wYXJlbnRQYXRoUGFyYW1zID0gaXRlbS5wYXJlbnRQYXRoUGFyYW1zIHx8IGl0ZW0ucGFyZW50LnBhdGhQYXJhbXM7XG4gICAgICAgICAgaXRlbS5zdGF0aWMgPSB0b0Jvb2xlYW4oaXRlbS5zdGF0aWMsIGl0ZW0ucGFyZW50LnN0YXRpYyk7XG4gICAgICAgICAgLy8gQ29tcHV0ZSBwYXRoLCBmcm9tIHBhcmVudCBwYXRoICsgYWN0aW9uXG4gICAgICAgICAgaWYgKCFpdGVtLnBhdGggJiYgISFpdGVtLmFjdGlvbikge1xuICAgICAgICAgICAgaXRlbS5wYXRoID0gaXRlbS5wYXJlbnQucGF0aDtcbiAgICAgICAgICAgIGl0ZW0ucGF0aFBhcmFtcyA9IHR5cGVvZiBpdGVtLmFjdGlvbiA9PT0gJ3N0cmluZycgPyB7IGFjdGlvbjogaXRlbS5hY3Rpb24gfSA6IHsgYWN0aW9uSWQ6IGl0ZW0uaWQudG9TdHJpbmcoKSwgYWN0aW9uVGl0bGU6IGl0ZW0udGl0bGUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBjcmVhdGVTdWJNZW51KHNvdXJjZTogUGFydGlhbDxJTWVudUl0ZW0+KTogTWVudUl0ZW0ge1xuICAgIGlmICghdGhpcy5zdWJNZW51RW5hYmxlZCkgcmV0dXJuIG51bGw7IC8vIFNraXAgaWYgZGlzYWJsZWRcblxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZnJvbU9iamVjdChzb3VyY2UpO1xuXG4gICAgLy8gQ2hlY2sgaWYgZXhpc3RzXG4gICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbSh0YXJnZXQpO1xuICAgICAgaWYgKGV4aXN0aW5nSXRlbSkgcmV0dXJuIGV4aXN0aW5nSXRlbTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVcbiAgICBpZiAoaXNOaWwodGFyZ2V0LmlkKSkgdGFyZ2V0LmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgYXN5bmMgYWRkU3ViTWVudUl0ZW1zKHNvdXJjZXM6IElNZW51SXRlbVtdLCBvcHRzPzogeyBza2lwSWZFeGlzdHM/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIGlmICghdGhpcy5zdWJNZW51RW5hYmxlZCkgcmV0dXJuOyAvLyBTa2lwXG4gICAgcmV0dXJuIHNvdXJjZXMubWFwKChzb3VyY2UpID0+IHRoaXMuX2FkZFN1Yk1lbnVJdGVtKHRoaXMuZnJvbU9iamVjdChzb3VyY2UpLCBvcHRzKSk7XG4gIH1cblxuICBhc3luYyBhZGRTdWJNZW51SXRlbShpdGVtOiBJTWVudUl0ZW0sIG9wdHM/OiB7IHNraXBJZkV4aXN0cz86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgaWYgKCF0aGlzLnN1Yk1lbnVFbmFibGVkKSByZXR1cm47IC8vIFNraXBcbiAgICByZXR1cm4gdGhpcy5fYWRkU3ViTWVudUl0ZW0odGhpcy5mcm9tT2JqZWN0KGl0ZW0pLCBvcHRzKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVN1Yk1lbnVJdGVtcyhpdGVtczogSU1lbnVJdGVtW10pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiAoaXRlbXMgfHwgW10pLm1hcCgoaXRlbSkgPT4gdGhpcy5fcmVtb3ZlU3ViTWVudUl0ZW0odGhpcy5mcm9tT2JqZWN0KGl0ZW0pKSk7XG4gIH1cblxuICBhc3luYyByZW1vdmVTdWJNZW51SXRlbShpdGVtOiBJTWVudUl0ZW0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiB0aGlzLl9yZW1vdmVTdWJNZW51SXRlbSh0aGlzLmZyb21PYmplY3QoaXRlbSkpO1xuICB9XG5cbiAgdG9nZ2xlUGlubmVkKHNvdXJjZTogSU1lbnVJdGVtKSB7XG4gICAgY29uc3QgaXRlbSA9IHNvdXJjZSBpbnN0YW5jZW9mIE1lbnVJdGVtID8gc291cmNlIDogdGhpcy5fZmluZEV4aXN0aW5nSXRlbSh0aGlzLmZyb21PYmplY3Qoc291cmNlKSk7XG5cbiAgICAvLyBTa2lwIGlmIG5vdCBmb3VuZFxuICAgIGlmICghaXRlbSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgYFN1YiBtZW51IHske3NvdXJjZS5wYXRofX0gY2Fubm90IGJlIGZvdW5kIC0gdW5hYmxlIHRvIHRvZ2dsZSBwaW5uZWQhYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBpZiBzdGF0aWNcbiAgICBpZiAoaXRlbS5zdGF0aWMpIHJldHVybjtcblxuICAgIC8vIFVucGlubmVkXG4gICAgaWYgKGl0ZW0ucGlubmVkKSB7XG4gICAgICBpdGVtLnBpbm5lZCA9IGZhbHNlO1xuICAgICAgaWYgKCFpdGVtLmRldGFjaGVkKSB7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBbLi4udGhpcy5fZGV0YWNoZWRTdWJJdGVtcywgLi4udGhpcy5fZGV0YWNoU3ViTWVudUl0ZW1zKCldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBpbm5lZFxuICAgIGVsc2Uge1xuICAgICAgaXRlbS5waW5uZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMub25QaW5uZWQuZW1pdChpdGVtKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBY3Rpb24oZXZlbnQ6IEV2ZW50LCBpdGVtOiBNZW51SXRlbSkge1xuICAgIGNvbnN0IGFjdGlvbiA9IGl0ZW0/LmFjdGlvbjtcbiAgICBpZiAoIWFjdGlvbikgcmV0dXJuOyAvLyBza2lwXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBzd2l0Y2ggKGFjdGlvbiBhcyBzdHJpbmcpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhYm91dCc6XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcGVuQWJvdXRNb2RhbCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdleHBhbmQnOlxuICAgICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRXhwYW5kYWJsZUl0ZW0oaXRlbSk7XG4gICAgICAgICAgaWYgKGl0ZW0ucGF0aCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlUm9vdChpdGVtLnBhdGgsIHtcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IGl0ZW0ucGF0aFBhcmFtcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGlmIChpdGVtLnBhdGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoaXRlbS5wYXRoLCB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBpdGVtLnBhdGhQYXJhbXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGFjdGlvbjogJyArIGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAoYWN0aW9uIGFzIHVua25vd24gYXMgYW55KShldmVudCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9nb3V0KCkge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoW1xuICAgICAgJ0FVVEguTE9HT1VULkNPTkZJUk1fVElUTEUnLFxuICAgICAgJ0FVVEguTE9HT1VULkNPTkZJUk1fTUVTU0FHRScsXG4gICAgICAnQ09NTU9OLkJUTl9DQU5DRUwnLFxuICAgICAgJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJyxcbiAgICBdKTtcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBoZWFkZXI6IHRyYW5zbGF0aW9uc1snQVVUSC5MT0dPVVQuQ09ORklSTV9USVRMRSddLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRpb25zWydBVVRILkxPR09VVC5DT05GSVJNX01FU1NBR0UnXSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0aW9uc1snQ09NTU9OLkJUTl9DQU5DRUwnXSxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBjc3NDbGFzczogJ3NlY29uZGFyeScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJ10sXG4gICAgICAgICAgY3NzQ2xhc3M6ICdpb24tY29sb3ItcHJpbWFyeScsXG4gICAgICAgICAgaGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQmFjayB0byBob21lXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KCcvJyk7XG5cbiAgICAgICAgICAgIC8vIFdBUk5JTkc6IGxvZ291dCBzaG91bGQgYmUgZG9uZSBBRlRFUiBob21lIHJlZGlyZWN0aW9uLCBiZWNhdXNlIG9mIGNhY2hlIGNsZWFyaW5nIC0gc2VlIGlzc3VlICM1XG4gICAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgYXN5bmMgb3BlbkFib3V0TW9kYWwoKSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoeyBjb21wb25lbnQ6IEFib3V0TW9kYWwgfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZUV4cGFuZGFibGVJdGVtKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKCFpdGVtLmV4cGFuZGVkKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgJ0V4cGFuZCBpdGVtJywgaXRlbSk7XG5cbiAgICAgIGl0ZW0ubWF0SWNvbiA9ICdleHBhbmRfbGVzcyc7XG5cbiAgICAgIC8vIFRyeSB0byBhdHRhY2ggc29tZSBpdGVtXG4gICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zXG4gICAgICAgIC5maWx0ZXIoKGNoaWxkSXRlbSkgPT4gISF0aGlzLl9maW5kUGFyZW50KGNoaWxkSXRlbSwgW2l0ZW1dKSlcbiAgICAgICAgLmZvckVhY2goKGNoaWxkSXRlbSkgPT4gdGhpcy5fYXR0YWNoTWVudVRvUGFyZW50KGl0ZW0sIGNoaWxkSXRlbSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtLm1hdEljb24gPSAnZXhwYW5kX21vcmUnO1xuXG4gICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gWy4uLnRoaXMuX2RldGFjaGVkU3ViSXRlbXMsIC4uLnRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcyh7IHBhdGg6ICcvJywgcGFyYW1zOiB7fSB9LCBpdGVtLmNoaWxkcmVuKV07XG4gICAgfVxuICB9XG5cbiAgX21hcmtBc09wZW5lZCgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBfbWFya0FzQ2xvc2VkKCkge1xuICAgIHRoaXMuXyRvcGVuZWQubmV4dChmYWxzZSk7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCkge1xuICAgIGNvbnNvbGUuaW5mbyhgJHt0aGlzLl9sb2dQcmVmaXh9U3RhcnRpbmcuLi5gKTtcblxuICAgIC8vIFJlc3RvcmUgc3ViIGl0ZW1zIGZyb20gc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG4gICAgY29uc3Qgc2V0dGluZ3NTdWJJdGVtczogSU1lbnVJdGVtW10gPSB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncygnbWVudScsICdzdWItaXRlbXMnKTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KHNldHRpbmdzU3ViSXRlbXMpKSB7XG4gICAgICBjb25zdCBkZXRhY2hlZFN1Ykl0ZW1zID0gc2V0dGluZ3NTdWJJdGVtcy5tYXAoKHNvdXJjZSkgPT4gdGhpcy5mcm9tT2JqZWN0KHNvdXJjZSwgeyBjb21wdXRlSWQ6IHRydWUsIGZpbGxQYXJlbnQ6IHRydWUgfSkpO1xuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyAnUmVzdG9yaW5nIHBpbm5lZCBzdWIgaXRlbXMgZnJvbSBzZXR0aW5ncycsIGRldGFjaGVkU3ViSXRlbXMpO1xuXG4gICAgICAvLyBUT0RPIGNoZWNrIGlmIHByZXZpb3VzIHN1YiBtZW51IChmcm9tIG1lbnUgdG9rZW4pIGFyZSBrZXB0XG4gICAgICAvL3RoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaCguLi5kZXRhY2hlZFN1Ykl0ZW1zKTtcbiAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBkZXRhY2hlZFN1Ykl0ZW1zO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnRFdmVudCQgPSBtZXJnZShcbiAgICAgIGZyb20odGhpcy5hY2NvdW50U2VydmljZS5yZWFkeSgpKSxcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbixcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXQucGlwZShtYXAoKF8pID0+IG51bGwpKVxuICAgICkucGlwZShcbiAgICAgIG1hcCgoYWNjb3VudCkgPT4gKGlzTm90TmlsKGFjY291bnQ/LmlkKSA/IGFjY291bnQgOiBudWxsKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYTEsIGEyKSA9PiBEYXRlVXRpbHMuaXNTYW1lKGExPy51cGRhdGVEYXRlLCBhMj8udXBkYXRlRGF0ZSkpXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAvLyBDb21iaW5lIGNvbmZpZyBhbmQgYWNjb3VudCBldmVudHNcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY29uZmlnU2VydmljZS5jb25maWcsIGFjY291bnRFdmVudCRdKS5zdWJzY3JpYmUoKFtjb25maWcsIGFjY291bnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTG9naW4gPSB0aGlzLmFjY291bnRTZXJ2aWNlLmlzTG9naW4oKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZlZCBjb25maWcgb3IgYWNjb3VudCBldmVudC4gUmVmcmVzaGluZyBpdGVtcy4uLiBpc0xvZ2luPyBgLCBpc0xvZ2luKTtcblxuICAgICAgICAvLyBNYWtlIHN1cmUgdG8gY2xlYXIgYWNjb3VudCwgaWYgbm90IGxvZ2luXG4gICAgICAgIGFjY291bnQgPSBpc0xvZ2luID8gYWNjb3VudCA6IG51bGw7XG5cbiAgICAgICAgLy8gTG9hZCBhbGwgaXRlbXNcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9sb2FkTWVudUl0ZW1zKGNvbmZpZywgYWNjb3VudCk7XG5cbiAgICAgICAgLy8gRW1pdCBuZXcgcm9vdCBpdGVtc1xuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoaXRlbXMpO1xuXG4gICAgICAgIC8vIEVtaXQgYWNjb3VudCBjaGFuZ2VzIGV2ZW50XG4gICAgICAgIHRoaXMuYWNjb3VudENoYW5nZXMubmV4dChhY2NvdW50KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gRm9yY2UgcmVmcmVzaCB3aGVuIGxvZ2luL2xvZ291dFxuICAgICAgICB0aGlzLmFjY291bnRDaGFuZ2VzLnBpcGUobWFwKCgpID0+IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKSkpLFxuICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgcm91dGVcbiAgICAgICAgdGhpcy5zdGFydFN1YmplY3QucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMucm91dGVyLmV2ZW50cyksXG4gICAgICAgICAgZmlsdGVyKChldmVudCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtYXAoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KGV2ZW50LnVybCkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDI1MCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHBhdGhQYXJhbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRldGFjaGVkU3ViSXRlbXMgPSB0aGlzLl9kZXRhY2hTdWJNZW51SXRlbXMocGF0aFBhcmFtKTtcbiAgICAgICAgICBpZiAoZGV0YWNoZWRTdWJJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gWy4uLnRoaXMuX2RldGFjaGVkU3ViSXRlbXMsIC4uLmRldGFjaGVkU3ViSXRlbXNdO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1OZXdseSBkZXRhY2hlZCBpdGVtczogYCwgZGV0YWNoZWRTdWJJdGVtcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBTYXZlIHBpbm5lZCBpdGVtc1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uUGlubmVkLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgICAvLyBDb2xsZWN0IHBpbm5lZCBlbGVtZW50cywgdGhlbiBzZXJpYWxpemUgaXQgKHdpdGhvdXQgaWQpXG4gICAgICAgIGNvbnN0IHBpbm5lZFN1Ykl0ZW1zID0gdGhpcy5zdWJJdGVtcy5maWx0ZXIoKGkpID0+IGkuaXNQaW5uZWQoKSkubWFwKChpdGVtKSA9PiBpdGVtLmFzT2JqZWN0KHsgd2l0aENoaWxkcmVuOiB0cnVlLCBrZWVwTG9jYWxJZDogZmFsc2UgfSkpO1xuXG4gICAgICAgIGlmIChwaW5uZWRTdWJJdGVtcy5sZW5ndGggJiYgdGhpcy5fZGVidWcpXG4gICAgICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgU2F2aW5nICR7cGlubmVkU3ViSXRlbXMubGVuZ3RofSBwaW5uZWQgaXRlbXMsIGluIGxvY2FsIHNldHRpbmdzYCwgcGlubmVkU3ViSXRlbXMpO1xuICAgICAgICB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZygnbWVudScsIHBpbm5lZFN1Ykl0ZW1zLCAnc3ViLWl0ZW1zJyk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuZGF0YVN1YmplY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZE1lbnVJdGVtcyhjb25maWc6IENvbmZpZ3VyYXRpb24gfCBudWxsLCBhY2NvdW50OiBBY2NvdW50IHwgbnVsbCkge1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9TG9hZGluZyBtZW51IGl0ZW1zLi4uYCk7XG5cbiAgICAvLyBTYXZlIHByZXZpb3VzIGNoaWxkcmVuIG9mIHJvb3QgaXRlbXNcbiAgICBjb25zdCBkZXRhY2hlZFN1Ykl0ZW1zID0gKHRoaXMuc3ViSXRlbXMgfHwgW10pLmNvbmNhdCh0aGlzLl9zdGF0aWNTdWJJdGVtcyB8fCBbXSkucmVkdWNlKChyZXMsIHJvb3RJdGVtKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHJvb3RJdGVtLmNoaWxkcmVuO1xuICAgICAgaWYgKGlzRW1wdHlBcnJheShjaGlsZHJlbikpIHJldHVybiByZXM7XG4gICAgICAvLyBEZXRhY2ggYWxsIHJvb3QgY2hpbGRyZW5cbiAgICAgIHJvb3RJdGVtLmNoaWxkcmVuID0gW107XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gKGNoaWxkLnBhcmVudCA9IG51bGwpKTtcbiAgICAgIC8vIFJldHVybiByb290IGNoaWxkcmVuXG4gICAgICByZXR1cm4gcmVzLmNvbmNhdChjaGlsZHJlbik7XG4gICAgfSwgdGhpcy5fZGV0YWNoZWRTdWJJdGVtcyB8fCBbXSk7XG5cbiAgICAvLyBSZXNldCBiYXNlIHJvb3QgaXRlbXMgKGNsZWFuIGl0ZW1zIGFkZGVkIGJ5IGNvbmZpZylcbiAgICBsZXQgaXRlbXM6IE1lbnVJdGVtW10gPSB0aGlzLl9zdGF0aWNJdGVtcy5zbGljZSgpO1xuXG4gICAgLy8gQ29uY2F0IGNvbmZpZydzIGl0ZW1zXG4gICAgY29uc3QgY29uZmlnVmFsdWU6IHN0cmluZyA9IGNvbmZpZz8uZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5NRU5VX0lURU1TKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGNvbmZpZ1ZhbHVlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnSXRlbXMgPSBKU09OLnBhcnNlKGNvbmZpZ1ZhbHVlKSBhcyBJTWVudUl0ZW1bXTtcbiAgICAgICAgaXRlbXMgPSAoY29uZmlnSXRlbXMgfHwgW10pLnJlZHVjZSgocmVzOiBNZW51SXRlbVtdLCBzb3VyY2UpID0+IHtcbiAgICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGl0ZW1cbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5mcm9tT2JqZWN0KHsgc3RhdGljOiB0cnVlLCAuLi5zb3VyY2UgfSwgeyBjb21wdXRlSWQ6IHRydWUgfSk7XG5cbiAgICAgICAgICAvLyBTa2lwIGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgICAgaWYgKHJlcy5maW5kKChpKSA9PiBNZW51SXRlbXMuaXNTYW1lKGksIGl0ZW0pKSkgcmV0dXJuIHJlcztcblxuICAgICAgICAgIC8vIFJldXNlIGV4aXN0aW5nIGlkLCBpZiBwb3NzaWJsZVxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbSA9IHRoaXMuZGF0YT8uZmluZCgoaSkgPT4gTWVudUl0ZW1zLmlzU2FtZShpLCBpdGVtKSk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSXRlbSkge1xuICAgICAgICAgICAgaXRlbS5pZCA9IGV4aXN0aW5nSXRlbS5pZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXRlbS5hZnRlcikge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KChpKSA9PiBpLnRpdGxlID09PSBpdGVtLmFmdGVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICAgICAgICAgIC5zbGljZSgwLCBpbmRleCArIDEpXG4gICAgICAgICAgICAgICAgLmNvbmNhdChpdGVtKVxuICAgICAgICAgICAgICAgIC5jb25jYXQocmVzLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVzLmZpbmRJbmRleCgoaSkgPT4gaS50aXRsZSA9PT0gaXRlbS5iZWZvcmUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzLnNsaWNlKDAsIGluZGV4KS5jb25jYXQoaXRlbSkuY29uY2F0KHJlcy5zbGljZShpbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChpdGVtKTtcbiAgICAgICAgfSwgaXRlbXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5fbG9nUHJlZml4fUludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiAnJHtDT1JFX0NPTkZJR19PUFRJT05TLk1FTlVfSVRFTVMua2V5fScuIEV4cGVjdGVkIGFuIGFycmF5IG9mIG1lbnUgaXRlbWAsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIGl0ZW0gdXNpbmcgYWNjb3VudCByaWdodHNcbiAgICBjb25zdCBvcHRzID0geyBkZWJ1ZzogdGhpcy5fZGVidWcgfTtcbiAgICBpdGVtcyA9IGl0ZW1zXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiBNZW51SXRlbXMuY2hlY2tJZlZpc2libGUoaXRlbSwgYWNjb3VudCwgY29uZmlnLCBvcHRzKSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgLy8gUmVwbGFjZSB0aXRsZSB1c2luZyBhIGNvbmZpZyBwcm9wZXJ0eVxuICAgICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGl0ZW0udGl0bGVQcm9wZXJ0eSkgJiYgY29uZmlnKSB7XG4gICAgICAgICAgaXRlbS50aXRsZSA9IGNvbmZpZy5wcm9wZXJ0aWVzW2l0ZW0udGl0bGVQcm9wZXJ0eV0gfHwgaXRlbS50aXRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUZvdW5kICR7aXRlbXMubGVuZ3RofSB2aXNpYmxlIHJvb3QgaXRlbXMuLi5gKTtcblxuICAgIC8vIFJlLWF0dGFjaCBzdWIgbWVudSBpdGVtc1xuICAgIGlmICh0aGlzLnN1Yk1lbnVFbmFibGVkICYmIGRldGFjaGVkU3ViSXRlbXMubGVuZ3RoKSB7XG4gICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICB0aGlzLl9hZGRTdWJNZW51SXRlbXMoZGV0YWNoZWRTdWJJdGVtcywgeyBza2lwSWZFeGlzdHM6IGZhbHNlLCBhdmFpbGFibGVQYXJlbnRzOiBkZXRhY2hlZFN1Ykl0ZW1zLmNvbmNhdChpdGVtcykgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gZGV0YWNoZWRTdWJJdGVtcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGV0YWNoZWRTdWJJdGVtcyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgX2FkZFN1Yk1lbnVJdGVtcyhzb3VyY2VzOiBNZW51SXRlbVtdLCBvcHRzPzogeyBza2lwSWZFeGlzdHM/OiBib29sZWFuOyBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSB9KSB7XG4gICAgcmV0dXJuIHNvdXJjZXMubWFwKChzb3VyY2UpID0+IHRoaXMuX2FkZFN1Yk1lbnVJdGVtKHNvdXJjZSwgb3B0cykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkU3ViTWVudUl0ZW0obmV3SXRlbTogTWVudUl0ZW0sIG9wdHM/OiB7IHNraXBJZkV4aXN0cz86IGJvb2xlYW47IGF2YWlsYWJsZVBhcmVudHM/OiBNZW51SXRlbVtdIH0pIHtcbiAgICBvcHRzID0ge1xuICAgICAgc2tpcElmRXhpc3RzOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgY29uc3QgcGF0aFBhcmFtID0gTWVudUl0ZW1zLnBhcnNlUGF0aFdpdGhRdWVyeSh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpO1xuXG4gICAgLy8gRmluZCBpZiBpdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShuZXdJdGVtLCBvcHRzPy5hdmFpbGFibGVQYXJlbnRzKTtcbiAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICAvLyBObyBjaGFuZ2VzXG4gICAgICBpZiAob3B0cy5za2lwSWZFeGlzdHMgJiYgTWVudUl0ZW1zLmlzU2FtZShleGlzdGluZ0l0ZW0sIG5ld0l0ZW0pICYmIGV4aXN0aW5nSXRlbS52aXNpYmxlKSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9U2tpcHBpbmcgc3ViIGl0ZW0gKHNhbWUgdmlzaWJsZSBpdGVtIGFscmVhZHkgZXhpc3QpYCwgbmV3SXRlbSk7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0l0ZW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXBkYXRpbmcgZXhpc3Rpbmcgc3ViIGl0ZW0gI2AsIGV4aXN0aW5nSXRlbS5pZCk7XG5cbiAgICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgaXRlbSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGlkXG4gICAgICBpZiAobmV3SXRlbSAhPT0gZXhpc3RpbmdJdGVtKSB7XG4gICAgICAgIG5ld0l0ZW0uaWQgPSBleGlzdGluZ0l0ZW0uaWQ7XG4gICAgICAgIG5ld0l0ZW0uJGNoaWxkcmVuID0gZXhpc3RpbmdJdGVtLiRjaGlsZHJlbjtcbiAgICAgICAgbmV3SXRlbS5waW5uZWQgPSBleGlzdGluZ0l0ZW0ucGlubmVkO1xuICAgICAgICBuZXdJdGVtLnN0YXRpYyA9IGV4aXN0aW5nSXRlbS5zdGF0aWM7XG4gICAgICAgIGlmIChuZXdJdGVtLnBpbm5lZCB8fCBuZXdJdGVtLnN0YXRpYyB8fCBleGlzdGluZ0l0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgICAvLyBJZiBsb2FkaW5nLCBrZWVwIGV4aXN0aW5nIHRpdGxlIGlmIHBpbm5lZCAoYXZvaWQgdG8gc2hvdyBza2VsZXRvbilcbiAgICAgICAgICBuZXdJdGVtLnRpdGxlID0gbmV3SXRlbS50aXRsZSB8fCBleGlzdGluZ0l0ZW0udGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3SXRlbS50aXRsZSA9IGlzTm90TmlsKG5ld0l0ZW0udGl0bGUpID8gbmV3SXRlbS50aXRsZSA6IGV4aXN0aW5nSXRlbS50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBdXRvIHNldCBpY29uLCBmb3IgZXhwYW5kIGFjdGlvblxuICAgICAgICBpZiAoZXhpc3RpbmdJdGVtLmFjdGlvbiA9PT0gJ2V4cGFuZCcpIHtcbiAgICAgICAgICBuZXdJdGVtLmljb24gPSBudWxsO1xuICAgICAgICAgIG5ld0l0ZW0ubWF0SWNvbiA9IGV4aXN0aW5nSXRlbS5leHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgaXRlbSdzIGlkIChpZiBuZWVkKVxuICAgIGVsc2UgaWYgKGlzTmlsKG5ld0l0ZW0uaWQpKSB7XG4gICAgICBuZXdJdGVtLmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBpY29uIGZvciBleHBhbmQgYWN0aW9uXG4gICAgaWYgKG5ld0l0ZW0uYWN0aW9uID09PSAnZXhwYW5kJyAmJiAhbmV3SXRlbS5tYXRJY29uKSB7XG4gICAgICBuZXdJdGVtLm1hdEljb24gPSAnZXhwYW5kX21vcmUnO1xuICAgIH1cblxuICAgIC8vIElmIHZpc2libGUsIGdldCB0aGUgcGFyZW50IHdoZXJlIHRvIGF0dGFjaCB0aGUgaXRlbVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQobmV3SXRlbSwgb3B0cz8uYXZhaWxhYmxlUGFyZW50cyk7XG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuZXhwYW5kZWQpIHtcbiAgICAgIC8vIEF0dGFjaCBpdGVtIHRvIHBhcmVudFxuICAgICAgdGhpcy5fYXR0YWNoTWVudVRvUGFyZW50KHBhcmVudCwgbmV3SXRlbSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBkZXRhY2hlZCBpdGVtcyA6XG4gICAgICAvLyAtIGV4Y2x1ZGVkIG5ldyBpdGVtXG4gICAgICAvLyAtIGF0dGFjaCBhbmQgZXhjbHVkZSB0aG9zZSB0aGFuIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgbmV3IGl0ZW1cbiAgICAgIC8vIFNlYXJjaCBpbiBkZXRhY2hlZCBpdGVtcyBvbmUgaGF2ZSBuZXdJdGVtIGFzIHBhcmVudFxuICAgICAgaWYgKG5ld0l0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgY29uc3QgYW5jZXN0b3IgPSBuZXdJdGVtLmFuY2VzdG9yO1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gdGhpcy5fZGV0YWNoZWRTdWJJdGVtcy5jb25jYXQoLi4ubmV3SXRlbS5jaGlsZHJlbikucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICAvLyBFeGNsdWRlZCBuZXdseSBhZGQgaXRlbVxuICAgICAgICAgIGlmIChpdGVtLmlkID09PSBuZXdJdGVtLmlkKSByZXR1cm4gcmVzO1xuXG4gICAgICAgICAgLy8gSWYgc29tZSBkZXRhY2hlZCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIG5ldyBpdGVtOiBkbyBpdFxuICAgICAgICAgIGlmIChNZW51SXRlbXMuY2hlY2tJZlN1Yk1lbnVWaXNpYmxlKGl0ZW0sIHBhdGhQYXJhbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQoaXRlbSwgW2FuY2VzdG9yXSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSBpdGVtJ3MgY2hpbGRyZW5cbiAgICAgICAgICAgICAgY29uc3QgZGV0YWNoZWRDaGlsZHJlbiA9IHRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcyhwYXRoUGFyYW0sIGl0ZW0uY2hpbGRyZW4gfHwgW10pO1xuXG4gICAgICAgICAgICAgIC8vIEF0dGFjaCBpdGVtXG4gICAgICAgICAgICAgIHRoaXMuX2F0dGFjaE1lbnVUb1BhcmVudChwYXJlbnQsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgIC8vIFJlbWVtYmVyIGRldGFjaGVkIGNoaWxkcmVuXG4gICAgICAgICAgICAgIHJldHVybiByZXMuY29uY2F0KC4uLmRldGFjaGVkQ2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERldGFjaCAoaWYgbmVlZClcbiAgICAgICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChpdGVtKTtcblxuICAgICAgICAgIC8vIEFkZCB0byBkZXRhY2hlZCBpdGVtc1xuICAgICAgICAgIHJldHVybiByZXMuY29uY2F0KGl0ZW0pO1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgZnJvbSBkZXRhY2hlZCBlbGVtZW50c1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gdGhpcy5fZGV0YWNoZWRTdWJJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IG5ld0l0ZW0uaWQpO1xuXG4gICAgICAgIC8vIERldGFjaCBjaGlsZHJlblxuICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLmZvckVhY2goKGl0ZW0pID0+IHRoaXMuX2RldGFjaFRvUGFyZW50KGl0ZW0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIG9yIHVwZGF0ZSBkZXRhY2hlZCBpdGVtXG4gICAgICBjb25zdCBkZXRhY2hlZEluZGV4ID0gaXNOb3ROaWwobmV3SXRlbS5pZCkgPyB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbmV3SXRlbS5pZCkgOiAtMTtcbiAgICAgIGlmIChkZXRhY2hlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zW2RldGFjaGVkSW5kZXhdID0gbmV3SXRlbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaChuZXdJdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3SXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXB1dGVOZXdJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbUNvdW50ZXIrKztcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZVN1Yk1lbnVJdGVtKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShpdGVtKTtcbiAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChleGlzdGluZ0l0ZW0pO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nSXRlbTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kZXRhY2hTdWJNZW51SXRlbXMoY3VycmVudFBhdGhQYXJhbT86IE1lbnVQYXRoUGFyYW0sIHN1Ykl0ZW1zPzogTWVudUl0ZW1bXSkge1xuICAgIGN1cnJlbnRQYXRoUGFyYW0gPSBjdXJyZW50UGF0aFBhcmFtID8gY3VycmVudFBhdGhQYXJhbSA6IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiAoc3ViSXRlbXMgfHwgdGhpcy5zdWJJdGVtcykucmVkdWNlKChyZXMsIHN1Ykl0ZW0pID0+IHtcbiAgICAgIC8vIE5vdCB2aXNpYmxlID0+IHNob3VsZCBiZSBkZXRhY2hcbiAgICAgIGlmICghTWVudUl0ZW1zLmNoZWNrSWZTdWJNZW51VmlzaWJsZShzdWJJdGVtLCBjdXJyZW50UGF0aFBhcmFtKSkge1xuICAgICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChzdWJJdGVtKTtcblxuICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChzdWJJdGVtKTtcbiAgICAgIH1cbiAgICAgIC8vIFZpc2libGU6IGNoZWNrIGNoaWxkcmVuXG4gICAgICByZXR1cm4gcmVzLmNvbmNhdCh0aGlzLl9kZXRhY2hTdWJNZW51SXRlbXMoY3VycmVudFBhdGhQYXJhbSwgc3ViSXRlbS5jaGlsZHJlbikpO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RldGFjaFRvUGFyZW50KGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKCFpdGVtPy5wYXJlbnQpIHJldHVybjsgLy8gU2tpcCBpZiBhbHJlYWR5IGRldGFjaGVkXG4gICAgbGV0IGNoaWxkcmVuID0gaXRlbS5wYXJlbnQuY2hpbGRyZW4gfHwgW107XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBwYXJlbnQgY2hpbGRyZW5cbiAgICBjb25zdCBpbmRleEluUGFyZW50ID0gY2hpbGRyZW4uaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXhJblBhcmVudCAhPT0gLTEpIHtcbiAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uc2xpY2UoKTsgLy8gQ29weSBvcmlnaW5hbCBhcnJheSwgYmVjYXVzZSBpdCBjYW4gYmUgdXNlZCBpbiBhIGxvb3BcbiAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleEluUGFyZW50LCAxKTtcbiAgICAgIGl0ZW0ucGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgaXRlbS5wYXJlbnQgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEV4aXN0aW5nSXRlbShzZWFyY2hJdGVtOiBJTWVudUl0ZW0sIGl0ZW1zPzogTWVudUl0ZW1bXSwgcmVjdXJzaXZlID0gdHJ1ZSk6IE1lbnVJdGVtIHtcbiAgICBpdGVtcyA9IGl0ZW1zIHx8IFsuLi50aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLCAuLi50aGlzLmRhdGFdO1xuICAgIGlmICghaXRlbXMubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBOb3QgZm91bmRcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmIChNZW51SXRlbXMuaXNTYW1lSWRPclBhdGhBbmRQYXJhbXMoc2VhcmNoSXRlbSwgaXRlbSkpIHJldHVybiBpdGVtO1xuICAgICAgaWYgKHJlY3Vyc2l2ZSAmJiBpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShzZWFyY2hJdGVtLCBpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgaWYgKGNoaWxkKSByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFBhcmVudChjaGlsZEl0ZW06IE1lbnVJdGVtLCBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSk6IE1lbnVJdGVtIHtcbiAgICBpZiAoIWNoaWxkSXRlbT8ucGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoY2hpbGRJdGVtLnBhcmVudCkgcmV0dXJuIGNoaWxkSXRlbS5wYXJlbnQ7XG5cbiAgICBhdmFpbGFibGVQYXJlbnRzID0gYXZhaWxhYmxlUGFyZW50cyB8fCBbLi4udGhpcy5fZGV0YWNoZWRTdWJJdGVtcywgLi4udGhpcy5kYXRhXTtcblxuICAgIHJldHVybiBhdmFpbGFibGVQYXJlbnRzLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0/LnBhdGgpIHJldHVybiByZXM7XG5cbiAgICAgIC8vIEEgZm91bmQgaXRlbSBhbHJlYWR5IG1hdGNoIHdpdGggdGhlIG1lbnVJdGVtLnBhcmVudFBhdGggOiBrZWVwIGl0IGFzIGl0XG4gICAgICAvLyBUaGVyZSBpcyBhIGZvdW5kIGNhbmRpZGF0ZSB0aGF0IGFscmVhZHkgbWF0Y2ggdGhlIGN1cnJlbnQgY2FuZGlkYXRlIDoga2VlcCBpdFxuICAgICAgaWYgKE1lbnVJdGVtcy5pc1BhcmVudChjaGlsZEl0ZW0sIHJlcykpIHJldHVybiByZXM7XG5cbiAgICAgIC8vIElmIHRoZSBtZW51IGl0ZW0gaGFzIGV4cGxpY2l0IHBhcmVudFBhdGggYW5kIGl0cyBwYXRoIGFuZCBwYXRoIHBhcmFtIGFyZSB0aGUgc2FtZSBhcyB0aGUgY2FuZGlkYXRlICA6IHVzZSBpdCBhcyBwYXJlbnRcbiAgICAgIGlmIChNZW51SXRlbXMuaXNQYXJlbnQoY2hpbGRJdGVtLCBpdGVtKSkgcmV0dXJuIGl0ZW07XG5cbiAgICAgIGlmICghcmVzICYmIGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmluZFBhcmVudChjaGlsZEl0ZW0sIGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hNZW51VG9QYXJlbnQocGFyZW50OiBNZW51SXRlbSwgY2hpbGQ6IE1lbnVJdGVtKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1BdHRhY2ggc3ViLW1lbnUgeyR7TWVudUl0ZW1zLmdldFVybChjaGlsZCl9fSB0byBwYXJlbnQgeyR7TWVudUl0ZW1zLmdldFVybChwYXJlbnQpfX1gKTtcblxuICAgIC8vIEF2b2lkIHRvIGtlZXAgaWRlbnRpY2FsIG1lbnUgaXRlbSAod2UgcmVwbGFjZSBpdCB3aXRoIHRoZSBuZXcgY2hpbGQgbWVudSBpdGVtKVxuICAgIC8vaWYgKCFwYXJlbnQ/LiRjaGlsZHJlbikgcGFyZW50LiRjaGlsZHJlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4oW10pO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuIHx8IFtdO1xuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgoKGl0ZW0pID0+IE1lbnVJdGVtcy5pc1NhbWVJZE9yUGF0aEFuZFBhcmFtcyhpdGVtLCBjaGlsZCkpO1xuXG4gICAgLy8gVXBkYXRlIGV4aXN0aW5nIGVsZW1lbnRcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChjaGlsZHJlbltleGlzdGluZ0luZGV4XSAhPT0gY2hpbGQpIHtcbiAgICAgICAgY2hpbGRyZW5bZXhpc3RpbmdJbmRleF0gPSBjaGlsZDtcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgIC8vIFNvcnQgYnkgdGFiIChvciBpZClcbiAgICAgIHBhcmVudC5jaGlsZHJlbiA9IGNoaWxkcmVuLnNvcnQoTWVudUl0ZW1zLnNvcnRCeVRhYk9ySWQpO1xuICAgICAgY2hpbGQucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgfVxufVxuIl19
|
|
666
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFhLFFBQVEsRUFBRSxTQUFTLEVBQWUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7QUFHM0UsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXNCLElBQUksQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQWMsV0FBVyxDQUFDLENBQUM7QUFDM0UsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWMsYUFBYSxDQUFDLENBQUM7QUFXL0UsTUFBTSxPQUFPLFdBQVksU0FBUSwwQkFBc0M7SUFlekQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNxQjtJQXRCeEIsY0FBYyxHQUFHLElBQUksZUFBZSxDQUFVLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsR0FBRyxJQUFJLFlBQVksQ0FBVyxJQUFJLENBQUMsQ0FBQztJQUU3QyxZQUFZLENBQWE7SUFDekIsaUJBQWlCLEdBQWUsRUFBRSxDQUFDO0lBQ25DLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDUixRQUFRLENBQWM7SUFDdEIsVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQy9CLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBQ2xDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBb0Isc0JBQXNCLENBQUMsQ0FBQztJQUNqRixTQUFTLENBQTJCO0lBQ3BDLGVBQWUsQ0FBMkI7SUFFM0QsWUFDWSxRQUE4QixFQUM5QixhQUE0QixFQUM1QixjQUE4QixFQUM5QixNQUFjLEVBQ2QsU0FBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsYUFBNEIsRUFDNUIsU0FBMkIsRUFDTixXQUF3QixFQUNqQixPQUFxQixFQUN2QixXQUF5QjtRQUU3RCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFaTixhQUFRLEdBQVIsUUFBUSxDQUFzQjtRQUM5QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUNOLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBS3ZELElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxHQUFHLE9BQU87WUFDVixPQUFPLEVBQUU7Z0JBQ1AsV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7Z0JBQzNCLDBCQUEwQjtnQkFDMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxLQUFLLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTthQUNwRTtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVoSSxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztZQUN2RyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUM3QixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLDRCQUE0QixFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2hGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVILFFBQVE7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxJQUFZLGVBQWU7UUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFjO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYztRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBd0I7UUFDM0MsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXLEVBQUUsSUFBNkc7UUFDbkksTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRSxxQkFBcUI7UUFDckIsSUFBSSxJQUFJLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFMUUsMEJBQTBCO1FBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDakcsQ0FBQztRQUVELFlBQVk7UUFDWixNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwSCxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDckIsbUJBQW1CLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTNDLDhDQUE4QztZQUM5QyxJQUFJLElBQUksRUFBRSxxQkFBcUIsRUFBRSxDQUFDO2dCQUNoQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTt3QkFBRSxPQUFPLENBQUMsb0JBQW9CO29CQUM5QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ3RELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7b0JBQ3hFLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDekQsMENBQTBDO29CQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUMxSSxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQTBCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsbUJBQW1CO1FBRTFELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkMsa0JBQWtCO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxJQUFJLFlBQVk7Z0JBQUUsT0FBTyxZQUFZLENBQUM7UUFDeEMsQ0FBQztRQUVELFNBQVM7UUFDVCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdkQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBb0IsRUFBRSxJQUFpQztRQUMzRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLENBQUMsT0FBTztRQUN6QyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLElBQWUsRUFBRSxJQUFpQztRQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLENBQUMsT0FBTztRQUN6QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQWtCO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFlO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWlCO1FBQzVCLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVuRyxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxNQUFNLENBQUMsSUFBSSw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ3hILE9BQU87UUFDVCxDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXhCLFdBQVc7UUFDWCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7WUFDdEYsQ0FBQztRQUNILENBQUM7UUFFRCxTQUFTO2FBQ0osQ0FBQztZQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFZLEVBQUUsSUFBYztRQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLE9BQU87UUFDNUIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixRQUFRLE1BQWdCLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxRQUFRO29CQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNwQixNQUFNO2dCQUNSLEtBQUssT0FBTztvQkFDVixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDNUIsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNkLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTs0QkFDL0MsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVO3lCQUM3QixDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxNQUFNO2dCQUNSLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ2QsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFOzRCQUMvQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVU7eUJBQzdCLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsQ0FBQztvQkFDL0MsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLE1BQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTTtRQUNWLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDaEQsMkJBQTJCO1lBQzNCLDZCQUE2QjtZQUM3QixtQkFBbUI7WUFDbkIseUJBQXlCO1NBQzFCLENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDOUMsTUFBTSxFQUFFLFlBQVksQ0FBQywyQkFBMkIsQ0FBQztZQUNqRCxPQUFPLEVBQUUsWUFBWSxDQUFDLDZCQUE2QixDQUFDO1lBQ3BELE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixDQUFDO29CQUN2QyxJQUFJLEVBQUUsUUFBUTtvQkFDZCxRQUFRLEVBQUUsV0FBVztpQkFDdEI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQztvQkFDN0MsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFO3dCQUNsQixlQUFlO3dCQUNmLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBRTNDLGtHQUFrRzt3QkFDbEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDL0IsQ0FBQztpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNyRSxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQWM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFdEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7WUFFN0IsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxpQkFBaUI7aUJBQ25CLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDNUQsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztZQUU3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlILENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVTLEtBQUssQ0FBQyxTQUFTO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhLENBQUMsQ0FBQztRQUU5QyxrQ0FBa0M7UUFDbEMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLE1BQU0sZ0JBQWdCLEdBQWdCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RixJQUFJLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFILE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRywwQ0FBMEMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTlGLDZEQUE2RDtZQUM3RCxtREFBbUQ7WUFDbkQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBQzVDLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUNwRCxDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMxRCxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FDbkYsQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0I7UUFDdkIsb0NBQW9DO1FBQ3BDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUN4RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzlDLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLGlFQUFpRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRTdILDJDQUEyQztZQUMzQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUVuQyxpQkFBaUI7WUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFbkQsc0JBQXNCO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTdCLDZCQUE2QjtZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixLQUFLO1FBQ0gsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkcsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3BDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsT0FBTyxLQUFLLFlBQVksYUFBYSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDdkUsQ0FDRjthQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkIsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0QsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLElBQUksQ0FBQyxNQUFNO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQy9GLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMvQiwwREFBMEQ7WUFDMUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUUxSSxJQUFJLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLGNBQWMsQ0FBQyxNQUFNLGtDQUFrQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3JILElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBNEIsRUFBRSxPQUF1QjtRQUMxRSxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHVCQUF1QixDQUFDLENBQUM7UUFFMUUsdUNBQXVDO1FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUN6RyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ25DLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUN2QywyQkFBMkI7WUFDM0IsUUFBUSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDdkIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkQsdUJBQXVCO1lBQ3ZCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWpDLHNEQUFzRDtRQUN0RCxJQUFJLEtBQUssR0FBZSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWxELHdCQUF3QjtRQUN4QixNQUFNLFdBQVcsR0FBVyxNQUFNLEVBQUUsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hGLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDO2dCQUNILE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFnQixDQUFDO2dCQUMzRCxLQUFLLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBZSxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUM3RCxxQkFBcUI7b0JBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFFL0UseUJBQXlCO29CQUN6QixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUFFLE9BQU8sR0FBRyxDQUFDO29CQUUzRCxpQ0FBaUM7b0JBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUN2RSxJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQzVCLENBQUM7b0JBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2YsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzNELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2pCLE9BQU8sR0FBRztpQ0FDUCxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7aUNBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUM7aUNBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2xDLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDdkIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzVELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2pCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ25FLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNaLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSw2QkFBNkIsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsbUNBQW1DLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDM0ksQ0FBQztRQUNILENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BDLEtBQUssR0FBRyxLQUFLO2FBQ1YsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3ZFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1osd0NBQXdDO1lBQ3hDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ25FLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxTQUFTLEtBQUssQ0FBQyxNQUFNLHdCQUF3QixDQUFDLENBQUM7UUFFaEcsMkJBQTJCO1FBQzNCLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuRCxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNySCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE9BQW1CLEVBQUUsSUFBZ0U7UUFDNUcsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTyxlQUFlLENBQUMsT0FBaUIsRUFBRSxJQUFnRTtRQUN6RyxJQUFJLEdBQUc7WUFDTCxZQUFZLEVBQUUsSUFBSTtZQUNsQixHQUFHLElBQUk7U0FDUixDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyRiw4QkFBOEI7UUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM3RSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLGFBQWE7WUFDYixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6RixRQUFRO2dCQUNSLElBQUksSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHFEQUFxRCxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNqSCxPQUFPLFlBQVksQ0FBQztZQUN0QixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsOEJBQThCLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRWxHLGtEQUFrRDtZQUNsRCxJQUFJLE9BQU8sS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztnQkFDckMsT0FBTyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzlELHFFQUFxRTtvQkFDckUsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQ3RELENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQy9FLENBQUM7Z0JBQ0QsbUNBQW1DO2dCQUNuQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3JDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNwQixPQUFPLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUMxRSxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCwrQkFBK0I7YUFDMUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDakUsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlCLHdCQUF3QjtZQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRTFDLDBCQUEwQjtZQUMxQixzQkFBc0I7WUFDdEIsa0VBQWtFO1lBQ2xFLHNEQUFzRDtZQUN0RCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUMvRiwwQkFBMEI7b0JBQzFCLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRTt3QkFBRSxPQUFPLEdBQUcsQ0FBQztvQkFFdkMsMERBQTBEO29CQUMxRCxJQUFJLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUNsRCxJQUFJLE1BQU0sRUFBRSxDQUFDOzRCQUNYLHlCQUF5Qjs0QkFDekIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7NEJBRWxGLGNBQWM7NEJBQ2QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFFdkMsNkJBQTZCOzRCQUM3QixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUN6QyxDQUFDO29CQUNILENBQUM7b0JBRUQsbUJBQW1CO29CQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUUzQix3QkFBd0I7b0JBQ3hCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdDQUFnQztnQkFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUV6RixrQkFBa0I7Z0JBQ2xCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sOEJBQThCO1lBQzlCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNySCxJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ2xELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLGFBQWE7UUFDbkIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQWM7UUFDdkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuQyxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGdCQUFnQyxFQUFFLFFBQXFCO1FBQ2pGLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2SSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDekQsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFOUIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCwwQkFBMEI7WUFDMUIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQWM7UUFDcEMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNO1lBQUUsT0FBTyxDQUFDLDJCQUEyQjtRQUN0RCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFFMUMsOEJBQThCO1FBQzlCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QixRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsd0RBQXdEO1lBQ3JGLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFVBQXFCLEVBQUUsS0FBa0IsRUFBRSxTQUFTLEdBQUcsSUFBSTtRQUNuRixLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxZQUFZO1FBQ2pELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxTQUFTLENBQUMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNyRSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLEtBQUs7b0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxXQUFXLENBQUMsU0FBbUIsRUFBRSxnQkFBNkI7UUFDcEUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDdkMsSUFBSSxTQUFTLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUU5QyxnQkFBZ0IsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpGLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSTtnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUU1QiwwRUFBMEU7WUFDMUUsZ0ZBQWdGO1lBQ2hGLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2dCQUFFLE9BQU8sR0FBRyxDQUFDO1lBRW5ELHlIQUF5SDtZQUN6SCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUVyRCxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU8sbUJBQW1CLENBQUMsTUFBZ0IsRUFBRSxLQUFlO1FBQzNELElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsb0JBQW9CLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6SSxpRkFBaUY7UUFDakYsaUZBQWlGO1FBQ2pGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVuRywwQkFBMEI7UUFDMUIsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDdEMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDaEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFckIsc0JBQXNCO1lBQ3RCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7d0dBanJCVSxXQUFXLGtRQXVCWixXQUFXLGFBQ0MsZ0JBQWdCLDZCQUNoQixjQUFjOzRHQXpCekIsV0FBVyxjQUhWLE1BQU07OzRGQUdQLFdBQVc7a0JBSnZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQztpQkFDcEI7OzBCQXdCSSxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ25DLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIE1vZGFsQ29udHJvbGxlciwgTmF2Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCwgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgRGF0ZVV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmaXJzdE5vdE5pbFByb21pc2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBJY29uUmVmIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IEFib3V0TW9kYWwgfSBmcm9tICcuLi9hYm91dC9hYm91dC5tb2RhbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2FjY291bnQubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBUcmVlSXRlbUVudGl0eVV0aWxzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvdHJlZS1pdGVtLWVudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBJTWVudUl0ZW0sIE1lbnVJdGVtLCBNZW51SXRlbXMsIE1lbnVPcHRpb25zIH0gZnJvbSAnLi9tZW51Lm1vZGVsJztcblxuZXhwb3J0IHR5cGUgU3BsaXRQYW5lU2hvd1doZW4gPSBib29sZWFuIHwgJ2xnJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX01FTlVfU0hPV19XSEVOOiBTcGxpdFBhbmVTaG93V2hlbiA9ICdsZyc7XG5leHBvcnQgY29uc3QgQVBQX01FTlVfSVRFTVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48SU1lbnVJdGVtW10+KCdtZW51SXRlbXMnKTtcbmV4cG9ydCBjb25zdCBBUFBfTUVOVV9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPE1lbnVPcHRpb25zPignbWVudU9wdGlvbnMnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNZW51UGF0aFBhcmFtIHtcbiAgcGF0aDogc3RyaW5nO1xuICBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBkZXBzOiBbRU5WSVJPTk1FTlRdLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51U2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlPE1lbnVJdGVtW10+IHtcbiAgcmVhZG9ubHkgYWNjb3VudENoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjY291bnQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IG9uUGlubmVkID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4odHJ1ZSk7XG5cbiAgcHJpdmF0ZSBfc3RhdGljSXRlbXM6IE1lbnVJdGVtW107XG4gIHByaXZhdGUgX2RldGFjaGVkU3ViSXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgcHJpdmF0ZSBfaXRlbUNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBNZW51T3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nUHJlZml4ID0gJ1ttZW51LXNlcnZpY2VdICc7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRvcGVuZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kc3BsaXRQYW5lV2hlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3BsaXRQYW5lU2hvd1doZW4+KERFRkFVTFRfTUVOVV9TSE9XX1dIRU4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kZW5hYmxlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF8kZW5hYmxlU3ViTWVudTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBhbGVydENvbnRyb2xsZXI6IEFsZXJ0Q29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTUVOVV9PUFRJT05TKSBvcHRpb25zPzogTWVudU9wdGlvbnMsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTUVOVV9JVEVNUykgc3RhdGljSXRlbXM/OiBJTWVudUl0ZW1bXVxuICApIHtcbiAgICBzdXBlcihzZXR0aW5ncyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBzdWJNZW51OiB7XG4gICAgICAgIGRpc2FibGVJY29uOiBmYWxzZSxcbiAgICAgICAgc2F2ZVBpbm5lZDogdHJ1ZSxcbiAgICAgICAgLi4uKG9wdGlvbnM/LnN1Yk1lbnUgfHwge30pLFxuICAgICAgICAvLyBGb3JjZSBkaXNhYmxlIG9uIG1vYmlsZVxuICAgICAgICBlbmFibGU6IG9wdGlvbnM/LnN1Yk1lbnU/LmVuYWJsZSAhPT0gZmFsc2UgJiYgIXRoaXMuc2V0dGluZ3MubW9iaWxlLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuXyRlbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0aGlzLmVudmlyb25tZW50Py5lbmFibGVNZW51ICE9PSBmYWxzZSk7XG4gICAgdGhpcy5fJGVuYWJsZVN1Yk1lbnUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX29wdGlvbnMuc3ViTWVudS5lbmFibGUpO1xuICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBbXTtcbiAgICB0aGlzLl9zdGF0aWNJdGVtcyA9IChzdGF0aWNJdGVtcyB8fCBbXSkubWFwKChzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZnJvbU9iamVjdCh7IHN0YXRpYzogdHJ1ZSwgLi4uc291cmNlIH0sIHsgY29tcHV0ZUlkOiB0cnVlLCBmaWxsUGFyZW50OiB0cnVlLCBmaWxsRGVmYXVsdEZyb21QYXJlbnQ6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGRldGFjaGVkU3ViSXRlbXMgPSBUcmVlSXRlbUVudGl0eVV0aWxzLmRlbGV0ZVJlY3Vyc2l2ZWx5KHRhcmdldCwgKGl0ZW0pID0+IGl0ZW0uc3RhdGljICE9PSB0cnVlKTtcbiAgICAgIGlmIChkZXRhY2hlZFN1Ykl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgZGV0YWNoZWRTdWJJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB0aGlzLl9kZXRhY2hUb1BhcmVudChpdGVtKSk7XG4gICAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgJ0luaXRpYWwgZGV0YWNoZWQgc3ViIGl0ZW1zJywgZGV0YWNoZWRTdWJJdGVtcyk7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaCguLi5kZXRhY2hlZFN1Ykl0ZW1zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG5cbiAgICAvLyBERUJVR1xuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBnZXQgb3BlbmVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl8kb3BlbmVkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNwbGl0UGFuZVdoZW4oKTogT2JzZXJ2YWJsZTxTcGxpdFBhbmVTaG93V2hlbj4ge1xuICAgIHJldHVybiB0aGlzLl8kc3BsaXRQYW5lV2hlbi5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl8kZW5hYmxlZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBzdWJNZW51RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fJGVuYWJsZVN1Yk1lbnUudmFsdWU7XG4gIH1cblxuICBnZXQgc3ViSXRlbXMoKTogTWVudUl0ZW1bXSB7XG4gICAgcmV0dXJuICh0aGlzLmRhdGEgfHwgW10pLnJlZHVjZSgocmVzLCByb290RWxlbWVudCkgPT4gcmVzLmNvbmNhdChyb290RWxlbWVudC5jaGlsZHJlbiksIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9zdGF0aWNTdWJJdGVtcygpOiBNZW51SXRlbVtdIHtcbiAgICByZXR1cm4gKHRoaXMuX3N0YXRpY0l0ZW1zIHx8IFtdKS5yZWR1Y2UoKHJlcywgcm9vdEVsZW1lbnQpID0+IHJlcy5jb25jYXQocm9vdEVsZW1lbnQuY2hpbGRyZW4pLCBbXSk7XG4gIH1cblxuICBlbmFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl8kZW5hYmxlZC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGVuYWJsZVN1Yk1lbnUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl8kZW5hYmxlU3ViTWVudS5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHNldFNwbGl0UGFuZVNob3dXaGVuKHZhbHVlOiBTcGxpdFBhbmVTaG93V2hlbikge1xuICAgIGlmICh0aGlzLl8kc3BsaXRQYW5lV2hlbi52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNwbGl0UGFuZVdoZW4oKSB7XG4gICAgaWYgKHRoaXMuXyRzcGxpdFBhbmVXaGVuLnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fJHNwbGl0UGFuZVdoZW4ubmV4dChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gICAgfVxuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IHsgd2l0aENoaWxkcmVuPzogYm9vbGVhbjsgY29tcHV0ZUlkPzogYm9vbGVhbjsgZmlsbFBhcmVudD86IGJvb2xlYW47IGZpbGxEZWZhdWx0RnJvbVBhcmVudD86IGJvb2xlYW4gfSk6IE1lbnVJdGVtIHtcbiAgICBjb25zdCB0YXJnZXQgPSBNZW51SXRlbS5mcm9tT2JqZWN0KHNvdXJjZSwgeyB3aXRoQ2hpbGRyZW46IGZhbHNlIH0pO1xuICAgIC8vIENvbXB1dGUgaWQgaWYgbmVlZFxuICAgIGlmIChvcHRzPy5jb21wdXRlSWQgJiYgaXNOaWwodGFyZ2V0LmlkKSkgdGFyZ2V0LmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG5cbiAgICAvLyBSZW1vdmUgaWNvbiBpZiBkaXNhYmxlZFxuICAgIGlmICh0aGlzLl9vcHRpb25zLnN1Yk1lbnUuZGlzYWJsZUljb24pIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCA8SWNvblJlZj57IGljb246IHVuZGVmaW5lZCwgbWF0SWNvbjogdW5kZWZpbmVkLCBtYXRTdmdJY29uOiB1bmRlZmluZWQgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzaXZlXG4gICAgdGFyZ2V0LmNoaWxkcmVuID0gKHNvdXJjZS5jaGlsZHJlbiB8fCBbXSkubWFwKChqc29uOiBhbnkpID0+IHRoaXMuZnJvbU9iamVjdChqc29uLCB7IC4uLm9wdHMsIGZpbGxQYXJlbnQ6IGZhbHNlIH0pKTtcblxuICAgIC8vIEZpbGwgcGFyZW50IChvbmNlLCB3aGVuIHRoZSBmdWxsIHRyZWUgaXMgcmVhZHkpXG4gICAgaWYgKG9wdHM/LmZpbGxQYXJlbnQpIHtcbiAgICAgIFRyZWVJdGVtRW50aXR5VXRpbHMudHJlZUZpbGxQYXJlbnQodGFyZ2V0KTtcblxuICAgICAgLy8gRmlsbCBkZWZhdWx0cyBmcm9tIHRoZSBwYXJlbnQgKG9uY2UgZmlsbGVkKVxuICAgICAgaWYgKG9wdHM/LmZpbGxEZWZhdWx0RnJvbVBhcmVudCkge1xuICAgICAgICBUcmVlSXRlbUVudGl0eVV0aWxzLnZpc2l0KHRhcmdldCwgKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoIWl0ZW0ucGFyZW50KSByZXR1cm47IC8vIFNraXAgaWYgbm8gcGFyZW50XG4gICAgICAgICAgaXRlbS5wYXJlbnRQYXRoID0gaXRlbS5wYXJlbnRQYXRoIHx8IGl0ZW0ucGFyZW50LnBhdGg7XG4gICAgICAgICAgaXRlbS5wYXJlbnRQYXRoUGFyYW1zID0gaXRlbS5wYXJlbnRQYXRoUGFyYW1zIHx8IGl0ZW0ucGFyZW50LnBhdGhQYXJhbXM7XG4gICAgICAgICAgaXRlbS5zdGF0aWMgPSB0b0Jvb2xlYW4oaXRlbS5zdGF0aWMsIGl0ZW0ucGFyZW50LnN0YXRpYyk7XG4gICAgICAgICAgLy8gQ29tcHV0ZSBwYXRoLCBmcm9tIHBhcmVudCBwYXRoICsgYWN0aW9uXG4gICAgICAgICAgaWYgKCFpdGVtLnBhdGggJiYgISFpdGVtLmFjdGlvbikge1xuICAgICAgICAgICAgaXRlbS5wYXRoID0gaXRlbS5wYXJlbnQucGF0aDtcbiAgICAgICAgICAgIGl0ZW0ucGF0aFBhcmFtcyA9IHR5cGVvZiBpdGVtLmFjdGlvbiA9PT0gJ3N0cmluZycgPyB7IGFjdGlvbjogaXRlbS5hY3Rpb24gfSA6IHsgYWN0aW9uSWQ6IGl0ZW0uaWQudG9TdHJpbmcoKSwgYWN0aW9uVGl0bGU6IGl0ZW0udGl0bGUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBjcmVhdGVTdWJNZW51KHNvdXJjZTogUGFydGlhbDxJTWVudUl0ZW0+KTogTWVudUl0ZW0ge1xuICAgIGlmICghdGhpcy5zdWJNZW51RW5hYmxlZCkgcmV0dXJuIG51bGw7IC8vIFNraXAgaWYgZGlzYWJsZWRcblxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZnJvbU9iamVjdChzb3VyY2UpO1xuXG4gICAgLy8gQ2hlY2sgaWYgZXhpc3RzXG4gICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbSh0YXJnZXQpO1xuICAgICAgaWYgKGV4aXN0aW5nSXRlbSkgcmV0dXJuIGV4aXN0aW5nSXRlbTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVcbiAgICBpZiAoaXNOaWwodGFyZ2V0LmlkKSkgdGFyZ2V0LmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgYXN5bmMgYWRkU3ViTWVudUl0ZW1zKHNvdXJjZXM6IElNZW51SXRlbVtdLCBvcHRzPzogeyBza2lwSWZFeGlzdHM/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIGlmICghdGhpcy5zdWJNZW51RW5hYmxlZCkgcmV0dXJuOyAvLyBTa2lwXG4gICAgcmV0dXJuIHNvdXJjZXMubWFwKChzb3VyY2UpID0+IHRoaXMuX2FkZFN1Yk1lbnVJdGVtKHRoaXMuZnJvbU9iamVjdChzb3VyY2UpLCBvcHRzKSk7XG4gIH1cblxuICBhc3luYyBhZGRTdWJNZW51SXRlbShpdGVtOiBJTWVudUl0ZW0sIG9wdHM/OiB7IHNraXBJZkV4aXN0cz86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgaWYgKCF0aGlzLnN1Yk1lbnVFbmFibGVkKSByZXR1cm47IC8vIFNraXBcbiAgICByZXR1cm4gdGhpcy5fYWRkU3ViTWVudUl0ZW0odGhpcy5mcm9tT2JqZWN0KGl0ZW0pLCBvcHRzKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVN1Yk1lbnVJdGVtcyhpdGVtczogSU1lbnVJdGVtW10pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiAoaXRlbXMgfHwgW10pLm1hcCgoaXRlbSkgPT4gdGhpcy5fcmVtb3ZlU3ViTWVudUl0ZW0odGhpcy5mcm9tT2JqZWN0KGl0ZW0pKSk7XG4gIH1cblxuICBhc3luYyByZW1vdmVTdWJNZW51SXRlbShpdGVtOiBJTWVudUl0ZW0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiB0aGlzLl9yZW1vdmVTdWJNZW51SXRlbSh0aGlzLmZyb21PYmplY3QoaXRlbSkpO1xuICB9XG5cbiAgdG9nZ2xlUGlubmVkKHNvdXJjZTogSU1lbnVJdGVtKSB7XG4gICAgY29uc3QgaXRlbSA9IHNvdXJjZSBpbnN0YW5jZW9mIE1lbnVJdGVtID8gc291cmNlIDogdGhpcy5fZmluZEV4aXN0aW5nSXRlbSh0aGlzLmZyb21PYmplY3Qoc291cmNlKSk7XG5cbiAgICAvLyBTa2lwIGlmIG5vdCBmb3VuZFxuICAgIGlmICghaXRlbSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgYFN1YiBtZW51IHske3NvdXJjZS5wYXRofX0gY2Fubm90IGJlIGZvdW5kIC0gdW5hYmxlIHRvIHRvZ2dsZSBwaW5uZWQhYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBpZiBzdGF0aWNcbiAgICBpZiAoaXRlbS5zdGF0aWMpIHJldHVybjtcblxuICAgIC8vIFVucGlubmVkXG4gICAgaWYgKGl0ZW0ucGlubmVkKSB7XG4gICAgICBpdGVtLnBpbm5lZCA9IGZhbHNlO1xuICAgICAgaWYgKCFpdGVtLmRldGFjaGVkKSB7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBbLi4udGhpcy5fZGV0YWNoZWRTdWJJdGVtcywgLi4udGhpcy5fZGV0YWNoU3ViTWVudUl0ZW1zKCldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBpbm5lZFxuICAgIGVsc2Uge1xuICAgICAgaXRlbS5waW5uZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMub25QaW5uZWQuZW1pdChpdGVtKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBY3Rpb24oZXZlbnQ6IEV2ZW50LCBpdGVtOiBNZW51SXRlbSkge1xuICAgIGNvbnN0IGFjdGlvbiA9IGl0ZW0/LmFjdGlvbjtcbiAgICBpZiAoIWFjdGlvbikgcmV0dXJuOyAvLyBza2lwXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBzd2l0Y2ggKGFjdGlvbiBhcyBzdHJpbmcpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhYm91dCc6XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcGVuQWJvdXRNb2RhbCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdleHBhbmQnOlxuICAgICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRXhwYW5kYWJsZUl0ZW0oaXRlbSk7XG4gICAgICAgICAgaWYgKGl0ZW0ucGF0aCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlUm9vdChpdGVtLnBhdGgsIHtcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IGl0ZW0ucGF0aFBhcmFtcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGlmIChpdGVtLnBhdGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoaXRlbS5wYXRoLCB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBpdGVtLnBhdGhQYXJhbXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGFjdGlvbjogJyArIGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAoYWN0aW9uIGFzIHVua25vd24gYXMgYW55KShldmVudCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9nb3V0KCkge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoW1xuICAgICAgJ0FVVEguTE9HT1VULkNPTkZJUk1fVElUTEUnLFxuICAgICAgJ0FVVEguTE9HT1VULkNPTkZJUk1fTUVTU0FHRScsXG4gICAgICAnQ09NTU9OLkJUTl9DQU5DRUwnLFxuICAgICAgJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJyxcbiAgICBdKTtcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBoZWFkZXI6IHRyYW5zbGF0aW9uc1snQVVUSC5MT0dPVVQuQ09ORklSTV9USVRMRSddLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRpb25zWydBVVRILkxPR09VVC5DT05GSVJNX01FU1NBR0UnXSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0aW9uc1snQ09NTU9OLkJUTl9DQU5DRUwnXSxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBjc3NDbGFzczogJ3NlY29uZGFyeScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJ10sXG4gICAgICAgICAgY3NzQ2xhc3M6ICdpb24tY29sb3ItcHJpbWFyeScsXG4gICAgICAgICAgaGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQmFjayB0byBob21lXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KCcvJyk7XG5cbiAgICAgICAgICAgIC8vIFdBUk5JTkc6IGxvZ291dCBzaG91bGQgYmUgZG9uZSBBRlRFUiBob21lIHJlZGlyZWN0aW9uLCBiZWNhdXNlIG9mIGNhY2hlIGNsZWFyaW5nIC0gc2VlIGlzc3VlICM1XG4gICAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgYXN5bmMgb3BlbkFib3V0TW9kYWwoKSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoeyBjb21wb25lbnQ6IEFib3V0TW9kYWwgfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZUV4cGFuZGFibGVJdGVtKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKCFpdGVtLmV4cGFuZGVkKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgJ0V4cGFuZCBpdGVtJywgaXRlbSk7XG5cbiAgICAgIGl0ZW0ubWF0SWNvbiA9ICdleHBhbmRfbGVzcyc7XG5cbiAgICAgIC8vIFRyeSB0byBhdHRhY2ggc29tZSBpdGVtXG4gICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zXG4gICAgICAgIC5maWx0ZXIoKGNoaWxkSXRlbSkgPT4gISF0aGlzLl9maW5kUGFyZW50KGNoaWxkSXRlbSwgW2l0ZW1dKSlcbiAgICAgICAgLmZvckVhY2goKGNoaWxkSXRlbSkgPT4gdGhpcy5fYXR0YWNoTWVudVRvUGFyZW50KGl0ZW0sIGNoaWxkSXRlbSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtLm1hdEljb24gPSAnZXhwYW5kX21vcmUnO1xuXG4gICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gWy4uLnRoaXMuX2RldGFjaGVkU3ViSXRlbXMsIC4uLnRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcyh7IHBhdGg6ICcvJywgcGFyYW1zOiB7fSB9LCBpdGVtLmNoaWxkcmVuKV07XG4gICAgfVxuICB9XG5cbiAgX21hcmtBc09wZW5lZCgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBfbWFya0FzQ2xvc2VkKCkge1xuICAgIHRoaXMuXyRvcGVuZWQubmV4dChmYWxzZSk7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCkge1xuICAgIGNvbnNvbGUuaW5mbyhgJHt0aGlzLl9sb2dQcmVmaXh9U3RhcnRpbmcuLi5gKTtcblxuICAgIC8vIFJlc3RvcmUgc3ViIGl0ZW1zIGZyb20gc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG4gICAgY29uc3Qgc2V0dGluZ3NTdWJJdGVtczogSU1lbnVJdGVtW10gPSB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncygnbWVudScsICdzdWItaXRlbXMnKTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KHNldHRpbmdzU3ViSXRlbXMpKSB7XG4gICAgICBjb25zdCBkZXRhY2hlZFN1Ykl0ZW1zID0gc2V0dGluZ3NTdWJJdGVtcy5tYXAoKHNvdXJjZSkgPT4gdGhpcy5mcm9tT2JqZWN0KHNvdXJjZSwgeyBjb21wdXRlSWQ6IHRydWUsIGZpbGxQYXJlbnQ6IHRydWUgfSkpO1xuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyAnUmVzdG9yaW5nIHBpbm5lZCBzdWIgaXRlbXMgZnJvbSBzZXR0aW5ncycsIGRldGFjaGVkU3ViSXRlbXMpO1xuXG4gICAgICAvLyBUT0RPIGNoZWNrIGlmIHByZXZpb3VzIHN1YiBtZW51IChmcm9tIG1lbnUgdG9rZW4pIGFyZSBrZXB0XG4gICAgICAvL3RoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaCguLi5kZXRhY2hlZFN1Ykl0ZW1zKTtcbiAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBkZXRhY2hlZFN1Ykl0ZW1zO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnRFdmVudCQgPSBtZXJnZShcbiAgICAgIGZyb20odGhpcy5hY2NvdW50U2VydmljZS5yZWFkeSgpKSxcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbixcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXQucGlwZShtYXAoKF8pID0+IG51bGwpKVxuICAgICkucGlwZShcbiAgICAgIG1hcCgoYWNjb3VudCkgPT4gKGlzTm90TmlsKGFjY291bnQ/LmlkKSA/IGFjY291bnQgOiBudWxsKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYTEsIGEyKSA9PiBEYXRlVXRpbHMuaXNTYW1lKGExPy51cGRhdGVEYXRlLCBhMj8udXBkYXRlRGF0ZSkpXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAvLyBDb21iaW5lIGNvbmZpZyBhbmQgYWNjb3VudCBldmVudHNcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY29uZmlnU2VydmljZS5jb25maWcsIGFjY291bnRFdmVudCRdKS5zdWJzY3JpYmUoKFtjb25maWcsIGFjY291bnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTG9naW4gPSB0aGlzLmFjY291bnRTZXJ2aWNlLmlzTG9naW4oKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZlZCBjb25maWcgb3IgYWNjb3VudCBldmVudC4gUmVmcmVzaGluZyBpdGVtcy4uLiBpc0xvZ2luPyBgLCBpc0xvZ2luKTtcblxuICAgICAgICAvLyBNYWtlIHN1cmUgdG8gY2xlYXIgYWNjb3VudCwgaWYgbm90IGxvZ2luXG4gICAgICAgIGFjY291bnQgPSBpc0xvZ2luID8gYWNjb3VudCA6IG51bGw7XG5cbiAgICAgICAgLy8gTG9hZCBhbGwgaXRlbXNcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9sb2FkTWVudUl0ZW1zKGNvbmZpZywgYWNjb3VudCk7XG5cbiAgICAgICAgLy8gRW1pdCBuZXcgcm9vdCBpdGVtc1xuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoaXRlbXMpO1xuXG4gICAgICAgIC8vIEVtaXQgYWNjb3VudCBjaGFuZ2VzIGV2ZW50XG4gICAgICAgIHRoaXMuYWNjb3VudENoYW5nZXMubmV4dChhY2NvdW50KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gRm9yY2UgcmVmcmVzaCB3aGVuIGxvZ2luL2xvZ291dFxuICAgICAgICB0aGlzLmFjY291bnRDaGFuZ2VzLnBpcGUobWFwKCgpID0+IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKSkpLFxuICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgcm91dGVcbiAgICAgICAgdGhpcy5zdGFydFN1YmplY3QucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMucm91dGVyLmV2ZW50cyksXG4gICAgICAgICAgZmlsdGVyKChldmVudCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtYXAoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KGV2ZW50LnVybCkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDI1MCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHBhdGhQYXJhbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRldGFjaGVkU3ViSXRlbXMgPSB0aGlzLl9kZXRhY2hTdWJNZW51SXRlbXMocGF0aFBhcmFtKTtcbiAgICAgICAgICBpZiAoZGV0YWNoZWRTdWJJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gWy4uLnRoaXMuX2RldGFjaGVkU3ViSXRlbXMsIC4uLmRldGFjaGVkU3ViSXRlbXNdO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1OZXdseSBkZXRhY2hlZCBpdGVtczogYCwgZGV0YWNoZWRTdWJJdGVtcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBTYXZlIHBpbm5lZCBpdGVtc1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uUGlubmVkLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgICAvLyBDb2xsZWN0IHBpbm5lZCBlbGVtZW50cywgdGhlbiBzZXJpYWxpemUgaXQgKHdpdGhvdXQgaWQpXG4gICAgICAgIGNvbnN0IHBpbm5lZFN1Ykl0ZW1zID0gdGhpcy5zdWJJdGVtcy5maWx0ZXIoKGkpID0+IGkuaXNQaW5uZWQoKSkubWFwKChpdGVtKSA9PiBpdGVtLmFzT2JqZWN0KHsgd2l0aENoaWxkcmVuOiB0cnVlLCBrZWVwTG9jYWxJZDogZmFsc2UgfSkpO1xuXG4gICAgICAgIGlmIChwaW5uZWRTdWJJdGVtcy5sZW5ndGggJiYgdGhpcy5fZGVidWcpXG4gICAgICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgU2F2aW5nICR7cGlubmVkU3ViSXRlbXMubGVuZ3RofSBwaW5uZWQgaXRlbXMsIGluIGxvY2FsIHNldHRpbmdzYCwgcGlubmVkU3ViSXRlbXMpO1xuICAgICAgICB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZygnbWVudScsIHBpbm5lZFN1Ykl0ZW1zLCAnc3ViLWl0ZW1zJyk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuZGF0YVN1YmplY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZE1lbnVJdGVtcyhjb25maWc6IENvbmZpZ3VyYXRpb24gfCBudWxsLCBhY2NvdW50OiBBY2NvdW50IHwgbnVsbCkge1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9TG9hZGluZyBtZW51IGl0ZW1zLi4uYCk7XG5cbiAgICAvLyBTYXZlIHByZXZpb3VzIGNoaWxkcmVuIG9mIHJvb3QgaXRlbXNcbiAgICBjb25zdCBkZXRhY2hlZFN1Ykl0ZW1zID0gKHRoaXMuc3ViSXRlbXMgfHwgW10pLmNvbmNhdCh0aGlzLl9zdGF0aWNTdWJJdGVtcyB8fCBbXSkucmVkdWNlKChyZXMsIHJvb3RJdGVtKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHJvb3RJdGVtLmNoaWxkcmVuO1xuICAgICAgaWYgKGlzRW1wdHlBcnJheShjaGlsZHJlbikpIHJldHVybiByZXM7XG4gICAgICAvLyBEZXRhY2ggYWxsIHJvb3QgY2hpbGRyZW5cbiAgICAgIHJvb3RJdGVtLmNoaWxkcmVuID0gW107XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gKGNoaWxkLnBhcmVudCA9IG51bGwpKTtcbiAgICAgIC8vIFJldHVybiByb290IGNoaWxkcmVuXG4gICAgICByZXR1cm4gcmVzLmNvbmNhdChjaGlsZHJlbik7XG4gICAgfSwgdGhpcy5fZGV0YWNoZWRTdWJJdGVtcyB8fCBbXSk7XG5cbiAgICAvLyBSZXNldCBiYXNlIHJvb3QgaXRlbXMgKGNsZWFuIGl0ZW1zIGFkZGVkIGJ5IGNvbmZpZylcbiAgICBsZXQgaXRlbXM6IE1lbnVJdGVtW10gPSB0aGlzLl9zdGF0aWNJdGVtcy5zbGljZSgpO1xuXG4gICAgLy8gQ29uY2F0IGNvbmZpZydzIGl0ZW1zXG4gICAgY29uc3QgY29uZmlnVmFsdWU6IHN0cmluZyA9IGNvbmZpZz8uZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5NRU5VX0lURU1TKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGNvbmZpZ1ZhbHVlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnSXRlbXMgPSBKU09OLnBhcnNlKGNvbmZpZ1ZhbHVlKSBhcyBJTWVudUl0ZW1bXTtcbiAgICAgICAgaXRlbXMgPSAoY29uZmlnSXRlbXMgfHwgW10pLnJlZHVjZSgocmVzOiBNZW51SXRlbVtdLCBzb3VyY2UpID0+IHtcbiAgICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGl0ZW1cbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5mcm9tT2JqZWN0KHsgc3RhdGljOiB0cnVlLCAuLi5zb3VyY2UgfSwgeyBjb21wdXRlSWQ6IHRydWUgfSk7XG5cbiAgICAgICAgICAvLyBTa2lwIGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgICAgaWYgKHJlcy5maW5kKChpKSA9PiBNZW51SXRlbXMuaXNTYW1lKGksIGl0ZW0pKSkgcmV0dXJuIHJlcztcblxuICAgICAgICAgIC8vIFJldXNlIGV4aXN0aW5nIGlkLCBpZiBwb3NzaWJsZVxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbSA9IHRoaXMuZGF0YT8uZmluZCgoaSkgPT4gTWVudUl0ZW1zLmlzU2FtZShpLCBpdGVtKSk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSXRlbSkge1xuICAgICAgICAgICAgaXRlbS5pZCA9IGV4aXN0aW5nSXRlbS5pZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXRlbS5hZnRlcikge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KChpKSA9PiBpLnRpdGxlID09PSBpdGVtLmFmdGVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICAgICAgICAgIC5zbGljZSgwLCBpbmRleCArIDEpXG4gICAgICAgICAgICAgICAgLmNvbmNhdChpdGVtKVxuICAgICAgICAgICAgICAgIC5jb25jYXQocmVzLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVzLmZpbmRJbmRleCgoaSkgPT4gaS50aXRsZSA9PT0gaXRlbS5iZWZvcmUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzLnNsaWNlKDAsIGluZGV4KS5jb25jYXQoaXRlbSkuY29uY2F0KHJlcy5zbGljZShpbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChpdGVtKTtcbiAgICAgICAgfSwgaXRlbXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5fbG9nUHJlZml4fUludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiAnJHtDT1JFX0NPTkZJR19PUFRJT05TLk1FTlVfSVRFTVMua2V5fScuIEV4cGVjdGVkIGFuIGFycmF5IG9mIG1lbnUgaXRlbWAsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIGl0ZW0gdXNpbmcgYWNjb3VudCByaWdodHNcbiAgICBjb25zdCBvcHRzID0geyBkZWJ1ZzogdGhpcy5fZGVidWcgfTtcbiAgICBpdGVtcyA9IGl0ZW1zXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiBNZW51SXRlbXMuY2hlY2tJZlZpc2libGUoaXRlbSwgYWNjb3VudCwgY29uZmlnLCBvcHRzKSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgLy8gUmVwbGFjZSB0aXRsZSB1c2luZyBhIGNvbmZpZyBwcm9wZXJ0eVxuICAgICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGl0ZW0udGl0bGVQcm9wZXJ0eSkgJiYgY29uZmlnKSB7XG4gICAgICAgICAgaXRlbS50aXRsZSA9IGNvbmZpZy5wcm9wZXJ0aWVzW2l0ZW0udGl0bGVQcm9wZXJ0eV0gfHwgaXRlbS50aXRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUZvdW5kICR7aXRlbXMubGVuZ3RofSB2aXNpYmxlIHJvb3QgaXRlbXMuLi5gKTtcblxuICAgIC8vIFJlLWF0dGFjaCBzdWIgbWVudSBpdGVtc1xuICAgIGlmICh0aGlzLnN1Yk1lbnVFbmFibGVkICYmIGRldGFjaGVkU3ViSXRlbXMubGVuZ3RoKSB7XG4gICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICB0aGlzLl9hZGRTdWJNZW51SXRlbXMoZGV0YWNoZWRTdWJJdGVtcywgeyBza2lwSWZFeGlzdHM6IGZhbHNlLCBhdmFpbGFibGVQYXJlbnRzOiBkZXRhY2hlZFN1Ykl0ZW1zLmNvbmNhdChpdGVtcykgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gZGV0YWNoZWRTdWJJdGVtcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGV0YWNoZWRTdWJJdGVtcyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgX2FkZFN1Yk1lbnVJdGVtcyhzb3VyY2VzOiBNZW51SXRlbVtdLCBvcHRzPzogeyBza2lwSWZFeGlzdHM/OiBib29sZWFuOyBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSB9KSB7XG4gICAgcmV0dXJuIHNvdXJjZXMubWFwKChzb3VyY2UpID0+IHRoaXMuX2FkZFN1Yk1lbnVJdGVtKHNvdXJjZSwgb3B0cykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkU3ViTWVudUl0ZW0obmV3SXRlbTogTWVudUl0ZW0sIG9wdHM/OiB7IHNraXBJZkV4aXN0cz86IGJvb2xlYW47IGF2YWlsYWJsZVBhcmVudHM/OiBNZW51SXRlbVtdIH0pIHtcbiAgICBvcHRzID0ge1xuICAgICAgc2tpcElmRXhpc3RzOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgY29uc3QgcGF0aFBhcmFtID0gTWVudUl0ZW1zLnBhcnNlUGF0aFdpdGhRdWVyeSh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpO1xuXG4gICAgLy8gRmluZCBpZiBpdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShuZXdJdGVtLCBvcHRzPy5hdmFpbGFibGVQYXJlbnRzKTtcbiAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICAvLyBObyBjaGFuZ2VzXG4gICAgICBpZiAob3B0cy5za2lwSWZFeGlzdHMgJiYgTWVudUl0ZW1zLmlzU2FtZShleGlzdGluZ0l0ZW0sIG5ld0l0ZW0pICYmIGV4aXN0aW5nSXRlbS52aXNpYmxlKSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9U2tpcHBpbmcgc3ViIGl0ZW0gKHNhbWUgdmlzaWJsZSBpdGVtIGFscmVhZHkgZXhpc3QpYCwgbmV3SXRlbSk7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0l0ZW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXBkYXRpbmcgZXhpc3Rpbmcgc3ViIGl0ZW0gI2AsIGV4aXN0aW5nSXRlbS5pZCk7XG5cbiAgICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgaXRlbSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGlkXG4gICAgICBpZiAobmV3SXRlbSAhPT0gZXhpc3RpbmdJdGVtKSB7XG4gICAgICAgIG5ld0l0ZW0uaWQgPSBleGlzdGluZ0l0ZW0uaWQ7XG4gICAgICAgIG5ld0l0ZW0uJGNoaWxkcmVuID0gZXhpc3RpbmdJdGVtLiRjaGlsZHJlbjtcbiAgICAgICAgbmV3SXRlbS5waW5uZWQgPSBleGlzdGluZ0l0ZW0ucGlubmVkO1xuICAgICAgICBuZXdJdGVtLnN0YXRpYyA9IGV4aXN0aW5nSXRlbS5zdGF0aWM7XG4gICAgICAgIGlmIChuZXdJdGVtLnBpbm5lZCB8fCBuZXdJdGVtLnN0YXRpYyB8fCBleGlzdGluZ0l0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgICAvLyBJZiBsb2FkaW5nLCBrZWVwIGV4aXN0aW5nIHRpdGxlIGlmIHBpbm5lZCAoYXZvaWQgdG8gc2hvdyBza2VsZXRvbilcbiAgICAgICAgICBuZXdJdGVtLnRpdGxlID0gbmV3SXRlbS50aXRsZSB8fCBleGlzdGluZ0l0ZW0udGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3SXRlbS50aXRsZSA9IGlzTm90TmlsKG5ld0l0ZW0udGl0bGUpID8gbmV3SXRlbS50aXRsZSA6IGV4aXN0aW5nSXRlbS50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBdXRvIHNldCBpY29uLCBmb3IgZXhwYW5kIGFjdGlvblxuICAgICAgICBpZiAoZXhpc3RpbmdJdGVtLmFjdGlvbiA9PT0gJ2V4cGFuZCcpIHtcbiAgICAgICAgICBuZXdJdGVtLmljb24gPSBudWxsO1xuICAgICAgICAgIG5ld0l0ZW0ubWF0SWNvbiA9IGV4aXN0aW5nSXRlbS5leHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgaXRlbSdzIGlkIChpZiBuZWVkKVxuICAgIGVsc2UgaWYgKGlzTmlsKG5ld0l0ZW0uaWQpKSB7XG4gICAgICBuZXdJdGVtLmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBpY29uIGZvciBleHBhbmQgYWN0aW9uXG4gICAgaWYgKG5ld0l0ZW0uYWN0aW9uID09PSAnZXhwYW5kJyAmJiAhbmV3SXRlbS5tYXRJY29uKSB7XG4gICAgICBuZXdJdGVtLm1hdEljb24gPSAnZXhwYW5kX21vcmUnO1xuICAgIH1cblxuICAgIC8vIElmIHZpc2libGUsIGdldCB0aGUgcGFyZW50IHdoZXJlIHRvIGF0dGFjaCB0aGUgaXRlbVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQobmV3SXRlbSwgb3B0cz8uYXZhaWxhYmxlUGFyZW50cyk7XG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuZXhwYW5kZWQpIHtcbiAgICAgIC8vIEF0dGFjaCBpdGVtIHRvIHBhcmVudFxuICAgICAgdGhpcy5fYXR0YWNoTWVudVRvUGFyZW50KHBhcmVudCwgbmV3SXRlbSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBkZXRhY2hlZCBpdGVtcyA6XG4gICAgICAvLyAtIGV4Y2x1ZGVkIG5ldyBpdGVtXG4gICAgICAvLyAtIGF0dGFjaCBhbmQgZXhjbHVkZSB0aG9zZSB0aGFuIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgbmV3IGl0ZW1cbiAgICAgIC8vIFNlYXJjaCBpbiBkZXRhY2hlZCBpdGVtcyBvbmUgaGF2ZSBuZXdJdGVtIGFzIHBhcmVudFxuICAgICAgaWYgKG5ld0l0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgY29uc3QgYW5jZXN0b3IgPSBuZXdJdGVtLmFuY2VzdG9yO1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gdGhpcy5fZGV0YWNoZWRTdWJJdGVtcy5jb25jYXQoLi4ubmV3SXRlbS5jaGlsZHJlbikucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICAvLyBFeGNsdWRlZCBuZXdseSBhZGQgaXRlbVxuICAgICAgICAgIGlmIChpdGVtLmlkID09PSBuZXdJdGVtLmlkKSByZXR1cm4gcmVzO1xuXG4gICAgICAgICAgLy8gSWYgc29tZSBkZXRhY2hlZCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIG5ldyBpdGVtOiBkbyBpdFxuICAgICAgICAgIGlmIChNZW51SXRlbXMuY2hlY2tJZlN1Yk1lbnVWaXNpYmxlKGl0ZW0sIHBhdGhQYXJhbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQoaXRlbSwgW2FuY2VzdG9yXSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSBpdGVtJ3MgY2hpbGRyZW5cbiAgICAgICAgICAgICAgY29uc3QgZGV0YWNoZWRDaGlsZHJlbiA9IHRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcyhwYXRoUGFyYW0sIGl0ZW0uY2hpbGRyZW4gfHwgW10pO1xuXG4gICAgICAgICAgICAgIC8vIEF0dGFjaCBpdGVtXG4gICAgICAgICAgICAgIHRoaXMuX2F0dGFjaE1lbnVUb1BhcmVudChwYXJlbnQsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgIC8vIFJlbWVtYmVyIGRldGFjaGVkIGNoaWxkcmVuXG4gICAgICAgICAgICAgIHJldHVybiByZXMuY29uY2F0KC4uLmRldGFjaGVkQ2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERldGFjaCAoaWYgbmVlZClcbiAgICAgICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChpdGVtKTtcblxuICAgICAgICAgIC8vIEFkZCB0byBkZXRhY2hlZCBpdGVtc1xuICAgICAgICAgIHJldHVybiByZXMuY29uY2F0KGl0ZW0pO1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgZnJvbSBkZXRhY2hlZCBlbGVtZW50c1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gdGhpcy5fZGV0YWNoZWRTdWJJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IG5ld0l0ZW0uaWQpO1xuXG4gICAgICAgIC8vIERldGFjaCBjaGlsZHJlblxuICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLmZvckVhY2goKGl0ZW0pID0+IHRoaXMuX2RldGFjaFRvUGFyZW50KGl0ZW0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIG9yIHVwZGF0ZSBkZXRhY2hlZCBpdGVtXG4gICAgICBjb25zdCBkZXRhY2hlZEluZGV4ID0gaXNOb3ROaWwobmV3SXRlbS5pZCkgPyB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbmV3SXRlbS5pZCkgOiAtMTtcbiAgICAgIGlmIChkZXRhY2hlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zW2RldGFjaGVkSW5kZXhdID0gbmV3SXRlbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaChuZXdJdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3SXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXB1dGVOZXdJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbUNvdW50ZXIrKztcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZVN1Yk1lbnVJdGVtKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShpdGVtKTtcbiAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChleGlzdGluZ0l0ZW0pO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nSXRlbTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kZXRhY2hTdWJNZW51SXRlbXMoY3VycmVudFBhdGhQYXJhbT86IE1lbnVQYXRoUGFyYW0sIHN1Ykl0ZW1zPzogTWVudUl0ZW1bXSkge1xuICAgIGN1cnJlbnRQYXRoUGFyYW0gPSBjdXJyZW50UGF0aFBhcmFtID8gY3VycmVudFBhdGhQYXJhbSA6IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiAoc3ViSXRlbXMgfHwgdGhpcy5zdWJJdGVtcykucmVkdWNlKChyZXMsIHN1Ykl0ZW0pID0+IHtcbiAgICAgIC8vIE5vdCB2aXNpYmxlID0+IHNob3VsZCBiZSBkZXRhY2hcbiAgICAgIGlmICghTWVudUl0ZW1zLmNoZWNrSWZTdWJNZW51VmlzaWJsZShzdWJJdGVtLCBjdXJyZW50UGF0aFBhcmFtKSkge1xuICAgICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChzdWJJdGVtKTtcblxuICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChzdWJJdGVtKTtcbiAgICAgIH1cbiAgICAgIC8vIFZpc2libGU6IGNoZWNrIGNoaWxkcmVuXG4gICAgICByZXR1cm4gcmVzLmNvbmNhdCh0aGlzLl9kZXRhY2hTdWJNZW51SXRlbXMoY3VycmVudFBhdGhQYXJhbSwgc3ViSXRlbS5jaGlsZHJlbikpO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RldGFjaFRvUGFyZW50KGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKCFpdGVtPy5wYXJlbnQpIHJldHVybjsgLy8gU2tpcCBpZiBhbHJlYWR5IGRldGFjaGVkXG4gICAgbGV0IGNoaWxkcmVuID0gaXRlbS5wYXJlbnQuY2hpbGRyZW4gfHwgW107XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBwYXJlbnQgY2hpbGRyZW5cbiAgICBjb25zdCBpbmRleEluUGFyZW50ID0gY2hpbGRyZW4uaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXhJblBhcmVudCAhPT0gLTEpIHtcbiAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uc2xpY2UoKTsgLy8gQ29weSBvcmlnaW5hbCBhcnJheSwgYmVjYXVzZSBpdCBjYW4gYmUgdXNlZCBpbiBhIGxvb3BcbiAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleEluUGFyZW50LCAxKTtcbiAgICAgIGl0ZW0ucGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgaXRlbS5wYXJlbnQgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEV4aXN0aW5nSXRlbShzZWFyY2hJdGVtOiBJTWVudUl0ZW0sIGl0ZW1zPzogTWVudUl0ZW1bXSwgcmVjdXJzaXZlID0gdHJ1ZSk6IE1lbnVJdGVtIHtcbiAgICBpdGVtcyA9IGl0ZW1zIHx8IFsuLi50aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLCAuLi50aGlzLmRhdGFdO1xuICAgIGlmICghaXRlbXMubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBOb3QgZm91bmRcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmIChNZW51SXRlbXMuaXNTYW1lSWRPclBhdGhBbmRQYXJhbXMoc2VhcmNoSXRlbSwgaXRlbSkpIHJldHVybiBpdGVtO1xuICAgICAgaWYgKHJlY3Vyc2l2ZSAmJiBpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShzZWFyY2hJdGVtLCBpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgaWYgKGNoaWxkKSByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFBhcmVudChjaGlsZEl0ZW06IE1lbnVJdGVtLCBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSk6IE1lbnVJdGVtIHtcbiAgICBpZiAoIWNoaWxkSXRlbT8ucGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoY2hpbGRJdGVtLnBhcmVudCkgcmV0dXJuIGNoaWxkSXRlbS5wYXJlbnQ7XG5cbiAgICBhdmFpbGFibGVQYXJlbnRzID0gYXZhaWxhYmxlUGFyZW50cyB8fCBbLi4udGhpcy5fZGV0YWNoZWRTdWJJdGVtcywgLi4udGhpcy5kYXRhXTtcblxuICAgIHJldHVybiBhdmFpbGFibGVQYXJlbnRzLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0/LnBhdGgpIHJldHVybiByZXM7XG5cbiAgICAgIC8vIEEgZm91bmQgaXRlbSBhbHJlYWR5IG1hdGNoIHdpdGggdGhlIG1lbnVJdGVtLnBhcmVudFBhdGggOiBrZWVwIGl0IGFzIGl0XG4gICAgICAvLyBUaGVyZSBpcyBhIGZvdW5kIGNhbmRpZGF0ZSB0aGF0IGFscmVhZHkgbWF0Y2ggdGhlIGN1cnJlbnQgY2FuZGlkYXRlIDoga2VlcCBpdFxuICAgICAgaWYgKE1lbnVJdGVtcy5pc1BhcmVudChjaGlsZEl0ZW0sIHJlcykpIHJldHVybiByZXM7XG5cbiAgICAgIC8vIElmIHRoZSBtZW51IGl0ZW0gaGFzIGV4cGxpY2l0IHBhcmVudFBhdGggYW5kIGl0cyBwYXRoIGFuZCBwYXRoIHBhcmFtIGFyZSB0aGUgc2FtZSBhcyB0aGUgY2FuZGlkYXRlICA6IHVzZSBpdCBhcyBwYXJlbnRcbiAgICAgIGlmIChNZW51SXRlbXMuaXNQYXJlbnQoY2hpbGRJdGVtLCBpdGVtKSkgcmV0dXJuIGl0ZW07XG5cbiAgICAgIGlmICghcmVzICYmIGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmluZFBhcmVudChjaGlsZEl0ZW0sIGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hNZW51VG9QYXJlbnQocGFyZW50OiBNZW51SXRlbSwgY2hpbGQ6IE1lbnVJdGVtKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1BdHRhY2ggc3ViLW1lbnUgeyR7TWVudUl0ZW1zLmdldFVybChjaGlsZCl9fSB0byBwYXJlbnQgeyR7TWVudUl0ZW1zLmdldFVybChwYXJlbnQpfX1gKTtcblxuICAgIC8vIEF2b2lkIHRvIGtlZXAgaWRlbnRpY2FsIG1lbnUgaXRlbSAod2UgcmVwbGFjZSBpdCB3aXRoIHRoZSBuZXcgY2hpbGQgbWVudSBpdGVtKVxuICAgIC8vaWYgKCFwYXJlbnQ/LiRjaGlsZHJlbikgcGFyZW50LiRjaGlsZHJlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4oW10pO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuIHx8IFtdO1xuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgoKGl0ZW0pID0+IE1lbnVJdGVtcy5pc1NhbWVJZE9yUGF0aEFuZFBhcmFtcyhpdGVtLCBjaGlsZCkpO1xuXG4gICAgLy8gVXBkYXRlIGV4aXN0aW5nIGVsZW1lbnRcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChjaGlsZHJlbltleGlzdGluZ0luZGV4XSAhPT0gY2hpbGQpIHtcbiAgICAgICAgY2hpbGRyZW5bZXhpc3RpbmdJbmRleF0gPSBjaGlsZDtcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgIC8vIFNvcnQgYnkgdGFiIChvciBpZClcbiAgICAgIHBhcmVudC5jaGlsZHJlbiA9IGNoaWxkcmVuLnNvcnQoTWVudUl0ZW1zLnNvcnRCeVRhYk9ySWQpO1xuICAgICAgY2hpbGQucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -34,7 +34,7 @@ export class AuthGuardService {
|
|
|
34
34
|
if (!res) {
|
|
35
35
|
if (this._debug)
|
|
36
36
|
console.debug('[auth-guard] Authentication cancelled. Could not access to /' + next.url.join('/'));
|
|
37
|
-
return this.router.parseUrl('/');
|
|
37
|
+
return this.router.parseUrl(this.environment.defaultRoute || '/');
|
|
38
38
|
}
|
|
39
39
|
// Iterate
|
|
40
40
|
return this.canActivate(next, state);
|
|
@@ -71,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
71
71
|
type: Inject,
|
|
72
72
|
args: [ENVIRONMENT]
|
|
73
73
|
}] }] });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1ndWFyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2F1dGgtZ3VhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUtuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUdsRCxNQUFNLE9BQU8sZ0JBQWdCO0lBSWpCO0lBQ0E7SUFDQTtJQUN1QjtJQU5oQixNQUFNLENBQVU7SUFFakMsWUFDVSxjQUE4QixFQUM5QixTQUEwQixFQUMxQixNQUFjLEVBQ1MsV0FBVztRQUhsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNTLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBRTFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBNEIsRUFBRSxLQUEwQjtRQUNsRSw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUNMLElBQUksQ0FBQyxjQUFjO2lCQUNoQixLQUFLLEVBQUU7Z0JBQ1IsVUFBVTtpQkFDVCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUErQixDQUFDLENBQzNFLENBQUM7UUFDSixDQUFDO1FBRUQsY0FBYztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkcsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ1QsSUFBSSxJQUFJLENBQUMsTUFBTTt3QkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3BILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ3BFLENBQUM7Z0JBQ0QsVUFBVTtnQkFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBK0IsQ0FBQztZQUNyRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUYsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLDhCQUE4QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckksT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQTZCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RGLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixJQUFJLE9BQU8sQ0FBVSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQy9CLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM3QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztvQkFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNkLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7d0dBM0RVLGdCQUFnQixxR0FPakIsV0FBVzs0R0FQVixnQkFBZ0IsY0FESCxNQUFNOzs0RkFDbkIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBUTdCLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGUsIFJvdXRlciwgUm91dGVyU3RhdGVTbmFwc2hvdCwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IEFwcEF1dGhNb2RhbCB9IGZyb20gJy4uL2F1dGgvYXV0aC5tb2RhbCc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aEd1YXJkU2VydmljZSBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVidWc6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudFxuICApIHtcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgY2FuQWN0aXZhdGUobmV4dDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT4gfCBib29sZWFuIHwgVXJsVHJlZSB7XG4gICAgLy8gSWYgYWNjb3VudCBub3Qgc3RhcnRlZDogbG9vcCBhZnRlciBzdGFydGVkXG4gICAgaWYgKCF0aGlzLmFjY291bnRTZXJ2aWNlLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2VcbiAgICAgICAgICAucmVhZHkoKVxuICAgICAgICAgIC8vIEl0ZXJhdGVcbiAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmNhbkFjdGl2YXRlKG5leHQsIHN0YXRlKSBhcyBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgbG9naW5cbiAgICBpZiAoIXRoaXMuYWNjb3VudFNlcnZpY2UuaXNMb2dpbigpKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thdXRoLWd1YXJkXSBOZWVkIGF1dGhlbnRpY2F0aW9uIGZvciBwYWdlIC8nICsgbmV4dC51cmwuam9pbignLycpKTtcbiAgICAgIHJldHVybiB0aGlzLmxvZ2luKG5leHQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2F1dGgtZ3VhcmRdIEF1dGhlbnRpY2F0aW9uIGNhbmNlbGxlZC4gQ291bGQgbm90IGFjY2VzcyB0byAvJyArIG5leHQudXJsLmpvaW4oJy8nKSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFJvdXRlIHx8ICcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0ZVxuICAgICAgICByZXR1cm4gdGhpcy5jYW5BY3RpdmF0ZShuZXh0LCBzdGF0ZSkgYXMgUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT47XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobmV4dC5kYXRhICYmIG5leHQuZGF0YS5wcm9maWxlICYmICF0aGlzLmFjY291bnRTZXJ2aWNlLmhhc01pblByb2ZpbGUobmV4dC5kYXRhLnByb2ZpbGUpKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpXG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1thdXRoLWd1YXJkXSBOb3QgYXV0aG9yaXplZCBhY2Nlc3MgdG8gLycgKyBuZXh0LnVybC5qb2luKCcvJykgKyAnLiBNaXNzaW5nIHJlcXVpcmVkIHByb2ZpbGU6ICcgKyBuZXh0LmRhdGEucHJvZmlsZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2F1dGgtZ3VhcmRdIEF1dGhvcml6ZWQgYWNjZXNzIHRvIC8nICsgbmV4dC51cmwuam9pbignLycpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGxvZ2luKG5leHQ/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7IGNvbXBvbmVudDogQXBwQXV0aE1vZGFsLCBjb21wb25lbnRQcm9wczogeyBuZXh0IH0gfSkudGhlbihcbiAgICAgIChtb2RhbCkgPT5cbiAgICAgICAgbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBtb2RhbC5vbkRpZERpc21pc3MoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjY291bnRTZXJ2aWNlLmlzTG9naW4oKSkge1xuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtb2RhbC5wcmVzZW50KCk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -40,7 +40,8 @@ export class Environment {
|
|
|
40
40
|
// Route and style
|
|
41
41
|
useHash; // Configure Angular router to use '#' in URL (need by web-ext artifact)
|
|
42
42
|
allowDarkMode;
|
|
43
|
-
defaultRoute; // Configure the default route (/
|
|
43
|
+
defaultRoute; // Configure the default route ('/' by default)
|
|
44
|
+
enableMenu; // Enable by default
|
|
44
45
|
// Logging
|
|
45
46
|
logging;
|
|
46
47
|
// Storage
|
|
@@ -61,4 +62,4 @@ export class Environment {
|
|
|
61
62
|
account;
|
|
62
63
|
entityEditor;
|
|
63
64
|
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFjLEtBQUssQ0FBQyxDQUFDO0FBRWxFLE1BQU0sT0FBTyxXQUFXO0lBQ3RCLElBQUksQ0FBUztJQUNiLE9BQU8sQ0FBUztJQUNoQixVQUFVLENBQVU7SUFFcEIsd0ZBQXdGO0lBQ3hGLHNCQUFzQixDQUFVO0lBQ2hDLE9BQU8sQ0FBUztJQUNoQixpQkFBaUIsQ0FBVTtJQUUzQixXQUFXLENBQVc7SUFFdEIsK0JBQStCO0lBQy9CLElBQUksQ0FBc0Y7SUFFMUYsNkRBQTZEO0lBQzdELFdBQVcsQ0FBc0Y7SUFFakcsa0RBQWtEO0lBQ2xELFlBQVksQ0FBcUU7SUFFakYsc0NBQXNDO0lBQ3RDLGNBQWMsQ0FBVTtJQUV4Qix3RUFBd0U7SUFDeEUsaUJBQWlCLENBQVU7SUFFM0Isb0NBQW9DO0lBQ3BDLHlCQUF5QixDQUFXO0lBRXBDLDBEQUEwRDtJQUMxRCxnQ0FBZ0MsQ0FBVTtJQUUxQyw2QkFBNkI7SUFDN0IsWUFBWSxDQUFXO0lBRXZCLHdDQUF3QztJQUN4QyxPQUFPLENBQVc7SUFFbEIsMEJBQTBCO0lBQzFCLGlCQUFpQixDQUFlO0lBRWhDLGlCQUFpQjtJQUNqQixhQUFhLENBQVM7SUFDdEIsb0JBQW9CLENBQTRCO0lBQ2hELG1CQUFtQixDQUFVO0lBQzdCLGNBQWMsQ0FBVTtJQUN4Qix3QkFBd0IsQ0FBVTtJQUNsQyxvQkFBb0IsQ0FBVTtJQUM5Qix3QkFBd0IsQ0FBVTtJQUVsQyxrQkFBa0I7SUFDbEIsT0FBTyxDQUFXLENBQUMsd0VBQXdFO0lBQzNGLGFBQWEsQ0FBVztJQUN4QixZQUFZLENBQVUsQ0FBQywrQ0FBK0M7SUFDdEUsVUFBVSxDQUFXLENBQUMsb0JBQW9CO0lBRTFDLFVBQVU7SUFDVixPQUFPLENBQWlDO0lBRXhDLFVBQVU7SUFDVixLQUFLLENBQXdCO0lBQzdCLE9BQU8sQ0FBMEI7SUFDakMsbUJBQW1CLENBQVU7SUFFN0IsUUFBUTtJQUNSLFNBQVMsQ0FBVTtJQUNuQixjQUFjLENBQVU7SUFFeEIsUUFBUSxDQUFVLENBQUMsK0RBQStEO0lBQ2xGLE9BQU8sQ0FBVSxDQUFDLCtCQUErQjtJQUNqRCxnQkFBZ0IsQ0FBVSxDQUFDLCtCQUErQjtJQUMxRCxhQUFhLENBQVUsQ0FBQywrQkFBK0I7SUFFdkQsMENBQTBDO0lBQzFDLGdFQUFnRTtJQUNoRSxpQkFBaUIsQ0FJZjtJQUVGLFVBQVU7SUFDVixPQUFPLENBTUw7SUFFRixZQUFZLENBS1Y7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZldGNoUG9saWN5IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlQ29uZmlnIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhY2hlQ29uZmlnIH0gZnJvbSAnaW9uaWMtY2FjaGUvbGliL2ludGVyZmFjZXMvY2FjaGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZUNvbmZpZyB9IGZyb20gJy4uL2FwcC9zaGFyZWQvbG9nZ2luZy9sb2dnaW5nLXNlcnZpY2UuY29uZmlnJztcblxuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gbmV3IEluamVjdGlvblRva2VuPEVudmlyb25tZW50PignRU5WJyk7XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBwcm9kdWN0aW9uOiBib29sZWFuO1xuXG4gIC8vIEFuIFVSTCB0byBsb2FkIGV4dGVybmFsIGVudmlyb25tZW50IGZpbGUgKGUuZy4gJ2Fzc2V0cy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuanNvbidcbiAgZXh0ZXJuYWxFbnZpcm9ubWVudFVybD86IHN0cmluZztcbiAgYmFzZVVybDogc3RyaW5nO1xuICBjb25uZWN0aW9uVGltZW91dD86IG51bWJlcjtcblxuICBzYW1lVXJsUGVlcj86IGJvb2xlYW47XG5cbiAgLy8gVGhlIHBlZXIgdG8gdXNlIChpZiBkZWZpbmVkKVxuICBwZWVyPzogeyBob3N0OiBzdHJpbmc7IHBvcnQ6IG51bWJlcjsgdXNlU3NsPzogYm9vbGVhbjsgcGF0aD86IHN0cmluZyB9IHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAvLyBBIHBlZXIgdG8gdXNlIGF0IHN0YXJ0dXAgKHVzZWZ1bCBvbiBhIHdlYiBzaXRlIGRlcGxveW1lbnQpXG4gIGRlZmF1bHRQZWVyPzogeyBob3N0OiBzdHJpbmc7IHBvcnQ6IG51bWJlcjsgdXNlU3NsPzogYm9vbGVhbjsgcGF0aD86IHN0cmluZyB9IHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAvLyBBIGxpc3Qgb2YgcGVlcnMsIHRvIHNlbGVjdCBhcyBwZWVyLCBpbiBzZXR0aW5nc1xuICBkZWZhdWx0UGVlcnM/OiB7IGhvc3Q6IHN0cmluZzsgcG9ydDogbnVtYmVyOyB1c2VTc2w/OiBib29sZWFuOyBwYXRoPzogc3RyaW5nIH1bXTtcblxuICAvLyBNaW4gY29tcGF0aWJsZSB2ZXJzaW9uIGZvciB0aGUgcGVlclxuICBwZWVyTWluVmVyc2lvbj86IHN0cmluZztcblxuICAvLyBEZWZhdWx0IHBlZXIgcHJlZml4LCB3aGVuIGZpeCBwZWVyIHVybCBtYW51YWxseSAoZGVmYXVsdDogJ2h0dHBzOi8vJylcbiAgcGVlckRlZmF1bHRQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLy8gQWxsb3cgdG8gc2VsZWN0IGEgcGVlciBieSBmZWF0dXJlXG4gIGVuYWJsZVNlbGVjdFBlZXJCeUZlYXR1cmU/OiBib29sZWFuO1xuXG4gIC8vIEludGVydmFsIHRvIGNoZWNrIGlmIHdlYiBwYWdlIG11c3QgYmUgcmVsb2FkLCBpbiBtaWxsaXNcbiAgY2hlY2tBcHBWZXJzaW9uSW50ZXJ2YWxJblNlY29uZHM/OiBudW1iZXI7XG5cbiAgLy8gRW5hYmxlIGNhY2hlIHBlcnNpc3RlbmNlID9cbiAgcGVyc2lzdENhY2hlPzogYm9vbGVhbjtcblxuICAvLyBGb3JjZSBvZmZsaW5lIG1vZGUgPyAvIVxcIEZvciBERVYgb25seVxuICBvZmZsaW5lPzogYm9vbGVhbjtcblxuICAvLyBBcG9sbG8gKGdyYXBoUUwpIGNvbmZpZ1xuICBhcG9sbG9GZXRjaFBvbGljeT86IEZldGNoUG9saWN5O1xuXG4gIC8vIERlZmF1bHQgdmFsdWVzXG4gIGRlZmF1bHRMb2NhbGU6IHN0cmluZztcbiAgZGVmYXVsdExhdExvbmdGb3JtYXQ/OiAnREQnIHwgJ0RETU0nIHwgJ0RETU1TUyc7XG4gIGRlZmF1bHREZXBhcnRtZW50SWQ/OiBudW1iZXI7XG4gIGRlZmF1bHRBcHBOYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0QW5kcm9pZEluc3RhbGxVcmw/OiBzdHJpbmc7XG4gIGRlZmF1bHRJT1NJbnN0YWxsVXJsPzogc3RyaW5nO1xuICBkZWZhdWx0RGVza3RvcEluc3RhbGxVcmw/OiBzdHJpbmc7XG5cbiAgLy8gUm91dGUgYW5kIHN0eWxlXG4gIHVzZUhhc2g/OiBib29sZWFuOyAvLyBDb25maWd1cmUgQW5ndWxhciByb3V0ZXIgdG8gdXNlICcjJyBpbiBVUkwgKG5lZWQgYnkgd2ViLWV4dCBhcnRpZmFjdClcbiAgYWxsb3dEYXJrTW9kZT86IGJvb2xlYW47XG4gIGRlZmF1bHRSb3V0ZT86IHN0cmluZzsgLy8gQ29uZmlndXJlIHRoZSBkZWZhdWx0IHJvdXRlICgnLycgYnkgZGVmYXVsdClcbiAgZW5hYmxlTWVudT86IGJvb2xlYW47IC8vIEVuYWJsZSBieSBkZWZhdWx0XG5cbiAgLy8gTG9nZ2luZ1xuICBsb2dnaW5nPzogUGFydGlhbDxMb2dnaW5nU2VydmljZUNvbmZpZz47XG5cbiAgLy8gU3RvcmFnZVxuICBjYWNoZT86IFBhcnRpYWw8Q2FjaGVDb25maWc+O1xuICBzdG9yYWdlPzogUGFydGlhbDxTdG9yYWdlQ29uZmlnPjtcbiAgc3RvcmFnZVNhdmVQZXJpb2RNcz86IG51bWJlcjtcblxuICAvLyBBYm91dFxuICBzb3VyY2VVcmw/OiBzdHJpbmc7XG4gIHJlcG9ydElzc3VlVXJsPzogc3RyaW5nO1xuXG4gIGZvcnVtVXJsPzogc3RyaW5nOyAvLyBUT0RPIGFsbG93IGEgbWFwIGJ5IGxvY2FsZSA/IGV4OiB7IFtsYW5nOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgaGVscFVybD86IHN0cmluZzsgLy8gVE9ETyBhbGxvdyBhIG1hcCBieSBsb2NhbGUgP1xuICBwcml2YWN5UG9saWN5VXJsPzogc3RyaW5nOyAvLyBUT0RPIGFsbG93IGEgbWFwIGJ5IGxvY2FsZSA/XG4gIHRlcm1zT2ZVc2VVcmw/OiBzdHJpbmc7IC8vIFRPRE8gYWxsb3cgYSBtYXAgYnkgbG9jYWxlID9cblxuICAvLyBEZWZhdWx0IGF1dGhlbnRpY2F0aW9uIC8hXFwgRm9yIERFViBvbmx5XG4gIC8vIChzZWUgdmFsdWVzIGluIHRoZSB0ZXN0IGRhdGFiYXNlIC0gWE1MIGZpbGVzIGluIFBvZCdzIG1vZHVsZSlcbiAgZGVmYXVsdEF1dGhWYWx1ZXM/OiB7XG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAgdG9rZW4/OiBzdHJpbmc7XG4gIH07XG5cbiAgLy8gQWNjb3VudFxuICBhY2NvdW50Pzoge1xuICAgIHNob3dBY2NvdW50QnV0dG9uPzogYm9vbGVhbjsgLy8gU2hvdyBhY2NvdW50IGJ1dHRvbiBpbiBob21lIHBhZ2UgKGlmIHVuZGVmaW5lZCA9IHRydWUpXG4gICAgZW5hYmxlTGlzdGVuQ2hhbmdlcz86IGJvb2xlYW47XG4gICAgLy8gSWYgdW5kZWZpbmVkIG9yIDAsIHRoZW4gbGlzdGVuIG9ubHkgY2hhbmdlcyBtYWRlIGJ5IHRoZSBwb2RcbiAgICAvLyBJZiBncmVhdGVyIHRoYW4gMCA6IHdpbGwgY2hlY2sgY29uY3VycmVudCBjaGFuZ2VzIGluIHRoZSBEQiAoZS5nLiBjaGFuZ2VzIG1kZSBieSBhbm90aGVyIHNvZnR3YXJlKSBBTkQgY2hhbmdlcyBtYWRlIHRoZSBwb2RcbiAgICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kcz86IG51bWJlcjtcbiAgfTtcblxuICBlbnRpdHlFZGl0b3I/OiB7XG4gICAgZW5hYmxlTGlzdGVuQ2hhbmdlcz86IGJvb2xlYW47XG4gICAgLy8gSWYgdW5kZWZpbmVkIG9yIDAsIHRoZW4gbGlzdGVuIG9ubHkgY2hhbmdlcyBtYWRlIGJ5IHRoZSBwb2RcbiAgICAvLyBJZiBncmVhdGVyIHRoYW4gMCA6IHdpbGwgY2hlY2sgY29uY3VycmVudCBjaGFuZ2VzIGluIHRoZSBEQiAoZS5nLiBjaGFuZ2VzIG1kZSBieSBhbm90aGVyIHNvZnR3YXJlKSBBTkQgY2hhbmdlcyBtYWRlIHRoZSBwb2RcbiAgICBsaXN0ZW5JbnRlcnZhbEluU2Vjb25kcz86IG51bWJlcjtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -197,7 +197,8 @@ class Environment {
|
|
|
197
197
|
// Route and style
|
|
198
198
|
useHash; // Configure Angular router to use '#' in URL (need by web-ext artifact)
|
|
199
199
|
allowDarkMode;
|
|
200
|
-
defaultRoute; // Configure the default route (/
|
|
200
|
+
defaultRoute; // Configure the default route ('/' by default)
|
|
201
|
+
enableMenu; // Enable by default
|
|
201
202
|
// Logging
|
|
202
203
|
logging;
|
|
203
204
|
// Storage
|
|
@@ -29337,7 +29338,7 @@ class MenuService extends StartableObservableService {
|
|
|
29337
29338
|
_logPrefix = '[menu-service] ';
|
|
29338
29339
|
_$opened = new Subject();
|
|
29339
29340
|
_$splitPaneWhen = new BehaviorSubject(DEFAULT_MENU_SHOW_WHEN);
|
|
29340
|
-
_$enabled
|
|
29341
|
+
_$enabled;
|
|
29341
29342
|
_$enableSubMenu;
|
|
29342
29343
|
constructor(settings, configService, accountService, router, modalCtrl, alertController, navController, translate, environment, options, staticItems) {
|
|
29343
29344
|
super(settings);
|
|
@@ -29360,8 +29361,8 @@ class MenuService extends StartableObservableService {
|
|
|
29360
29361
|
enable: options?.subMenu?.enable !== false && !this.settings.mobile,
|
|
29361
29362
|
},
|
|
29362
29363
|
};
|
|
29364
|
+
this._$enabled = new BehaviorSubject(this.environment?.enableMenu !== false);
|
|
29363
29365
|
this._$enableSubMenu = new BehaviorSubject(this._options.subMenu.enable);
|
|
29364
|
-
this._debug = !environment.production;
|
|
29365
29366
|
this._detachedSubItems = [];
|
|
29366
29367
|
this._staticItems = (staticItems || []).map((source) => {
|
|
29367
29368
|
const target = this.fromObject({ static: true, ...source }, { computeId: true, fillParent: true, fillDefaultFromParent: true });
|
|
@@ -29373,6 +29374,8 @@ class MenuService extends StartableObservableService {
|
|
|
29373
29374
|
}
|
|
29374
29375
|
return target;
|
|
29375
29376
|
});
|
|
29377
|
+
// DEBUG
|
|
29378
|
+
this._debug = !environment.production;
|
|
29376
29379
|
}
|
|
29377
29380
|
get opened() {
|
|
29378
29381
|
return this._$opened.asObservable();
|
|
@@ -40918,7 +40921,7 @@ class AuthGuardService {
|
|
|
40918
40921
|
if (!res) {
|
|
40919
40922
|
if (this._debug)
|
|
40920
40923
|
console.debug('[auth-guard] Authentication cancelled. Could not access to /' + next.url.join('/'));
|
|
40921
|
-
return this.router.parseUrl('/');
|
|
40924
|
+
return this.router.parseUrl(this.environment.defaultRoute || '/');
|
|
40922
40925
|
}
|
|
40923
40926
|
// Iterate
|
|
40924
40927
|
return this.canActivate(next, state);
|