@eo-sdk/client 11.14.0-rc.4 → 11.14.0-rc.6

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 (43) hide show
  1. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts.map +1 -1
  2. package/app/eo-client/process-state/process-state.component.d.ts +1 -0
  3. package/app/eo-client/process-state/process-state.component.d.ts.map +1 -1
  4. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
  5. package/app/eo-framework/app-shell/app-bar/context-search/context-search.component.d.ts +3 -2
  6. package/app/eo-framework/app-shell/app-bar/context-search/context-search.component.d.ts.map +1 -1
  7. package/app/eo-framework/form-elements/codesystem/codesystem.component.d.ts.map +1 -1
  8. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +10 -8
  9. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts.map +1 -1
  10. package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
  11. package/app/eo-framework/object-form/object-form/form-element/form-element.component.d.ts.map +1 -1
  12. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts +21 -0
  13. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts.map +1 -1
  14. package/app/eo-framework/object-form/object-form/object-form.component.d.ts.map +1 -1
  15. package/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.d.ts +19 -0
  16. package/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.d.ts.map +1 -1
  17. package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
  18. package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +20 -2
  19. package/esm2022/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +2 -2
  20. package/esm2022/app/eo-client/process-state/process-state.component.mjs +8 -7
  21. package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +4 -1
  22. package/esm2022/app/eo-framework/app-shell/app-bar/context-search/context-search.component.mjs +6 -1
  23. package/esm2022/app/eo-framework/form-elements/codesystem/codesystem.component.mjs +8 -6
  24. package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +32 -28
  25. package/esm2022/app/eo-framework/form-elements/organization/organization.component.mjs +4 -4
  26. package/esm2022/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.mjs +2 -2
  27. package/esm2022/app/eo-framework/grid/extensions/reset-filter/reset-filter.component.mjs +3 -4
  28. package/esm2022/app/eo-framework/grid/filters/codesystem-filter.component.mjs +2 -2
  29. package/esm2022/app/eo-framework/grid/filters/organization-filter.component.mjs +3 -3
  30. package/esm2022/app/eo-framework/inbox-details/inbox-details.component.mjs +4 -2
  31. package/esm2022/app/eo-framework/media/media.component.mjs +3 -3
  32. package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +2 -5
  33. package/esm2022/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +57 -14
  34. package/esm2022/app/eo-framework/object-form/object-form/object-form.component.mjs +3 -1
  35. package/esm2022/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.mjs +37 -3
  36. package/esm2022/app/eo-framework/ui/eo-dialog/eo-dialog.component.mjs +2 -2
  37. package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +5 -5
  38. package/fesm2022/eo-sdk-client.mjs +193 -82
  39. package/fesm2022/eo-sdk-client.mjs.map +1 -1
  40. package/package.json +2 -2
  41. package/scss/_yuuvis-components.scss +4 -0
  42. package/styles.css +16 -0
  43. package/styles.scss +14 -0
@@ -778,6 +778,9 @@ let AppSearchComponent = class AppSearchComponent {
778
778
  this.termForm.valueChanges.pipe(tap(res => {
779
779
  this.query.term = res.term;
780
780
  }), debounceTime(1000), untilDestroyed(this)).subscribe(res => {
781
+ if (this.query.term?.startsWith('\"') && !this.query.term?.endsWith('\"')) {
782
+ this.query.term += "\"";
783
+ }
781
784
  this.autocompleteSuggest(this.query.term);
782
785
  });
783
786
  }
@@ -831,4 +834,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
831
834
  }], onExecuteSearch: [{
832
835
  type: Output
833
836
  }] } });
