@provoly/dashboard 0.21.4 → 0.21.5

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 (74) hide show
  1. package/assets/svgs/layers.svg +3 -2
  2. package/assets/svgs/legend.svg +14 -3
  3. package/dataset/style/_o-pry-dataset.scss +6 -9
  4. package/esm2022/dataset/components/dataset.component.mjs +3 -3
  5. package/esm2022/dataset/style/css.component.mjs +2 -2
  6. package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
  7. package/esm2022/lib/core/store/field/field.interface.mjs +2 -1
  8. package/esm2022/lib/core/store/search/search.reducer.mjs +2 -2
  9. package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.mjs +12 -3
  10. package/esm2022/lib/dashboard/dashboard.module.mjs +5 -4
  11. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +1 -1
  12. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +3 -2
  13. package/esm2022/lib/dashboard/store/manifest.service.mjs +4 -3
  14. package/esm2022/notification/components/notification/content/notification-content.component.mjs +12 -8
  15. package/esm2022/notification/components/notification/notification.component.mjs +2 -1
  16. package/esm2022/notification/style/css.component.mjs +2 -2
  17. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +3 -3
  18. package/esm2022/presentation/components/presentation.component.mjs +11 -9
  19. package/esm2022/presentation/style/css.component.mjs +2 -2
  20. package/esm2022/restitution/components/restitution/restitution.component.mjs +5 -5
  21. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +3 -3
  22. package/esm2022/restitution/style/css.component.mjs +2 -2
  23. package/esm2022/toolbox/components/save-view/save-view.component.mjs +12 -6
  24. package/esm2022/toolbox/components/share/share.component.mjs +8 -5
  25. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +2 -2
  26. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +57 -17
  27. package/esm2022/widgets/widget-map/i18n/en.translations.mjs +5 -2
  28. package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +5 -2
  29. package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +3 -2
  30. package/esm2022/widgets/widget-map/style/css.component.mjs +2 -2
  31. package/esm2022/widgets/widget-map/utils/cql-utils.class.mjs +12 -4
  32. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +3 -2
  33. package/fesm2022/provoly-dashboard-dataset.mjs +4 -4
  34. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  35. package/fesm2022/provoly-dashboard-notification.mjs +14 -9
  36. package/fesm2022/provoly-dashboard-notification.mjs.map +1 -1
  37. package/fesm2022/provoly-dashboard-presentation.mjs +14 -12
  38. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  39. package/fesm2022/provoly-dashboard-restitution.mjs +8 -8
  40. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  41. package/fesm2022/provoly-dashboard-toolbox.mjs +17 -8
  42. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  43. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +1 -1
  44. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  45. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +80 -27
  46. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  47. package/fesm2022/provoly-dashboard.mjs +22 -10
  48. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  49. package/lib/core/model/manifest.interface.d.ts +3 -1
  50. package/lib/core/store/field/field.interface.d.ts +1 -0
  51. package/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.d.ts +1 -0
  52. package/lib/dashboard/store/dashboard.actions.d.ts +3 -0
  53. package/lib/dashboard/store/manifest.service.d.ts +2 -1
  54. package/notification/components/notification/content/notification-content.component.d.ts +4 -2
  55. package/notification/style/_m-notifications.scss +6 -7
  56. package/package.json +24 -24
  57. package/presentation/components/presentation.component.d.ts +3 -1
  58. package/presentation/style/_o-pry-presentation.scss +0 -16
  59. package/restitution/components/restitution/restitution.component.d.ts +1 -1
  60. package/restitution/style/_o-restitution.scss +12 -42
  61. package/styles/components/_a-page-loader.scss +1 -1
  62. package/styles/components/_o-pry-stepper.scss +9 -10
  63. package/styles/components/_o-widget.scss +7 -3
  64. package/styles/layout/_o-manifest-layout.scss +20 -0
  65. package/styles-theme/components-theme/_o-widget.theme.scss +1 -1
  66. package/toolbox/components/save-view/save-view.component.d.ts +3 -2
  67. package/toolbox/components/share/share.component.d.ts +2 -1
  68. package/widgets/widget-chart/component/widget-chart.component.d.ts +1 -1
  69. package/widgets/widget-map/component/widget-map.component.d.ts +5 -1
  70. package/widgets/widget-map/i18n/en.translations.d.ts +3 -0
  71. package/widgets/widget-map/i18n/fr.translations.d.ts +3 -0
  72. package/widgets/widget-map/style/_o-layer-legend.scss +43 -54
  73. package/widgets/widget-map/utils/cql-utils.class.d.ts +2 -2
  74. package/widgets/widget-map/utils/widget-map.utils.d.ts +2 -0
@@ -295,7 +295,7 @@ export class WidgetChartComponent extends DataWidgetComponent {
295
295
  field: `attributes.${variables[1].name}.value`,
296
296
  title: variables[1].label,
297
297
  type: variables[1].type,
298
- aggregate: 'count'
298
+ aggregate: options.aggregation ?? Aggregation.COUNT
299
299
  },
300
300
  color: {
301
301
  field: `attributes.${variables[0].name}.value`,
@@ -648,4 +648,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
648
648
  type: ViewChild,
649
649
  args: ['vega']
650
650
  }] } });
