@colijnit/corecomponents_v12 12.0.21 → 12.0.24

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 (87) hide show
  1. package/bundles/colijnit-corecomponents_v12.umd.js +988 -158
  2. package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
  3. package/colijnit-corecomponents_v12-12.0.24.tgz +0 -0
  4. package/colijnit-corecomponents_v12.d.ts +15 -9
  5. package/colijnit-corecomponents_v12.metadata.json +1 -1
  6. package/esm2015/colijnit-corecomponents_v12.js +16 -10
  7. package/esm2015/lib/components/base/base-input.component.js +43 -10
  8. package/esm2015/lib/components/base/commit-buttons/commit-buttons.component.js +92 -0
  9. package/esm2015/lib/components/base/commit-buttons/commit-buttons.module.js +19 -0
  10. package/esm2015/lib/components/button/button.component.js +1 -1
  11. package/esm2015/lib/components/carousel-3d/carousel-3d.component.js +2 -6
  12. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.component.js +51 -0
  13. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.module.js +17 -0
  14. package/esm2015/lib/components/drop-down-list/drop-down-list.component.js +4 -1
  15. package/esm2015/lib/components/form/form.component.js +8 -3
  16. package/esm2015/lib/components/grid/base/base-grid.component.js +7 -3
  17. package/esm2015/lib/components/grid/base/base-inline-edit-grid.component.js +47 -3
  18. package/esm2015/lib/components/grid/base/base-selection-grid.component.js +12 -2
  19. package/esm2015/lib/components/grid/co-grid.component.js +35 -32
  20. package/esm2015/lib/components/grid/co-grid.module.js +4 -2
  21. package/esm2015/lib/components/grid-toolbar/grid-toolbar.component.js +41 -0
  22. package/esm2015/lib/components/grid-toolbar/grid-toolbar.module.js +23 -0
  23. package/esm2015/lib/components/input-checkbox/input-checkbox.component.js +4 -1
  24. package/esm2015/lib/components/input-checkbox-multi-select/input-checkbox-multi-select.component.js +4 -1
  25. package/esm2015/lib/components/input-combo-box/input-combo-box.component.js +5 -4
  26. package/esm2015/lib/components/input-date-picker/input-date-picker.component.js +4 -1
  27. package/esm2015/lib/components/input-listbox/input-listbox.component.js +4 -1
  28. package/esm2015/lib/components/input-number-picker/input-number-picker.component.js +22 -24
  29. package/esm2015/lib/components/input-radio-button/input-radio-button.component.js +4 -1
  30. package/esm2015/lib/components/input-text/input-text.component.js +11 -13
  31. package/esm2015/lib/components/input-text/input-text.module.js +4 -2
  32. package/esm2015/lib/components/input-textarea/input-textarea.component.js +4 -1
  33. package/esm2015/lib/components/multi-select-list/multi-select-list.component.js +4 -1
  34. package/esm2015/lib/components/simple-grid/base-simple-grid.component.js +86 -0
  35. package/esm2015/lib/components/simple-grid/simple-grid-cell.component.js +163 -0
  36. package/esm2015/lib/components/simple-grid/simple-grid-column.directive.js +43 -4
  37. package/esm2015/lib/components/simple-grid/simple-grid.component.js +257 -59
  38. package/esm2015/lib/components/simple-grid/simple-grid.module.js +11 -2
  39. package/esm2015/lib/core/constant/number-inputs-key-down-white-list.js +2 -1
  40. package/esm2015/public-api.js +3 -1
  41. package/fesm2015/colijnit-corecomponents_v12.js +1032 -205
  42. package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
  43. package/lib/components/base/base-input.component.d.ts +5 -2
  44. package/lib/components/base/commit-buttons/commit-buttons.component.d.ts +19 -0
  45. package/lib/components/base/commit-buttons/commit-buttons.module.d.ts +2 -0
  46. package/lib/components/base/commit-buttons/style/_layout.scss +127 -0
  47. package/lib/components/base/commit-buttons/style/_material-definition.scss +5 -0
  48. package/lib/components/base/commit-buttons/style/_theme.scss +34 -0
  49. package/lib/components/base/commit-buttons/style/material.scss +4 -0
  50. package/lib/components/co-dialog/style/_layout.scss +3 -0
  51. package/lib/components/co-dialog-wizard/co-dialog-wizard.component.d.ts +9 -0
  52. package/lib/components/co-dialog-wizard/co-dialog-wizard.module.d.ts +2 -0
  53. package/lib/components/co-dialog-wizard/style/_layout.scss +51 -0
  54. package/lib/components/co-dialog-wizard/style/_material-definition.scss +25 -0
  55. package/lib/components/co-dialog-wizard/style/_theme.scss +16 -0
  56. package/lib/components/co-dialog-wizard/style/material.scss +5 -0
  57. package/lib/components/collapsible/style/_layout.scss +1 -1
  58. package/lib/components/collapsible/style/_material-definition.scss +1 -0
  59. package/lib/components/form/form.component.d.ts +1 -0
  60. package/lib/components/grid/base/base-grid.component.d.ts +3 -0
  61. package/lib/components/grid/base/base-inline-edit-grid.component.d.ts +11 -2
  62. package/lib/components/grid/base/base-selection-grid.component.d.ts +4 -0
  63. package/lib/components/grid-toolbar/grid-toolbar.component.d.ts +13 -0
  64. package/lib/components/grid-toolbar/grid-toolbar.module.d.ts +2 -0
  65. package/lib/components/grid-toolbar/style/_layout.scss +10 -0
  66. package/lib/components/grid-toolbar/style/_material-definition.scss +0 -0
  67. package/lib/components/grid-toolbar/style/_theme.scss +5 -0
  68. package/lib/components/grid-toolbar/style/material.scss +5 -0
  69. package/lib/components/input-combo-box/input-combo-box.component.d.ts +0 -1
  70. package/lib/components/input-number-picker/input-number-picker.component.d.ts +1 -6
  71. package/lib/components/input-radio-button/style/_material-definition.scss +1 -1
  72. package/lib/components/input-text/style/_layout.scss +0 -32
  73. package/lib/components/input-text/style/_material-definition.scss +0 -3
  74. package/lib/components/input-text/style/_theme.scss +0 -16
  75. package/lib/components/input-text/style/material.scss +1 -0
  76. package/lib/components/simple-grid/base-simple-grid.component.d.ts +31 -0
  77. package/lib/components/simple-grid/simple-grid-cell.component.d.ts +28 -0
  78. package/lib/components/simple-grid/simple-grid-column.directive.d.ts +15 -2
  79. package/lib/components/simple-grid/simple-grid.component.d.ts +39 -22
  80. package/lib/components/simple-grid/style/_layout.scss +23 -0
  81. package/lib/components/simple-grid/style/_material-definition.scss +13 -4
  82. package/lib/components/simple-grid/style/_theme.scss +17 -0
  83. package/lib/components/simple-grid/style/material.scss +1 -0
  84. package/lib/style/_input.mixins.scss +1 -1
  85. package/lib/style/_variables.scss +5 -1
  86. package/package.json +2 -2
  87. package/public-api.d.ts +2 -0
@@ -4,13 +4,19 @@
4
4
  export * from './public-api';
5
5
  export { BaseInputComponent as ɵm } from './lib/components/base/base-input.component';
6
6
  export { BaseModule as ɵj } from './lib/components/base/base.module';
7
- export { BaseGridComponent as ɵq } from './lib/components/grid/base/base-grid.component';
8
- export { BaseInlineEditGridComponent as ɵo } from './lib/components/grid/base/base-inline-edit-grid.component';
9
- export { BaseSelectionGridComponent as ɵn } from './lib/components/grid/base/base-selection-grid.component';
10
- export { BaseToolbarGridComponent as ɵp } from './lib/components/grid/base/base-toolbar-grid.component';
11
- export { PopupShowerService as ɵv } from './lib/components/popup/service/popup-shower.service';
12
- export { ValidationErrorComponent as ɵu } from './lib/components/validation-error/validation-error.component';
13
- export { ValidationErrorModule as ɵt } from './lib/components/validation-error/validation-error.module';
7
+ export { CommitButtonsComponent as ɵy } from './lib/components/base/commit-buttons/commit-buttons.component';
8
+ export { CommitButtonsModule as ɵx } from './lib/components/base/commit-buttons/commit-buttons.module';
9
+ export { GridToolbarComponent as ɵo } from './lib/components/grid-toolbar/grid-toolbar.component';
10
+ export { GridToolbarModule as ɵn } from './lib/components/grid-toolbar/grid-toolbar.module';
11
+ export { BaseGridComponent as ɵs } from './lib/components/grid/base/base-grid.component';
12
+ export { BaseInlineEditGridComponent as ɵq } from './lib/components/grid/base/base-inline-edit-grid.component';
13
+ export { BaseSelectionGridComponent as ɵp } from './lib/components/grid/base/base-selection-grid.component';
14
+ export { BaseToolbarGridComponent as ɵr } from './lib/components/grid/base/base-toolbar-grid.component';
15
+ export { PopupShowerService as ɵz } from './lib/components/popup/service/popup-shower.service';
16
+ export { BaseSimpleGridComponent as ɵba } from './lib/components/simple-grid/base-simple-grid.component';
17
+ export { SimpleGridCellComponent as ɵbb } from './lib/components/simple-grid/simple-grid-cell.component';
18
+ export { ValidationErrorComponent as ɵw } from './lib/components/validation-error/validation-error.component';
19
+ export { ValidationErrorModule as ɵv } from './lib/components/validation-error/validation-error.module';
14
20
  export { InputBoolean as ɵi } from './lib/core/decorator/input-boolean.decorator';
15
21
  export { FormInputUserModelChangeListenerService as ɵk } from './lib/core/service/form-input-user-change-listener.service';
16
22
  export { NgZoneWrapperService as ɵl } from './lib/core/service/ng-zone-wrapper.service';
@@ -21,6 +27,6 @@ export { CoScrollableDirective as ɵf } from './lib/directives/ripple/scrollable
21
27
  export { CoViewportRulerService as ɵd } from './lib/directives/ripple/viewport-ruler.service';
22
28
  export { StopClickDirective as ɵh } from './lib/directives/stopclick/stop-click.directive';
23
29
  export { StopClickModule as ɵg } from './lib/directives/stopclick/stop-click.module';
