tnx-shared 5.1.181 → 5.1.185

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.
Files changed (40) hide show
  1. package/bundles/tnx-shared.umd.js +1277 -1193
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/data-list-base.d.ts.map +1 -1
  6. package/classes/public-function.d.ts +6 -0
  7. package/classes/public-function.d.ts.map +1 -1
  8. package/components/statemachines/models/enums.d.ts +4 -0
  9. package/components/statemachines/models/enums.d.ts.map +1 -1
  10. package/components/tn-app-notification/tn-app-notification.component.d.ts +2 -2
  11. package/components/tn-app-notification/tn-app-notification.component.d.ts.map +1 -1
  12. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts.map +1 -1
  13. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts.map +1 -1
  14. package/congviec/dm-loai-congviec/dm-loai-congviec.component.d.ts +2 -0
  15. package/congviec/dm-loai-congviec/dm-loai-congviec.component.d.ts.map +1 -1
  16. package/esm2015/classes/base/data-list-base.js +4 -1
  17. package/esm2015/classes/public-function.js +7 -1
  18. package/esm2015/components/chat/chat-box/chat-box.component.js +1 -1
  19. package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +1 -1
  20. package/esm2015/components/statemachines/models/enums.js +6 -1
  21. package/esm2015/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.js +3 -3
  22. package/esm2015/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.js +3 -3
  23. package/esm2015/components/tn-app-notification/tn-app-notification.component.js +38 -34
  24. package/esm2015/components/workflow/process-workflow-form/process-workflow-form.component.js +6 -4
  25. package/esm2015/components/workflow/process-workflow-target/process-workflow-target.component.js +10 -4
  26. package/esm2015/congviec/dm-loai-congviec/dm-loai-congviec.component.js +8 -3
  27. package/esm2015/intercepters/anonymous-token.interceptor.js +43 -0
  28. package/esm2015/tnx-shared.js +2 -1
  29. package/esm2015/tnx-shared.module.js +32 -32
  30. package/fesm2015/tnx-shared.js +824 -759
  31. package/fesm2015/tnx-shared.js.map +1 -1
  32. package/intercepters/anonymous-token.interceptor.d.ts +13 -0
  33. package/intercepters/anonymous-token.interceptor.d.ts.map +1 -0
  34. package/intercepters/anonymous-token.interceptor.ngfactory.d.ts.map +1 -0
  35. package/package.json +2 -2
  36. package/tnx-shared.d.ts +1 -0
  37. package/tnx-shared.d.ts.map +1 -1
  38. package/tnx-shared.metadata.json +1 -1
  39. package/tnx-shared.module.d.ts +5 -5
  40. package/tnx-shared.module.d.ts.map +1 -1
@@ -80,6 +80,9 @@ export class DataListBase extends ComponentBase {
80
80
  }
81
81
  }