651
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWNoYXJ0L2NvbXBvbmVudC93aWRnZXQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtY2hhcnQvY29tcG9uZW50L3dpZGdldC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkcsT0FBTyxFQUNMLFdBQVcsRUFPWCxjQUFjLEVBQ2QsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFFBQVEsRUFJUixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5FLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxF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T0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFUSxPQUFPO1FBQ2QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDeEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQWh4QlUsb0JBQW9CO21HQUFwQixvQkFBb0IsNktDakRqQyxpb2VBOFdBOzs0RkQ3VGEsb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQjtrTEFJVCxJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb24sXG4gIEF0dHJpYnV0ZSxcbiAgQXR0cmlidXRlU2ltcGxlVmFsdWUsXG4gIENoYXJ0T3B0aW9uLFxuICBDaGFydFN1YlR5cGVEZWZpbml0aW9uLFxuICBDaGFydFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEZpZWxkLFxuICBGaWVsZFNlbGVjdG9ycyxcbiAgRmllbGRUeXBlLFxuICBJdGVtLFxuICBJdGVtVXRpbHMsXG4gIE1hcmtTdWJUeXBlLFxuICBNYXJrVHlwZSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFZhcmlhYmxlRGVmaW5pdGlvbixcbiAgVmVnYUNvbG9yVHlwZSxcbiAgVmVnYVR5cGUsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hUXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlbGF5LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUaW1lVW5pdCwgVmlldyB9IGZyb20gJ3ZlZ2EnO1xuaW1wb3J0IGVtYmVkLCB7IHZlZ2EgfSBmcm9tICd2ZWdhLWVtYmVkJztcbmltcG9ydCB7IG1lcmdlRGVlcCwgVG9wTGV2ZWxTcGVjIH0gZnJvbSAndmVnYS1saXRlJztcbmltcG9ydCB7IGZvbnRDb25maWcgfSBmcm9tICd2ZWdhLWxpdGUvYnVpbGQvc3JjL2NvbmZpZyc7XG5pbXBvcnQgeyBWZWdhRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi92ZWdhLWVycm9yLmhhbmRsZXInO1xuaW1wb3J0IHsgdmVnYUJhc2VDb25mLCB2ZWdhQ2lyY2xlUGFja0NvbmYsIHZlZ2FSYWRhckNvbmYgfSBmcm9tICcuL3ZlZ2Etc3BlYy5jb25zdGFudCc7XG5cbmV4cG9ydCB0eXBlIFJhZGFyVmFsdWUgPSB7XG4gIGNhdGVnb3J5OiBudW1iZXI7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufTtcblxudmVnYS5zY2hlbWUoJ0tPL1cvT0snLCBbJyNDMDREM0YnLCAnI0ZEOTg0MycsICcjOUFCRTI5J10pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1jaGFydC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q2hhcnRDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3ZlZ2EnKSB2ZWdhITogRWxlbWVudFJlZjtcbiAgdHlwZU9wdGlvbnM6IHtcbiAgICB0eXBlOiBNYXJrVHlwZTtcbiAgICBzdWJUeXBlOiBNYXJrU3ViVHlwZTtcbiAgICBsYWJlbDogTWFya1R5cGUgfCBNYXJrU3ViVHlwZTtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRyYW5zbGF0ZWQ/OiBzdHJpbmc7XG4gIH1bXSA9IFtdO1xuICBtYXJrVHlwZXM6IE1hcmtUeXBlW10gPSBbXTtcbiAgc3ViVHlwZXM/OiBQYXJ0aWFsPENoYXJ0U3ViVHlwZURlZmluaXRpb24+O1xuICBzY2hlbWVzPzogeyBpZDogVmVnYUNvbG9yVHlwZTsgdHJhbnNsYXRlZDogc3RyaW5nIH1bXTtcbiAgTWFya1R5cGUgPSBNYXJrVHlwZTtcbiAgTWFya1N1YlR5cGUgPSBNYXJrU3ViVHlwZTtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcblxuICB0aW1lVW5pdHM6IFRpbWVVbml0W10gPSBbJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VycycsICdtaW51dGVzJ107XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPENoYXJ0V2lkZ2V0T3B0aW9ucz47XG4gIG9wdGlvbnNDb3B5OiBDaGFydFdpZGdldE9wdGlvbnMgPSB7fSBhcyBDaGFydFdpZGdldE9wdGlvbnM7XG4gIGNsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuICBmaWVsZHMkOiBPYnNlcnZhYmxlPEZpZWxkW10+O1xuICB2YXJpYWJsZXMkOiBPYnNlcnZhYmxlPFZhcmlhYmxlRGVmaW5pdGlvbltdPjtcbiAgdmVnYUxpdGVTcGVjJDogT2JzZXJ2YWJsZTxUb3BMZXZlbFNwZWM+O1xuICB2YXJpYWJsZUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgcG9zc2libGVTZWNvbmRhcnlBdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIHRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuICBpdGVtcyQ6IE9ic2VydmFibGU8SXRlbVtdPjtcbiAgZmlsdGVyRGF0YUZvck9wdGlvbnMkOiBPYnNlcnZhYmxlPEl0ZW1bXT47XG4gIGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQ6IE9ic2VydmFibGU8SXRlbVtdPjtcbiAgdmFyaWFibGVzOiBWYXJpYWJsZURlZmluaXRpb25bXSA9IFtdO1xuICBhZ2dyZWdhdGlvbnM6IGFueVtdID0gW107XG4gIHZhcmlhYmxlQXR0cmlidXRlczogQXR0cmlidXRlW10gPSBbXTtcbiAgZmllbGRzOiBGaWVsZFtdID0gW107XG4gIGlzQ2hhcnRWYWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIG51bWVyaWNQcm9wZXJ0aWVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIHRleHRQcm9wZXJ0aWVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIGNvbXBhcmlzb25zID0gW1xuICAgIHtcbiAgICAgIGlkOiAnaXRlbScsXG4gICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuY29tcGFyaXNvbi5pdGVtJylcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAndmFsdWUnLFxuICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbXBhcmlzb24udmFsdWUnKVxuICAgIH1cbiAgXTtcbiAgdmlldz86IFZpZXc7XG4gIHRyaWdnZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgaW52YWxpZEpzb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG5cbiAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuY2hhcnRPcHRpb24pLnN1YnNjcmliZSgoY2hhcnRPcHRpb25zOiBDaGFydE9wdGlvbikgPT4ge1xuICAgICAgdGhpcy5hZ2dyZWdhdGlvbnMgPSBjaGFydE9wdGlvbnMuYWdncmVnYXRpb247XG4gICAgICB0aGlzLnNjaGVtZXMgPSBjaGFydE9wdGlvbnMuY29sb3IubWFwKChzY2hlbWUpID0+ICh7IGlkOiBzY2hlbWUsIHRyYW5zbGF0ZWQ6ICcnIH0pKTtcbiAgICAgIHRoaXMubWFya1R5cGVzID0gY2hhcnRPcHRpb25zLnR5cGU7XG4gICAgICB0aGlzLnN1YlR5cGVzID0gY2hhcnRPcHRpb25zLnN1YlR5cGU7XG5cbiAgICAgIHRoaXMudHlwZU9wdGlvbnMgPSB0aGlzLm1hcmtUeXBlc1xuICAgICAgICAubWFwKCh0eXBlOiBNYXJrVHlwZSkgPT4ge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdWJUeXBlcyAmJiB0aGlzLnN1YlR5cGVzW3R5cGVdID8gdGhpcy5zdWJUeXBlc1t0eXBlXS5tYXAoKHN1YlR5cGUpID0+ICh7IHR5cGUsIHN1YlR5cGUgfSkpIDogW107XG4gICAgICAgIH0pXG4gICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgICAgIC5tYXAoKG9wdGlvbnM6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIGlkOiBgJHtvcHRpb25zLnR5cGV9LSR7b3B0aW9ucy5zdWJUeXBlfWAsXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuREVGQVVMVCA/IG9wdGlvbnMudHlwZSA6IG9wdGlvbnMuc3ViVHlwZVxuICAgICAgICB9KSlcbiAgICAgICAgLm1hcCgob3B0aW9uczogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgdHJhbnNsYXRlZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm1hcmtUeXBlLicgKyBvcHRpb25zLmxhYmVsKVxuICAgICAgICB9KSk7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zLnNvcnQoKGEsIGIpID0+IGEudHJhbnNsYXRlZD8ubG9jYWxlQ29tcGFyZShiLnRyYW5zbGF0ZWQgPz8gJycpID8/IC0xKTtcbiAgICB9KTtcbiAgICB0aGlzLmNsYXNzZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3Nlcyk7XG4gICAgdGhpcy5maWVsZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKTtcblxuICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzdWx0U2V0JCwgdGhpcy5jbGFzc2VzJCwgdGhpcy5maWVsZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzXSkgPT4gSXRlbVV0aWxzLmdldEF0dHJpYnV0ZXNGcm9tUnMocmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpKSxcbiAgICAgIG1hcCgoZmllbGRzOiBBdHRyaWJ1dGVbXSkgPT4gZmllbGRzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpKSxcbiAgICAgIG1hcCgocHJvcHMpID0+IFdpZGdldENoYXJ0Q29tcG9uZW50LnVuaXF1ZUF0dHJpYnV0ZXNCeU5hbWVzKHByb3BzKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLnN1YnNjcmliZSgoYXR0cnMpID0+ICh0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyA9IGF0dHJzKSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5maWVsZHMkLnN1YnNjcmliZSgoYXR0cnMpID0+ICh0aGlzLmZpZWxkcyA9IGF0dHJzKSkpO1xuXG4gICAgdGhpcy52YXJpYWJsZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLCB0aGlzLmZpZWxkcyRdKS5waXBlKFxuICAgICAgbWFwKChbYXR0cmlidXRlcywgZmllbGRzXSkgPT4ge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5tYXAoXG4gICAgICAgICAgKGF0dHIpID0+XG4gICAgICAgICAgICAoKHtcbiAgICAgICAgICAgICAgbmFtZTogYXR0ci50ZWNobmljYWxOYW1lLFxuICAgICAgICAgICAgICBsYWJlbDogYXR0ci5uYW1lLFxuICAgICAgICAgICAgICB0eXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoXG4gICAgICAgICAgICAgICAgZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZCk/LnR5cGUgPz8gRmllbGRUeXBlLlNUUklORyxcbiAgICAgICAgICAgICAgICBhdHRyLm5hbWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBhcyBWYXJpYWJsZURlZmluaXRpb24pID8/IFtdKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy52YXJpYWJsZXMkLFxuICAgICAgdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiBtYW5pZmVzdC5vcHRpb25zIGFzIENoYXJ0V2lkZ2V0T3B0aW9ucykpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhcmlhYmxlcywgb3B0aW9uc10pID0+ICh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAoKHZhcmlhYmxlc1swXT8ubGFiZWwgPz8gJycpICsgJywgJyArICh2YXJpYWJsZXNbMV0/LmxhYmVsID8/ICcnKSkucmVwbGFjZSgvXiwgJC8sICcnKSxcbiAgICAgICAgc2VsZWN0ZWRWYXJpYWJsZXM6IG9wdGlvbnM/LnNlbGVjdGVkVmFyaWFibGVzID8/IFt7fSwge31dLFxuICAgICAgICAvLyBIZXJlLCB3ZSBkbyBub3QgcHJlc3VtZSBvZiB0aGUgdHlwZSBvZiBncmFwaCB0aGF0IHRoZSB1c2VyIHdhbnRzLCBhbmQgcHJlZmVyIHRvIGRpc3BsYXkgYSBidXR0b24gdG8gZ28gdG8gcGFyYW1zXG4gICAgICAgIHR5cGU6IG9wdGlvbnM/LnR5cGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICBhZ2dyZWdhdGlvbjogb3B0aW9ucz8uYWdncmVnYXRpb24gPz8gQWdncmVnYXRpb24uQ09VTlQsXG4gICAgICAgIHRvb2x0aXA6IG9wdGlvbnM/LnRvb2x0aXAgPz8gdHJ1ZSxcbiAgICAgICAgbGVnZW5kOiBvcHRpb25zLmxlZ2VuZCA/PyB0cnVlLFxuICAgICAgICBsb2NhbGU6ICdmcidcbiAgICAgIH0pKVxuICAgICk7XG5cbiAgICB0aGlzLml0ZW1zJCA9IHRoaXMucmVzdWx0U2V0JC5waXBlKFxuICAgICAgZmlsdGVyKChyZXN1bHRTZXQpID0+ICEhcmVzdWx0U2V0KSxcbiAgICAgIG1hcCgocmVzdWx0U2V0KSA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXN1bHRTZXQ/Lml0ZW1zKVxuICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+IHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXSlcbiAgICAgICAgICAucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBbLi4ucHJldiwgLi4uY3Vycl0sIFtdKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucG9zc2libGVTZWNvbmRhcnlBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLFxuICAgICAgdGhpcy5pdGVtcyQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhcmlhYmxlRmllbGRzLCBpdGVtcywgZmllbGRzLCBfXSkgPT4ge1xuICAgICAgICByZXR1cm4gdmFyaWFibGVGaWVsZHNcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgIC8vIEtlZXAgb25seSBudW1lcmljIHZhbHVlcyB3aGVuIG5lY2Vzc2FyeVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbiB8fFxuICAgICAgICAgICAgICBbQWdncmVnYXRpb24uTk9ORSwgQWdncmVnYXRpb24uRElTVElOQ1QsIEFnZ3JlZ2F0aW9uLkNPVU5UXS5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LmFnZ3JlZ2F0aW9uKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyaWJ1dGUuZmllbGQpO1xuICAgICAgICAgICAgICByZXR1cm4gW0ZpZWxkVHlwZS5ERUNJTUFMLCBGaWVsZFR5cGUuSU5TVEFOVCwgRmllbGRUeXBlLkxPTkcsIEZpZWxkVHlwZS5JTlRFR0VSXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICBmaWVsZD8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICBpdGVtcy5maW5kKFxuICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmF0dHJpYnV0ZXMpLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwpICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhhdHRyaWJ1dGUudGVjaG5pY2FsTmFtZSkgJiZcbiAgICAgICAgICAgICAgICAhIShpdGVtLmF0dHJpYnV0ZXNbdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1swXS5sYWJlbF0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgKGl0ZW0uYXR0cmlidXRlc1thdHRyaWJ1dGUubmFtZV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBtYXAoKHByb3BzKSA9PiBXaWRnZXRDaGFydENvbXBvbmVudC51bmlxdWVBdHRyaWJ1dGVzQnlOYW1lcyhwcm9wcykpXG4gICAgKTtcblxuICAgIHRoaXMubnVtZXJpY1Byb3BlcnRpZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyQsXG4gICAgICB0aGlzLml0ZW1zJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMudHJpZ2dlckNhbGN1bGF0ZVBvc3NpYmxlQXR0cmlidXRlcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdmFyaWFibGVGaWVsZHMsIGl0ZW1zLCBmaWVsZHMsIF9dKSA9PiB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZUZpZWxkc1xuICAgICAgICAgIC5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyaWJ1dGUuZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIFtGaWVsZFR5cGUuREVDSU1BTCwgRmllbGRUeXBlLklOU1RBTlQsIEZpZWxkVHlwZS5MT05HLCBGaWVsZFR5cGUuSU5URUdFUl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIGZpZWxkPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICBpdGVtcy5maW5kKFxuICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmF0dHJpYnV0ZXMpLmluY2x1ZGVzKGF0dHJpYnV0ZS50ZWNobmljYWxOYW1lKSAmJlxuICAgICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbYXR0cmlidXRlLnRlY2huaWNhbE5hbWVdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChwcm9wcykgPT4ge1xuICAgICAgICByZXR1cm4gV2lkZ2V0Q2hhcnRDb21wb25lbnQudW5pcXVlQXR0cmlidXRlc0J5TmFtZXMocHJvcHMpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy50ZXh0UHJvcGVydGllcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJCxcbiAgICAgIHRoaXMuaXRlbXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt2YXJpYWJsZUZpZWxkcywgaXRlbXMsIGZpZWxkcywgX10pID0+IHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlRmllbGRzXG4gICAgICAgICAgLmZpbHRlcigoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHJpYnV0ZS5maWVsZCk7XG4gICAgICAgICAgICByZXR1cm4gW0ZpZWxkVHlwZS5TVFJJTkcsIEZpZWxkVHlwZS5LRVlXT1JEXS5pbmNsdWRlcyhmaWVsZD8udHlwZSA/PyBGaWVsZFR5cGUuSU5URUdFUik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICBpdGVtcy5maW5kKFxuICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmF0dHJpYnV0ZXMpLmluY2x1ZGVzKGF0dHJpYnV0ZS50ZWNobmljYWxOYW1lKSAmJlxuICAgICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbYXR0cmlidXRlLnRlY2huaWNhbE5hbWVdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChwcm9wcykgPT4ge1xuICAgICAgICByZXR1cm4gV2lkZ2V0Q2hhcnRDb21wb25lbnQudW5pcXVlQXR0cmlidXRlc0J5TmFtZXMocHJvcHMpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5maWx0ZXJEYXRhRm9yT3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLml0ZW1zJCwgdGhpcy5vcHRpb25zJCwgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW2l0ZW1zLCBvcHRpb25zXSkgPT4gb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlcyAmJiBvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzLmxlbmd0aCA+IDApLFxuICAgICAgbWFwKChbaXRlbXMsIG9wdGlvbnMsIHZhcmlhYmxlc10pID0+IFdpZGdldENoYXJ0Q29tcG9uZW50Lm1hdGNoaW5nSXRlbXMoaXRlbXMsIG9wdGlvbnMsIHZhcmlhYmxlcykpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyRGF0YUZvck9wdGlvbnNDb3B5JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5pdGVtcyQsXG4gICAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkLnBpcGUoZGVsYXkoMjAwKSksXG4gICAgICB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyRcbiAgICBdKS5waXBlKFxuICAgICAgZmlsdGVyKChbaXRlbXMsIF9dKSA9PiB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzICYmIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXMubGVuZ3RoID4gMCksXG4gICAgICBtYXAoKFtpdGVtcywgXywgdmFyaWFibGVzXSkgPT4gV2lkZ2V0Q2hhcnRDb21wb25lbnQubWF0Y2hpbmdJdGVtcyhpdGVtcywgdGhpcy5vcHRpb25zQ29weSwgdmFyaWFibGVzKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuICAgICAgICB0aGlzLnVwZGF0ZUFkdmFuY2VkRWRpdChKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnNDb3B5LnNwZWNUb01lcmdlKSk7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkudHlwZSA9ICF0aGlzLm1hcmtUeXBlcy5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LnR5cGUpXG4gICAgICAgICAgPyB0aGlzLm1hcmtUeXBlc1swXVxuICAgICAgICAgIDogdGhpcy5vcHRpb25zQ29weS50eXBlO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPSB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPz8gTWFya1N1YlR5cGUuREVGQVVMVDtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbiA9ICF0aGlzLmFnZ3JlZ2F0aW9ucy5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LmFnZ3JlZ2F0aW9uKVxuICAgICAgICAgID8gdGhpcy5hZ2dyZWdhdGlvbnNbMF1cbiAgICAgICAgICA6IHRoaXMub3B0aW9uc0NvcHkuYWdncmVnYXRpb247XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnNlcmllcykge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzLnNjaGVtZSA9XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lICYmXG4gICAgICAgICAgICB0aGlzLnNjaGVtZXMgJiZcbiAgICAgICAgICAgICF0aGlzLnNjaGVtZXMuZmluZCgocykgPT4gcy5pZCA9PT0gdGhpcy5vcHRpb25zQ29weT8uc2VyaWVzPy5zY2hlbWUpXG4gICAgICAgICAgICAgID8gdGhpcy5zY2hlbWVzWzBdLmlkXG4gICAgICAgICAgICAgIDogdGhpcy5vcHRpb25zQ29weS5zZXJpZXM/LnNjaGVtZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52ZWdhTGl0ZVNwZWMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMud2luZG93TWFuaWZlc3QpLFxuICAgICAgdGhpcy5tYW5pZmVzdCQsXG4gICAgICB0aGlzLndpZGdldFNpemUkLFxuICAgICAgdGhpcy5maWx0ZXJEYXRhRm9yT3B0aW9ucyQsXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5kaXNwbGF5SGVhZGVyJCxcbiAgICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt3aW5kb3dNYW5pZmVzdCwgd2lkZ2V0TWFuaWZlc3QsIHNpemUsIGRhdGEsIG9wdGlvbnMsIGRpc3BsYXlIZWFkZXIsIHZhcmlhYmxlRmllbGRdKSA9PiB7XG4gICAgICAgIGxldCBzcGVjID0gdmVnYUJhc2VDb25mO1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuUkFEQVI6XG4gICAgICAgICAgICBzcGVjID0gdmVnYVJhZGFyQ29uZjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuQ0lSQ0xFX1BBQ0s6XG4gICAgICAgICAgICBzcGVjID0gdmVnYUNpcmNsZVBhY2tDb25mO1xuICAgICAgICB9XG5cbiAgICAgICAgc3BlYy50aXRsZSA9IG9wdGlvbnMuY3VzdG9tVGl0bGUgPz8gb3B0aW9ucy50aXRsZTtcblxuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuUkFEQVI6XG4gICAgICAgICAgICBzcGVjLnNpZ25hbHNbMF0udXBkYXRlID0gc2l6ZS53aWR0aCA+IHNpemUuaGVpZ2h0ID8gJ2hlaWdodCAvIDInIDogJ3dpZHRoIC8gMic7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMF0udmFsdWVzID0gV2lkZ2V0Q2hhcnRDb21wb25lbnQuYnVpbGREYXRhVmVnYVJhZGFyKGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgc3BlYy5zY2FsZXNbMl0ucmFuZ2Uuc2NoZW1lID0gb3B0aW9ucy5zZXJpZXM/LnNjaGVtZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuQ0lSQ0xFX1BBQ0s6XG4gICAgICAgICAgICBzcGVjLmRhdGFbMF0udmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMV0udHJhbnNmb3JtWzBdLmtleSA9ICdhdHRyaWJ1dGVzLicgKyBvcHRpb25zLnBhY2tpbmc/LmlkICsgJy52YWx1ZSc7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMV0udHJhbnNmb3JtWzBdLnBhcmVudEtleSA9ICdhdHRyaWJ1dGVzLicgKyBvcHRpb25zLnBhY2tpbmc/LnBhcmVudElkICsgJy52YWx1ZSc7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMV0udHJhbnNmb3JtWzFdLmZpZWxkID0gJ2F0dHJpYnV0ZXMuJyArIG9wdGlvbnMucGFja2luZz8ucGFja0ZpZWxkICsgJy52YWx1ZSc7XG4gICAgICAgICAgICBzcGVjLm1hcmtzWzBdLmVuY29kZS5lbnRlci50b29sdGlwLnNpZ25hbCA9IGBkYXR1bS5hdHRyaWJ1dGVzLiR7XG4gICAgICAgICAgICAgIG9wdGlvbnMucGFja2luZz8udG9vbHRpcCA/PyBvcHRpb25zLnBhY2tpbmc/LmlkXG4gICAgICAgICAgICB9LnZhbHVlICsgJyA6ICcgKyBkYXR1bS5hdHRyaWJ1dGVzLiR7b3B0aW9ucy5wYWNraW5nPy5wYWNrRmllbGR9LnZhbHVlYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzcGVjLmRhdGEgPSB7IHZhbHVlczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkgfTtcbiAgICAgICAgICAgIHNwZWMubGF5ZXIgPSBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBvcHRpb25zLnR5cGUsXG4gICAgICAgICAgICAgICAgICBwb2ludDpcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID09PSBNYXJrVHlwZS5QT0lOVCB8fFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLldJVEhfTElORVNfQU5EX1BPSU5UUyB8fFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLldJVEhfUE9JTlRTLFxuICAgICAgICAgICAgICAgICAgbGluZTogb3B0aW9ucy50eXBlID09PSBNYXJrVHlwZS5MSU5FIHx8IG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuV0lUSF9MSU5FU19BTkRfUE9JTlRTLFxuICAgICAgICAgICAgICAgICAgaW5uZXJSYWRpdXM6IG9wdGlvbnMuaW5uZXJSYWRpdXMsXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBvcHRpb25zLnRvb2x0aXAgPz8gdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFdpZGdldENoYXJ0Q29tcG9uZW50LmNhbGN1bGF0ZUVuY29kaW5nKG9wdGlvbnMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5maWxsKSB7XG4gICAgICAgICAgICAgIHNwZWMubGF5ZXJbMF0ubWFyay5maWxsID0gb3B0aW9ucy5maWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuQVJFQVNUQUNLRUQgfHwgb3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ISVNUT1NUQUNLRUQpIHtcbiAgICAgICAgICAgICAgc3BlYy5kYXRhLnRyYW5zZm9ybSA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhY2snLFxuICAgICAgICAgICAgICAgICAgZ3JvdXBieTogW29wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubmFtZV0sXG4gICAgICAgICAgICAgICAgICBzb3J0OiB7IGZpZWxkOiBvcHRpb25zLnNlcmllcz8uZ3JvdXBCeSB9LFxuICAgICAgICAgICAgICAgICAgZmllbGQ6IG9wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMV0ubmFtZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZWQgPSBtZXJnZURlZXAoc3BlYywgeyBjb25maWc6IGZvbnRDb25maWcoJ1VidW50dSwgc2Fucy1zZXJpZicpIH0gYXMgYW55LCBvcHRpb25zLnNwZWNUb01lcmdlKTtcblxuICAgICAgICBpZiAoISFvcHRpb25zLnNwZWNUb01lcmdlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoc3BlYykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaXNDaGFydFZhbGlkJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG9wdGlvbnMpID0+XG4gICAgICAgICAgISFvcHRpb25zLnR5cGUgJiZcbiAgICAgICAgICAvLyBXZSBtdXN0IGhhdmUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHZhcmlhYmxlcyB0byBkcmF3IHRoZSBncmFwaFxuICAgICAgICAgIChvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzLmZpbHRlcigodikgPT4gISF2LnR5cGUpLmxlbmd0aCA+IDEgfHxcbiAgICAgICAgICAgIChvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzLmZpbHRlcigodikgPT4gISF2LnR5cGUpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgKG9wdGlvbnMuYWdncmVnYXRpb24gPT09IEFnZ3JlZ2F0aW9uLkNPVU5UIHx8XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uRElTVElOQ1QgfHxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFnZ3JlZ2F0aW9uID09PSBBZ2dyZWdhdGlvbi5OT05FKSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy52ZWdhTGl0ZVNwZWMkLCB0aGlzLnRyaWdnZXIkXSkuc3Vic2NyaWJlKChbc3BlYywgX10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmVnYSkge1xuICAgICAgICAgIHRoaXMudmlldz8uZmluYWxpemUoKTtcbiAgICAgICAgICBlbWJlZCh0aGlzLnZlZ2EubmF0aXZlRWxlbWVudCwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzcGVjKSksIHtcbiAgICAgICAgICAgIGFjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgICAgcmVuZGVyZXI6ICdzdmcnLFxuICAgICAgICAgICAgZm9ybWF0TG9jYWxlOlxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmxvY2FsZSA9PT0gJ2ZyJ1xuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsOiAnLCcsXG4gICAgICAgICAgICAgICAgICAgIHRob3VzYW5kczogJ1xcdTAwYTAnLFxuICAgICAgICAgICAgICAgICAgICBncm91cGluZzogWzNdLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogWycnLCAnXFx1MDBhMOKCrCddLFxuICAgICAgICAgICAgICAgICAgICBwZXJjZW50OiAnXFx1MjAyZiUnXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWw6ICcuJyxcbiAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmRzOiAnLCcsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nOiBbM10sXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiBbJyQnLCAnJ11cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB2aWV3Q2xhc3M6IFZlZ2FFcnJvckhhbmRsZXJcbiAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+ICh0aGlzLnZpZXcgPSByZXN1bHQudmlldykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyJC5uZXh0KCksIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnRyaWdnZXIkLm5leHQoKTtcbiAgfVxuXG4gIHN0YXRpYyBjYWxjdWxhdGVFbmNvZGluZyhvcHRpb25zOiBDaGFydFdpZGdldE9wdGlvbnMpIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSBvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzID8/IFt7fSwge31dO1xuICAgIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgICBjYXNlIE1hcmtUeXBlLkFSQzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aGV0YToge1xuICAgICAgICAgICAgZmllbGQ6IGBhdHRyaWJ1dGVzLiR7dmFyaWFibGVzWzFdLm5hbWV9LnZhbHVlYCxcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpYWJsZXNbMV0ubGFiZWwsXG4gICAgICAgICAgICB0eXBlOiB2YXJpYWJsZXNbMV0udHlwZSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZTogJ2NvdW50J1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgIGZpZWxkOiBgYXR0cmlidXRlcy4ke3ZhcmlhYmxlc1swXS5uYW1lfS52YWx1ZWAsXG4gICAgICAgICAgICB0aXRsZTogdmFyaWFibGVzWzBdLmxhYmVsLFxuICAgICAgICAgICAgdHlwZTogdmFyaWFibGVzWzBdLnR5cGUsXG4gICAgICAgICAgICBsZWdlbmQ6IG9wdGlvbnMubGVnZW5kID8/IHRydWUsXG4gICAgICAgICAgICBzY2FsZTogb3B0aW9ucy5zY2FsZSA/PyB7IHNjaGVtZTogb3B0aW9ucy5zZXJpZXM/LnNjaGVtZSA/PyAnY2F0ZWdvcnkyMGMnIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICBjYXNlIE1hcmtUeXBlLlJBREFSOlxuICAgICAgICByZXR1cm4ge307XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zdCBlbmNvZGluZyA9IHtcbiAgICAgICAgICB4OiB7XG4gICAgICAgICAgICBmaWVsZDogYGF0dHJpYnV0ZXMuJHt2YXJpYWJsZXNbMF0ubmFtZX0udmFsdWVgLFxuICAgICAgICAgICAgdGl0bGU6IHZhcmlhYmxlc1swXS5sYWJlbCxcbiAgICAgICAgICAgIHR5cGU6IHZhcmlhYmxlc1swXS50eXBlLFxuICAgICAgICAgICAgdGltZVVuaXQ6IHZhcmlhYmxlc1swXS50eXBlID09PSBWZWdhVHlwZS5URU1QT1JBTCA/IHZhcmlhYmxlc1swXS50aW1lVW5pdCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJpbjogb3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ISVNUT0dSQU0sXG4gICAgICAgICAgICBheGlzOiB2YXJpYWJsZXNbMF0uYXhpc09wdGlvbnMsXG4gICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAvLyBGb3JjZSBhIGZhbHNlIHZhbHVlIGhlcmUgc28gdGhhdCB2ZWdhIHVuZGVyc3RhbmQgcHJvcGVybHlcbiAgICAgICAgICAgICAgemVybzogISF2YXJpYWJsZXNbMF0ub3JpZ2luMCxcbiAgICAgICAgICAgICAgdHlwZTogV2lkZ2V0Q2hhcnRDb21wb25lbnQuaXNUaW1lVW5pdFVUQyh2YXJpYWJsZXNbMF0pID8gJ3V0YycgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgIGZpZWxkOiBgYXR0cmlidXRlcy4ke3ZhcmlhYmxlc1sxXS5uYW1lfS52YWx1ZWAsXG4gICAgICAgICAgICB0aXRsZTogdmFyaWFibGVzWzFdLmxhYmVsLFxuICAgICAgICAgICAgdHlwZTogb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uQ09VTlQgPyBWZWdhVHlwZS5RVUFOVElUQVRJVkUgOiB2YXJpYWJsZXNbMV0udHlwZSxcbiAgICAgICAgICAgIHRpbWVVbml0OiB2YXJpYWJsZXNbMV0udHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUwgPyB2YXJpYWJsZXNbMV0udGltZVVuaXQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBheGlzOiB2YXJpYWJsZXNbMV0uYXhpc09wdGlvbnMsXG4gICAgICAgICAgICBhZ2dyZWdhdGU6IG9wdGlvbnMuYWdncmVnYXRpb24gIT09IEFnZ3JlZ2F0aW9uLk5PTkUgPyBvcHRpb25zLmFnZ3JlZ2F0aW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgemVybzogdmFyaWFibGVzWzFdLm9yaWdpbjAsXG4gICAgICAgICAgICAgIHR5cGU6IFdpZGdldENoYXJ0Q29tcG9uZW50LmlzVGltZVVuaXRVVEModmFyaWFibGVzWzFdKSA/ICd1dGMnIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucy5zZXJpZXMpIHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgZW5jb2RpbmcuY29sb3IgPSB7XG4gICAgICAgICAgICB0aXRsZTogYCR7b3B0aW9ucy5zZXJpZXMuZ3JvdXBCeX1gLFxuICAgICAgICAgICAgZmllbGQ6IGBhdHRyaWJ1dGVzLiR7b3B0aW9ucy5zZXJpZXMuZ3JvdXBCeX0udmFsdWVgLFxuICAgICAgICAgICAgbGVnZW5kOiBvcHRpb25zLmxlZ2VuZFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKG9wdGlvbnMuc2VyaWVzLnNjaGVtZSkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgZW5jb2RpbmcuY29sb3Iuc2NhbGUgPSB7IHNjaGVtZTogb3B0aW9ucy5zZXJpZXMuc2NoZW1lIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbmNvZGluZztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYnVpbGREYXRhVmVnYVJhZGFyKGl0ZW1zOiBJdGVtW10sIG9wdGlvbnM6IENoYXJ0V2lkZ2V0T3B0aW9ucyk6IFJhZGFyVmFsdWVbXSB7XG4gICAgaWYgKG9wdGlvbnMucmFkYXI/LmNvbXBhcmUgPT09ICdpdGVtJykge1xuICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgICAgIC5tYXAoKGl0ZW0sIGlkeCkgPT5cbiAgICAgICAgICAob3B0aW9ucy5yYWRhcj8ucHJvcHMgPz8gW10pLm1hcCgocHJvcDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWVNdWx0aXBsZSA9IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShpdGVtLCBwcm9wKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IEFycmF5LmlzQXJyYXkoaXRlbVZhbHVlTXVsdGlwbGUpID8gaXRlbVZhbHVlTXVsdGlwbGVbMF0gOiBpdGVtVmFsdWVNdWx0aXBsZTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBpZHgsXG4gICAgICAgICAgICAgIGtleTogcHJvcCxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1WYWx1ZT8udmFsdWVcbiAgICAgICAgICAgIH0gYXMgUmFkYXJWYWx1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5yZWR1Y2UoKGE6IFJhZGFyVmFsdWVbXSwgYjogUmFkYXJWYWx1ZVtdKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmlsdGVyKChhOiBSYWRhclZhbHVlKSA9PiBhLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgYS52YWx1ZSAhPT0gbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtc1xuICAgICAgICAubWFwKFxuICAgICAgICAgIChpdGVtLCBpZHgpID0+XG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICBjYXRlZ29yeTogKGl0ZW0uYXR0cmlidXRlc1tvcHRpb25zLnJhZGFyPy5jYXRlZ29yeVByb3AgPz8gJyddIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKT8udmFsdWUgPz8gJ29iamVjdCcsXG4gICAgICAgICAgICAgIGtleTogKGl0ZW0uYXR0cmlidXRlc1tvcHRpb25zLnJhZGFyPy5rZXlQcm9wID8/ICcnXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSk/LnZhbHVlLFxuICAgICAgICAgICAgICB2YWx1ZTogKGl0ZW0uYXR0cmlidXRlc1tvcHRpb25zLnJhZGFyPy52YWx1ZVByb3AgPz8gJyddIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKT8udmFsdWVcbiAgICAgICAgICAgIH0gYXMgUmFkYXJWYWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAuZmlsdGVyKChhOiBSYWRhclZhbHVlKSA9PiBhLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgYS52YWx1ZSAhPT0gbnVsbCAmJiAhIWEua2V5KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWF0Y2hpbmdJdGVtcyhpdGVtczogSXRlbVtdLCBvcHRpb25zOiBDaGFydFdpZGdldE9wdGlvbnMsIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdKSB7XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgc3dpdGNoIChvcHRpb25zLnR5cGUpIHtcbiAgICAgICAgY2FzZSBNYXJrVHlwZS5DSVJDTEVfUEFDSzpcbiAgICAgICAgICByZXR1cm4gISFvcHRpb25zLnBhY2tpbmc/LmlkICYmICEhb3B0aW9ucy5wYWNraW5nLnBhcmVudElkICYmICEhb3B0aW9ucy5wYWNraW5nLnBhY2tGaWVsZDtcbiAgICAgICAgY2FzZSBNYXJrVHlwZS5SQURBUjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKChvcHRpb25zLnJhZGFyPy5jb21wYXJlID09PSAnaXRlbScgJiYgKG9wdGlvbnMucmFkYXIucHJvcHM/Lmxlbmd0aCA/PyBbXSkgPiAyKSB8fFxuICAgICAgICAgICAgICAob3B0aW9ucy5yYWRhcj8uY29tcGFyZSAhPT0gJ2l0ZW0nICYmXG4gICAgICAgICAgICAgICAgISFvcHRpb25zLnJhZGFyPy5rZXlQcm9wICYmXG4gICAgICAgICAgICAgICAgISFvcHRpb25zLnJhZGFyLnZhbHVlUHJvcCAmJlxuICAgICAgICAgICAgICAgICEhb3B0aW9ucy5yYWRhci5jYXRlZ29yeVByb3ApKSAmJlxuICAgICAgICAgICAgV2lkZ2V0Q2hhcnRDb21wb25lbnQuYnVpbGREYXRhVmVnYVJhZGFyKGl0ZW1zLCBvcHRpb25zKS5sZW5ndGggPiAwXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzBdLm5hbWUpICYmXG4gICAgICAgICAgICAoaXRlbS5hdHRyaWJ1dGVzW29wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubmFtZV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICgoT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzFdLm5hbWUpICYmXG4gICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlc1sxXS5uYW1lXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uRElTVElOQ1QgfHxcbiAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uQ09VTlQpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyB1bmlxdWVBdHRyaWJ1dGVzQnlOYW1lcyhhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSk6IEF0dHJpYnV0ZVtdIHtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoYXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSkpXS5tYXAoXG4gICAgICAoYXR0ck5hbWUpID0+IGF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSBhdHRyTmFtZSkgPz8gKHt9IGFzIEF0dHJpYnV0ZSlcbiAgICApO1xuICB9XG5cbiAgdGVtcGxhdGVUeXBlVHJhbnNsYXRpb25GbiA9IChpdGVtOiBhbnksIGFyZ3M6IGFueVtdKSA9PlxuICAgIGAke2FyZ3NbMF19JHtpdGVtID09PSBNYXJrU3ViVHlwZS5ERUZBVUxUID8gaXRlbSA6IGFyZ3NbMV0gKyBhcmdzWzJdICsgaXRlbX1gO1xuXG4gIGFkdmFuY2VkRWRpdDogc3RyaW5nID0gJ3t9JztcblxuICBjaGFuZ2VDaGFydFRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmN1c3RvbVRpdGxlID0gdGl0bGU7XG4gIH1cblxuICBjaGFuZ2VUaW1lVW5pdCgkZXZlbnQ6IFRpbWVVbml0LCB2YXJpYWJsZTogVmFyaWFibGVEZWZpbml0aW9uKSB7XG4gICAgdmFyaWFibGUudGltZVVuaXQgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VBZ2dyZWdhdGlvbigkZXZlbnQ6IEFnZ3JlZ2F0aW9uKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbiA9ICRldmVudDtcbiAgICBpZiAoW0FnZ3JlZ2F0aW9uLkNPVU5ULCBBZ2dyZWdhdGlvbi5ESVNUSU5DVF0uaW5jbHVkZXMoJGV2ZW50ISkpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0uYXhpc09wdGlvbnMgPSB7IHRpY2tNaW5TdGVwOiAxIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzFdLmF4aXNPcHRpb25zO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkLm5leHQoKTtcbiAgfVxuXG4gIGNoYW5nZVByb3BlcnR5KGF0dHJOYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBhdHRyID0gdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSBhdHRyTmFtZSk7XG4gICAgaWYgKCEhYXR0cikge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1tpbmRleF0ubmFtZSA9IGF0dHIubmFtZTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbaW5kZXhdLmxhYmVsID0gYXR0ci5uYW1lO1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzW2luZGV4XS50eXBlID0gdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKGZpZWxkLCBhdHRyLm5hbWUpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1tpbmRleF0uYXhpc09wdGlvbnMgPSB0aGlzLm1pblRpY2soZmllbGQpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwgKyAnLCAnICsgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS5sYWJlbDtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJC5uZXh0KCk7XG4gIH1cblxuICBzdGF0aWMgaXNUaW1lVW5pdFVUQyh2YXJpYWJsZURlZjogVmFyaWFibGVEZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgbGV0IHV0Y1JlZ2V4ID0gbmV3IFJlZ0V4cCgvX3V0Y3x1dGNffF9VVEN8VVRDX3xfVXRjfFV0Y18vLCAnZycpO1xuICAgIHJldHVybiB1dGNSZWdleC50ZXN0KHZhcmlhYmxlRGVmPy5sYWJlbCk7XG4gIH1cblxuICBjaGFuZ2VMYWJlbChsYWJlbDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHVwZGF0ZVRpdGxlID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9PT1cbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwgKyAnLCAnICsgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS5sYWJlbFxuICAgICkge1xuICAgICAgdXBkYXRlVGl0bGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbaW5kZXhdLmxhYmVsID0gbGFiZWw7XG4gICAgaWYgKHVwZGF0ZVRpdGxlKSB7XG4gICAgICAvL3VwZGF0ZSB0aXRsZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQgbWFudWFsbHlcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPVxuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLmxhYmVsICsgJywgJyArIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0ubGFiZWw7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlT3JpZ2luQXRaZXJvKHZhcmlhYmxlOiBWYXJpYWJsZURlZmluaXRpb24sICRldmVudDogYm9vbGVhbikge1xuICAgIHZhcmlhYmxlLm9yaWdpbjAgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VUeXBlKHR5cGVPcHRpb25zSWQ6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9uc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc0NvcHkpKTtcbiAgICBjb25zdCBbdHlwZSwgc3ViVHlwZV0gPSB0eXBlT3B0aW9uc0lkLnNwbGl0KCctJyk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMub3B0aW9uc0NvcHkudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID0gc3ViVHlwZSA/PyBNYXJrU3ViVHlwZS5ERUZBVUxUO1xuXG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkudHlwZSA9PT0gTWFya1R5cGUuQ0lSQ0xFX1BBQ0spIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkucGFja2luZyA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5wYWNraW5nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zQ29weS50eXBlKSB7XG4gICAgICBjYXNlIE1hcmtUeXBlLkJBUjpcbiAgICAgIGNhc2UgTWFya1R5cGUuTElORTpcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1swXS50eXBlID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLnR5cGUgIT09IFZlZ2FUeXBlLlRFTVBPUkFMID8gVmVnYVR5cGUuTk9NSU5BTCA6IFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTWFya1R5cGUuUE9JTlQ6XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0udHlwZSA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS50eXBlICE9PSBWZWdhVHlwZS5URU1QT1JBTCA/IFZlZ2FUeXBlLlFVQU5USVRBVElWRSA6IFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5BUkVBU1RBQ0tFRCB8fCB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkhJU1RPU1RBQ0tFRCkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMgPSB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcyA/PyB7fTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0Q2hhcnQoKTtcblxuICAgIGlmIChzdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ET05VVCkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5pbm5lclJhZGl1cyA9IHRoaXMub3B0aW9uc0NvcHkuaW5uZXJSYWRpdXMgPz8gNTA7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRDaGFydCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlcz8ubGVuZ3RoID4gMikge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlcy5wb3AoKTtcbiAgICB9XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdHJhbnNsYXRlVG9WZWdhVHlwZSh0eXBlOiBGaWVsZFR5cGUsIG5hbWU6IHN0cmluZyk6IFZlZ2FUeXBlIHtcbiAgICBsZXQgaWRSZWdleCA9IG5ldyBSZWdFeHAoL19pZHxpZF98X0lEfElEX3xfSWR8SWRfLywgJ2cnKTtcbiAgICBpZiAoaWRSZWdleC50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gVmVnYVR5cGUuT1JESU5BTDtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5ERUNJTUFMOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5URUdFUjpcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxPTkc6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5RVUFOVElUQVRJVkU7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlNUQU5UOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuVEVNUE9SQUw7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5LRVlXT1JEOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuTk9NSU5BTDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5OT01JTkFMO1xuICAgIH1cbiAgfVxuXG4gIG1pblRpY2sodHlwZTogRmllbGRUeXBlKTogeyB0aWNrTWluU3RlcDogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5URUdFUjpcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxPTkc6XG4gICAgICAgIHJldHVybiB7IHRpY2tNaW5TdGVwOiAxIH07XG4gICAgICBjYXNlIEZpZWxkVHlwZS5ERUNJTUFMOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5TVEFOVDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLktFWVdPUkQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5TVFJJTkc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHRyaWdnZXIoKSB7XG4gICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJC5uZXh0KCk7XG4gIH1cblxuICBwcm9wb3NlVGl0bGUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zQ29weS50eXBlID09PSBNYXJrVHlwZS5SQURBUikge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zQ29weS5yYWRhcj8uY29tcGFyZSA9PT0gJ2l0ZW0nKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci50aXRsZUl0ZW0nLCB7XG4gICAgICAgICAgICBwcm9wczogKHRoaXMub3B0aW9uc0NvcHkucmFkYXIucHJvcHMgfHwgW10pLmpvaW4oJywgJylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zQ29weS5yYWRhcj8uY29tcGFyZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQucmFkYXIudGl0bGVMaXN0Jywge1xuICAgICAgICAgICAga2V5OiB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyLmtleVByb3AgPz8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LnJhZGFyLmRlZmluZUtleScpLFxuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkucmFkYXIudmFsdWVQcm9wID8/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci5kZWZpbmVWYWx1ZScpLFxuICAgICAgICAgICAgY2F0ZWdvcnk6XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkucmFkYXIuY2F0ZWdvcnlQcm9wID8/XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci5kZWZpbmVDYXRlZ29yeScpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPT09IE1hcmtUeXBlLkNJUkNMRV9QQUNLKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLnRpdGxlJywge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLm9wdGlvbnNDb3B5LnBhY2tpbmc/LnBhY2tGaWVsZCA/PyAnJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgY2hhbmdlSW5uZXJSYWRpdXMoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5vcHRpb25zQ29weS5pbm5lclJhZGl1cyA9IHBhcnNlSW50KCRldmVudCwgMTApO1xuICB9XG5cbiAgb3BlblNldHRpbmdzKCkge1xuICAgICh0aGlzLm9wZW4kIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHRvZ2dsZVNlcmllcygkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTZXJpZXMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkuc2VyaWVzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcy5ncm91cEJ5ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlU2VyaWVzU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LnNlcmllcykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMuc2NoZW1lID0gJGV2ZW50O1xuICB9XG5cbiAgdG9nZ2xlU2VyaWVzTGVnZW5kKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5sZWdlbmQgPSAkZXZlbnQ7XG4gIH1cblxuICB0b2dnbGVUb29sdGlwKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS50b29sdGlwID0gJGV2ZW50O1xuICB9XG5cbiAgYXhlTGFiZWwoaTogbnVtYmVyLCBvcHRpb25zQ29weTogQ2hhcnRXaWRnZXRPcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5BUkMpIHtcbiAgICAgIHJldHVybiBpID09PSAwID8gJ0Bwcnkud2lkZ2V0LmNoYXJ0LmVuY29kaW5nLmdyb3VwJyA6ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy52YWx1ZXMnO1xuICAgIH1cbiAgICByZXR1cm4gaSA9PT0gMCA/ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy5ob3Jpem9udGFsJyA6ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy52ZXJ0aWNhbCc7XG4gIH1cblxuICBoYXNOb1R5cGUob3B0aW9uczogQ2hhcnRXaWRnZXRPcHRpb25zKSB7XG4gICAgcmV0dXJuICFvcHRpb25zIHx8ICFvcHRpb25zLnR5cGUgfHwgb3B0aW9ucy50eXBlLmluY2x1ZGVzKCd1bmRlZmluZWQnKSB8fCBvcHRpb25zLnR5cGUuaW5jbHVkZXMoJ251bGwnKTtcbiAgfVxuXG4gIHNjaGVtZSgpIHtcbiAgICByZXR1cm4gdmVnYS5zY2hlbWUodGhpcy5vcHRpb25zQ29weS5zZXJpZXM/LnNjaGVtZSA/PyAnJyk7XG4gIH1cblxuICB0b2dnbGVTcGVjVG9NZXJnZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2UgPSB7fTtcbiAgICAgIHRoaXMuYWR2YW5jZWRFZGl0ID0gJ3t9JztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2U7XG4gICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9ICd7fSc7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQWR2YW5jZWRFZGl0KCRldmVudDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSAkZXZlbnQ/LnRhcmdldD8udmFsdWUgPz8gJGV2ZW50O1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zcGVjVG9NZXJnZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9IEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2UsIHVuZGVmaW5lZCwgNCk7XG4gICAgICAgIHRoaXMuaW52YWxpZEpzb24gPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBqc29uIHByb3ZpZGVkJyk7XG4gICAgICAgIHRoaXMuaW52YWxpZEpzb24gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2U7XG4gICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9ICd7fSc7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2NhbnZhcycpWzBdLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJykpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1jaGFydC1jc3M+PC9wcnktd2lkZ2V0LWNoYXJ0LWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tY2hhcnRcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgI2hlYWRlclxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFtpc0Rpc2FibGVdPVwiKGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMCB8fCBoYXNOb1R5cGUob3B0aW9uc0NvcHkpXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQudGl0bGVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50KVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuY3VzdG9tVGl0bGUgPz8gb3B0aW9uc0NvcHkudGl0bGVcIlxuICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWx0ZXJEYXRhRm9yT3B0aW9uc0NvcHkkIHwgYXN5bmMpPy5sZW5ndGggPT09IDA7IGVsc2UgZGF0YVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhLWxhYmVsIGEtbGFiZWwtLWhlbHAgLWVycm9yXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnBhcmFtcy5ub1BhcmFtcycgfCBpMThuIH19PC9wPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0YT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuUkFEQVJcIj5cbiAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnBhcmFtcy5tdWx0aXBsZVBhcmFtcycgfCBpMThuIH19e3sgKGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQgfCBhc3luYyk/Lmxlbmd0aCB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnNDb3B5XCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfdHlwZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC50eXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUeXBlKCRldmVudClcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cInR5cGVPcHRpb25zXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnR5cGUgKyAnLScgKyBvcHRpb25zQ29weS5zdWJUeXBlXCJcbiAgICAgICAgICAgIGkxOG5QcmVmaXg9XCJAcHJ5LndpZGdldC5jaGFydC5tYXJrVHlwZS5cIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgaWQ9XCJjaGFydF90eXBlXCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLlJBREFSICYmIG9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5DSVJDTEVfUEFDS1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHk/LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkRPTlVUXCI+XG4gICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuaW5uZXJSYWRpdXNcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlSW5uZXJSYWRpdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LmlubmVyUmFkaXVzXCJcbiAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgbWF4PVwiNTAwXCJcbiAgICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFyaWFibGVEZWYgb2Ygb3B0aW9uc0NvcHk/LnNlbGVjdGVkVmFyaWFibGVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJpID09PSAxXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYWdncmVnYXRpb25zXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmVuY29kaW5nLmdyb3VwJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWdncmVnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaSA9PT0gMVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJhZ2dyZWdhdGlvbnNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hZ2dyZWdhdGlvblwiXG4gICAgICAgICAgICAgIGlkPVwiYWdncmVnYXRpb25zXCJcbiAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBwcnkud2lkZ2V0LmNoYXJ0LmFnZ3JlZ2F0aW9uLlwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwiaSAhPT0gMSB8fCBvcHRpb25zQ29weS5hZ2dyZWdhdGlvbiAhPT0gJ2NvdW50J1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImFnZ3JlZ2F0aW9uX3Byb3BlcnR5XCI+XG4gICAgICAgICAgICAgIHt7IGF4ZUxhYmVsKGksIG9wdGlvbnNDb3B5KSB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcm9wZXJ0eSgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cIihpICE9PSAxID8gdmFyaWFibGVBdHRyaWJ1dGVzJCA6IHBvc3NpYmxlU2Vjb25kYXJ5QXR0cmlidXRlcyQpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YXJpYWJsZURlZi5uYW1lXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cInRlY2huaWNhbE5hbWVcIlxuICAgICAgICAgICAgICBpZD1cImFnZ3JlZ2F0aW9uX3Byb3BlcnR5XCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQuZGF0YUxhYmVsXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxhYmVsKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwidmFyaWFibGVEZWYubGFiZWxcIlxuICAgICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInZhcmlhYmxlRGVmLnR5cGUgPT09ICd0ZW1wb3JhbCdcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3RpbWVVbml0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRpbWVVbml0JyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVGltZVVuaXQoJGV2ZW50LCB2YXJpYWJsZURlZilcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwidGltZVVuaXRzXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwidmFyaWFibGVEZWYudGltZVVuaXRcIlxuICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQuY2hhcnQudGltZVVuaXRMaXN0LlwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfdGltZVVuaXRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2YXJpYWJsZURlZi50eXBlID09PSAncXVhbnRpdGF0aXZlJyAmJiBvcHRpb25zQ29weT8udHlwZSAhPT0gJ2FyYydcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVPcmlnaW5BdFplcm8odmFyaWFibGVEZWYsICRldmVudClcIiBbbmdNb2RlbF09XCJ2YXJpYWJsZURlZi5vcmlnaW4wXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmlnaW4nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNlcmllcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5zZXJpZXNcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5BUkMgJiYgb3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLlJBREFSXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuQVJFQVNUQUNLRUQgfHxcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkhJU1RPU1RBQ0tFRFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllcycgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLkFSQyAmJiBvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuUkFEQVIgJiYgISFvcHRpb25zQ29weS5zZXJpZXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNBdHRyXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc0F0dHInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcy5ncm91cEJ5IVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzQXR0clwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKG9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5BUkMgfHwgb3B0aW9uc0NvcHk/LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSIHx8ICEhb3B0aW9uc0NvcHkuc2VyaWVzKSAmJlxuICAgICAgICAgICAgICBzY2hlbWVzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNTY2hlbWVcIiBbdGl0bGVdPVwiJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc1NjaGVtZUFsdCcgfCBpMThuXCI+e3tcbiAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc1NjaGVtZScgfCBpMThuXG4gICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXNTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lIVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJzY2hlbWVzXCJcbiAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zZXJpZXNTY2hlbWVcIlxuICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQuY2hhcnQuc2NoZW1lLlwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwiaWRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldC0tY2hhcnQtY29sb3ItdGh1bWJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNjaGVtZUNvbG9yIG9mIHNjaGVtZSgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJvLXdpZGdldC0tY2hhcnQtY29sb3ItdGh1bWItaXRlbVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJzY2hlbWVDb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNjaGVtZUNvbG9yXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU2VyaWVzTGVnZW5kKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmxlZ2VuZCFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5SQURBUiB8fCAhIW9wdGlvbnNDb3B5LnNlcmllc1wiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuc2VyaWVzTGVnZW5kJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVUb29sdGlwKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LnRvb2x0aXAhXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC50b29sdGlwJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSICYmIG9wdGlvbnNDb3B5LnJhZGFyICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLmNvbXBhcmVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiY29tcGFyaXNvbnNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5yYWRhci5jb21wYXJlID09PSAnaXRlbSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLnByb3BzXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwibnVtZXJpY1Byb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2xvc2VPblNlbGVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5yYWRhci5jb21wYXJlID09PSAndmFsdWUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjb21wYXJpc29uX2tleVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jb21wYXJpc29uLmtleScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLmtleVByb3BcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJ0ZXh0UHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJjb21wYXJpc29uX2tleVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY29tcGFyaXNvbl92YWx1ZXNcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY29tcGFyaXNvbi52YWx1ZXMnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5yYWRhci52YWx1ZVByb3BcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJudW1lcmljUHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJjb21wYXJpc29uX3ZhbHVlc1wiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY29tcGFyaXNvbl9jYXRlZ29yeVwiPnt7XG4gICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbXBhcmlzb24uY2F0ZWdvcnknIHwgaTE4blxuICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5yYWRhci5jYXRlZ29yeVByb3BcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJ0ZXh0UHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJjb21wYXJpc29uX2NhdGVnb3J5XCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzY2hlbWVzXCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwiY2hhcnRfc2VyaWVzU2NoZW1lX3JhZGFyXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidAcHJ5LndpZGdldC5jaGFydC5zZXJpZXNTY2hlbWVBbHQnIHwgaTE4blwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuc2VyaWVzU2NoZW1lJyB8IGkxOG4gfX08L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXNTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lIVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJzY2hlbWVzXCJcbiAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zZXJpZXNTY2hlbWVfcmFkYXJcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5DSVJDTEVfUEFDSyAmJiBvcHRpb25zQ29weS5wYWNraW5nICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9jaXJjbGVfaWRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLmlkJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucGFja2luZy5pZFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX2lkXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfY2lyY2xlX3BpZFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jaXJjbGUucGlkJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucGFja2luZy5wYXJlbnRJZFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX3BpZFwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X2NpcmNsZV9maWVsZFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jaXJjbGUuZmllbGQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5wYWNraW5nLnBhY2tGaWVsZFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJudW1lcmljUHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgaWQ9XCJjaGFydF9jaXJjbGVfZmllbGRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9jaXJjbGVfdG9vbHRpcFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jaXJjbGUudG9vbHRpcCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnBhY2tpbmcudG9vbHRpcFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX3Rvb2x0aXBcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNwZWNUb01lcmdlKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LnNwZWNUb01lcmdlXCJcbiAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm1vcmVPcHRpb25zJyB8IGkxOG4gfX1cbiAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2VcIj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImFkdmFuY2VkRWRpdFwiXG4gICAgICAgICAgICAoZm9jdXNvdXQpPVwidXBkYXRlQWR2YW5jZWRFZGl0KCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fYXJlYVwiXG4gICAgICAgICAgICBbY2xhc3MuLWludmFsaWRdPVwiaW52YWxpZEpzb25cIlxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDaGFydFZhbGlkJCB8IGFzeW5jXCI+XG4gICAgPGRpdlxuICAgICAgI3ZlZ2FcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICgod2lkZ2V0U2l6ZSQgfCBhc3luYyk/LmhlaWdodCA/PyAwKSAtICgoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPyAxIDogMCkgKiBXSURHRVRfSEVBREVSX0hFSUdIVFxuICAgICAgXCJcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCIod2lkZ2V0U2l6ZSQgfCBhc3luYyk/LndpZHRoXCJcbiAgICA+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGlzQ2hhcnRWYWxpZCQgfCBhc3luYylcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2Nob29zZS1wYXJhbWV0ZXJzXCI+XG4gICAgICA8cCBjbGFzcz1cImEtcFwiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQuY2hhcnQuY2hvb3NlUGFyYW1ldGVycycgfCBpMThuIH19XG4gICAgICA8L3A+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblNldHRpbmdzKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCIgaWNvblN2Zz1cImNvbnRyb2xcIj48L3ByeS1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQuc2V0dGluZ3MudGl0bGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
651
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWNoYXJ0L2NvbXBvbmVudC93aWRnZXQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtY2hhcnQvY29tcG9uZW50L3dpZGdldC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkcsT0FBTyxFQUNMLFdBQVcsRUFPWCxjQUFjLEVBQ2QsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixtQkFBbUIsRUFFbkIsY0FBYyxFQUNkLFNBQVMsRUFFVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFFBQVEsRUFJUixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5FLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxF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QUFZLEVBQUUsQ0FBQztTQUMzQjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFUSxPQUFPO1FBQ2QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDeEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQWh4QlUsb0JBQW9CO21HQUFwQixvQkFBb0IsNktDakRqQyxpb2VBOFdBOzs0RkQ3VGEsb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQjtrTEFJVCxJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb24sXG4gIEF0dHJpYnV0ZSxcbiAgQXR0cmlidXRlU2ltcGxlVmFsdWUsXG4gIENoYXJ0T3B0aW9uLFxuICBDaGFydFN1YlR5cGVEZWZpbml0aW9uLFxuICBDaGFydFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29uZmlnU2VsZWN0b3JzLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEZpZWxkLFxuICBGaWVsZFNlbGVjdG9ycyxcbiAgRmllbGRUeXBlLFxuICBJdGVtLFxuICBJdGVtVXRpbHMsXG4gIE1hcmtTdWJUeXBlLFxuICBNYXJrVHlwZSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFZhcmlhYmxlRGVmaW5pdGlvbixcbiAgVmVnYUNvbG9yVHlwZSxcbiAgVmVnYVR5cGUsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hUXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlbGF5LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUaW1lVW5pdCwgVmlldyB9IGZyb20gJ3ZlZ2EnO1xuaW1wb3J0IGVtYmVkLCB7IHZlZ2EgfSBmcm9tICd2ZWdhLWVtYmVkJztcbmltcG9ydCB7IG1lcmdlRGVlcCwgVG9wTGV2ZWxTcGVjIH0gZnJvbSAndmVnYS1saXRlJztcbmltcG9ydCB7IGZvbnRDb25maWcgfSBmcm9tICd2ZWdhLWxpdGUvYnVpbGQvc3JjL2NvbmZpZyc7XG5pbXBvcnQgeyBWZWdhRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi92ZWdhLWVycm9yLmhhbmRsZXInO1xuaW1wb3J0IHsgdmVnYUJhc2VDb25mLCB2ZWdhQ2lyY2xlUGFja0NvbmYsIHZlZ2FSYWRhckNvbmYgfSBmcm9tICcuL3ZlZ2Etc3BlYy5jb25zdGFudCc7XG5cbmV4cG9ydCB0eXBlIFJhZGFyVmFsdWUgPSB7XG4gIGNhdGVnb3J5OiBudW1iZXI7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufTtcblxudmVnYS5zY2hlbWUoJ0tPL1cvT0snLCBbJyNDMDREM0YnLCAnI0ZEOTg0MycsICcjOUFCRTI5J10pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1jaGFydC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q2hhcnRDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3ZlZ2EnKSB2ZWdhITogRWxlbWVudFJlZjtcbiAgdHlwZU9wdGlvbnM6IHtcbiAgICB0eXBlOiBNYXJrVHlwZTtcbiAgICBzdWJUeXBlOiBNYXJrU3ViVHlwZTtcbiAgICBsYWJlbDogTWFya1R5cGUgfCBNYXJrU3ViVHlwZTtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRyYW5zbGF0ZWQ/OiBzdHJpbmc7XG4gIH1bXSA9IFtdO1xuICBtYXJrVHlwZXM6IE1hcmtUeXBlW10gPSBbXTtcbiAgc3ViVHlwZXM/OiBQYXJ0aWFsPENoYXJ0U3ViVHlwZURlZmluaXRpb24+O1xuICBzY2hlbWVzPzogeyBpZDogVmVnYUNvbG9yVHlwZTsgdHJhbnNsYXRlZDogc3RyaW5nIH1bXTtcbiAgTWFya1R5cGUgPSBNYXJrVHlwZTtcbiAgTWFya1N1YlR5cGUgPSBNYXJrU3ViVHlwZTtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcblxuICB0aW1lVW5pdHM6IFRpbWVVbml0W10gPSBbJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VycycsICdtaW51dGVzJ107XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPENoYXJ0V2lkZ2V0T3B0aW9ucz47XG4gIG9wdGlvbnNDb3B5OiBDaGFydFdpZGdldE9wdGlvbnMgPSB7fSBhcyBDaGFydFdpZGdldE9wdGlvbnM7XG4gIGNsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuICBmaWVsZHMkOiBPYnNlcnZhYmxlPEZpZWxkW10+O1xuICB2YXJpYWJsZXMkOiBPYnNlcnZhYmxlPFZhcmlhYmxlRGVmaW5pdGlvbltdPjtcbiAgdmVnYUxpdGVTcGVjJDogT2JzZXJ2YWJsZTxUb3BMZXZlbFNwZWM+O1xuICB2YXJpYWJsZUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgcG9zc2libGVTZWNvbmRhcnlBdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIHRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuICBpdGVtcyQ6IE9ic2VydmFibGU8SXRlbVtdPjtcbiAgZmlsdGVyRGF0YUZvck9wdGlvbnMkOiBPYnNlcnZhYmxlPEl0ZW1bXT47XG4gIGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQ6IE9ic2VydmFibGU8SXRlbVtdPjtcbiAgdmFyaWFibGVzOiBWYXJpYWJsZURlZmluaXRpb25bXSA9IFtdO1xuICBhZ2dyZWdhdGlvbnM6IGFueVtdID0gW107XG4gIHZhcmlhYmxlQXR0cmlidXRlczogQXR0cmlidXRlW10gPSBbXTtcbiAgZmllbGRzOiBGaWVsZFtdID0gW107XG4gIGlzQ2hhcnRWYWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIG51bWVyaWNQcm9wZXJ0aWVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIHRleHRQcm9wZXJ0aWVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIGNvbXBhcmlzb25zID0gW1xuICAgIHtcbiAgICAgIGlkOiAnaXRlbScsXG4gICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuY29tcGFyaXNvbi5pdGVtJylcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAndmFsdWUnLFxuICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbXBhcmlzb24udmFsdWUnKVxuICAgIH1cbiAgXTtcbiAgdmlldz86IFZpZXc7XG4gIHRyaWdnZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgaW52YWxpZEpzb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG5cbiAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuY2hhcnRPcHRpb24pLnN1YnNjcmliZSgoY2hhcnRPcHRpb25zOiBDaGFydE9wdGlvbikgPT4ge1xuICAgICAgdGhpcy5hZ2dyZWdhdGlvbnMgPSBjaGFydE9wdGlvbnMuYWdncmVnYXRpb247XG4gICAgICB0aGlzLnNjaGVtZXMgPSBjaGFydE9wdGlvbnMuY29sb3IubWFwKChzY2hlbWUpID0+ICh7IGlkOiBzY2hlbWUsIHRyYW5zbGF0ZWQ6ICcnIH0pKTtcbiAgICAgIHRoaXMubWFya1R5cGVzID0gY2hhcnRPcHRpb25zLnR5cGU7XG4gICAgICB0aGlzLnN1YlR5cGVzID0gY2hhcnRPcHRpb25zLnN1YlR5cGU7XG5cbiAgICAgIHRoaXMudHlwZU9wdGlvbnMgPSB0aGlzLm1hcmtUeXBlc1xuICAgICAgICAubWFwKCh0eXBlOiBNYXJrVHlwZSkgPT4ge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdWJUeXBlcyAmJiB0aGlzLnN1YlR5cGVzW3R5cGVdID8gdGhpcy5zdWJUeXBlc1t0eXBlXS5tYXAoKHN1YlR5cGUpID0+ICh7IHR5cGUsIHN1YlR5cGUgfSkpIDogW107XG4gICAgICAgIH0pXG4gICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgICAgIC5tYXAoKG9wdGlvbnM6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIGlkOiBgJHtvcHRpb25zLnR5cGV9LSR7b3B0aW9ucy5zdWJUeXBlfWAsXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuREVGQVVMVCA/IG9wdGlvbnMudHlwZSA6IG9wdGlvbnMuc3ViVHlwZVxuICAgICAgICB9KSlcbiAgICAgICAgLm1hcCgob3B0aW9uczogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgdHJhbnNsYXRlZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm1hcmtUeXBlLicgKyBvcHRpb25zLmxhYmVsKVxuICAgICAgICB9KSk7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zLnNvcnQoKGEsIGIpID0+IGEudHJhbnNsYXRlZD8ubG9jYWxlQ29tcGFyZShiLnRyYW5zbGF0ZWQgPz8gJycpID8/IC0xKTtcbiAgICB9KTtcbiAgICB0aGlzLmNsYXNzZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3Nlcyk7XG4gICAgdGhpcy5maWVsZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKTtcblxuICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzdWx0U2V0JCwgdGhpcy5jbGFzc2VzJCwgdGhpcy5maWVsZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzXSkgPT4gSXRlbVV0aWxzLmdldEF0dHJpYnV0ZXNGcm9tUnMocmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpKSxcbiAgICAgIG1hcCgoZmllbGRzOiBBdHRyaWJ1dGVbXSkgPT4gZmllbGRzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpKSxcbiAgICAgIG1hcCgocHJvcHMpID0+IFdpZGdldENoYXJ0Q29tcG9uZW50LnVuaXF1ZUF0dHJpYnV0ZXNCeU5hbWVzKHByb3BzKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLnN1YnNjcmliZSgoYXR0cnMpID0+ICh0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyA9IGF0dHJzKSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5maWVsZHMkLnN1YnNjcmliZSgoYXR0cnMpID0+ICh0aGlzLmZpZWxkcyA9IGF0dHJzKSkpO1xuXG4gICAgdGhpcy52YXJpYWJsZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLCB0aGlzLmZpZWxkcyRdKS5waXBlKFxuICAgICAgbWFwKChbYXR0cmlidXRlcywgZmllbGRzXSkgPT4ge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5tYXAoXG4gICAgICAgICAgKGF0dHIpID0+XG4gICAgICAgICAgICAoKHtcbiAgICAgICAgICAgICAgbmFtZTogYXR0ci50ZWNobmljYWxOYW1lLFxuICAgICAgICAgICAgICBsYWJlbDogYXR0ci5uYW1lLFxuICAgICAgICAgICAgICB0eXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoXG4gICAgICAgICAgICAgICAgZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZCk/LnR5cGUgPz8gRmllbGRUeXBlLlNUUklORyxcbiAgICAgICAgICAgICAgICBhdHRyLm5hbWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBhcyBWYXJpYWJsZURlZmluaXRpb24pID8/IFtdKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy52YXJpYWJsZXMkLFxuICAgICAgdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiBtYW5pZmVzdC5vcHRpb25zIGFzIENoYXJ0V2lkZ2V0T3B0aW9ucykpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhcmlhYmxlcywgb3B0aW9uc10pID0+ICh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAoKHZhcmlhYmxlc1swXT8ubGFiZWwgPz8gJycpICsgJywgJyArICh2YXJpYWJsZXNbMV0/LmxhYmVsID8/ICcnKSkucmVwbGFjZSgvXiwgJC8sICcnKSxcbiAgICAgICAgc2VsZWN0ZWRWYXJpYWJsZXM6IG9wdGlvbnM/LnNlbGVjdGVkVmFyaWFibGVzID8/IFt7fSwge31dLFxuICAgICAgICAvLyBIZXJlLCB3ZSBkbyBub3QgcHJlc3VtZSBvZiB0aGUgdHlwZSBvZiBncmFwaCB0aGF0IHRoZSB1c2VyIHdhbnRzLCBhbmQgcHJlZmVyIHRvIGRpc3BsYXkgYSBidXR0b24gdG8gZ28gdG8gcGFyYW1zXG4gICAgICAgIHR5cGU6IG9wdGlvbnM/LnR5cGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICBhZ2dyZWdhdGlvbjogb3B0aW9ucz8uYWdncmVnYXRpb24gPz8gQWdncmVnYXRpb24uQ09VTlQsXG4gICAgICAgIHRvb2x0aXA6IG9wdGlvbnM/LnRvb2x0aXAgPz8gdHJ1ZSxcbiAgICAgICAgbGVnZW5kOiBvcHRpb25zLmxlZ2VuZCA/PyB0cnVlLFxuICAgICAgICBsb2NhbGU6ICdmcidcbiAgICAgIH0pKVxuICAgICk7XG5cbiAgICB0aGlzLml0ZW1zJCA9IHRoaXMucmVzdWx0U2V0JC5waXBlKFxuICAgICAgZmlsdGVyKChyZXN1bHRTZXQpID0+ICEhcmVzdWx0U2V0KSxcbiAgICAgIG1hcCgocmVzdWx0U2V0KSA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXN1bHRTZXQ/Lml0ZW1zKVxuICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+IHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXSlcbiAgICAgICAgICAucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBbLi4ucHJldiwgLi4uY3Vycl0sIFtdKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucG9zc2libGVTZWNvbmRhcnlBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkLFxuICAgICAgdGhpcy5pdGVtcyQsXG4gICAgICB0aGlzLmZpZWxkcyQsXG4gICAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhcmlhYmxlRmllbGRzLCBpdGVtcywgZmllbGRzLCBfXSkgPT4ge1xuICAgICAgICByZXR1cm4gdmFyaWFibGVGaWVsZHNcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgIC8vIEtlZXAgb25seSBudW1lcmljIHZhbHVlcyB3aGVuIG5lY2Vzc2FyeVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbiB8fFxuICAgICAgICAgICAgICBbQWdncmVnYXRpb24uTk9ORSwgQWdncmVnYXRpb24uRElTVElOQ1QsIEFnZ3JlZ2F0aW9uLkNPVU5UXS5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LmFnZ3JlZ2F0aW9uKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyaWJ1dGUuZmllbGQpO1xuICAgICAgICAgICAgICByZXR1cm4gW0ZpZWxkVHlwZS5ERUNJTUFMLCBGaWVsZFR5cGUuSU5TVEFOVCwgRmllbGRUeXBlLkxPTkcsIEZpZWxkVHlwZS5JTlRFR0VSXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICBmaWVsZD8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICBpdGVtcy5maW5kKFxuICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmF0dHJpYnV0ZXMpLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwpICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhhdHRyaWJ1dGUudGVjaG5pY2FsTmFtZSkgJiZcbiAgICAgICAgICAgICAgICAhIShpdGVtLmF0dHJpYnV0ZXNbdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1swXS5sYWJlbF0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgKGl0ZW0uYXR0cmlidXRlc1thdHRyaWJ1dGUubmFtZV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBtYXAoKHByb3BzKSA9PiBXaWRnZXRDaGFydENvbXBvbmVudC51bmlxdWVBdHRyaWJ1dGVzQnlOYW1lcyhwcm9wcykpXG4gICAgKTtcblxuICAgIHRoaXMubnVtZXJpY1Byb3BlcnRpZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyQsXG4gICAgICB0aGlzLml0ZW1zJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMudHJpZ2dlckNhbGN1bGF0ZVBvc3NpYmxlQXR0cmlidXRlcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdmFyaWFibGVGaWVsZHMsIGl0ZW1zLCBmaWVsZHMsIF9dKSA9PiB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZUZpZWxkc1xuICAgICAgICAgIC5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyaWJ1dGUuZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIFtGaWVsZFR5cGUuREVDSU1BTCwgRmllbGRUeXBlLklOU1RBTlQsIEZpZWxkVHlwZS5MT05HLCBGaWVsZFR5cGUuSU5URUdFUl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIGZpZWxkPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICBpdGVtcy5maW5kKFxuICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmF0dHJpYnV0ZXMpLmluY2x1ZGVzKGF0dHJpYnV0ZS50ZWNobmljYWxOYW1lKSAmJlxuICAgICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbYXR0cmlidXRlLnRlY2huaWNhbE5hbWVdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChwcm9wcykgPT4ge1xuICAgICAgICByZXR1cm4gV2lkZ2V0Q2hhcnRDb21wb25lbnQudW5pcXVlQXR0cmlidXRlc0J5TmFtZXMocHJvcHMpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy50ZXh0UHJvcGVydGllcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJCxcbiAgICAgIHRoaXMuaXRlbXMkLFxuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt2YXJpYWJsZUZpZWxkcywgaXRlbXMsIGZpZWxkcywgX10pID0+IHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlRmllbGRzXG4gICAgICAgICAgLmZpbHRlcigoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHJpYnV0ZS5maWVsZCk7XG4gICAgICAgICAgICByZXR1cm4gW0ZpZWxkVHlwZS5TVFJJTkcsIEZpZWxkVHlwZS5LRVlXT1JEXS5pbmNsdWRlcyhmaWVsZD8udHlwZSA/PyBGaWVsZFR5cGUuSU5URUdFUik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICBpdGVtcy5maW5kKFxuICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmF0dHJpYnV0ZXMpLmluY2x1ZGVzKGF0dHJpYnV0ZS50ZWNobmljYWxOYW1lKSAmJlxuICAgICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbYXR0cmlidXRlLnRlY2huaWNhbE5hbWVdIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKS52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChwcm9wcykgPT4ge1xuICAgICAgICByZXR1cm4gV2lkZ2V0Q2hhcnRDb21wb25lbnQudW5pcXVlQXR0cmlidXRlc0J5TmFtZXMocHJvcHMpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5maWx0ZXJEYXRhRm9yT3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLml0ZW1zJCwgdGhpcy5vcHRpb25zJCwgdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW2l0ZW1zLCBvcHRpb25zXSkgPT4gb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlcyAmJiBvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzLmxlbmd0aCA+IDApLFxuICAgICAgbWFwKChbaXRlbXMsIG9wdGlvbnMsIHZhcmlhYmxlc10pID0+IFdpZGdldENoYXJ0Q29tcG9uZW50Lm1hdGNoaW5nSXRlbXMoaXRlbXMsIG9wdGlvbnMsIHZhcmlhYmxlcykpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyRGF0YUZvck9wdGlvbnNDb3B5JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5pdGVtcyQsXG4gICAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkLnBpcGUoZGVsYXkoMjAwKSksXG4gICAgICB0aGlzLnZhcmlhYmxlQXR0cmlidXRlcyRcbiAgICBdKS5waXBlKFxuICAgICAgZmlsdGVyKChbaXRlbXMsIF9dKSA9PiB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzICYmIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXMubGVuZ3RoID4gMCksXG4gICAgICBtYXAoKFtpdGVtcywgXywgdmFyaWFibGVzXSkgPT4gV2lkZ2V0Q2hhcnRDb21wb25lbnQubWF0Y2hpbmdJdGVtcyhpdGVtcywgdGhpcy5vcHRpb25zQ29weSwgdmFyaWFibGVzKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuICAgICAgICB0aGlzLnVwZGF0ZUFkdmFuY2VkRWRpdChKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnNDb3B5LnNwZWNUb01lcmdlKSk7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkudHlwZSA9ICF0aGlzLm1hcmtUeXBlcy5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LnR5cGUpXG4gICAgICAgICAgPyB0aGlzLm1hcmtUeXBlc1swXVxuICAgICAgICAgIDogdGhpcy5vcHRpb25zQ29weS50eXBlO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPSB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPz8gTWFya1N1YlR5cGUuREVGQVVMVDtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbiA9ICF0aGlzLmFnZ3JlZ2F0aW9ucy5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LmFnZ3JlZ2F0aW9uKVxuICAgICAgICAgID8gdGhpcy5hZ2dyZWdhdGlvbnNbMF1cbiAgICAgICAgICA6IHRoaXMub3B0aW9uc0NvcHkuYWdncmVnYXRpb247XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnNlcmllcykge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzLnNjaGVtZSA9XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lICYmXG4gICAgICAgICAgICB0aGlzLnNjaGVtZXMgJiZcbiAgICAgICAgICAgICF0aGlzLnNjaGVtZXMuZmluZCgocykgPT4gcy5pZCA9PT0gdGhpcy5vcHRpb25zQ29weT8uc2VyaWVzPy5zY2hlbWUpXG4gICAgICAgICAgICAgID8gdGhpcy5zY2hlbWVzWzBdLmlkXG4gICAgICAgICAgICAgIDogdGhpcy5vcHRpb25zQ29weS5zZXJpZXM/LnNjaGVtZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52ZWdhTGl0ZVNwZWMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMud2luZG93TWFuaWZlc3QpLFxuICAgICAgdGhpcy5tYW5pZmVzdCQsXG4gICAgICB0aGlzLndpZGdldFNpemUkLFxuICAgICAgdGhpcy5maWx0ZXJEYXRhRm9yT3B0aW9ucyQsXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5kaXNwbGF5SGVhZGVyJCxcbiAgICAgIHRoaXMudmFyaWFibGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt3aW5kb3dNYW5pZmVzdCwgd2lkZ2V0TWFuaWZlc3QsIHNpemUsIGRhdGEsIG9wdGlvbnMsIGRpc3BsYXlIZWFkZXIsIHZhcmlhYmxlRmllbGRdKSA9PiB7XG4gICAgICAgIGxldCBzcGVjID0gdmVnYUJhc2VDb25mO1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuUkFEQVI6XG4gICAgICAgICAgICBzcGVjID0gdmVnYVJhZGFyQ29uZjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuQ0lSQ0xFX1BBQ0s6XG4gICAgICAgICAgICBzcGVjID0gdmVnYUNpcmNsZVBhY2tDb25mO1xuICAgICAgICB9XG5cbiAgICAgICAgc3BlYy50aXRsZSA9IG9wdGlvbnMuY3VzdG9tVGl0bGUgPz8gb3B0aW9ucy50aXRsZTtcblxuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMudHlwZSkge1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuUkFEQVI6XG4gICAgICAgICAgICBzcGVjLnNpZ25hbHNbMF0udXBkYXRlID0gc2l6ZS53aWR0aCA+IHNpemUuaGVpZ2h0ID8gJ2hlaWdodCAvIDInIDogJ3dpZHRoIC8gMic7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMF0udmFsdWVzID0gV2lkZ2V0Q2hhcnRDb21wb25lbnQuYnVpbGREYXRhVmVnYVJhZGFyKGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgc3BlYy5zY2FsZXNbMl0ucmFuZ2Uuc2NoZW1lID0gb3B0aW9ucy5zZXJpZXM/LnNjaGVtZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTWFya1R5cGUuQ0lSQ0xFX1BBQ0s6XG4gICAgICAgICAgICBzcGVjLmRhdGFbMF0udmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMV0udHJhbnNmb3JtWzBdLmtleSA9ICdhdHRyaWJ1dGVzLicgKyBvcHRpb25zLnBhY2tpbmc/LmlkICsgJy52YWx1ZSc7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMV0udHJhbnNmb3JtWzBdLnBhcmVudEtleSA9ICdhdHRyaWJ1dGVzLicgKyBvcHRpb25zLnBhY2tpbmc/LnBhcmVudElkICsgJy52YWx1ZSc7XG4gICAgICAgICAgICBzcGVjLmRhdGFbMV0udHJhbnNmb3JtWzFdLmZpZWxkID0gJ2F0dHJpYnV0ZXMuJyArIG9wdGlvbnMucGFja2luZz8ucGFja0ZpZWxkICsgJy52YWx1ZSc7XG4gICAgICAgICAgICBzcGVjLm1hcmtzWzBdLmVuY29kZS5lbnRlci50b29sdGlwLnNpZ25hbCA9IGBkYXR1bS5hdHRyaWJ1dGVzLiR7XG4gICAgICAgICAgICAgIG9wdGlvbnMucGFja2luZz8udG9vbHRpcCA/PyBvcHRpb25zLnBhY2tpbmc/LmlkXG4gICAgICAgICAgICB9LnZhbHVlICsgJyA6ICcgKyBkYXR1bS5hdHRyaWJ1dGVzLiR7b3B0aW9ucy5wYWNraW5nPy5wYWNrRmllbGR9LnZhbHVlYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzcGVjLmRhdGEgPSB7IHZhbHVlczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkgfTtcbiAgICAgICAgICAgIHNwZWMubGF5ZXIgPSBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBvcHRpb25zLnR5cGUsXG4gICAgICAgICAgICAgICAgICBwb2ludDpcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID09PSBNYXJrVHlwZS5QT0lOVCB8fFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLldJVEhfTElORVNfQU5EX1BPSU5UUyB8fFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLldJVEhfUE9JTlRTLFxuICAgICAgICAgICAgICAgICAgbGluZTogb3B0aW9ucy50eXBlID09PSBNYXJrVHlwZS5MSU5FIHx8IG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuV0lUSF9MSU5FU19BTkRfUE9JTlRTLFxuICAgICAgICAgICAgICAgICAgaW5uZXJSYWRpdXM6IG9wdGlvbnMuaW5uZXJSYWRpdXMsXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBvcHRpb25zLnRvb2x0aXAgPz8gdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFdpZGdldENoYXJ0Q29tcG9uZW50LmNhbGN1bGF0ZUVuY29kaW5nKG9wdGlvbnMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5maWxsKSB7XG4gICAgICAgICAgICAgIHNwZWMubGF5ZXJbMF0ubWFyay5maWxsID0gb3B0aW9ucy5maWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuQVJFQVNUQUNLRUQgfHwgb3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ISVNUT1NUQUNLRUQpIHtcbiAgICAgICAgICAgICAgc3BlYy5kYXRhLnRyYW5zZm9ybSA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhY2snLFxuICAgICAgICAgICAgICAgICAgZ3JvdXBieTogW29wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubmFtZV0sXG4gICAgICAgICAgICAgICAgICBzb3J0OiB7IGZpZWxkOiBvcHRpb25zLnNlcmllcz8uZ3JvdXBCeSB9LFxuICAgICAgICAgICAgICAgICAgZmllbGQ6IG9wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMV0ubmFtZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZWQgPSBtZXJnZURlZXAoc3BlYywgeyBjb25maWc6IGZvbnRDb25maWcoJ1VidW50dSwgc2Fucy1zZXJpZicpIH0gYXMgYW55LCBvcHRpb25zLnNwZWNUb01lcmdlKTtcblxuICAgICAgICBpZiAoISFvcHRpb25zLnNwZWNUb01lcmdlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoc3BlYykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaXNDaGFydFZhbGlkJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG9wdGlvbnMpID0+XG4gICAgICAgICAgISFvcHRpb25zLnR5cGUgJiZcbiAgICAgICAgICAvLyBXZSBtdXN0IGhhdmUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHZhcmlhYmxlcyB0byBkcmF3IHRoZSBncmFwaFxuICAgICAgICAgIChvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzLmZpbHRlcigodikgPT4gISF2LnR5cGUpLmxlbmd0aCA+IDEgfHxcbiAgICAgICAgICAgIChvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzLmZpbHRlcigodikgPT4gISF2LnR5cGUpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgKG9wdGlvbnMuYWdncmVnYXRpb24gPT09IEFnZ3JlZ2F0aW9uLkNPVU5UIHx8XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uRElTVElOQ1QgfHxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFnZ3JlZ2F0aW9uID09PSBBZ2dyZWdhdGlvbi5OT05FKSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy52ZWdhTGl0ZVNwZWMkLCB0aGlzLnRyaWdnZXIkXSkuc3Vic2NyaWJlKChbc3BlYywgX10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmVnYSkge1xuICAgICAgICAgIHRoaXMudmlldz8uZmluYWxpemUoKTtcbiAgICAgICAgICBlbWJlZCh0aGlzLnZlZ2EubmF0aXZlRWxlbWVudCwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzcGVjKSksIHtcbiAgICAgICAgICAgIGFjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgICAgcmVuZGVyZXI6ICdzdmcnLFxuICAgICAgICAgICAgZm9ybWF0TG9jYWxlOlxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LmxvY2FsZSA9PT0gJ2ZyJ1xuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsOiAnLCcsXG4gICAgICAgICAgICAgICAgICAgIHRob3VzYW5kczogJ1xcdTAwYTAnLFxuICAgICAgICAgICAgICAgICAgICBncm91cGluZzogWzNdLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogWycnLCAnXFx1MDBhMOKCrCddLFxuICAgICAgICAgICAgICAgICAgICBwZXJjZW50OiAnXFx1MjAyZiUnXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWw6ICcuJyxcbiAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmRzOiAnLCcsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nOiBbM10sXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiBbJyQnLCAnJ11cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB2aWV3Q2xhc3M6IFZlZ2FFcnJvckhhbmRsZXJcbiAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+ICh0aGlzLnZpZXcgPSByZXN1bHQudmlldykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyJC5uZXh0KCksIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnRyaWdnZXIkLm5leHQoKTtcbiAgfVxuXG4gIHN0YXRpYyBjYWxjdWxhdGVFbmNvZGluZyhvcHRpb25zOiBDaGFydFdpZGdldE9wdGlvbnMpIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSBvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzID8/IFt7fSwge31dO1xuICAgIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgICBjYXNlIE1hcmtUeXBlLkFSQzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aGV0YToge1xuICAgICAgICAgICAgZmllbGQ6IGBhdHRyaWJ1dGVzLiR7dmFyaWFibGVzWzFdLm5hbWV9LnZhbHVlYCxcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpYWJsZXNbMV0ubGFiZWwsXG4gICAgICAgICAgICB0eXBlOiB2YXJpYWJsZXNbMV0udHlwZSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZTogb3B0aW9ucy5hZ2dyZWdhdGlvbiA/PyBBZ2dyZWdhdGlvbi5DT1VOVFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgIGZpZWxkOiBgYXR0cmlidXRlcy4ke3ZhcmlhYmxlc1swXS5uYW1lfS52YWx1ZWAsXG4gICAgICAgICAgICB0aXRsZTogdmFyaWFibGVzWzBdLmxhYmVsLFxuICAgICAgICAgICAgdHlwZTogdmFyaWFibGVzWzBdLnR5cGUsXG4gICAgICAgICAgICBsZWdlbmQ6IG9wdGlvbnMubGVnZW5kID8/IHRydWUsXG4gICAgICAgICAgICBzY2FsZTogb3B0aW9ucy5zY2FsZSA/PyB7IHNjaGVtZTogb3B0aW9ucy5zZXJpZXM/LnNjaGVtZSA/PyAnY2F0ZWdvcnkyMGMnIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICBjYXNlIE1hcmtUeXBlLlJBREFSOlxuICAgICAgICByZXR1cm4ge307XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zdCBlbmNvZGluZyA9IHtcbiAgICAgICAgICB4OiB7XG4gICAgICAgICAgICBmaWVsZDogYGF0dHJpYnV0ZXMuJHt2YXJpYWJsZXNbMF0ubmFtZX0udmFsdWVgLFxuICAgICAgICAgICAgdGl0bGU6IHZhcmlhYmxlc1swXS5sYWJlbCxcbiAgICAgICAgICAgIHR5cGU6IHZhcmlhYmxlc1swXS50eXBlLFxuICAgICAgICAgICAgdGltZVVuaXQ6IHZhcmlhYmxlc1swXS50eXBlID09PSBWZWdhVHlwZS5URU1QT1JBTCA/IHZhcmlhYmxlc1swXS50aW1lVW5pdCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJpbjogb3B0aW9ucy5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ISVNUT0dSQU0sXG4gICAgICAgICAgICBheGlzOiB2YXJpYWJsZXNbMF0uYXhpc09wdGlvbnMsXG4gICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAvLyBGb3JjZSBhIGZhbHNlIHZhbHVlIGhlcmUgc28gdGhhdCB2ZWdhIHVuZGVyc3RhbmQgcHJvcGVybHlcbiAgICAgICAgICAgICAgemVybzogISF2YXJpYWJsZXNbMF0ub3JpZ2luMCxcbiAgICAgICAgICAgICAgdHlwZTogV2lkZ2V0Q2hhcnRDb21wb25lbnQuaXNUaW1lVW5pdFVUQyh2YXJpYWJsZXNbMF0pID8gJ3V0YycgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgIGZpZWxkOiBgYXR0cmlidXRlcy4ke3ZhcmlhYmxlc1sxXS5uYW1lfS52YWx1ZWAsXG4gICAgICAgICAgICB0aXRsZTogdmFyaWFibGVzWzFdLmxhYmVsLFxuICAgICAgICAgICAgdHlwZTogb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uQ09VTlQgPyBWZWdhVHlwZS5RVUFOVElUQVRJVkUgOiB2YXJpYWJsZXNbMV0udHlwZSxcbiAgICAgICAgICAgIHRpbWVVbml0OiB2YXJpYWJsZXNbMV0udHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUwgPyB2YXJpYWJsZXNbMV0udGltZVVuaXQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBheGlzOiB2YXJpYWJsZXNbMV0uYXhpc09wdGlvbnMsXG4gICAgICAgICAgICBhZ2dyZWdhdGU6IG9wdGlvbnMuYWdncmVnYXRpb24gIT09IEFnZ3JlZ2F0aW9uLk5PTkUgPyBvcHRpb25zLmFnZ3JlZ2F0aW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgemVybzogdmFyaWFibGVzWzFdLm9yaWdpbjAsXG4gICAgICAgICAgICAgIHR5cGU6IFdpZGdldENoYXJ0Q29tcG9uZW50LmlzVGltZVVuaXRVVEModmFyaWFibGVzWzFdKSA/ICd1dGMnIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucy5zZXJpZXMpIHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgZW5jb2RpbmcuY29sb3IgPSB7XG4gICAgICAgICAgICB0aXRsZTogYCR7b3B0aW9ucy5zZXJpZXMuZ3JvdXBCeX1gLFxuICAgICAgICAgICAgZmllbGQ6IGBhdHRyaWJ1dGVzLiR7b3B0aW9ucy5zZXJpZXMuZ3JvdXBCeX0udmFsdWVgLFxuICAgICAgICAgICAgbGVnZW5kOiBvcHRpb25zLmxlZ2VuZFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKG9wdGlvbnMuc2VyaWVzLnNjaGVtZSkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgZW5jb2RpbmcuY29sb3Iuc2NhbGUgPSB7IHNjaGVtZTogb3B0aW9ucy5zZXJpZXMuc2NoZW1lIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbmNvZGluZztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYnVpbGREYXRhVmVnYVJhZGFyKGl0ZW1zOiBJdGVtW10sIG9wdGlvbnM6IENoYXJ0V2lkZ2V0T3B0aW9ucyk6IFJhZGFyVmFsdWVbXSB7XG4gICAgaWYgKG9wdGlvbnMucmFkYXI/LmNvbXBhcmUgPT09ICdpdGVtJykge1xuICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgICAgIC5tYXAoKGl0ZW0sIGlkeCkgPT5cbiAgICAgICAgICAob3B0aW9ucy5yYWRhcj8ucHJvcHMgPz8gW10pLm1hcCgocHJvcDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWVNdWx0aXBsZSA9IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShpdGVtLCBwcm9wKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IEFycmF5LmlzQXJyYXkoaXRlbVZhbHVlTXVsdGlwbGUpID8gaXRlbVZhbHVlTXVsdGlwbGVbMF0gOiBpdGVtVmFsdWVNdWx0aXBsZTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBpZHgsXG4gICAgICAgICAgICAgIGtleTogcHJvcCxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1WYWx1ZT8udmFsdWVcbiAgICAgICAgICAgIH0gYXMgUmFkYXJWYWx1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5yZWR1Y2UoKGE6IFJhZGFyVmFsdWVbXSwgYjogUmFkYXJWYWx1ZVtdKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmlsdGVyKChhOiBSYWRhclZhbHVlKSA9PiBhLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgYS52YWx1ZSAhPT0gbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtc1xuICAgICAgICAubWFwKFxuICAgICAgICAgIChpdGVtLCBpZHgpID0+XG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICBjYXRlZ29yeTogKGl0ZW0uYXR0cmlidXRlc1tvcHRpb25zLnJhZGFyPy5jYXRlZ29yeVByb3AgPz8gJyddIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKT8udmFsdWUgPz8gJ29iamVjdCcsXG4gICAgICAgICAgICAgIGtleTogKGl0ZW0uYXR0cmlidXRlc1tvcHRpb25zLnJhZGFyPy5rZXlQcm9wID8/ICcnXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSk/LnZhbHVlLFxuICAgICAgICAgICAgICB2YWx1ZTogKGl0ZW0uYXR0cmlidXRlc1tvcHRpb25zLnJhZGFyPy52YWx1ZVByb3AgPz8gJyddIGFzIEF0dHJpYnV0ZVNpbXBsZVZhbHVlKT8udmFsdWVcbiAgICAgICAgICAgIH0gYXMgUmFkYXJWYWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAuZmlsdGVyKChhOiBSYWRhclZhbHVlKSA9PiBhLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgYS52YWx1ZSAhPT0gbnVsbCAmJiAhIWEua2V5KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWF0Y2hpbmdJdGVtcyhpdGVtczogSXRlbVtdLCBvcHRpb25zOiBDaGFydFdpZGdldE9wdGlvbnMsIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdKSB7XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgc3dpdGNoIChvcHRpb25zLnR5cGUpIHtcbiAgICAgICAgY2FzZSBNYXJrVHlwZS5DSVJDTEVfUEFDSzpcbiAgICAgICAgICByZXR1cm4gISFvcHRpb25zLnBhY2tpbmc/LmlkICYmICEhb3B0aW9ucy5wYWNraW5nLnBhcmVudElkICYmICEhb3B0aW9ucy5wYWNraW5nLnBhY2tGaWVsZDtcbiAgICAgICAgY2FzZSBNYXJrVHlwZS5SQURBUjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKChvcHRpb25zLnJhZGFyPy5jb21wYXJlID09PSAnaXRlbScgJiYgKG9wdGlvbnMucmFkYXIucHJvcHM/Lmxlbmd0aCA/PyBbXSkgPiAyKSB8fFxuICAgICAgICAgICAgICAob3B0aW9ucy5yYWRhcj8uY29tcGFyZSAhPT0gJ2l0ZW0nICYmXG4gICAgICAgICAgICAgICAgISFvcHRpb25zLnJhZGFyPy5rZXlQcm9wICYmXG4gICAgICAgICAgICAgICAgISFvcHRpb25zLnJhZGFyLnZhbHVlUHJvcCAmJlxuICAgICAgICAgICAgICAgICEhb3B0aW9ucy5yYWRhci5jYXRlZ29yeVByb3ApKSAmJlxuICAgICAgICAgICAgV2lkZ2V0Q2hhcnRDb21wb25lbnQuYnVpbGREYXRhVmVnYVJhZGFyKGl0ZW1zLCBvcHRpb25zKS5sZW5ndGggPiAwXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzBdLm5hbWUpICYmXG4gICAgICAgICAgICAoaXRlbS5hdHRyaWJ1dGVzW29wdGlvbnMuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubmFtZV0gYXMgQXR0cmlidXRlU2ltcGxlVmFsdWUpLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICgoT2JqZWN0LmtleXMoaXRlbS5hdHRyaWJ1dGVzKS5pbmNsdWRlcyhvcHRpb25zLnNlbGVjdGVkVmFyaWFibGVzWzFdLm5hbWUpICYmXG4gICAgICAgICAgICAgIChpdGVtLmF0dHJpYnV0ZXNbb3B0aW9ucy5zZWxlY3RlZFZhcmlhYmxlc1sxXS5uYW1lXSBhcyBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSkudmFsdWUgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uRElTVElOQ1QgfHxcbiAgICAgICAgICAgICAgb3B0aW9ucy5hZ2dyZWdhdGlvbiA9PT0gQWdncmVnYXRpb24uQ09VTlQpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyB1bmlxdWVBdHRyaWJ1dGVzQnlOYW1lcyhhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSk6IEF0dHJpYnV0ZVtdIHtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoYXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSkpXS5tYXAoXG4gICAgICAoYXR0ck5hbWUpID0+IGF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSBhdHRyTmFtZSkgPz8gKHt9IGFzIEF0dHJpYnV0ZSlcbiAgICApO1xuICB9XG5cbiAgdGVtcGxhdGVUeXBlVHJhbnNsYXRpb25GbiA9IChpdGVtOiBhbnksIGFyZ3M6IGFueVtdKSA9PlxuICAgIGAke2FyZ3NbMF19JHtpdGVtID09PSBNYXJrU3ViVHlwZS5ERUZBVUxUID8gaXRlbSA6IGFyZ3NbMV0gKyBhcmdzWzJdICsgaXRlbX1gO1xuXG4gIGFkdmFuY2VkRWRpdDogc3RyaW5nID0gJ3t9JztcblxuICBjaGFuZ2VDaGFydFRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9wdGlvbnNDb3B5LmN1c3RvbVRpdGxlID0gdGl0bGU7XG4gIH1cblxuICBjaGFuZ2VUaW1lVW5pdCgkZXZlbnQ6IFRpbWVVbml0LCB2YXJpYWJsZTogVmFyaWFibGVEZWZpbml0aW9uKSB7XG4gICAgdmFyaWFibGUudGltZVVuaXQgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VBZ2dyZWdhdGlvbigkZXZlbnQ6IEFnZ3JlZ2F0aW9uKSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5hZ2dyZWdhdGlvbiA9ICRldmVudDtcbiAgICBpZiAoW0FnZ3JlZ2F0aW9uLkNPVU5ULCBBZ2dyZWdhdGlvbi5ESVNUSU5DVF0uaW5jbHVkZXMoJGV2ZW50ISkpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0uYXhpc09wdGlvbnMgPSB7IHRpY2tNaW5TdGVwOiAxIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzFdLmF4aXNPcHRpb25zO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJDYWxjdWxhdGVQb3NzaWJsZUF0dHJpYnV0ZXMkLm5leHQoKTtcbiAgfVxuXG4gIGNoYW5nZVByb3BlcnR5KGF0dHJOYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBhdHRyID0gdGhpcy52YXJpYWJsZUF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci50ZWNobmljYWxOYW1lID09PSBhdHRyTmFtZSk7XG4gICAgaWYgKCEhYXR0cikge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1tpbmRleF0ubmFtZSA9IGF0dHIubmFtZTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbaW5kZXhdLmxhYmVsID0gYXR0ci5uYW1lO1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzW2luZGV4XS50eXBlID0gdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKGZpZWxkLCBhdHRyLm5hbWUpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1tpbmRleF0uYXhpc09wdGlvbnMgPSB0aGlzLm1pblRpY2soZmllbGQpO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwgKyAnLCAnICsgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS5sYWJlbDtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJC5uZXh0KCk7XG4gIH1cblxuICBzdGF0aWMgaXNUaW1lVW5pdFVUQyh2YXJpYWJsZURlZjogVmFyaWFibGVEZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgbGV0IHV0Y1JlZ2V4ID0gbmV3IFJlZ0V4cCgvX3V0Y3x1dGNffF9VVEN8VVRDX3xfVXRjfFV0Y18vLCAnZycpO1xuICAgIHJldHVybiB1dGNSZWdleC50ZXN0KHZhcmlhYmxlRGVmPy5sYWJlbCk7XG4gIH1cblxuICBjaGFuZ2VMYWJlbChsYWJlbDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHVwZGF0ZVRpdGxlID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9PT1cbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMF0ubGFiZWwgKyAnLCAnICsgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS5sYWJlbFxuICAgICkge1xuICAgICAgdXBkYXRlVGl0bGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbaW5kZXhdLmxhYmVsID0gbGFiZWw7XG4gICAgaWYgKHVwZGF0ZVRpdGxlKSB7XG4gICAgICAvL3VwZGF0ZSB0aXRsZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQgbWFudWFsbHlcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPVxuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLmxhYmVsICsgJywgJyArIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0ubGFiZWw7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlT3JpZ2luQXRaZXJvKHZhcmlhYmxlOiBWYXJpYWJsZURlZmluaXRpb24sICRldmVudDogYm9vbGVhbikge1xuICAgIHZhcmlhYmxlLm9yaWdpbjAgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VUeXBlKHR5cGVPcHRpb25zSWQ6IHN0cmluZykge1xuICAgIHRoaXMub3B0aW9uc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc0NvcHkpKTtcbiAgICBjb25zdCBbdHlwZSwgc3ViVHlwZV0gPSB0eXBlT3B0aW9uc0lkLnNwbGl0KCctJyk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMub3B0aW9uc0NvcHkudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID0gc3ViVHlwZSA/PyBNYXJrU3ViVHlwZS5ERUZBVUxUO1xuXG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkudHlwZSA9PT0gTWFya1R5cGUuQ0lSQ0xFX1BBQ0spIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkucGFja2luZyA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5vcHRpb25zQ29weS5wYWNraW5nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zQ29weS50eXBlKSB7XG4gICAgICBjYXNlIE1hcmtUeXBlLkJBUjpcbiAgICAgIGNhc2UgTWFya1R5cGUuTElORTpcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1swXS50eXBlID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlbGVjdGVkVmFyaWFibGVzWzBdLnR5cGUgIT09IFZlZ2FUeXBlLlRFTVBPUkFMID8gVmVnYVR5cGUuTk9NSU5BTCA6IFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTWFya1R5cGUuUE9JTlQ6XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VsZWN0ZWRWYXJpYWJsZXNbMV0udHlwZSA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlc1sxXS50eXBlICE9PSBWZWdhVHlwZS5URU1QT1JBTCA/IFZlZ2FUeXBlLlFVQU5USVRBVElWRSA6IFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zdWJUeXBlID09PSBNYXJrU3ViVHlwZS5BUkVBU1RBQ0tFRCB8fCB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkhJU1RPU1RBQ0tFRCkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMgPSB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcyA/PyB7fTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0Q2hhcnQoKTtcblxuICAgIGlmIChzdWJUeXBlID09PSBNYXJrU3ViVHlwZS5ET05VVCkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5pbm5lclJhZGl1cyA9IHRoaXMub3B0aW9uc0NvcHkuaW5uZXJSYWRpdXMgPz8gNTA7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRDaGFydCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlcz8ubGVuZ3RoID4gMikge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZWxlY3RlZFZhcmlhYmxlcy5wb3AoKTtcbiAgICB9XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdHJhbnNsYXRlVG9WZWdhVHlwZSh0eXBlOiBGaWVsZFR5cGUsIG5hbWU6IHN0cmluZyk6IFZlZ2FUeXBlIHtcbiAgICBsZXQgaWRSZWdleCA9IG5ldyBSZWdFeHAoL19pZHxpZF98X0lEfElEX3xfSWR8SWRfLywgJ2cnKTtcbiAgICBpZiAoaWRSZWdleC50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gVmVnYVR5cGUuT1JESU5BTDtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5ERUNJTUFMOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5URUdFUjpcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxPTkc6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5RVUFOVElUQVRJVkU7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlNUQU5UOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuVEVNUE9SQUw7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5LRVlXT1JEOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuTk9NSU5BTDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5OT01JTkFMO1xuICAgIH1cbiAgfVxuXG4gIG1pblRpY2sodHlwZTogRmllbGRUeXBlKTogeyB0aWNrTWluU3RlcDogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5URUdFUjpcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxPTkc6XG4gICAgICAgIHJldHVybiB7IHRpY2tNaW5TdGVwOiAxIH07XG4gICAgICBjYXNlIEZpZWxkVHlwZS5ERUNJTUFMOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5TVEFOVDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLktFWVdPUkQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5TVFJJTkc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHRyaWdnZXIoKSB7XG4gICAgdGhpcy50cmlnZ2VyQ2FsY3VsYXRlUG9zc2libGVBdHRyaWJ1dGVzJC5uZXh0KCk7XG4gIH1cblxuICBwcm9wb3NlVGl0bGUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zQ29weS50eXBlID09PSBNYXJrVHlwZS5SQURBUikge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zQ29weS5yYWRhcj8uY29tcGFyZSA9PT0gJ2l0ZW0nKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weS50aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci50aXRsZUl0ZW0nLCB7XG4gICAgICAgICAgICBwcm9wczogKHRoaXMub3B0aW9uc0NvcHkucmFkYXIucHJvcHMgfHwgW10pLmpvaW4oJywgJylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zQ29weS5yYWRhcj8uY29tcGFyZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQucmFkYXIudGl0bGVMaXN0Jywge1xuICAgICAgICAgICAga2V5OiB0aGlzLm9wdGlvbnNDb3B5LnJhZGFyLmtleVByb3AgPz8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0LnJhZGFyLmRlZmluZUtleScpLFxuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkucmFkYXIudmFsdWVQcm9wID8/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci5kZWZpbmVWYWx1ZScpLFxuICAgICAgICAgICAgY2F0ZWdvcnk6XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkucmFkYXIuY2F0ZWdvcnlQcm9wID8/XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5yYWRhci5kZWZpbmVDYXRlZ29yeScpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LnR5cGUgPT09IE1hcmtUeXBlLkNJUkNMRV9QQUNLKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkudGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLnRpdGxlJywge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLm9wdGlvbnNDb3B5LnBhY2tpbmc/LnBhY2tGaWVsZCA/PyAnJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgY2hhbmdlSW5uZXJSYWRpdXMoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5vcHRpb25zQ29weS5pbm5lclJhZGl1cyA9IHBhcnNlSW50KCRldmVudCwgMTApO1xuICB9XG5cbiAgb3BlblNldHRpbmdzKCkge1xuICAgICh0aGlzLm9wZW4kIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHRvZ2dsZVNlcmllcygkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc2VyaWVzID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTZXJpZXMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkuc2VyaWVzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb3B5LnNlcmllcy5ncm91cEJ5ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlU2VyaWVzU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LnNlcmllcykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5zZXJpZXMuc2NoZW1lID0gJGV2ZW50O1xuICB9XG5cbiAgdG9nZ2xlU2VyaWVzTGVnZW5kKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5sZWdlbmQgPSAkZXZlbnQ7XG4gIH1cblxuICB0b2dnbGVUb29sdGlwKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS50b29sdGlwID0gJGV2ZW50O1xuICB9XG5cbiAgYXhlTGFiZWwoaTogbnVtYmVyLCBvcHRpb25zQ29weTogQ2hhcnRXaWRnZXRPcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5BUkMpIHtcbiAgICAgIHJldHVybiBpID09PSAwID8gJ0Bwcnkud2lkZ2V0LmNoYXJ0LmVuY29kaW5nLmdyb3VwJyA6ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy52YWx1ZXMnO1xuICAgIH1cbiAgICByZXR1cm4gaSA9PT0gMCA/ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy5ob3Jpem9udGFsJyA6ICdAcHJ5LndpZGdldC5jaGFydC5lbmNvZGluZy52ZXJ0aWNhbCc7XG4gIH1cblxuICBoYXNOb1R5cGUob3B0aW9uczogQ2hhcnRXaWRnZXRPcHRpb25zKSB7XG4gICAgcmV0dXJuICFvcHRpb25zIHx8ICFvcHRpb25zLnR5cGUgfHwgb3B0aW9ucy50eXBlLmluY2x1ZGVzKCd1bmRlZmluZWQnKSB8fCBvcHRpb25zLnR5cGUuaW5jbHVkZXMoJ251bGwnKTtcbiAgfVxuXG4gIHNjaGVtZSgpIHtcbiAgICByZXR1cm4gdmVnYS5zY2hlbWUodGhpcy5vcHRpb25zQ29weS5zZXJpZXM/LnNjaGVtZSA/PyAnJyk7XG4gIH1cblxuICB0b2dnbGVTcGVjVG9NZXJnZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2UgPSB7fTtcbiAgICAgIHRoaXMuYWR2YW5jZWRFZGl0ID0gJ3t9JztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2U7XG4gICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9ICd7fSc7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQWR2YW5jZWRFZGl0KCRldmVudDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSAkZXZlbnQ/LnRhcmdldD8udmFsdWUgPz8gJGV2ZW50O1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weS5zcGVjVG9NZXJnZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9IEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2UsIHVuZGVmaW5lZCwgNCk7XG4gICAgICAgIHRoaXMuaW52YWxpZEpzb24gPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBqc29uIHByb3ZpZGVkJyk7XG4gICAgICAgIHRoaXMuaW52YWxpZEpzb24gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2U7XG4gICAgICB0aGlzLmFkdmFuY2VkRWRpdCA9ICd7fSc7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2NhbnZhcycpWzBdLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJykpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1jaGFydC1jc3M+PC9wcnktd2lkZ2V0LWNoYXJ0LWNzcz5cbjxkaXYgY2xhc3M9XCJvLXdpZGdldCBvLXdpZGdldC0tY2hhcnRcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgI2hlYWRlclxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFtpc0Rpc2FibGVdPVwiKGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMCB8fCBoYXNOb1R5cGUob3B0aW9uc0NvcHkpXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQudGl0bGVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50KVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuY3VzdG9tVGl0bGUgPz8gb3B0aW9uc0NvcHkudGl0bGVcIlxuICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWx0ZXJEYXRhRm9yT3B0aW9uc0NvcHkkIHwgYXN5bmMpPy5sZW5ndGggPT09IDA7IGVsc2UgZGF0YVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhLWxhYmVsIGEtbGFiZWwtLWhlbHAgLWVycm9yXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnBhcmFtcy5ub1BhcmFtcycgfCBpMThuIH19PC9wPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0YT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuUkFEQVJcIj5cbiAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnBhcmFtcy5tdWx0aXBsZVBhcmFtcycgfCBpMThuIH19e3sgKGZpbHRlckRhdGFGb3JPcHRpb25zQ29weSQgfCBhc3luYyk/Lmxlbmd0aCB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnNDb3B5XCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfdHlwZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC50eXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUeXBlKCRldmVudClcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cInR5cGVPcHRpb25zXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnR5cGUgKyAnLScgKyBvcHRpb25zQ29weS5zdWJUeXBlXCJcbiAgICAgICAgICAgIGkxOG5QcmVmaXg9XCJAcHJ5LndpZGdldC5jaGFydC5tYXJrVHlwZS5cIlxuICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgaWQ9XCJjaGFydF90eXBlXCJcbiAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLlJBREFSICYmIG9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5DSVJDTEVfUEFDS1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHk/LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkRPTlVUXCI+XG4gICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuaW5uZXJSYWRpdXNcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlSW5uZXJSYWRpdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LmlubmVyUmFkaXVzXCJcbiAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgbWF4PVwiNTAwXCJcbiAgICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFyaWFibGVEZWYgb2Ygb3B0aW9uc0NvcHk/LnNlbGVjdGVkVmFyaWFibGVzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJpID09PSAxXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYWdncmVnYXRpb25zXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmVuY29kaW5nLmdyb3VwJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWdncmVnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaSA9PT0gMVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJhZ2dyZWdhdGlvbnNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hZ2dyZWdhdGlvblwiXG4gICAgICAgICAgICAgIGlkPVwiYWdncmVnYXRpb25zXCJcbiAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBwcnkud2lkZ2V0LmNoYXJ0LmFnZ3JlZ2F0aW9uLlwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwiaSAhPT0gMSB8fCBvcHRpb25zQ29weS5hZ2dyZWdhdGlvbiAhPT0gJ2NvdW50J1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImFnZ3JlZ2F0aW9uX3Byb3BlcnR5XCI+XG4gICAgICAgICAgICAgIHt7IGF4ZUxhYmVsKGksIG9wdGlvbnNDb3B5KSB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcm9wZXJ0eSgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cIihpICE9PSAxID8gdmFyaWFibGVBdHRyaWJ1dGVzJCA6IHBvc3NpYmxlU2Vjb25kYXJ5QXR0cmlidXRlcyQpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YXJpYWJsZURlZi5uYW1lXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cInRlY2huaWNhbE5hbWVcIlxuICAgICAgICAgICAgICBpZD1cImFnZ3JlZ2F0aW9uX3Byb3BlcnR5XCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQuZGF0YUxhYmVsXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxhYmVsKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwidmFyaWFibGVEZWYubGFiZWxcIlxuICAgICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInZhcmlhYmxlRGVmLnR5cGUgPT09ICd0ZW1wb3JhbCdcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X3RpbWVVbml0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRpbWVVbml0JyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVGltZVVuaXQoJGV2ZW50LCB2YXJpYWJsZURlZilcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwidGltZVVuaXRzXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwidmFyaWFibGVEZWYudGltZVVuaXRcIlxuICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQuY2hhcnQudGltZVVuaXRMaXN0LlwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfdGltZVVuaXRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2YXJpYWJsZURlZi50eXBlID09PSAncXVhbnRpdGF0aXZlJyAmJiBvcHRpb25zQ29weT8udHlwZSAhPT0gJ2FyYydcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVPcmlnaW5BdFplcm8odmFyaWFibGVEZWYsICRldmVudClcIiBbbmdNb2RlbF09XCJ2YXJpYWJsZURlZi5vcmlnaW4wXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmlnaW4nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNlcmllcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5zZXJpZXNcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5BUkMgJiYgb3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLlJBREFSXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkuc3ViVHlwZSA9PT0gTWFya1N1YlR5cGUuQVJFQVNUQUNLRUQgfHxcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5LnN1YlR5cGUgPT09IE1hcmtTdWJUeXBlLkhJU1RPU1RBQ0tFRFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllcycgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgIT09IE1hcmtUeXBlLkFSQyAmJiBvcHRpb25zQ29weT8udHlwZSAhPT0gTWFya1R5cGUuUkFEQVIgJiYgISFvcHRpb25zQ29weS5zZXJpZXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNBdHRyXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc0F0dHInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcy5ncm91cEJ5IVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzQXR0clwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKG9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5BUkMgfHwgb3B0aW9uc0NvcHk/LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSIHx8ICEhb3B0aW9uc0NvcHkuc2VyaWVzKSAmJlxuICAgICAgICAgICAgICBzY2hlbWVzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNTY2hlbWVcIiBbdGl0bGVdPVwiJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc1NjaGVtZUFsdCcgfCBpMThuXCI+e3tcbiAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnNlcmllc1NjaGVtZScgfCBpMThuXG4gICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXNTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lIVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJzY2hlbWVzXCJcbiAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zZXJpZXNTY2hlbWVcIlxuICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQHByeS53aWRnZXQuY2hhcnQuc2NoZW1lLlwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwiaWRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldC0tY2hhcnQtY29sb3ItdGh1bWJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNjaGVtZUNvbG9yIG9mIHNjaGVtZSgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJvLXdpZGdldC0tY2hhcnQtY29sb3ItdGh1bWItaXRlbVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJzY2hlbWVDb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNjaGVtZUNvbG9yXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU2VyaWVzTGVnZW5kKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmxlZ2VuZCFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlICE9PSBNYXJrVHlwZS5SQURBUiB8fCAhIW9wdGlvbnNDb3B5LnNlcmllc1wiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuc2VyaWVzTGVnZW5kJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVUb29sdGlwKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LnRvb2x0aXAhXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC50b29sdGlwJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHk/LnR5cGUgPT09IE1hcmtUeXBlLlJBREFSICYmIG9wdGlvbnNDb3B5LnJhZGFyICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLmNvbXBhcmVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiY29tcGFyaXNvbnNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5yYWRhci5jb21wYXJlID09PSAnaXRlbSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLnByb3BzXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwibnVtZXJpY1Byb3BlcnRpZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2xvc2VPblNlbGVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5yYWRhci5jb21wYXJlID09PSAndmFsdWUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjb21wYXJpc29uX2tleVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jb21wYXJpc29uLmtleScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnJhZGFyLmtleVByb3BcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJ0ZXh0UHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJjb21wYXJpc29uX2tleVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY29tcGFyaXNvbl92YWx1ZXNcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY29tcGFyaXNvbi52YWx1ZXMnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5yYWRhci52YWx1ZVByb3BcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJudW1lcmljUHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJjb21wYXJpc29uX3ZhbHVlc1wiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY29tcGFyaXNvbl9jYXRlZ29yeVwiPnt7XG4gICAgICAgICAgICAgICAgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbXBhcmlzb24uY2F0ZWdvcnknIHwgaTE4blxuICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5yYWRhci5jYXRlZ29yeVByb3BcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJ0ZXh0UHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJjb21wYXJpc29uX2NhdGVnb3J5XCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzY2hlbWVzXCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWxhYmVsXCJcbiAgICAgICAgICAgICAgZm9yPVwiY2hhcnRfc2VyaWVzU2NoZW1lX3JhZGFyXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidAcHJ5LndpZGdldC5jaGFydC5zZXJpZXNTY2hlbWVBbHQnIHwgaTE4blwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuc2VyaWVzU2NoZW1lJyB8IGkxOG4gfX08L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZXJpZXNTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNlcmllcz8uc2NoZW1lIVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJzY2hlbWVzXCJcbiAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zZXJpZXNTY2hlbWVfcmFkYXJcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5Py50eXBlID09PSBNYXJrVHlwZS5DSVJDTEVfUEFDSyAmJiBvcHRpb25zQ29weS5wYWNraW5nICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9jaXJjbGVfaWRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2lyY2xlLmlkJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucGFja2luZy5pZFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX2lkXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfY2lyY2xlX3BpZFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jaXJjbGUucGlkJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidHJpZ2dlcigpOyBwcm9wb3NlVGl0bGUoKVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc0NvcHkucGFja2luZy5wYXJlbnRJZFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX3BpZFwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImNoYXJ0X2NpcmNsZV9maWVsZFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jaXJjbGUuZmllbGQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyKCk7IHByb3Bvc2VUaXRsZSgpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zQ29weS5wYWNraW5nLnBhY2tGaWVsZFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJudW1lcmljUHJvcGVydGllcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgaWQ9XCJjaGFydF9jaXJjbGVfZmllbGRcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9jaXJjbGVfdG9vbHRpcFwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5jaXJjbGUudG9vbHRpcCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRyaWdnZXIoKTsgcHJvcG9zZVRpdGxlKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnNDb3B5LnBhY2tpbmcudG9vbHRpcFwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJ2YXJpYWJsZUF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfY2lyY2xlX3Rvb2x0aXBcIlxuICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNwZWNUb01lcmdlKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LnNwZWNUb01lcmdlXCJcbiAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm1vcmVPcHRpb25zJyB8IGkxOG4gfX1cbiAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuc3BlY1RvTWVyZ2VcIj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImFkdmFuY2VkRWRpdFwiXG4gICAgICAgICAgICAoZm9jdXNvdXQpPVwidXBkYXRlQWR2YW5jZWRFZGl0KCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fYXJlYVwiXG4gICAgICAgICAgICBbY2xhc3MuLWludmFsaWRdPVwiaW52YWxpZEpzb25cIlxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDaGFydFZhbGlkJCB8IGFzeW5jXCI+XG4gICAgPGRpdlxuICAgICAgI3ZlZ2FcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICgod2lkZ2V0U2l6ZSQgfCBhc3luYyk/LmhlaWdodCA/PyAwKSAtICgoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPyAxIDogMCkgKiBXSURHRVRfSEVBREVSX0hFSUdIVFxuICAgICAgXCJcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCIod2lkZ2V0U2l6ZSQgfCBhc3luYyk/LndpZHRoXCJcbiAgICA+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKGlzQ2hhcnRWYWxpZCQgfCBhc3luYylcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2Nob29zZS1wYXJhbWV0ZXJzXCI+XG4gICAgICA8cCBjbGFzcz1cImEtcFwiPlxuICAgICAgICB7eyAnQHByeS53aWRnZXQuY2hhcnQuY2hvb3NlUGFyYW1ldGVycycgfCBpMThuIH19XG4gICAgICA8L3A+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblNldHRpbmdzKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCIgaWNvblN2Zz1cImNvbnRyb2xcIj48L3ByeS1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQuc2V0dGluZ3MudGl0bGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19