834
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hcHAtc2hlbGwvYXBwLWJhci9hcHAtc2VhcmNoL2FwcC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYXBwLXNoZWxsL2FwcC1iYXIvYXBwLXNlYXJjaC9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsUUFBUSxJQUFJLGtCQUFrQixFQUM5QixJQUFJLElBQUksY0FBYyxFQUN0QixFQUFFLElBQUksWUFBWSxFQUNsQixPQUFPLEVBRVAsR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUVwRixPQUFPLEVBUUwsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBSVgsV0FBVyxFQUlYLEtBQUssRUFDTixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUMsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc1RCxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFrQjtJQTJEN0IsSUFBSSxRQUFRLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsU0FB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QyxXQUFXLEVBQUUsQ0FBQztJQUM1QyxDQUFDOzhHQTE0QlUsa0JBQWtCO2tHQUFsQixrQkFBa0IseUxBS0UsV0FBVyx1WUN0RTVDLGl0dUJBa2JBOztBRGpYYSxrQkFBa0I7SUFUOUIsWUFBWSxFQUFFO0dBU0Ysa0JBQWtCLENBMjRCOUI7OzJGQTM0Qlksa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLGVBQWUsaUJBR1YsaUJBQWlCLENBQUMsSUFBSTs0ZUFTUSxTQUFTO3NCQUFyRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUM7Z0JBQ2pCLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDRixXQUFXO3NCQUFoQyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ0UsYUFBYTtzQkFBbEMsU0FBUzt1QkFBQyxTQUFTO2dCQUNFLFdBQVc7c0JBQWhDLFNBQVM7dUJBQUMsU0FBUztnQkFpRGIsZUFBZTtzQkFEckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGZvcmtKb2luIGFzIG9ic2VydmFibGVGb3JrSm9pbixcbiAgZnJvbSBhcyBvYnNlcnZhYmxlRnJvbSxcbiAgb2YgYXMgb2JzZXJ2YWJsZU9mLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIHRhcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBwbHVjaywgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdmlnYXRpb25FeHRyYXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7T2JqZWN0Rm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnRcbn0gZnJvbSAnLi4vLi4vLi4vb2JqZWN0LWZvcm0vaW5kZXgnO1xuaW1wb3J0IHtGb3JtQnVpbGRlciwgTmdGb3JtfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0xvY2FsZURhdGVQaXBlfSBmcm9tICcuLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9waXBlcy9sb2NhbGUtZGF0ZS5waXBlJztcbmltcG9ydCB7QXBwU2VhcmNoU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvc2VhcmNoL2FwcC1zZWFyY2guc2VydmljZSc7XG5pbXBvcnQge1xuICBDYXBhYmlsaXRpZXMsXG4gIENhcGFiaWxpdGllc1NlcnZpY2UsXG4gIExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gIExvZ2dlcixcbiAgTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gIE9iamVjdFR5cGUsXG4gIFF1ZXJ5U2NvcGUsXG4gIFJhbmdlVmFsdWUsXG4gIFNlYXJjaEZpbHRlcixcbiAgU2VhcmNoUXVlcnksXG4gIFNlYXJjaFNlcnZpY2UsXG4gIFNlYXJjaFN0YXRlLFxuICBTdG9yZWRRdWVyaWVzU2VydmljZSxcbiAgU3RvcmVkUXVlcnksXG4gIFN5c3RlbVNlcnZpY2UsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlLFxuICBVdGlsc1xufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtBdXRvQ29tcGxldGV9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtDb250ZXh0VHlwZSwgSWR4U2VhcmNofSBmcm9tICcuL2FwcC1zZWFyY2guaW50ZXJmYWNlJztcbmltcG9ydCB7WXZjT3ZlcmxheVJlZiwgWXZjT3ZlcmxheVNlcnZpY2V9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSBcIkBuZ25lYXQvdW50aWwtZGVzdHJveVwiO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VvLWFwcC1zZWFyY2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC1zZWFyY2guY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxuICAvLyB0b2RvOiBhcHBseSBvblB1c2ggY2hhbmdlIGRldGVjdGlvbiAoYWdnIHNlYXJjaCByZXN1bHQgcmlnaHQgbm93IGRvZXNuJ3QgdXBkYXRlKVxuICAvLyBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBcHBTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIFBBUkFNUyA9IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TO1xuICBPUEVSQVRPUiA9IFNlYXJjaEZpbHRlci5PUEVSQVRPUjtcbiAgcXVlcnlTY29wZTogUXVlcnlTY29wZTtcblxuICBAVmlld0NoaWxkKCd0cGxTZWFyY2gnLCB7cmVhZDogVGVtcGxhdGVSZWZ9KSB0cGxTZWFyY2g6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0Jykgc2VhcmNoSW5wdXQ6IEF1dG9Db21wbGV0ZTtcbiAgQFZpZXdDaGlsZCgneHBpbnB1dCcpIGV4cGVydElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpZHhmb3JtJykgaW5kZXhkYXRhRm9ybTogT2JqZWN0Rm9ybUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY3R4Zm9ybScpIGNvbnRleHRGb3JtOiBPYmplY3RGb3JtQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX292ZXJsYXlSZWY/OiBZdmNPdmVybGF5UmVmO1xuICBwcml2YXRlIHF1ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcXVlcnlTdGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBxdWVyeTogU2VhcmNoUXVlcnk7XG4gIHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlO1xuICBjYXBhYmlsaXRpZXM6IENhcGFiaWxpdGllcztcbiAgYWN0aXZlVGFiSWQ/OiBzdHJpbmc7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG5cbiAgaXNTdG9yZWRRdWVyeTogYm9vbGVhbjtcbiAgaXNPd25RdWVyeSA9IGZhbHNlO1xuICBvYmplY3RUeXBlR3JvdXBzID0gW107XG4gIHR5cGVHcm91cFRyZWUgPSBbXTtcbiAgYXV0b2NvbXBsZXRlUmVzdWx0czogc3RyaW5nW107XG5cbiAgaWR4U2VhcmNoOiBJZHhTZWFyY2g7XG4gIGN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZTtcblxuICBleHBlcnRNb2RlUXVlcnlFbXB0eSA9IGZhbHNlO1xuICBleHBlcnRNb2RlU3VwcG9ydCA9IHtcbiAgICBiYXNlUGFyYW1zOiBbXSxcbiAgICBzZWxlY3RlZEdyb3VwOiBudWxsLFxuICAgIHNlbGVjdGVkVHlwZTogbnVsbFxuICB9O1xuXG4gIGZpbHRlcnNNb2RlbCA9IHt9O1xuICBhZ2dyZWdhdGlvbnNNb2RlbCA9IHt9O1xuICBkYXRlUGlwZTogTG9jYWxlRGF0ZVBpcGU7XG4gIHN5c1Jvb3RDb250ZXh0ID0ge1xuICAgIGlkOiBudWxsLFxuICAgIG5hbWU6IENvbnRleHRUeXBlLnN5c3Jvb3QsXG4gICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmFkZC50aXRsZS5sb2NhdGlvbi5jb21tb24nKSxcbiAgICBzaXR1YXRpb246ICdTRUFSQ0gnLFxuICAgIG1vZGU6ICdDT05URVhUJyxcbiAgICBjb250ZXh0Rm9ybU9wdGlvbnM6IHtcbiAgICAgIGZvcm1Nb2RlbDoge25hbWU6IENvbnRleHRUeXBlLnN5c3Jvb3R9XG4gICAgfVxuICB9O1xuXG4gIF9zZWxlY3RlZDogbnVtYmVyID0gbnVsbDtcblxuICBvYmplY3RUeXBlR3JvdXBzU3RvcmFnZUtleSA9ICdlby5hcHAuc2VhcmNoLm9iamVjdC50eXBlLmdyb3VwLnNvcnRlZExpc3QnO1xuICB0ZXJtRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIHRlcm06IFtdXG4gIH0pO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25FeGVjdXRlU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBzZXQgc2VsZWN0ZWQoaW5kZXgpIHtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkID09PSBpbmRleCA/IG51bGwgOiBpbmRleDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXQgc3RvcmVkUXVlcnkoKTogU3RvcmVkUXVlcnkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5IGFzIFN0b3JlZFF1ZXJ5O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTZWFyY2hTZXJ2aWNlOiBBcHBTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheTogWXZjT3ZlcmxheVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdG9yZWRRdWVyaWVzU2VydmljZTogU3RvcmVkUXVlcmllc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYXBhYmlsaXR5U2VydmljZTogQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcbiAgKSB7XG5cbiAgICB0aGlzLmRhdGVQaXBlID0gbmV3IExvY2FsZURhdGVQaXBlKHRyYW5zbGF0ZSk7XG5cbiAgICB0aGlzLmV4cGVydE1vZGVTdXBwb3J0LmJhc2VQYXJhbXMgPSBPYmplY3Qua2V5cyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykubWFwKGsgPT4ge1xuICAgICAgbGV0IGRhdGEgPSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1trXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5nbG9iYWwuYmFzZXBhcmFtLicgKyBkYXRhKSxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRFRF0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNcbiAgICApLm1hcChrID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1trXSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLicgKyBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVEXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1xuICAgICkubWFwKGsgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUuJyArIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba11cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTUlNRVRZUEVHUk9VUF0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5Lk1JTUVUWVBFR1JPVVBfQlVDS0VUU1xuICAgICkubWFwKGsgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBTZWFyY2hRdWVyeS5NSU1FVFlQRUdST1VQX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IFNlYXJjaFF1ZXJ5Lk1JTUVUWVBFR1JPVVBfQlVDS0VUU1trXVxuICAgICAgfTtcbiAgICB9KS5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5GSUxFU0laRV0gPSBPYmplY3Qua2V5cyhcbiAgICAgIFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLmZpbGVzaXplLicgKyBTZWFyY2hRdWVyeS5GSUxFX1NJWkVfQlVDS0VUU1trXVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgb25UYWJDaGFuZ2UodGFiSWQ6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWJJZDtcbiAgICBpZiAodGFiSWQgPT09ICdyZXN0cmljdFR5cGUnKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICBzdWI6IHtcbiAgICAgICAgICAgIGNvbnRleHRmb2xkZXJ0eXBlOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0Q3JlYXRlZCcpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIGNyZWF0ZWQ6IHt9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRhYklkID09PSAncmVzdHJpY3RNb2RpZmljYXRpb24nKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHt9LFxuICAgICAgICBtb2RpZmllZDoge31cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGFiSWQgPT09ICdyZXN0cmljdEZpbGUnKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0QWdncyh7XG4gICAgICAgIHR5cGU6IHt9LFxuICAgICAgICBtaW1ldHlwZWdyb3VwOiB7fSxcbiAgICAgICAgZmlsZXNpemU6IHt9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUXVlcnkocXVlcnk6IFNlYXJjaFF1ZXJ5KSB7XG4gICAgLy8gSU1QT1JUQU5UOiBuZXZlciBjaGFuZ2UgdGhlIGxvY2FsIHF1ZXJ5IGRpcmVjdGx5XG4gICAgLy8gdXNlIHNlYXJjaFNlcnZpY2UsIHNvIGV2ZXJ5IGNvbXBvbmVudHMgc3Vic2NyaWJlZCB0byB0aGUgcXVlcnlcbiAgICAvLyB3aWxsIGdldCB0aGUgbmV3IHZhbHVlXG4gICAgdGhpcy5xdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuY3VycmVudENvbnRleHRGb2xkZXJOYW1lID0gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoXG4gICAgICA/IHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdLm5hbWVcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLmlzU3RvcmVkUXVlcnkgPSBxdWVyeSBpbnN0YW5jZW9mIFN0b3JlZFF1ZXJ5O1xuXG4gICAgaWYgKHRoaXMuaXNTdG9yZWRRdWVyeSkge1xuICAgICAgY29uc3QgdXNlciA9IHRoaXMudXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgIHRoaXMuaXNPd25RdWVyeSA9XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkudXNlci50b0xvd2VyQ2FzZSgpID09PSB1c2VyLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykuZm9yRWFjaChrID0+IHRoaXMucHJvY2Vzc0ZpbHRlcnMoaykpO1xuICAgIC8vIGlmIHdlIGhhdmUgYW4gaW5kZXhkYXRhIHNlYXJjaCB1c2luZyBhIGNvbnRleHQgYnV0IHRoZSBjb250ZXh0IHdhcyByZW1vdmVkXG4gICAgaWYgKFxuICAgICAgIXRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCAmJlxuICAgICAgdGhpcy5pZHhTZWFyY2ggJiZcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9uc1xuICAgICkge1xuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zID0gbnVsbDtcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb2xkZXJUeXBlID0gbnVsbDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpbHRlckZyb21Gb3JtRGF0YSgpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG5cbiAgICAvLyBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gc2V0dXAgYW4gaW5kZXhkYXRhIHNlYXJjaFxuICAgIGNvbnN0IGFjdGl2YXRlSW5kZXhkYXRhU2VhcmNoID0gdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID09PSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuVFlQRVNfU0VUXG4gICAgICB8fCB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPT09IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5DT05URVhUX0ZPTERFUl9TRVQ7XG4gICAgaWYgKGFjdGl2YXRlSW5kZXhkYXRhU2VhcmNoKSB7XG4gICAgICAvLyBoYXZpbmcganVzdCBvbmUgdGFyZ2V0IHR5cGUgYW5kIGEgY29udGV4dCB0eXBlIHNldHVwIG1lYW5zLCB0aGF0IHdlIGFyZSB1c2luZyBpbmRleGRhdGEgc2VhcmNoXG4gICAgICB0aGlzLmluZGV4ZGF0YVNlYXJjaChcbiAgICAgICAgdGhpcy5xdWVyeS50eXBlc1swXSxcbiAgICAgICAgdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoID4gMCA/IHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdIDogbnVsbFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycyh0aGlzLnF1ZXJ5KS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyBoYXZpbmcganVzdCBvbmUgdGFyZ2V0IHR5cGUgYW5kIGluZGV4ZGF0YSBmaWx0ZXJzIGFsc28gbWVhbnMsIHRoYXQgd2UgYXJlIHVzaW5nIGluZGV4ZGF0YSBzZWFyY2hcbiAgICAgIHRoaXMuaW5kZXhkYXRhU2VhcmNoKHRoaXMucXVlcnkudHlwZXNbMF0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPiAxKSB7XG4gICAgICAvLyByZXNldCBpbmRleGRhdGEgc2VhcmNoIG90aGVyd2lzZSwgYmVjYXVzZSB0aGUgY3VycmVudCBxdWVyeSBtYXkgYmUgcmVzZXQgZnJvbSBvdXQgc2lkZSAoZS5nLiBieSBhIHN0b3JlZCBxdWVyeSlcbiAgICAgIHRoaXMuaWR4U2VhcmNoID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocXVlcnkuZXhwZXJ0TW9kZSkge1xuICAgICAgdGhpcy50eXBlR3JvdXBUcmVlID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmJ1aWxkVHlwZUdyb3VwVHJlZSgpO1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5U2NvcGUgPSBxdWVyeS5zY29wZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RPYmplY3RUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICAvKiogc2V0IHVwIHRoZSByaWdodCB0eXBlIGZpbHRlciBpZiBub3QgYWxyZWFkeSBkb25lICovXG4gICAgY29uc3QgcXVlcnlUeXBlc0xlbmd0aCA9XG4gICAgICB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA+IDEgfHwgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDA7XG4gICAgY29uc3QgcXVlcnlUeXBlc0xlbmd0aEFuZE5hbWUgPVxuICAgICAgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5xdWVyeS50eXBlc1swXS5uYW1lICE9PSB0eXBlLm5hbWU7XG4gICAgaWYgKHF1ZXJ5VHlwZXNMZW5ndGggfHwgcXVlcnlUeXBlc0xlbmd0aEFuZE5hbWUpIHtcbiAgICAgIC8vIHNldHRpbmcgb2JqZWN0IHR5cGVzIHdpbGwgZW1pdCBhIG5ldyBxdWVyeS4gVGhpcyB3aWxsIHRoZW4gdGFrZSBjYXJlIG9mXG4gICAgICAvLyBzZXR0aW5nIHVwIHRoZSBpbmRleGRhdGEgZm9ybVxuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldFF1ZXJ5VHlwZXMoW3R5cGVdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBpbmRleGRhdGEgc2VhcmNoIGZvciBhIGdpdmVuIG9iamVjdCB0eXBlXG4gICAqIEBwYXJhbSB0eXBlIC0gYW4gb2JqZWN0IHR5cGVcbiAgICogQHBhcmFtIGNvbnRleHRGb2xkZXJUeXBlIC0gY29udGV4dCBmb2xkZXIgdHlwZVxuICAgKi9cbiAgcHVibGljIGluZGV4ZGF0YVNlYXJjaCh0eXBlOiBPYmplY3RUeXBlLCBjb250ZXh0Rm9sZGVyVHlwZT86IE9iamVjdFR5cGUpIHtcbiAgICBpZiAoIXR5cGUgfHwgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnF1ZXJ5LnR5cGVzWzBdLm5hbWUgPT09IHR5cGUubmFtZSkge1xuICAgICAgLyoqIGV2ZW4gaWYgd2Ugc2VsZWN0IGEgdHlwZSB0aGF0IGlzIGFscmVhZHkgc2VsZWN0ZWQsIHdlIG5lZWQgdG8gY2FsbCBhZ2dyZWdhdGUgYXMgdGhlcmUgbWF5IGJlIGNvbnRleHQgdHlwZXMgaW52b2x2ZWQgKi9cbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgIHN1Yjoge1xuICAgICAgICAgICAgY29udGV4dGZvbGRlcnR5cGU6IHt9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCB0cnVlKTtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXJpdmVkVHlwZXMgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZXMoKS5maWx0ZXIodCA9PiB0LnN1cGVydHlwZXMuaW5jbHVkZXModHlwZS5xbmFtZSkpO1xuICAgIGNvbnN0IGlzUm9vdFR5cGUgPSAhIWRlcml2ZWRUeXBlcy5maW5kKHQgPT4gdC5wYXJlbnR0eXBlcy5pbmNsdWRlcygnc3lzcm9vdCcpKSB8fCAhIXRoaXMuYXBwU2VhcmNoU2VydmljZS50eXBlc0FsbG93ZWRVbmRlclN5c3Jvb3QuZmluZChyVCA9PiByVC5xbmFtZSA9PT0gdHlwZS5xbmFtZSk7XG5cbiAgICB0aGlzLmlkeFNlYXJjaCA9IHtcbiAgICAgIHR5cGUsXG4gICAgICBjb250ZXh0Rm9sZGVyVHlwZSxcbiAgICAgIGNvbnRleHRNb2RlbHM6IGlzUm9vdFR5cGUgPyBbdGhpcy5zeXNSb290Q29udGV4dF0gOiBbXSxcbiAgICAgIGZvcm1PcHRpb25zOiBudWxsXG4gICAgfTtcblxuICAgIC8qKiBmZXRjaCBjb250ZXh0IHR5cGUgbW9kZWxzICovXG4gICAgaWYgKHR5cGUuYWxsb3dlZGNvbnRleHR0eXBlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRvRmV0Y2ggPSBbXTtcbiAgICAgIHR5cGUuYWxsb3dlZGNvbnRleHR0eXBlcy5mb3JFYWNoKGNvbnRleHRUeXBlID0+IHtcbiAgICAgICAgY29uc3Qgb2JqVHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKGNvbnRleHRUeXBlLm5hbWUpO1xuICAgICAgICBpZiAob2JqVHlwZSkge1xuICAgICAgICAgIHRvRmV0Y2gucHVzaChcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlRm9ybShcbiAgICAgICAgICAgICAgY29udGV4dFR5cGUubmFtZSxcbiAgICAgICAgICAgICAgJ1NFQVJDSCcsXG4gICAgICAgICAgICAgICdDT05URVhUJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRvRmV0Y2gubGVuZ3RoKSB7XG4gICAgICAgIG9ic2VydmFibGVGb3JrSm9pbih0b0ZldGNoKS5zdWJzY3JpYmUoZm9ybU1vZGVscyA9PiB7XG4gICAgICAgICAgLyoqIGFic3RyYWN0IGNvbnRleHQgdHlwZXMgc2hvdWxkIG5vdCBiZSB1c2VkICovXG4gICAgICAgICAgdGhpcy5hZGRDb250ZXh0TW9kZWwoZm9ybU1vZGVscyk7XG4gICAgICAgICAgLyoqIGlmIHRoZXJlIHdhcyBhIGNvbnRleHQgdHlwZSBwcm92aWRlZCBieSB0aGUgcXVlcnksIHdlJ2xsIHNldHVwIHRoZSByaWdodCBtb2RlbCBhcyB3ZWxsICovXG4gICAgICAgICAgaWYgKGNvbnRleHRGb2xkZXJUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMuZmluZChcbiAgICAgICAgICAgICAgbSA9PiBtLm5hbWUgPT09IGNvbnRleHRGb2xkZXJUeXBlLm5hbWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbnRleHQobW9kZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Rm9sZGVyVHlwZS5uYW1lID09PSBDb250ZXh0VHlwZS5zeXNyb290KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29udGV4dCh0aGlzLnN5c1Jvb3RDb250ZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8qKiB0aGUgcHJvdmlkZWQgY29udGV4dCB0eXBlIGRvZXMgbm90IGV4aXN0IGFueSBtb3JlLCBzbyBqdXN0IHJlbW92ZSBpdCAqL1xuICAgICAgICAgICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9sZGVyVHlwZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZm9ybURhdGE7XG4gICAgbGV0IGlkeEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcbiAgICBpZiAoaWR4RmlsdGVycyAmJiBpZHhGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIHNldCB1cCBmb3JtIGRhdGEgZnJvbSBpbmRleGRhdGEgcXVlcnkgZmlsdGVyc1xuICAgICAgZm9ybURhdGEgPSBpZHhGaWx0ZXJzO1xuICAgIH1cblxuICAgIGNvbnN0IG9iamVjdFR5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZSh0eXBlLm5hbWUpO1xuICAgIGlmIChvYmplY3RUeXBlKSB7XG4gICAgICB0aGlzLnN5c3RlbVNlcnZpY2VcbiAgICAgICAgLmdldE9iamVjdFR5cGVGb3JtKHR5cGUubmFtZSwgJ1NFQVJDSCcpXG4gICAgICAgIC5zdWJzY3JpYmUobW9kZWwgPT4ge1xuICAgICAgICAgIHRoaXMuaWR4U2VhcmNoLmZvcm1PcHRpb25zID0ge1xuICAgICAgICAgICAgZm9ybU1vZGVsOiBtb2RlbCxcbiAgICAgICAgICAgIGRhdGE6IGZvcm1EYXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUXVlcnlTdGF0ZShxdWVyeVN0YXRlOiBTZWFyY2hTdGF0ZSkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMucXVlcnlTdGF0ZSA9IHF1ZXJ5U3RhdGU7XG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoKSB7XG4gICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0QWdncmVnYXRpb25zID0ge307XG4gICAgICBpZiAocXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnMuY29udGV4dFR5cGUuc2l6ZSkge1xuICAgICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0QWdncmVnYXRpb25zID0gdGhpcy5idWlsZENvbnRleHRBZ2dyZWdhdGlvbnMocXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnMuY29udGV4dFR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNhdmUgYWdncmVnYXRpb25zIHZhbHVlc1xuICAgIGlmICghdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFXSB8fCAhdGhpcy5xdWVyeS50eXBlcy5sZW5ndGggfHwgcXVlcnlTdGF0ZS5sYXN0Q2hhbmdlICE9PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEVdID0gbmV3IE1hcChxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy50eXBlKTtcbiAgICB9XG5cbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRFRCwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKTtcbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRUQsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSk7XG4gICAgdGhpcy5zeW5jQWdncmVnYXRpb25zKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1JTUVUWVBFR1JPVVAsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTik7XG4gICAgdGhpcy5zeW5jQWdncmVnYXRpb25zKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkZJTEVTSVpFLCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpO1xuICB9XG5cbiAgYnVpbGRDb250ZXh0QWdncmVnYXRpb25zKGNvbnRleHRUeXBlKSB7XG4gICAgbGV0IGNvbnRleHRBZ2dyZWdhdGlvbnMgPSB7fTtcbiAgICBjb250ZXh0VHlwZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiBjb250ZXh0QWdncmVnYXRpb25zW2tleV0gPSB2YWx1ZSk7XG4gICAgcmV0dXJuIGNvbnRleHRBZ2dyZWdhdGlvbnM7XG4gIH1cblxuICBwcm9jZXNzRmlsdGVycyhrOiBzdHJpbmcpIHtcbiAgICBsZXQgZjogU2VhcmNoRmlsdGVyID0gdGhpcy5xdWVyeS5maWx0ZXJzLmZpbmQoZmYgPT4gZmYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2tdKTtcbiAgICBpZiAoIWYpIHtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2tdXSA9IHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIG11bHRpVmFsdWU6IFtdLFxuICAgICAgICBpbm5lclZhbHVlOiBbXVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIXRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldIHx8XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5maWx0ZXIgIT09IGZcbiAgICApIHtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldID0ge307XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5maWx0ZXIgPSBmO1xuICAgICAgbGV0IHZhbHVlOiBhbnkgPVxuICAgICAgICB0eXBlb2YgZi5maXJzdFZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGYub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlxuICAgICAgICAgID8gSlNPTi5wYXJzZShmLmZpcnN0VmFsdWUpXG4gICAgICAgICAgOiB0eXBlb2YgZi5maXJzdFZhbHVlICE9PSAnYm9vbGVhbicgPyBbZi5maXJzdFZhbHVlXSA6IGYuZmlyc3RWYWx1ZTtcbiAgICAgIGlmIChmLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0ubXVsdGlWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS52YWx1ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRFRCB8fFxuICAgICAgICAgIGYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVEXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gbmV3IFJhbmdlVmFsdWUoZi5vcGVyYXRvciwgZi5maXJzdFZhbHVlLCBmLnNlY29uZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5tdWx0aVZhbHVlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmlubmVyVmFsdWUgPVxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5ID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0ubGFiZWwgPSBbXTtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmlubmVyVmFsdWUuZm9yRWFjaCgodjogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkNSRUFUT1IgfHxcbiAgICAgICAgICBmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFUlxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5sYWJlbFtpXSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0ubGFiZWxbaV0gPSBvYnNlcnZhYmxlT2YoXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZpbHRlcihmLCB2KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN5bmNBZ2dyZWdhdGlvbnMobmFtZSwgb3BlcmF0b3IpIHtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW25hbWVdLmZvckVhY2goYWdnID0+IHtcbiAgICAgIGxldCBhID0gdGhpcy5xdWVyeVN0YXRlLmFnZ3JlZ2F0aW9uc1tuYW1lXS5maW5kKGFhID0+IGFhLmtleSA9PT0gYWdnLmtleSk7XG4gICAgICBpZiAoYSAmJiBhLnZhbHVlICE9PSBhZ2cudmFsdWUpIHtcbiAgICAgICAgYWdnLnZhbHVlID0gYS52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIWEgJiYgdGhpcy5xdWVyeVN0YXRlLmxhc3RDaGFuZ2UgIT09IG5hbWUpIHtcbiAgICAgICAgYWdnLnZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgICBhZ2cuc2VsZWN0ZWQgPSB0aGlzLmlzRmlsdGVyQWN0aXZlKG5hbWUsIG9wZXJhdG9yLCBhZ2cua2V5KTtcbiAgICAgIGFnZy5zYXZlZCA9ICFhICYmIHRoaXMucXVlcnlTdGF0ZS5sYXN0Q2hhbmdlID09PSBuYW1lO1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyRmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZVJlc3RyaWN0aW9uKGZpbHRlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbZmlsdGVyLnByb3BlcnR5XSkge1xuICAgICAgbGV0IGFnZyA9IHRoaXMuYWdncmVnYXRpb25zTW9kZWxbZmlsdGVyLnByb3BlcnR5XS5maW5kKGEgPT4gYS5rZXkgPT09IHZhbHVlKTtcbiAgICAgIHJldHVybiBhZ2cubGFiZWw7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGNyZWF0ZURhdGVSZXN0cmljdGlvbihmaWx0ZXI6IFNlYXJjaEZpbHRlcikge1xuICAgIHN3aXRjaCAoZmlsdGVyLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRTpcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYGVvLnNlYXJjaC5hZ2cudGltZS4ke2ZpbHRlci5maXJzdFZhbHVlfWApO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUw6XG4gICAgICAgIHJldHVybiBgPSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydERhdGUnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5URVJWQUxfSU5DTFVERV9CT1RIOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9IC0gJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuc2Vjb25kVmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkdSRUFURVJfT1JfRVFVQUw6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guYWdnLnRpbWUuc3Bhbi5zaW5jZScpfSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydCcpfWA7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5MRVNTX09SX0VRVUFMOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4udW50aWwnKX0gJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnQnKX1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGAoJHtmaWx0ZXIub3BlcmF0b3J9KSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydCcpfWA7XG4gICAgfVxuICB9XG5cbiAgcmVzb2x2ZUxhYmVsKG1vZGVsOiBhbnksIHZhbHVlOiBhbnlbXSkge1xuICAgIG1vZGVsLmxhYmVsLmZvckVhY2goKGwsIGkpID0+IGwubmV4dCh2YWx1ZVtpXS50aXRsZSkpO1xuICB9XG5cbiAgcmVzb2x2ZVNlbGVjdGlvbihhZ2dzOiBhbnlbXSwga2V5OiBzdHJpbmcsIHNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGFnZ3NcbiAgICAgIC5maWx0ZXIoYSA9PiBzZWxlY3RlZCA/IGEua2V5ICE9PSBrZXkgJiYgYS5zZWxlY3RlZCA6IGEua2V5ID09PSBrZXkgfHwgYS5zZWxlY3RlZClcbiAgICAgIC5tYXAoYSA9PiBhLmtleSk7XG4gIH1cblxuICByZXNldEV4cGVydE1vZGVJbnB1dCgpIHtcbiAgICB0aGlzLnF1ZXJ5LnRlcm0gPSAnJztcbiAgICB0aGlzLnRlcm1Gb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgdGVybTogJydcbiAgICB9KTtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRXhwZXJ0TW9kZSgpIHtcbiAgICBpZiAodGhpcy50eXBlR3JvdXBUcmVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy50eXBlR3JvdXBUcmVlID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmJ1aWxkVHlwZUdyb3VwVHJlZSgpO1xuICAgIH1cbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlRXhwZXJ0TW9kZSgpO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuY2hhbmdlU2VhcmNoSW5wdXRGb2N1cygpO1xuICB9XG5cbiAgcHVibGljIHNldFF1ZXJ5U2NvcGUoc2NvcGU6IFF1ZXJ5U2NvcGUpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0UXVlcnlTY29wZShzY29wZSk7XG4gIH1cblxuICBwdWJsaWMgeHBTZWxlY3RHcm91cChncm91cCkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xuICAgIHRoaXMuZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB4cFNlbGVjdFR5cGUodHlwZSkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlID0gdHlwZTtcbiAgfVxuXG4gIHB1YmxpYyB4cEFkZFRvVGVybShzdHIpIHtcbiAgICBsZXQgdGVybTtcbiAgICBpZiAoIXRoaXMucXVlcnkudGVybSkge1xuICAgICAgdGVybSA9IHN0cjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVybSA9IHRoaXMucXVlcnkudGVybSArICcgJyArIHN0cjtcbiAgICB9XG4gICAgdGhpcy5xdWVyeS50ZXJtID0gdGVybSArICc6JztcbiAgICB0aGlzLmV4cGVydElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVUeXBlKF90eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgLy8gZG8gbm90IGRpcmVjdGx5IHRvZ2dsZSBfdHlwZSBvbiB0aGUgcXVlcnksIGluc3RlYWQgdXNlIHRoZVxuICAgIC8vIHNlYXJjaFNlcnZpY2UgdG8gdXBkYXRlIHRoZSBxdWVyeSBzdG9yZVxuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVRdWVyeVR5cGUoX3R5cGUpO1xuICB9XG5cbiAgcHVibGljIGlzVHlwZUFjdGl2ZShfdHlwZTogT2JqZWN0VHlwZSkge1xuICAgIHJldHVybiAhIXRoaXMucXVlcnkudHlwZXMuZmluZCh0ID0+IHQuaWQgPT09IF90eXBlLmlkKTtcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0aW9uQ291bnQoX3R5cGU6IE9iamVjdFR5cGUpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy50eXBlLmdldChfdHlwZS5uYW1lKSB8fCAnJztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSkge1xuICAgIGlmIChrZXkgaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICByZXR1cm4gbmV3IFNlYXJjaEZpbHRlcihmaWx0ZXJUeXBlLCBrZXkub3BlcmF0b3IsIGtleS5maXJzdFZhbHVlLCBrZXkuc2Vjb25kVmFsdWUsIHt0aW1lOiBrZXkub3BlcmF0b3IgIT09IHRoaXMuT1BFUkFUT1IuRVFVQUwsIHRpbWV6b25lOiBmYWxzZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFNlYXJjaEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RmlsdGVyKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnksIGZvcm0/OiBOZ0Zvcm0pIHtcbiAgICBsZXQgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICBsZXQgZW1wdHkgPSB0aGlzLmlzRW1wdHkoZmlsdGVyKTtcbiAgICBsZXQgYWN0aXZlRmlsdGVyID0gdGhpcy5xdWVyeS5maWx0ZXJzLmZpbmQoZmYgPT4gZmYucHJvcGVydHkgPT09IGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgbGV0IGR1cGxpY2F0ZSA9IHRoaXMuaXNGaWx0ZXJBY3RpdmUoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG5cbiAgICBpZiAoZW1wdHkgJiYgYWN0aXZlRmlsdGVyICYmIGFjdGl2ZUZpbHRlci5vcGVyYXRvciAhPT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVtb3ZlUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKCFlbXB0eSAmJiAhZHVwbGljYXRlKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWRkUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRmlsdGVyKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnksIHNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgbGV0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG4gICAgaWYgKGZpbHRlclR5cGUgPT09IHRoaXMuUEFSQU1TLkZJTEVTSVpFKSB7XG4gICAgICBsZXQgZm9sZGVyRmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcignZm9sZGVyJywgJ2VxJywgZmFsc2UpO1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5RmlsdGVycyhbZmlsdGVyLCBmb2xkZXJGaWx0ZXJdLCAhc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlGaWx0ZXIoZmlsdGVyLCAhc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0VtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZWFyY2hGaWx0ZXIpICYmXG4gICAgICAgIHRoaXMuaXNFbXB0eSh2YWx1ZS5maXJzdFZhbHVlKSAmJlxuICAgICAgICB0aGlzLmlzRW1wdHkodmFsdWUuc2Vjb25kVmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaXNGaWx0ZXJBY3RpdmUoZmlsdGVyVHlwZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCBrZXk6IGFueSkge1xuICAgIGxldCBmID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5tYXRjaChmLnByb3BlcnR5LCBmLm9wZXJhdG9yLCBmLmZpcnN0VmFsdWUsIGYuc2Vjb25kVmFsdWUpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZpbHRlcihtb2RlbDogYW55LCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG1vZGVsLmlubmVyVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBtb2RlbC5pbm5lclZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGxldCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKG1vZGVsLmZpbHRlci5wcm9wZXJ0eSwgbW9kZWwuZmlsdGVyLm9wZXJhdG9yLCBtb2RlbC5pbm5lclZhbHVlLmZpbHRlcihmID0+IGYgIT09IHZhbHVlKSk7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWRkUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlbW92ZVF1ZXJ5RmlsdGVyKG1vZGVsLmZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdXRvY29tcGxldGVTdWdnZXN0KGV2dD8pIHtcbiAgICBsZXQgdiA9IFtdO1xuICAgIC8vIGFsc28gdHJpZ2dlciBhZ2dyZWdhdGlvbnMgc2VhcmNoXG4gICAgdGhpcy5hdXRvY29tcGxldGVTZWxlY3QoKTtcbiAgICBpZiAoZXZ0KSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2VcbiAgICAgICAgLmF1dG9jb21wbGV0ZShldnQpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChyZXMgPT4gb2JzZXJ2YWJsZUZyb20ocmVzKS5waXBlKHBsdWNrKCd2YWx1ZScpKSkpXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHYucHVzaChyZXMpLCAoKSA9PiB7IH0sICgpID0+ICh0aGlzLmF1dG9jb21wbGV0ZVJlc3VsdHMgPSB2KVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGV4cGVydFRlcm1DaGFuZ2VkKCkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhdXRvY29tcGxldGVTZWxlY3QoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgYXV0b2NvbXBsZXRlUGFzdGUoZSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5xdWVyeS50ZXJtID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVNlbGVjdCgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGVTZWFyY2goKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnF1ZXJ5LmV4cGVydE1vZGUpIHtcbiAgICAgIC8vIGluIGV4cGVydCBzZWFyY2ggbW9kZSB3ZSBwcmUtZmV0Y2ggcmVzdWx0cyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3R1YWwgc2VhcmNoXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0U2VhcmNoU3RhdGUoe2FnZ3M6IHt0eXBlOiB7fX0sIC4uLnRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCl9KS5zdWJzY3JpYmUoKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICAgIC8vIG9ubHkgZXhlY3V0ZSB0aGUgYWN0dWFsIHF1ZXJ5IHdoZW4gd2UndmUgZm91bmQgc29tZXRoaW5nXG4gICAgICAgIGlmICghcXVlcnlTdGF0ZS5pc0VtcHR5KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sIFV0aWxzLnRocm93KCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHNlYXJjaCByZXN1bHQnKTtcbiAgICAgICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IHRydWU7XG4gICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXhlY3V0ZSB0aGUgYWN0dWFsIHNlYXJjaCBieSByb3V0aW5nIHRvIHRoZSByZXN1bHQgc3RhdGUgd2hpY2ggdGhlbiB3aWxsIGV4ZWN1dGUgdGhlXG4gIC8vIHF1ZXJ5IGFuZCBkaXNwbGF5IHRoZSByZXN1bHRzXG4gIHByaXZhdGUgdHJpZ2dlclNlYXJjaCgpIHtcbiAgICB0aGlzLnF1ZXJ5LnJlc29sdmVSZWZlcmVuY2UgPSB0cnVlO1xuICAgIGNvbnN0IHVyaVBhcmFtID0gZW5jb2RlVVJJQ29tcG9uZW50KFV0aWxzLmZvcm1EYXRhU3RyaW5naWZ5KHRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCkpKTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmNsb3NlKCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0pLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgdXJpUGFyYW1RdWVyeTogTmF2aWdhdGlvbkV4dHJhcyA9IHtxdWVyeVBhcmFtczoge3F1ZXJ5OiB1cmlQYXJhbX19O1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcmVzdWx0J10sIHVyaVBhcmFtUXVlcnkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVRlcm0oKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldFRlcm0oJycpO1xuICAgIHRoaXMucmVzZXRFeHBlcnRNb2RlSW5wdXQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2gpIHtcbiAgICAgIHRoaXMuZXhpdEluZGV4ZGF0YVNlYXJjaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlUeXBlKHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDb250ZXh0VHlwZSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlbW92ZVF1ZXJ5RmlsdGVyKGZpbHRlcik7XG5cbiAgICAvLyBpZiB3ZSBhcmUgaW4gaW5kZXNkYXRhIHNlYXJjaCBtb2RlLCByZW1vdmluZyBhIGZpbHRlciB0aGF0IGlzIG5vIGJhc2VwYXJhbSBmaWx0ZXJcbiAgICAvLyByZXF1aXJlcyB0aGUgZnJvbSBtb2RlbCB0byBiZSB1cGRhdGVkXG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoICYmICF0aGlzLmFwcFNlYXJjaFNlcnZpY2UuaXNCYXNlUGFyYW1GaWx0ZXIoZmlsdGVyKSkge1xuICAgICAgLy8gdG9kbzogdXBkYXRlIGZvcm0gbW9kZWwvZGF0YVxuICAgICAgbGV0IGlkeEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcbiAgICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBzZXQgdXAgZm9ybSBkYXRhIGZyb20gaW5kZXhkYXRhIHF1ZXJ5IGZpbHRlcnNcbiAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMuZGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgICAgIHRoaXMuaW5kZXhkYXRhRm9ybS5zZXRGb3JtRGF0YShpZHhGaWx0ZXJzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIG5vIGZpbHRlcnMgYXJlIHByZXNlbnQgcmVzZXQgdGhlIGZvcm1cbiAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMuZGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmluZGV4ZGF0YUZvcm0ucmVzZXRGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkQ29udGV4dE1vZGVsKGZvcm1Nb2RlbHMpOiB2b2lkIHtcbiAgICBsZXQgbW9kZWxzID0gWy4uLmZvcm1Nb2RlbHNdO1xuICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMucHVzaCguLi5tb2RlbHMpO1xuICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcbiAgfVxuXG4gIHB1YmxpYyBleGl0SW5kZXhkYXRhU2VhcmNoKCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5leGl0SW5kZXhkYXRhU2VhcmNoKCk7XG4gICAgdGhpcy5pZHhTZWFyY2ggPSBudWxsO1xuICB9XG5cbiAgc2V0Q29udGV4dChjb250ZXh0Rm9sZGVyTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGNvbnRleHRGb2xkZXJOYW1lICYmIHRoaXMuY3VycmVudENvbnRleHRGb2xkZXJOYW1lICE9PSBjb250ZXh0Rm9sZGVyTmFtZSkge1xuICAgICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSBjb250ZXh0Rm9sZGVyTmFtZTtcbiAgICAgIGNvbnN0IGNvbnRleHRUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY29udGV4dEZvbGRlck5hbWUpO1xuICAgICAgaWYgKGNvbnRleHRGb2xkZXJOYW1lID09PSBDb250ZXh0VHlwZS5zeXNyb290KSB7XG4gICAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZSh7bmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdCwgbGFiZWw6IENvbnRleHRUeXBlLnN5c3Jvb3R9IGFzIE9iamVjdFR5cGUpO1xuICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZSkge1xuICAgICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUoY29udGV4dFR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYENvbnRleHQgdHlwZSAnJHtjb250ZXh0Rm9sZGVyTmFtZX0nIG5vdCBmb3VuZC5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKG51bGwpO1xuICAgICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgY29udGV4dCB0eXBlIGZvciB0aGUgY3VycmVudCBzZWFyY2hcbiAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBmb3JtIG1vZGVsXG4gICAqL1xuICBwcml2YXRlIHNlbGVjdENvbnRleHQoY3R4KSB7XG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucyAmJiB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMuZm9ybU1vZGVsLm5hbWUgPT09IGN0eC5uYW1lKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250ZXh0O1xuICAgICAgaWYgKGN0eC5uYW1lID09PSBDb250ZXh0VHlwZS5zeXNyb290KSB7XG4gICAgICAgIGNvbnRleHQgPSBjdHg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0ID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY3R4Lm5hbWUpO1xuICAgICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9sZGVyVHlwZSA9IGNvbnRleHQ7XG4gICAgICB9XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUoY29udGV4dCk7XG5cbiAgICAgIGxldCBmb3JtRGF0YSA9IHt9O1xuICAgICAgbGV0IGlkeEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcbiAgICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3JtRGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucyA9IHtmb3JtTW9kZWw6IGN0eCwgZGF0YTogZm9ybURhdGF9O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkluZGV4RGF0YUNoYW5nZWQoZXZlbnQ6IEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQpIHtcbiAgICAvLyBvbmx5IHRyaWdnZXIgd2hlbiB2YWx1ZXMgYXJlIGNoYW5nZWQgYXMgY2hhbmdlcyBtYXkgYWxzbyBhcHBlYXIgd2hlbiBzY3JpcHRzXG4gICAgLy8gY2hhbmdlIG90aGVyIGZvcm0gZWxlbWVudCBwcm9wZXJ0aWVzIChlZy4gcmVhZG9ubHksIHJlcXVpcmVkIGZsYWcpXG4gICAgaWYgKGV2ZW50LmluZGV4ZGF0YUNoYW5nZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmlsdGVyRnJvbUZvcm1EYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hGaWx0ZXJGcm9tRm9ybURhdGEoKSB7XG4gICAgaWYgKCF0aGlzLmluZGV4ZGF0YUZvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhZGQgbWV0YWRhdGEgZmlsdGVycyBmb3IgZWFjaCBmb3JtIGRhdGEgZW50cnlcbiAgICBsZXQgaWR4RmlsdGVyczogU2VhcmNoRmlsdGVyW10gPSBbXTtcbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLmluZGV4ZGF0YUZvcm0uZ2V0Rm9ybURhdGEoKTtcbiAgICBpZiAodGhpcy5jb250ZXh0Rm9ybSkge1xuICAgICAgZm9ybURhdGEgPSBPYmplY3QuYXNzaWduKGZvcm1EYXRhLCB0aGlzLmNvbnRleHRGb3JtLmdldEZvcm1EYXRhKCkpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhmb3JtRGF0YSkpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFNlYXJjaEZpbHRlcih0aGlzLnF1ZXJ5LnR5cGVzLCBrZXksIGZvcm1EYXRhW2tleV0pLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAvLyB0aGUgc2VhcmNoIHNlcnZpY2UgZG9lcyBub3QgbGlrZSBuZXdsaW5lIGNoYXJzIGluIGNhc2Ugb2YgbXVsdGlsaW5lIGZpZWxkc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIuZmlyc3RWYWx1ZSkpIHtcbiAgICAgICAgICBpZihmaWx0ZXIuZmlyc3RWYWx1ZT8ubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWx0ZXIuZmlyc3RWYWx1ZSA9IGZpbHRlci5maXJzdFZhbHVlLm1hcCh2YWx1ZSA9PiB2YWx1ZS5yZXBsYWNlKC9cXG4vZywgJyAnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlci5maXJzdFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGZpbHRlci5maXJzdFZhbHVlID0gZmlsdGVyLmZpcnN0VmFsdWUucmVwbGFjZSgvXFxuL2csICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH0pO1xuICAgICAgZmlsdGVycy5mb3JFYWNoKGYgPT4gaWR4RmlsdGVycy5wdXNoKGYpKTtcbiAgICB9XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKGlkeEZpbHRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG9iamVjdCB0eXBlIGVsZW1lbnQgZm9yIGEgZmlsdGVyLCB0byBiZSBhYmxlIHRvIHNob3cgdGhlXG4gICAqIGxhYmVsIGZvciBhIGZpbHRlciBpbiB0aGUgc2VhcmNoIHN1bW1hcnkuXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSB0aGUgZmlsdGVyIHRvIGZldGNoIG9iamVjdCB0eXBlIGVsZW1lbnQgZm9yXG4gICAqL1xuICBwdWJsaWMgZ2V0T2JqZWN0VHlwZUVsZW1lbnRMYWJlbChmaWx0ZXI6IFNlYXJjaEZpbHRlcikge1xuICAgIGxldCBvdCA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRUYXJnZXRUeXBlRWxlbWVudEJ5TmFtZShmaWx0ZXIucHJvcGVydHkpO1xuICAgIHJldHVybiBvdCA/IG90LmxhYmVsIDogZmlsdGVyLnByb3BlcnR5ICsgJyAtICcgKyBmaWx0ZXIuZmlyc3RWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlUXVlcnkoKSB7XG4gICAgLy8gY29uc3QgcXVlcnlQYXJhbXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXNIYW5kbGluZyA6ICdwcmVzZXJ2ZSd9O1xuICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICB0aGlzLnJvdXRlclxuICAgICAgLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCB7cmVwbGFjZVVybDogdHJ1ZX0pXG4gICAgICAudGhlbigoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zdG9yZWQtcXVlcmllcyddLCB7cXVlcnlQYXJhbXM6IHtjcmVhdGU6IHRydWV9fSkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0b3JlZFF1ZXJ5KCkge1xuICAgIGlmICh0aGlzLnF1ZXJ5IGluc3RhbmNlb2YgU3RvcmVkUXVlcnkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCB7cmVwbGFjZVVybDogdHJ1ZX0pO1xuICAgICAgdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZS5zYXZlU3RvcmVkUXVlcnkodGhpcy5xdWVyeSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnN1Y2Nlc3ModGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LnNhdmUuc3VjY2VzcycpKTtcbiAgICAgIH0sIFV0aWxzLnRocm93KG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5zdG9yZWRxdWVyeS5zYXZlLmVycm9yJykpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXRRdWVyeSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVzZXQoKTtcbiAgICB0aGlzLmlzT3duUXVlcnkgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRhYklkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVzZXRFeHBlcnRNb2RlSW5wdXQoKTtcblxuICAgIGlmICh0aGlzLmlkeFNlYXJjaCkge1xuICAgICAgdGhpcy5leGl0SW5kZXhkYXRhU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VTZWFyY2hNZW51KCkge1xuICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIG1vdmVPYmplY3RUeXBlR3JvdXAoZ3JvdXBMYWJlbDogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZykge1xuICAgIGxldCBpbmRleCA9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5maW5kSW5kZXgoZ3JvdXAgPT4gZ3JvdXBMYWJlbCA9PT0gZ3JvdXAubGFiZWwpO1xuICAgIGxldCBuZXdJbmRleDtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgbmV3SW5kZXggPSBpbmRleCAtIDE7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgIG5ld0luZGV4ID0gaW5kZXggKyAxO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZmlyc3QnKSB7XG4gICAgICBuZXdJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsYXN0Jykge1xuICAgICAgbmV3SW5kZXggPSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoIC0gMTtcbiAgICAgIGlmIChpbmRleCA9PT0gbmV3SW5kZXgpIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAoaW5kZXggPCAwKSB7XG4gICAgICBpbmRleCArPSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoO1xuICAgIH1cbiAgICB3aGlsZSAobmV3SW5kZXggPCAwKSB7XG4gICAgICBuZXdJbmRleCArPSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobmV3SW5kZXggPj0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCkge1xuICAgICAgbGV0IGsgPSBuZXdJbmRleCAtIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGggKyAxO1xuICAgICAgd2hpbGUgKGstLSkge1xuICAgICAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMuc3BsaWNlKG5ld0luZGV4LCAwLCB0aGlzLm9iamVjdFR5cGVHcm91cHMuc3BsaWNlKGluZGV4LCAxKVswXSk7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMub2JqZWN0VHlwZUdyb3Vwc1N0b3JhZ2VLZXksIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5tYXAoZ3JvdXAgPT4gZ3JvdXAubGFiZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNTZWFyY2hJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dCkge1xuICAgICAgLy8gVE9ETzogdGhpcy5zZWFyY2hJbnB1dC5pbnB1dEVMLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlU2VhcmNoSW5wdXRGb2N1cygpIHtcbiAgICBpZiAodGhpcy5xdWVyeS5leHBlcnRNb2RlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNlbGVjdFJvb3RFbGVtZW50KCcuZXhwZXJ0LXNlYXJjaF9faW5wdXQnKS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzU2VhcmNoSW5wdXQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHRoaXMuY2FwYWJpbGl0eVNlcnZpY2UuZ2V0Q2FwYWJpbGl0aWVzKCk7XG4gICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLm9iamVjdFR5cGVHcm91cHM7XG4gICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzWzBdLnR5cGVzID0gdGhpcy5vYmplY3RUeXBlR3JvdXBzWzBdLnR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUucW5hbWUgIT09ICdzeXNmb2xkZXInICYmIHR5cGUucW5hbWUgIT09ICdzeXNkb2N1bWVudCcgJiYgdHlwZS5xbmFtZSAhPT0gJ3N5c29iamVjdCcpO1xuICAgIGxldCBzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0odGhpcy5vYmplY3RUeXBlR3JvdXBzU3RvcmFnZUtleSk7XG4gICAgbGV0IHN5bmNlZCA9IHRydWU7XG4gICAgaWYgKHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscyAmJiBzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMubGVuZ3RoID09PSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscy5maW5kKGdyb3VwID0+IGdyb3VwID09PSB0aGlzLm9iamVjdFR5cGVHcm91cHNbaV0ubGFiZWwpKSB7XG4gICAgICAgICAgc3luY2VkID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzeW5jZWQpIHtcbiAgICAgICAgdGhpcy5vYmplY3RUeXBlR3JvdXBzID0gWy4uLnRoaXMub2JqZWN0VHlwZUdyb3Vwc10uc29ydChcbiAgICAgICAgICAoYSwgYikgPT4gc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmluZGV4T2YoYS5sYWJlbCkgLSBzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMuaW5kZXhPZihiLmxhYmVsKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnF1ZXJ5JC5zdWJzY3JpYmUoXG4gICAgICAocXVlcnk6IFNlYXJjaFF1ZXJ5KSA9PiB0aGlzLnByb2Nlc3NRdWVyeShxdWVyeSkpO1xuICAgIC8vIHN1YnNjcmliZSB0byBxdWVyeSBzdGF0ZSBhcyB3ZWxsIHRvIGZldGNoIHJlc3VsdCBjb3VudCBhbmQgYWdncmVnYXRpb25zIGFzIHRoZXkgY2hhbmdlXG4gICAgdGhpcy5xdWVyeVN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnF1ZXJ5U3RhdGUkLnN1YnNjcmliZSgocXVlcnlTdGF0ZTogU2VhcmNoU3RhdGUpID0+IHRoaXMucHJvY2Vzc1F1ZXJ5U3RhdGUocXVlcnlTdGF0ZSkpO1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcblxuICAgIHRoaXMudGVybUZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICB0YXAocmVzID0+IHtcbiAgICAgICAgdGhpcy5xdWVyeS50ZXJtID0gcmVzLnRlcm07XG4gICAgICB9KSwgZGVib3VuY2VUaW1lKDEwMDApLCB1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3VnZ2VzdCh0aGlzLnF1ZXJ5LnRlcm0pO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0LmZvY3VzSW5wdXQoKTtcbiAgICB9KTtcbiAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5Lm9wZW4odGhpcy50cGxTZWFyY2gsIG51bGwsIHtcbiAgICAgIGNlbnRlcmVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMudGVybUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICB0ZXJtOiB0aGlzLnF1ZXJ5LnRlcm1cbiAgICB9KTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmFmdGVyQ2xvc2VkJC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtczogTmF2aWdhdGlvbkV4dHJhcyA9IHtxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0sIHF1ZXJ5UGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5yZXNldEFnZ3MoKTtcbiAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5xdWVyeVN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjwhLS0gPGVvLWRpYWxvZyBbdmlzaWJsZV09XCJ0cnVlXCIgW3N0eWxlQ2xhc3NdPVwiJ2VvLWFwcC1zZWFyY2gtZGlhbG9nJ1wiIFthbGlnbl09XCInc3RhcnQnXCIgW21pbldpZHRoXT1cIic4MHZ3J1wiXG4gIFttaW5IZWlnaHRdPVwiJzEwMHZoJ1wiIChoaWRlKT1cImNsb3NlU2VhcmNoTWVudSgkZXZlbnQpXCI+IC0tPlxuPCEtLSA8eXZjLWRpYWxvZyBbb3B0aW9uc109XCJ7bGlnaHREaXNtaXNzOiB0cnVlfVwiIFt0ZW1wbGF0ZV09XCJ0cGxTZWFyY2hcIiAoY2xvc2VkKT1cImNsb3NlU2VhcmNoTWVudSgpXCI+PC95dmMtZGlhbG9nPiAtLT5cbjxuZy10ZW1wbGF0ZSAjdHBsU2VhcmNoPlxuXG4gIDxkaXYgY2xhc3M9XCJlby1hcHAtc2VhcmNoXCIgW25nQ2xhc3NdPVwie2V4cGVydDogcXVlcnkuZXhwZXJ0TW9kZX1cIiBlb1J0bEF3YXJlPVwiZnVsbFwiICpuZ0lmPVwicXVlcnlcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJoZWFkXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hcIj5cbiAgICAgICAgPGZvcm0gKHN1Ym1pdCk9XCJleGVjdXRlU2VhcmNoKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoPC9kaXY+XG5cbiAgICAgICAgICA8ZW8tcXVlcnktc2NvcGUtc2VsZWN0IFtzZWxlY3Rpb25dPVwicXVlcnlTY29wZVwiIChzZWxlY3QpPVwic2V0UXVlcnlTY29wZSgkZXZlbnQpXCI+PC9lby1xdWVyeS1zY29wZS1zZWxlY3Q+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJveFwiIFtmb3JtR3JvdXBdPVwidGVybUZvcm1cIj5cblxuICAgICAgICAgICAgPHl2Yy1hdXRvY29tcGxldGUgKm5nSWY9XCIhcXVlcnkuZXhwZXJ0TW9kZTsgZWxzZSBleHBlcnRJbnB1dFwiICNzZWFyY2hJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0ZXJtXCIgW2F1dG9jb21wbGV0ZVZhbHVlc109XCJhdXRvY29tcGxldGVSZXN1bHRzXCJcbiAgICAgICAgICAgICAgKHN1Z2dlc3Rpb25TZWxlY3QpPVwiYXV0b2NvbXBsZXRlU2VsZWN0KClcIiAoa2V5ZG93bi5lbnRlcik9XCJleGVjdXRlU2VhcmNoKClcIiAocGFzdGUpPVwiYXV0b2NvbXBsZXRlUGFzdGUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC95dmMtYXV0b2NvbXBsZXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4cGVydElucHV0PlxuICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCIgY2xhc3M9XCJleHBlcnQtc2VhcmNoX19pbnB1dFwiICN4cGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJleHBlcnRUZXJtQ2hhbmdlZCgpXCIgWyhuZ01vZGVsKV09XCJxdWVyeS50ZXJtXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBleHBlcnQtbW9kZVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlRXhwZXJ0TW9kZSgpXCI+XG4gICAgICAgICAgICAgIDwhLS08c3BhbiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0PC9zcGFuPi0tPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19leHBlcnQtc2VhcmNoLnN2ZydcIlxuICAgICAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiKCdlby5zZWFyY2gubW9kZS5leHBlcnQnIHwgdHJhbnNsYXRlKVwiICpuZ0lmPVwiIXF1ZXJ5Py5leHBlcnRNb2RlOyBlbHNlIGNsb3NlXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Nsb3NlPlxuICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2V4cGVydC1zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LmNsb3NlJyB8IHRyYW5zbGF0ZSlcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gZXhwZXJ0LW1vZGUgZXhwZXJ0LW1vZGVfX3Jlc2V0XCIgW25nQ2xhc3NdPVwie2FjdGl2ZTogcXVlcnkudGVybX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRFeHBlcnRNb2RlSW5wdXQoKVwiPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCJcbiAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLmNsZWFyLnNlYXJjaCcgfCB0cmFuc2xhdGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cInF1ZXJ5U3RhdGUuaXNFbXB0eVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VibWl0PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0XCIgKm5nSWY9XCIhbG9hZGluZzsgZWxzZSBzcGlubmVyXCI+e3txdWVyeVN0YXRlLnRvdGFsQ291bnQgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc3Bpbm5lcj5cbiAgICAgICAgPGVvLWxvYWRpbmctc3Bpbm5lciBjbGFzcz1cInNlYXJjaC1hZ2dyZWdhdG9yX19sb2FkZXJcIiBbc2l6ZV09XCInbWVkaXVtJ1wiIFttb2RlXT1cIidkYXJrJ1wiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uIHdoaXRlIGNsb3NlXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiXG4gICAgICAgIFtpY29uVGl0bGVdPVwiKCdlby5zZWFyY2guY2xvc2UnIHwgdHJhbnNsYXRlKVwiIChjbGljayk9XCJjbG9zZVNlYXJjaE1lbnUoKVwiPjwvZW8taWNvbj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImJvZHlcIiAqbmdJZj1cIiFxdWVyeS5leHBlcnRNb2RlOyBlbHNlIGV4cGVydFwiPlxuXG4gICAgICA8eXZjLXRhYnMgKHRhYkNoYW5nZSk9XCJvblRhYkNoYW5nZSgkZXZlbnQpXCIgbGF5b3V0U2V0dGluZ3NJRD1cImVvLnNlYXJjaC5kaWFsb2cudGFic1wiPlxuXG4gICAgICAgIDwhLS0gb2JqZWN0IHR5cGUgc2VsZWN0IC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdFR5cGUnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC50eXBlJyB8IHRyYW5zbGF0ZX1cIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZXMgcmVzdC1ib3gtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2lkeGVuYWJsZWQ6IHF1ZXJ5LnR5cGVzLmxlbmd0aCA8IDF9XCJcbiAgICAgICAgICAgICpuZ0lmPVwib2JqZWN0VHlwZUdyb3VwcyAmJiAhaWR4U2VhcmNoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAgcmVzdC1ib3hcIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2Ygb2JqZWN0VHlwZUdyb3VwczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwiZ3JvdXAubGFiZWwgIT09ICcwJ1wiPnt7Z3JvdXAubGFiZWx9fTwvaDM+XG4gICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwiZ3JvdXAubGFiZWwgPT09ICcwJ1wiIHRyYW5zbGF0ZT57eydlby5zZWFyY2guZ3JvdXAuZ2VuZXJhbCd9fTwvaDM+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtaWNvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwibW92ZS1sZWZ0LWZpcnN0XCIgKGNsaWNrKT1cIm1vdmVPYmplY3RUeXBlR3JvdXAoZ3JvdXAubGFiZWwsICdmaXJzdCcpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfYXJyb3dfbGFzdC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gKm5nSWY9XCJpICE9PSAwXCIgY2xhc3M9XCJtb3ZlLWxlZnQtaWNvblwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAnbGVmdCcpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfYXJyb3dfbGVmdC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gKm5nSWY9XCJpICE9PSBvYmplY3RUeXBlR3JvdXBzLmxlbmd0aCAtIDFcIiBjbGFzcz1cIm1vdmUtcmlnaHQtaWNvblwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAncmlnaHQnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X3JpZ2h0LnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiAqbmdJZj1cImkgIT09IG9iamVjdFR5cGVHcm91cHMubGVuZ3RoIC0gMVwiIGNsYXNzPVwibW92ZS1yaWdodC1sYXN0XCIgKGNsaWNrKT1cIm1vdmVPYmplY3RUeXBlR3JvdXAoZ3JvdXAubGFiZWwsICdsYXN0JylcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19sYXN0LnN2ZydcIj48L2VvLWljb24+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0eXBlXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgZ3JvdXAudHlwZXNcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntjb250ZXh0OiB0eXBlLmlzQ29udGV4dEZvbGRlciwgZm9sZGVyOiB0eXBlLmlzRm9sZGVyLCBhYnN0cmFjdDogdHlwZS5pc0Fic3RyYWN0LCBzZWxlY3RlZDogaXNUeXBlQWN0aXZlKHR5cGUpfVwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgKGNsaWNrKT1cInRvZ2dsZVR5cGUodHlwZSlcIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgZmlsbD1cIiNmZmZmZmZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiIChjbGljayk9XCJzZWxlY3RPYmplY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiBbb2JqZWN0VHlwZV09XCJ0eXBlXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX0ge3t0eXBlLmlzQWJzdHJhY3QgPyAnKCcrICgnZW8uc2VhcmNoLnR5cGUuYWJzdHJhY3QnIHwgdHJhbnNsYXRlKSArXG4gICAgICAgICAgICAgICAgICAgICcpJyA6ICcnfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7Z2V0QWdncmVnYXRpb25Db3VudCh0eXBlKSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZGV4ZGF0YS1zZWFyY2hcIiAqbmdJZj1cImlkeFNlYXJjaFwiPlxuICAgICAgICAgICAgPGgyPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2JhY2suc3ZnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4aXRJbmRleGRhdGFTZWFyY2goKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlIFt0cmFuc2xhdGVQYXJhbXNdPVwie3R5cGU6IGlkeFNlYXJjaC50eXBlLmxhYmVsfVwiPmVvLnNlYXJjaC5vYmplY3R0eXBlLmZvcm08L3NwYW4+XG4gICAgICAgICAgICA8L2gyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGV4dFwiICpuZ0lmPVwiaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMubGVuZ3RoXCI+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm9iamVjdHR5cGUuZm9ybS5jb250ZXh0PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGVvLWNvbnRleHQtc2VhcmNoICpuZ0Zvcj1cImxldCBjdHggb2YgaWR4U2VhcmNoLmNvbnRleHRNb2RlbHM7IGluZGV4IGFzIGlcIiBbY3R4XT1cImN0eFwiIFtxdWVyeV09XCJxdWVyeVwiXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiY3VycmVudENvbnRleHRGb2xkZXJOYW1lID09PSBjdHgubmFtZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSAmJiBjdXJyZW50Q29udGV4dEZvbGRlck5hbWUgIT09IGN0eC5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICBbaWR4U2VhcmNoXT1cImlkeFNlYXJjaFwiIChzZXRDb250ZXh0KT1cInNldENvbnRleHQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvZW8tY29udGV4dC1zZWFyY2g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY29udGV4dCBmb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLW9iamVjdC1mb3JtIGNsYXNzPVwiZGFya1wiICNjdHhmb3JtXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMgJiYgaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucz8uZm9ybU1vZGVsPy5lbGVtZW50cz8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JtT3B0aW9uc109XCJpZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zXCIgKHN0YXR1c0NoYW5nZWQpPVwib25JbmRleERhdGFDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2VvLW9iamVjdC1mb3JtPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cIm9iamVjdC10eXBlIGZvcm1cIiAqbmdJZj1cImlkeFNlYXJjaC5mb3JtT3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8ZW8tb2JqZWN0LWZvcm0gI2lkeGZvcm0gW2Zvcm1PcHRpb25zXT1cImlkeFNlYXJjaC5mb3JtT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgKHN0YXR1c0NoYW5nZWQpPVwib25JbmRleERhdGFDaGFuZ2VkKCRldmVudClcIiAob25Gb3JtUmVhZHkpPVwiaWR4Zm9ybS5mb2N1c0Zvcm0oKVwiPlxuICAgICAgICAgICAgICA8L2VvLW9iamVjdC1mb3JtPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gY3JlYXRlZCB0YWIgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0Q3JlYXRlZCcsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0LmNyZWF0aW9uJyB8IHRyYW5zbGF0ZSB9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNyZWF0ZWQgcmVzdC1ib3gtY29udGFpbmVyXCIgKm5nSWY9XCJxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9uc1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW48L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIoUEFSQU1TLkNSRUFURUQsIE9QRVJBVE9SLlJBTkdFLCBhZ2cua2V5LCBhZ2cuc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGFnZy5zZWxlY3RlZCwgc2F2ZWQ6IGFnZy5zYXZlZH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2FnZy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3thZ2cudmFsdWUgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3Bhbi1jdXN0b21cIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLnRpbWUuc3Bhbi5jdXN0b208L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjY3JlYXRlZEZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWRhdGV0aW1lLXJhbmdlICNjcmVhdGVkRmllbGQgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLnZhbHVlXCIgbmFtZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdG9yXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0udmFsdWUgPyBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLnZhbHVlLm9wZXJhdG9yIDogT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICBbd2l0aFRpbWVdPVwiY3JlYXRlZEZpZWxkLnNlYXJjaE9wdGlvbiAmJiBjcmVhdGVkRmllbGQuc2VhcmNoT3B0aW9uICE9PSBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuQ1JFQVRFRCwgT1BFUkFUT1IuRVFVQUwsICRldmVudCwgY3JlYXRlZEZvcm0pXCI+XG4gICAgICAgICAgICAgICAgICA8L2VvLWRhdGV0aW1lLXJhbmdlPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtY3JlYXRvclwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cuY3JlYXRvcjwvaDM+XG4gICAgICAgICAgICAgIDxmb3JtICNjcmVhdG9yRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLmFnZy5jcmVhdGVkYnknIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tb3JnYW5pemF0aW9uIFttdWx0aXNlbGVjdF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLnZhbHVlXCIgbmFtZT1cImNyZWF0b3JcIlxuICAgICAgICAgICAgICAgICAgICAob25WYWx1ZVJlc29sdmVkKT1cInJlc29sdmVMYWJlbChmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLCAkZXZlbnQpXCIgW3NpdHVhdGlvbl09XCInU0VBUkNIJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuQ1JFQVRPUiwgT1BFUkFUT1IuSU4sICRldmVudCwgY3JlYXRvckZvcm0pXCI+PC9lby1vcmdhbml6YXRpb24+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0TW9kaWZpY2F0aW9uJywgbGFiZWw6ICdlby5zZWFyY2gucmVzdHJpY3QubW9kaWZpY2F0aW9uJyB8IHRyYW5zbGF0ZX1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kaWZpZWQgcmVzdC1ib3gtY29udGFpbmVyXCIgKm5nSWY9XCJxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9uc1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW48L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5NT0RJRklFRCwgT1BFUkFUT1IuUkFOR0UsIGFnZy5rZXksIGFnZy5zZWxlY3RlZClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogYWdnLnNlbGVjdGVkLCBzYXZlZDogYWdnLnNhdmVkfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7YWdnLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2FnZy52YWx1ZSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuLWN1c3RvbVwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuLmN1c3RvbTwvaDM+XG4gICAgICAgICAgICAgIDxmb3JtICNtb2RpZmllZEZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWRhdGV0aW1lLXJhbmdlICNtb2RpZmllZEZpZWxkIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWVcIiBuYW1lPVwicmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbb3BlcmF0b3JdPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWUgPyBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXS52YWx1ZS5vcGVyYXRvciA6IE9QRVJBVE9SLkVRVUFMXCJcbiAgICAgICAgICAgICAgICAgICAgW3dpdGhUaW1lXT1cIm1vZGlmaWVkRmllbGQuc2VhcmNoT3B0aW9uICYmIG1vZGlmaWVkRmllbGQuc2VhcmNoT3B0aW9uICE9PSBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuTU9ESUZJRUQsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIG1vZGlmaWVkRm9ybSlcIj5cbiAgICAgICAgICAgICAgICAgIDwvZW8tZGF0ZXRpbWUtcmFuZ2U+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1tb2RpZmllclwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cubW9kaWZpZXI8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjbW9kaWZpZXJGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLm1vZGlmaWVkYnknIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tb3JnYW5pemF0aW9uIFttdWx0aXNlbGVjdF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtb2RpZmllclwiIChvblZhbHVlUmVzb2x2ZWQpPVwicmVzb2x2ZUxhYmVsKGZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRVJdLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpdHVhdGlvbl09XCInU0VBUkNIJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuTU9ESUZJRVIsIE9QRVJBVE9SLklOLCAkZXZlbnQsIG1vZGlmaWVyRm9ybSlcIj48L2VvLW9yZ2FuaXphdGlvbj5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0RmlsZScsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGUnIHwgdHJhbnNsYXRlfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1taW1ldHlwZS1ncm91cFwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5taW1ldHlwZWdyb3VwPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RmlsdGVyKFBBUkFNUy5NSU1FVFlQRUdST1VQLCBPUEVSQVRPUi5JTiwgcmVzb2x2ZVNlbGVjdGlvbihhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuTUlNRVRZUEVHUk9VUF0sIGFnZy5rZXksIGFnZy5zZWxlY3RlZCkpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGFnZy5zZWxlY3RlZCwgc2F2ZWQ6IGFnZy5zYXZlZH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgZmlsbD1cIiNmZmZmZmZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2FnZy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3thZ2cudmFsdWUgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1maWxlc2l6ZVwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5maWxlc2l6ZTwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWdnIG9mIGFnZ3JlZ2F0aW9uc01vZGVsW1BBUkFNUy5GSUxFU0laRV1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIoUEFSQU1TLkZJTEVTSVpFLCBPUEVSQVRPUi5SQU5HRSwgYWdnLmtleSwgYWdnLnNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZW5hbWU8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjZmlsZW5hbWVGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2gucmVzdHJpY3QuZmlsZW5hbWUnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tc3RyaW5nIFthdXRvY29tcGxldGVdPVwidHJ1ZVwiIFtxbmFtZV09XCInZmlsZW5hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkZJTEVOQU1FXS52YWx1ZVwiIG5hbWU9XCJmaWxlbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuRklMRU5BTUUsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIGZpbGVuYW1lRm9ybSlcIj48L2VvLXN0cmluZz5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC95dmMtdGFicz5cblxuICAgICAgPCEtLSBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHNlYXJjaCBmaWx0ZXJzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktcGFuZWxcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGxpbmUgc3RvcmVkLXF1ZXJ5XCIgKm5nSWY9XCJpc1N0b3JlZFF1ZXJ5OyBlbHNlIHJlZ2hlYWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VJbmJldHdlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkU2VhcmNoSWNvblwiPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19zYXZlZF9zZWFyY2guc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFzaWRlLnN1bW1hcnkuc3RvcmVkcXVlcnk8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlZC1xdWVyeS1uYW1lXCI+e3tzdG9yZWRRdWVyeS5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ2hlYWQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRsaW5lXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5PC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJxdWVyeS10eXBlc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tc2VhcmNodGVybVwiICpuZ0lmPVwicXVlcnkudGVybVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnRlcm08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3txdWVyeS50ZXJtfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVUZXJtKClcIj48L2VvLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tY29udGV4dHR5cGVcIiAqbmdJZj1cInF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS5jb250ZXh0Zm9sZGVydHlwZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVDb250ZXh0VHlwZSgpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW9iamVjdHR5cGVcIiAqbmdJZj1cInF1ZXJ5LnR5cGVzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnR5cGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlcnkudHlwZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVUeXBlKHR5cGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbHRlclRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LXRyYW5zbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIuaW5uZXJWYWx1ZS5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlclwiICpuZ0Zvcj1cImxldCB2YWwgb2YgZmlsdGVyLmlubmVyVmFsdWU7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2ZpbHRlci5sYWJlbFtpXSB8IGFzeW5jfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCIgKGNsaWNrKT1cInJlc2V0RmlsdGVyKGZpbHRlciwgdmFsKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1jcmVhdGlvblwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0uaW5uZXJWYWx1ZT8ubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRPUl0uaW5uZXJWYWx1ZT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmNyZWF0aW9uPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRPUl0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW1vZGlmaWNhdGlvblwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLmlubmVyVmFsdWU/Lmxlbmd0aCB8fCBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXS5pbm5lclZhbHVlPy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QubW9kaWZpY2F0aW9uPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tbWltZXR5cGVncm91cFwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTUlNRVRZUEVHUk9VUF0uaW5uZXJWYWx1ZS5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFU0laRV0uaW5uZXJWYWx1ZS5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0uaW5uZXJWYWx1ZS5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZTwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkZJTEVTSVpFXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiICpuZ0lmPVwicXVlcnkudGVybSB8fCBxdWVyeS5maWx0ZXJzLmxlbmd0aCB8fCBxdWVyeS50eXBlcy5sZW5ndGg7IGVsc2UgZW1wdHlTZWFyY2hcIj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0b3JlZFF1ZXJ5OyBlbHNlIHJlZ2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnkgYnRuLXJlc2V0XCIgKGNsaWNrKT1cInJlc2V0UXVlcnkoKVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3RvcmVkcXVlcnkuY2xvc2U8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXVwZGF0ZVwiIChjbGljayk9XCJ1cGRhdGVTdG9yZWRRdWVyeSgpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYXBhYmlsaXRpZXMuc3RvcmVkcXVlcmllcyAmJiBpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zdG9yZWRxdWVyeS51cGRhdGU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXNhdmVcIiAoY2xpY2spPVwic2F2ZVF1ZXJ5KClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhcGFiaWxpdGllcy5zdG9yZWRxdWVyaWVzICYmICFpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tc3VibWl0XCIgKGNsaWNrKT1cImV4ZWN1dGVTZWFyY2goKVwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWdhY3Rpb25zPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgZ3JleSBidG4tcmVzZXRcIiAoY2xpY2spPVwicmVzZXRRdWVyeSgpXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXNldDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgZ3JleSBidG4tc2F2ZVwiIChjbGljayk9XCJzYXZlUXVlcnkoKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FwYWJpbGl0aWVzLnN0b3JlZHF1ZXJpZXMgJiYgIWlzT3duUXVlcnlcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1zdWJtaXRcIiAoY2xpY2spPVwiZXhlY3V0ZVNlYXJjaCgpXCIgW2Rpc2FibGVkXT1cInF1ZXJ5U3RhdGUuaXNFbXB0eVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VibWl0PC9idXR0b24+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTZWFyY2g+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXNlYXJjaFwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VtbWFyeS5lbXB0eTwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGV4cGVydCBtb2RlIGJvZHkgcGFuZWwgY29udGFpbmluZyBleHBsYW5hdGlvbnMgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNleHBlcnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiYm9keSBleHBlcnRcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHlcIiAqbmdJZj1cImV4cGVydE1vZGVRdWVyeUVtcHR5XCI+PHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5yZXN1bHQuZW1wdHk8L3NwYW4+PC9kaXY+XG5cbiAgICAgICAgPCEtLVxuICAgICAgICA8aDI+PHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydDwvc3Bhbj48L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW50cm9cIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LmludHJvPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJhc2UtcGFyYW1zIGZpZWxkc1wiPlxuICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuYmFzZXBhcmFtczwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBlbCBvZiBleHBlcnRNb2RlU3VwcG9ydC5iYXNlUGFyYW1zXCIgKGNsaWNrKT1cInhwQWRkVG9UZXJtKGVsLmRhdGEpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPnt7ZWwubGFiZWx9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGFcIj57e2VsLmRhdGF9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzeXN0ZW0tdHlwZXMgZmllbGRzXCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbi1ncm91cFwiPlxuICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQuc3VwcG9ydC5ncm91cDwvaDI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgdHlwZUdyb3VwVHJlZVwiXG4gICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwICYmIGdyb3VwLmlkID09PSBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInhwU2VsZWN0R3JvdXAoZ3JvdXApXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLmxhYmVsICE9PSAnMCdcIj57e2dyb3VwLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXAubGFiZWwgPT09ICcwJ1wiPnt7J2VvLnNlYXJjaC5ncm91cC5nZW5lcmFsJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbi10eXBlXCIgKm5nSWY9XCJleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwXCI+XG4gICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LnR5cGU8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cC50cmVlXCJcbiAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZSAmJiB0eXBlLmlkID09PSBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUuaWR9XCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwieHBTZWxlY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgPGRpdj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBzZWN0aW9uLWZpZWxkXCIgKm5nSWY9XCJleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGVcIj5cbiAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuZmllbGQ8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IGVsIG9mIGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZS5jaGlsZHJlblwiIChjbGljayk9XCJ4cEFkZFRvVGVybShlbC5kYXRhKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPnt7ZWwubGFiZWx9fTwvc3Bhbj48c3BhbiBjbGFzcz1cInR5cGVcIj57e2VsLnR5cGV9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YVwiPnt7ZWwuZGF0YX19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPCEtLSA8L2VvLWRpYWxvZz4gLS0+XG48L25nLXRlbXBsYXRlPlxuIl19
837
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hcHAtc2hlbGwvYXBwLWJhci9hcHAtc2VhcmNoL2FwcC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYXBwLXNoZWxsL2FwcC1iYXIvYXBwLXNlYXJjaC9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsUUFBUSxJQUFJLGtCQUFrQixFQUM5QixJQUFJLElBQUksY0FBYyxFQUN0QixFQUFFLElBQUksWUFBWSxFQUNsQixPQUFPLEVBRVAsR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUVwRixPQUFPLEVBUUwsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBSVgsV0FBVyxFQUlYLEtBQUssRUFDTixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUMsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc1RCxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFrQjtJQTJEN0IsSUFBSSxRQUFRLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsU0FB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LEVBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUM7OEdBOTRCVSxrQkFBa0I7a0dBQWxCLGtCQUFrQix5TEFLRSxXQUFXLHVZQ3RFNUMsaXR1QkFrYkE7O0FEalhhLGtCQUFrQjtJQVQ5QixZQUFZLEVBQUU7R0FTRixrQkFBa0IsQ0ErNEI5Qjs7MkZBLzRCWSxrQkFBa0I7a0JBUjlCLFNBQVM7K0JBQ0UsZUFBZSxpQkFHVixpQkFBaUIsQ0FBQyxJQUFJOzRlQVNRLFNBQVM7c0JBQXJELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQztnQkFDakIsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNGLFdBQVc7c0JBQWhDLFNBQVM7dUJBQUMsU0FBUztnQkFDRSxhQUFhO3NCQUFsQyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ0UsV0FBVztzQkFBaEMsU0FBUzt1QkFBQyxTQUFTO2dCQWlEYixlQUFlO3NCQURyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luLFxuICBmcm9tIGFzIG9ic2VydmFibGVGcm9tLFxuICBvZiBhcyBvYnNlcnZhYmxlT2YsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgdGFwXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHBsdWNrLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF2aWdhdGlvbkV4dHJhcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRm9ybVN0YXR1c0NoYW5nZWRFdmVudFxufSBmcm9tICcuLi8uLi8uLi9vYmplY3QtZm9ybS9pbmRleCc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBOZ0Zvcm19IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BpcGVzL2xvY2FsZS1kYXRlLnBpcGUnO1xuaW1wb3J0IHtBcHBTZWFyY2hTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9zZWFyY2gvYXBwLXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENhcGFiaWxpdGllcyxcbiAgQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgTG9nZ2VyLFxuICBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgT2JqZWN0VHlwZSxcbiAgUXVlcnlTY29wZSxcbiAgUmFuZ2VWYWx1ZSxcbiAgU2VhcmNoRmlsdGVyLFxuICBTZWFyY2hRdWVyeSxcbiAgU2VhcmNoU2VydmljZSxcbiAgU2VhcmNoU3RhdGUsXG4gIFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICBTdG9yZWRRdWVyeSxcbiAgU3lzdGVtU2VydmljZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgVXNlclNlcnZpY2UsXG4gIFV0aWxzXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0F1dG9Db21wbGV0ZX0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge0NvbnRleHRUeXBlLCBJZHhTZWFyY2h9IGZyb20gJy4vYXBwLXNlYXJjaC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtZdmNPdmVybGF5UmVmLCBZdmNPdmVybGF5U2VydmljZX0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJsYXknO1xuaW1wb3J0IHtVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkfSBmcm9tIFwiQG5nbmVhdC91bnRpbC1kZXN0cm95XCI7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tYXBwLXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG4gIC8vIHRvZG86IGFwcGx5IG9uUHVzaCBjaGFuZ2UgZGV0ZWN0aW9uIChhZ2cgc2VhcmNoIHJlc3VsdCByaWdodCBub3cgZG9lc24ndCB1cGRhdGUpXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFwcFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgUEFSQU1TID0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVM7XG4gIE9QRVJBVE9SID0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SO1xuICBxdWVyeVNjb3BlOiBRdWVyeVNjb3BlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RwbFNlYXJjaCcsIHtyZWFkOiBUZW1wbGF0ZVJlZn0pIHRwbFNlYXJjaDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dDogQXV0b0NvbXBsZXRlO1xuICBAVmlld0NoaWxkKCd4cGlucHV0JykgZXhwZXJ0SW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lkeGZvcm0nKSBpbmRleGRhdGFGb3JtOiBPYmplY3RGb3JtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdjdHhmb3JtJykgY29udGV4dEZvcm06IE9iamVjdEZvcm1Db21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZj86IFl2Y092ZXJsYXlSZWY7XG4gIHByaXZhdGUgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBxdWVyeVN0YXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHF1ZXJ5OiBTZWFyY2hRdWVyeTtcbiAgcXVlcnlTdGF0ZTogU2VhcmNoU3RhdGU7XG4gIGNhcGFiaWxpdGllczogQ2FwYWJpbGl0aWVzO1xuICBhY3RpdmVUYWJJZD86IHN0cmluZztcbiAgbG9hZGluZzogYm9vbGVhbjtcblxuICBpc1N0b3JlZFF1ZXJ5OiBib29sZWFuO1xuICBpc093blF1ZXJ5ID0gZmFsc2U7XG4gIG9iamVjdFR5cGVHcm91cHMgPSBbXTtcbiAgdHlwZUdyb3VwVHJlZSA9IFtdO1xuICBhdXRvY29tcGxldGVSZXN1bHRzOiBzdHJpbmdbXTtcblxuICBpZHhTZWFyY2g6IElkeFNlYXJjaDtcbiAgY3VycmVudENvbnRleHRGb2xkZXJOYW1lO1xuXG4gIGV4cGVydE1vZGVRdWVyeUVtcHR5ID0gZmFsc2U7XG4gIGV4cGVydE1vZGVTdXBwb3J0ID0ge1xuICAgIGJhc2VQYXJhbXM6IFtdLFxuICAgIHNlbGVjdGVkR3JvdXA6IG51bGwsXG4gICAgc2VsZWN0ZWRUeXBlOiBudWxsXG4gIH07XG5cbiAgZmlsdGVyc01vZGVsID0ge307XG4gIGFnZ3JlZ2F0aW9uc01vZGVsID0ge307XG4gIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgc3lzUm9vdENvbnRleHQgPSB7XG4gICAgaWQ6IG51bGwsXG4gICAgbmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdCxcbiAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYWRkLnRpdGxlLmxvY2F0aW9uLmNvbW1vbicpLFxuICAgIHNpdHVhdGlvbjogJ1NFQVJDSCcsXG4gICAgbW9kZTogJ0NPTlRFWFQnLFxuICAgIGNvbnRleHRGb3JtT3B0aW9uczoge1xuICAgICAgZm9ybU1vZGVsOiB7bmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdH1cbiAgICB9XG4gIH07XG5cbiAgX3NlbGVjdGVkOiBudW1iZXIgPSBudWxsO1xuXG4gIG9iamVjdFR5cGVHcm91cHNTdG9yYWdlS2V5ID0gJ2VvLmFwcC5zZWFyY2gub2JqZWN0LnR5cGUuZ3JvdXAuc29ydGVkTGlzdCc7XG4gIHRlcm1Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgdGVybTogW11cbiAgfSk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkV4ZWN1dGVTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHNldCBzZWxlY3RlZChpbmRleCkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgPT09IGluZGV4ID8gbnVsbCA6IGluZGV4O1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuXG4gIGdldCBzdG9yZWRRdWVyeSgpOiBTdG9yZWRRdWVyeSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkgYXMgU3RvcmVkUXVlcnk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcFNlYXJjaFNlcnZpY2U6IEFwcFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBZdmNPdmVybGF5U2VydmljZSxcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHN0b3JlZFF1ZXJpZXNTZXJ2aWNlOiBTdG9yZWRRdWVyaWVzU2VydmljZSxcbiAgICBwcml2YXRlIGNhcGFiaWxpdHlTZXJ2aWNlOiBDYXBhYmlsaXRpZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlclxuICApIHtcblxuICAgIHRoaXMuZGF0ZVBpcGUgPSBuZXcgTG9jYWxlRGF0ZVBpcGUodHJhbnNsYXRlKTtcblxuICAgIHRoaXMuZXhwZXJ0TW9kZVN1cHBvcnQuYmFzZVBhcmFtcyA9IE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5tYXAoayA9PiB7XG4gICAgICBsZXQgZGF0YSA9IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2tdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmdsb2JhbC5iYXNlcGFyYW0uJyArIGRhdGEpLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVEXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1xuICAgICkubWFwKGsgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUuJyArIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba11cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRURdID0gT2JqZWN0LmtleXMoXG4gICAgICBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS4nICsgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1trXVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NSU1FVFlQRUdST1VQXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5Lk1JTUVUWVBFR1JPVVBfQlVDS0VUU1trXSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTW2tdXG4gICAgICB9O1xuICAgIH0pLnNvcnQoKGEsIGIpID0+IGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsKSk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkZJTEVTSVpFXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuRklMRV9TSVpFX0JVQ0tFVFNcbiAgICApLm1hcChrID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogU2VhcmNoUXVlcnkuRklMRV9TSVpFX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cuZmlsZXNpemUuJyArIFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTW2tdXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBvblRhYkNoYW5nZSh0YWJJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRhYklkO1xuICAgIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0VHlwZScpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgIHN1Yjoge1xuICAgICAgICAgICAgY29udGV4dGZvbGRlcnR5cGU6IHt9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRhYklkID09PSAncmVzdHJpY3RDcmVhdGVkJykge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEFnZ3Moe1xuICAgICAgICB0eXBlOiB7fSxcbiAgICAgICAgY3JlYXRlZDoge31cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGFiSWQgPT09ICdyZXN0cmljdE1vZGlmaWNhdGlvbicpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIG1vZGlmaWVkOiB7fVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0RmlsZScpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIG1pbWV0eXBlZ3JvdXA6IHt9LFxuICAgICAgICBmaWxlc2l6ZToge31cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NRdWVyeShxdWVyeTogU2VhcmNoUXVlcnkpIHtcbiAgICAvLyBJTVBPUlRBTlQ6IG5ldmVyIGNoYW5nZSB0aGUgbG9jYWwgcXVlcnkgZGlyZWN0bHlcbiAgICAvLyB1c2Ugc2VhcmNoU2VydmljZSwgc28gZXZlcnkgY29tcG9uZW50cyBzdWJzY3JpYmVkIHRvIHRoZSBxdWVyeVxuICAgIC8vIHdpbGwgZ2V0IHRoZSBuZXcgdmFsdWVcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGhcbiAgICAgID8gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF0ubmFtZVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMuaXNTdG9yZWRRdWVyeSA9IHF1ZXJ5IGluc3RhbmNlb2YgU3RvcmVkUXVlcnk7XG5cbiAgICBpZiAodGhpcy5pc1N0b3JlZFF1ZXJ5KSB7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgdGhpcy5pc093blF1ZXJ5ID1cbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS51c2VyLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5mb3JFYWNoKGsgPT4gdGhpcy5wcm9jZXNzRmlsdGVycyhrKSk7XG4gICAgLy8gaWYgd2UgaGF2ZSBhbiBpbmRleGRhdGEgc2VhcmNoIHVzaW5nIGEgY29udGV4dCBidXQgdGhlIGNvbnRleHQgd2FzIHJlbW92ZWRcbiAgICBpZiAoXG4gICAgICAhdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoICYmXG4gICAgICB0aGlzLmlkeFNlYXJjaCAmJlxuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zXG4gICAgKSB7XG4gICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMgPSBudWxsO1xuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvbGRlclR5cGUgPSBudWxsO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmlsdGVyRnJvbUZvcm1EYXRhKCk7XG4gICAgICB9LCAyMDApO1xuICAgIH1cblxuICAgIC8vIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBzZXR1cCBhbiBpbmRleGRhdGEgc2VhcmNoXG4gICAgY29uc3QgYWN0aXZhdGVJbmRleGRhdGFTZWFyY2ggPSB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPT09IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5UWVBFU19TRVRcbiAgICAgIHx8IHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9PT0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLkNPTlRFWFRfRk9MREVSX1NFVDtcbiAgICBpZiAoYWN0aXZhdGVJbmRleGRhdGFTZWFyY2gpIHtcbiAgICAgIC8vIGhhdmluZyBqdXN0IG9uZSB0YXJnZXQgdHlwZSBhbmQgYSBjb250ZXh0IHR5cGUgc2V0dXAgbWVhbnMsIHRoYXQgd2UgYXJlIHVzaW5nIGluZGV4ZGF0YSBzZWFyY2hcbiAgICAgIHRoaXMuaW5kZXhkYXRhU2VhcmNoKFxuICAgICAgICB0aGlzLnF1ZXJ5LnR5cGVzWzBdLFxuICAgICAgICB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGggPiAwID8gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF0gOiBudWxsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKHRoaXMucXVlcnkpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIC8vIGhhdmluZyBqdXN0IG9uZSB0YXJnZXQgdHlwZSBhbmQgaW5kZXhkYXRhIGZpbHRlcnMgYWxzbyBtZWFucywgdGhhdCB3ZSBhcmUgdXNpbmcgaW5kZXhkYXRhIHNlYXJjaFxuICAgICAgdGhpcy5pbmRleGRhdGFTZWFyY2godGhpcy5xdWVyeS50eXBlc1swXSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIHJlc2V0IGluZGV4ZGF0YSBzZWFyY2ggb3RoZXJ3aXNlLCBiZWNhdXNlIHRoZSBjdXJyZW50IHF1ZXJ5IG1heSBiZSByZXNldCBmcm9tIG91dCBzaWRlIChlLmcuIGJ5IGEgc3RvcmVkIHF1ZXJ5KVxuICAgICAgdGhpcy5pZHhTZWFyY2ggPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChxdWVyeS5leHBlcnRNb2RlKSB7XG4gICAgICB0aGlzLnR5cGVHcm91cFRyZWUgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYnVpbGRUeXBlR3JvdXBUcmVlKCk7XG4gICAgfVxuICAgIHRoaXMucXVlcnlTY29wZSA9IHF1ZXJ5LnNjb3BlO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdE9iamVjdFR5cGUodHlwZTogT2JqZWN0VHlwZSkge1xuICAgIC8qKiBzZXQgdXAgdGhlIHJpZ2h0IHR5cGUgZmlsdGVyIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi9cbiAgICBjb25zdCBxdWVyeVR5cGVzTGVuZ3RoID1cbiAgICAgIHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID4gMSB8fCB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBxdWVyeVR5cGVzTGVuZ3RoQW5kTmFtZSA9XG4gICAgICB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnF1ZXJ5LnR5cGVzWzBdLm5hbWUgIT09IHR5cGUubmFtZTtcbiAgICBpZiAocXVlcnlUeXBlc0xlbmd0aCB8fCBxdWVyeVR5cGVzTGVuZ3RoQW5kTmFtZSkge1xuICAgICAgLy8gc2V0dGluZyBvYmplY3QgdHlwZXMgd2lsbCBlbWl0IGEgbmV3IHF1ZXJ5LiBUaGlzIHdpbGwgdGhlbiB0YWtlIGNhcmUgb2ZcbiAgICAgIC8vIHNldHRpbmcgdXAgdGhlIGluZGV4ZGF0YSBmb3JtXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0UXVlcnlUeXBlcyhbdHlwZV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGluZGV4ZGF0YSBzZWFyY2ggZm9yIGEgZ2l2ZW4gb2JqZWN0IHR5cGVcbiAgICogQHBhcmFtIHR5cGUgLSBhbiBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gY29udGV4dEZvbGRlclR5cGUgLSBjb250ZXh0IGZvbGRlciB0eXBlXG4gICAqL1xuICBwdWJsaWMgaW5kZXhkYXRhU2VhcmNoKHR5cGU6IE9iamVjdFR5cGUsIGNvbnRleHRGb2xkZXJUeXBlPzogT2JqZWN0VHlwZSkge1xuICAgIGlmICghdHlwZSB8fCB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID09PSAxICYmIHRoaXMucXVlcnkudHlwZXNbMF0ubmFtZSA9PT0gdHlwZS5uYW1lKSB7XG4gICAgICAvKiogZXZlbiBpZiB3ZSBzZWxlY3QgYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSBzZWxlY3RlZCwgd2UgbmVlZCB0byBjYWxsIGFnZ3JlZ2F0ZSBhcyB0aGVyZSBtYXkgYmUgY29udGV4dCB0eXBlcyBpbnZvbHZlZCAqL1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEFnZ3Moe1xuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgc3ViOiB7XG4gICAgICAgICAgICBjb250ZXh0Zm9sZGVydHlwZToge31cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHRydWUpO1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcml2ZWRUeXBlcyA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlcygpLmZpbHRlcih0ID0+IHQuc3VwZXJ0eXBlcy5pbmNsdWRlcyh0eXBlLnFuYW1lKSk7XG4gICAgY29uc3QgaXNSb290VHlwZSA9ICEhZGVyaXZlZFR5cGVzLmZpbmQodCA9PiB0LnBhcmVudHR5cGVzLmluY2x1ZGVzKCdzeXNyb290JykpIHx8ICEhdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnR5cGVzQWxsb3dlZFVuZGVyU3lzcm9vdC5maW5kKHJUID0+IHJULnFuYW1lID09PSB0eXBlLnFuYW1lKTtcblxuICAgIHRoaXMuaWR4U2VhcmNoID0ge1xuICAgICAgdHlwZSxcbiAgICAgIGNvbnRleHRGb2xkZXJUeXBlLFxuICAgICAgY29udGV4dE1vZGVsczogaXNSb290VHlwZSA/IFt0aGlzLnN5c1Jvb3RDb250ZXh0XSA6IFtdLFxuICAgICAgZm9ybU9wdGlvbnM6IG51bGxcbiAgICB9O1xuXG4gICAgLyoqIGZldGNoIGNvbnRleHQgdHlwZSBtb2RlbHMgKi9cbiAgICBpZiAodHlwZS5hbGxvd2VkY29udGV4dHR5cGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdG9GZXRjaCA9IFtdO1xuICAgICAgdHlwZS5hbGxvd2VkY29udGV4dHR5cGVzLmZvckVhY2goY29udGV4dFR5cGUgPT4ge1xuICAgICAgICBjb25zdCBvYmpUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY29udGV4dFR5cGUubmFtZSk7XG4gICAgICAgIGlmIChvYmpUeXBlKSB7XG4gICAgICAgICAgdG9GZXRjaC5wdXNoKFxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGVGb3JtKFxuICAgICAgICAgICAgICBjb250ZXh0VHlwZS5uYW1lLFxuICAgICAgICAgICAgICAnU0VBUkNIJyxcbiAgICAgICAgICAgICAgJ0NPTlRFWFQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodG9GZXRjaC5sZW5ndGgpIHtcbiAgICAgICAgb2JzZXJ2YWJsZUZvcmtKb2luKHRvRmV0Y2gpLnN1YnNjcmliZShmb3JtTW9kZWxzID0+IHtcbiAgICAgICAgICAvKiogYWJzdHJhY3QgY29udGV4dCB0eXBlcyBzaG91bGQgbm90IGJlIHVzZWQgKi9cbiAgICAgICAgICB0aGlzLmFkZENvbnRleHRNb2RlbChmb3JtTW9kZWxzKTtcbiAgICAgICAgICAvKiogaWYgdGhlcmUgd2FzIGEgY29udGV4dCB0eXBlIHByb3ZpZGVkIGJ5IHRoZSBxdWVyeSwgd2UnbGwgc2V0dXAgdGhlIHJpZ2h0IG1vZGVsIGFzIHdlbGwgKi9cbiAgICAgICAgICBpZiAoY29udGV4dEZvbGRlclR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5pZHhTZWFyY2guY29udGV4dE1vZGVscy5maW5kKFxuICAgICAgICAgICAgICBtID0+IG0ubmFtZSA9PT0gY29udGV4dEZvbGRlclR5cGUubmFtZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKG1vZGVsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29udGV4dChtb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRGb2xkZXJUeXBlLm5hbWUgPT09IENvbnRleHRUeXBlLnN5c3Jvb3QpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb250ZXh0KHRoaXMuc3lzUm9vdENvbnRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLyoqIHRoZSBwcm92aWRlZCBjb250ZXh0IHR5cGUgZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHNvIGp1c3QgcmVtb3ZlIGl0ICovXG4gICAgICAgICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb2xkZXJUeXBlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmb3JtRGF0YTtcbiAgICBsZXQgaWR4RmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gc2V0IHVwIGZvcm0gZGF0YSBmcm9tIGluZGV4ZGF0YSBxdWVyeSBmaWx0ZXJzXG4gICAgICBmb3JtRGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqZWN0VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHR5cGUubmFtZSk7XG4gICAgaWYgKG9iamVjdFR5cGUpIHtcbiAgICAgIHRoaXMuc3lzdGVtU2VydmljZVxuICAgICAgICAuZ2V0T2JqZWN0VHlwZUZvcm0odHlwZS5uYW1lLCAnU0VBUkNIJylcbiAgICAgICAgLnN1YnNjcmliZShtb2RlbCA9PiB7XG4gICAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBmb3JtTW9kZWw6IG1vZGVsLFxuICAgICAgICAgICAgZGF0YTogZm9ybURhdGFcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NRdWVyeVN0YXRlKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5xdWVyeVN0YXRlID0gcXVlcnlTdGF0ZTtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2gpIHtcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRBZ2dyZWdhdGlvbnMgPSB7fTtcbiAgICAgIGlmIChxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy5jb250ZXh0VHlwZS5zaXplKSB7XG4gICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRBZ2dyZWdhdGlvbnMgPSB0aGlzLmJ1aWxkQ29udGV4dEFnZ3JlZ2F0aW9ucyhxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy5jb250ZXh0VHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2F2ZSBhZ2dyZWdhdGlvbnMgdmFsdWVzXG4gICAgaWYgKCF0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEVdIHx8ICF0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCB8fCBxdWVyeVN0YXRlLmxhc3RDaGFuZ2UgIT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEUpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRV0gPSBuZXcgTWFwKHF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLnR5cGUpO1xuICAgIH1cblxuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVELCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpO1xuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFRCwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKTtcbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTUlNRVRZUEVHUk9VUCwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOKTtcbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuRklMRVNJWkUsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSk7XG4gIH1cblxuICBidWlsZENvbnRleHRBZ2dyZWdhdGlvbnMoY29udGV4dFR5cGUpIHtcbiAgICBsZXQgY29udGV4dEFnZ3JlZ2F0aW9ucyA9IHt9O1xuICAgIGNvbnRleHRUeXBlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IGNvbnRleHRBZ2dyZWdhdGlvbnNba2V5XSA9IHZhbHVlKTtcbiAgICByZXR1cm4gY29udGV4dEFnZ3JlZ2F0aW9ucztcbiAgfVxuXG4gIHByb2Nlc3NGaWx0ZXJzKGs6IHN0cmluZykge1xuICAgIGxldCBmOiBTZWFyY2hGaWx0ZXIgPSB0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNba10pO1xuICAgIGlmICghZikge1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNba11dID0ge1xuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgbXVsdGlWYWx1ZTogW10sXG4gICAgICAgIGlubmVyVmFsdWU6IFtdXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0gfHxcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmZpbHRlciAhPT0gZlxuICAgICkge1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0gPSB7fTtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmZpbHRlciA9IGY7XG4gICAgICBsZXQgdmFsdWU6IGFueSA9XG4gICAgICAgIHR5cGVvZiBmLmZpcnN0VmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgZi5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOXG4gICAgICAgICAgPyBKU09OLnBhcnNlKGYuZmlyc3RWYWx1ZSlcbiAgICAgICAgICA6IHR5cGVvZiBmLmZpcnN0VmFsdWUgIT09ICdib29sZWFuJyA/IFtmLmZpcnN0VmFsdWVdIDogZi5maXJzdFZhbHVlO1xuICAgICAgaWYgKGYub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSkge1xuICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5tdWx0aVZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLnZhbHVlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVEIHx8XG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRURcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSBuZXcgUmFuZ2VWYWx1ZShmLm9wZXJhdG9yLCBmLmZpcnN0VmFsdWUsIGYuc2Vjb25kVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLm11bHRpVmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uaW5uZXJWYWx1ZSA9XG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5sYWJlbCA9IFtdO1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uaW5uZXJWYWx1ZS5mb3JFYWNoKCh2OiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRPUiB8fFxuICAgICAgICAgIGYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVSXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmxhYmVsW2ldID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5sYWJlbFtpXSA9IG9ic2VydmFibGVPZihcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmlsdGVyKGYsIHYpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3luY0FnZ3JlZ2F0aW9ucyhuYW1lLCBvcGVyYXRvcikge1xuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbbmFtZV0uZm9yRWFjaChhZ2cgPT4ge1xuICAgICAgbGV0IGEgPSB0aGlzLnF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zW25hbWVdLmZpbmQoYWEgPT4gYWEua2V5ID09PSBhZ2cua2V5KTtcbiAgICAgIGlmIChhICYmIGEudmFsdWUgIT09IGFnZy52YWx1ZSkge1xuICAgICAgICBhZ2cudmFsdWUgPSBhLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmICghYSAmJiB0aGlzLnF1ZXJ5U3RhdGUubGFzdENoYW5nZSAhPT0gbmFtZSkge1xuICAgICAgICBhZ2cudmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICAgIGFnZy5zZWxlY3RlZCA9IHRoaXMuaXNGaWx0ZXJBY3RpdmUobmFtZSwgb3BlcmF0b3IsIGFnZy5rZXkpO1xuICAgICAgYWdnLnNhdmVkID0gIWEgJiYgdGhpcy5xdWVyeVN0YXRlLmxhc3RDaGFuZ2UgPT09IG5hbWU7XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXJGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlUmVzdHJpY3Rpb24oZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtmaWx0ZXIucHJvcGVydHldKSB7XG4gICAgICBsZXQgYWdnID0gdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtmaWx0ZXIucHJvcGVydHldLmZpbmQoYSA9PiBhLmtleSA9PT0gdmFsdWUpO1xuICAgICAgcmV0dXJuIGFnZy5sYWJlbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY3JlYXRlRGF0ZVJlc3RyaWN0aW9uKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgc3dpdGNoIChmaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFOlxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgZW8uc2VhcmNoLmFnZy50aW1lLiR7ZmlsdGVyLmZpcnN0VmFsdWV9YCk7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTDpcbiAgICAgICAgcmV0dXJuIGA9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0RGF0ZScpfWA7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEg6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnQnKX0gLSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5zZWNvbmRWYWx1ZSwgJ2VvU2hvcnQnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuR1JFQVRFUl9PUl9FUVVBTDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuLnNpbmNlJyl9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkxFU1NfT1JfRVFVQUw6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guYWdnLnRpbWUuc3Bhbi51bnRpbCcpfSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydCcpfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYCgke2ZpbHRlci5vcGVyYXRvcn0pICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlTGFiZWwobW9kZWw6IGFueSwgdmFsdWU6IGFueVtdKSB7XG4gICAgbW9kZWwubGFiZWwuZm9yRWFjaCgobCwgaSkgPT4gbC5uZXh0KHZhbHVlW2ldLnRpdGxlKSk7XG4gIH1cblxuICByZXNvbHZlU2VsZWN0aW9uKGFnZ3M6IGFueVtdLCBrZXk6IHN0cmluZywgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gYWdnc1xuICAgICAgLmZpbHRlcihhID0+IHNlbGVjdGVkID8gYS5rZXkgIT09IGtleSAmJiBhLnNlbGVjdGVkIDogYS5rZXkgPT09IGtleSB8fCBhLnNlbGVjdGVkKVxuICAgICAgLm1hcChhID0+IGEua2V5KTtcbiAgfVxuXG4gIHJlc2V0RXhwZXJ0TW9kZUlucHV0KCkge1xuICAgIHRoaXMucXVlcnkudGVybSA9ICcnO1xuICAgIHRoaXMudGVybUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICB0ZXJtOiAnJ1xuICAgIH0pO1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVFeHBlcnRNb2RlKCkge1xuICAgIGlmICh0aGlzLnR5cGVHcm91cFRyZWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnR5cGVHcm91cFRyZWUgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYnVpbGRUeXBlR3JvdXBUcmVlKCk7XG4gICAgfVxuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVFeHBlcnRNb2RlKCk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5jaGFuZ2VTZWFyY2hJbnB1dEZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UXVlcnlTY29wZShzY29wZTogUXVlcnlTY29wZSkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRRdWVyeVNjb3BlKHNjb3BlKTtcbiAgfVxuXG4gIHB1YmxpYyB4cFNlbGVjdEdyb3VwKGdyb3VwKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIHhwU2VsZWN0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgPSB0eXBlO1xuICB9XG5cbiAgcHVibGljIHhwQWRkVG9UZXJtKHN0cikge1xuICAgIGxldCB0ZXJtO1xuICAgIGlmICghdGhpcy5xdWVyeS50ZXJtKSB7XG4gICAgICB0ZXJtID0gc3RyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXJtID0gdGhpcy5xdWVyeS50ZXJtICsgJyAnICsgc3RyO1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5LnRlcm0gPSB0ZXJtICsgJzonO1xuICAgIHRoaXMuZXhwZXJ0SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVR5cGUoX3R5cGU6IE9iamVjdFR5cGUpIHtcbiAgICAvLyBkbyBub3QgZGlyZWN0bHkgdG9nZ2xlIF90eXBlIG9uIHRoZSBxdWVyeSwgaW5zdGVhZCB1c2UgdGhlXG4gICAgLy8gc2VhcmNoU2VydmljZSB0byB1cGRhdGUgdGhlIHF1ZXJ5IHN0b3JlXG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5VHlwZShfdHlwZSk7XG4gIH1cblxuICBwdWJsaWMgaXNUeXBlQWN0aXZlKF90eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVyeS50eXBlcy5maW5kKHQgPT4gdC5pZCA9PT0gX3R5cGUuaWQpO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRpb25Db3VudChfdHlwZTogT2JqZWN0VHlwZSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLnR5cGUuZ2V0KF90eXBlLm5hbWUpIHx8ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KSB7XG4gICAgaWYgKGtleSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgU2VhcmNoRmlsdGVyKGZpbHRlclR5cGUsIGtleS5vcGVyYXRvciwga2V5LmZpcnN0VmFsdWUsIGtleS5zZWNvbmRWYWx1ZSwge3RpbWU6IGtleS5vcGVyYXRvciAhPT0gdGhpcy5PUEVSQVRPUi5FUVVBTCwgdGltZXpvbmU6IGZhbHNlfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgU2VhcmNoRmlsdGVyKGZpbHRlclR5cGUsIG9wZXJhdG9yLCBrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRGaWx0ZXIoZmlsdGVyVHlwZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCBrZXk6IGFueSwgZm9ybT86IE5nRm9ybSkge1xuICAgIGxldCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKGZpbHRlclR5cGUsIG9wZXJhdG9yLCBrZXkpO1xuICAgIGxldCBlbXB0eSA9IHRoaXMuaXNFbXB0eShmaWx0ZXIpO1xuICAgIGxldCBhY3RpdmVGaWx0ZXIgPSB0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5wcm9wZXJ0eSA9PT0gZmlsdGVyLnByb3BlcnR5KTtcbiAgICBsZXQgZHVwbGljYXRlID0gdGhpcy5pc0ZpbHRlckFjdGl2ZShmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcblxuICAgIGlmIChlbXB0eSAmJiBhY3RpdmVGaWx0ZXIgJiYgYWN0aXZlRmlsdGVyLm9wZXJhdG9yICE9PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5yZW1vdmVRdWVyeUZpbHRlcihmaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAoIWVtcHR5ICYmICFkdXBsaWNhdGUpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZGRRdWVyeUZpbHRlcihmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVGaWx0ZXIoZmlsdGVyVHlwZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCBrZXk6IGFueSwgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICBsZXQgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICBpZiAoZmlsdGVyVHlwZSA9PT0gdGhpcy5QQVJBTVMuRklMRVNJWkUpIHtcbiAgICAgIGxldCBmb2xkZXJGaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKCdmb2xkZXInLCAnZXEnLCBmYWxzZSk7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlGaWx0ZXJzKFtmaWx0ZXIsIGZvbGRlckZpbHRlcl0sICFzZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVRdWVyeUZpbHRlcihmaWx0ZXIsICFzZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRW1wdHkodmFsdWU6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICAoKHZhbHVlIGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNlYXJjaEZpbHRlcikgJiZcbiAgICAgICAgdGhpcy5pc0VtcHR5KHZhbHVlLmZpcnN0VmFsdWUpICYmXG4gICAgICAgIHRoaXMuaXNFbXB0eSh2YWx1ZS5zZWNvbmRWYWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPT09IDApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0ZpbHRlckFjdGl2ZShmaWx0ZXJUeXBlOiBzdHJpbmcsIG9wZXJhdG9yOiBzdHJpbmcsIGtleTogYW55KSB7XG4gICAgbGV0IGYgPSB0aGlzLmJ1aWxkRmlsdGVyKGZpbHRlclR5cGUsIG9wZXJhdG9yLCBrZXkpO1xuICAgIHJldHVybiAhIXRoaXMucXVlcnkuZmlsdGVycy5maW5kKGZmID0+IGZmLm1hdGNoKGYucHJvcGVydHksIGYub3BlcmF0b3IsIGYuZmlyc3RWYWx1ZSwgZi5zZWNvbmRWYWx1ZSkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0RmlsdGVyKG1vZGVsOiBhbnksIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobW9kZWwuaW5uZXJWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIG1vZGVsLmlubmVyVmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgbGV0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIobW9kZWwuZmlsdGVyLnByb3BlcnR5LCBtb2RlbC5maWx0ZXIub3BlcmF0b3IsIG1vZGVsLmlubmVyVmFsdWUuZmlsdGVyKGYgPT4gZiAhPT0gdmFsdWUpKTtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZGRRdWVyeUZpbHRlcihmaWx0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVtb3ZlUXVlcnlGaWx0ZXIobW9kZWwuZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9jb21wbGV0ZVN1Z2dlc3QoZXZ0Pykge1xuICAgIGxldCB2ID0gW107XG4gICAgLy8gYWxzbyB0cmlnZ2VyIGFnZ3JlZ2F0aW9ucyBzZWFyY2hcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVNlbGVjdCgpO1xuICAgIGlmIChldnQpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZVxuICAgICAgICAuYXV0b2NvbXBsZXRlKGV2dClcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKHJlcyA9PiBvYnNlcnZhYmxlRnJvbShyZXMpLnBpcGUocGx1Y2soJ3ZhbHVlJykpKSlcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4gdi5wdXNoKHJlcyksICgpID0+IHsgfSwgKCkgPT4gKHRoaXMuYXV0b2NvbXBsZXRlUmVzdWx0cyA9IHYpXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZXhwZXJ0VGVybUNoYW5nZWQoKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGF1dG9jb21wbGV0ZVNlbGVjdCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG4gIH1cblxuICBhdXRvY29tcGxldGVQYXN0ZShlKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnF1ZXJ5LnRlcm0gPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU2VsZWN0KCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZVNlYXJjaCgpIHtcbiAgICB0aGlzLmV4cGVydE1vZGVRdWVyeUVtcHR5ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMucXVlcnkuZXhwZXJ0TW9kZSkge1xuICAgICAgLy8gaW4gZXhwZXJ0IHNlYXJjaCBtb2RlIHdlIHByZS1mZXRjaCByZXN1bHRzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdHVhbCBzZWFyY2hcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRTZWFyY2hTdGF0ZSh7YWdnczoge3R5cGU6IHt9fSwgLi4udGhpcy5xdWVyeS5nZXRRdWVyeUpzb24oKX0pLnN1YnNjcmliZSgocXVlcnlTdGF0ZTogU2VhcmNoU3RhdGUpID0+IHtcbiAgICAgICAgLy8gb25seSBleGVjdXRlIHRoZSBhY3R1YWwgcXVlcnkgd2hlbiB3ZSd2ZSBmb3VuZCBzb21ldGhpbmdcbiAgICAgICAgaWYgKCFxdWVyeVN0YXRlLmlzRW1wdHkpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmV4cGVydE1vZGVRdWVyeUVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSwgVXRpbHMudGhyb3coKCkgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc2VhcmNoIHJlc3VsdCcpO1xuICAgICAgICB0aGlzLmV4cGVydE1vZGVRdWVyeUVtcHR5ID0gdHJ1ZTtcbiAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICB9XG4gIH1cblxuICAvLyBleGVjdXRlIHRoZSBhY3R1YWwgc2VhcmNoIGJ5IHJvdXRpbmcgdG8gdGhlIHJlc3VsdCBzdGF0ZSB3aGljaCB0aGVuIHdpbGwgZXhlY3V0ZSB0aGVcbiAgLy8gcXVlcnkgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdHNcbiAgcHJpdmF0ZSB0cmlnZ2VyU2VhcmNoKCkge1xuICAgIHRoaXMucXVlcnkucmVzb2x2ZVJlZmVyZW5jZSA9IHRydWU7XG4gICAgY29uc3QgdXJpUGFyYW0gPSBlbmNvZGVVUklDb21wb25lbnQoVXRpbHMuZm9ybURhdGFTdHJpbmdpZnkodGhpcy5xdWVyeS5nZXRRdWVyeUpzb24oKSkpO1xuICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbe291dGxldHM6IHttb2RhbDogbnVsbH19XSkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCB1cmlQYXJhbVF1ZXJ5OiBOYXZpZ2F0aW9uRXh0cmFzID0ge3F1ZXJ5UGFyYW1zOiB7cXVlcnk6IHVyaVBhcmFtfX07XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9yZXN1bHQnXSwgdXJpUGFyYW1RdWVyeSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlVGVybSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0VGVybSgnJyk7XG4gICAgdGhpcy5yZXNldEV4cGVydE1vZGVJbnB1dCgpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVR5cGUodHlwZTogT2JqZWN0VHlwZSkge1xuICAgIGlmICh0aGlzLmlkeFNlYXJjaCkge1xuICAgICAgdGhpcy5leGl0SW5kZXhkYXRhU2VhcmNoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVRdWVyeVR5cGUodHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZUNvbnRleHRUeXBlKCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVtb3ZlUXVlcnlGaWx0ZXIoZmlsdGVyKTtcblxuICAgIC8vIGlmIHdlIGFyZSBpbiBpbmRlc2RhdGEgc2VhcmNoIG1vZGUsIHJlbW92aW5nIGEgZmlsdGVyIHRoYXQgaXMgbm8gYmFzZXBhcmFtIGZpbHRlclxuICAgIC8vIHJlcXVpcmVzIHRoZSBmcm9tIG1vZGVsIHRvIGJlIHVwZGF0ZWRcbiAgICBpZiAodGhpcy5pZHhTZWFyY2ggJiYgIXRoaXMuYXBwU2VhcmNoU2VydmljZS5pc0Jhc2VQYXJhbUZpbHRlcihmaWx0ZXIpKSB7XG4gICAgICAvLyB0b2RvOiB1cGRhdGUgZm9ybSBtb2RlbC9kYXRhXG4gICAgICBsZXQgaWR4RmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuICAgICAgaWYgKGlkeEZpbHRlcnMgJiYgaWR4RmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIHNldCB1cCBmb3JtIGRhdGEgZnJvbSBpbmRleGRhdGEgcXVlcnkgZmlsdGVyc1xuICAgICAgICB0aGlzLmlkeFNlYXJjaC5mb3JtT3B0aW9ucy5kYXRhID0gaWR4RmlsdGVycztcbiAgICAgICAgdGhpcy5pbmRleGRhdGFGb3JtLnNldEZvcm1EYXRhKGlkeEZpbHRlcnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgbm8gZmlsdGVycyBhcmUgcHJlc2VudCByZXNldCB0aGUgZm9ybVxuICAgICAgICB0aGlzLmlkeFNlYXJjaC5mb3JtT3B0aW9ucy5kYXRhID0ge307XG4gICAgICAgIHRoaXMuaW5kZXhkYXRhRm9ybS5yZXNldEZvcm0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRDb250ZXh0TW9kZWwoZm9ybU1vZGVscyk6IHZvaWQge1xuICAgIGxldCBtb2RlbHMgPSBbLi4uZm9ybU1vZGVsc107XG4gICAgdGhpcy5pZHhTZWFyY2guY29udGV4dE1vZGVscy5wdXNoKC4uLm1vZGVscyk7XG4gICAgdGhpcy5pZHhTZWFyY2guY29udGV4dE1vZGVscy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpO1xuICB9XG5cbiAgcHVibGljIGV4aXRJbmRleGRhdGFTZWFyY2goKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmV4aXRJbmRleGRhdGFTZWFyY2goKTtcbiAgICB0aGlzLmlkeFNlYXJjaCA9IG51bGw7XG4gIH1cblxuICBzZXRDb250ZXh0KGNvbnRleHRGb2xkZXJOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoY29udGV4dEZvbGRlck5hbWUgJiYgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgIT09IGNvbnRleHRGb2xkZXJOYW1lKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9IGNvbnRleHRGb2xkZXJOYW1lO1xuICAgICAgY29uc3QgY29udGV4dFR5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZShjb250ZXh0Rm9sZGVyTmFtZSk7XG4gICAgICBpZiAoY29udGV4dEZvbGRlck5hbWUgPT09IENvbnRleHRUeXBlLnN5c3Jvb3QpIHtcbiAgICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKHtuYW1lOiBDb250ZXh0VHlwZS5zeXNyb290LCBsYWJlbDogQ29udGV4dFR5cGUuc3lzcm9vdH0gYXMgT2JqZWN0VHlwZSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlKSB7XG4gICAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShjb250ZXh0VHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQ29udGV4dCB0eXBlICcke2NvbnRleHRGb2xkZXJOYW1lfScgbm90IGZvdW5kLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gICAgICB0aGlzLmN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYSBjb250ZXh0IHR5cGUgZm9yIHRoZSBjdXJyZW50IHNlYXJjaFxuICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IGZvcm0gbW9kZWxcbiAgICovXG4gIHByaXZhdGUgc2VsZWN0Q29udGV4dChjdHgpIHtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zICYmIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucy5mb3JtTW9kZWwubmFtZSA9PT0gY3R4Lm5hbWUpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvbnRleHQ7XG4gICAgICBpZiAoY3R4Lm5hbWUgPT09IENvbnRleHRUeXBlLnN5c3Jvb3QpIHtcbiAgICAgICAgY29udGV4dCA9IGN0eDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZShjdHgubmFtZSk7XG4gICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb2xkZXJUeXBlID0gY29udGV4dDtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShjb250ZXh0KTtcblxuICAgICAgbGV0IGZvcm1EYXRhID0ge307XG4gICAgICBsZXQgaWR4RmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuICAgICAgaWYgKGlkeEZpbHRlcnMgJiYgaWR4RmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvcm1EYXRhID0gaWR4RmlsdGVycztcbiAgICAgIH1cblxuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zID0ge2Zvcm1Nb2RlbDogY3R4LCBkYXRhOiBmb3JtRGF0YX07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSW5kZXhEYXRhQ2hhbmdlZChldmVudDogRm9ybVN0YXR1c0NoYW5nZWRFdmVudCkge1xuICAgIC8vIG9ubHkgdHJpZ2dlciB3aGVuIHZhbHVlcyBhcmUgY2hhbmdlZCBhcyBjaGFuZ2VzIG1heSBhbHNvIGFwcGVhciB3aGVuIHNjcmlwdHNcbiAgICAvLyBjaGFuZ2Ugb3RoZXIgZm9ybSBlbGVtZW50IHByb3BlcnRpZXMgKGVnLiByZWFkb25seSwgcmVxdWlyZWQgZmxhZylcbiAgICBpZiAoZXZlbnQuaW5kZXhkYXRhQ2hhbmdlZCkge1xuICAgICAgdGhpcy51cGRhdGVTZWFyY2hGaWx0ZXJGcm9tRm9ybURhdGEoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlYXJjaEZpbHRlckZyb21Gb3JtRGF0YSgpIHtcbiAgICBpZiAoIXRoaXMuaW5kZXhkYXRhRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBtZXRhZGF0YSBmaWx0ZXJzIGZvciBlYWNoIGZvcm0gZGF0YSBlbnRyeVxuICAgIGxldCBpZHhGaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSA9IFtdO1xuICAgIGxldCBmb3JtRGF0YSA9IHRoaXMuaW5kZXhkYXRhRm9ybS5nZXRGb3JtRGF0YSgpO1xuICAgIGlmICh0aGlzLmNvbnRleHRGb3JtKSB7XG4gICAgICBmb3JtRGF0YSA9IE9iamVjdC5hc3NpZ24oZm9ybURhdGEsIHRoaXMuY29udGV4dEZvcm0uZ2V0Rm9ybURhdGEoKSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGZvcm1EYXRhKSkge1xuICAgICAgY29uc3QgZmlsdGVyczogU2VhcmNoRmlsdGVyW10gPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0U2VhcmNoRmlsdGVyKHRoaXMucXVlcnkudHlwZXMsIGtleSwgZm9ybURhdGFba2V5XSkubWFwKGZpbHRlciA9PiB7XG4gICAgICAgIC8vIHRoZSBzZWFyY2ggc2VydmljZSBkb2VzIG5vdCBsaWtlIG5ld2xpbmUgY2hhcnMgaW4gY2FzZSBvZiBtdWx0aWxpbmUgZmllbGRzXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlci5maXJzdFZhbHVlKSkge1xuICAgICAgICAgIGlmKGZpbHRlci5maXJzdFZhbHVlPy5sZW5ndGggPT09IDApe1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbHRlci5maXJzdFZhbHVlID0gZmlsdGVyLmZpcnN0VmFsdWUubWFwKHZhbHVlID0+IHZhbHVlLnJlcGxhY2UoL1xcbi9nLCAnICcpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyLmZpcnN0VmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgZmlsdGVyLmZpcnN0VmFsdWUgPSBmaWx0ZXIuZmlyc3RWYWx1ZS5yZXBsYWNlKC9cXG4vZywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfSk7XG4gICAgICBmaWx0ZXJzLmZvckVhY2goZiA9PiBpZHhGaWx0ZXJzLnB1c2goZikpO1xuICAgIH1cbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoaWR4RmlsdGVycyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgb2JqZWN0IHR5cGUgZWxlbWVudCBmb3IgYSBmaWx0ZXIsIHRvIGJlIGFibGUgdG8gc2hvdyB0aGVcbiAgICogbGFiZWwgZm9yIGEgZmlsdGVyIGluIHRoZSBzZWFyY2ggc3VtbWFyeS5cbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciAtIHRoZSBmaWx0ZXIgdG8gZmV0Y2ggb2JqZWN0IHR5cGUgZWxlbWVudCBmb3JcbiAgICovXG4gIHB1YmxpYyBnZXRPYmplY3RUeXBlRWxlbWVudExhYmVsKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgbGV0IG90ID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldFRhcmdldFR5cGVFbGVtZW50QnlOYW1lKGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgcmV0dXJuIG90ID8gb3QubGFiZWwgOiBmaWx0ZXIucHJvcGVydHkgKyAnIC0gJyArIGZpbHRlci5maXJzdFZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNhdmVRdWVyeSgpIHtcbiAgICAvLyBjb25zdCBxdWVyeVBhcmFtczogTmF2aWdhdGlvbkV4dHJhcyA9IHtxdWVyeVBhcmFtc0hhbmRsaW5nIDogJ3ByZXNlcnZlJ307XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgIHRoaXMucm91dGVyXG4gICAgICAubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0sIHtyZXBsYWNlVXJsOiB0cnVlfSlcbiAgICAgIC50aGVuKCgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3N0b3JlZC1xdWVyaWVzJ10sIHtxdWVyeVBhcmFtczoge2NyZWF0ZTogdHJ1ZX19KSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3RvcmVkUXVlcnkoKSB7XG4gICAgaWYgKHRoaXMucXVlcnkgaW5zdGFuY2VvZiBTdG9yZWRRdWVyeSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0sIHtyZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICB0aGlzLnN0b3JlZFF1ZXJpZXNTZXJ2aWNlLnNhdmVTdG9yZWRRdWVyeSh0aGlzLnF1ZXJ5KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuc3VjY2Vzcyh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guc3RvcmVkcXVlcnkuc2F2ZS5zdWNjZXNzJykpO1xuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LnNhdmUuZXJyb3InKSkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldFF1ZXJ5KCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuaXNPd25RdWVyeSA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZXNldEV4cGVydE1vZGVJbnB1dCgpO1xuXG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoKSB7XG4gICAgICB0aGlzLmV4aXRJbmRleGRhdGFTZWFyY2goKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZVNlYXJjaE1lbnUoKSB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICB9XG5cbiAgbW92ZU9iamVjdFR5cGVHcm91cChncm91cExhYmVsOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmZpbmRJbmRleChncm91cCA9PiBncm91cExhYmVsID09PSBncm91cC5sYWJlbCk7XG4gICAgbGV0IG5ld0luZGV4O1xuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBuZXdJbmRleCA9IGluZGV4IC0gMTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgbmV3SW5kZXggPSBpbmRleCArIDE7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdmaXJzdCcpIHtcbiAgICAgIG5ld0luZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xhc3QnKSB7XG4gICAgICBuZXdJbmRleCA9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGggLSAxO1xuICAgICAgaWYgKGluZGV4ID09PSBuZXdJbmRleCkgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IDApIHtcbiAgICAgIGluZGV4ICs9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGg7XG4gICAgfVxuICAgIHdoaWxlIChuZXdJbmRleCA8IDApIHtcbiAgICAgIG5ld0luZGV4ICs9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChuZXdJbmRleCA+PSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoKSB7XG4gICAgICBsZXQgayA9IG5ld0luZGV4IC0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCArIDE7XG4gICAgICB3aGlsZSAoay0tKSB7XG4gICAgICAgIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5zcGxpY2UobmV3SW5kZXgsIDAsIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5zcGxpY2UoaW5kZXgsIDEpWzBdKTtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5vYmplY3RUeXBlR3JvdXBzU3RvcmFnZUtleSwgdGhpcy5vYmplY3RUeXBlR3JvdXBzLm1hcChncm91cCA9PiBncm91cC5sYWJlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1NlYXJjaElucHV0KCkge1xuICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG5cbiAgICAgIC8vIFRPRE86IHRoaXMuc2VhcmNoSW5wdXQuaW5wdXRFTC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVNlYXJjaElucHV0Rm9jdXMoKSB7XG4gICAgaWYgKHRoaXMucXVlcnkuZXhwZXJ0TW9kZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZWxlY3RSb290RWxlbWVudCgnLmV4cGVydC1zZWFyY2hfX2lucHV0JykuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c1NlYXJjaElucHV0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0aGlzLmNhcGFiaWxpdHlTZXJ2aWNlLmdldENhcGFiaWxpdGllcygpO1xuICAgIHRoaXMub2JqZWN0VHlwZUdyb3VwcyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5vYmplY3RUeXBlR3JvdXBzO1xuICAgIHRoaXMub2JqZWN0VHlwZUdyb3Vwc1swXS50eXBlcyA9IHRoaXMub2JqZWN0VHlwZUdyb3Vwc1swXS50eXBlcy5maWx0ZXIodHlwZSA9PiB0eXBlLnFuYW1lICE9PSAnc3lzZm9sZGVyJyAmJiB0eXBlLnFuYW1lICE9PSAnc3lzZG9jdW1lbnQnICYmIHR5cGUucW5hbWUgIT09ICdzeXNvYmplY3QnKTtcbiAgICBsZXQgc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMub2JqZWN0VHlwZUdyb3Vwc1N0b3JhZ2VLZXkpO1xuICAgIGxldCBzeW5jZWQgPSB0cnVlO1xuICAgIGlmIChzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMgJiYgc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmxlbmd0aCA9PT0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMuZmluZChncm91cCA9PiBncm91cCA9PT0gdGhpcy5vYmplY3RUeXBlR3JvdXBzW2ldLmxhYmVsKSkge1xuICAgICAgICAgIHN5bmNlZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3luY2VkKSB7XG4gICAgICAgIHRoaXMub2JqZWN0VHlwZUdyb3VwcyA9IFsuLi50aGlzLm9iamVjdFR5cGVHcm91cHNdLnNvcnQoXG4gICAgICAgICAgKGEsIGIpID0+IHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscy5pbmRleE9mKGEubGFiZWwpIC0gc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmluZGV4T2YoYi5sYWJlbClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5xdWVyeSQuc3Vic2NyaWJlKFxuICAgICAgKHF1ZXJ5OiBTZWFyY2hRdWVyeSkgPT4gdGhpcy5wcm9jZXNzUXVlcnkocXVlcnkpKTtcbiAgICAvLyBzdWJzY3JpYmUgdG8gcXVlcnkgc3RhdGUgYXMgd2VsbCB0byBmZXRjaCByZXN1bHQgY291bnQgYW5kIGFnZ3JlZ2F0aW9ucyBhcyB0aGV5IGNoYW5nZVxuICAgIHRoaXMucXVlcnlTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5xdWVyeVN0YXRlJC5zdWJzY3JpYmUoKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB0aGlzLnByb2Nlc3NRdWVyeVN0YXRlKHF1ZXJ5U3RhdGUpKTtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG5cbiAgICB0aGlzLnRlcm1Gb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgIHRoaXMucXVlcnkudGVybSA9IHJlcy50ZXJtO1xuICAgICAgfSksIGRlYm91bmNlVGltZSgxMDAwKSwgdW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICBpZiAodGhpcy5xdWVyeS50ZXJtPy5zdGFydHNXaXRoKCdcXFwiJykgJiYgIXRoaXMucXVlcnkudGVybT8uZW5kc1dpdGgoJ1xcXCInKSkge1xuICAgICAgICAgIHRoaXMucXVlcnkudGVybSArPSBcIlxcXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN1Z2dlc3QodGhpcy5xdWVyeS50ZXJtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dC5mb2N1c0lucHV0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5vcGVuKHRoaXMudHBsU2VhcmNoLCBudWxsLCB7XG4gICAgICBjZW50ZXJlZDogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLnRlcm1Gb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgdGVybTogdGhpcy5xdWVyeS50ZXJtXG4gICAgfSk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5hZnRlckNsb3NlZCQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXNIYW5kbGluZzogJ3ByZXNlcnZlJ307XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCBxdWVyeVBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVzZXRBZ2dzKCk7XG4gICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucXVlcnlTdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8IS0tIDxlby1kaWFsb2cgW3Zpc2libGVdPVwidHJ1ZVwiIFtzdHlsZUNsYXNzXT1cIidlby1hcHAtc2VhcmNoLWRpYWxvZydcIiBbYWxpZ25dPVwiJ3N0YXJ0J1wiIFttaW5XaWR0aF09XCInODB2dydcIlxuICBbbWluSGVpZ2h0XT1cIicxMDB2aCdcIiAoaGlkZSk9XCJjbG9zZVNlYXJjaE1lbnUoJGV2ZW50KVwiPiAtLT5cbjwhLS0gPHl2Yy1kaWFsb2cgW29wdGlvbnNdPVwie2xpZ2h0RGlzbWlzczogdHJ1ZX1cIiBbdGVtcGxhdGVdPVwidHBsU2VhcmNoXCIgKGNsb3NlZCk9XCJjbG9zZVNlYXJjaE1lbnUoKVwiPjwveXZjLWRpYWxvZz4gLS0+XG48bmctdGVtcGxhdGUgI3RwbFNlYXJjaD5cblxuICA8ZGl2IGNsYXNzPVwiZW8tYXBwLXNlYXJjaFwiIFtuZ0NsYXNzXT1cIntleHBlcnQ6IHF1ZXJ5LmV4cGVydE1vZGV9XCIgZW9SdGxBd2FyZT1cImZ1bGxcIiAqbmdJZj1cInF1ZXJ5XCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZFwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoXCI+XG4gICAgICAgIDxmb3JtIChzdWJtaXQpPVwiZXhlY3V0ZVNlYXJjaCgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaDwvZGl2PlxuXG4gICAgICAgICAgPGVvLXF1ZXJ5LXNjb3BlLXNlbGVjdCBbc2VsZWN0aW9uXT1cInF1ZXJ5U2NvcGVcIiAoc2VsZWN0KT1cInNldFF1ZXJ5U2NvcGUoJGV2ZW50KVwiPjwvZW8tcXVlcnktc2NvcGUtc2VsZWN0PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1ib3hcIiBbZm9ybUdyb3VwXT1cInRlcm1Gb3JtXCI+XG5cbiAgICAgICAgICAgIDx5dmMtYXV0b2NvbXBsZXRlICpuZ0lmPVwiIXF1ZXJ5LmV4cGVydE1vZGU7IGVsc2UgZXhwZXJ0SW5wdXRcIiAjc2VhcmNoSW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGVybVwiIFthdXRvY29tcGxldGVWYWx1ZXNdPVwiYXV0b2NvbXBsZXRlUmVzdWx0c1wiXG4gICAgICAgICAgICAgIChzdWdnZXN0aW9uU2VsZWN0KT1cImF1dG9jb21wbGV0ZVNlbGVjdCgpXCIgKGtleWRvd24uZW50ZXIpPVwiZXhlY3V0ZVNlYXJjaCgpXCIgKHBhc3RlKT1cImF1dG9jb21wbGV0ZVBhc3RlKCRldmVudClcIj5cbiAgICAgICAgICAgIDwveXZjLWF1dG9jb21wbGV0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNleHBlcnRJbnB1dD5cbiAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cz1cImF1dG9mb2N1c1wiIGNsYXNzPVwiZXhwZXJ0LXNlYXJjaF9faW5wdXRcIiAjeHBpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZXhwZXJ0VGVybUNoYW5nZWQoKVwiIFsobmdNb2RlbCldPVwicXVlcnkudGVybVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZXhwZXJ0LW1vZGVcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGVydE1vZGUoKVwiPlxuICAgICAgICAgICAgICA8IS0tPHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydDwvc3Bhbj4tLT5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZXhwZXJ0LXNlYXJjaC5zdmcnXCJcbiAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLm1vZGUuZXhwZXJ0JyB8IHRyYW5zbGF0ZSlcIiAqbmdJZj1cIiFxdWVyeT8uZXhwZXJ0TW9kZTsgZWxzZSBjbG9zZVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjbG9zZT5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19leHBlcnQtc2VhcmNoLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnNlYXJjaC5tb2RlLmV4cGVydC5jbG9zZScgfCB0cmFuc2xhdGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGV4cGVydC1tb2RlIGV4cGVydC1tb2RlX19yZXNldFwiIFtuZ0NsYXNzXT1cInthY3RpdmU6IHF1ZXJ5LnRlcm19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RXhwZXJ0TW9kZUlucHV0KClcIj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnNlYXJjaC5jbGVhci5zZWFyY2gnIHwgdHJhbnNsYXRlKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdFwiICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2Ugc3Bpbm5lclwiPnt7cXVlcnlTdGF0ZS50b3RhbENvdW50IHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3NwaW5uZXI+XG4gICAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgY2xhc3M9XCJzZWFyY2gtYWdncmVnYXRvcl9fbG9hZGVyXCIgW3NpemVdPVwiJ21lZGl1bSdcIiBbbW9kZV09XCInZGFyaydcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvbiB3aGl0ZSBjbG9zZVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIlxuICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLmNsb3NlJyB8IHRyYW5zbGF0ZSlcIiAoY2xpY2spPVwiY2xvc2VTZWFyY2hNZW51KClcIj48L2VvLWljb24+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJib2R5XCIgKm5nSWY9XCIhcXVlcnkuZXhwZXJ0TW9kZTsgZWxzZSBleHBlcnRcIj5cblxuICAgICAgPHl2Yy10YWJzICh0YWJDaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiIGxheW91dFNldHRpbmdzSUQ9XCJlby5zZWFyY2guZGlhbG9nLnRhYnNcIj5cblxuICAgICAgICA8IS0tIG9iamVjdCB0eXBlIHNlbGVjdCAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFt5dmNUYWJdPVwie2lkOiAncmVzdHJpY3RUeXBlJywgbGFiZWw6ICdlby5zZWFyY2gucmVzdHJpY3QudHlwZScgfCB0cmFuc2xhdGV9XCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVzIHJlc3QtYm94LWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntpZHhlbmFibGVkOiBxdWVyeS50eXBlcy5sZW5ndGggPCAxfVwiXG4gICAgICAgICAgICAqbmdJZj1cIm9iamVjdFR5cGVHcm91cHMgJiYgIWlkeFNlYXJjaFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwIHJlc3QtYm94XCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIG9iamVjdFR5cGVHcm91cHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cImdyb3VwLmxhYmVsICE9PSAnMCdcIj57e2dyb3VwLmxhYmVsfX08L2gzPlxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cImdyb3VwLmxhYmVsID09PSAnMCdcIiB0cmFuc2xhdGU+e3snZW8uc2VhcmNoLmdyb3VwLmdlbmVyYWwnfX08L2gzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiAqbmdJZj1cImkgIT09IDBcIiBjbGFzcz1cIm1vdmUtbGVmdC1maXJzdFwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAnZmlyc3QnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2xhc3Quc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwibW92ZS1sZWZ0LWljb25cIiAoY2xpY2spPVwibW92ZU9iamVjdFR5cGVHcm91cChncm91cC5sYWJlbCwgJ2xlZnQnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2xlZnQuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gb2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGggLSAxXCIgY2xhc3M9XCJtb3ZlLXJpZ2h0LWljb25cIiAoY2xpY2spPVwibW92ZU9iamVjdFR5cGVHcm91cChncm91cC5sYWJlbCwgJ3JpZ2h0JylcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19yaWdodC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gKm5nSWY9XCJpICE9PSBvYmplY3RUeXBlR3JvdXBzLmxlbmd0aCAtIDFcIiBjbGFzcz1cIm1vdmUtcmlnaHQtbGFzdFwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAnbGFzdCcpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfYXJyb3dfbGFzdC5zdmcnXCI+PC9lby1pY29uPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHlwZVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIGdyb3VwLnR5cGVzXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7Y29udGV4dDogdHlwZS5pc0NvbnRleHRGb2xkZXIsIGZvbGRlcjogdHlwZS5pc0ZvbGRlciwgYWJzdHJhY3Q6IHR5cGUuaXNBYnN0cmFjdCwgc2VsZWN0ZWQ6IGlzVHlwZUFjdGl2ZSh0eXBlKX1cIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIChjbGljayk9XCJ0b2dnbGVUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGZpbGw9XCIjZmZmZmZmXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAoY2xpY2spPVwic2VsZWN0T2JqZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gW29iamVjdFR5cGVdPVwidHlwZVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19IHt7dHlwZS5pc0Fic3RyYWN0ID8gJygnKyAoJ2VvLnNlYXJjaC50eXBlLmFic3RyYWN0JyB8IHRyYW5zbGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgICAnKScgOiAnJ319PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2dldEFnZ3JlZ2F0aW9uQ291bnQodHlwZSkgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRleGRhdGEtc2VhcmNoXCIgKm5nSWY9XCJpZHhTZWFyY2hcIj5cbiAgICAgICAgICAgIDxoMj5cbiAgICAgICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJidXR0b25cIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19iYWNrLnN2ZydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJleGl0SW5kZXhkYXRhU2VhcmNoKClcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cInt0eXBlOiBpZHhTZWFyY2gudHlwZS5sYWJlbH1cIj5lby5zZWFyY2gub2JqZWN0dHlwZS5mb3JtPC9zcGFuPlxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHRcIiAqbmdJZj1cImlkeFNlYXJjaC5jb250ZXh0TW9kZWxzLmxlbmd0aFwiPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZXh0LXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgdHJhbnNsYXRlPmVvLnNlYXJjaC5vYmplY3R0eXBlLmZvcm0uY29udGV4dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxlby1jb250ZXh0LXNlYXJjaCAqbmdGb3I9XCJsZXQgY3R4IG9mIGlkeFNlYXJjaC5jb250ZXh0TW9kZWxzOyBpbmRleCBhcyBpXCIgW2N0eF09XCJjdHhcIiBbcXVlcnldPVwicXVlcnlcIlxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9PT0gY3R4Lm5hbWVcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihjdXJyZW50Q29udGV4dEZvbGRlck5hbWUgJiYgY3VycmVudENvbnRleHRGb2xkZXJOYW1lICE9PSBjdHgubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgW2lkeFNlYXJjaF09XCJpZHhTZWFyY2hcIiAoc2V0Q29udGV4dCk9XCJzZXRDb250ZXh0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2VvLWNvbnRleHQtc2VhcmNoPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNvbnRleHQgZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1vYmplY3QtZm9ybSBjbGFzcz1cImRhcmtcIiAjY3R4Zm9ybVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zICYmIGlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnM/LmZvcm1Nb2RlbD8uZWxlbWVudHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbZm9ybU9wdGlvbnNdPVwiaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9uc1wiIChzdGF0dXNDaGFuZ2VkKT1cIm9uSW5kZXhEYXRhQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9lby1vYmplY3QtZm9ybT5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJvYmplY3QtdHlwZSBmb3JtXCIgKm5nSWY9XCJpZHhTZWFyY2guZm9ybU9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGVvLW9iamVjdC1mb3JtICNpZHhmb3JtIFtmb3JtT3B0aW9uc109XCJpZHhTZWFyY2guZm9ybU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIChzdGF0dXNDaGFuZ2VkKT1cIm9uSW5kZXhEYXRhQ2hhbmdlZCgkZXZlbnQpXCIgKG9uRm9ybVJlYWR5KT1cImlkeGZvcm0uZm9jdXNGb3JtKClcIj5cbiAgICAgICAgICAgICAgPC9lby1vYmplY3QtZm9ybT5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIGNyZWF0ZWQgdGFiIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdENyZWF0ZWQnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC5jcmVhdGlvbicgfCB0cmFuc2xhdGUgfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcmVhdGVkIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3BhblwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLkNSRUFURURdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5DUkVBVEVELCBPUEVSQVRPUi5SQU5HRSwgYWdnLmtleSwgYWdnLnNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtdGltZXNwYW4tY3VzdG9tXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4uY3VzdG9tPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI2NyZWF0ZWRGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLnRpbWUuc3BhbicgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1kYXRldGltZS1yYW5nZSAjY3JlYXRlZEZpZWxkIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVEVEXS52YWx1ZVwiIG5hbWU9XCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcGVyYXRvcl09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLnZhbHVlID8gZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVEVEXS52YWx1ZS5vcGVyYXRvciA6IE9QRVJBVE9SLkVRVUFMXCJcbiAgICAgICAgICAgICAgICAgICAgW3dpdGhUaW1lXT1cImNyZWF0ZWRGaWVsZC5zZWFyY2hPcHRpb24gJiYgY3JlYXRlZEZpZWxkLnNlYXJjaE9wdGlvbiAhPT0gT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkNSRUFURUQsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIGNyZWF0ZWRGb3JtKVwiPlxuICAgICAgICAgICAgICAgICAgPC9lby1kYXRldGltZS1yYW5nZT5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LWNyZWF0b3JcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLmNyZWF0b3I8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjY3JlYXRvckZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLnNlYXJjaC5hZ2cuY3JlYXRlZGJ5JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLW9yZ2FuaXphdGlvbiBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVE9SXS52YWx1ZVwiIG5hbWU9XCJjcmVhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVSZXNvbHZlZCk9XCJyZXNvbHZlTGFiZWwoZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVE9SXSwgJGV2ZW50KVwiIFtzaXR1YXRpb25dPVwiJ1NFQVJDSCdcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkNSRUFUT1IsIE9QRVJBVE9SLklOLCAkZXZlbnQsIGNyZWF0b3JGb3JtKVwiPjwvZW8tb3JnYW5pemF0aW9uPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdE1vZGlmaWNhdGlvbicsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0Lm1vZGlmaWNhdGlvbicgfCB0cmFuc2xhdGV9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGlmaWVkIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3BhblwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1PRElGSUVEXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZpbHRlcihQQVJBTVMuTU9ESUZJRUQsIE9QRVJBVE9SLlJBTkdFLCBhZ2cua2V5LCBhZ2cuc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGFnZy5zZWxlY3RlZCwgc2F2ZWQ6IGFnZy5zYXZlZH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2FnZy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3thZ2cudmFsdWUgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3Bhbi1jdXN0b21cIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLnRpbWUuc3Bhbi5jdXN0b208L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjbW9kaWZpZWRGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLnRpbWUuc3BhbicgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1kYXRldGltZS1yYW5nZSAjbW9kaWZpZWRGaWVsZCBbKG5nTW9kZWwpXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLnZhbHVlXCIgbmFtZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdG9yXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLnZhbHVlID8gZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWUub3BlcmF0b3IgOiBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIFt3aXRoVGltZV09XCJtb2RpZmllZEZpZWxkLnNlYXJjaE9wdGlvbiAmJiBtb2RpZmllZEZpZWxkLnNlYXJjaE9wdGlvbiAhPT0gT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLk1PRElGSUVELCBPUEVSQVRPUi5FUVVBTCwgJGV2ZW50LCBtb2RpZmllZEZvcm0pXCI+XG4gICAgICAgICAgICAgICAgICA8L2VvLWRhdGV0aW1lLXJhbmdlPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtbW9kaWZpZXJcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLm1vZGlmaWVyPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI21vZGlmaWVyRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLmFnZy5tb2RpZmllZGJ5JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLW9yZ2FuaXphdGlvbiBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibW9kaWZpZXJcIiAob25WYWx1ZVJlc29sdmVkKT1cInJlc29sdmVMYWJlbChmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaXR1YXRpb25dPVwiJ1NFQVJDSCdcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLk1PRElGSUVSLCBPUEVSQVRPUi5JTiwgJGV2ZW50LCBtb2RpZmllckZvcm0pXCI+PC9lby1vcmdhbml6YXRpb24+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdEZpbGUnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC5maWxlJyB8IHRyYW5zbGF0ZX1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZSByZXN0LWJveC1jb250YWluZXJcIiAqbmdJZj1cInF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtbWltZXR5cGUtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QubWltZXR5cGVncm91cDwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWdnIG9mIGFnZ3JlZ2F0aW9uc01vZGVsW1BBUkFNUy5NSU1FVFlQRUdST1VQXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEZpbHRlcihQQVJBTVMuTUlNRVRZUEVHUk9VUCwgT1BFUkFUT1IuSU4sIHJlc29sdmVTZWxlY3Rpb24oYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdLCBhZ2cua2V5LCBhZ2cuc2VsZWN0ZWQpKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGZpbGw9XCIjZmZmZmZmXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtZmlsZXNpemVcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZXNpemU8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuRklMRVNJWkVdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5GSUxFU0laRSwgT1BFUkFUT1IuUkFOR0UsIGFnZy5rZXksIGFnZy5zZWxlY3RlZClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogYWdnLnNlbGVjdGVkLCBzYXZlZDogYWdnLnNhdmVkfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7YWdnLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2FnZy52YWx1ZSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LWZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGVuYW1lPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI2ZpbGVuYW1lRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGVuYW1lJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLXN0cmluZyBbYXV0b2NvbXBsZXRlXT1cInRydWVcIiBbcW5hbWVdPVwiJ2ZpbGVuYW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0udmFsdWVcIiBuYW1lPVwiZmlsZW5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkZJTEVOQU1FLCBPUEVSQVRPUi5FUVVBTCwgJGV2ZW50LCBmaWxlbmFtZUZvcm0pXCI+PC9lby1zdHJpbmc+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwveXZjLXRhYnM+XG5cbiAgICAgIDwhLS0gc3VtbWFyeSBvZiB0aGUgY3VycmVudCBzZWFyY2ggZmlsdGVycyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LXBhbmVsXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRsaW5lIHN0b3JlZC1xdWVyeVwiICpuZ0lmPVwiaXNTdG9yZWRRdWVyeTsgZWxzZSByZWdoZWFkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlSW5iZXR3ZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZFNlYXJjaEljb25cIj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfc2F2ZWRfc2VhcmNoLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnN0b3JlZHF1ZXJ5PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZWQtcXVlcnktbmFtZVwiPnt7c3RvcmVkUXVlcnkubmFtZX19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWdoZWFkPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkbGluZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeTwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwicXVlcnktdHlwZXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLXNlYXJjaHRlcm1cIiAqbmdJZj1cInF1ZXJ5LnRlcm1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS50ZXJtPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7cXVlcnkudGVybX19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlVGVybSgpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLWNvbnRleHR0eXBlXCIgKm5nSWY9XCJxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFzaWRlLnN1bW1hcnkuY29udGV4dGZvbGRlcnR5cGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlcnkuY29udGV4dEZvbGRlclR5cGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlQ29udGV4dFR5cGUoKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1vYmplY3R0eXBlXCIgKm5nSWY9XCJxdWVyeS50eXBlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS50eXBlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlclwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHF1ZXJ5LnR5cGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlVHlwZSh0eXBlKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC10cmFuc2xhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLmlubmVyVmFsdWUubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdGb3I9XCJsZXQgdmFsIG9mIGZpbHRlci5pbm5lclZhbHVlOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3tmaWx0ZXIubGFiZWxbaV0gfCBhc3luY319PC9kaXY+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZXNldEZpbHRlcihmaWx0ZXIsIHZhbClcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tY3JlYXRpb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLmlubmVyVmFsdWU/Lmxlbmd0aCB8fCBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLmlubmVyVmFsdWU/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5jcmVhdGlvbjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1tb2RpZmljYXRpb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXS5pbm5lclZhbHVlPy5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0uaW5uZXJWYWx1ZT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0Lm1vZGlmaWNhdGlvbjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW1pbWV0eXBlZ3JvdXBcIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdLmlubmVyVmFsdWUubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRVNJWkVdLmlubmVyVmFsdWUubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRU5BTUVdLmlubmVyVmFsdWUubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGU8L2Rpdj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5NSU1FVFlQRUdST1VQXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFU0laRV0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRU5BTUVdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIiAqbmdJZj1cInF1ZXJ5LnRlcm0gfHwgcXVlcnkuZmlsdGVycy5sZW5ndGggfHwgcXVlcnkudHlwZXMubGVuZ3RoOyBlbHNlIGVtcHR5U2VhcmNoXCI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdG9yZWRRdWVyeTsgZWxzZSByZWdhY3Rpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5IGJ0bi1yZXNldFwiIChjbGljayk9XCJyZXNldFF1ZXJ5KClcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LmNsb3NlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBncmV5IGJ0bi11cGRhdGVcIiAoY2xpY2spPVwidXBkYXRlU3RvcmVkUXVlcnkoKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FwYWJpbGl0aWVzLnN0b3JlZHF1ZXJpZXMgJiYgaXNPd25RdWVyeVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3RvcmVkcXVlcnkudXBkYXRlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBncmV5IGJ0bi1zYXZlXCIgKGNsaWNrKT1cInNhdmVRdWVyeSgpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYXBhYmlsaXRpZXMuc3RvcmVkcXVlcmllcyAmJiAhaXNPd25RdWVyeVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc2F2ZTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLXN1Ym1pdFwiIChjbGljayk9XCJleGVjdXRlU2VhcmNoKClcIiBbZGlzYWJsZWRdPVwicXVlcnlTdGF0ZS5pc0VtcHR5XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnNlYXJjaC5zdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVnYWN0aW9ucz5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXJlc2V0XCIgKGNsaWNrKT1cInJlc2V0UXVlcnkoKVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzZXQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXNhdmVcIiAoY2xpY2spPVwic2F2ZVF1ZXJ5KClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhcGFiaWxpdGllcy5zdG9yZWRxdWVyaWVzICYmICFpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tc3VibWl0XCIgKGNsaWNrKT1cImV4ZWN1dGVTZWFyY2goKVwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5U2VhcmNoPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zZWFyY2hcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1bW1hcnkuZW1wdHk8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBleHBlcnQgbW9kZSBib2R5IHBhbmVsIGNvbnRhaW5pbmcgZXhwbGFuYXRpb25zIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZXhwZXJ0PlxuICAgICAgPGRpdiBjbGFzcz1cImJvZHkgZXhwZXJ0XCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5XCIgKm5nSWY9XCJleHBlcnRNb2RlUXVlcnlFbXB0eVwiPjxzcGFuIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQucmVzdWx0LmVtcHR5PC9zcGFuPjwvZGl2PlxuXG4gICAgICAgIDwhLS1cbiAgICAgICAgPGgyPjxzcGFuIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQ8L3NwYW4+PC9oMj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludHJvXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5pbnRybzwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYXNlLXBhcmFtcyBmaWVsZHNcIj5cbiAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LmJhc2VwYXJhbXM8L2gyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgZWwgb2YgZXhwZXJ0TW9kZVN1cHBvcnQuYmFzZVBhcmFtc1wiIChjbGljayk9XCJ4cEFkZFRvVGVybShlbC5kYXRhKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj48c3Bhbj57e2VsLmxhYmVsfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRhXCI+e3tlbC5kYXRhfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic3lzdGVtLXR5cGVzIGZpZWxkc1wiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW4tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuZ3JvdXA8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIHR5cGVHcm91cFRyZWVcIlxuICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cCAmJiBncm91cC5pZCA9PT0gZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cC5pZH1cIlxuICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ4cFNlbGVjdEdyb3VwKGdyb3VwKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5sYWJlbCAhPT0gJzAnXCI+e3tncm91cC5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLmxhYmVsID09PSAnMCdcIj57eydlby5zZWFyY2guZ3JvdXAuZ2VuZXJhbCcgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW4tdHlwZVwiICpuZ0lmPVwiZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cFwiPlxuICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQuc3VwcG9ydC50eXBlPC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkR3JvdXAudHJlZVwiXG4gICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgJiYgdHlwZS5pZCA9PT0gZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInhwU2VsZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgIDxkaXY+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gc2VjdGlvbi1maWVsZFwiICpuZ0lmPVwiZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlXCI+XG4gICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LmZpZWxkPC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBlbCBvZiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUuY2hpbGRyZW5cIiAoY2xpY2spPVwieHBBZGRUb1Rlcm0oZWwuZGF0YSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj48c3Bhbj57e2VsLmxhYmVsfX08L3NwYW4+PHNwYW4gY2xhc3M9XCJ0eXBlXCI+e3tlbC50eXBlfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGFcIj57e2VsLmRhdGF9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDwhLS0gPC9lby1kaWFsb2c+IC0tPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==