82
82
  ngOnInit() {
83
+ // if (window) {
84
+ // window['_clbc'] = this;
85
+ // }
83
86
  this.model.baseReady = false;
84
87
  if (this.setting.cols) {
85
88
  this.setting.cols = this.setting.cols.filter(q => !q.removeOnInit);
@@ -1003,4 +1006,4 @@ DataListBase.propDecorators = {
1003
1006
  parentModel: [{ type: Input }],
1004
1007
  loadDetailFromQueryParam: [{ type: Input }]
1005
1008
  };
1006
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDckcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFL0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRixP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M0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoRDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtnQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQztvQkFDcEQsS0FBSyxFQUFFLElBQUk7b0JBQ1gsT0FBTztpQkFDVixDQUFDLENBQUMsQ0FBQzthQUNQO1NBQ0o7SUFDTCxDQUFDOzs7WUF0aENKLFNBQVM7OztZQWxDNEMsUUFBUTs7O3NCQXFDekQsU0FBUyxTQUFDLGlCQUFpQjswQkFhM0IsS0FBSzt1Q0FDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQ3J1ZExpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NydWQvY3J1ZC1saXN0L2NydWQtbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbnRpdHlQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZW50aXR5LXBlcm1pc3Npb24vc2VydmljZXMuY3MvZW50aXR5LXBlcm1pc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN0YXRlTWFjaGluZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdGF0ZW1hY2hpbmVzL3NlcnZpY2VzL3N0YXRlbWFjaGluZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IER1bW15V29ya2Zsb3dDb2RlLCBGaWVsZERlZmluZUhhc1Rhc2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L21vZGVscy9jb25zdCc7XHJcbmltcG9ydCB7IFdmSXRlbSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy9lbnRpdHktd29ya2Zsb3ctc2V0dGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctcGVybWlzc2lvbi1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy93b3JrZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IENhdUhpbmhXb3JrZmxvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25ndmllYy9jYXVoaW5oLXdvcmtmbG93L3NlcnZpY2VzL2NhdWhpbmgtd29ya2Zsb3cuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL2Nvbmd2aWVjL2Nvbmd2aWVjL3NlcnZpY2VzL2Nvbmd2aWVjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XHJcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cyB9IGZyb20gJy4uLy4uL21vZGVscy93b3JrZmxvdy1jb3JlLXN0YXR1cy5lbnVtJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IExpc3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGlzdC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzdGVyLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnVtR2V0UmVmVHlwZSwgRm9ybVN0YXRlLCBLZXlGaWVsZEdldFJlZlR5cGUsIEtleUZsYXNoU2hvdywgV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IENvbHVtblNjaGVtYUJhc2UsIENvbnRyb2xUeXBlLCBDcnVkRm9ybURhdGEsIENydWRMaXN0RGF0YSwgQ3J1ZExpc3RTZXR0aW5nLCBEcm9wZG93bk9wdGlvbnMsIE9wZXJhdG9yLCBUZXh0QWxpZ24gfSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuL2NvbXBvbmVudC1iYXNlJztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUxpc3RCYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICAgIHB1YmxpYyBjcnVkTGlzdDogQ3J1ZExpc3RDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKENydWRMaXN0Q29tcG9uZW50KSBzZXQgY29udGVudChjb250ZW50OiBDcnVkTGlzdENvbXBvbmVudCkge1xyXG4gICAgICAgIGNvbnN0IGJlZm9yZVZhbHVlID0gdGhpcy5jcnVkTGlzdDtcclxuICAgICAgICBpZiAoY29udGVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0ID0gY29udGVudDtcclxuICAgICAgICAgICAgaWYgKCFiZWZvcmVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudFJlYWR5IDwgMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBDcnVkTGlzdERhdGE7XHJcbiAgICBASW5wdXQoKSBsb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW06IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UgPSAnQ2jGsGEgY+G6pXUgaMOsbmggQ1JVRCBiYXNlIHNlcnZpY2UnO1xyXG4gICAgZW52aXJvbm1lbnQ6IGFueSA9IHt9O1xyXG4gICAgc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcclxuICAgIGZvcm1Nb2RlbDogQ3J1ZEZvcm1EYXRhID0gbmV3IENydWRGb3JtRGF0YSgpO1xyXG4gICAgc2NvcGVEYXRhRWRpdDogYW55ID0ge307XHJcbiAgICBzaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xyXG4gICAgY291bnRSZWFkeSA9IDA7XHJcbiAgICBoYXNDcnVkTGlzdCA9IHRydWU7XHJcbiAgICBjdXN0b21HZXREYXRhID0gZmFsc2U7XHJcbiAgICByZWFkeVRvVHJpbmhLeSA9IGZhbHNlO1xyXG4gICAgcGx1c1VybCA9ICcnO1xyXG4gICAgcm93RGF0YUN1cnJlbnQ6IGFueTtcclxuXHJcbiAgICBpc0NydWRMaXN0ID0gZmFsc2U7XHJcbiAgICBsb2FkaW5nVGltZW91dDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9saXN0SGVscGVyU2VydmljZTogTGlzdEhlbHBlclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2V4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyO1xyXG4gICAgcHJvdGVjdGVkIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaXBlOiBEYXRlUGlwZTtcclxuICAgIHByb3RlY3RlZCBfY2Q6IENoYW5nZURldGVjdG9yUmVmO1xyXG4gICAgcHJvdGVjdGVkIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9tYXN0ZXJEYXRhU2VydmljZTogTWFzdGVyRGF0YVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2U6IEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U6IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlOiBFbnRpdHlQZXJtaXNzaW9uU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dTZXR0aW5nU2VydmljZTogV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U6IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3N0YXRlTWFjaGluZXNTZXJ2aWNlOiBTdGF0ZU1hY2hpbmVzU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlOiBDb25nVmllY1NlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XHJcbiAgICAgICAgdGhpcy5fY3VzdG9tUm91dGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDdXN0b21Sb3V0ZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9saXN0SGVscGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChMaXN0SGVscGVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRXhwb3J0U2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2RhdGVQaXBlID0gdGhpcy5faW5qZWN0b3IuZ2V0KERhdGVQaXBlKTtcclxuICAgICAgICB0aGlzLl9jZCA9IHRoaXMuX2luamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5UGVybWlzc2lvblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5UGVybWlzc2lvblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RhdGVNYWNoaW5lc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZUluQmFzZSA9IHRoaXMuX2luamVjdG9yLmdldChDb25nVmllY1NlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwuYmFzZVJlYWR5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2xzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzID0gdGhpcy5zZXR0aW5nLmNvbHMuZmlsdGVyKHEgPT4gIXEucmVtb3ZlT25Jbml0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tZXJnZUluZm9Ub0NvbHVtblNjaGVtYSgpO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcodGhpcy5ub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93XHJcbiAgICAgICAgICAgICAgICB8fCAhdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvd05ld1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlckdsb2JhbFNlcnZpY2UodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZmlnU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNb2R1bGVDb25maWdTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcclxuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW5cclxuICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlXHJcbiAgICAgICAgICAgICYmIHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluW3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZV1cclxuICAgICAgICAgICAgJiYgIXRoaXMuc2V0dGluZy50YXJnZXRQYXRoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy50YXJnZXRQYXRoID0gYCR7dGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW5bdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlXX0vJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZW50aXR5TmFtZS50b0xvd2VyQ2FzZSgpfS9kZXRhaWxgO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrQWxsb3dUcmluaEt5ID0gdGhpcy5jaGVja0FsbG93VHJpbmhLeS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jaGVja0FsbG93VHJpbmhLeSA9IHRoaXMuY2hlY2tBbGxvd1RyaW5oS3k7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmdldEl0ZW1TdGF0ZSA9IHRoaXMuZ2V0SXRlbVN0YXRlO1xyXG5cclxuICAgICAgICB0aGlzLmdldEl0ZW1TdGF0ZSA9IHRoaXMuZ2V0SXRlbVN0YXRlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5nZXRNZW51QnV0dG9ucyA9IHRoaXMuZ2V0TWVudUJ1dHRvbnMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlckdsb2JhbFNlcnZpY2Uoc2VydmljZTogQmFzZVNlcnZpY2UpIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBzZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgc2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCBzZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlQZXJtaXNzaW9uU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCBzZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRJdGVtRnJvbVF1ZXJ5UGFyYW0oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZERldGFpbEZyb21RdWVyeVBhcmFtID09PSB1bmRlZmluZWQgfHwgdGhpcy5sb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW0gPT09IHRydWUpIHtcclxuICAgICAgICAgICAgbGV0IGlkSW5RdWVyeVN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBwaWQgPSBudWxsOyAvLyBwZXJtaXNzaW9uIElkIMSRxrDhu6NjIG5nxrDhu51pIGtow6FjIHNoYXJlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdFxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBpZEluUXVlcnlTdHJpbmcgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5pZCB8fCB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5lbnRpdHlLZXk7XHJcbiAgICAgICAgICAgICAgICBwaWQgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5waWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGV0YWlsUGlkKHBpZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaWRJblF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBnZXQgZGV0YWlsIGRhdGFcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXREZXRhaWxXaXRoUGVybWlzc2lvbihpZEluUXVlcnlTdHJpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyZXMuZGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLkVESVQpID09IFBlcm1pc3Npb25CYXNlLkVESVRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChyZXMuZGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLlJFQUQpID09IFBlcm1pc3Npb25CYXNlLlJFQURcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0KHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIHhlbSBi4bqjbiBnaGknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIG9uIGdldCBkZXRhaWwgZnJvbSBxdWVyeXN0cmluZycsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLhuqNuIGdoaSBj4bqnbiB4ZW0gY2hpIHRp4bq/dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxvYWREZXRhaWxQaWQocGlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0RGV0YWlsQnlQaWQocGlkKVxyXG4gICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICcnLCBmID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuUkVBRCkgPT0gUGVybWlzc2lvbkJhc2UuUkVBRFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEucGlkID0gcGlkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uQnlQaWQgPSByZXMuZGF0YS5iYXNlUGVybWlzc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0KHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIHhlbSBi4bqjbiBnaGknKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkpLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBvbiBnZXQgZGV0YWlsIGZyb20gcXVlcnlzdHJpbmcnLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUFmdGVyVmlld0luaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUFmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvd1xyXG4gICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0hhc1dvcmtmbG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tIYXNFbmFibGVXb3JrZmxvd0NvcmVTdGF0dXMoKTtcclxuICAgICAgICB0aGlzLmNvdW50UmVhZHkrKztcclxuICAgICAgICBpZiAodGhpcy5jb3VudFJlYWR5ID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmJhc2VSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRJdGVtRnJvbVF1ZXJ5UGFyYW0oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrSGFzRW5hYmxlV29ya2Zsb3dDb3JlU3RhdHVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29yZVN0YXR1cykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xQYXJlbnQgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3dvcmtmbG93Q29yZVN0YXR1cycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Ry4bqhbmcgdGjDoWkgdHLDrG5oIGvDvScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3dvcmtmbG93Q29yZVN0YXR1cycsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAnd29ya2Zsb3dDb3JlU3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cyxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KGNvbFBhcmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uY29sUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcmF3Q29sdW1uOiBjb2xQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBjb2xQYXJlbnQuZmllbGQsXHJcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogY29sUGFyZW50LmFsbG93RmlsdGVyLFxyXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sUGFyZW50LCBjaGlsZHJlbik7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xQYXJlbnRdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBjaGVja0hhc1dvcmtmbG93KCkge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRLZXlXb3JrZmxvd1NldHRpbmcoKTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnVzZVdvcmtmbG93TmV3KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFXb3JrZmxvd05ldyA9IChhd2FpdCB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlLmdldERldGFpbEJ5RmlsdGVyKFtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCd0YWJsZU5hbWUnLCBPcGVyYXRvci5lcXVhbCwga2V5KVxyXG4gICAgICAgICAgICBdKSkuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlckdsb2JhbFNlcnZpY2UodGhpcy5fY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlKTtcclxuICAgICAgICAgICAgaWYgKGRhdGFXb3JrZmxvd05ldykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0RldGFpbEJ5V29ya2Zsb3dTZXR0aW5nKGRhdGFXb3JrZmxvd05ldyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3ID0gZGF0YVdvcmtmbG93TmV3O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDb2xXb3JrZmxvd1N0YXR1cyhkYXRhV29ya2Zsb3dOZXcud29ya2Zsb3dzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIEzhuqV5IHJhIHRvw6BuIGLhu5kgY+G6pXUgaMOsbmggd29ya2Zsb3cgY3VzdG9tIMSR4buDIGzhuqV5IGRhdGFzb3VyY2UgdHLhuqFuZyB0aMOhaVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuZ2V0RGF0YVNvdXJjZVRyYW5nVGhhaVdvcmtmbG93KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENvbFdvcmtmbG93U3RhdHVzKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERhdGFTb3VyY2VUcmFuZ1RoYWlXb3JrZmxvdygpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0NvZGVCeVRhc2soKSB7XHJcbiAgICAgICAgLy8gTOG6pXkgY8OhYyBxdXkgdHLDrG5oIGfhuq9uIGNobyBjw7RuZyB2aeG7h2NcclxuICAgICAgICBjb25zdCBwaGFuQ29uZ0NvbmdWaWVjU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDYXVIaW5oV29ya2Zsb3dTZXJ2aWNlKTtcclxuICAgICAgICBjb25zdCBkYXRhV29ya2Zsb3dCeVRhc2sgPSAoYXdhaXQgcGhhbkNvbmdDb25nVmllY1NlcnZpY2UuZ2V0QWxsKFxyXG4gICAgICAgICAgICBbXSwgJ1dvcmtmbG93Q29kZXMnXHJcbiAgICAgICAgKSkuZGF0YTtcclxuICAgICAgICBpZiAoIWRhdGFXb3JrZmxvd0J5VGFzaykgcmV0dXJuIFtdO1xyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93Q29kZXMgPSBbXTtcclxuICAgICAgICBkYXRhV29ya2Zsb3dCeVRhc2suZm9yRWFjaChjYXVIaW5oID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjYXVIaW5oLndvcmtmbG93Q29kZXMpIHJldHVybjtcclxuICAgICAgICAgICAgY2F1SGluaC53b3JrZmxvd0NvZGVzLnNwbGl0KCcsJykuZm9yRWFjaCh3b3JrZmxvd0NvZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdvcmtmbG93Q29kZXMuaW5kZXhPZih3b3JrZmxvd0NvZGUpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd29ya2Zsb3dDb2Rlcy5wdXNoKHdvcmtmbG93Q29kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB3b3JrZmxvd0NvZGVzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0V29ya2Zsb3dEZXRhaWxCeVdvcmtmbG93U2V0dGluZyhpdGVtV29ya2Zsb3dTZXR0aW5nOiBhbnkpIHtcclxuICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cyA9IFtdO1xyXG4gICAgICAgIGxldCB3b3JrZmxvd0NvZGVzID0gW107XHJcbiAgICAgICAgLy8gTuG6v3UgdOG6oW8gdGFzayB0aGF5IHbDrCB04bqhbyBjw7RuZyB2aeG7h2NcclxuICAgICAgICBpZiAoaXRlbVdvcmtmbG93U2V0dGluZy5jcmVhdGVUYXNrSW5zdGVhZCkge1xyXG4gICAgICAgICAgICB3b3JrZmxvd0NvZGVzID0gYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0NvZGVCeVRhc2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzICYmICFBcnJheS5pc0FycmF5KGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcykpIHtcclxuICAgICAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgIHdvcmtmbG93Q29kZXMgPSBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod29ya2Zsb3dDb2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dzID0gKGF3YWl0IHRoaXMuX3N0YXRlTWFjaGluZXNTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdjb2RlJywgT3BlcmF0b3IuaW4sIHdvcmtmbG93Q29kZXMpXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ3RpdGxlJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFBsdXM6ICdkYXRhJ1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgIHdvcmtmbG93cy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5kYXRhID0gSlNPTi5wYXJzZShpdGVtLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lRGF0YSA9IGl0ZW0uZGF0YTtcclxuICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5jb25uZWN0aW9ucy5mb3JFYWNoKGNvbm4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubi5zb3VyY2UgPT0gbWFjaGluZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0ucHVzaChjb25uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cyA9IHdvcmtmbG93cztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFwcGVuZENvbFdvcmtmbG93U3RhdHVzKHdvcmtmbG93czogV2ZJdGVtW10pIHtcclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gW3tcclxuICAgICAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHJhd1RlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgIHRlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgIG1hTG93ZXI6ICcnLFxyXG4gICAgICAgICAgICB0ZW5Mb3dlcjogJ2NoxrBhIGLhuq90IMSR4bqndSdcclxuICAgICAgICB9XTtcclxuICAgICAgICBpZiAod29ya2Zsb3dzICYmIHdvcmtmbG93cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgd29ya2Zsb3dzLmZvckVhY2god29ya2Zsb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgd29ya2Zsb3cuZGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TdGF0dXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtYWNoaW5lLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd1RlbjogbWFjaGluZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW46IG1hY2hpbmUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFMb3dlcjogbWFjaGluZS5jb2RlLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbkxvd2VyOiBtYWNoaW5lLm5hbWUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlLnNvbWUoeCA9PiB4LnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgeC5tYUxvd2VyID09IGl0ZW1TdGF0dXMubWFMb3dlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5wdXNoKGl0ZW1TdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2FtZU5hbWUgPSBkYXRhU291cmNlLmZpbmQocSA9PiBxLnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgcS5tYUxvd2VyICE9IGl0ZW1TdGF0dXMubWFMb3dlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2FtZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TYW1lTmFtZS50ZW4gPSBgJHtpdGVtU2FtZU5hbWUucmF3VGVufSAoJHtpdGVtU2FtZU5hbWUuaWR9KWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU3RhdHVzLnRlbiA9IGAke2l0ZW1TdGF0dXMucmF3VGVufSAoJHtpdGVtU3RhdHVzLmlkfSlgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb2xQYXJlbnQgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgIGZpZWxkOiBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogJ3RyYW5nVGhhaVY1JyxcclxuICAgICAgICAgICAgZGF0YVR5cGVSZWZGaWVsZDogJ3RyYW5nVGhhaVY1JyxcclxuICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtbixcclxuICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICBsYWJlbDogJ1Ry4bqhbmcgdGjDoWknLFxyXG4gICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBUZXh0QWxpZ24uQ2VudGVyLFxyXG4gICAgICAgICAgICBpc1RyZWU6IHRydWUsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogJ3BhcmVudElkJyxcclxuICAgICAgICAgICAgZGF0YVNvdXJjZSxcclxuICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KGNvbFBhcmVudCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLnVzZXJEYXRhID0gdGhpcy5tb2RlbC5hZHZhbmNlRGF0YS51c2VyRGF0YTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHtcclxuICAgICAgICAgICAgLi4uY29sUGFyZW50LFxyXG4gICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcclxuICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcclxuICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGNvbFBhcmVudC5hbGxvd0ZpbHRlcixcclxuICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbFBhcmVudCwgY2hpbGRyZW5dKTtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xQYXJlbnRdKTtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlckN1cnJlbnQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICh1c2VyQ3VycmVudC51c2VyTmFtZSA9PSAnYWRtaW4nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbEZvckFkbWluID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdfX3ZpZXdIaXN0b3J5JyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnX192aWV3SGlzdG9yeScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4JyxcclxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xGb3JBZG1pbik7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sRm9yQWRtaW5dKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sRm9yQWRtaW5dKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0SXRlbVN0YXRlKGxzdFJvd0RhdGEpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuICAgICAgICBsc3RSb3dEYXRhLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdFtpdGVtLmlkXSA9IHt9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tBbGxvd1RyaW5oS3kocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1lbnVCdXR0b25zKHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLnJvd0RhdGFDdXJyZW50ID0gcm93RGF0YTtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2FkZChldnQpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVBZGQoKTtcclxuICAgICAgICBpZiAoIXJlc3VsdFZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHt9O1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5BREQ7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVBZGQoKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgVGjDqm0gbeG7m2kgJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHZhbGlkYXRlQWRkKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZUFkZCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfdmlldyhyb3dEYXRhKSB7XHJcbiAgICAgICAgaWYgKHJvd0RhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VkaXQocm93RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVWaWV3KCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBDaGkgdGnhur90ICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlWaWV3TW9kZWwocm93RGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVWaWV3KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeVZpZXdNb2RlbChyb3dEYXRhOiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfY29weUxpbmtNdWx0aXBsZSgpIHtcclxuICAgICAgICBjb25zdCBwYXRocyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAgICAgcGF0aHMucHVzaChhd2FpdCB0aGlzLmdldENvcHlQYXRoKHRoaXMuc2V0dGluZywgaXRlbSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNvcHlCeVN0b3JhZ2UocGF0aHMuam9pbignXFxyXFxuJykpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgY8OhYyBsacOqbiBr4bq/dCDEkcOjIGNo4buNbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9jb3B5TGluayhyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gYXdhaXQgdGhpcy5nZXRDb3B5UGF0aCh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuY29weUJ5U3RvcmFnZShwYXRoKTtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQw6Mgc2FvIGNow6lwIGxpw6puIGvhur90Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2VkaXQocm93RGF0YSwgc2NvcGVEYXRhRWRpdDogYW55ID0ge30pIHtcclxuICAgICAgICBjb25zdCBmbGFzaFNob3cgPSByb3dEYXRhW0tleUZsYXNoU2hvd107XHJcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUVkaXQoKTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgQ2hpIHRp4bq/dCAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IGZsYXNoU2hvdyA/ICdoaWRlJyA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5zY29wZURhdGFFZGl0ID0gc2NvcGVEYXRhRWRpdDtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhID0gdGhpcy5jbG9uZURhdGEocm93RGF0YSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlFZGl0TW9kZWwocm93RGF0YSk7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YVtLZXlGbGFzaFNob3ddID0gZmxhc2hTaG93O1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZUVkaXQoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5RWRpdE1vZGVsKHJvd0RhdGE6IGFueSkge1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xvbmVEYXRhKHJvd0RhdGEpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwaWQ6IHJvd0RhdGEucGlkLFxyXG4gICAgICAgICAgICBiYXNlUGVybWlzc2lvbkJ5UGlkOiByb3dEYXRhLmJhc2VQZXJtaXNzaW9uQnlQaWQsXHJcbiAgICAgICAgICAgIGlkOiByb3dEYXRhW3RoaXMuc2V0dGluZy5lbnRpdHlLZXldLFxyXG4gICAgICAgICAgICBiYXNlUGVybWlzc2lvbjogcm93RGF0YS5iYXNlUGVybWlzc2lvblxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvbWlzZURlbGV0ZUl0ZW0ocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZGVsZXRlKHJvd0RhdGEuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIF9kZWxldGUocm93RGF0YSkge1xyXG4gICAgICAgIGlmIChyb3dEYXRhLl9fZGlzYWJsZURlbGV0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlQ29uZmlybSgpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9taXNlRGVsZXRlSXRlbShyb3dEYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2hvd1ZlcnNpb25CdXR0b24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5DT01NT04uUkVMT0FEX0RBVEFfVkVSU0lPTiwge30sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFTdWNjZXNzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykge1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zLm1hcCh4ID0+IHguaWQpLmpvaW4oJywnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmRlbGV0ZU1hbnkoaWRzKTtcclxuICAgIH1cclxuXHJcbiAgICBfZGVsZXRlTXVsdGlwbGUoaXRlbXMpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZURlbGV0ZUl0ZW1zKGl0ZW1zKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZUNhbmNlbCgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVNhdmVkKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2FuY2VsKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMub25CZWZvcmVDYW5jZWwoKTtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlNZXRhZGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXR0aW5nLmRhdGEgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZXR0aW5nLmVudGl0eU1ldGFkYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlNZXRhZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gdGhpcy5zZXR0aW5nLmVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgICAgICAgICAgLy8gICAgIGF3YWl0IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5sb2FkKHRoaXMuX2Jhc2VTZXJ2aWNlLCB0aGlzLmNvbnRleHQsIHRydWUpOyAgLy8gZm9yY2UgbG9hZCDEkeG7gyDEkeG7jWMgdOG7qyBjc2RsXHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXR0aW5nLmRhdGEgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSBpbmNsdWRlIEVudGl0eU1ldGFkYXRhU2VydmljZSBpbiBwcm92aWRlciBvZiBjb21wb25lbnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3RyaWdnZXJQcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRGF0YShncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvID0gdGhpcy5jcnVkTGlzdC5nZXRHcmlkSW5mbygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWdyaWRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydHM6IFtdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldERhdGEoZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLm1vZGVsLnJlYWR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLm1vZGlmeUZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBmaWx0ZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNOdWxsVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0VmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmaWx0ZXIudmFsdWUpLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc051bGxWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0VmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdFZhbHVlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gT3BlcmF0b3IuaXNOdWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5sb2dpYyA9ICdvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWVsZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5vcGVyYXRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSwgT3BlcmF0b3IuaXNOdWxsLCAnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pbiwgcmVzdFZhbHVlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRNb2RpZnkgPSBhd2FpdCB0aGlzLm1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE1vZGlmeSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC50b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZG9HZXRSZXF1ZXN0KGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX21hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnTcOheSBjaOG7pyBwaOG6o24gaOG7k2kgcXXDoSBsw6J1LCB2dWkgbMOybmcga2nhu4NtIHRyYSBs4bqhaSDEkcaw4budbmcgdHJ1eeG7gW4gbeG6oW5nIScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCAyMDAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVJlbG9hZGVkKGV2dCA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgdGhpcy5hZnRlclJlbG9hZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJSZWxvYWRlZCgpIHsgfVxyXG5cclxuICAgIF91bm1hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpcmVEYXRhTG9hZGVkKHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnByb2Nlc3NCYXNlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCB0aGlzLnBsdXNVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFDdXN0b20oZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG9HZXRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbykge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXN0b21HZXREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzR2V0RGF0YShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dIdHRwVW5rbm93RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YUN1c3RvbShncmlkSW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0dldERhdGEocmVzcG9uc2U6IFJlc3BvbnNlUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5leHBhbmRlZFJvd0tleXMgPSB7fTtcclxuICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gcmVzcG9uc2UudG90YWxSZWNvcmQ7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5mb3JFYWNoKHJvd0l0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5c1tyb3dJdGVtW3RoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGRdXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NGb3JlYWNoSXRlbUFmdGVyR2V0RGF0YShyb3dJdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgIGNvbnN0IGxzdEl0ZW1JZCA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIC8vIEzhuqV5IHJhIG5o4buvbmcgdHLhuqFuZyB0aMOhaSBtw6AgYuG6o24gZ2hpIGtow7RuZyDEkcaw4bujYyBz4butYVxyXG4gICAgICAgICAgICBjb25zdCBzdGF0dXNOb3RBbGxvd0VkaXRzID0gdGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZy5zdGF0dXNlcy5maWx0ZXIocCA9PiAhcC5vcHRpb25zLmNob1BoZXBTdWEpLm1hcChpdGVtID0+IGl0ZW0udHJhbmdUaGFpQ29udGFpbmVyLm1hKTtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5faW5kZXggPSAodGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgLSAxKSAqIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSArIDEgKyBpbmRleDtcclxuICAgICAgICAgICAgICAgIC8vIGl0ZW0uY3VycmVudFN0YXRlQ29kZSA9IGl0ZW0uY3VycmVudFN0YXRlQ29kZTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX19kaXNhYmxlRWRpdCA9IHN0YXR1c05vdEFsbG93RWRpdHMuaW5kZXhPZihpdGVtLmN1cnJlbnRTdGF0ZUNvZGUpID4gLTE7XHJcbiAgICAgICAgICAgICAgICBsc3RJdGVtSWQucHVzaChpdGVtLmlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLl9pbmRleCA9ICh0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSAtIDEpICogdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2VTaXplICsgMSArIGluZGV4O1xyXG4gICAgICAgICAgICAgICAgLy8gaXRlbS5jdXJyZW50U3RhdGVDb2RlID0gaXRlbS5jdXJyZW50U3RhdGVDb2RlO1xyXG4gICAgICAgICAgICAgICAgbHN0SXRlbUlkLnB1c2goaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXdcclxuICAgICAgICAgICAgfHwgdGhpcy5zZXR0aW5nLmlzV29ya2Zsb3dUcmVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJZEN1cnJlbnQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRJZCgpO1xyXG4gICAgICAgICAgICBsZXQgZmllbGRLZXkgPSAnaWQnLCBjYWxsQmFja1doZW5Ob3RIYXZlU3RhdHVzOiAoaXRlbVN0YXR1cywgcm93SXRlbSkgPT4gdm9pZCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBfYmFzZVNlcnZpY2UgPSB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2U7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmlzV29ya2Zsb3dUcmVlICYmIHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcuY3JlYXRlVGFza0luc3RlYWQpIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkS2V5ID0gRmllbGREZWZpbmVIYXNUYXNrO1xyXG4gICAgICAgICAgICAgICAgY2FsbEJhY2tXaGVuTm90SGF2ZVN0YXR1cyA9IChpdGVtU3RhdHVzLCByb3dJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvd0l0ZW1bZmllbGRLZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMud29ya2Zsb3dDb2RlID0gRHVtbXlXb3JrZmxvd0NvZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMudGV4dFRyYW5nVGhhaSA9ICfEkMOjIHThuqFvIGPDtG5nIHZp4buHYyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8vIEzhuqV5IHJhIGRhbmggc8OhY2ggY8OhYyB0YXNrIGfhuq9uIHbDoG8gYuG6o24gZ2hpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhVGFzayA9IChhd2FpdCB0aGlzLl9jb25nVmllY1NlcnZpY2VJbkJhc2UuZ2V0QWxsKFxyXG4gICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ3NlcnZpY2VDb2RlJywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHknLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5S2V5JywgT3BlcmF0b3IuaW4sIGxzdEl0ZW1JZClcclxuICAgICAgICAgICAgICAgICAgICBdLCAnaWQsZW50aXR5S2V5JywgbnVsbCwgJ0lnbm9yZVdGJ1xyXG4gICAgICAgICAgICAgICAgKSkuZGF0YTtcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtVGFzayA9IGRhdGFUYXNrLmZpbmQocSA9PiBxLmVudGl0eUtleSA9PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVRhc2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVtmaWVsZEtleV0gPSBpdGVtVGFzay5pZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIF9iYXNlU2VydmljZSA9IHRoaXMuX2NvbmdWaWVjU2VydmljZUluQmFzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlLmNoYW5nZUVuZHBvaW50KF9iYXNlU2VydmljZSlcclxuICAgICAgICAgICAgICAgIC5hcHBlbmRJbmZvRm9yV29ya2Zsb3coXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcklkQ3VycmVudCwgZGF0YVNvdXJjZSwgZmllbGRLZXksIGNhbGxCYWNrV2hlbk5vdEhhdmVTdGF0dXNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZnRlclByb2Nlc3NEYXRhSW5CYXNlKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc2V0U2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGlmIChyZXNldFNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmFmdGVyR2V0RGF0YSgpO1xyXG5cclxuICAgICAgICB0aGlzLl9nZXRSZWZEYXRhRHJvcGRvd24odGhpcy5tb2RlbC5kYXRhU291cmNlKTtcclxuICAgIH1cclxuXHJcbiAgICBiZWZvcmVSZW5kZXJEYXRhU291cmNlKGRhdGFzb3VyY2U6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFzb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzRm9yZWFjaEl0ZW1BZnRlckdldERhdGEoeDogYW55KSB7XHJcbiAgICAgICAgLy8gcHJvY2VzcyB3b3JrZmxvd1xyXG4gICAgICAgIGlmICh0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5pc1dmMSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmdldFdmMVNldHRpbmcoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnVzZXJJZC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHhbJ21ldGFkYXRhU3RhdHVzJ10gPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4WydjcmVhdGVkQnknXSAhPSBjdXJyZW50VXNlcklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh4WydtZXRhZGF0YVN0YXR1cyddID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IHguY291bnRPZkFwcHJvdmUgPyB4LmNvdW50T2ZBcHByb3ZlICsgMSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gJ29iamVjdElzVXNlcicgKyBjb3VudDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVRC0xMTk4IC0gTmFtTkggLSBUcsaw4budbmcgaOG7o3Agc2V0dGluZyBjaMawYSBjw7MgZOG7ryBsaeG7h3UgdGjDrCBi4buLIGV4Y2VwdGlvbiwgZG8gY8OhYyBi4bqjbiBnaGkgdGjDqm0gbeG7m2kgdHLGsOG7m2Mga2hpIGLhuq10IHF1eSB0csOsbmggdGjDrCBrbyBjw7MgZOG7ryBsaeG7h3UgbsOgeVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdba2V5XS5zb21lKHggPT4geCA9PSBjdXJyZW50VXNlcklkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBFTkQgVUQtMTE5OFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoeFsnbWV0YWRhdGFTdGF0dXMnXSA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZURlbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJQcm9jZXNzRGF0YUluQmFzZShkYXRhU291cmNlOiBhbnlbXSA9IFtdKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFmdGVyR2V0RGF0YSgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0UmVmRGF0YURyb3Bkb3duKGRhdGFTb3VyY2UpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyclByb21pc2VEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyclNjaGVtYURvbnROZWVkV2FpdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2YgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFbS2V5RmllbGRHZXRSZWZUeXBlXSA9PSBFbnVtR2V0UmVmVHlwZS5TRVJWRVIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mb3JjZUdldERhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICh0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gJiYgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbiAmJiB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4ucmF3Q29sdW1uLmZpZWxkID09IHNjaGVtYS5maWVsZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuc2V0dGluZy5jb2xzLnNvbWUoaXRlbSA9PiBpdGVtLmZpZWxkID09ICdzdHInICsgZmllbGQgJiYgaXRlbS52aXNpYmxlICE9IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGl0ZW1EYXRhW2ZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkcyA9IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpZHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBjdXJyZW50VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5ncm91cENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYXJyVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMubmV3RmlsdGVyKHNjaGVtYS52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgYXJyVmFsdWUpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5vcmRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYSwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclByb21pc2VEb250TmVlZFdhaXQucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyU2NoZW1hRG9udE5lZWRXYWl0LnB1c2goc2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZEluR3JpZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IHNjaGVtYS5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBzY2hlbWEuZGF0YVNvdXJjZS5maW5kKGkgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIGl0ZW1EYXRhW2ZpZWxkXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyUHJvbWlzZURvbnROZWVkV2FpdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyUmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXJyUHJvbWlzZURvbnROZWVkV2FpdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyU2NoZW1hRG9udE5lZWRXYWl0LmZvckVhY2goKHNjaGVtYSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hLCBhcnJSZXNbaW5kZXhdKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24obnVsbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBzY2hlbWE6IENvbHVtblNjaGVtYUJhc2UsIGRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4gaXRlbVtzY2hlbWEuZGlzcGxheUZpZWxkSW5HcmlkXSB8fCBpdGVtWyd0ZW4nXTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFSb3cgPSAocmVmSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3cpIHtcclxuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHNjaGVtYS5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHNjaGVtYS5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogc2NoZW1hLmZpZWxkVHJlZSxcclxuICAgICAgICAgICAgZmllbGRQYXJlbnRUcmVlSXRlbTogc2NoZW1hLmZpZWxkUGFyZW50VHJlZUl0ZW0sXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogc2NoZW1hLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgc29ydEZpZWxkOiBzY2hlbWEuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICBzb3J0RGlyOiBzY2hlbWEuc29ydERpcixcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhRmluaXNoOiBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oZmllbGQ6IHN0cmluZykge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlSW5mb1RvQ29sdW1uU2NoZW1hKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uTW9kZWxTY2hlbWEgPSB0aGlzLnNldHRpbmcubW9kZWxTY2hlbWFzLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY29sLmxhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbC5mdWxsTGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICghY29sLmRpc3BsYXlGaWVsZEluR3JpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbC5kaXNwbGF5RmllbGRJbkdyaWQgPSBjb2wuZGlzcGxheUZpZWxkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjb2wuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2wuZGF0YVR5cGUgPSB0aGlzLmdldERhdGFUeXBlKGNvbHVtbk1vZGVsU2NoZW1hLmRhdGFUeXBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RGF0YVR5cGUodHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpZWxkU2VhcmNoVGV4dCgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2wuZnVsbFRleHRTZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQucHVzaChjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbiwgc291cmNlRmllbGQ6ICdfaycgfSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzLnNwbGljZSgwLCAwLCBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzXHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
1009
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDckcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFL0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRixP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SUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoRDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtnQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQztvQkFDcEQsS0FBSyxFQUFFLElBQUk7b0JBQ1gsT0FBTztpQkFDVixDQUFDLENBQUMsQ0FBQzthQUNQO1NBQ0o7SUFDTCxDQUFDOzs7WUF6aENKLFNBQVM7OztZQWxDNEMsUUFBUTs7O3NCQXFDekQsU0FBUyxTQUFDLGlCQUFpQjswQkFhM0IsS0FBSzt1Q0FDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQ3J1ZExpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NydWQvY3J1ZC1saXN0L2NydWQtbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbnRpdHlQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZW50aXR5LXBlcm1pc3Npb24vc2VydmljZXMuY3MvZW50aXR5LXBlcm1pc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN0YXRlTWFjaGluZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdGF0ZW1hY2hpbmVzL3NlcnZpY2VzL3N0YXRlbWFjaGluZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IER1bW15V29ya2Zsb3dDb2RlLCBGaWVsZERlZmluZUhhc1Rhc2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L21vZGVscy9jb25zdCc7XHJcbmltcG9ydCB7IFdmSXRlbSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy9lbnRpdHktd29ya2Zsb3ctc2V0dGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctcGVybWlzc2lvbi1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy93b3JrZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IENhdUhpbmhXb3JrZmxvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25ndmllYy9jYXVoaW5oLXdvcmtmbG93L3NlcnZpY2VzL2NhdWhpbmgtd29ya2Zsb3cuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL2Nvbmd2aWVjL2Nvbmd2aWVjL3NlcnZpY2VzL2Nvbmd2aWVjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XHJcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cyB9IGZyb20gJy4uLy4uL21vZGVscy93b3JrZmxvdy1jb3JlLXN0YXR1cy5lbnVtJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IExpc3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGlzdC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzdGVyLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnVtR2V0UmVmVHlwZSwgRm9ybVN0YXRlLCBLZXlGaWVsZEdldFJlZlR5cGUsIEtleUZsYXNoU2hvdywgV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IENvbHVtblNjaGVtYUJhc2UsIENvbnRyb2xUeXBlLCBDcnVkRm9ybURhdGEsIENydWRMaXN0RGF0YSwgQ3J1ZExpc3RTZXR0aW5nLCBEcm9wZG93bk9wdGlvbnMsIE9wZXJhdG9yLCBUZXh0QWxpZ24gfSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuL2NvbXBvbmVudC1iYXNlJztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUxpc3RCYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICAgIHB1YmxpYyBjcnVkTGlzdDogQ3J1ZExpc3RDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKENydWRMaXN0Q29tcG9uZW50KSBzZXQgY29udGVudChjb250ZW50OiBDcnVkTGlzdENvbXBvbmVudCkge1xyXG4gICAgICAgIGNvbnN0IGJlZm9yZVZhbHVlID0gdGhpcy5jcnVkTGlzdDtcclxuICAgICAgICBpZiAoY29udGVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0ID0gY29udGVudDtcclxuICAgICAgICAgICAgaWYgKCFiZWZvcmVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudFJlYWR5IDwgMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBDcnVkTGlzdERhdGE7XHJcbiAgICBASW5wdXQoKSBsb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW06IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UgPSAnQ2jGsGEgY+G6pXUgaMOsbmggQ1JVRCBiYXNlIHNlcnZpY2UnO1xyXG4gICAgZW52aXJvbm1lbnQ6IGFueSA9IHt9O1xyXG4gICAgc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcclxuICAgIGZvcm1Nb2RlbDogQ3J1ZEZvcm1EYXRhID0gbmV3IENydWRGb3JtRGF0YSgpO1xyXG4gICAgc2NvcGVEYXRhRWRpdDogYW55ID0ge307XHJcbiAgICBzaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xyXG4gICAgY291bnRSZWFkeSA9IDA7XHJcbiAgICBoYXNDcnVkTGlzdCA9IHRydWU7XHJcbiAgICBjdXN0b21HZXREYXRhID0gZmFsc2U7XHJcbiAgICByZWFkeVRvVHJpbmhLeSA9IGZhbHNlO1xyXG4gICAgcGx1c1VybCA9ICcnO1xyXG4gICAgcm93RGF0YUN1cnJlbnQ6IGFueTtcclxuXHJcbiAgICBpc0NydWRMaXN0ID0gZmFsc2U7XHJcbiAgICBsb2FkaW5nVGltZW91dDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9saXN0SGVscGVyU2VydmljZTogTGlzdEhlbHBlclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2V4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyO1xyXG4gICAgcHJvdGVjdGVkIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaXBlOiBEYXRlUGlwZTtcclxuICAgIHByb3RlY3RlZCBfY2Q6IENoYW5nZURldGVjdG9yUmVmO1xyXG4gICAgcHJvdGVjdGVkIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9tYXN0ZXJEYXRhU2VydmljZTogTWFzdGVyRGF0YVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2U6IEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U6IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlOiBFbnRpdHlQZXJtaXNzaW9uU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dTZXR0aW5nU2VydmljZTogV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U6IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3N0YXRlTWFjaGluZXNTZXJ2aWNlOiBTdGF0ZU1hY2hpbmVzU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlOiBDb25nVmllY1NlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XHJcbiAgICAgICAgdGhpcy5fY3VzdG9tUm91dGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDdXN0b21Sb3V0ZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9saXN0SGVscGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChMaXN0SGVscGVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRXhwb3J0U2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2RhdGVQaXBlID0gdGhpcy5faW5qZWN0b3IuZ2V0KERhdGVQaXBlKTtcclxuICAgICAgICB0aGlzLl9jZCA9IHRoaXMuX2luamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5UGVybWlzc2lvblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5UGVybWlzc2lvblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RhdGVNYWNoaW5lc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZUluQmFzZSA9IHRoaXMuX2luamVjdG9yLmdldChDb25nVmllY1NlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIGlmICh3aW5kb3cpIHtcclxuICAgICAgICAvLyAgICAgd2luZG93WydfY2xiYyddID0gdGhpcztcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgdGhpcy5tb2RlbC5iYXNlUmVhZHkgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIocSA9PiAhcS5yZW1vdmVPbkluaXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1lcmdlSW5mb1RvQ29sdW1uU2NoZW1hKCk7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpZWxkU2VhcmNoVGV4dCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyh0aGlzLm5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nV29ya2Zsb3dcclxuICAgICAgICAgICAgICAgIHx8ICF0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93TmV3XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyR2xvYmFsU2VydmljZSh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVDb25maWdTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1vZHVsZUNvbmZpZ1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xyXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpblxyXG4gICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2VcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW5bdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlXVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5zZXR0aW5nLnRhcmdldFBhdGhcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnRhcmdldFBhdGggPSBgJHt0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpblt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGVdfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lLnRvTG93ZXJDYXNlKCl9L2RldGFpbGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tBbGxvd1RyaW5oS3kgPSB0aGlzLmNoZWNrQWxsb3dUcmluaEt5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrQWxsb3dUcmluaEt5ID0gdGhpcy5jaGVja0FsbG93VHJpbmhLeTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuZ2V0SXRlbVN0YXRlID0gdGhpcy5nZXRJdGVtU3RhdGU7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0SXRlbVN0YXRlID0gdGhpcy5nZXRJdGVtU3RhdGUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmdldE1lbnVCdXR0b25zID0gdGhpcy5nZXRNZW51QnV0dG9ucy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyR2xvYmFsU2VydmljZShzZXJ2aWNlOiBCYXNlU2VydmljZSkge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHNlcnZpY2UuZ2V0S2V5V29ya2Zsb3dTZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCBzZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgc2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEl0ZW1Gcm9tUXVlcnlQYXJhbSgpIHtcclxuICAgICAgICBpZiAodGhpcy5sb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW0gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBsZXQgaWRJblF1ZXJ5U3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHBpZCA9IG51bGw7IC8vIHBlcm1pc3Npb24gSWQgxJHGsOG7o2MgbmfGsOG7nWkga2jDoWMgc2hhcmVcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90XHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGlkSW5RdWVyeVN0cmluZyA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmlkIHx8IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmVudGl0eUtleTtcclxuICAgICAgICAgICAgICAgIHBpZCA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnBpZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREZXRhaWxQaWQocGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpZEluUXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIC8vIGdldCBkZXRhaWwgZGF0YVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldERldGFpbFdpdGhQZXJtaXNzaW9uKGlkSW5RdWVyeVN0cmluZylcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuRURJVCkgPT0gUGVybWlzc2lvbkJhc2UuRURJVFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuUkVBRCkgPT0gUGVybWlzc2lvbkJhc2UuUkVBRFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXQocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdC4bqhbiBraMO0bmcgY8OzIHF1eeG7gW4geGVtIGLhuqNuIGdoaScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignZXJyb3Igb24gZ2V0IGRldGFpbCBmcm9tIHF1ZXJ5c3RyaW5nJywgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZERldGFpbFBpZChwaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXREZXRhaWxCeVBpZChwaWQpXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJycsIGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLhuqNuIGdoaSBj4bqnbiB4ZW0gY2hpIHRp4bq/dCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChyZXMuZGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLkVESVQpID09IFBlcm1pc3Npb25CYXNlLkVESVRcclxuICAgICAgICAgICAgICAgICAgICB8fCAocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5SRUFEKSA9PSBQZXJtaXNzaW9uQmFzZS5SRUFEXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXMuZGF0YS5waWQgPSBwaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuYmFzZVBlcm1pc3Npb25CeVBpZCA9IHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXQocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdC4bqhbiBraMO0bmcgY8OzIHF1eeG7gW4geGVtIGLhuqNuIGdoaScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIG9uIGdldCBkZXRhaWwgZnJvbSBxdWVyeXN0cmluZycsIGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93XHJcbiAgICAgICAgICAgIHx8IHRoaXMuc2V0dGluZy5pc1dvcmtmbG93VHJlZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSGFzV29ya2Zsb3coKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGVja0hhc0VuYWJsZVdvcmtmbG93Q29yZVN0YXR1cygpO1xyXG4gICAgICAgIHRoaXMuY291bnRSZWFkeSsrO1xyXG4gICAgICAgIGlmICh0aGlzLmNvdW50UmVhZHkgPiAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYmFzZVJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZEl0ZW1Gcm9tUXVlcnlQYXJhbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tIYXNFbmFibGVXb3JrZmxvd0NvcmVTdGF0dXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb3JlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnd29ya2Zsb3dDb3JlU3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaSB0csOsbmgga8O9JyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnd29ya2Zsb3dDb3JlU3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlUmVmRmllbGQ6ICd3b3JrZmxvd0NvcmVTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBEYXRhU291cmNlV29ya2Zsb3dDb3JlU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmLnVuc2hpZnQoY29sUGFyZW50KTtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5jb2xQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcclxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBjb2xQYXJlbnQuYWxsb3dGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xQYXJlbnQsIGNoaWxkcmVuXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbFBhcmVudF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrSGFzV29ya2Zsb3coKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcudXNlV29ya2Zsb3dOZXcpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YVdvcmtmbG93TmV3ID0gKGF3YWl0IHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UuZ2V0RGV0YWlsQnlGaWx0ZXIoW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ3RhYmxlTmFtZScsIE9wZXJhdG9yLmVxdWFsLCBrZXkpXHJcbiAgICAgICAgICAgIF0pKS5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyR2xvYmFsU2VydmljZSh0aGlzLl9jb25nVmllY1NlcnZpY2VJbkJhc2UpO1xyXG4gICAgICAgICAgICBpZiAoZGF0YVdvcmtmbG93TmV3KSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldFdvcmtmbG93RGV0YWlsQnlXb3JrZmxvd1NldHRpbmcoZGF0YVdvcmtmbG93TmV3KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcgPSBkYXRhV29ya2Zsb3dOZXc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENvbFdvcmtmbG93U3RhdHVzKGRhdGFXb3JrZmxvd05ldy53b3JrZmxvd3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2V0dGluZy5pc1dvcmtmbG93VHJlZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gTOG6pXkgcmEgdG/DoG4gYuG7mSBj4bqldSBow6xuaCB3b3JrZmxvdyBjdXN0b20gxJHhu4MgbOG6pXkgZGF0YXNvdXJjZSB0cuG6oW5nIHRow6FpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5nZXREYXRhU291cmNlVHJhbmdUaGFpV29ya2Zsb3coKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ29sV29ya2Zsb3dTdGF0dXMoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGF0YVNvdXJjZVRyYW5nVGhhaVdvcmtmbG93KCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldFdvcmtmbG93Q29kZUJ5VGFzaygpIHtcclxuICAgICAgICAvLyBM4bqleSBjw6FjIHF1eSB0csOsbmggZ+G6r24gY2hvIGPDtG5nIHZp4buHY1xyXG4gICAgICAgIGNvbnN0IHBoYW5Db25nQ29uZ1ZpZWNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENhdUhpbmhXb3JrZmxvd1NlcnZpY2UpO1xyXG4gICAgICAgIGNvbnN0IGRhdGFXb3JrZmxvd0J5VGFzayA9IChhd2FpdCBwaGFuQ29uZ0NvbmdWaWVjU2VydmljZS5nZXRBbGwoXHJcbiAgICAgICAgICAgIFtdLCAnV29ya2Zsb3dDb2RlcydcclxuICAgICAgICApKS5kYXRhO1xyXG4gICAgICAgIGlmICghZGF0YVdvcmtmbG93QnlUYXNrKSByZXR1cm4gW107XHJcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dDb2RlcyA9IFtdO1xyXG4gICAgICAgIGRhdGFXb3JrZmxvd0J5VGFzay5mb3JFYWNoKGNhdUhpbmggPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWNhdUhpbmgud29ya2Zsb3dDb2RlcykgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXVIaW5oLndvcmtmbG93Q29kZXMuc3BsaXQoJywnKS5mb3JFYWNoKHdvcmtmbG93Q29kZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAod29ya2Zsb3dDb2Rlcy5pbmRleE9mKHdvcmtmbG93Q29kZSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB3b3JrZmxvd0NvZGVzLnB1c2god29ya2Zsb3dDb2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93Q29kZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0RldGFpbEJ5V29ya2Zsb3dTZXR0aW5nKGl0ZW1Xb3JrZmxvd1NldHRpbmc6IGFueSkge1xyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dzID0gW107XHJcbiAgICAgICAgbGV0IHdvcmtmbG93Q29kZXMgPSBbXTtcclxuICAgICAgICAvLyBO4bq/dSB04bqhbyB0YXNrIHRoYXkgdsOsIHThuqFvIGPDtG5nIHZp4buHY1xyXG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dTZXR0aW5nLmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XHJcbiAgICAgICAgICAgIHdvcmtmbG93Q29kZXMgPSBhd2FpdCB0aGlzLmdldFdvcmtmbG93Q29kZUJ5VGFzaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMgJiYgIUFycmF5LmlzQXJyYXkoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzKSkge1xyXG4gICAgICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMgPSBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgd29ya2Zsb3dDb2RlcyA9IGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3b3JrZmxvd0NvZGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCB3b3JrZmxvd3MgPSAoYXdhaXQgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2NvZGUnLCBPcGVyYXRvci5pbiwgd29ya2Zsb3dDb2RlcylcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAnY29kZScsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAndGl0bGUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkUGx1czogJ2RhdGEnXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgd29ya2Zsb3dzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmRhdGEgPSBKU09OLnBhcnNlKGl0ZW0uZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZU1hY2hpbmVEYXRhID0gaXRlbS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zID0ge307XHJcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmNvbm5lY3Rpb25zLmZvckVhY2goY29ubiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uLnNvdXJjZSA9PSBtYWNoaW5lLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXS5wdXNoKGNvbm4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dzID0gd29ya2Zsb3dzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXBwZW5kQ29sV29ya2Zsb3dTdGF0dXMod29ya2Zsb3dzOiBXZkl0ZW1bXSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBbe1xyXG4gICAgICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICAgICAgcmF3VGVuOiAnQ2jGsGEgYuG6r3QgxJHhuqd1JyxcclxuICAgICAgICAgICAgdGVuOiAnQ2jGsGEgYuG6r3QgxJHhuqd1JyxcclxuICAgICAgICAgICAgbWFMb3dlcjogJycsXHJcbiAgICAgICAgICAgIHRlbkxvd2VyOiAnY2jGsGEgYuG6r3QgxJHhuqd1J1xyXG4gICAgICAgIH1dO1xyXG4gICAgICAgIGlmICh3b3JrZmxvd3MgJiYgd29ya2Zsb3dzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB3b3JrZmxvd3MuZm9yRWFjaCh3b3JrZmxvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICB3b3JrZmxvdy5kYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVN0YXR1cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1hY2hpbmUuY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3VGVuOiBtYWNoaW5lLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbjogbWFjaGluZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYUxvd2VyOiBtYWNoaW5lLmNvZGUudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVuTG93ZXI6IG1hY2hpbmUubmFtZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFTb3VyY2Uuc29tZSh4ID0+IHgudGVuTG93ZXIgPT0gaXRlbVN0YXR1cy50ZW5Mb3dlciAmJiB4Lm1hTG93ZXIgPT0gaXRlbVN0YXR1cy5tYUxvd2VyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLnB1c2goaXRlbVN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TYW1lTmFtZSA9IGRhdGFTb3VyY2UuZmluZChxID0+IHEudGVuTG93ZXIgPT0gaXRlbVN0YXR1cy50ZW5Mb3dlciAmJiBxLm1hTG93ZXIgIT0gaXRlbVN0YXR1cy5tYUxvd2VyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1TYW1lTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNhbWVOYW1lLnRlbiA9IGAke2l0ZW1TYW1lTmFtZS5yYXdUZW59ICgke2l0ZW1TYW1lTmFtZS5pZH0pYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMudGVuID0gYCR7aXRlbVN0YXR1cy5yYXdUZW59ICgke2l0ZW1TdGF0dXMuaWR9KWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgZmllbGQ6IFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAndHJhbmdUaGFpVjUnLFxyXG4gICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAndHJhbmdUaGFpVjUnLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uLFxyXG4gICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaScsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFRleHRBbGlnbi5DZW50ZXIsXHJcbiAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiAncGFyZW50SWQnLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmLnVuc2hpZnQoY29sUGFyZW50KTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEudXNlckRhdGEgPSB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhLnVzZXJEYXRhO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xyXG4gICAgICAgICAgICAuLi5jb2xQYXJlbnQsXHJcbiAgICAgICAgICAgIHJhd0NvbHVtbjogY29sUGFyZW50LFxyXG4gICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcclxuICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgY29sUGFyZW50LmZpZWxkLFxyXG4gICAgICAgICAgICBhbGxvd0ZpbHRlcjogY29sUGFyZW50LmFsbG93RmlsdGVyLFxyXG4gICAgICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtblxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbFBhcmVudCwgY2hpbGRyZW4pO1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbFBhcmVudF0pO1xyXG5cclxuICAgICAgICBjb25zdCB1c2VyQ3VycmVudCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgaWYgKHVzZXJDdXJyZW50LnVzZXJOYW1lID09ICdhZG1pbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sRm9yQWRtaW4gPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ19fdmlld0hpc3RvcnknLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdfX3ZpZXdIaXN0b3J5JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwcHgnLFxyXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiBUZXh0QWxpZ24uQ2VudGVyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbEZvckFkbWluKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xGb3JBZG1pbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xGb3JBZG1pbl0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRJdGVtU3RhdGUobHN0Um93RGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGxzdFJvd0RhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0W2l0ZW0uaWRdID0ge307XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja0FsbG93VHJpbmhLeShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudUJ1dHRvbnMocm93RGF0YSkge1xyXG4gICAgICAgIHRoaXMucm93RGF0YUN1cnJlbnQgPSByb3dEYXRhO1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfYWRkKGV2dCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlID0gYXdhaXQgdGhpcy52YWxpZGF0ZUFkZCgpO1xyXG4gICAgICAgIGlmICghcmVzdWx0VmFsaWRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhID0ge307XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkFERDtcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUFkZCgpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBUaMOqbSBt4bubaSAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmFsaWRhdGVBZGQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlQWRkKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF92aWV3KHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAocm93RGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLkVESVQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZWRpdChyb3dEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZVZpZXcoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYENoaSB0aeG6v3QgJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHRoaXMuY2xvbmVEYXRhKHJvd0RhdGEpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeVZpZXdNb2RlbChyb3dEYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGJlZm9yZVZpZXcoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5Vmlld01vZGVsKHJvd0RhdGE6IGFueSkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9jb3B5TGlua011bHRpcGxlKCkge1xyXG4gICAgICAgIGNvbnN0IHBhdGhzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgICBwYXRocy5wdXNoKGF3YWl0IHRoaXMuZ2V0Q29weVBhdGgodGhpcy5zZXR0aW5nLCBpdGVtKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuY29weUJ5U3RvcmFnZShwYXRocy5qb2luKCdcXHJcXG4nKSk7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkMOjIHNhbyBjaMOpcCBjw6FjIGxpw6puIGvhur90IMSRw6MgY2jhu41uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2NvcHlMaW5rKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSBhd2FpdCB0aGlzLmdldENvcHlQYXRoKHRoaXMuc2V0dGluZywgcm93RGF0YSk7XHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jb3B5QnlTdG9yYWdlKHBhdGgpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgbGnDqm4ga+G6v3QnKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZWRpdChyb3dEYXRhLCBzY29wZURhdGFFZGl0OiBhbnkgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IGZsYXNoU2hvdyA9IHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICBkZWxldGUgcm93RGF0YVtLZXlGbGFzaFNob3ddO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlRWRpdCgpO1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5FRElUO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBDaGkgdGnhur90ICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcclxuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gZmxhc2hTaG93ID8gJ2hpZGUnIDogbnVsbDtcclxuICAgICAgICB0aGlzLnNjb3BlRGF0YUVkaXQgPSBzY29wZURhdGFFZGl0O1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeUVkaXRNb2RlbChyb3dEYXRhKTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhW0tleUZsYXNoU2hvd10gPSBmbGFzaFNob3c7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlRWRpdCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlFZGl0TW9kZWwocm93RGF0YTogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9uZURhdGEocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBpZDogcm93RGF0YS5waWQsXHJcbiAgICAgICAgICAgIGJhc2VQZXJtaXNzaW9uQnlQaWQ6IHJvd0RhdGEuYmFzZVBlcm1pc3Npb25CeVBpZCxcclxuICAgICAgICAgICAgaWQ6IHJvd0RhdGFbdGhpcy5zZXR0aW5nLmVudGl0eUtleV0sXHJcbiAgICAgICAgICAgIGJhc2VQZXJtaXNzaW9uOiByb3dEYXRhLmJhc2VQZXJtaXNzaW9uXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGUocm93RGF0YS5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlbGV0ZShyb3dEYXRhKSB7XHJcbiAgICAgICAgaWYgKHJvd0RhdGEuX19kaXNhYmxlRGVsZXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93VmVyc2lvbkJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5SRUxPQURfREFUQV9WRVJTSU9OLCB7fSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvbWlzZURlbGV0ZUl0ZW1zKGl0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgaWRzID0gaXRlbXMubWFwKHggPT4geC5pZCkuam9pbignLCcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZGVsZXRlTWFueShpZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIF9kZWxldGVNdWx0aXBsZShpdGVtcykge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlQ29uZmlybSgpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9taXNlRGVsZXRlSXRlbXMoaXRlbXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFTdWNjZXNzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmVmb3JlQ2FuY2VsKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlU2F2ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDYW5jZWwoJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNhbmNlbCgpO1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldEVudGl0eU1ldGFkYXRhKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2V0dGluZy5lbnRpdHlNZXRhZGF0YVNldHRpbmcuZGF0YSA9IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5nZXRXZjFTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eU1ldGFkYXRhU2VydmljZSk7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UgPSB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgICAgICAgICAvLyAgICAgYXdhaXQgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmxvYWQodGhpcy5fYmFzZVNlcnZpY2UsIHRoaXMuY29udGV4dCwgdHJ1ZSk7ICAvLyBmb3JjZSBsb2FkIMSR4buDIMSR4buNYyB04burIGNzZGxcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2V0dGluZy5lbnRpdHlNZXRhZGF0YVNldHRpbmcuZGF0YSA9IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5nZXRXZjFTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUGxlYXNlIGluY2x1ZGUgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIGluIHByb3ZpZGVyIG9mIGNvbXBvbmVudCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWxvYWQoKSB7XHJcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfdHJpZ2dlclByb2Nlc3NEYXRhKGdyaWRJbmZvPzogR3JpZEluZm8pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NEYXRhKGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NEYXRhKGdyaWRJbmZvPzogR3JpZEluZm8pIHtcclxuICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNydWRMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFncmlkSW5mbykge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8gPSB0aGlzLmNydWRMaXN0LmdldEdyaWRJbmZvKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogOTk5XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0czogW11cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0RGF0YShncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5R3JpZEluZm8oZ3JpZEluZm86IEdyaWRJbmZvKTogUHJvbWlzZTxib29sZWFuIHwgdm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICYmIHRoaXMubW9kZWwucmVhZHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgZ3JpZEluZm8ubW9kaWZ5RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIGZpbHRlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc051bGxWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RWYWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZpbHRlci52YWx1ZSkuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTnVsbFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RWYWx1ZXMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzTnVsbFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0VmFsdWVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBPcGVyYXRvci5pc051bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmxvZ2ljID0gJ29yJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpZWxkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pc051bGwsICcnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIE9wZXJhdG9yLmluLCByZXN0VmFsdWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdE1vZGlmeSA9IGF3YWl0IHRoaXMubW9kaWZ5R3JpZEluZm8oZ3JpZEluZm8pO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0TW9kaWZ5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kb0dldFJlcXVlc3QoZ3JpZEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbWFya0xvYWRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmFkanVzdFBvc2l0aW9uTG9hZGluZ01hc2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdNw6F5IGNo4bunIHBo4bqjbiBo4buTaSBxdcOhIGzDonUsIHZ1aSBsw7JuZyBraeG7g20gdHJhIGzhuqFpIMSRxrDhu51uZyB0cnV54buBbiBt4bqhbmchJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDIwMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlUmVsb2FkZWQoZXZ0ID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgICAgICB0aGlzLmFmdGVyUmVsb2FkZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlclJlbG9hZGVkKCkgeyB9XHJcblxyXG4gICAgX3VubWFya0xvYWRpbmcoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlyZURhdGFMb2FkZWQoc3VjY2VzczogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoc3VjY2VzcyAmJiB0aGlzLmNydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QucHJvY2Vzc0Jhc2VEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sIHRoaXMucGx1c1VybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0YUN1c3RvbShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkb0dldFJlcXVlc3QoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1c3RvbUdldERhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbylcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NHZXREYXRhKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0h0dHBVbmtub3dFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXREYXRhQ3VzdG9tKGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzR2V0RGF0YShyZXNwb25zZTogUmVzcG9uc2VSZXN1bHQpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xyXG4gICAgICAgIHRoaXMubW9kZWwudG90YWwgPSByZXNwb25zZS50b3RhbFJlY29yZDtcclxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVSZW5kZXJEYXRhU291cmNlKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2gocm93SXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzW3Jvd0l0ZW1bdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZF1dID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZvcmVhY2hJdGVtQWZ0ZXJHZXREYXRhKHJvd0l0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgY29uc3QgbHN0SXRlbUlkID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmcpIHtcclxuICAgICAgICAgICAgLy8gTOG6pXkgcmEgbmjhu69uZyB0cuG6oW5nIHRow6FpIG3DoCBi4bqjbiBnaGkga2jDtG5nIMSRxrDhu6NjIHPhu61hXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c05vdEFsbG93RWRpdHMgPSB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nLnN0YXR1c2VzLmZpbHRlcihwID0+ICFwLm9wdGlvbnMuY2hvUGhlcFN1YSkubWFwKGl0ZW0gPT4gaXRlbS50cmFuZ1RoYWlDb250YWluZXIubWEpO1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLl9pbmRleCA9ICh0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSAtIDEpICogdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2VTaXplICsgMSArIGluZGV4O1xyXG4gICAgICAgICAgICAgICAgLy8gaXRlbS5jdXJyZW50U3RhdGVDb2RlID0gaXRlbS5jdXJyZW50U3RhdGVDb2RlO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5fX2Rpc2FibGVFZGl0ID0gc3RhdHVzTm90QWxsb3dFZGl0cy5pbmRleE9mKGl0ZW0uY3VycmVudFN0YXRlQ29kZSkgPiAtMTtcclxuICAgICAgICAgICAgICAgIGxzdEl0ZW1JZC5wdXNoKGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX2luZGV4ID0gKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMSkgKiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgKyAxICsgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAvLyBpdGVtLmN1cnJlbnRTdGF0ZUNvZGUgPSBpdGVtLmN1cnJlbnRTdGF0ZUNvZGU7XHJcbiAgICAgICAgICAgICAgICBsc3RJdGVtSWQucHVzaChpdGVtLmlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZ05ld1xyXG4gICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgdXNlcklkQ3VycmVudCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldElkKCk7XHJcbiAgICAgICAgICAgIGxldCBmaWVsZEtleSA9ICdpZCcsIGNhbGxCYWNrV2hlbk5vdEhhdmVTdGF0dXM6IChpdGVtU3RhdHVzLCByb3dJdGVtKSA9PiB2b2lkID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IF9iYXNlU2VydmljZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWUgJiYgdGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy5jcmVhdGVUYXNrSW5zdGVhZCkge1xyXG4gICAgICAgICAgICAgICAgZmllbGRLZXkgPSBGaWVsZERlZmluZUhhc1Rhc2s7XHJcbiAgICAgICAgICAgICAgICBjYWxsQmFja1doZW5Ob3RIYXZlU3RhdHVzID0gKGl0ZW1TdGF0dXMsIHJvd0l0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm93SXRlbVtmaWVsZEtleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVN0YXR1cy53b3JrZmxvd0NvZGUgPSBEdW1teVdvcmtmbG93Q29kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVN0YXR1cy50ZXh0VHJhbmdUaGFpID0gJ8SQw6MgdOG6oW8gY8O0bmcgdmnhu4djJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLy8gTOG6pXkgcmEgZGFuaCBzw6FjaCBjw6FjIHRhc2sgZ+G6r24gdsOgbyBi4bqjbiBnaGlcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFUYXNrID0gKGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZUluQmFzZS5nZXRBbGwoXHJcbiAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignc2VydmljZUNvZGUnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2VudGl0eScsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZW50aXR5TmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXknLCBPcGVyYXRvci5pbiwgbHN0SXRlbUlkKVxyXG4gICAgICAgICAgICAgICAgICAgIF0sICdpZCxlbnRpdHlLZXknLCBudWxsLCAnSWdub3JlV0YnXHJcbiAgICAgICAgICAgICAgICApKS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1UYXNrID0gZGF0YVRhc2suZmluZChxID0+IHEuZW50aXR5S2V5ID09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtVGFzaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtW2ZpZWxkS2V5XSA9IGl0ZW1UYXNrLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgX2Jhc2VTZXJ2aWNlID0gdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UuY2hhbmdlRW5kcG9pbnQoX2Jhc2VTZXJ2aWNlKVxyXG4gICAgICAgICAgICAgICAgLmFwcGVuZEluZm9Gb3JXb3JrZmxvdyhcclxuICAgICAgICAgICAgICAgICAgICB1c2VySWRDdXJyZW50LCBkYXRhU291cmNlLCBmaWVsZEtleSwgY2FsbEJhY2tXaGVuTm90SGF2ZVN0YXR1c1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLmFmdGVyUHJvY2Vzc0RhdGFJbkJhc2UocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzZXRTZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJHZXREYXRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2dldFJlZkRhdGFEcm9wZG93bih0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGJlZm9yZVJlbmRlckRhdGFTb3VyY2UoZGF0YXNvdXJjZTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gZGF0YXNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NGb3JlYWNoSXRlbUFmdGVyR2V0RGF0YSh4OiBhbnkpIHtcclxuICAgICAgICAvLyBwcm9jZXNzIHdvcmtmbG93XHJcbiAgICAgICAgaWYgKHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmlzV2YxKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlcklkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoeFsnbWV0YWRhdGFTdGF0dXMnXSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhbJ2NyZWF0ZWRCeSddICE9IGN1cnJlbnRVc2VySWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhbJ21ldGFkYXRhU3RhdHVzJ10gPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0geC5jb3VudE9mQXBwcm92ZSA/IHguY291bnRPZkFwcHJvdmUgKyAxIDogMTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSAnb2JqZWN0SXNVc2VyJyArIGNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVELTExOTggLSBOYW1OSCAtIFRyxrDhu51uZyBo4bujcCBzZXR0aW5nIGNoxrBhIGPDsyBk4buvIGxp4buHdSB0aMOsIGLhu4sgZXhjZXB0aW9uLCBkbyBjw6FjIGLhuqNuIGdoaSB0aMOqbSBt4bubaSB0csaw4bubYyBraGkgYuG6rXQgcXV5IHRyw6xuaCB0aMOsIGtvIGPDsyBk4buvIGxp4buHdSBuw6B5XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ1trZXldLnNvbWUoeCA9PiB4ID09IGN1cnJlbnRVc2VySWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEVORCBVRC0xMTk4XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh4WydtZXRhZGF0YVN0YXR1cyddID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlclByb2Nlc3NEYXRhSW5CYXNlKGRhdGFTb3VyY2U6IGFueVtdID0gW10pIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJHZXREYXRhKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXRSZWZEYXRhRHJvcGRvd24oZGF0YVNvdXJjZSkge1xyXG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyUHJvbWlzZURvbnROZWVkV2FpdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyU2NoZW1hRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYVtLZXlGaWVsZEdldFJlZlR5cGVdID09IEVudW1HZXRSZWZUeXBlLlNFUlZFUikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZvcmNlR2V0RGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtbiAmJiB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4ucmF3Q29sdW1uICYmIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4uZmllbGQgPT0gc2NoZW1hLmZpZWxkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5zZXR0aW5nLmNvbHMuc29tZShpdGVtID0+IGl0ZW0uZmllbGQgPT0gJ3N0cicgKyBmaWVsZCAmJiBpdGVtLnZpc2libGUgIT0gZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gaXRlbURhdGFbZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWRzID0gY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHMgPSBpZHMuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcy5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyVmFsdWUucHVzaChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFyclZhbHVlLnNvbWUocCA9PiBwID09IGN1cnJlbnRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyclZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmdyb3VwQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBhcnJWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5uZXdGaWx0ZXIoc2NoZW1hLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBhcnJWYWx1ZSldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm9yZGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyUHJvbWlzZURvbnROZWVkV2FpdC5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJTY2hlbWFEb250TmVlZFdhaXQucHVzaChzY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4gaXRlbVtzY2hlbWEuZGlzcGxheUZpZWxkSW5HcmlkXSB8fCBpdGVtWydsYWJlbCddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0dldExhYmVsID0gc2NoZW1hLmZ1bmNHZXRMYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IHNjaGVtYS5kYXRhU291cmNlLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0TGFiZWwocmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhcnJQcm9taXNlRG9udE5lZWRXYWl0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJSZXMgPSBhd2FpdCBQcm9taXNlLmFsbChhcnJQcm9taXNlRG9udE5lZWRXYWl0KTtcclxuICAgICAgICAgICAgICAgICAgICBhcnJTY2hlbWFEb250TmVlZFdhaXQuZm9yRWFjaCgoc2NoZW1hLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIGFyclJlc1tpbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihudWxsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZTogYW55W10sIHNjaGVtYTogQ29sdW1uU2NoZW1hQmFzZSwgZGF0YTogYW55W10pIHtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRJbkdyaWRdIHx8IGl0ZW1bJ3RlbiddO1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IHNjaGVtYS5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmdW5jU2V0VmFsdWVSb3cgPSAocm93SXRlbSwgZGF0YSkgPT4geyB9O1xyXG4gICAgICAgIGxldCBmdW5jR2V0UmVmRGF0YVJvdyA9IChyZWZJdGVtcykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVmSXRlbXMubWFwKGl0ZW0gPT4gZnVuY0dldExhYmVsKGl0ZW0pKS5qb2luKGAke3NjaGVtYS5zZXBhcmF0b3J9IGApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3cpIHtcclxuICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93ID0gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdykge1xyXG4gICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVJvdyA9IHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1EYXRhW2ZpZWxkXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkcyA9IGl0ZW1EYXRhW2ZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZHMgPSBpZHMuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbXMgPSBkYXRhLmZpbHRlcihpID0+IGlkcy5zb21lKHEgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIHEpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhpdGVtRGF0YSwgcmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1EYXRhW2ZpZWxkXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IGRhdGEuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKGZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWE6IENvbHVtblNjaGVtYUJhc2UpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogc2NoZW1hLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgdmFsdWVGaWVsZDogc2NoZW1hLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkUGx1czogc2NoZW1hLmZpZWxkUGx1cyxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiBzY2hlbWEuZmllbGRUcmVlLFxyXG4gICAgICAgICAgICBmaWVsZFBhcmVudFRyZWVJdGVtOiBzY2hlbWEuZmllbGRQYXJlbnRUcmVlSXRlbSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiBzY2hlbWEuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBzb3J0RmllbGQ6IHNjaGVtYS5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgIHNvcnREaXI6IHNjaGVtYS5zb3J0RGlyLFxyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGFGaW5pc2g6IHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2hcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZDogc3RyaW5nKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVyZ2VJbmZvVG9Db2x1bW5TY2hlbWEoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5Nb2RlbFNjaGVtYSA9IHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMuZmluZChwID0+IHAuZmllbGQgPT0gY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBjb2wubGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgY29sLmZ1bGxMYWJlbCA9IGNvbHVtbk1vZGVsU2NoZW1hLmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb2wuZGlzcGxheUZpZWxkSW5HcmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmRpc3BsYXlGaWVsZEluR3JpZCA9IGNvbC5kaXNwbGF5RmllbGQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbC5kYXRhVHlwZSA9IHRoaXMuZ2V0RGF0YVR5cGUoY29sdW1uTW9kZWxTY2hlbWEuZGF0YVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREYXRhVHlwZSh0eXBlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlRmllbGRTZWFyY2hUZXh0KCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbC5mdWxsVGV4dFNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5wdXNoKGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLCBzb3VyY2VGaWVsZDogJ19rJyB9KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnMuc3BsaWNlKDAsIDAsIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnNcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=