24
- export { AppendPipe as ɵs } from './lib/pipes/append.pipe';
25
- export { AppendPipeModule as ɵr } from './lib/pipes/append.pipe.module';
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29saWpuaXQtY29yZWNvbXBvbmVudHNfdjEyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2NvbGlqbml0LWNvcmVjb21wb25lbnRzX3YxMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQUMsVUFBVSxJQUFJLEVBQUUsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxpQkFBaUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN2RixPQUFPLEVBQUMsMkJBQTJCLElBQUksRUFBRSxFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDN0csT0FBTyxFQUFDLDBCQUEwQixJQUFJLEVBQUUsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQzFHLE9BQU8sRUFBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUN0RyxPQUFPLEVBQUMsa0JBQWtCLElBQUksRUFBRSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDN0YsT0FBTyxFQUFDLHdCQUF3QixJQUFJLEVBQUUsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBQzVHLE9BQU8sRUFBQyxxQkFBcUIsSUFBSSxFQUFFLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUN0RyxPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyx1Q0FBdUMsSUFBSSxFQUFFLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUN6SCxPQUFPLEVBQUMsb0JBQW9CLElBQUksRUFBRSxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFDLGlCQUFpQixJQUFJLEVBQUUsRUFBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoSCxPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyx5QkFBeUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUNsRyxPQUFPLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQzVGLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUN6RixPQUFPLEVBQUMsZUFBZSxJQUFJLEVBQUUsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ25GLE9BQU8sRUFBQyxVQUFVLElBQUksRUFBRSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge0Jhc2VJbnB1dENvbXBvbmVudCBhcyDJtW19IGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS9iYXNlLWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQge0Jhc2VNb2R1bGUgYXMgybVqfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Jhc2UvYmFzZS5tb2R1bGUnO1xuZXhwb3J0IHtCYXNlR3JpZENvbXBvbmVudCBhcyDJtXF9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvZ3JpZC9iYXNlL2Jhc2UtZ3JpZC5jb21wb25lbnQnO1xuZXhwb3J0IHtCYXNlSW5saW5lRWRpdEdyaWRDb21wb25lbnQgYXMgybVvfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2dyaWQvYmFzZS9iYXNlLWlubGluZS1lZGl0LWdyaWQuY29tcG9uZW50JztcbmV4cG9ydCB7QmFzZVNlbGVjdGlvbkdyaWRDb21wb25lbnQgYXMgybVufSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2dyaWQvYmFzZS9iYXNlLXNlbGVjdGlvbi1ncmlkLmNvbXBvbmVudCc7XG5leHBvcnQge0Jhc2VUb29sYmFyR3JpZENvbXBvbmVudCBhcyDJtXB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvZ3JpZC9iYXNlL2Jhc2UtdG9vbGJhci1ncmlkLmNvbXBvbmVudCc7XG5leHBvcnQge1BvcHVwU2hvd2VyU2VydmljZSBhcyDJtXZ9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvcG9wdXAvc2VydmljZS9wb3B1cC1zaG93ZXIuc2VydmljZSc7XG5leHBvcnQge1ZhbGlkYXRpb25FcnJvckNvbXBvbmVudCBhcyDJtXV9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmFsaWRhdGlvbi1lcnJvci92YWxpZGF0aW9uLWVycm9yLmNvbXBvbmVudCc7XG5leHBvcnQge1ZhbGlkYXRpb25FcnJvck1vZHVsZSBhcyDJtXR9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmFsaWRhdGlvbi1lcnJvci92YWxpZGF0aW9uLWVycm9yLm1vZHVsZSc7XG5leHBvcnQge0lucHV0Qm9vbGVhbiBhcyDJtWl9IGZyb20gJy4vbGliL2NvcmUvZGVjb3JhdG9yL2lucHV0LWJvb2xlYW4uZGVjb3JhdG9yJztcbmV4cG9ydCB7Rm9ybUlucHV0VXNlck1vZGVsQ2hhbmdlTGlzdGVuZXJTZXJ2aWNlIGFzIMm1a30gZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlL2Zvcm0taW5wdXQtdXNlci1jaGFuZ2UtbGlzdGVuZXIuc2VydmljZSc7XG5leHBvcnQge05nWm9uZVdyYXBwZXJTZXJ2aWNlIGFzIMm1bH0gZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlL25nLXpvbmUtd3JhcHBlci5zZXJ2aWNlJztcbmV4cG9ydCB7Q29SaXBwbGVEaXJlY3RpdmUgYXMgybVjLE1EX1JJUFBMRV9HTE9CQUxfT1BUSU9OUyBhcyDJtWJ9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuZXhwb3J0IHtSaXBwbGVNb2R1bGUgYXMgybVhfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3JpcHBsZS9yaXBwbGUubW9kdWxlJztcbmV4cG9ydCB7Q29TY3JvbGxEaXNwYXRjaGVyU2VydmljZSBhcyDJtWV9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcmlwcGxlL3Njcm9sbC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuZXhwb3J0IHtDb1Njcm9sbGFibGVEaXJlY3RpdmUgYXMgybVmfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3JpcHBsZS9zY3JvbGxhYmxlLmRpcmVjdGl2ZSc7XG5leHBvcnQge0NvVmlld3BvcnRSdWxlclNlcnZpY2UgYXMgybVkfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3JpcHBsZS92aWV3cG9ydC1ydWxlci5zZXJ2aWNlJztcbmV4cG9ydCB7U3RvcENsaWNrRGlyZWN0aXZlIGFzIMm1aH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9zdG9wY2xpY2svc3RvcC1jbGljay5kaXJlY3RpdmUnO1xuZXhwb3J0IHtTdG9wQ2xpY2tNb2R1bGUgYXMgybVnfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3N0b3BjbGljay9zdG9wLWNsaWNrLm1vZHVsZSc7XG5leHBvcnQge0FwcGVuZFBpcGUgYXMgybVzfSBmcm9tICcuL2xpYi9waXBlcy9hcHBlbmQucGlwZSc7XG5leHBvcnQge0FwcGVuZFBpcGVNb2R1bGUgYXMgybVyfSBmcm9tICcuL2xpYi9waXBlcy9hcHBlbmQucGlwZS5tb2R1bGUnOyJdfQ==
30
+ export { AppendPipe as ɵu } from './lib/pipes/append.pipe';
31
+ export { AppendPipeModule as ɵt } from './lib/pipes/append.pipe.module';
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29saWpuaXQtY29yZWNvbXBvbmVudHNfdjEyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2NvbGlqbml0LWNvcmVjb21wb25lbnRzX3YxMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQUMsVUFBVSxJQUFJLEVBQUUsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUMzRyxPQUFPLEVBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFDLG9CQUFvQixJQUFJLEVBQUUsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxpQkFBaUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUMxRixPQUFPLEVBQUMsaUJBQWlCLElBQUksRUFBRSxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDdkYsT0FBTyxFQUFDLDJCQUEyQixJQUFJLEVBQUUsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQzdHLE9BQU8sRUFBQywwQkFBMEIsSUFBSSxFQUFFLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUMxRyxPQUFPLEVBQUMsd0JBQXdCLElBQUksRUFBRSxFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFDdEcsT0FBTyxFQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyx1QkFBdUIsSUFBSSxHQUFHLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUN2RyxPQUFPLEVBQUMsdUJBQXVCLElBQUksR0FBRyxFQUFDLE1BQU0seURBQXlELENBQUM7QUFDdkcsT0FBTyxFQUFDLHdCQUF3QixJQUFJLEVBQUUsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBQzVHLE9BQU8sRUFBQyxxQkFBcUIsSUFBSSxFQUFFLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUN0RyxPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyx1Q0FBdUMsSUFBSSxFQUFFLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUN6SCxPQUFPLEVBQUMsb0JBQW9CLElBQUksRUFBRSxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFDLGlCQUFpQixJQUFJLEVBQUUsRUFBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoSCxPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyx5QkFBeUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUNsRyxPQUFPLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQzVGLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUN6RixPQUFPLEVBQUMsZUFBZSxJQUFJLEVBQUUsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ25GLE9BQU8sRUFBQyxVQUFVLElBQUksRUFBRSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge0Jhc2VJbnB1dENvbXBvbmVudCBhcyDJtW19IGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS9iYXNlLWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQge0Jhc2VNb2R1bGUgYXMgybVqfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Jhc2UvYmFzZS5tb2R1bGUnO1xuZXhwb3J0IHtDb21taXRCdXR0b25zQ29tcG9uZW50IGFzIMm1eX0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9iYXNlL2NvbW1pdC1idXR0b25zL2NvbW1pdC1idXR0b25zLmNvbXBvbmVudCc7XG5leHBvcnQge0NvbW1pdEJ1dHRvbnNNb2R1bGUgYXMgybV4fSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Jhc2UvY29tbWl0LWJ1dHRvbnMvY29tbWl0LWJ1dHRvbnMubW9kdWxlJztcbmV4cG9ydCB7R3JpZFRvb2xiYXJDb21wb25lbnQgYXMgybVvfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2dyaWQtdG9vbGJhci9ncmlkLXRvb2xiYXIuY29tcG9uZW50JztcbmV4cG9ydCB7R3JpZFRvb2xiYXJNb2R1bGUgYXMgybVufSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2dyaWQtdG9vbGJhci9ncmlkLXRvb2xiYXIubW9kdWxlJztcbmV4cG9ydCB7QmFzZUdyaWRDb21wb25lbnQgYXMgybVzfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2dyaWQvYmFzZS9iYXNlLWdyaWQuY29tcG9uZW50JztcbmV4cG9ydCB7QmFzZUlubGluZUVkaXRHcmlkQ29tcG9uZW50IGFzIMm1cX0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9ncmlkL2Jhc2UvYmFzZS1pbmxpbmUtZWRpdC1ncmlkLmNvbXBvbmVudCc7XG5leHBvcnQge0Jhc2VTZWxlY3Rpb25HcmlkQ29tcG9uZW50IGFzIMm1cH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9ncmlkL2Jhc2UvYmFzZS1zZWxlY3Rpb24tZ3JpZC5jb21wb25lbnQnO1xuZXhwb3J0IHtCYXNlVG9vbGJhckdyaWRDb21wb25lbnQgYXMgybVyfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2dyaWQvYmFzZS9iYXNlLXRvb2xiYXItZ3JpZC5jb21wb25lbnQnO1xuZXhwb3J0IHtQb3B1cFNob3dlclNlcnZpY2UgYXMgybV6fSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BvcHVwL3NlcnZpY2UvcG9wdXAtc2hvd2VyLnNlcnZpY2UnO1xuZXhwb3J0IHtCYXNlU2ltcGxlR3JpZENvbXBvbmVudCBhcyDJtWJhfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NpbXBsZS1ncmlkL2Jhc2Utc2ltcGxlLWdyaWQuY29tcG9uZW50JztcbmV4cG9ydCB7U2ltcGxlR3JpZENlbGxDb21wb25lbnQgYXMgybViYn0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zaW1wbGUtZ3JpZC9zaW1wbGUtZ3JpZC1jZWxsLmNvbXBvbmVudCc7XG5leHBvcnQge1ZhbGlkYXRpb25FcnJvckNvbXBvbmVudCBhcyDJtXd9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmFsaWRhdGlvbi1lcnJvci92YWxpZGF0aW9uLWVycm9yLmNvbXBvbmVudCc7XG5leHBvcnQge1ZhbGlkYXRpb25FcnJvck1vZHVsZSBhcyDJtXZ9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmFsaWRhdGlvbi1lcnJvci92YWxpZGF0aW9uLWVycm9yLm1vZHVsZSc7XG5leHBvcnQge0lucHV0Qm9vbGVhbiBhcyDJtWl9IGZyb20gJy4vbGliL2NvcmUvZGVjb3JhdG9yL2lucHV0LWJvb2xlYW4uZGVjb3JhdG9yJztcbmV4cG9ydCB7Rm9ybUlucHV0VXNlck1vZGVsQ2hhbmdlTGlzdGVuZXJTZXJ2aWNlIGFzIMm1a30gZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlL2Zvcm0taW5wdXQtdXNlci1jaGFuZ2UtbGlzdGVuZXIuc2VydmljZSc7XG5leHBvcnQge05nWm9uZVdyYXBwZXJTZXJ2aWNlIGFzIMm1bH0gZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlL25nLXpvbmUtd3JhcHBlci5zZXJ2aWNlJztcbmV4cG9ydCB7Q29SaXBwbGVEaXJlY3RpdmUgYXMgybVjLE1EX1JJUFBMRV9HTE9CQUxfT1BUSU9OUyBhcyDJtWJ9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuZXhwb3J0IHtSaXBwbGVNb2R1bGUgYXMgybVhfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3JpcHBsZS9yaXBwbGUubW9kdWxlJztcbmV4cG9ydCB7Q29TY3JvbGxEaXNwYXRjaGVyU2VydmljZSBhcyDJtWV9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcmlwcGxlL3Njcm9sbC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuZXhwb3J0IHtDb1Njcm9sbGFibGVEaXJlY3RpdmUgYXMgybVmfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3JpcHBsZS9zY3JvbGxhYmxlLmRpcmVjdGl2ZSc7XG5leHBvcnQge0NvVmlld3BvcnRSdWxlclNlcnZpY2UgYXMgybVkfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3JpcHBsZS92aWV3cG9ydC1ydWxlci5zZXJ2aWNlJztcbmV4cG9ydCB7U3RvcENsaWNrRGlyZWN0aXZlIGFzIMm1aH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9zdG9wY2xpY2svc3RvcC1jbGljay5kaXJlY3RpdmUnO1xuZXhwb3J0IHtTdG9wQ2xpY2tNb2R1bGUgYXMgybVnfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3N0b3BjbGljay9zdG9wLWNsaWNrLm1vZHVsZSc7XG5leHBvcnQge0FwcGVuZFBpcGUgYXMgybV1fSBmcm9tICcuL2xpYi9waXBlcy9hcHBlbmQucGlwZSc7XG5leHBvcnQge0FwcGVuZFBpcGVNb2R1bGUgYXMgybV0fSBmcm9tICcuL2xpYi9waXBlcy9hcHBlbmQucGlwZS5tb2R1bGUnOyJdfQ==
@@ -50,6 +50,8 @@ export class BaseInputComponent {
50
50
  this.noFormGroupControl = false;
51
51
  this.keepFocus = false;
52
52
  this.canSaveOrCancel = false;
53
+ this.committing = false;
54
+ this.commitFinished = true;
53
55
  this._markedAsUserTouched = false;
54
56
  this._destroyed = false;
55
57
  this._hasOnPushCdStrategy = false;
@@ -312,9 +314,15 @@ export class BaseInputComponent {
312
314
  commitClick(event) {
313
315
  return __awaiter(this, void 0, void 0, function* () {
314
316
  this.keepFocus = true;
315
- yield this.commit(this.model);
317
+ this.commitFinished = false;
318
+ this.committing = true;
319
+ const success = yield this.commit(this.model);
316
320
  this.keepFocus = false;
317
- this.doBlur(event);
321
+ yield this._commitFinished();
322
+ if (success) {
323
+ this.doBlur(event);
324
+ }
325
+ return success;
318
326
  });
319
327
  }
320
328
  cancelClick(event) {
@@ -332,6 +340,9 @@ export class BaseInputComponent {
332
340
  const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ValidationErrorComponent);
333
341
  this._errorValidationComponent = this.validationErrorContainer.createComponent(componentFactory);
334
342
  this._errorValidationComponent.instance.error = error;
343
+ if (this._hasOnPushCdStrategy) {
344
+ this.changeDetector.markForCheck();
345
+ }
335
346
  this._positionValidationError();
336
347
  }
337
348
  }
@@ -354,6 +365,9 @@ export class BaseInputComponent {
354
365
  if (this.canChange && this.input) {
355
366
  this.input.focus();
356
367
  this.focused = true;
368
+ if (this._hasOnPushCdStrategy) {
369
+ this.markForCheck();
370
+ }
357
371
  }
358
372
  }
359
373
  doFocus(event) {
@@ -363,6 +377,9 @@ export class BaseInputComponent {
363
377
  this._initialModelSet = false;
364
378
  this.focused = true;
365
379
  this.canSaveOrCancel = false;
380
+ if (this._hasOnPushCdStrategy) {
381
+ this.markForCheck();
382
+ }
366
383
  this.focus.next();
367
384
  }
368
385
  doBlur(event) {
@@ -374,7 +391,12 @@ export class BaseInputComponent {
374
391
  return false;
375
392
  }
376
393
  this.focused = false;
377
- this.input.blur();
394
+ if (this._hasOnPushCdStrategy) {
395
+ this.markForCheck();
396
+ }
397
+ if (this.input) {
398
+ this.input.blur();
399
+ }
378
400
  this.blur.next();
379
401
  }, 200);
380
402
  }
@@ -485,6 +507,15 @@ export class BaseInputComponent {
485
507
  this.control.updateValueAndValidity();
486
508
  }
487
509
  }
510
+ _commitFinished() {
511
+ return new Promise((resolve) => {
512
+ this.commitFinished = true;
513
+ setTimeout(() => {
514
+ this.committing = false;
515
+ resolve();
516
+ }, 800);
517
+ });
518
+ }
488
519
  _clearErrorComponent() {
489
520
  if (this.validationErrorContainer) {
490
521
  this.validationErrorContainer.clear();
@@ -591,12 +622,14 @@ export class BaseInputComponent {
591
622
  case 'Tab':
592
623
  const nextSiblingToFocus = event.shiftKey ? event.currentTarget.previousSibling : event.currentTarget.nextSibling;
593
624
  event.preventDefault();
594
- yield this.commitClick();
595
- if (nextSiblingToFocus) {
596
- try {
597
- this._setFocusOnNextPossibleInput(nextSiblingToFocus, event.shiftKey);
598
- }
599
- catch (e) {
625
+ const success = yield this.commitClick();
626
+ if (success) {
627
+ if (nextSiblingToFocus) {
628
+ try {
629
+ this._setFocusOnNextPossibleInput(nextSiblingToFocus, event.shiftKey);
630
+ }
631
+ catch (e) {
632
+ }
600
633
  }
601
634
  }
602
635
  return false;
@@ -733,4 +766,4 @@ __decorate([
733
766
  __decorate([
734
767
  InputBoolean()
735
768
  ], BaseInputComponent.prototype, "noFormGroupControl", void 0);
736
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYmFzZS9iYXNlLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUVqQix3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWdDLE9BQU8sRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBRW5GLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDOUQsT0FBTyxFQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ2pHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUUxRCxPQUFPLEVBQUMsdUNBQXVDLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUNuSCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFHaEYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sZ0RBQWdELENBQUM7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QUFDLGlCQUFpQjt5QkFLN0IsV0FBVyxTQUFDLGdCQUFnQjs2QkFLNUIsV0FBVyxTQUFDLDBCQUEwQjtvQkFLdEMsV0FBVyxTQUFDLGFBQWE7aUNBS3pCLFdBQVcsU0FBQyxxQkFBcUI7c0JBS2pDLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7d0JBVWhDLFlBQVksU0FBQyxTQUFTO21DQU90QixZQUFZLFNBQUMsaUJBQWlCO2lDQUs5QixZQUFZLFNBQUMsZUFBZTs0QkFLNUIsWUFBWSxTQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFoVG5DO0lBRFUsWUFBWSxFQUFFO3dEQUNhO0FBR3JDO0lBRFUsWUFBWSxFQUFFO3FEQUNFO0FBRzFCO0lBRFUsWUFBWSxFQUFFO3dEQUNLO0FBK0U3QjtJQURVLFlBQVksRUFBRTt5REFDYztBQTZIdEM7SUFEVSxZQUFZLEVBQUU7dURBQ1k7QUFHcEM7SUFEVSxZQUFZLEVBQUU7NkRBQ2tCO0FBRzFDO0lBRFUsWUFBWSxFQUFFO3FEQUNVO0FBR2xDO0lBRFUsWUFBWSxFQUFFO3FEQUNVO0FBR2xDO0lBRFUsWUFBWSxFQUFFO2tFQUN1QjtBQUcvQztJQURVLFlBQVksRUFBRTs4REFDbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50RmFjdG9yeSxcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgQ29tcG9uZW50UmVmLCBDb250ZW50Q2hpbGQsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbmplY3RhYmxlLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtBc3luY1ZhbGlkYXRvckZuLCBGb3JtQ29udHJvbCwgTmdNb2RlbCwgVmFsaWRhdG9yRm59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25BZGFwdGVyQ29tcG9uZW50fSBmcm9tIFwiLi9jb25maWd1cmF0aW9uLWFkYXB0ZXItY29tcG9uZW50LmludGVyZmFjZVwiO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSBcIi4uLy4uL2NvcmUvZnVuY3Rpb24vaXMtbmlsbC5mdW5jdGlvblwiO1xyXG5pbXBvcnQge25vdE5pbGx9IGZyb20gXCIuLi8uLi9jb3JlL2Z1bmN0aW9uL25vdC1uaWxsLmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7SW5wdXRCb29sZWFuLCBJbnB1dEJvb2xlYW5EZWNvcmF0b3J9IGZyb20gXCIuLi8uLi9jb3JlL2RlY29yYXRvci9pbnB1dC1ib29sZWFuLmRlY29yYXRvclwiO1xyXG5pbXBvcnQge3JlcXVpcmVkVmFsaWRhdG9yfSBmcm9tIFwiLi4vLi4vY29yZS92YWxpZGF0b3IvcmVxdWlyZWQudmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7cHJlY2lzaW9uU2NhbGVWYWxpZGF0b3J9IGZyb20gXCIuLi8uLi9jb3JlL3ZhbGlkYXRvci9wcmVjaXNpb24tc2NhbGUudmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7bWF4U3RyaW5nTGVuZ3RoVmFsaWRhdG9yfSBmcm9tIFwiLi4vLi4vY29yZS92YWxpZGF0b3IvbWF4LXN0cmluZy1sZW5ndGgudmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7U3RyaW5nVXRpbHN9IGZyb20gXCIuLi8uLi9jb3JlL3V0aWxzL3N0cmluZy11dGlsc1wiO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtGb3JtSW5wdXRVc2VyTW9kZWxDaGFuZ2VMaXN0ZW5lclNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb3JlL3NlcnZpY2UvZm9ybS1pbnB1dC11c2VyLWNoYW5nZS1saXN0ZW5lci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7TnVtYmVyVXRpbHN9IGZyb20gXCIuLi8uLi9jb3JlL3V0aWxzL251bWJlci11dGlsc1wiO1xyXG5pbXBvcnQge05nWm9uZVdyYXBwZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vY29yZS9zZXJ2aWNlL25nLXpvbmUtd3JhcHBlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7Q29yZUNvbXBvbmVudHNJY29ufSBmcm9tIFwiLi4vLi4vY29yZS9lbnVtL2NvcmUtY29tcG9uZW50cy1pY29uLmVudW1cIjtcclxuaW1wb3J0IHtGb3JtQ29tcG9uZW50fSBmcm9tIFwiLi4vZm9ybS9mb3JtLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge1ZhbGlkYXRpb25FcnJvckNvbXBvbmVudH0gZnJvbSBcIi4uL3ZhbGlkYXRpb24tZXJyb3IvdmFsaWRhdGlvbi1lcnJvci5jb21wb25lbnRcIjtcclxuXHJcbi8qKlxyXG4gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhbGwgY29uY3JldGUgZm9ybSBpbnB1dCBjb21wb25lbnRzIHRoYXQgY29udGFpbiBhIG5hdGl2ZSA8aW5wdXQ+IGVsZW1lbnQuIFByb3ZpZGVzIGNvbW1vbiBkYXRhIGFuZCBmdW5jdGlvbmFsaXR5LCBzdWNoIGFzXHJcbiAqIGFkZGluZyBzZWxmIGFzIGEgY29udHJvbCB0byB0aGUgcGFyZW50IGZvcm0uXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUlucHV0Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIENvbmZpZ3VyYXRpb25BZGFwdGVyQ29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKFwidmFsaWRhdGlvbkVycm9yXCIsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcclxuICBwdWJsaWMgdmFsaWRhdGlvbkVycm9yQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICBAVmlld0NoaWxkKE5nTW9kZWwsIHtzdGF0aWM6IHRydWV9KVxyXG4gIHB1YmxpYyBfbmdNb2RlbDogTmdNb2RlbDtcclxuXHJcbiAgcHVibGljIGdldCBuZ01vZGVsKCk6IE5nTW9kZWwge1xyXG4gICAgaWYgKHRoaXMuX215Rm9ybUlucHV0SW5zdGFuY2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX215Rm9ybUlucHV0SW5zdGFuY2UubmdNb2RlbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9uZ01vZGVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBCYXNlRm9ybUlucHV0Q29tcG9uZW50SW5kZXg6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIHN0YXRpYyBIaWRkZW5DbGFzczogc3RyaW5nID0gXCJoaWRkZW5cIjtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2hvd1NhdmVDYW5jZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IG1vZGVsKHZhbHVlOiBUKSB7XHJcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxNb2RlbFNldCkge1xyXG4gICAgICB0aGlzLl9pbml0aWFsTW9kZWwgPSB0aGlzLl9tb2RlbDtcclxuICAgICAgdGhpcy5faW5pdGlhbE1vZGVsU2V0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuX21vZGVsID0gdmFsdWU7XHJcbiAgICB0aGlzLmNhblNhdmVPckNhbmNlbCA9IHRoaXMuX21vZGVsICE9PSB0aGlzLl9pbml0aWFsTW9kZWw7XHJcbiAgICB0aGlzLl9jbGVhckVycm9yQ29tcG9uZW50KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFQge1xyXG4gICAgcmV0dXJuIHRoaXMuX21vZGVsO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpXHJcbiAgcHVibGljIG5vVmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKClcclxuICBwdWJsaWMgaW5pdEZvY3VzOiBib29sZWFuO1xyXG5cclxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKClcclxuICBwdWJsaWMgbm9DbGlja0ZvY3VzOiBib29sZWFuO1xyXG5cclxuICAvLyB1c2VkIHRvIGxpbmsgZmllbGQgdG8gYnVzaW5lc3Mgb2JqZWN0IGZvciBkZWVwLXZhbGlkYXRpb25cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBidXNpbmVzc09iamVjdElkOiBhbnk7XHJcblxyXG4gIC8vIEBJbnB1dCgpXHJcbiAgLy8gcHVibGljIGVycm9yTWVzc2FnZTogVmFsaWRhdGlvbk1lc3NhZ2U7XHJcblxyXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGRpc2FibGVkID09PSB0aGlzLl9kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IElucHV0Qm9vbGVhbkRlY29yYXRvci5JbnB1dFZhbHVlVG9Cb29sZWFuKGRpc2FibGVkKTtcclxuICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xWYWxpZGF0b3JzQW5kT3duRmxhZ3MoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgbWF4TGVuZ3RoKG1heExlbmd0aDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNldE1heExlbmd0aChtYXhMZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBub3ROaWxsKHRoaXMuZm9yY2VkTWF4TGVuZ3RoKSA/IHRoaXMuZm9yY2VkTWF4TGVuZ3RoIDogdGhpcy5fbWF4TGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZm9yY2VkTWF4TGVuZ3RoOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCByZWFkb25seShyZWFkb25seTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX2ZvcmNlUmVhZG9ubHkgIT09IHVuZGVmaW5lZCB8fCByZWFkb25seSA9PT0gdGhpcy5fcmVhZG9ubHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcmVhZG9ubHkgPSBJbnB1dEJvb2xlYW5EZWNvcmF0b3IuSW5wdXRWYWx1ZVRvQm9vbGVhbihyZWFkb25seSk7XHJcbiAgICB0aGlzLl91cGRhdGVDb250cm9sVmFsaWRhdG9yc0FuZE93bkZsYWdzKCk7XHJcbiAgICBpZiAodGhpcy5faGFzT25QdXNoQ2RTdHJhdGVneSkge1xyXG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JjZVJlYWRvbmx5IHx8IHRoaXMuX3JlYWRvbmx5O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGZvcmNlUmVhZG9ubHkoZm9yY2VSZWFkb25seTogYm9vbGVhbikge1xyXG4gICAgaWYgKGZvcmNlUmVhZG9ubHkgPT09IHRoaXMuX2ZvcmNlUmVhZG9ubHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZm9yY2VSZWFkb25seSA9IElucHV0Qm9vbGVhbkRlY29yYXRvci5JbnB1dFZhbHVlVG9Cb29sZWFuKGZvcmNlUmVhZG9ubHkpO1xyXG4gICAgdGhpcy5fdXBkYXRlQ29udHJvbFZhbGlkYXRvcnNBbmRPd25GbGFncygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBmb3JjZVJlYWRvbmx5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlUmVhZG9ubHk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChyZXF1aXJlZCA9PT0gdGhpcy5fcmVxdWlyZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSBJbnB1dEJvb2xlYW5EZWNvcmF0b3IuSW5wdXRWYWx1ZVRvQm9vbGVhbihyZXF1aXJlZCk7XHJcbiAgICB0aGlzLl91cGRhdGVDb250cm9sVmFsaWRhdG9yc0FuZE93bkZsYWdzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9yY2VSZXF1aXJlZCB8fCB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKVxyXG4gIHB1YmxpYyBmb3JjZVJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7ICAvLyBhIGZvcmNlIG91dHNpZGUgb2YgW2NmZ05hbWVdJ3MgaW5mbHVlbmNlXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCB2YWxpZGF0b3JzKHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10pIHtcclxuICAgIGlmICh2YWxpZGF0b3JzID09PSB0aGlzLl92YWxpZGF0b3JzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX3ZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzO1xyXG4gICAgdGhpcy5fdXBkYXRlQ29udHJvbFZhbGlkYXRvcnNBbmRPd25GbGFncygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2YWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvcnM7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgYXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm5bXSkge1xyXG4gICAgdGhpcy5fYXN5bmNWYWxpZGF0b3JzID0gdmFsaWRhdG9ycztcclxuICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xWYWxpZGF0b3JzQW5kT3duRmxhZ3MoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYXN5bmNWYWxpZGF0b3JzKCk6IEFzeW5jVmFsaWRhdG9yRm5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXN5bmNWYWxpZGF0b3JzO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKFwiY2xhc3MuXCIgKyBCYXNlSW5wdXRDb21wb25lbnQuSGlkZGVuQ2xhc3MpXHJcbiAgcHVibGljIHNldCBoaWRkZW4oaGlkZGVuOiBib29sZWFuKSB7XHJcbiAgICBpZiAoaGlkZGVuID09PSB0aGlzLl9oaWRkZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2hpZGRlbiA9IGhpZGRlbjtcclxuXHJcbiAgICB0aGlzLl9hZGRPclJlbW92ZVNlbGZGcm9tRm9ybSgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fZGVzdHJveWVkKSB7XHJcbiAgICAgIGlmIChoaWRkZW4pIHtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGFjaCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IucmVhdHRhY2goKTtcclxuICAgICAgICBpZiAodGhpcy5faGFzT25QdXNoQ2RTdHJhdGVneSkge1xyXG4gICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzQWZ0ZXJBbmd1bGFyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5oaWRkZW5DaGFuZ2UuZW1pdChoaWRkZW4pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoaWRkZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgLy8gbm8gY3VzdG9tIHNldHRlciBsb2dpYyBhcyB3aXRoIHRoZSBvdGhlciAnc2NyZWVuIGNvbmZpZyBwcm9wcycsIGJlY2F1c2UgY29uY3JldGUgZm9ybSBpbnB1dCBjb21wb25lbnRzIGhhbmRsZSB0aGlzIHRoZW1zZWx2ZXMuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGRlY2ltYWxzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2RlY2ltYWxzID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlY2ltYWxzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjaW1hbHM7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpY29uOiBDb3JlQ29tcG9uZW50c0ljb247XHJcblxyXG4gIC8vIEdvYWw6IGFiaWxpdHkgdG8gZW11bGF0ZSB0aGUgcmVkIGJhY2tncm91bmQgb2YgaW5wdXQgZmllbGRzIChmb3JtLXN1Ym1pdHRlZCBpbnZhbGlkIHN0YXRlKVxyXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZyhcImNsYXNzLmNjLXJlZC1lcnJvci1iYWNrZ3JvdW5kXCIpXHJcbiAgcHVibGljIHJlZEVycm9yQmFja2dyb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBteUZvcm1JbnB1dEluc3RhbmNlKHZhbHVlOiBCYXNlSW5wdXRDb21wb25lbnQ8VD4pIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fbXlGb3JtSW5wdXRJbnN0YW5jZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9teUZvcm1JbnB1dEluc3RhbmNlID0gdmFsdWU7XHJcbiAgICB0aGlzLl91cGRhdGVDb250cm9sVmFsaWRhdG9yc0FuZE93bkZsYWdzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbXlGb3JtSW5wdXRJbnN0YW5jZSgpOiBCYXNlSW5wdXRDb21wb25lbnQ8VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX215Rm9ybUlucHV0SW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9teUZvcm1JbnB1dEluc3RhbmNlOiBCYXNlSW5wdXRDb21wb25lbnQ8VD47XHJcblxyXG4gIC8vIEBPdXRwdXQoKVxyXG4gIC8vIHB1YmxpYyBjb21taXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBuYXRpdmVCbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IGJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBlbWl0cyB3aGVuIHRoZSBlbnRlciBidXR0b24gb24ga2V5Ym9hcmQgd2FzIHByZXNzZWQgd2hpbGUgdGhpcyBmb3JtIGlucHV0IGhhZCBmb2N1c3NlZFxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBlbnRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBmb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBrZXlEb3duOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IGtleVVwOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IG1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgdXNlck1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgaGlkZGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmNjLWlucHV0LWZvY3VzZWRcIilcclxuICBwdWJsaWMgZm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgZm9ybUNvbXBvbmVudDogRm9ybUNvbXBvbmVudDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuZm9ybS1pbnB1dFwiKVxyXG4gIHB1YmxpYyBmb3JtSW5wdXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY3VzdG9tLXdpZHRoXCIpXHJcbiAgcHVibGljIGN1c3RvbVdpZHRoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKVxyXG4gIHB1YmxpYyBub1RyaWFuZ2xlR3JhcGhpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgQEhvc3RCaW5kaW5nKFwiY2xhc3MuaGFsZi13aWR0aFwiKVxyXG4gIHB1YmxpYyBoYWxmV2lkdGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIEBIb3N0QmluZGluZyhcImNsYXNzLmZ1bGwtd2lkdGgtaW1wb3J0YW50XCIpXHJcbiAgcHVibGljIGZ1bGxXaWR0aDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKClcclxuICBwdWJsaWMgZXhjbHVkZVVzZXJNb2RlbENoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKClcclxuICBwdWJsaWMgbm9Gb3JtR3JvdXBDb250cm9sOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmZvcm0tc3VibWl0dGVkXCIpXHJcbiAgcHVibGljIGdldCBmb3JtU3VibWl0dGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudCAmJiB0aGlzLmZvcm1Db21wb25lbnQuc3VibWl0dGVkO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuaGFzbm9sYWJlbFwiKVxyXG4gIHB1YmxpYyBnZXQgaGFzTm9MYWJlbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpc05pbGwodGhpcy5sYWJlbCk7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5oYXN2YWx1ZVwiKVxyXG4gIHB1YmxpYyBnZXQgaGFzVmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLm1vZGVsIHx8IFN0cmluZ1V0aWxzLklzU3RyaW5nV2l0aExlbmd0aCh0aGlzLm1vZGVsKSB8fCBOdW1iZXJVdGlscy5Jc051bWJlcih0aGlzLm1vZGVsKTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmludmFsaWRcIilcclxuICBwdWJsaWMgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tTdGF0ZSgpICYmICF0aGlzLmNvbnRyb2wudmFsaWQ7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5kaXNhYmxlZFwiKVxyXG4gIHB1YmxpYyBnZXQgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLnJlYWQtb25seVwiKVxyXG4gIHB1YmxpYyBnZXQgaXNSZWFkb25seSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5O1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MucmVxdWlyZWRcIilcclxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmNjLXRvdWNoZWQtaW52YWxpZFwiKVxyXG4gIHB1YmxpYyBnZXQgdG91Y2hlZEludmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbEV4aXN0cygpICYmIHRoaXMuY29udHJvbC50b3VjaGVkICYmICF0aGlzLmNvbnRyb2wudmFsaWQ7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy52YWxpZFwiKVxyXG4gIHB1YmxpYyBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tTdGF0ZSgpICYmIHRoaXMuY29udHJvbC52YWxpZDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLm5vLXZhbGlkYXRpb25cIilcclxuICBwdWJsaWMgZ2V0IHZhbGlkYXRpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5ub1ZhbGlkYXRpb247XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIiwgW1wiJGV2ZW50XCJdKVxyXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNhbkNoYW5nZSAmJiAhdGhpcy5ub0NsaWNrRm9jdXMpIHtcclxuICAgICAgdGhpcy5yZXF1ZXN0Rm9jdXMoKTtcclxuICAgICAgaWYgKCF0aGlzLmV4Y2x1ZGVVc2VyTW9kZWxDaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLm1hcmtBc1VzZXJUb3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJmb2N1c2luXCIpXHJcbiAgb25Gb2N1c0luKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmV4Y2x1ZGVVc2VyTW9kZWxDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5tYXJrQXNVc2VyVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OnNjcm9sbFwiKVxyXG4gIHB1YmxpYyBoYW5kbGVEb2N1bWVudFNjcm9sbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Bvc2l0aW9uVmFsaWRhdGlvbkVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxyXG4gIHB1YmxpYyBoYW5kbGVXaW5kb3dSZXNpemUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3NpdGlvblZhbGlkYXRpb25FcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcImtleWRvd25cIiwgW1wiJGV2ZW50XCJdKVxyXG4gIHB1YmxpYyBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zaG93U2F2ZUNhbmNlbCAmJiB0aGlzLmNhblNhdmVPckNhbmNlbCkge1xyXG4gICAgICB0aGlzLl9oYW5kbGVLZXlEb3duKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQ2hhbmdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLmRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjb250cm9sKCk6IEZvcm1Db250cm9sIHtcclxuICAgIHJldHVybiB0aGlzLl9teUZvcm1JbnB1dEluc3RhbmNlID8gdGhpcy5fbXlGb3JtSW5wdXRJbnN0YW5jZS5jb250cm9sIDogdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5jb250cm9sO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBmb3JtSW5wdXRJbnN0YW5jZSgpOiBCYXNlSW5wdXRDb21wb25lbnQ8VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX215Rm9ybUlucHV0SW5zdGFuY2UgfHwgdGhpcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNEZXN0cm95ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVzdHJveWVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudDtcclxuXHJcbiAgcHVibGljIGtlZXBGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYW5TYXZlT3JDYW5jZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQGltcGxlbWVudHMgQ29uZmlndXJhdGlvbkFkYXB0ZXJDb21wb25lbnRcclxuICBwdWJsaWMgb2JqZWN0Q29uZmlnTmFtZTogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfbWFya2VkQXNVc2VyVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgcHJvdGVjdGVkIF9kZXN0cm95ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgX2hhc09uUHVzaENkU3RyYXRlZ3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgX21vZGVsOiBUO1xyXG4gIHByb3RlY3RlZCBfaW5pdGlhbE1vZGVsOiBUO1xyXG4gIHByb3RlY3RlZCBfaW5pdGlhbE1vZGVsU2V0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2Vycm9yVmFsaWRhdGlvbkNvbXBvbmVudDogQ29tcG9uZW50UmVmPFZhbGlkYXRpb25FcnJvckNvbXBvbmVudD47XHJcbiAgcHJpdmF0ZSBfZGVjaW1hbHM6IG51bWJlcjtcclxuICBwcml2YXRlIF9oaWRkZW46IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfbWF4TGVuZ3RoOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfcmVhZG9ubHk6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgX2ZvcmNlUmVhZG9ubHk6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX3ZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICBwcml2YXRlIF9hc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9zcGVlY2hTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9tb2RlbENoYW5nZVN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgX2Zvcm1BbnlTdWJtaXRTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9mb3JtUmVhZG9ubHlDaGFuZ2VTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9jbGVhck1hcmtlZEFzVXNlclRvdWNoZWRTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJvdGVjdGVkIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGZvcm1Vc2VyQ2hhbmdlTGlzdGVuZXI/OiBGb3JtSW5wdXRVc2VyTW9kZWxDaGFuZ2VMaXN0ZW5lclNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgbmdab25lV3JhcHBlcj86IE5nWm9uZVdyYXBwZXJTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGVsZW1lbnRSZWY/OiBFbGVtZW50UmVmLFxyXG4gICkge1xyXG4gICAgQmFzZUlucHV0Q29tcG9uZW50LkJhc2VGb3JtSW5wdXRDb21wb25lbnRJbmRleCsrO1xyXG4gICAgdGhpcy5uYW1lID0gQmFzZUlucHV0Q29tcG9uZW50LkJhc2VGb3JtSW5wdXRDb21wb25lbnRJbmRleC50b1N0cmluZygpO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm1Vc2VyQ2hhbmdlTGlzdGVuZXIpIHtcclxuICAgICAgdGhpcy5fY2xlYXJNYXJrZWRBc1VzZXJUb3VjaGVkU3ViID0gdGhpcy5mb3JtVXNlckNoYW5nZUxpc3RlbmVyLmNsZWFyQWxsTWFya2VkQXNVc2VyVG91Y2hlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX21hcmtlZEFzVXNlclRvdWNoZWQgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX21vZGVsQ2hhbmdlU3ViID0gdGhpcy5tb2RlbENoYW5nZS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kZWwgPSB2YWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ByZXBhcmVJbnB1dCgpO1xyXG5cclxuICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xWYWxpZGF0b3JzQW5kT3duRmxhZ3MoKTtcclxuXHJcbiAgICB0aGlzLl9hZGRPclJlbW92ZVNlbGZGcm9tRm9ybSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQpIHtcclxuICAgICAgdGhpcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHkgfHwgdGhpcy5mb3JtQ29tcG9uZW50LnJlYWRvbmx5O1xyXG4gICAgICB0aGlzLl9mb3JtUmVhZG9ubHlDaGFuZ2VTdWIgPSB0aGlzLmZvcm1Db21wb25lbnQucmVhZG9ubHlDaGFuZ2Uuc3Vic2NyaWJlKChpc0Zvcm1SZWFkb25seTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSBpc0Zvcm1SZWFkb25seTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaW5pdEZvY3VzKSB7XHJcbiAgICAgIHNldFRpbWVvdXQodGhpcy5yZXF1ZXN0Rm9jdXMuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlucHV0KSB7XHJcbiAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIChldmVudCkgPT4gdGhpcy5kb0JsdXIoZXZlbnQpKTtcclxuICAgICAgdGhpcy5pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIChldmVudCkgPT4gdGhpcy5kb0ZvY3VzKGV2ZW50KSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZGVzdHJveWVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2NsZWFyRXJyb3JDb21wb25lbnQoKTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy50b29sdGlwTWFuYWdlciAmJiB0aGlzLmVsZW1lbnRSZWYpIHtcclxuICAgIC8vICAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyLmRlc3Ryb3lFcnJvclRvb2x0aXBPZkVsZW1lbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLl9tb2RlbENoYW5nZVN1Yikge1xyXG4gICAgICB0aGlzLl9tb2RlbENoYW5nZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3NwZWVjaFN1Yikge1xyXG4gICAgICB0aGlzLl9zcGVlY2hTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9mb3JtQW55U3VibWl0U3ViKSB7XHJcbiAgICAgIHRoaXMuX2Zvcm1BbnlTdWJtaXRTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9mb3JtUmVhZG9ubHlDaGFuZ2VTdWIpIHtcclxuICAgICAgdGhpcy5fZm9ybVJlYWRvbmx5Q2hhbmdlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fY2xlYXJNYXJrZWRBc1VzZXJUb3VjaGVkU3ViKSB7XHJcbiAgICAgIHRoaXMuX2NsZWFyTWFya2VkQXNVc2VyVG91Y2hlZFN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5fcmVtb3ZlU2VsZkZyb21Gb3JtKCk7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5pbnB1dCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vIGRlc2NlbmRlbnRzIHNob3VsZCBvdmVycmlkZSB0aGlzXHJcbiAgcHVibGljIGNvbW1pdCA9IGFzeW5jIChtb2RlbDogYW55KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvbW1pdENsaWNrKGV2ZW50PzogTW91c2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5rZWVwRm9jdXMgPSB0cnVlO1xyXG4gICAgYXdhaXQgdGhpcy5jb21taXQodGhpcy5tb2RlbCk7XHJcbiAgICB0aGlzLmtlZXBGb2N1cyA9IGZhbHNlO1xyXG4gICAgdGhpcy5kb0JsdXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbENsaWNrKGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5rZWVwRm9jdXMgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuX2luaXRpYWxNb2RlbFNldCkge1xyXG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5faW5pdGlhbE1vZGVsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5rZWVwRm9jdXMgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93VmFsaWRhdGlvbkVycm9yKGVycm9yOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRpb25FcnJvckNvbnRhaW5lcikge1xyXG4gICAgICBpZiAodGhpcy5fZXJyb3JWYWxpZGF0aW9uQ29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYXJFcnJvckNvbXBvbmVudCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8VmFsaWRhdGlvbkVycm9yQ29tcG9uZW50PiA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFZhbGlkYXRpb25FcnJvckNvbXBvbmVudCk7XHJcbiAgICAgIHRoaXMuX2Vycm9yVmFsaWRhdGlvbkNvbXBvbmVudCA9IHRoaXMudmFsaWRhdGlvbkVycm9yQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcclxuICAgICAgdGhpcy5fZXJyb3JWYWxpZGF0aW9uQ29tcG9uZW50Lmluc3RhbmNlLmVycm9yID0gZXJyb3I7XHJcbiAgICAgIHRoaXMuX3Bvc2l0aW9uVmFsaWRhdGlvbkVycm9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhIG1vZGVsQ2hhbmdlIGV2ZW50IHdpdGggZ2l2ZW4gdmFsdWUsIGluZGljYXRpbmcgdGhhdCB0aGUgbW9kZWwgb2YgdGhpcyBmb3JtIGlucHV0XHJcbiAgICogaGFzIGNoYW5nZWQgYW5kIGl0cyBuZXcgdmFsdWUgaXMgZ2l2ZW4gdmFsdWUuIEFsc28gZW1pdHMgdXNlck1vZGVsQ2hhbmdlIGlmIG1hcmtlZEFzVXNlclRvdWNoZWQuXHJcbiAgICovXHJcbiAgcHVibGljIHNldE1vZGVsKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwgPSB2YWx1ZTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX21hcmtlZEFzVXNlclRvdWNoZWQgJiYgdGhpcy5mb3JtVXNlckNoYW5nZUxpc3RlbmVyKSB7XHJcbiAgICAgIHRoaXMuZm9ybVVzZXJDaGFuZ2VMaXN0ZW5lci51c2VyTW9kZWxDaGFuZ2UubmV4dCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMudXNlck1vZGVsQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9oYXNPblB1c2hDZFN0cmF0ZWd5KSB7XHJcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlcXVlc3RGb2N1cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNhbkNoYW5nZSAmJiB0aGlzLmlucHV0KSB7XHJcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcclxuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb0ZvY3VzKGV2ZW50OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdGlhbE1vZGVsU2V0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jYW5TYXZlT3JDYW5jZWwgPSBmYWxzZTtcclxuICAgIHRoaXMuZm9jdXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvQmx1cihldmVudD86IGFueSk6IGFueSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMua2VlcEZvY3VzKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlucHV0LmJsdXIoKTtcclxuICAgICAgdGhpcy5ibHVyLm5leHQoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fZGVzdHJveWVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1hcmtGb3JDaGVjaygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fZGVzdHJveWVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGV0ZWN0Q2hhbmdlc0FmdGVyQW5ndWxhcigpOiB2b2lkIHtcclxuICAgIGlmICghIXRoaXMubmdab25lV3JhcHBlcikge1xyXG4gICAgICB0aGlzLm5nWm9uZVdyYXBwZXIuc2V0VGltZW91dE91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2hhc09uUHVzaENkU3RyYXRlZ3kpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaW5rcyB0aGUgZ2l2ZW4gZm9ybUNvbXAuc3VibWl0IGV2ZW50IHRvIHRoZSBmaXJpbmcgb2YgZGV0ZWN0Q2hhbmdlcygpIG9mIGdpdmVuIGNoYW5nZSBkZXRlY3Rvci4gVGhpcyBpcyBhICd1dGlsaXR5LWxpa2UnIG1ldGhvZCxcclxuICAgKiBidXQgd2UgbWFuYWdlIHRoZSBhY3R1YWwgc3Vic2NyaXB0aW9uICh3aXRoIFVOU1VCU0NSSUJFKCkhKSBvbiB0aGlzIGJhc2UgY2xhc3MuXHJcbiAgICogQHBhcmFtIGZvcm1Db21wIFRoZSBmb3JtIHdob3NlIHN1Ym1pdCB3ZSB3YW50IHRvIGxpbmsgd2l0aCB0aGUgY2FsbCBvZiAuZGV0ZWN0Q2hhbmdlcygpIG9uIGdpdmVuIGNoYW5nZSBkZXRlY3RvciByZWYuXHJcbiAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIFRoaXMgc2hvdWxkIGJlIGdpdmVuIGFzIHBhcmFtLiBJIGNob29zZSBub3QgdG8gbWFrZSB0aGlzIHBhcnQgb2Ygb3VyIChCYXNlRm9ybUlucHV0Q29tcG9uZW50KSBjb25zdHJ1Y3RvcixcclxuICAgKiBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSAyMSBleHRlbmRlcnMuXHJcbiAgICovXHJcbiAgLy8gcHVibGljIGxpbmtGb3JtQW55U3VibWl0V2l0aERldGVjdENoYW5nZXMoZm9ybUNvbXA6IEZvcm1Db21wb25lbnQsIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gIC8vICAgICBpZiAoZm9ybUNvbXAgJiYgY2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAvLyAgICAgICAgIHRoaXMuX2Zvcm1BbnlTdWJtaXRTdWIgPSBmb3JtQ29tcC5hbnlTdWJtaXQuc3Vic2NyaWJlKCgoKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLl9kZXN0cm95ZWQpIHtcclxuICAvLyAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIC8vICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH0pKTtcclxuICAvLyAgICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIG1hcmtBc1VzZXJUb3VjaGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWFya2VkQXNVc2VyVG91Y2hlZCA9IHRydWU7XHJcbiAgICB0aGlzLnJlZEVycm9yQmFja2dyb3VuZCA9IGZhbHNlOyAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyB0aGF0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJNYXJrZWRBc1VzZXJUb3VjaGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWFya2VkQXNVc2VyVG91Y2hlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy91c2VkIGZvciBkZXNjZW5kZW50cywgYmVjYXVzZSBkZXNjZW5kZW50cyBjYW4ndCBzZXQgc3VwZXIgcHJvcGVydGllcywgc2VlIElucHV0TnVtYmVyQ29tcG9uZW50XHJcbiAgcHJvdGVjdGVkIHNldE1heExlbmd0aChtYXhMZW5ndGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKG5vdE5pbGwodGhpcy5mb3JjZWRNYXhMZW5ndGgpIHx8IG1heExlbmd0aCA9PT0gdGhpcy5fbWF4TGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTmFOKG1heExlbmd0aCkpIHtcclxuICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xyXG4gICAgICB0aGlzLl91cGRhdGVDb250cm9sVmFsaWRhdG9yc0FuZE93bkZsYWdzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX21hcmtBc09uUHVzaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hhc09uUHVzaENkU3RyYXRlZ3kgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9jaGVja1N0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMubmdNb2RlbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtU3VibWl0dGVkIHx8ICh0aGlzLl9jb250cm9sRXhpc3RzKCkgJiYgdGhpcy5jb250cm9sLnRvdWNoZWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUGxhY2UgdmFsaWRhdG9ycyBvbnRvIG91ciBBbmd1bGFyJ3MgRm9ybUNvbnRyb2wuXHJcbiAgcHJvdGVjdGVkIF91cGRhdGVDb250cm9sVmFsaWRhdG9yc0FuZE93bkZsYWdzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXI6IEVsZW1lbnRSZWYgPSB0aGlzLm15Rm9ybUlucHV0SW5zdGFuY2UgPyB0aGlzLm15Rm9ybUlucHV0SW5zdGFuY2UuZWxlbWVudFJlZiA6IHRoaXMuZWxlbWVudFJlZjtcclxuICAgIC8vIGlmICh0aGlzLnRvb2x0aXBNYW5hZ2VyICYmIGVyKSB7XHJcbiAgICAvLyAgICAgdGhpcy50b29sdGlwTWFuYWdlci5kZXN0cm95RXJyb3JUb29sdGlwT2ZFbGVtZW50KGVyLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5fc2V0TmF0aXZlUmVxdWlyZWQodGhpcy5yZXF1aXJlZCk7XHJcbiAgICB0aGlzLl9zZXROYXRpdmVNYXhMZW5ndGgodGhpcy5tYXhMZW5ndGgpO1xyXG4gICAgdGhpcy5fc2V0TmF0aXZlRGlzYWJsZWQodGhpcy5kaXNhYmxlZCk7XHJcbiAgICB0aGlzLl9zZXROYXRpdmVSZWFkT25seSh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9yY2VSZWFkb25seSk7XHJcblxyXG4gICAgdGhpcy5yZWRFcnJvckJhY2tncm91bmQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLl9jb250cm9sRXhpc3RzKCkpIHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG5cclxuICAgICAgLy8gYWRkIHJlcXVpcmVkXHJcbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHJlcXVpcmVkVmFsaWRhdG9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWRkIG1heGxlbmd0aFxyXG4gICAgICBpZiAobm90TmlsbCh0aGlzLl9tYXhMZW5ndGgpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVjaW1hbHMpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChwcmVjaXNpb25TY2FsZVZhbGlkYXRvcih0aGlzLl9tYXhMZW5ndGgsIHRoaXMuZGVjaW1hbHMpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKG1heFN0cmluZ0xlbmd0aFZhbGlkYXRvcih0aGlzLl9tYXhMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBASW5wdXQoKS1lZCB2YWxpZGF0b3JzXHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaCguLi50aGlzLl92YWxpZGF0b3JzKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9ycy5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsaWRhdG9yID09PSByZXF1aXJlZFZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldE5hdGl2ZVJlcXVpcmVkKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgICAgdGhpcy5jb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLl9hc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgICB0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYXJFcnJvckNvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRpb25FcnJvckNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvckNvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICBpZiAodGhpcy5fZXJyb3JWYWxpZGF0aW9uQ29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhpcy5fZXJyb3JWYWxpZGF0aW9uQ29tcG9uZW50LmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLl9lcnJvclZhbGlkYXRpb25Db21wb25lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyB3aGV0aGVyIHRoaXMubmdNb2RlbC5jb250cm9sIGhhcyBzYWZlIGFjY2Vzc1xyXG4gIHByaXZhdGUgX2NvbnRyb2xFeGlzdHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5uZ01vZGVsICYmICEhdGhpcy5jb250cm9sO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29udHJvbElzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbEV4aXN0cygpICYmIHRoaXMuY29udHJvbC52YWxpZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldE5hdGl2ZURpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbnB1dCkge1xyXG4gICAgICB0aGlzLmlucHV0LmRpc2FibGVkID0gZGlzYWJsZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXROYXRpdmVNYXhMZW5ndGgobWF4bGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlucHV0ICYmICFpc05hTihtYXhsZW5ndGgpKSB7XHJcbiAgICAgIHRoaXMuaW5wdXQubWF4TGVuZ3RoID0gbWF4bGVuZ3RoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9zZXROYXRpdmVSZWFkT25seShyZWFkb25seTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5wdXQpIHtcclxuICAgICAgdGhpcy5pbnB1dC5yZWFkT25seSA9IHJlYWRvbmx5O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0TmF0aXZlUmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlucHV0KSB7XHJcbiAgICAgIHRoaXMuaW5wdXQucmVxdWlyZWQgPSByZXF1aXJlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvU3BlZWNoSW5wdXQoKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLl9zcGVlY2hTdWIgPSB0aGlzLnNwZWVjaElucHV0LnNwZWVjaElucHV0LnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgLy8gICAgIGlmICh0aGlzLmZvY3VzZWQgJiYgdGhpcy5fY29udHJvbEV4aXN0cygpKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IHZhbDogc3RyaW5nID0gdGhpcy5jb250cm9sLnZhbHVlO1xyXG4gICAgLy8gICAgICAgICB0aGlzLnNldE1vZGVsKChTdHJpbmdVdGlscy5Jc1N0cmluZyh2YWwpID8gdmFsIDogJycpICsgZGF0YSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZGRPclJlbW92ZVNlbGZGcm9tRm9ybSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmhpZGRlbikge1xyXG4gICAgICB0aGlzLl9yZW1vdmVTZWxmRnJvbUZvcm0oKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2FkZFNlbGZUb0Zvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVNlbGZJbkZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbXBvbmVudC51cGRhdGVGb3JtSW5wdXQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVTZWxmRnJvbUZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMubmdNb2RlbCkge1xyXG4gICAgICB0aGlzLmZvcm1Db21wb25lbnQucmVtb3ZlRm9ybUlucHV0KHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkU2VsZlRvRm9ybSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgJiYgdGhpcy5uZ01vZGVsICYmICF0aGlzLm5vRm9ybUdyb3VwQ29udHJvbCkge1xyXG4gICAgICB0aGlzLmZvcm1Db21wb25lbnQucmVtb3ZlRm9ybUlucHV0KHRoaXMpOyAvLyBwcmV2ZW50aW5nIHRoZXJlIGFyZSB0d28gY29udHJvbHMgaW4gZm9ybWdyb3VwIHdoZW4gbXlGb3JtSW5wdXRJbnN0YW5jZSBpcyAoYmVpbmcpIHNldFxyXG4gICAgICB0aGlzLmZvcm1Db21wb25lbnQuYWRkRm9ybUlucHV0KHRoaXMubXlGb3JtSW5wdXRJbnN0YW5jZSA/IHRoaXMubXlGb3JtSW5wdXRJbnN0YW5jZSA6IHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZUlucHV0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZWxlbWVudFJlZiAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAvL3RyeSB0byBmaW5kIGlucHV0IGVsZW1lbnRcclxuICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuX2ZpbmRJbnB1dE5vZGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pO1xyXG4gICAgICBpZiAodGhpcy5pbnB1dCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChldmVudCkgPT4gdGhpcy5kb0JsdXIoZXZlbnQpKTtcclxuICAgICAgICB0aGlzLmlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKGV2ZW50KSA9PiB0aGlzLmRvRm9jdXMoZXZlbnQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmluZElucHV0Tm9kZShub2Rlcyk6IGFueSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcclxuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRJbnB1dE5vZGUobm9kZS5jaGlsZHJlbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Bvc2l0aW9uVmFsaWRhdGlvbkVycm9yKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZWxlbWVudFJlZiAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCAmJiB0aGlzLl9lcnJvclZhbGlkYXRpb25Db21wb25lbnQpIHtcclxuICAgICAgY29uc3QgY2xpZW50UmVjdDogQ2xpZW50UmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICB0aGlzLl9lcnJvclZhbGlkYXRpb25Db21wb25lbnQuaW5zdGFuY2UudG9wID0gY2xpZW50UmVjdC5ib3R0b207XHJcbiAgICAgIHRoaXMuX2Vycm9yVmFsaWRhdGlvbkNvbXBvbmVudC5pbnN0YW5jZS5sZWZ0ID0gY2xpZW50UmVjdC5sZWZ0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcclxuICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb21taXRDbGljaygpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgY2FzZSAnVGFiJzpcclxuICAgICAgICBjb25zdCBuZXh0U2libGluZ1RvRm9jdXMgPSBldmVudC5zaGlmdEtleSA/IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIGFueSkucHJldmlvdXNTaWJsaW5nIDogKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgYW55KS5uZXh0U2libGluZztcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29tbWl0Q2xpY2soKTtcclxuICAgICAgICBpZiAobmV4dFNpYmxpbmdUb0ZvY3VzKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRGb2N1c09uTmV4dFBvc3NpYmxlSW5wdXQobmV4dFNpYmxpbmdUb0ZvY3VzLCBldmVudC5zaGlmdEtleSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgY2FzZSAnRXNjYXBlJzpcclxuICAgICAgICB0aGlzLmNhbmNlbENsaWNrKCk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVOZXdGb2N1c0V2ZW50KGVsZW1lbnQ6IGFueSk6IEV2ZW50IHtcclxuICAgIGxldCBldmVudFR5cGUgPSBcIm9uZm9jdXNpblwiIGluIGVsZW1lbnQgPyBcImZvY3VzaW5cIiA6IFwiZm9jdXNcIixcclxuICAgICAgYnViYmxlcyA9IFwib25mb2N1c2luXCIgaW4gZWxlbWVudCxcclxuICAgICAgZm9jdXNFdmVudDtcclxuXHJcbiAgICBpZiAoXCJjcmVhdGVFdmVudFwiIGluIGRvY3VtZW50KSB7XHJcbiAgICAgIGZvY3VzRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xyXG4gICAgICBmb2N1c0V2ZW50LmluaXRFdmVudChldmVudFR5cGUsIGJ1YmJsZXMsIHRydWUpO1xyXG4gICAgfSBlbHNlIGlmIChcIkV2ZW50XCIgaW4gd2luZG93KSB7XHJcbiAgICAgIGZvY3VzRXZlbnQgPSBuZXcgRXZlbnQoZXZlbnRUeXBlLCB7IGJ1YmJsZXM6IGJ1YmJsZXMsIGNhbmNlbGFibGU6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9jdXNFdmVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEZvY3VzT25OZXh0UG9zc2libGVJbnB1dChlbGVtZW50OiBhbnksIHByZXZpb3VzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbGVtZW50Q29sbCA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7XHJcbiAgICBpZiAoZWxlbWVudENvbGwgJiYgZWxlbWVudENvbGwubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBlbGVtZW50Q29sbFswXTtcclxuICAgICAgaWYgKGlucHV0RWxlbWVudC5kaXNhYmxlZCB8fCBpbnB1dEVsZW1lbnQucmVhZE9ubHkpIHtcclxuICAgICAgICB0aGlzLl9zZXRGb2N1c09uTmV4dFBvc3NpYmxlSW5wdXQocHJldmlvdXMgPyBlbGVtZW50LnByZXZpb3VzU2libGluZyA6IGVsZW1lbnQubmV4dFNpYmxpbmcsIHByZXZpb3VzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBmb2N1c0V2ZW50ID0gdGhpcy5fY3JlYXRlTmV3Rm9jdXNFdmVudChlbGVtZW50KTtcclxuICAgICAgICBpbnB1dEVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICBpbnB1dEVsZW1lbnQuZGlzcGF0Y2hFdmVudChmb2N1c0V2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
769
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYmFzZS9iYXNlLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUVqQix3QkFBd0IsRUFFeEIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWdDLE9BQU8sRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBRW5GLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDOUQsT0FBTyxFQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ2pHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUUxRCxPQUFPLEVBQUMsdUNBQXVDLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUNuSCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFHaEYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sZ0RBQWdELENBQUM7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QUMsYUFBYTtpQ0FLekIsV0FBVyxTQUFDLHFCQUFxQjtzQkFLakMsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzt3QkFVaEMsWUFBWSxTQUFDLFNBQVM7bUNBT3RCLFlBQVksU0FBQyxpQkFBaUI7aUNBSzlCLFlBQVksU0FBQyxlQUFlOzRCQUs1QixZQUFZLFNBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDOztBQWhUbkM7SUFEVSxZQUFZLEVBQUU7d0RBQ2E7QUFHckM7SUFEVSxZQUFZLEVBQUU7cURBQ0U7QUFHMUI7SUFEVSxZQUFZLEVBQUU7d0RBQ0s7QUErRTdCO0lBRFUsWUFBWSxFQUFFO3lEQUNjO0FBNkh0QztJQURVLFlBQVksRUFBRTt1REFDWTtBQUdwQztJQURVLFlBQVksRUFBRTs2REFDa0I7QUFHMUM7SUFEVSxZQUFZLEVBQUU7cURBQ1U7QUFHbEM7SUFEVSxZQUFZLEVBQUU7cURBQ1U7QUFHbEM7SUFEVSxZQUFZLEVBQUU7a0VBQ3VCO0FBRy9DO0lBRFUsWUFBWSxFQUFFOzhEQUNtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnRGYWN0b3J5LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBDb21wb25lbnRSZWYsIENvbnRlbnRDaGlsZCxcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0FzeW5jVmFsaWRhdG9yRm4sIEZvcm1Db250cm9sLCBOZ01vZGVsLCBWYWxpZGF0b3JGbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbkFkYXB0ZXJDb21wb25lbnR9IGZyb20gXCIuL2NvbmZpZ3VyYXRpb24tYWRhcHRlci1jb21wb25lbnQuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7aXNOaWxsfSBmcm9tIFwiLi4vLi4vY29yZS9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7bm90TmlsbH0gZnJvbSBcIi4uLy4uL2NvcmUvZnVuY3Rpb24vbm90LW5pbGwuZnVuY3Rpb25cIjtcclxuaW1wb3J0IHtJbnB1dEJvb2xlYW4sIElucHV0Qm9vbGVhbkRlY29yYXRvcn0gZnJvbSBcIi4uLy4uL2NvcmUvZGVjb3JhdG9yL2lucHV0LWJvb2xlYW4uZGVjb3JhdG9yXCI7XHJcbmltcG9ydCB7cmVxdWlyZWRWYWxpZGF0b3J9IGZyb20gXCIuLi8uLi9jb3JlL3ZhbGlkYXRvci9yZXF1aXJlZC52YWxpZGF0b3JcIjtcclxuaW1wb3J0IHtwcmVjaXNpb25TY2FsZVZhbGlkYXRvcn0gZnJvbSBcIi4uLy4uL2NvcmUvdmFsaWRhdG9yL3ByZWNpc2lvbi1zY2FsZS52YWxpZGF0b3JcIjtcclxuaW1wb3J0IHttYXhTdHJpbmdMZW5ndGhWYWxpZGF0b3J9IGZyb20gXCIuLi8uLi9jb3JlL3ZhbGlkYXRvci9tYXgtc3RyaW5nLWxlbmd0aC52YWxpZGF0b3JcIjtcclxuaW1wb3J0IHtTdHJpbmdVdGlsc30gZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvc3RyaW5nLXV0aWxzXCI7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge0Zvcm1JbnB1dFVzZXJNb2RlbENoYW5nZUxpc3RlbmVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2NvcmUvc2VydmljZS9mb3JtLWlucHV0LXVzZXItY2hhbmdlLWxpc3RlbmVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtOdW1iZXJVdGlsc30gZnJvbSBcIi4uLy4uL2NvcmUvdXRpbHMvbnVtYmVyLXV0aWxzXCI7XHJcbmltcG9ydCB7Tmdab25lV3JhcHBlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb3JlL3NlcnZpY2Uvbmctem9uZS13cmFwcGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtDb3JlQ29tcG9uZW50c0ljb259IGZyb20gXCIuLi8uLi9jb3JlL2VudW0vY29yZS1jb21wb25lbnRzLWljb24uZW51bVwiO1xyXG5pbXBvcnQge0Zvcm1Db21wb25lbnR9IGZyb20gXCIuLi9mb3JtL2Zvcm0uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7VmFsaWRhdGlvbkVycm9yQ29tcG9uZW50fSBmcm9tIFwiLi4vdmFsaWRhdGlvbi1lcnJvci92YWxpZGF0aW9uLWVycm9yLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqXHJcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFsbCBjb25jcmV0ZSBmb3JtIGlucHV0IGNvbXBvbmVudHMgdGhhdCBjb250YWluIGEgbmF0aXZlIDxpbnB1dD4gZWxlbWVudC4gUHJvdmlkZXMgY29tbW9uIGRhdGEgYW5kIGZ1bmN0aW9uYWxpdHksIHN1Y2ggYXNcclxuICogYWRkaW5nIHNlbGYgYXMgYSBjb250cm9sIHRvIHRoZSBwYXJlbnQgZm9ybS5cclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlSW5wdXRDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQ29uZmlndXJhdGlvbkFkYXB0ZXJDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoXCJ2YWxpZGF0aW9uRXJyb3JcIiwge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxyXG4gIHB1YmxpYyB2YWxpZGF0aW9uRXJyb3JDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoTmdNb2RlbCwge3N0YXRpYzogdHJ1ZX0pXHJcbiAgcHVibGljIF9uZ01vZGVsOiBOZ01vZGVsO1xyXG5cclxuICBwdWJsaWMgZ2V0IG5nTW9kZWwoKTogTmdNb2RlbCB7XHJcbiAgICBpZiAodGhpcy5fbXlGb3JtSW5wdXRJbnN0YW5jZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbXlGb3JtSW5wdXRJbnN0YW5jZS5uZ01vZGVsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX25nTW9kZWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEJhc2VGb3JtSW5wdXRDb21wb25lbnRJbmRleDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgc3RhdGljIEhpZGRlbkNsYXNzOiBzdHJpbmcgPSBcImhpZGRlblwiO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaG93U2F2ZUNhbmNlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgbW9kZWwodmFsdWU6IFQpIHtcclxuICAgIGlmICghdGhpcy5faW5pdGlhbE1vZGVsU2V0KSB7XHJcbiAgICAgIHRoaXMuX2luaXRpYWxNb2RlbCA9IHRoaXMuX21vZGVsO1xyXG4gICAgICB0aGlzLl9pbml0aWFsTW9kZWxTZXQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2FuU2F2ZU9yQ2FuY2VsID0gdGhpcy5fbW9kZWwgIT09IHRoaXMuX2luaXRpYWxNb2RlbDtcclxuICAgIHRoaXMuX2NsZWFyRXJyb3JDb21wb25lbnQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogVCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKClcclxuICBwdWJsaWMgbm9WYWxpZGF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKVxyXG4gIHB1YmxpYyBpbml0Rm9jdXM6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKVxyXG4gIHB1YmxpYyBub0NsaWNrRm9jdXM6IGJvb2xlYW47XHJcblxyXG4gIC8vIHVzZWQgdG8gbGluayBmaWVsZCB0byBidXNpbmVzcyBvYmplY3QgZm9yIGRlZXAtdmFsaWRhdGlvblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGJ1c2luZXNzT2JqZWN0SWQ6IGFueTtcclxuXHJcbiAgLy8gQElucHV0KClcclxuICAvLyBwdWJsaWMgZXJyb3JNZXNzYWdlOiBWYWxpZGF0aW9uTWVzc2FnZTtcclxuXHJcbiAgcHVibGljIG5hbWU6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICBpZiAoZGlzYWJsZWQgPT09IHRoaXMuX2Rpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2Rpc2FibGVkID0gSW5wdXRCb29sZWFuRGVjb3JhdG9yLklucHV0VmFsdWVUb0Jvb2xlYW4oZGlzYWJsZWQpO1xyXG4gICAgdGhpcy5fdXBkYXRlQ29udHJvbFZhbGlkYXRvcnNBbmRPd25GbGFncygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBtYXhMZW5ndGgobWF4TGVuZ3RoOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2V0TWF4TGVuZ3RoKG1heExlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIG5vdE5pbGwodGhpcy5mb3JjZWRNYXhMZW5ndGgpID8gdGhpcy5mb3JjZWRNYXhMZW5ndGggOiB0aGlzLl9tYXhMZW5ndGg7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmb3JjZWRNYXhMZW5ndGg6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHJlYWRvbmx5KHJlYWRvbmx5OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fZm9yY2VSZWFkb25seSAhPT0gdW5kZWZpbmVkIHx8IHJlYWRvbmx5ID09PSB0aGlzLl9yZWFkb25seSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZWFkb25seSA9IElucHV0Qm9vbGVhbkRlY29yYXRvci5JbnB1dFZhbHVlVG9Cb29sZWFuKHJlYWRvbmx5KTtcclxuICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xWYWxpZGF0b3JzQW5kT3duRmxhZ3MoKTtcclxuICAgIGlmICh0aGlzLl9oYXNPblB1c2hDZFN0cmF0ZWd5KSB7XHJcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZvcmNlUmVhZG9ubHkgfHwgdGhpcy5fcmVhZG9ubHk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZm9yY2VSZWFkb25seShmb3JjZVJlYWRvbmx5OiBib29sZWFuKSB7XHJcbiAgICBpZiAoZm9yY2VSZWFkb25seSA9PT0gdGhpcy5fZm9yY2VSZWFkb25seSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9mb3JjZVJlYWRvbmx5ID0gSW5wdXRCb29sZWFuRGVjb3JhdG9yLklucHV0VmFsdWVUb0Jvb2xlYW4oZm9yY2VSZWFkb25seSk7XHJcbiAgICB0aGlzLl91cGRhdGVDb250cm9sVmFsaWRhdG9yc0FuZE93bkZsYWdzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGZvcmNlUmVhZG9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VSZWFkb25seTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCByZXF1aXJlZChyZXF1aXJlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKHJlcXVpcmVkID09PSB0aGlzLl9yZXF1aXJlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IElucHV0Qm9vbGVhbkRlY29yYXRvci5JbnB1dFZhbHVlVG9Cb29sZWFuKHJlcXVpcmVkKTtcclxuICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xWYWxpZGF0b3JzQW5kT3duRmxhZ3MoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JjZVJlcXVpcmVkIHx8IHRoaXMuX3JlcXVpcmVkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpXHJcbiAgcHVibGljIGZvcmNlUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTsgIC8vIGEgZm9yY2Ugb3V0c2lkZSBvZiBbY2ZnTmFtZV0ncyBpbmZsdWVuY2VcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHZhbGlkYXRvcnModmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSkge1xyXG4gICAgaWYgKHZhbGlkYXRvcnMgPT09IHRoaXMuX3ZhbGlkYXRvcnMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdmFsaWRhdG9ycyA9IHZhbGlkYXRvcnM7XHJcbiAgICB0aGlzLl91cGRhdGVDb250cm9sVmFsaWRhdG9yc0FuZE93bkZsYWdzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbGlkYXRvcnMoKTogVmFsaWRhdG9yRm5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9ycztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBhc3luY1ZhbGlkYXRvcnModmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JGbltdKSB7XHJcbiAgICB0aGlzLl9hc3luY1ZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzO1xyXG4gICAgdGhpcy5fdXBkYXRlQ29udHJvbFZhbGlkYXRvcnNBbmRPd25GbGFncygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhc3luY1ZhbGlkYXRvcnMoKTogQXN5bmNWYWxpZGF0b3JGbltdIHtcclxuICAgIHJldHVybiB0aGlzLl9hc3luY1ZhbGlkYXRvcnM7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoXCJjbGFzcy5cIiArIEJhc2VJbnB1dENvbXBvbmVudC5IaWRkZW5DbGFzcylcclxuICBwdWJsaWMgc2V0IGhpZGRlbihoaWRkZW46IGJvb2xlYW4pIHtcclxuICAgIGlmIChoaWRkZW4gPT09IHRoaXMuX2hpZGRlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faGlkZGVuID0gaGlkZGVuO1xyXG5cclxuICAgIHRoaXMuX2FkZE9yUmVtb3ZlU2VsZkZyb21Gb3JtKCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9kZXN0cm95ZWQpIHtcclxuICAgICAgaWYgKGhpZGRlbikge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0YWNoKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5yZWF0dGFjaCgpO1xyXG4gICAgICAgIGlmICh0aGlzLl9oYXNPblB1c2hDZFN0cmF0ZWd5KSB7XHJcbiAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXNBZnRlckFuZ3VsYXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmhpZGRlbkNoYW5nZS5lbWl0KGhpZGRlbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhpZGRlbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9oaWRkZW47XHJcbiAgfVxyXG5cclxuICAvLyBubyBjdXN0b20gc2V0dGVyIGxvZ2ljIGFzIHdpdGggdGhlIG90aGVyICdzY3JlZW4gY29uZmlnIHByb3BzJywgYmVjYXVzZSBjb25jcmV0ZSBmb3JtIGlucHV0IGNvbXBvbmVudHMgaGFuZGxlIHRoaXMgdGhlbXNlbHZlcy5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZGVjaW1hbHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fZGVjaW1hbHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVjaW1hbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNpbWFscztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGljb246IENvcmVDb21wb25lbnRzSWNvbjtcclxuXHJcbiAgLy8gR29hbDogYWJpbGl0eSB0byBlbXVsYXRlIHRoZSByZWQgYmFja2dyb3VuZCBvZiBpbnB1dCBmaWVsZHMgKGZvcm0tc3VibWl0dGVkIGludmFsaWQgc3RhdGUpXHJcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY2MtcmVkLWVycm9yLWJhY2tncm91bmRcIilcclxuICBwdWJsaWMgcmVkRXJyb3JCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG15Rm9ybUlucHV0SW5zdGFuY2UodmFsdWU6IEJhc2VJbnB1dENvbXBvbmVudDxUPikge1xyXG4gICAgaWYgKHZhbHVlID09PSB0aGlzLl9teUZvcm1JbnB1dEluc3RhbmNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX215Rm9ybUlucHV0SW5zdGFuY2UgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xWYWxpZGF0b3JzQW5kT3duRmxhZ3MoKTtcclxuICB9XHJcblxyXG4gIGdldCBteUZvcm1JbnB1dEluc3RhbmNlKCk6IEJhc2VJbnB1dENvbXBvbmVudDxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbXlGb3JtSW5wdXRJbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX215Rm9ybUlucHV0SW5zdGFuY2U6IEJhc2VJbnB1dENvbXBvbmVudDxUPjtcclxuXHJcbiAgLy8gQE91dHB1dCgpXHJcbiAgLy8gcHVibGljIGNvbW1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IG5hdGl2ZUJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgYmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIGVtaXRzIHdoZW4gdGhlIGVudGVyIGJ1dHRvbiBvbiBrZXlib2FyZCB3YXMgcHJlc3NlZCB3aGlsZSB0aGlzIGZvcm0gaW5wdXQgaGFkIGZvY3Vzc2VkXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IGVudGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IGZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IGtleURvd246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkga2V5VXA6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSB1c2VyTW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyByZWFkb25seSBoaWRkZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY2MtaW5wdXQtZm9jdXNlZFwiKVxyXG4gIHB1YmxpYyBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBmb3JtQ29tcG9uZW50OiBGb3JtQ29tcG9uZW50O1xyXG5cclxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5mb3JtLWlucHV0XCIpXHJcbiAgcHVibGljIGZvcm1JbnB1dDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBASG9zdEJpbmRpbmcoXCJjbGFzcy5jdXN0b20td2lkdGhcIilcclxuICBwdWJsaWMgY3VzdG9tV2lkdGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpXHJcbiAgcHVibGljIG5vVHJpYW5nbGVHcmFwaGljOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBASG9zdEJpbmRpbmcoXCJjbGFzcy5oYWxmLXdpZHRoXCIpXHJcbiAgcHVibGljIGhhbGZXaWR0aDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgQEhvc3RCaW5kaW5nKFwiY2xhc3MuZnVsbC13aWR0aC1pbXBvcnRhbnRcIilcclxuICBwdWJsaWMgZnVsbFdpZHRoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKVxyXG4gIHB1YmxpYyBleGNsdWRlVXNlck1vZGVsQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKVxyXG4gIHB1YmxpYyBub0Zvcm1Hcm91cENvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuZm9ybS1zdWJtaXR0ZWRcIilcclxuICBwdWJsaWMgZ2V0IGZvcm1TdWJtaXR0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5zdWJtaXR0ZWQ7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5oYXNub2xhYmVsXCIpXHJcbiAgcHVibGljIGdldCBoYXNOb0xhYmVsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGlzTmlsbCh0aGlzLmxhYmVsKTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmhhc3ZhbHVlXCIpXHJcbiAgcHVibGljIGdldCBoYXNWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMubW9kZWwgfHwgU3RyaW5nVXRpbHMuSXNTdHJpbmdXaXRoTGVuZ3RoKHRoaXMubW9kZWwpIHx8IE51bWJlclV0aWxzLklzTnVtYmVyKHRoaXMubW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuaW52YWxpZFwiKVxyXG4gIHB1YmxpYyBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVja1N0YXRlKCkgJiYgIXRoaXMuY29udHJvbC52YWxpZDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmRpc2FibGVkXCIpXHJcbiAgcHVibGljIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MucmVhZC1vbmx5XCIpXHJcbiAgcHVibGljIGdldCBpc1JlYWRvbmx5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHk7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5yZXF1aXJlZFwiKVxyXG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnJlcXVpcmVkO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY2MtdG91Y2hlZC1pbnZhbGlkXCIpXHJcbiAgcHVibGljIGdldCB0b3VjaGVkSW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250cm9sRXhpc3RzKCkgJiYgdGhpcy5jb250cm9sLnRvdWNoZWQgJiYgIXRoaXMuY29udHJvbC52YWxpZDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLnZhbGlkXCIpXHJcbiAgcHVibGljIGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVja1N0YXRlKCkgJiYgdGhpcy5jb250cm9sLnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3Mubm8tdmFsaWRhdGlvblwiKVxyXG4gIHB1YmxpYyBnZXQgdmFsaWRhdGlvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCB8fCB0aGlzLm5vVmFsaWRhdGlvbjtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiLCBbXCIkZXZlbnRcIl0pXHJcbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2FuQ2hhbmdlICYmICF0aGlzLm5vQ2xpY2tGb2N1cykge1xyXG4gICAgICB0aGlzLnJlcXVlc3RGb2N1cygpO1xyXG4gICAgICBpZiAoIXRoaXMuZXhjbHVkZVVzZXJNb2RlbENoYW5nZSkge1xyXG4gICAgICAgIHRoaXMubWFya0FzVXNlclRvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcImZvY3VzaW5cIilcclxuICBvbkZvY3VzSW4oKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZXhjbHVkZVVzZXJNb2RlbENoYW5nZSkge1xyXG4gICAgICB0aGlzLm1hcmtBc1VzZXJUb3VjaGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6c2Nyb2xsXCIpXHJcbiAgcHVibGljIGhhbmRsZURvY3VtZW50U2Nyb2xsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcG9zaXRpb25WYWxpZGF0aW9uRXJyb3IoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIpXHJcbiAgcHVibGljIGhhbmRsZVdpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Bvc2l0aW9uVmFsaWRhdGlvbkVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0pXHJcbiAgcHVibGljIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3dTYXZlQ2FuY2VsICYmIHRoaXMuY2FuU2F2ZU9yQ2FuY2VsKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5DaGFuZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbnRyb2woKTogRm9ybUNvbnRyb2wge1xyXG4gICAgcmV0dXJuIHRoaXMuX215Rm9ybUlucHV0SW5zdGFuY2UgPyB0aGlzLl9teUZvcm1JbnB1dEluc3RhbmNlLmNvbnRyb2wgOiB0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLmNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGZvcm1JbnB1dEluc3RhbmNlKCk6IEJhc2VJbnB1dENvbXBvbmVudDxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbXlGb3JtSW5wdXRJbnN0YW5jZSB8fCB0aGlzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0Rlc3Ryb3llZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXN0cm95ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50O1xyXG5cclxuICBwdWJsaWMga2VlcEZvY3VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNhblNhdmVPckNhbmNlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBAaW1wbGVtZW50cyBDb25maWd1cmF0aW9uQWRhcHRlckNvbXBvbmVudFxyXG4gIHB1YmxpYyBvYmplY3RDb25maWdOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIGNvbW1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY29tbWl0RmluaXNoZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgcHJvdGVjdGVkIF9tYXJrZWRBc1VzZXJUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBfZGVzdHJveWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIF9oYXNPblB1c2hDZFN0cmF0ZWd5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIF9tb2RlbDogVDtcclxuICBwcm90ZWN0ZWQgX2luaXRpYWxNb2RlbDogVDtcclxuICBwcm90ZWN0ZWQgX2luaXRpYWxNb2RlbFNldDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9lcnJvclZhbGlkYXRpb25Db21wb25lbnQ6IENvbXBvbmVudFJlZjxWYWxpZGF0aW9uRXJyb3JDb21wb25lbnQ+O1xyXG4gIHByaXZhdGUgX2RlY2ltYWxzOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfaGlkZGVuOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX21heExlbmd0aDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3JlYWRvbmx5OiBib29sZWFuO1xyXG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIF9mb3JjZVJlYWRvbmx5OiBib29sZWFuID0gdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF92YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgcHJpdmF0ZSBfYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfc3BlZWNoU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfbW9kZWxDaGFuZ2VTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9mb3JtQW55U3VibWl0U3ViOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfZm9ybVJlYWRvbmx5Q2hhbmdlU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfY2xlYXJNYXJrZWRBc1VzZXJUb3VjaGVkU3ViOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByb3RlY3RlZCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBmb3JtVXNlckNoYW5nZUxpc3RlbmVyPzogRm9ybUlucHV0VXNlck1vZGVsQ2hhbmdlTGlzdGVuZXJTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIG5nWm9uZVdyYXBwZXI/OiBOZ1pvbmVXcmFwcGVyU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBlbGVtZW50UmVmPzogRWxlbWVudFJlZixcclxuICApIHtcclxuICAgIEJhc2VJbnB1dENvbXBvbmVudC5CYXNlRm9ybUlucHV0Q29tcG9uZW50SW5kZXgrKztcclxuICAgIHRoaXMubmFtZSA9IEJhc2VJbnB1dENvbXBvbmVudC5CYXNlRm9ybUlucHV0Q29tcG9uZW50SW5kZXgudG9TdHJpbmcoKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtVXNlckNoYW5nZUxpc3RlbmVyKSB7XHJcbiAgICAgIHRoaXMuX2NsZWFyTWFya2VkQXNVc2VyVG91Y2hlZFN1YiA9IHRoaXMuZm9ybVVzZXJDaGFuZ2VMaXN0ZW5lci5jbGVhckFsbE1hcmtlZEFzVXNlclRvdWNoZWQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9tYXJrZWRBc1VzZXJUb3VjaGVkID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9tb2RlbENoYW5nZVN1YiA9IHRoaXMubW9kZWxDaGFuZ2Uuc3Vic2NyaWJlKCh2YWw6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGVsID0gdmFsO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcmVwYXJlSW5wdXQoKTtcclxuXHJcbiAgICB0aGlzLl91cGRhdGVDb250cm9sVmFsaWRhdG9yc0FuZE93bkZsYWdzKCk7XHJcblxyXG4gICAgdGhpcy5fYWRkT3JSZW1vdmVTZWxmRnJvbUZvcm0oKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbXBvbmVudC5yZWFkb25seTtcclxuICAgICAgdGhpcy5fZm9ybVJlYWRvbmx5Q2hhbmdlU3ViID0gdGhpcy5mb3JtQ29tcG9uZW50LnJlYWRvbmx5Q2hhbmdlLnN1YnNjcmliZSgoaXNGb3JtUmVhZG9ubHk6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gaXNGb3JtUmVhZG9ubHk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmluaXRGb2N1cykge1xyXG4gICAgICBzZXRUaW1lb3V0KHRoaXMucmVxdWVzdEZvY3VzLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbnB1dCkge1xyXG4gICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZXZlbnQpID0+IHRoaXMuZG9CbHVyKGV2ZW50KSk7XHJcbiAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoZXZlbnQpID0+IHRoaXMuZG9Gb2N1cyhldmVudCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Rlc3Ryb3llZCA9IHRydWU7XHJcbiAgICB0aGlzLl9jbGVhckVycm9yQ29tcG9uZW50KCk7XHJcblxyXG4gICAgLy8gaWYgKHRoaXMudG9vbHRpcE1hbmFnZXIgJiYgdGhpcy5lbGVtZW50UmVmKSB7XHJcbiAgICAvLyAgICAgdGhpcy50b29sdGlwTWFuYWdlci5kZXN0cm95RXJyb3JUb29sdGlwT2ZFbGVtZW50KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5fbW9kZWxDaGFuZ2VTdWIpIHtcclxuICAgICAgdGhpcy5fbW9kZWxDaGFuZ2VTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9zcGVlY2hTdWIpIHtcclxuICAgICAgdGhpcy5fc3BlZWNoU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fZm9ybUFueVN1Ym1pdFN1Yikge1xyXG4gICAgICB0aGlzLl9mb3JtQW55U3VibWl0U3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fZm9ybVJlYWRvbmx5Q2hhbmdlU3ViKSB7XHJcbiAgICAgIHRoaXMuX2Zvcm1SZWFkb25seUNoYW5nZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2NsZWFyTWFya2VkQXNVc2VyVG91Y2hlZFN1Yikge1xyXG4gICAgICB0aGlzLl9jbGVhck1hcmtlZEFzVXNlclRvdWNoZWRTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuX3JlbW92ZVNlbGZGcm9tRm9ybSgpO1xyXG4gICAgdGhpcy5lbGVtZW50UmVmID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuaW5wdXQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvLyBkZXNjZW5kZW50cyBzaG91bGQgb3ZlcnJpZGUgdGhpc1xyXG4gIHB1YmxpYyBjb21taXQgPSBhc3luYyAobW9kZWw6IGFueSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb21taXRDbGljayhldmVudD86IE1vdXNlRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMua2VlcEZvY3VzID0gdHJ1ZTtcclxuICAgIHRoaXMuY29tbWl0RmluaXNoZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuY29tbWl0dGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb21taXQodGhpcy5tb2RlbCk7XHJcbiAgICB0aGlzLmtlZXBGb2N1cyA9IGZhbHNlO1xyXG4gICAgYXdhaXQgdGhpcy5fY29tbWl0RmluaXNoZWQoKTtcclxuICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgIHRoaXMuZG9CbHVyKGV2ZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdWNjZXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbENsaWNrKGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5rZWVwRm9jdXMgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuX2luaXRpYWxNb2RlbFNldCkge1xyXG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5faW5pdGlhbE1vZGVsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5rZWVwRm9jdXMgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93VmFsaWRhdGlvbkVycm9yKGVycm9yOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRpb25FcnJvckNvbnRhaW5lcikge1xyXG4gICAgICBpZiAodGhpcy5fZXJyb3JWYWxpZGF0aW9uQ29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYXJFcnJvckNvbXBvbmVudCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8VmFsaWRhdGlvbkVycm9yQ29tcG9uZW50PiA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFZhbGlkYXRpb25FcnJvckNvbXBvbmVudCk7XHJcbiAgICAgIHRoaXMuX2Vycm9yVmFsaWRhdGlvbkNvbXBvbmVudCA9IHRoaXMudmFsaWRhdGlvbkVycm9yQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcclxuICAgICAgdGhpcy5fZXJyb3JWYWxpZGF0aW9uQ29tcG9uZW50Lmluc3RhbmNlLmVycm9yID0gZXJyb3I7XHJcbiAgICAgIGlmICh0aGlzLl9oYXNPblB1c2hDZFN0cmF0ZWd5KSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9wb3NpdGlvblZhbGlkYXRpb25FcnJvcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgYSBtb2RlbENoYW5nZSBldmVudCB3aXRoIGdpdmVuIHZhbHVlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIG1vZGVsIG9mIHRoaXMgZm9ybSBpbnB1dFxyXG4gICAqIGhhcyBjaGFuZ2VkIGFuZCBpdHMgbmV3IHZhbHVlIGlzIGdpdmVuIHZhbHVlLiBBbHNvIGVtaXRzIHVzZXJNb2RlbENoYW5nZSBpZiBtYXJrZWRBc1VzZXJUb3VjaGVkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRNb2RlbCh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm1vZGVsID0gdmFsdWU7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLl9tYXJrZWRBc1VzZXJUb3VjaGVkICYmIHRoaXMuZm9ybVVzZXJDaGFuZ2VMaXN0ZW5lcikge1xyXG4gICAgICB0aGlzLmZvcm1Vc2VyQ2hhbmdlTGlzdGVuZXIudXNlck1vZGVsQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gICAgICB0aGlzLnVzZXJNb2RlbENoYW5nZS5uZXh0KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faGFzT25QdXNoQ2RTdHJhdGVneSkge1xyXG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXF1ZXN0Rm9jdXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jYW5DaGFuZ2UgJiYgdGhpcy5pbnB1dCkge1xyXG4gICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLl9oYXNPblB1c2hDZFN0cmF0ZWd5KSB7XHJcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvRm9jdXMoZXZlbnQ/OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdGlhbE1vZGVsU2V0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jYW5TYXZlT3JDYW5jZWwgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLl9oYXNPblB1c2hDZFN0cmF0ZWd5KSB7XHJcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvY3VzLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb0JsdXIoZXZlbnQ/OiBhbnkpOiBhbnkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmtlZXBGb2N1cykge1xyXG4gICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuX2hhc09uUHVzaENkU3RyYXRlZ3kpIHtcclxuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlucHV0KSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5ibHVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ibHVyLm5leHQoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fZGVzdHJveWVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1hcmtGb3JDaGVjaygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fZGVzdHJveWVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGV0ZWN0Q2hhbmdlc0FmdGVyQW5ndWxhcigpOiB2b2lkIHtcclxuICAgIGlmICghIXRoaXMubmdab25lV3JhcHBlcikge1xyXG4gICAgICB0aGlzLm5nWm9uZVdyYXBwZXIuc2V0VGltZW91dE91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2hhc09uUHVzaENkU3RyYXRlZ3kpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaW5rcyB0aGUgZ2l2ZW4gZm9ybUNvbXAuc3VibWl0IGV2ZW50IHRvIHRoZSBmaXJpbmcgb2YgZGV0ZWN0Q2hhbmdlcygpIG9mIGdpdmVuIGNoYW5nZSBkZXRlY3Rvci4gVGhpcyBpcyBhICd1dGlsaXR5LWxpa2UnIG1ldGhvZCxcclxuICAgKiBidXQgd2UgbWFuYWdlIHRoZSBhY3R1YWwgc3Vic2NyaXB0aW9uICh3aXRoIFVOU1VCU0NSSUJFKCkhKSBvbiB0aGlzIGJhc2UgY2xhc3MuXHJcbiAgICogQHBhcmFtIGZvcm1Db21wIFRoZSBmb3JtIHdob3NlIHN1Ym1pdCB3ZSB3YW50IHRvIGxpbmsgd2l0aCB0aGUgY2FsbCBvZiAuZGV0ZWN0Q2hhbmdlcygpIG9uIGdpdmVuIGNoYW5nZSBkZXRlY3RvciByZWYuXHJcbiAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIFRoaXMgc2hvdWxkIGJlIGdpdmVuIGFzIHBhcmFtLiBJIGNob29zZSBub3QgdG8gbWFrZSB0aGlzIHBhcnQgb2Ygb3VyIChCYXNlRm9ybUlucHV0Q29tcG9uZW50KSBjb25zdHJ1Y3RvcixcclxuICAgKiBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSAyMSBleHRlbmRlcnMuXHJcbiAgICovXHJcbiAgLy8gcHVibGljIGxpbmtGb3JtQW55U3VibWl0V2l0aERldGVjdENoYW5nZXMoZm9ybUNvbXA6IEZvcm1Db21wb25lbnQsIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gIC8vICAgICBpZiAoZm9ybUNvbXAgJiYgY2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAvLyAgICAgICAgIHRoaXMuX2Zvcm1BbnlTdWJtaXRTdWIgPSBmb3JtQ29tcC5hbnlTdWJtaXQuc3Vic2NyaWJlKCgoKSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLl9kZXN0cm95ZWQpIHtcclxuICAvLyAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIC8vICAgICAgICAgICAgIH1cclxuICAvLyAgICAgICAgIH0pKTtcclxuICAvLyAgICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIG1hcmtBc1VzZXJUb3VjaGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWFya2VkQXNVc2VyVG91Y2hlZCA9IHRydWU7XHJcbiAgICB0aGlzLnJlZEVycm9yQmFja2dyb3VuZCA9IGZhbHNlOyAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyB0aGF0XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJNYXJrZWRBc1VzZXJUb3VjaGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWFya2VkQXNVc2VyVG91Y2hlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy91c2VkIGZvciBkZXNjZW5kZW50cywgYmVjYXVzZSBkZXNjZW5kZW50cyBjYW4ndCBzZXQgc3VwZXIgcHJvcGVydGllcywgc2VlIElucHV0TnVtYmVyQ29tcG9uZW50XHJcbiAgcHJvdGVjdGVkIHNldE1heExlbmd0aChtYXhMZW5ndGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKG5vdE5pbGwodGhpcy5mb3JjZWRNYXhMZW5ndGgpIHx8IG1heExlbmd0aCA9PT0gdGhpcy5fbWF4TGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTmFOKG1heExlbmd0aCkpIHtcclxuICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xyXG4gICAgICB0aGlzLl91cGRhdGVDb250cm9sVmFsaWRhdG9yc0FuZE93bkZsYWdzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX21hcmtBc09uUHVzaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2hhc09uUHVzaENkU3RyYXRlZ3kgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9jaGVja1N0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMubmdNb2RlbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtU3VibWl0dGVkIHx8ICh0aGlzLl9jb250cm9sRXhpc3RzKCkgJiYgdGhpcy5jb250cm9sLnRvdWNoZWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUGxhY2UgdmFsaWRhdG9ycyBvbnRvIG91ciBBbmd1bGFyJ3MgRm9ybUNvbnRyb2wuXHJcbiAgcHJvdGVjdGVkIF91cGRhdGVDb250cm9sVmFsaWRhdG9yc0FuZE93bkZsYWdzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXI6IEVsZW1lbnRSZWYgPSB0aGlzLm15Rm9ybUlucHV0SW5zdGFuY2UgPyB0aGlzLm15Rm9ybUlucHV0SW5zdGFuY2UuZWxlbWVudFJlZiA6IHRoaXMuZWxlbWVudFJlZjtcclxuICAgIC8vIGlmICh0aGlzLnRvb2x0aXBNYW5hZ2VyICYmIGVyKSB7XHJcbiAgICAvLyAgICAgdGhpcy50b29sdGlwTWFuYWdlci5kZXN0cm95RXJyb3JUb29sdGlwT2ZFbGVtZW50KGVyLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5fc2V0TmF0aXZlUmVxdWlyZWQodGhpcy5yZXF1aXJlZCk7XHJcbiAgICB0aGlzLl9zZXROYXRpdmVNYXhMZW5ndGgodGhpcy5tYXhMZW5ndGgpO1xyXG4gICAgdGhpcy5fc2V0TmF0aXZlRGlzYWJsZWQodGhpcy5kaXNhYmxlZCk7XHJcbiAgICB0aGlzLl9zZXROYXRpdmVSZWFkT25seSh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9yY2VSZWFkb25seSk7XHJcblxyXG4gICAgdGhpcy5yZWRFcnJvckJhY2tncm91bmQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLl9jb250cm9sRXhpc3RzKCkpIHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG5cclxuICAgICAgLy8gYWRkIHJlcXVpcmVkXHJcbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHJlcXVpcmVkVmFsaWRhdG9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWRkIG1heGxlbmd0aFxyXG4gICAgICBpZiAobm90TmlsbCh0aGlzLl9tYXhMZW5ndGgpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVjaW1hbHMpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChwcmVjaXNpb25TY2FsZVZhbGlkYXRvcih0aGlzLl9tYXhMZW5ndGgsIHRoaXMuZGVjaW1hbHMpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKG1heFN0cmluZ0xlbmd0aFZhbGlkYXRvcih0aGlzLl9tYXhMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBASW5wdXQoKS1lZCB2YWxpZGF0b3JzXHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaCguLi50aGlzLl92YWxpZGF0b3JzKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl92YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9ycy5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsaWRhdG9yID09PSByZXF1aXJlZFZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldE5hdGl2ZVJlcXVpcmVkKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgICAgdGhpcy5jb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLl9hc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgICB0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tbWl0RmluaXNoZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHRoaXMuY29tbWl0RmluaXNoZWQgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNvbW1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgIH0sIDgwMCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFyRXJyb3JDb21wb25lbnQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uRXJyb3JDb250YWluZXIpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JDb250YWluZXIuY2xlYXIoKTtcclxuICAgICAgaWYgKHRoaXMuX2Vycm9yVmFsaWRhdGlvbkNvbXBvbmVudCkge1xyXG4gICAgICAgIHRoaXMuX2Vycm9yVmFsaWRhdGlvbkNvbXBvbmVudC5kZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5fZXJyb3JWYWxpZGF0aW9uQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gd2hldGhlciB0aGlzLm5nTW9kZWwuY29udHJvbCBoYXMgc2FmZSBhY2Nlc3NcclxuICBwcml2YXRlIF9jb250cm9sRXhpc3RzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubmdNb2RlbCAmJiAhIXRoaXMuY29udHJvbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbnRyb2xJc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xFeGlzdHMoKSAmJiB0aGlzLmNvbnRyb2wudmFsaWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXROYXRpdmVEaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5wdXQpIHtcclxuICAgICAgdGhpcy5pbnB1dC5kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0TmF0aXZlTWF4TGVuZ3RoKG1heGxlbmd0aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbnB1dCAmJiAhaXNOYU4obWF4bGVuZ3RoKSkge1xyXG4gICAgICB0aGlzLmlucHV0Lm1heExlbmd0aCA9IG1heGxlbmd0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfc2V0TmF0aXZlUmVhZE9ubHkocmVhZG9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlucHV0KSB7XHJcbiAgICAgIHRoaXMuaW5wdXQucmVhZE9ubHkgPSByZWFkb25seTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldE5hdGl2ZVJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbnB1dCkge1xyXG4gICAgICB0aGlzLmlucHV0LnJlcXVpcmVkID0gcmVxdWlyZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdWJzY3JpYmVUb1NwZWVjaElucHV0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5fc3BlZWNoU3ViID0gdGhpcy5zcGVlY2hJbnB1dC5zcGVlY2hJbnB1dC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgIC8vICAgICBpZiAodGhpcy5mb2N1c2VkICYmIHRoaXMuX2NvbnRyb2xFeGlzdHMoKSkge1xyXG4gICAgLy8gICAgICAgICBjb25zdCB2YWw6IHN0cmluZyA9IHRoaXMuY29udHJvbC52YWx1ZTtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZXRNb2RlbCgoU3RyaW5nVXRpbHMuSXNTdHJpbmcodmFsKSA/IHZhbCA6ICcnKSArIGRhdGEpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkT3JSZW1vdmVTZWxmRnJvbUZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oaWRkZW4pIHtcclxuICAgICAgdGhpcy5fcmVtb3ZlU2VsZkZyb21Gb3JtKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hZGRTZWxmVG9Gb3JtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVTZWxmSW5Gb3JtKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmZvcm1Db21wb25lbnQudXBkYXRlRm9ybUlucHV0KHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlU2VsZkZyb21Gb3JtKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCAmJiB0aGlzLm5nTW9kZWwpIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcG9uZW50LnJlbW92ZUZvcm1JbnB1dCh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZFNlbGZUb0Zvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMubmdNb2RlbCAmJiAhdGhpcy5ub0Zvcm1Hcm91cENvbnRyb2wpIHtcclxuICAgICAgdGhpcy5mb3JtQ29tcG9uZW50LnJlbW92ZUZvcm1JbnB1dCh0aGlzKTsgLy8gcHJldmVudGluZyB0aGVyZSBhcmUgdHdvIGNvbnRyb2xzIGluIGZvcm1ncm91cCB3aGVuIG15Rm9ybUlucHV0SW5zdGFuY2UgaXMgKGJlaW5nKSBzZXRcclxuICAgICAgdGhpcy5mb3JtQ29tcG9uZW50LmFkZEZvcm1JbnB1dCh0aGlzLm15Rm9ybUlucHV0SW5zdGFuY2UgPyB0aGlzLm15Rm9ybUlucHV0SW5zdGFuY2UgOiB0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVJbnB1dCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVsZW1lbnRSZWYgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgLy90cnkgdG8gZmluZCBpbnB1dCBlbGVtZW50XHJcbiAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLl9maW5kSW5wdXROb2RlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuKTtcclxuICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcclxuICAgICAgICB0aGlzLmlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZXZlbnQpID0+IHRoaXMuZG9CbHVyKGV2ZW50KSk7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIChldmVudCkgPT4gdGhpcy5kb0ZvY3VzKGV2ZW50KSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRJbnB1dE5vZGUobm9kZXMpOiBhbnkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XHJcbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kSW5wdXROb2RlKG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wb3NpdGlvblZhbGlkYXRpb25FcnJvcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVsZW1lbnRSZWYgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5fZXJyb3JWYWxpZGF0aW9uQ29tcG9uZW50KSB7XHJcbiAgICAgIGNvbnN0IGNsaWVudFJlY3Q6IENsaWVudFJlY3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgdGhpcy5fZXJyb3JWYWxpZGF0aW9uQ29tcG9uZW50Lmluc3RhbmNlLnRvcCA9IGNsaWVudFJlY3QuYm90dG9tO1xyXG4gICAgICB0aGlzLl9lcnJvclZhbGlkYXRpb25Db21wb25lbnQuaW5zdGFuY2UubGVmdCA9IGNsaWVudFJlY3QubGVmdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29tbWl0Q2xpY2soKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGNhc2UgJ1RhYic6XHJcbiAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdUb0ZvY3VzID0gZXZlbnQuc2hpZnRLZXkgPyAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBhbnkpLnByZXZpb3VzU2libGluZyA6IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIGFueSkubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBjb25zdCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb21taXRDbGljaygpO1xyXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgICBpZiAobmV4dFNpYmxpbmdUb0ZvY3VzKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Rm9jdXNPbk5leHRQb3NzaWJsZUlucHV0KG5leHRTaWJsaW5nVG9Gb2N1cywgZXZlbnQuc2hpZnRLZXkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBjYXNlICdFc2NhcGUnOlxyXG4gICAgICAgIHRoaXMuY2FuY2VsQ2xpY2soKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZU5ld0ZvY3VzRXZlbnQoZWxlbWVudDogYW55KTogRXZlbnQge1xyXG4gICAgbGV0IGV2ZW50VHlwZSA9IFwib25mb2N1c2luXCIgaW4gZWxlbWVudCA/IFwiZm9jdXNpblwiIDogXCJmb2N1c1wiLFxyXG4gICAgICBidWJibGVzID0gXCJvbmZvY3VzaW5cIiBpbiBlbGVtZW50LFxyXG4gICAgICBmb2N1c0V2ZW50O1xyXG5cclxuICAgIGlmIChcImNyZWF0ZUV2ZW50XCIgaW4gZG9jdW1lbnQpIHtcclxuICAgICAgZm9jdXNFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XHJcbiAgICAgIGZvY3VzRXZlbnQuaW5pdEV2ZW50KGV2ZW50VHlwZSwgYnViYmxlcywgdHJ1ZSk7XHJcbiAgICB9IGVsc2UgaWYgKFwiRXZlbnRcIiBpbiB3aW5kb3cpIHtcclxuICAgICAgZm9jdXNFdmVudCA9IG5ldyBFdmVudChldmVudFR5cGUsIHsgYnViYmxlczogYnViYmxlcywgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb2N1c0V2ZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0Rm9jdXNPbk5leHRQb3NzaWJsZUlucHV0KGVsZW1lbnQ6IGFueSwgcHJldmlvdXM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGVsZW1lbnRDb2xsID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcclxuICAgIGlmIChlbGVtZW50Q29sbCAmJiBlbGVtZW50Q29sbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGVsZW1lbnRDb2xsWzBdO1xyXG4gICAgICBpZiAoaW5wdXRFbGVtZW50LmRpc2FibGVkIHx8IGlucHV0RWxlbWVudC5yZWFkT25seSkge1xyXG4gICAgICAgIHRoaXMuX3NldEZvY3VzT25OZXh0UG9zc2libGVJbnB1dChwcmV2aW91cyA/IGVsZW1lbnQucHJldmlvdXNTaWJsaW5nIDogZWxlbWVudC5uZXh0U2libGluZywgcHJldmlvdXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZvY3VzRXZlbnQgPSB0aGlzLl9jcmVhdGVOZXdGb2N1c0V2ZW50KGVsZW1lbnQpO1xyXG4gICAgICAgIGlucHV0RWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIGlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGZvY3VzRXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,92 @@
1
+ import { Component, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, ViewChildren, ViewEncapsulation } from "@angular/core";
2
+ import { animate, state, style, transition, trigger } from "@angular/animations";
3
+ export class CommitButtonsComponent {
4
+ constructor(_renderer) {
5
+ this._renderer = _renderer;
6
+ this.cancelClick = new EventEmitter();
7
+ this.commitClick = new EventEmitter();
8
+ this._committing = false;
9
+ this._commitFinished = false;
10
+ this._handleAnimationIteration = (event) => {
11
+ this._renderer.removeClass(event.currentTarget, 'animate');
12
+ event.currentTarget.removeEventListener('animationiteration', this._handleAnimationIteration);
13
+ // elem.removeEventListener('webkitAnimationIteration', () => this._handleAnimationIteration(elem));
14
+ };
15
+ }
16
+ set content(children) {
17
+ this.animateDivs = children.toArray();
18
+ this._checkAnimation();
19
+ }
20
+ set committing(value) {
21
+ this._committing = value;
22
+ this._checkAnimation();
23
+ }
24
+ get committing() {
25
+ return this._committing;
26
+ }
27
+ set commitFinished(value) {
28
+ this._commitFinished = value;
29
+ this._checkAnimationFinished();
30
+ }
31
+ get commitFinished() {
32
+ return this._commitFinished;
33
+ }
34
+ showClass() {
35
+ return true;
36
+ }
37
+ _checkAnimation() {
38
+ if (this.committing && this.animateDivs) {
39
+ this.animateDivs.forEach(a => this._renderer.addClass(a.nativeElement, 'animate'));
40
+ }
41
+ }
42
+ _checkAnimationFinished() {
43
+ if (this.commitFinished && this.animateDivs) {
44
+ this.animateDivs.forEach(a => {
45
+ a.nativeElement.addEventListener('animationiteration', this._handleAnimationIteration);
46
+ // a.nativeElement.addEventListener('webkitAnimationIteration', (event) => this._handleAnimationIteration(event));
47
+ });
48
+ }
49
+ }
50
+ }
51
+ CommitButtonsComponent.decorators = [
52
+ { type: Component, args: [{
53
+ selector: "co-commit-buttons",
54
+ template: `
55
+ <div class="commit-buttons-wrapper" @showHideSaveCancel>
56
+ <div class="commit-buttons-button save" [class.finished]="commitFinished"
57
+ (click)="commitClick.emit($event)">
58
+ <div class="save-button-spinner" *ngIf="committing || commitFinished">
59
+ <div #animatediv></div>
60
+ <div #animatediv></div>
61
+ <div #animatediv></div>
62
+ <div #animatediv></div>
63
+ </div>
64
+ <div class="spinner-checkmark" *ngIf="!committing || commitFinished"></div>
65
+ </div>
66
+ <div class="commit-buttons-button cancel" (click)="cancelClick.emit($event)">
67
+ <div class="cancel-button"></div>
68
+ </div>
69
+ </div>
70
+ `,
71
+ animations: [
72
+ trigger('showHideSaveCancel', [
73
+ state('*', style({ transform: 'scaleY(1)', opacity: 1 })),
74
+ state('void', style({ transform: 'scaleY(0)', opacity: 0 })),
75
+ transition('void <=> *', animate(200))
76
+ ]),
77
+ ],
78
+ encapsulation: ViewEncapsulation.None
79
+ },] }
80
+ ];
81
+ CommitButtonsComponent.ctorParameters = () => [
82
+ { type: Renderer2 }
83
+ ];
84
+ CommitButtonsComponent.propDecorators = {
85
+ content: [{ type: ViewChildren, args: ['animatediv', { read: ElementRef },] }],
86
+ committing: [{ type: Input }],
87
+ commitFinished: [{ type: Input }],
88
+ cancelClick: [{ type: Output }],
89
+ commitClick: [{ type: Output }],
90
+ showClass: [{ type: HostBinding, args: ["class.co-commit-buttons",] }]
91
+ };
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0LWJ1dHRvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UvY29tbWl0LWJ1dHRvbnMvY29tbWl0LWJ1dHRvbnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFFTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBOEIvRSxNQUFNLE9BQU8sc0JBQXNCO0lBeUNqQyxZQUFvQixTQUFvQjtRQUFwQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBYmpDLGdCQUFXLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7UUFHdkUsZ0JBQVcsR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQU90RSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQW9CakMsOEJBQXlCLEdBQUcsQ0FBQyxLQUFxQixFQUFFLEVBQUU7WUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxLQUFLLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzlGLG9HQUFvRztRQUN0RyxDQUFDLENBQUE7SUFyQkQsQ0FBQztJQXpDRCxJQUFzRCxPQUFPLENBQUMsUUFBUTtRQUNwRSxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUdELElBQ1csVUFBVSxDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUNXLGNBQWMsQ0FBQyxLQUFjO1FBQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFTTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBUU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUNwRjtJQUNILENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNCLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQ3ZGLGtIQUFrSDtZQUNwSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7O1lBckZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQlQ7Z0JBQ0QsVUFBVSxFQUFFO29CQUNWLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTt3QkFDNUIsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO3dCQUN2RCxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7d0JBQzFELFVBQVUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN2QyxDQUFDO2lCQUNIO2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7WUFqQ0MsU0FBUzs7O3NCQW1DUixZQUFZLFNBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTt5QkFNL0MsS0FBSzs2QkFVTCxLQUFLOzBCQVVMLE1BQU07MEJBR04sTUFBTTt3QkFHTixXQUFXLFNBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJjby1jb21taXQtYnV0dG9uc1wiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29tbWl0LWJ1dHRvbnMtd3JhcHBlclwiIEBzaG93SGlkZVNhdmVDYW5jZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb21taXQtYnV0dG9ucy1idXR0b24gc2F2ZVwiIFtjbGFzcy5maW5pc2hlZF09XCJjb21taXRGaW5pc2hlZFwiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cImNvbW1pdENsaWNrLmVtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlLWJ1dHRvbi1zcGlubmVyXCIgKm5nSWY9XCJjb21taXR0aW5nIHx8IGNvbW1pdEZpbmlzaGVkXCI+XHJcbiAgICAgICAgICA8ZGl2ICNhbmltYXRlZGl2PjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAjYW5pbWF0ZWRpdj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgI2FuaW1hdGVkaXY+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICNhbmltYXRlZGl2PjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWNoZWNrbWFya1wiICpuZ0lmPVwiIWNvbW1pdHRpbmcgfHwgY29tbWl0RmluaXNoZWRcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb21taXQtYnV0dG9ucy1idXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cImNhbmNlbENsaWNrLmVtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdzaG93SGlkZVNhdmVDYW5jZWwnLCBbXHJcbiAgICAgIHN0YXRlKCcqJywgc3R5bGUoe3RyYW5zZm9ybTogJ3NjYWxlWSgxKScsIG9wYWNpdHk6IDF9KSksXHJcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoe3RyYW5zZm9ybTogJ3NjYWxlWSgwKScsIG9wYWNpdHk6IDB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPD0+IConLCBhbmltYXRlKDIwMCkpXHJcbiAgICBdKSxcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbW1pdEJ1dHRvbnNDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2FuaW1hdGVkaXYnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgc2V0IGNvbnRlbnQoY2hpbGRyZW4pIHtcclxuICAgIHRoaXMuYW5pbWF0ZURpdnMgPSBjaGlsZHJlbi50b0FycmF5KCk7XHJcbiAgICB0aGlzLl9jaGVja0FuaW1hdGlvbigpO1xyXG4gIH1cclxuICBwdWJsaWMgYW5pbWF0ZURpdnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGNvbW1pdHRpbmcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2NvbW1pdHRpbmcgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2NoZWNrQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbW1pdHRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tbWl0dGluZztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBjb21taXRGaW5pc2hlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fY29tbWl0RmluaXNoZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2NoZWNrQW5pbWF0aW9uRmluaXNoZWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29tbWl0RmluaXNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tbWl0RmluaXNoZWQ7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgY2FuY2VsQ2xpY2s6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGNvbW1pdENsaWNrOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmNvLWNvbW1pdC1idXR0b25zXCIpXHJcbiAgcHVibGljIHNob3dDbGFzcygpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tbWl0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NvbW1pdEZpbmlzaGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIpIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWNrQW5pbWF0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29tbWl0dGluZyAmJiB0aGlzLmFuaW1hdGVEaXZzKSB7XHJcbiAgICAgIHRoaXMuYW5pbWF0ZURpdnMuZm9yRWFjaChhID0+IHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKGEubmF0aXZlRWxlbWVudCwgJ2FuaW1hdGUnKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGVja0FuaW1hdGlvbkZpbmlzaGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29tbWl0RmluaXNoZWQgJiYgdGhpcy5hbmltYXRlRGl2cykge1xyXG4gICAgICB0aGlzLmFuaW1hdGVEaXZzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgYS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbml0ZXJhdGlvbicsIHRoaXMuX2hhbmRsZUFuaW1hdGlvbkl0ZXJhdGlvbik7XHJcbiAgICAgICAgLy8gYS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbicsIChldmVudCkgPT4gdGhpcy5faGFuZGxlQW5pbWF0aW9uSXRlcmF0aW9uKGV2ZW50KSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQW5pbWF0aW9uSXRlcmF0aW9uID0gKGV2ZW50OiBBbmltYXRpb25FdmVudCkgPT4ge1xyXG4gICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3MoZXZlbnQuY3VycmVudFRhcmdldCwnYW5pbWF0ZScpO1xyXG4gICAgZXZlbnQuY3VycmVudFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdhbmltYXRpb25pdGVyYXRpb24nLCB0aGlzLl9oYW5kbGVBbmltYXRpb25JdGVyYXRpb24pO1xyXG4gICAgLy8gZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJraXRBbmltYXRpb25JdGVyYXRpb24nLCAoKSA9PiB0aGlzLl9oYW5kbGVBbmltYXRpb25JdGVyYXRpb24oZWxlbSkpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { CommitButtonsComponent } from "./commit-buttons.component";
4
+ export class CommitButtonsModule {
5
+ }
6
+ CommitButtonsModule.decorators = [
7
+ { type: NgModule, args: [{
8
+ imports: [
9
+ CommonModule
10
+ ],
11
+ declarations: [
12
+ CommitButtonsComponent
13
+ ],
14
+ exports: [
15
+ CommitButtonsComponent
16
+ ]
17
+ },] }
18
+ ];
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0LWJ1dHRvbnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UvY29tbWl0LWJ1dHRvbnMvY29tbWl0LWJ1dHRvbnMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBYWxFLE1BQU0sT0FBTyxtQkFBbUI7OztZQVgvQixRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFO29CQUNQLFlBQVk7aUJBQ2I7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLHNCQUFzQjtpQkFDdkI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLHNCQUFzQjtpQkFDdkI7YUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7Q29tbWl0QnV0dG9uc0NvbXBvbmVudH0gZnJvbSBcIi4vY29tbWl0LWJ1dHRvbnMuY29tcG9uZW50XCI7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBDb21taXRCdXR0b25zQ29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBDb21taXRCdXR0b25zQ29tcG9uZW50XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbWl0QnV0dG9uc01vZHVsZSB7XHJcbn1cclxuIl19