igniteui-angular 15.1.30 → 15.1.31

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 (67) hide show
  1. package/esm2020/lib/action-strip/action-strip.component.mjs +3 -3
  2. package/esm2020/lib/action-strip/grid-actions/grid-action-button.component.mjs +3 -3
  3. package/esm2020/lib/banner/banner.component.mjs +8 -8
  4. package/esm2020/lib/card/card.component.mjs +3 -3
  5. package/esm2020/lib/carousel/carousel.component.mjs +7 -7
  6. package/esm2020/lib/combo/combo-dropdown.component.mjs +3 -3
  7. package/esm2020/lib/combo/combo.common.mjs +5 -5
  8. package/esm2020/lib/combo/combo.component.mjs +3 -3
  9. package/esm2020/lib/combo/combo.directives.mjs +2 -2
  10. package/esm2020/lib/core/navigation/directives.mjs +3 -3
  11. package/esm2020/lib/date-common/calendar-container/calendar-container.component.mjs +3 -3
  12. package/esm2020/lib/date-picker/date-picker.component.mjs +7 -7
  13. package/esm2020/lib/date-range-picker/date-range-picker.component.mjs +6 -6
  14. package/esm2020/lib/dialog/dialog.component.mjs +5 -5
  15. package/esm2020/lib/directives/button/button.directive.mjs +8 -8
  16. package/esm2020/lib/directives/ripple/ripple.directive.mjs +6 -6
  17. package/esm2020/lib/directives/tooltip/tooltip-target.directive.mjs +7 -9
  18. package/esm2020/lib/directives/tooltip/tooltip.directive.mjs +2 -2
  19. package/esm2020/lib/drop-down/drop-down.component.mjs +3 -3
  20. package/esm2020/lib/expansion-panel/expansion-panel.component.mjs +4 -4
  21. package/esm2020/lib/grids/column-actions/column-actions.component.mjs +3 -3
  22. package/esm2020/lib/grids/common/crud.service.mjs +2 -2
  23. package/esm2020/lib/grids/filtering/base/grid-filtering-row.component.mjs +3 -3
  24. package/esm2020/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +3 -3
  25. package/esm2020/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +3 -3
  26. package/esm2020/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +3 -3
  27. package/esm2020/lib/grids/filtering/excel-style/excel-style-header.component.mjs +3 -3
  28. package/esm2020/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +3 -3
  29. package/esm2020/lib/grids/filtering/excel-style/excel-style-search.component.mjs +3 -3
  30. package/esm2020/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +3 -3
  31. package/esm2020/lib/grids/grid/grid.component.mjs +3 -3
  32. package/esm2020/lib/grids/grid-base.directive.mjs +4 -4
  33. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +3 -3
  34. package/esm2020/lib/grids/tree-grid/tree-grid.component.mjs +3 -3
  35. package/esm2020/lib/query-builder/query-builder.component.mjs +3 -3
  36. package/esm2020/lib/simple-combo/simple-combo.component.mjs +3 -3
  37. package/esm2020/lib/snackbar/snackbar.component.mjs +4 -4
  38. package/esm2020/lib/tabs/tabs/tabs.component.mjs +3 -3
  39. package/esm2020/lib/time-picker/time-picker.component.mjs +6 -5
  40. package/esm2020/lib/toast/toast.component.mjs +2 -2
  41. package/esm2020/lib/tree/tree-node/tree-node.component.mjs +4 -4
  42. package/fesm2015/igniteui-angular.mjs +117 -118
  43. package/fesm2015/igniteui-angular.mjs.map +1 -1
  44. package/fesm2020/igniteui-angular.mjs +117 -118
  45. package/fesm2020/igniteui-angular.mjs.map +1 -1
  46. package/lib/banner/banner.component.d.ts +5 -5
  47. package/lib/card/card.component.d.ts +2 -2
  48. package/lib/carousel/carousel.component.d.ts +6 -6
  49. package/lib/combo/combo.common.d.ts +4 -4
  50. package/lib/combo/combo.directives.d.ts +1 -1
  51. package/lib/core/navigation/directives.d.ts +2 -2
  52. package/lib/date-picker/date-picker.component.d.ts +4 -4
  53. package/lib/date-range-picker/date-range-picker.component.d.ts +3 -3
  54. package/lib/dialog/dialog.component.d.ts +4 -4
  55. package/lib/directives/button/button.directive.d.ts +7 -7
  56. package/lib/directives/ripple/ripple.directive.d.ts +6 -6
  57. package/lib/directives/tooltip/tooltip-target.directive.d.ts +6 -8
  58. package/lib/directives/tooltip/tooltip.directive.d.ts +1 -1
  59. package/lib/expansion-panel/expansion-panel.component.d.ts +3 -3
  60. package/lib/grids/common/crud.service.d.ts +1 -1
  61. package/lib/grids/grid-base.directive.d.ts +3 -3
  62. package/lib/snackbar/snackbar.component.d.ts +1 -1
  63. package/lib/time-picker/time-picker.component.d.ts +1 -1
  64. package/lib/toast/toast.component.d.ts +1 -1
  65. package/lib/tree/tree-node/tree-node.component.d.ts +3 -3
  66. package/migrations/common/UpdateChanges.js +1 -1
  67. package/package.json +1 -1
@@ -29,7 +29,7 @@ let DIALOG_ID = 0;
29
29
  *
30
30
  * Example:
31
31
  * ```html
32
- * <button (click)="form.open()">Show Dialog</button>
32
+ * <button type="button" igxButton (click)="form.open()">Show Dialog</button>
33
33
  * <igx-dialog #form title="Sign In" rightButtonLabel="OK">
34
34
  * <div>
35
35
  * <igx-input-group>
@@ -412,7 +412,7 @@ export class IgxDialogComponent {
412
412
  *
413
413
  * @memberOf {@link IgxDialogComponent}
414
414
  * ```html
415
- * <button (click)="dialog.open() igxButton="raised" igxButtonColor="white" igxRipple="white">Trigger Dialog</button>
415
+ * <button type="button" (click)="dialog.open() igxButton="raised" igxButtonColor="white" igxRipple="white">Trigger Dialog</button>
416
416
  * <igx-dialog #dialog></igx-dialog>
417
417
  * ```
418
418
  */
@@ -432,7 +432,7 @@ export class IgxDialogComponent {
432
432
  *
433
433
  * @memberOf {@link IgxDialogComponent}
434
434
  * ```html
435
- * <button (click)="dialog.close() igxButton="raised" igxButtonColor="white" igxRipple="white">Trigger Dialog</button>
435
+ * <button type="button" (click)="dialog.close() igxButton="raised" igxButtonColor="white" igxRipple="white">Trigger Dialog</button>
436
436
  * <igx-dialog #dialog></igx-dialog>
437
437
  * ```
438
438
  */
@@ -445,7 +445,7 @@ export class IgxDialogComponent {
445
445
  *
446
446
  * @memberOf {@link IgxDialogComponent}
447
447
  * ```html
448
- * <button (click)="dialog.toggle() igxButton="raised" igxButtonColor="white" igxRipple="white">Trigger Dialog</button>
448
+ * <button type="button" (click)="dialog.toggle() igxButton="raised" igxButtonColor="white" igxRipple="white">Trigger Dialog</button>
449
449
  * <igx-dialog #dialog></igx-dialog>
450
450
  * ```
451
451
  */
@@ -606,4 +606,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
606
606
  }]
607
607
  }] });
608
608
  export * from './dialog.directives';
609
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaWFsb2cvZGlhbG9nLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsUUFBUSxFQUdSLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQWlCLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RixPQUFPLEVBQW1CLHNCQUFzQixFQUFFLGtCQUFrQixFQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBQ3ZILE9BQU8sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7Ozs7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QlEsdUJBQXVCLEVBQUUseUJBQXlCLGFBRTNFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLGFBNWpCcEcsa0JBQWtCLEVBMmpCRyx1QkFBdUIsRUFBRSx5QkFBeUI7NkdBR3ZFLGVBQWUsWUFGZCxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGtCQUFrQjsyRkFFcEcsZUFBZTtrQkFMM0IsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsQ0FBQztvQkFDdEYsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLENBQUM7b0JBQ2pGLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLENBQUM7aUJBQ2pIOztBQUdELGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIEFmdGVyQ29udGVudEluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hOYXZpZ2F0aW9uU2VydmljZSwgSVRvZ2dsZVZpZXcgfSBmcm9tICcuLi9jb3JlL25hdmlnYXRpb24nO1xuaW1wb3J0IHsgSWd4QnV0dG9uTW9kdWxlLCBJZ3hCdXR0b25UeXBlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hSaXBwbGVNb2R1bGUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneERpYWxvZ0FjdGlvbnNEaXJlY3RpdmUsIElneERpYWxvZ1RpdGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaWFsb2cuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJZ3hUb2dnbGVNb2R1bGUsIElneFRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzLCBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5LCBOb09wU2Nyb2xsU3RyYXRlZ3ksIFBvc2l0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7ZmFkZUluLCBmYWRlT3V0fSBmcm9tICcuLi9hbmltYXRpb25zL2ZhZGUvaW5kZXgnO1xuaW1wb3J0IHsgSWd4Rm9jdXNNb2R1bGUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2ZvY3VzL2ZvY3VzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hGb2N1c1RyYXBNb2R1bGUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2ZvY3VzLXRyYXAvZm9jdXMtdHJhcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ2FuY2VsYWJsZUV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcblxubGV0IERJQUxPR19JRCA9IDA7XG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIERpYWxvZyBXaW5kb3cqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvZGlhbG9nLmh0bWwpXG4gKlxuICogVGhlIElnbml0ZSBVSSBEaWFsb2cgV2luZG93IHByZXNlbnRzIGEgZGlhbG9nIHdpbmRvdyB0byB0aGUgdXNlciB3aGljaCBjYW4gc2ltcGx5IGRpc3BsYXkgbWVzc2FnZXMgb3IgZGlzcGxheVxuICogbW9yZSBjb21wbGljYXRlZCB2aXN1YWxzIHN1Y2ggYXMgYSB1c2VyIHNpZ24taW4gZm9ybS4gIEl0IGFsc28gcHJvdmlkZXMgYSByaWdodCBhbmQgbGVmdCBidXR0b25cbiAqIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBjdXN0b20gYWN0aW9ucy5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGJ1dHRvbiAoY2xpY2spPVwiZm9ybS5vcGVuKClcIj5TaG93IERpYWxvZzwvYnV0dG9uPlxuICogPGlneC1kaWFsb2cgI2Zvcm0gdGl0bGU9XCJTaWduIEluXCIgcmlnaHRCdXR0b25MYWJlbD1cIk9LXCI+XG4gKiAgIDxkaXY+XG4gKiAgICAgPGlneC1pbnB1dC1ncm91cD5cbiAqICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlneElucHV0Lz5cbiAqICAgICAgIDxsYWJlbCBpZ3hMYWJlbD5Vc2VybmFtZTwvbGFiZWw+XG4gKiAgICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gKiAgIDwvZGl2PlxuICogICA8ZGl2PlxuICogICAgIDxpZ3gtaW5wdXQtZ3JvdXA+XG4gKiAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgaWd4SW5wdXQvPlxuICogICAgICAgPGxhYmVsIGlneExhYmVsPlBhc3N3b3JkPC9sYWJlbD5cbiAqICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAqICAgPC9kaXY+XG4gKiA8L2lneC1kaWFsb2c+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2RpYWxvZy1jb250ZW50LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBJVG9nZ2xlVmlldywgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICAgIHByaXZhdGUgc3RhdGljIE5FWFRfSUQgPSAxO1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERJQUxPR19DTEFTUyA9ICdpZ3gtZGlhbG9nJztcblxuXG5cbiAgICBAVmlld0NoaWxkKElneFRvZ2dsZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgdG9nZ2xlUmVmOiBJZ3hUb2dnbGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYGlkYCBhdHRyaWJ1dGUuIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyBbaWRdPVwiJ2lneC1kaWFsb2ctNTYnXCIgI2FsZXJ0IHRpdGxlPVwiTm90aWZpY2F0aW9uXCJcbiAgICAgKiAgbGVmdEJ1dHRvbkxhYmVsPVwiT0tcIiAobGVmdEJ1dHRvblNlbGVjdCk9XCJhbGVydC5jbG9zZSgpXCI+XG4gICAgICogPC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWRpYWxvZy0ke0RJQUxPR19JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBkaWFsb2cgc2hvdWxkIGJlIHNob3duIGFzIG1vZGFsLiBEZWZhdWx0cyB0byBgdHJ1ZWBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgW2lzTW9kYWxdPVwiZmFsc2VcIiA+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpc01vZGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNNb2RhbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGlzTW9kYWwodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlEZWZhdWx0U2V0dGluZ3MubW9kYWwgPSB2YWw7XG4gICAgICAgIHRoaXMuX2lzTW9kYWwgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgZGlhbG9nIHNob3VsZCBjbG9zZSB3aGVuIGBFc2NgIGtleSBpcyBwcmVzc2VkLiBEZWZhdWx0cyB0byBgdHJ1ZWBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgW2Nsb3NlT25Fc2NhcGVdPVwiZmFsc2VcIiA+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBjbG9zZU9uRXNjYXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VPbkVzY2FwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGNsb3NlT25Fc2NhcGUodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlEZWZhdWx0U2V0dGluZ3MuY2xvc2VPbkVzY2FwZSA9IHZhbDtcbiAgICAgICAgdGhpcy5fY2xvc2VPbkVzY2FwZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdG8gc2V0IHdoZXRoZXIgdGhlIFRhYiBrZXkgZm9jdXMgaXMgdHJhcHBlZCB3aXRoaW4gdGhlIGRpYWxvZyB3aGVuIG9wZW5lZC5cbiAgICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIGZvY3VzVHJhcD1cImZhbHNlXCJcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9jdXNUcmFwID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSBjb250cm9sbGluZyB0aGUgYHRpdGxlYCBvZiB0aGUgZGlhbG9nLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyB0aXRsZT1cIk5vdGlmaWNhdGlvblwiICNhbGVydCBsZWZ0QnV0dG9uTGFiZWw9XCJPS1wiIChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGl0bGUgPSAnJztcblxuICAgIC8qKlxuICAgICAqICBBbiBASW5wdXQgcHJvcGVydHkgY29udHJvbGxpbmcgdGhlIGBtZXNzYWdlYCBvZiB0aGUgZGlhbG9nLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyBtZXNzYWdlPVwiWW91ciBlbWFpbCB3YXMgc2VudCFcIiAjYWxlcnQgbGVmdEJ1dHRvbkxhYmVsPVwiT0tcIiAobGVmdEJ1dHRvblNlbGVjdCk9XCJhbGVydC5jbG9zZSgpXCI+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1lc3NhZ2UgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0byBzZXQgdGhlIGBsYWJlbGAgb2YgdGhlIGxlZnQgYnV0dG9uIG9mIHRoZSBkaWFsb2cuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIGxlZnRCdXR0b25MYWJlbD1cIk9LQVlcIiAjYWxlcnQgdGl0bGU9XCJOb3RpZmljYXRpb25cIiAgKGxlZnRCdXR0b25TZWxlY3QpPVwiYWxlcnQuY2xvc2UoKVwiPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsZWZ0QnV0dG9uTGFiZWwgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0byBzZXQgdGhlIGxlZnQgYnV0dG9uIGB0eXBlYC4gVGhlIHR5cGVzIGFyZSBgZmxhdGAsIGByYWlzZWRgIGFuZCBgZmFiYC5cbiAgICAgKiBUaGUgYGZsYXRgIHR5cGUgYnV0dG9uIGlzIGEgcmVjdGFuZ2xlIGFuZCBkb2Vzbid0IGhhdmUgYSBzaGFkb3cuIDxicj5cbiAgICAgKiBUaGUgYHJhaXNlZGAgdHlwZSBidXR0b24gaXMgYWxzbyBhIHJlY3RhbmdsZSBidXQgaGFzIGEgc2hhZG93LiA8YnI+XG4gICAgICogVGhlIGBmYWJgIHR5cGUgYnV0dG9uIGlzIGEgY2lyY2xlIHdpdGggYSBzaGFkb3cuIDxicj5cbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmxhdGAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIGxlZnRCdXR0b25UeXBlPVwicmFpc2VkXCIgbGVmdEJ1dHRvbkxhYmVsPVwiT0tBWVwiICNhbGVydCAobGVmdEJ1dHRvblNlbGVjdCk9XCJhbGVydC5jbG9zZSgpXCI+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxlZnRCdXR0b25UeXBlOiBJZ3hCdXR0b25UeXBlID0gJ2ZsYXQnO1xuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0byBzZXQgdGhlIGxlZnQgYnV0dG9uIGNvbG9yLiBUaGUgcHJvcGVydHkgYWNjZXB0cyBhbGwgdmFsaWQgQ1NTIGNvbG9yIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgbGVmdEJ1dHRvbkNvbG9yPVwieWVsbG93XCIgbGVmdEJ1dHRvbkxhYmVsPVwiT0tBWVwiICNhbGVydCAobGVmdEJ1dHRvblNlbGVjdCk9XCJhbGVydC5jbG9zZSgpXCI+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxlZnRCdXR0b25Db2xvciA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRvIHNldCB0aGUgbGVmdCBidXR0b24gYGJhY2tncm91bmQtY29sb3JgLiBUaGUgcHJvcGVydHkgYWNjZXB0cyBhbGwgdmFsaWQgQ1NTIGNvbG9yIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgbGVmdEJ1dHRvbkJhY2tncm91bmRDb2xvcj1cImJsYWNrXCIgbGVmdEJ1dHRvbkxhYmVsPVwiT0tBWVwiICNhbGVydCAobGVmdEJ1dHRvblNlbGVjdCk9XCJhbGVydC5jbG9zZSgpXCI+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxlZnRCdXR0b25CYWNrZ3JvdW5kQ29sb3IgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0byBzZXQgdGhlIGxlZnQgYnV0dG9uIGByaXBwbGVgLiBUaGUgYHJpcHBsZWAgYW5pbWF0ZXMgYSBjbGljay90YXAgdG8gYSBjb21wb25lbnQgYXMgYSBzZXJpZXMgb2YgZmFkaW5nIHdhdmVzLlxuICAgICAqIFRoZSBwcm9wZXJ0eSBhY2NlcHRzIGFsbCB2YWxpZCBDU1MgY29sb3IgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyBsZWZ0QnV0dG9uUmlwcGxlPVwiZ3JlZW5cIiBsZWZ0QnV0dG9uTGFiZWw9XCJPS0FZXCIgI2FsZXJ0IChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGVmdEJ1dHRvblJpcHBsZSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRvIHNldCB0aGUgYGxhYmVsYCBvZiB0aGUgcmlnaHQgYnV0dG9uIG9mIHRoZSBkaWFsb2cuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIHJpZ2h0QnV0dG9uTGFiZWw9XCJPS0FZXCIgI2FsZXJ0IHRpdGxlPVwiTm90aWZpY2F0aW9uXCIgIChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmlnaHRCdXR0b25MYWJlbCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRvIHNldCB0aGUgcmlnaHQgYnV0dG9uIGB0eXBlYC4gVGhlIHR5cGVzIGFyZSBgZmxhdGAsIGByYWlzZWRgIGFuZCBgZmFiYC5cbiAgICAgKiBUaGUgYGZsYXRgIHR5cGUgYnV0dG9uIGlzIGEgcmVjdGFuZ2xlIGFuZCBkb2Vzbid0IGhhdmUgYSBzaGFkb3cuIDxicj5cbiAgICAgKiBUaGUgYHJhaXNlZGAgdHlwZSBidXR0b24gaXMgYWxzbyBhIHJlY3RhbmdsZSBidXQgaGFzIGEgc2hhZG93LiA8YnI+XG4gICAgICogVGhlIGBmYWJgIHR5cGUgYnV0dG9uIGlzIGEgY2lyY2xlIHdpdGggYSBzaGFkb3cuIDxicj5cbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmxhdGAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIHJpZ2h0QnV0dG9uVHlwZT1cImZhYlwiIHJpZ2h0QnV0dG9uTGFiZWw9XCJPS0FZXCIgI2FsZXJ0IChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmlnaHRCdXR0b25UeXBlOiBJZ3hCdXR0b25UeXBlID0gJ2ZsYXQnO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRvIHNldCB0aGUgcmlnaHQgYnV0dG9uIGBjb2xvcmAuIFRoZSBwcm9wZXJ0eSBhY2NlcHRzIGFsbCB2YWxpZCBDU1MgY29sb3IgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyByaWdodEJ1dHRvbkNvbG9yPVwieWVsbG93XCIgcmlnaHRCdXR0b25MYWJlbD1cIk9LQVlcIiAjYWxlcnQgKGxlZnRCdXR0b25TZWxlY3QpPVwiYWxlcnQuY2xvc2UoKVwiPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByaWdodEJ1dHRvbkNvbG9yID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdG8gc2V0IHRoZSByaWdodCBidXR0b24gYGJhY2tncm91bmQtY29sb3JgLiBUaGUgcHJvcGVydHkgYWNjZXB0cyBhbGwgdmFsaWQgQ1NTIGNvbG9yIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgcmlnaHRCdXR0b25CYWNrZ3JvdW5kQ29sb3I9XCJibGFja1wiIHJpZ2h0QnV0dG9uTGFiZWw9XCJPS0FZXCIgI2FsZXJ0IChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmlnaHRCdXR0b25CYWNrZ3JvdW5kQ29sb3IgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0byBzZXQgdGhlIHJpZ2h0IGJ1dHRvbiBgcmlwcGxlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgcmlnaHRCdXR0b25SaXBwbGU9XCJncmVlblwiIHJpZ2h0QnV0dG9uTGFiZWw9XCJPS0FZXCIgI2FsZXJ0IChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmlnaHRCdXR0b25SaXBwbGUgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGFsbG93cyB5b3UgdG8gZW5hYmxlIHRoZSBcImNsb3NlIG9uIGNsaWNrIG91dHNpZGUgdGhlIGRpYWxvZ1wiLiBCeSBkZWZhdWx0IGl0J3MgZGlzYWJsZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIGNsb3NlT25PdXRzaWRlU2VsZWN0PVwidHJ1ZVwiIGxlZnRCdXR0b25MYWJlbD1cIkNhbmNlbFwiIChsZWZ0QnV0dG9uU2VsZWN0KT1cImRpYWxvZy5jbG9zZSgpXCJcbiAgICAgKiByaWdodEJ1dHRvbkxhYmVsPVwiT0tcIiByaWdodEJ1dHRvblJpcHBsZT1cIiM0Q0FGNTBcIiAocmlnaHRCdXR0b25TZWxlY3QpPVwib25EaWFsb2dPS1NlbGVjdGVkKCRldmVudClcIj5cbiAgICAgKiA8L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGNsb3NlT25PdXRzaWRlU2VsZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VPbk91dHNpZGVTZWxlY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBjbG9zZU9uT3V0c2lkZVNlbGVjdCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheURlZmF1bHRTZXR0aW5ncy5jbG9zZU9uT3V0c2lkZUNsaWNrID0gdmFsO1xuICAgICAgICB0aGlzLl9jbG9zZU9uT3V0c2lkZVNlbGVjdCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHBvc2l0aW9uIGFuZCBhbmltYXRpb24gc2V0dGluZ3MgdXNlZCBieSB0aGUgZGlhbG9nLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdhbGVydCcsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBhbGVydDogSWd4RGlhbG9nQ29tcG9uZW50O1xuICAgICAqIGxldCBjdXJyZW50UG9zaXRpb246IFBvc2l0aW9uU2V0dGluZ3MgPSB0aGlzLmFsZXJ0LnBvc2l0aW9uU2V0dGluZ3NcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcG9zaXRpb25TZXR0aW5ncygpOiBQb3NpdGlvblNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBwb3NpdGlvbiBhbmQgYW5pbWF0aW9uIHNldHRpbmdzIHVzZWQgYnkgdGhlIGRpYWxvZy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogaW1wb3J0IHsgc2xpZGVJbkxlZnQsIHNsaWRlT3V0UmlnaHQgfSBmcm9tICdpZ25pdGV1aS1hbmd1bGFyJztcbiAgICAgKiAuLi5cbiAgICAgKiBAVmlld0NoaWxkKCdhbGVydCcsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBhbGVydDogSWd4RGlhbG9nQ29tcG9uZW50O1xuICAgICAqICBwdWJsaWMgbmV3UG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgKiAgICAgIG9wZW5BbmltYXRpb246IHVzZUFuaW1hdGlvbihzbGlkZUluVG9wLCB7IHBhcmFtczogeyBkdXJhdGlvbjogJzIwMDBtcycgfSB9KSxcbiAgICAgKiAgICAgIGNsb3NlQW5pbWF0aW9uOiB1c2VBbmltYXRpb24oc2xpZGVPdXRCb3R0b20sIHsgcGFyYW1zOiB7IGR1cmF0aW9uOiAnMjAwMG1zJ30gfSksXG4gICAgICogICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQsXG4gICAgICogICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAqICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdCxcbiAgICAgKiAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuTWlkZGxlLFxuICAgICAqICAgICAgbWluU2l6ZTogeyBoZWlnaHQ6IDEwMCwgd2lkdGg6IDEwMCB9XG4gICAgICogIH07XG4gICAgICogdGhpcy5hbGVydC5wb3NpdGlvblNldHRpbmdzID0gdGhpcy5uZXdQb3NpdGlvblNldHRpbmdzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgcG9zaXRpb25TZXR0aW5ncyhzZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9wb3NpdGlvblNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX292ZXJsYXlEZWZhdWx0U2V0dGluZ3MucG9zaXRpb25TdHJhdGVneSA9IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uU2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGB0YWJpbmRleGAgYXR0cmlidXRlIGZvciB0aGUgY29tcG9uZW50XG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAtMTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBiZWZvcmUgdGhlIGRpYWxvZyBpcyBvcGVuZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIChvcGVuaW5nKT1cIm9uRGlhbG9nT3BlbkhhbmRsZXIoJGV2ZW50KVwiIChsZWZ0QnV0dG9uU2VsZWN0KT1cImRpYWxvZy5jbG9zZSgpXCIgcmlnaHRCdXR0b25MYWJlbD1cIk9LXCI+XG4gICAgICogPC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvcGVuaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJRGlhbG9nQ2FuY2VsbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgdGhlIGRpYWxvZyBpcyBvcGVuZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIChvcGVuZWQpPVwib25EaWFsb2dPcGVuZWRIYW5kbGVyKCRldmVudClcIiAobGVmdEJ1dHRvblNlbGVjdCk9XCJkaWFsb2cuY2xvc2UoKVwiIHJpZ2h0QnV0dG9uTGFiZWw9XCJPS1wiPlxuICAgICAqIDwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxJRGlhbG9nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGJlZm9yZSB0aGUgZGlhbG9nIGlzIGNsb3NlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgKGNsb3NpbmcpPVwib25EaWFsb2dDbG9zZUhhbmRsZXIoJGV2ZW50KVwiIHRpdGxlPVwiQ29uZmlybWF0aW9uXCIgbGVmdEJ1dHRvbkxhYmVsPVwiQ2FuY2VsXCIgcmlnaHRCdXR0b25MYWJlbD1cIk9LXCI+XG4gICAgICogPC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbG9zaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJRGlhbG9nQ2FuY2VsbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgdGhlIGRpYWxvZyBpcyBjbG9zZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIChjbG9zZWQpPVwib25EaWFsb2dDbG9zZWRIYW5kbGVyKCRldmVudClcIiB0aXRsZT1cIkNvbmZpcm1hdGlvblwiIGxlZnRCdXR0b25MYWJlbD1cIkNhbmNlbFwiIHJpZ2h0QnV0dG9uTGFiZWw9XCJPS1wiPlxuICAgICAqIDwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJRGlhbG9nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gdGhlIGxlZnQgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIChsZWZ0QnV0dG9uU2VsZWN0KT1cIm9uRGlhbG9nT0tTZWxlY3RlZCgkZXZlbnQpXCIgI2RpYWxvZyBsZWZ0QnV0dG9uTGFiZWw9XCJPS1wiIHJpZ2h0QnV0dG9uTGFiZWw9XCJDYW5jZWxcIj5cbiAgICAgKiA8L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxlZnRCdXR0b25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPElEaWFsb2dFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgd2hlbiB0aGUgcmlnaHQgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIChyaWdodEJ1dHRvblNlbGVjdCk9XCJvbkRpYWxvZ09LU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICogI2RpYWxvZyB0aXRsZT1cIkNvbmZpcm1hdGlvblwiIChsZWZ0QnV0dG9uU2VsZWN0KT1cImRpYWxvZy5jbG9zZSgpXCIgcmlnaHRCdXR0b25MYWJlbD1cIk9LXCJcbiAgICAgKiByaWdodEJ1dHRvblJpcHBsZT1cIiM0Q0FGNTBcIiBjbG9zZU9uT3V0c2lkZVNlbGVjdD1cInRydWVcIj5cbiAgICAgKiA8L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJpZ2h0QnV0dG9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxJRGlhbG9nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgaXNPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHN0YXRlLiBQb3NzaWJsZSBzdGF0ZSB2YWx1ZXMgYXJlIFwib3BlblwiIG9yIFwiY2xvc2VcIi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15RGlhbG9nXCIpXG4gICAgICogcHVibGljIGRpYWxvZzogSWd4RGlhbG9nQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgICAgbGV0IGRpYWxvZ1N0YXRlID0gdGhpcy5kaWFsb2cuc3RhdGU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc3RhdGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuID8gJ29wZW4nIDogJ2Nsb3NlJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdGF0ZSBvZiB0aGUgZGlhbG9nLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBkaWFsb2dJc09wZW4gPSB0aGlzLmRpYWxvZy5pc09wZW47XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtZGlhbG9nIFtpc09wZW5dPSdmYWxzZSc+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVHdvLXdheSBkYXRhIGJpbmRpbmcuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS1zZXQtLT5cbiAgICAgKiA8aWd4LWRpYWxvZyBbKGlzT3BlbildPSdtb2RlbC5pc09wZW4nPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXNPcGVuKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudG9nZ2xlUmVmLmNvbGxhcHNlZDtcbiAgICB9XG4gICAgcHVibGljIHNldCBpc09wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZGlhbG9nLS1oaWRkZW4nKVxuICAgIHB1YmxpYyBnZXQgaXNDb2xsYXBzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZVJlZi5jb2xsYXBzZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJvbGUgb2YgdGhlIGRpYWxvZy4gVGhlIHZhbGlkIHZhbHVlcyBhcmUgYGRpYWxvZ2AsIGBhbGVydGRpYWxvZ2AsIGBhbGVydGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeURpYWxvZ1wiKVxuICAgICAqIHB1YmxpYyBkaWFsb2c6IElneERpYWxvZ0NvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICogICAgIGxldCBkaWFsb2dSb2xlID0gdGhpcy5kaWFsb2cucm9sZTtcbiAgICAgKiB9XG4gICAgICogIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCByb2xlKCkge1xuICAgICAgICBpZiAodGhpcy5sZWZ0QnV0dG9uTGFiZWwgIT09ICcnICYmIHRoaXMucmlnaHRCdXR0b25MYWJlbCAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnZGlhbG9nJztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMubGVmdEJ1dHRvbkxhYmVsICE9PSAnJyB8fFxuICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkxhYmVsICE9PSAnJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAnYWxlcnRkaWFsb2cnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdhbGVydCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgdGl0bGUgaWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBAVmlld0NoaWxkKFwiTXlEaWFsb2dcIilcbiAgICAgKiBwdWJsaWMgZGlhbG9nOiBJZ3hEaWFsb2dDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAqICAgICBsZXQgZGlhbG9nVGl0bGUgPSB0aGlzLmRpYWxvZy50aXRsZUlkO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdGl0bGVJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlSWQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgX3Bvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIG9wZW5BbmltYXRpb246IGZhZGVJbixcbiAgICAgICAgY2xvc2VBbmltYXRpb246IGZhZGVPdXRcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfb3ZlcmxheURlZmF1bHRTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuICAgIHByaXZhdGUgX2Nsb3NlT25PdXRzaWRlU2VsZWN0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY2xvc2VPbkVzY2FwZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaXNNb2RhbCA9IHRydWU7XG4gICAgcHJpdmF0ZSBfdGl0bGVJZDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuYXZTZXJ2aWNlOiBJZ3hOYXZpZ2F0aW9uU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLl90aXRsZUlkID0gSWd4RGlhbG9nQ29tcG9uZW50Lk5FWFRfSUQrKyArICdfdGl0bGUnO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlEZWZhdWx0U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgR2xvYmFsUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvblNldHRpbmdzKSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgTm9PcFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBtb2RhbDogdGhpcy5pc01vZGFsLFxuICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogdGhpcy5fY2xvc2VPbkVzY2FwZSxcbiAgICAgICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRoaXMuY2xvc2VPbk91dHNpZGVTZWxlY3RcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnRvZ2dsZVJlZi5jbG9zaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50QXJncykgPT4gdGhpcy5lbWl0Q2xvc2VGcm9tRGlhbG9nKGV2ZW50QXJncykpO1xuICAgICAgICB0aGlzLnRvZ2dsZVJlZi5jbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnRBcmdzKSA9PiB0aGlzLmVtaXRDbG9zZWRGcm9tRGlhbG9nKGV2ZW50QXJncykpO1xuICAgICAgICB0aGlzLnRvZ2dsZVJlZi5vcGVuZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnRBcmdzKSA9PiB0aGlzLmVtaXRPcGVuZWRGcm9tRGlhbG9nKGV2ZW50QXJncykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgbWV0aG9kIHRoYXQgb3BlbnMgdGhlIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiB7QGxpbmsgSWd4RGlhbG9nQ29tcG9uZW50fVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJkaWFsb2cub3BlbigpIGlneEJ1dHRvbj1cInJhaXNlZFwiIGlneEJ1dHRvbkNvbG9yPVwid2hpdGVcIiBpZ3hSaXBwbGU9XCJ3aGl0ZVwiPlRyaWdnZXIgRGlhbG9nPC9idXR0b24+XG4gICAgICogPGlneC1kaWFsb2cgI2RpYWxvZz48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG9wZW4ob3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB0aGlzLl9vdmVybGF5RGVmYXVsdFNldHRpbmdzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogSURpYWxvZ0NhbmNlbGxhYmxlRXZlbnRBcmdzID0geyBkaWFsb2c6IHRoaXMsIGV2ZW50OiBudWxsLCBjYW5jZWw6IGZhbHNlIH07XG4gICAgICAgIHRoaXMub3BlbmluZy5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIGlmICghZXZlbnRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVSZWYub3BlbihvdmVybGF5U2V0dGluZ3MpO1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5sZWZ0QnV0dG9uTGFiZWwgJiYgIXRoaXMucmlnaHRCdXR0b25MYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLmVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBtZXRob2QgdGhhdCB0aGF0IGNsb3NlcyB0aGUgZGlhbG9nLlxuICAgICAqXG4gICAgICogIEBtZW1iZXJPZiB7QGxpbmsgSWd4RGlhbG9nQ29tcG9uZW50fVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJkaWFsb2cuY2xvc2UoKSBpZ3hCdXR0b249XCJyYWlzZWRcIiBpZ3hCdXR0b25Db2xvcj1cIndoaXRlXCIgaWd4UmlwcGxlPVwid2hpdGVcIj5UcmlnZ2VyIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIDxpZ3gtZGlhbG9nICNkaWFsb2c+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpIHtcbiAgICAgICAgLy8gYGNsb3NpbmdgIHdpbGwgZW1pdCBmcm9tIGB0b2dnbGVSZWYuY2xvc2luZ2Agc3Vic2NyaXB0aW9uXG4gICAgICAgIHRoaXMudG9nZ2xlUmVmLmNsb3NlKCk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBBIG1ldGhvZCB0aGF0IG9wZW5zL2Nsb3NlcyB0aGUgZGlhbG9nLlxuICAgICAqXG4gICAgICogQG1lbWJlck9mIHtAbGluayBJZ3hEaWFsb2dDb21wb25lbnR9XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cImRpYWxvZy50b2dnbGUoKSBpZ3hCdXR0b249XCJyYWlzZWRcIiBpZ3hCdXR0b25Db2xvcj1cIndoaXRlXCIgaWd4UmlwcGxlPVwid2hpdGVcIj5UcmlnZ2VyIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIDxpZ3gtZGlhbG9nICNkaWFsb2c+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uRGlhbG9nU2VsZWN0ZWQoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuICYmXG4gICAgICAgICAgICB0aGlzLmNsb3NlT25PdXRzaWRlU2VsZWN0ICYmXG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKElneERpYWxvZ0NvbXBvbmVudC5ESUFMT0dfQ0xBU1MpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvbkludGVybmFsTGVmdEJ1dHRvblNlbGVjdChldmVudCkge1xuICAgICAgICB0aGlzLmxlZnRCdXR0b25TZWxlY3QuZW1pdCh7IGRpYWxvZzogdGhpcywgZXZlbnQgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvbkludGVybmFsUmlnaHRCdXR0b25TZWxlY3QoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5yaWdodEJ1dHRvblNlbGVjdC5lbWl0KHsgZGlhbG9nOiB0aGlzLCBldmVudCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5uYXZTZXJ2aWNlICYmIHRoaXMuaWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5hZGQodGhpcy5pZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMubmF2U2VydmljZSAmJiB0aGlzLmlkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UucmVtb3ZlKHRoaXMuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2xvc2VGcm9tRGlhbG9nKGV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBkaWFsb2dFdmVudHNBcmdzID0geyBkaWFsb2c6IHRoaXMsIGV2ZW50OiBldmVudEFyZ3MuZXZlbnQsIGNhbmNlbDogZXZlbnRBcmdzLmNhbmNlbCB9O1xuICAgICAgICB0aGlzLmNsb3NpbmcuZW1pdChkaWFsb2dFdmVudHNBcmdzKTtcbiAgICAgICAgZXZlbnRBcmdzLmNhbmNlbCA9IGRpYWxvZ0V2ZW50c0FyZ3MuY2FuY2VsO1xuICAgICAgICBpZiAoIWV2ZW50QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2xvc2VkRnJvbURpYWxvZyhldmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IGRpYWxvZzogdGhpcywgZXZlbnQ6IGV2ZW50QXJncy5ldmVudCB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRPcGVuZWRGcm9tRGlhbG9nKGV2ZW50QXJncykge1xuICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgZGlhbG9nOiB0aGlzLCBldmVudDogZXZlbnRBcmdzLmV2ZW50IH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGlhbG9nRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGRpYWxvZzogSWd4RGlhbG9nQ29tcG9uZW50O1xuICAgIGV2ZW50OiBFdmVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGlhbG9nQ2FuY2VsbGFibGVFdmVudEFyZ3MgZXh0ZW5kcyBJRGlhbG9nRXZlbnRBcmdzLCBDYW5jZWxhYmxlRXZlbnRBcmdzIHsgfVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtJZ3hEaWFsb2dDb21wb25lbnQsIElneERpYWxvZ1RpdGxlRGlyZWN0aXZlLCBJZ3hEaWFsb2dBY3Rpb25zRGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbSWd4RGlhbG9nQ29tcG9uZW50LCBJZ3hEaWFsb2dUaXRsZURpcmVjdGl2ZSwgSWd4RGlhbG9nQWN0aW9uc0RpcmVjdGl2ZV0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWd4VG9nZ2xlTW9kdWxlLCBJZ3hCdXR0b25Nb2R1bGUsIElneFJpcHBsZU1vZHVsZSwgSWd4Rm9jdXNNb2R1bGUsIElneEZvY3VzVHJhcE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4RGlhbG9nTW9kdWxlIHsgfVxuXG5leHBvcnQgKiBmcm9tICcuL2RpYWxvZy5kaXJlY3RpdmVzJztcbiIsIjxkaXYgdGFiaW5kZXg9XCIwXCIgI2RpYWxvZyBjbGFzcz1cImlneC1kaWFsb2dcIiBpZ3hUb2dnbGUgW2lneEZvY3VzVHJhcF09XCJmb2N1c1RyYXBcIiAoY2xpY2spPVwib25EaWFsb2dTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgPGRpdiAjZGlhbG9nV2luZG93IGNsYXNzPVwiaWd4LWRpYWxvZ19fd2luZG93XCIgIFthdHRyLnJvbGVdPVwicm9sZVwiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0aXRsZUlkXCI+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRpdGxlXCIgW2F0dHIuaWRdPVwidGl0bGVJZFwiIGNsYXNzPVwiaWd4LWRpYWxvZ19fd2luZG93LXRpdGxlXCI+XG4gICAgICAgICAgICB7eyB0aXRsZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhdGl0bGVcIiBzZWxlY3Q9XCJpZ3gtZGlhbG9nLXRpdGxlLFtpZ3hEaWFsb2dUaXRsZV1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1kaWFsb2dfX3dpbmRvdy1jb250ZW50XCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1lc3NhZ2VcIiBjbGFzcz1cImlneC1kaWFsb2dfX3dpbmRvdy1tZXNzYWdlXCI+e3sgbWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIW1lc3NhZ2VcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJsZWZ0QnV0dG9uTGFiZWwgfHwgcmlnaHRCdXR0b25MYWJlbFwiIGNsYXNzPVwiaWd4LWRpYWxvZ19fd2luZG93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJsZWZ0QnV0dG9uTGFiZWxcIiB0eXBlPVwiYnV0dG9uXCIgW2lneEZvY3VzXT1cImlzT3BlblwiIFtpZ3hCdXR0b25dPVwibGVmdEJ1dHRvblR5cGVcIiBpZ3hCdXR0b25Db2xvcj1cInt7IGxlZnRCdXR0b25Db2xvciB9fVwiIGlneEJ1dHRvbkJhY2tncm91bmQ9XCJ7eyBsZWZ0QnV0dG9uQmFja2dyb3VuZENvbG9yIH19XCJcbiAgICAgICAgICAgICAgICBpZ3hSaXBwbGU9XCJ7eyBsZWZ0QnV0dG9uUmlwcGxlIH19XCIgKGNsaWNrKT1cIm9uSW50ZXJuYWxMZWZ0QnV0dG9uU2VsZWN0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICB7eyBsZWZ0QnV0dG9uTGFiZWwgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJpZ2h0QnV0dG9uTGFiZWxcIiB0eXBlPVwiYnV0dG9uXCIgW2lneEZvY3VzXT1cImlzT3BlblwiIFtpZ3hCdXR0b25dPVwicmlnaHRCdXR0b25UeXBlXCIgaWd4QnV0dG9uQ29sb3I9XCJ7eyByaWdodEJ1dHRvbkNvbG9yIH19XCIgaWd4QnV0dG9uQmFja2dyb3VuZD1cInt7IHJpZ2h0QnV0dG9uQmFja2dyb3VuZENvbG9yIH19XCJcbiAgICAgICAgICAgICAgICBpZ3hSaXBwbGU9XCJ7eyByaWdodEJ1dHRvblJpcHBsZSB9fVwiIChjbGljayk9XCJvbkludGVybmFsUmlnaHRCdXR0b25TZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIHt7IHJpZ2h0QnV0dG9uTGFiZWwgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhbGVmdEJ1dHRvbkxhYmVsICYmICFyaWdodEJ1dHRvbkxhYmVsXCIgc2VsZWN0PVwiaWd4LWRpYWxvZy1hY3Rpb25zLFtpZ3hEaWFsb2dBY3Rpb25zXVwiPjwvbmctY29udGVudD5cblxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
609
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaWFsb2cvZGlhbG9nLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsUUFBUSxFQUdSLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQWlCLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RixPQUFPLEVBQW1CLHNCQUFzQixFQUFFLGtCQUFrQixFQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBQ3ZILE9BQU8sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7Ozs7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QlEsdUJBQXVCLEVBQUUseUJBQXlCLGFBRTNFLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLGFBNWpCcEcsa0JBQWtCLEVBMmpCRyx1QkFBdUIsRUFBRSx5QkFBeUI7NkdBR3ZFLGVBQWUsWUFGZCxZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGtCQUFrQjsyRkFFcEcsZUFBZTtrQkFMM0IsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsQ0FBQztvQkFDdEYsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLENBQUM7b0JBQ2pGLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLENBQUM7aUJBQ2pIOztBQUdELGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIEFmdGVyQ29udGVudEluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hOYXZpZ2F0aW9uU2VydmljZSwgSVRvZ2dsZVZpZXcgfSBmcm9tICcuLi9jb3JlL25hdmlnYXRpb24nO1xuaW1wb3J0IHsgSWd4QnV0dG9uTW9kdWxlLCBJZ3hCdXR0b25UeXBlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hSaXBwbGVNb2R1bGUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneERpYWxvZ0FjdGlvbnNEaXJlY3RpdmUsIElneERpYWxvZ1RpdGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaWFsb2cuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJZ3hUb2dnbGVNb2R1bGUsIElneFRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzLCBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5LCBOb09wU2Nyb2xsU3RyYXRlZ3ksIFBvc2l0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7ZmFkZUluLCBmYWRlT3V0fSBmcm9tICcuLi9hbmltYXRpb25zL2ZhZGUvaW5kZXgnO1xuaW1wb3J0IHsgSWd4Rm9jdXNNb2R1bGUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2ZvY3VzL2ZvY3VzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hGb2N1c1RyYXBNb2R1bGUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2ZvY3VzLXRyYXAvZm9jdXMtdHJhcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ2FuY2VsYWJsZUV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcblxubGV0IERJQUxPR19JRCA9IDA7XG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIERpYWxvZyBXaW5kb3cqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvZGlhbG9nLmh0bWwpXG4gKlxuICogVGhlIElnbml0ZSBVSSBEaWFsb2cgV2luZG93IHByZXNlbnRzIGEgZGlhbG9nIHdpbmRvdyB0byB0aGUgdXNlciB3aGljaCBjYW4gc2ltcGx5IGRpc3BsYXkgbWVzc2FnZXMgb3IgZGlzcGxheVxuICogbW9yZSBjb21wbGljYXRlZCB2aXN1YWxzIHN1Y2ggYXMgYSB1c2VyIHNpZ24taW4gZm9ybS4gIEl0IGFsc28gcHJvdmlkZXMgYSByaWdodCBhbmQgbGVmdCBidXR0b25cbiAqIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBjdXN0b20gYWN0aW9ucy5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uIChjbGljayk9XCJmb3JtLm9wZW4oKVwiPlNob3cgRGlhbG9nPC9idXR0b24+XG4gKiA8aWd4LWRpYWxvZyAjZm9ybSB0aXRsZT1cIlNpZ24gSW5cIiByaWdodEJ1dHRvbkxhYmVsPVwiT0tcIj5cbiAqICAgPGRpdj5cbiAqICAgICA8aWd4LWlucHV0LWdyb3VwPlxuICogICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWd4SW5wdXQvPlxuICogICAgICAgPGxhYmVsIGlneExhYmVsPlVzZXJuYW1lPC9sYWJlbD5cbiAqICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAqICAgPC9kaXY+XG4gKiAgIDxkaXY+XG4gKiAgICAgPGlneC1pbnB1dC1ncm91cD5cbiAqICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZ3hJbnB1dC8+XG4gKiAgICAgICA8bGFiZWwgaWd4TGFiZWw+UGFzc3dvcmQ8L2xhYmVsPlxuICogICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICogICA8L2Rpdj5cbiAqIDwvaWd4LWRpYWxvZz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnZGlhbG9nLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIElUb2dnbGVWaWV3LCBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgTkVYVF9JRCA9IDE7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRElBTE9HX0NMQVNTID0gJ2lneC1kaWFsb2cnO1xuXG5cblxuICAgIEBWaWV3Q2hpbGQoSWd4VG9nZ2xlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyB0b2dnbGVSZWY6IElneFRvZ2dsZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIHRoZSBgaWRgIGF0dHJpYnV0ZS4gSWYgbm90IHByb3ZpZGVkIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIFtpZF09XCInaWd4LWRpYWxvZy01NidcIiAjYWxlcnQgdGl0bGU9XCJOb3RpZmljYXRpb25cIlxuICAgICAqICBsZWZ0QnV0dG9uTGFiZWw9XCJPS1wiIChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj5cbiAgICAgKiA8L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtZGlhbG9nLSR7RElBTE9HX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIGRpYWxvZyBzaG91bGQgYmUgc2hvd24gYXMgbW9kYWwuIERlZmF1bHRzIHRvIGB0cnVlYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyBbaXNNb2RhbF09XCJmYWxzZVwiID48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGlzTW9kYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc01vZGFsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgaXNNb2RhbCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheURlZmF1bHRTZXR0aW5ncy5tb2RhbCA9IHZhbDtcbiAgICAgICAgdGhpcy5faXNNb2RhbCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBkaWFsb2cgc2hvdWxkIGNsb3NlIHdoZW4gYEVzY2Aga2V5IGlzIHByZXNzZWQuIERlZmF1bHRzIHRvIGB0cnVlYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyBbY2xvc2VPbkVzY2FwZV09XCJmYWxzZVwiID48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGNsb3NlT25Fc2NhcGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9zZU9uRXNjYXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY2xvc2VPbkVzY2FwZSh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheURlZmF1bHRTZXR0aW5ncy5jbG9zZU9uRXNjYXBlID0gdmFsO1xuICAgICAgICB0aGlzLl9jbG9zZU9uRXNjYXBlID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0byBzZXQgd2hldGhlciB0aGUgVGFiIGtleSBmb2N1cyBpcyB0cmFwcGVkIHdpdGhpbiB0aGUgZGlhbG9nIHdoZW4gb3BlbmVkLlxuICAgICAqIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgZm9jdXNUcmFwPVwiZmFsc2VcIlwiPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb2N1c1RyYXAgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IGNvbnRyb2xsaW5nIHRoZSBgdGl0bGVgIG9mIHRoZSBkaWFsb2cuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIHRpdGxlPVwiTm90aWZpY2F0aW9uXCIgI2FsZXJ0IGxlZnRCdXR0b25MYWJlbD1cIk9LXCIgKGxlZnRCdXR0b25TZWxlY3QpPVwiYWxlcnQuY2xvc2UoKVwiPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogIEFuIEBJbnB1dCBwcm9wZXJ0eSBjb250cm9sbGluZyB0aGUgYG1lc3NhZ2VgIG9mIHRoZSBkaWFsb2cuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIG1lc3NhZ2U9XCJZb3VyIGVtYWlsIHdhcyBzZW50IVwiICNhbGVydCBsZWZ0QnV0dG9uTGFiZWw9XCJPS1wiIChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWVzc2FnZSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRvIHNldCB0aGUgYGxhYmVsYCBvZiB0aGUgbGVmdCBidXR0b24gb2YgdGhlIGRpYWxvZy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgbGVmdEJ1dHRvbkxhYmVsPVwiT0tBWVwiICNhbGVydCB0aXRsZT1cIk5vdGlmaWNhdGlvblwiICAobGVmdEJ1dHRvblNlbGVjdCk9XCJhbGVydC5jbG9zZSgpXCI+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxlZnRCdXR0b25MYWJlbCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRvIHNldCB0aGUgbGVmdCBidXR0b24gYHR5cGVgLiBUaGUgdHlwZXMgYXJlIGBmbGF0YCwgYHJhaXNlZGAgYW5kIGBmYWJgLlxuICAgICAqIFRoZSBgZmxhdGAgdHlwZSBidXR0b24gaXMgYSByZWN0YW5nbGUgYW5kIGRvZXNuJ3QgaGF2ZSBhIHNoYWRvdy4gPGJyPlxuICAgICAqIFRoZSBgcmFpc2VkYCB0eXBlIGJ1dHRvbiBpcyBhbHNvIGEgcmVjdGFuZ2xlIGJ1dCBoYXMgYSBzaGFkb3cuIDxicj5cbiAgICAgKiBUaGUgYGZhYmAgdHlwZSBidXR0b24gaXMgYSBjaXJjbGUgd2l0aCBhIHNoYWRvdy4gPGJyPlxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmbGF0YC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgbGVmdEJ1dHRvblR5cGU9XCJyYWlzZWRcIiBsZWZ0QnV0dG9uTGFiZWw9XCJPS0FZXCIgI2FsZXJ0IChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGVmdEJ1dHRvblR5cGU6IElneEJ1dHRvblR5cGUgPSAnZmxhdCc7XG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRvIHNldCB0aGUgbGVmdCBidXR0b24gY29sb3IuIFRoZSBwcm9wZXJ0eSBhY2NlcHRzIGFsbCB2YWxpZCBDU1MgY29sb3IgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyBsZWZ0QnV0dG9uQ29sb3I9XCJ5ZWxsb3dcIiBsZWZ0QnV0dG9uTGFiZWw9XCJPS0FZXCIgI2FsZXJ0IChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGVmdEJ1dHRvbkNvbG9yID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdG8gc2V0IHRoZSBsZWZ0IGJ1dHRvbiBgYmFja2dyb3VuZC1jb2xvcmAuIFRoZSBwcm9wZXJ0eSBhY2NlcHRzIGFsbCB2YWxpZCBDU1MgY29sb3IgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyBsZWZ0QnV0dG9uQmFja2dyb3VuZENvbG9yPVwiYmxhY2tcIiBsZWZ0QnV0dG9uTGFiZWw9XCJPS0FZXCIgI2FsZXJ0IChsZWZ0QnV0dG9uU2VsZWN0KT1cImFsZXJ0LmNsb3NlKClcIj48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGVmdEJ1dHRvbkJhY2tncm91bmRDb2xvciA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRvIHNldCB0aGUgbGVmdCBidXR0b24gYHJpcHBsZWAuIFRoZSBgcmlwcGxlYCBhbmltYXRlcyBhIGNsaWNrL3RhcCB0byBhIGNvbXBvbmVudCBhcyBhIHNlcmllcyBvZiBmYWRpbmcgd2F2ZXMuXG4gICAgICogVGhlIHByb3BlcnR5IGFjY2VwdHMgYWxsIHZhbGlkIENTUyBjb2xvciBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIGxlZnRCdXR0b25SaXBwbGU9XCJncmVlblwiIGxlZnRCdXR0b25MYWJlbD1cIk9LQVlcIiAjYWxlcnQgKGxlZnRCdXR0b25TZWxlY3QpPVwiYWxlcnQuY2xvc2UoKVwiPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsZWZ0QnV0dG9uUmlwcGxlID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdG8gc2V0IHRoZSBgbGFiZWxgIG9mIHRoZSByaWdodCBidXR0b24gb2YgdGhlIGRpYWxvZy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgcmlnaHRCdXR0b25MYWJlbD1cIk9LQVlcIiAjYWxlcnQgdGl0bGU9XCJOb3RpZmljYXRpb25cIiAgKGxlZnRCdXR0b25TZWxlY3QpPVwiYWxlcnQuY2xvc2UoKVwiPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByaWdodEJ1dHRvbkxhYmVsID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdG8gc2V0IHRoZSByaWdodCBidXR0b24gYHR5cGVgLiBUaGUgdHlwZXMgYXJlIGBmbGF0YCwgYHJhaXNlZGAgYW5kIGBmYWJgLlxuICAgICAqIFRoZSBgZmxhdGAgdHlwZSBidXR0b24gaXMgYSByZWN0YW5nbGUgYW5kIGRvZXNuJ3QgaGF2ZSBhIHNoYWRvdy4gPGJyPlxuICAgICAqIFRoZSBgcmFpc2VkYCB0eXBlIGJ1dHRvbiBpcyBhbHNvIGEgcmVjdGFuZ2xlIGJ1dCBoYXMgYSBzaGFkb3cuIDxicj5cbiAgICAgKiBUaGUgYGZhYmAgdHlwZSBidXR0b24gaXMgYSBjaXJjbGUgd2l0aCBhIHNoYWRvdy4gPGJyPlxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmbGF0YC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgcmlnaHRCdXR0b25UeXBlPVwiZmFiXCIgcmlnaHRCdXR0b25MYWJlbD1cIk9LQVlcIiAjYWxlcnQgKGxlZnRCdXR0b25TZWxlY3QpPVwiYWxlcnQuY2xvc2UoKVwiPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByaWdodEJ1dHRvblR5cGU6IElneEJ1dHRvblR5cGUgPSAnZmxhdCc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdG8gc2V0IHRoZSByaWdodCBidXR0b24gYGNvbG9yYC4gVGhlIHByb3BlcnR5IGFjY2VwdHMgYWxsIHZhbGlkIENTUyBjb2xvciBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIHJpZ2h0QnV0dG9uQ29sb3I9XCJ5ZWxsb3dcIiByaWdodEJ1dHRvbkxhYmVsPVwiT0tBWVwiICNhbGVydCAobGVmdEJ1dHRvblNlbGVjdCk9XCJhbGVydC5jbG9zZSgpXCI+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJpZ2h0QnV0dG9uQ29sb3IgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0byBzZXQgdGhlIHJpZ2h0IGJ1dHRvbiBgYmFja2dyb3VuZC1jb2xvcmAuIFRoZSBwcm9wZXJ0eSBhY2NlcHRzIGFsbCB2YWxpZCBDU1MgY29sb3IgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyByaWdodEJ1dHRvbkJhY2tncm91bmRDb2xvcj1cImJsYWNrXCIgcmlnaHRCdXR0b25MYWJlbD1cIk9LQVlcIiAjYWxlcnQgKGxlZnRCdXR0b25TZWxlY3QpPVwiYWxlcnQuY2xvc2UoKVwiPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByaWdodEJ1dHRvbkJhY2tncm91bmRDb2xvciA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRvIHNldCB0aGUgcmlnaHQgYnV0dG9uIGByaXBwbGVgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyByaWdodEJ1dHRvblJpcHBsZT1cImdyZWVuXCIgcmlnaHRCdXR0b25MYWJlbD1cIk9LQVlcIiAjYWxlcnQgKGxlZnRCdXR0b25TZWxlY3QpPVwiYWxlcnQuY2xvc2UoKVwiPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByaWdodEJ1dHRvblJpcHBsZSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBlbmFibGUgdGhlIFwiY2xvc2Ugb24gY2xpY2sgb3V0c2lkZSB0aGUgZGlhbG9nXCIuIEJ5IGRlZmF1bHQgaXQncyBkaXNhYmxlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgY2xvc2VPbk91dHNpZGVTZWxlY3Q9XCJ0cnVlXCIgbGVmdEJ1dHRvbkxhYmVsPVwiQ2FuY2VsXCIgKGxlZnRCdXR0b25TZWxlY3QpPVwiZGlhbG9nLmNsb3NlKClcIlxuICAgICAqIHJpZ2h0QnV0dG9uTGFiZWw9XCJPS1wiIHJpZ2h0QnV0dG9uUmlwcGxlPVwiIzRDQUY1MFwiIChyaWdodEJ1dHRvblNlbGVjdCk9XCJvbkRpYWxvZ09LU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAqIDwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgY2xvc2VPbk91dHNpZGVTZWxlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9zZU9uT3V0c2lkZVNlbGVjdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGNsb3NlT25PdXRzaWRlU2VsZWN0KHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9vdmVybGF5RGVmYXVsdFNldHRpbmdzLmNsb3NlT25PdXRzaWRlQ2xpY2sgPSB2YWw7XG4gICAgICAgIHRoaXMuX2Nsb3NlT25PdXRzaWRlU2VsZWN0ID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcG9zaXRpb24gYW5kIGFuaW1hdGlvbiBzZXR0aW5ncyB1c2VkIGJ5IHRoZSBkaWFsb2cuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoJ2FsZXJ0JywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIGFsZXJ0OiBJZ3hEaWFsb2dDb21wb25lbnQ7XG4gICAgICogbGV0IGN1cnJlbnRQb3NpdGlvbjogUG9zaXRpb25TZXR0aW5ncyA9IHRoaXMuYWxlcnQucG9zaXRpb25TZXR0aW5nc1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBwb3NpdGlvblNldHRpbmdzKCk6IFBvc2l0aW9uU2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHBvc2l0aW9uIGFuZCBhbmltYXRpb24gc2V0dGluZ3MgdXNlZCBieSB0aGUgZGlhbG9nLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBpbXBvcnQgeyBzbGlkZUluTGVmdCwgc2xpZGVPdXRSaWdodCB9IGZyb20gJ2lnbml0ZXVpLWFuZ3VsYXInO1xuICAgICAqIC4uLlxuICAgICAqIEBWaWV3Q2hpbGQoJ2FsZXJ0JywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIGFsZXJ0OiBJZ3hEaWFsb2dDb21wb25lbnQ7XG4gICAgICogIHB1YmxpYyBuZXdQb3NpdGlvblNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzID0ge1xuICAgICAqICAgICAgb3BlbkFuaW1hdGlvbjogdXNlQW5pbWF0aW9uKHNsaWRlSW5Ub3AsIHsgcGFyYW1zOiB7IGR1cmF0aW9uOiAnMjAwMG1zJyB9IH0pLFxuICAgICAqICAgICAgY2xvc2VBbmltYXRpb246IHVzZUFuaW1hdGlvbihzbGlkZU91dEJvdHRvbSwgeyBwYXJhbXM6IHsgZHVyYXRpb246ICcyMDAwbXMnfSB9KSxcbiAgICAgKiAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdCxcbiAgICAgKiAgICAgIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICogICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0LFxuICAgICAqICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5NaWRkbGUsXG4gICAgICogICAgICBtaW5TaXplOiB7IGhlaWdodDogMTAwLCB3aWR0aDogMTAwIH1cbiAgICAgKiAgfTtcbiAgICAgKiB0aGlzLmFsZXJ0LnBvc2l0aW9uU2V0dGluZ3MgPSB0aGlzLm5ld1Bvc2l0aW9uU2V0dGluZ3M7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBwb3NpdGlvblNldHRpbmdzKHNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uU2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgICAgdGhpcy5fb3ZlcmxheURlZmF1bHRTZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5ID0gbmV3IEdsb2JhbFBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb25TZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgYHRhYmluZGV4YCBhdHRyaWJ1dGUgZm9yIHRoZSBjb21wb25lbnRcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICAgIHB1YmxpYyB0YWJpbmRleCA9IC0xO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGJlZm9yZSB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgKG9wZW5pbmcpPVwib25EaWFsb2dPcGVuSGFuZGxlcigkZXZlbnQpXCIgKGxlZnRCdXR0b25TZWxlY3QpPVwiZGlhbG9nLmNsb3NlKClcIiByaWdodEJ1dHRvbkxhYmVsPVwiT0tcIj5cbiAgICAgKiA8L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9wZW5pbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElEaWFsb2dDYW5jZWxsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgKG9wZW5lZCk9XCJvbkRpYWxvZ09wZW5lZEhhbmRsZXIoJGV2ZW50KVwiIChsZWZ0QnV0dG9uU2VsZWN0KT1cImRpYWxvZy5jbG9zZSgpXCIgcmlnaHRCdXR0b25MYWJlbD1cIk9LXCI+XG4gICAgICogPC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElEaWFsb2dFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYmVmb3JlIHRoZSBkaWFsb2cgaXMgY2xvc2VkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyAoY2xvc2luZyk9XCJvbkRpYWxvZ0Nsb3NlSGFuZGxlcigkZXZlbnQpXCIgdGl0bGU9XCJDb25maXJtYXRpb25cIiBsZWZ0QnV0dG9uTGFiZWw9XCJDYW5jZWxcIiByaWdodEJ1dHRvbkxhYmVsPVwiT0tcIj5cbiAgICAgKiA8L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsb3NpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElEaWFsb2dDYW5jZWxsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgZGlhbG9nIGlzIGNsb3NlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgKGNsb3NlZCk9XCJvbkRpYWxvZ0Nsb3NlZEhhbmRsZXIoJGV2ZW50KVwiIHRpdGxlPVwiQ29uZmlybWF0aW9uXCIgbGVmdEJ1dHRvbkxhYmVsPVwiQ2FuY2VsXCIgcmlnaHRCdXR0b25MYWJlbD1cIk9LXCI+XG4gICAgICogPC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElEaWFsb2dFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgd2hlbiB0aGUgbGVmdCBidXR0b24gaXMgY2xpY2tlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgKGxlZnRCdXR0b25TZWxlY3QpPVwib25EaWFsb2dPS1NlbGVjdGVkKCRldmVudClcIiAjZGlhbG9nIGxlZnRCdXR0b25MYWJlbD1cIk9LXCIgcmlnaHRCdXR0b25MYWJlbD1cIkNhbmNlbFwiPlxuICAgICAqIDwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbGVmdEJ1dHRvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8SURpYWxvZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuIHRoZSByaWdodCBidXR0b24gaXMgY2xpY2tlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgKHJpZ2h0QnV0dG9uU2VsZWN0KT1cIm9uRGlhbG9nT0tTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgKiAjZGlhbG9nIHRpdGxlPVwiQ29uZmlybWF0aW9uXCIgKGxlZnRCdXR0b25TZWxlY3QpPVwiZGlhbG9nLmNsb3NlKClcIiByaWdodEJ1dHRvbkxhYmVsPVwiT0tcIlxuICAgICAqIHJpZ2h0QnV0dG9uUmlwcGxlPVwiIzRDQUY1MFwiIGNsb3NlT25PdXRzaWRlU2VsZWN0PVwidHJ1ZVwiPlxuICAgICAqIDwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmlnaHRCdXR0b25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPElEaWFsb2dFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBpc09wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2Ygc3RhdGUuIFBvc3NpYmxlIHN0YXRlIHZhbHVlcyBhcmUgXCJvcGVuXCIgb3IgXCJjbG9zZVwiLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlEaWFsb2dcIilcbiAgICAgKiBwdWJsaWMgZGlhbG9nOiBJZ3hEaWFsb2dDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAqICAgICBsZXQgZGlhbG9nU3RhdGUgPSB0aGlzLmRpYWxvZy5zdGF0ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBzdGF0ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09wZW4gPyAnb3BlbicgOiAnY2xvc2UnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0YXRlIG9mIHRoZSBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IGRpYWxvZ0lzT3BlbiA9IHRoaXMuZGlhbG9nLmlzT3BlbjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tc2V0LS0+XG4gICAgICogPGlneC1kaWFsb2cgW2lzT3Blbl09J2ZhbHNlJz48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUd28td2F5IGRhdGEgYmluZGluZy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtZGlhbG9nIFsoaXNPcGVuKV09J21vZGVsLmlzT3Blbic+PC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpc09wZW4oKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50b2dnbGVSZWYuY29sbGFwc2VkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGlzT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kaWFsb2ctLWhpZGRlbicpXG4gICAgcHVibGljIGdldCBpc0NvbGxhcHNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlUmVmLmNvbGxhcHNlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcm9sZSBvZiB0aGUgZGlhbG9nLiBUaGUgdmFsaWQgdmFsdWVzIGFyZSBgZGlhbG9nYCwgYGFsZXJ0ZGlhbG9nYCwgYGFsZXJ0YC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15RGlhbG9nXCIpXG4gICAgICogcHVibGljIGRpYWxvZzogSWd4RGlhbG9nQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgICAgbGV0IGRpYWxvZ1JvbGUgPSB0aGlzLmRpYWxvZy5yb2xlO1xuICAgICAqIH1cbiAgICAgKiAgYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHJvbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmxlZnRCdXR0b25MYWJlbCAhPT0gJycgJiYgdGhpcy5yaWdodEJ1dHRvbkxhYmVsICE9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICdkaWFsb2cnO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uTGFiZWwgIT09ICcnIHx8XG4gICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uTGFiZWwgIT09ICcnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuICdhbGVydGRpYWxvZyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ2FsZXJ0JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSB0aXRsZSBpZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJNeURpYWxvZ1wiKVxuICAgICAqIHB1YmxpYyBkaWFsb2c6IElneERpYWxvZ0NvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICogICAgIGxldCBkaWFsb2dUaXRsZSA9IHRoaXMuZGlhbG9nLnRpdGxlSWQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0aXRsZUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVJZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgcHJpdmF0ZSBfcG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgb3BlbkFuaW1hdGlvbjogZmFkZUluLFxuICAgICAgICBjbG9zZUFuaW1hdGlvbjogZmFkZU91dFxuICAgIH07XG5cbiAgICBwcml2YXRlIF9vdmVybGF5RGVmYXVsdFNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3M7XG4gICAgcHJpdmF0ZSBfY2xvc2VPbk91dHNpZGVTZWxlY3QgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9jbG9zZU9uRXNjYXBlID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9pc01vZGFsID0gdHJ1ZTtcbiAgICBwcml2YXRlIF90aXRsZUlkOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG5hdlNlcnZpY2U6IElneE5hdmlnYXRpb25TZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX3RpdGxlSWQgPSBJZ3hEaWFsb2dDb21wb25lbnQuTkVYVF9JRCsrICsgJ190aXRsZSc7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheURlZmF1bHRTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uU2V0dGluZ3MpLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBOb09wU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIG1vZGFsOiB0aGlzLmlzTW9kYWwsXG4gICAgICAgICAgICBjbG9zZU9uRXNjYXBlOiB0aGlzLl9jbG9zZU9uRXNjYXBlLFxuICAgICAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdGhpcy5jbG9zZU9uT3V0c2lkZVNlbGVjdFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlUmVmLmNsb3NpbmcucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnRBcmdzKSA9PiB0aGlzLmVtaXRDbG9zZUZyb21EaWFsb2coZXZlbnRBcmdzKSk7XG4gICAgICAgIHRoaXMudG9nZ2xlUmVmLmNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChldmVudEFyZ3MpID0+IHRoaXMuZW1pdENsb3NlZEZyb21EaWFsb2coZXZlbnRBcmdzKSk7XG4gICAgICAgIHRoaXMudG9nZ2xlUmVmLm9wZW5lZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChldmVudEFyZ3MpID0+IHRoaXMuZW1pdE9wZW5lZEZyb21EaWFsb2coZXZlbnRBcmdzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBtZXRob2QgdGhhdCBvcGVucyB0aGUgZGlhbG9nLlxuICAgICAqXG4gICAgICogQG1lbWJlck9mIHtAbGluayBJZ3hEaWFsb2dDb21wb25lbnR9XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkaWFsb2cub3BlbigpIGlneEJ1dHRvbj1cInJhaXNlZFwiIGlneEJ1dHRvbkNvbG9yPVwid2hpdGVcIiBpZ3hSaXBwbGU9XCJ3aGl0ZVwiPlRyaWdnZXIgRGlhbG9nPC9idXR0b24+XG4gICAgICogPGlneC1kaWFsb2cgI2RpYWxvZz48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG9wZW4ob3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB0aGlzLl9vdmVybGF5RGVmYXVsdFNldHRpbmdzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50QXJnczogSURpYWxvZ0NhbmNlbGxhYmxlRXZlbnRBcmdzID0geyBkaWFsb2c6IHRoaXMsIGV2ZW50OiBudWxsLCBjYW5jZWw6IGZhbHNlIH07XG4gICAgICAgIHRoaXMub3BlbmluZy5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIGlmICghZXZlbnRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVSZWYub3BlbihvdmVybGF5U2V0dGluZ3MpO1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5sZWZ0QnV0dG9uTGFiZWwgJiYgIXRoaXMucmlnaHRCdXR0b25MYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLmVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBtZXRob2QgdGhhdCB0aGF0IGNsb3NlcyB0aGUgZGlhbG9nLlxuICAgICAqXG4gICAgICogIEBtZW1iZXJPZiB7QGxpbmsgSWd4RGlhbG9nQ29tcG9uZW50fVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGlhbG9nLmNsb3NlKCkgaWd4QnV0dG9uPVwicmFpc2VkXCIgaWd4QnV0dG9uQ29sb3I9XCJ3aGl0ZVwiIGlneFJpcHBsZT1cIndoaXRlXCI+VHJpZ2dlciBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiA8aWd4LWRpYWxvZyAjZGlhbG9nPjwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKSB7XG4gICAgICAgIC8vIGBjbG9zaW5nYCB3aWxsIGVtaXQgZnJvbSBgdG9nZ2xlUmVmLmNsb3NpbmdgIHN1YnNjcmlwdGlvblxuICAgICAgICB0aGlzLnRvZ2dsZVJlZi5jbG9zZSgpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQSBtZXRob2QgdGhhdCBvcGVucy9jbG9zZXMgdGhlIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiB7QGxpbmsgSWd4RGlhbG9nQ29tcG9uZW50fVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGlhbG9nLnRvZ2dsZSgpIGlneEJ1dHRvbj1cInJhaXNlZFwiIGlneEJ1dHRvbkNvbG9yPVwid2hpdGVcIiBpZ3hSaXBwbGU9XCJ3aGl0ZVwiPlRyaWdnZXIgRGlhbG9nPC9idXR0b24+XG4gICAgICogPGlneC1kaWFsb2cgI2RpYWxvZz48L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25EaWFsb2dTZWxlY3RlZChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc09wZW4gJiZcbiAgICAgICAgICAgIHRoaXMuY2xvc2VPbk91dHNpZGVTZWxlY3QgJiZcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoSWd4RGlhbG9nQ29tcG9uZW50LkRJQUxPR19DTEFTUylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uSW50ZXJuYWxMZWZ0QnV0dG9uU2VsZWN0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMubGVmdEJ1dHRvblNlbGVjdC5lbWl0KHsgZGlhbG9nOiB0aGlzLCBldmVudCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uSW50ZXJuYWxSaWdodEJ1dHRvblNlbGVjdChldmVudCkge1xuICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uU2VsZWN0LmVtaXQoeyBkaWFsb2c6IHRoaXMsIGV2ZW50IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UgJiYgdGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmFkZCh0aGlzLmlkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5uYXZTZXJ2aWNlICYmIHRoaXMuaWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5yZW1vdmUodGhpcy5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDbG9zZUZyb21EaWFsb2coZXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ0V2ZW50c0FyZ3MgPSB7IGRpYWxvZzogdGhpcywgZXZlbnQ6IGV2ZW50QXJncy5ldmVudCwgY2FuY2VsOiBldmVudEFyZ3MuY2FuY2VsIH07XG4gICAgICAgIHRoaXMuY2xvc2luZy5lbWl0KGRpYWxvZ0V2ZW50c0FyZ3MpO1xuICAgICAgICBldmVudEFyZ3MuY2FuY2VsID0gZGlhbG9nRXZlbnRzQXJncy5jYW5jZWw7XG4gICAgICAgIGlmICghZXZlbnRBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDbG9zZWRGcm9tRGlhbG9nKGV2ZW50QXJncykge1xuICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KHsgZGlhbG9nOiB0aGlzLCBldmVudDogZXZlbnRBcmdzLmV2ZW50IH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdE9wZW5lZEZyb21EaWFsb2coZXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBkaWFsb2c6IHRoaXMsIGV2ZW50OiBldmVudEFyZ3MuZXZlbnQgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEaWFsb2dFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgZGlhbG9nOiBJZ3hEaWFsb2dDb21wb25lbnQ7XG4gICAgZXZlbnQ6IEV2ZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEaWFsb2dDYW5jZWxsYWJsZUV2ZW50QXJncyBleHRlbmRzIElEaWFsb2dFdmVudEFyZ3MsIENhbmNlbGFibGVFdmVudEFyZ3MgeyB9XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneERpYWxvZ0NvbXBvbmVudCwgSWd4RGlhbG9nVGl0bGVEaXJlY3RpdmUsIElneERpYWxvZ0FjdGlvbnNEaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtJZ3hEaWFsb2dDb21wb25lbnQsIElneERpYWxvZ1RpdGxlRGlyZWN0aXZlLCBJZ3hEaWFsb2dBY3Rpb25zRGlyZWN0aXZlXSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJZ3hUb2dnbGVNb2R1bGUsIElneEJ1dHRvbk1vZHVsZSwgSWd4UmlwcGxlTW9kdWxlLCBJZ3hGb2N1c01vZHVsZSwgSWd4Rm9jdXNUcmFwTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hEaWFsb2dNb2R1bGUgeyB9XG5cbmV4cG9ydCAqIGZyb20gJy4vZGlhbG9nLmRpcmVjdGl2ZXMnO1xuIiwiPGRpdiB0YWJpbmRleD1cIjBcIiAjZGlhbG9nIGNsYXNzPVwiaWd4LWRpYWxvZ1wiIGlneFRvZ2dsZSBbaWd4Rm9jdXNUcmFwXT1cImZvY3VzVHJhcFwiIChjbGljayk9XCJvbkRpYWxvZ1NlbGVjdGVkKCRldmVudClcIj5cbiAgICA8ZGl2ICNkaWFsb2dXaW5kb3cgY2xhc3M9XCJpZ3gtZGlhbG9nX193aW5kb3dcIiAgW2F0dHIucm9sZV09XCJyb2xlXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRpdGxlSWRcIj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGl0bGVcIiBbYXR0ci5pZF09XCJ0aXRsZUlkXCIgY2xhc3M9XCJpZ3gtZGlhbG9nX193aW5kb3ctdGl0bGVcIj5cbiAgICAgICAgICAgIHt7IHRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGVudCAqbmdJZj1cIiF0aXRsZVwiIHNlbGVjdD1cImlneC1kaWFsb2ctdGl0bGUsW2lneERpYWxvZ1RpdGxlXVwiPjwvbmctY29udGVudD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWRpYWxvZ19fd2luZG93LWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWVzc2FnZVwiIGNsYXNzPVwiaWd4LWRpYWxvZ19fd2luZG93LW1lc3NhZ2VcIj57eyBtZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhbWVzc2FnZVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImxlZnRCdXR0b25MYWJlbCB8fCByaWdodEJ1dHRvbkxhYmVsXCIgY2xhc3M9XCJpZ3gtZGlhbG9nX193aW5kb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImxlZnRCdXR0b25MYWJlbFwiIHR5cGU9XCJidXR0b25cIiBbaWd4Rm9jdXNdPVwiaXNPcGVuXCIgW2lneEJ1dHRvbl09XCJsZWZ0QnV0dG9uVHlwZVwiIGlneEJ1dHRvbkNvbG9yPVwie3sgbGVmdEJ1dHRvbkNvbG9yIH19XCIgaWd4QnV0dG9uQmFja2dyb3VuZD1cInt7IGxlZnRCdXR0b25CYWNrZ3JvdW5kQ29sb3IgfX1cIlxuICAgICAgICAgICAgICAgIGlneFJpcHBsZT1cInt7IGxlZnRCdXR0b25SaXBwbGUgfX1cIiAoY2xpY2spPVwib25JbnRlcm5hbExlZnRCdXR0b25TZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIHt7IGxlZnRCdXR0b25MYWJlbCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmlnaHRCdXR0b25MYWJlbFwiIHR5cGU9XCJidXR0b25cIiBbaWd4Rm9jdXNdPVwiaXNPcGVuXCIgW2lneEJ1dHRvbl09XCJyaWdodEJ1dHRvblR5cGVcIiBpZ3hCdXR0b25Db2xvcj1cInt7IHJpZ2h0QnV0dG9uQ29sb3IgfX1cIiBpZ3hCdXR0b25CYWNrZ3JvdW5kPVwie3sgcmlnaHRCdXR0b25CYWNrZ3JvdW5kQ29sb3IgfX1cIlxuICAgICAgICAgICAgICAgIGlneFJpcHBsZT1cInt7IHJpZ2h0QnV0dG9uUmlwcGxlIH19XCIgKGNsaWNrKT1cIm9uSW50ZXJuYWxSaWdodEJ1dHRvblNlbGVjdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAge3sgcmlnaHRCdXR0b25MYWJlbCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGVudCAqbmdJZj1cIiFsZWZ0QnV0dG9uTGFiZWwgJiYgIXJpZ2h0QnV0dG9uTGFiZWxcIiBzZWxlY3Q9XCJpZ3gtZGlhbG9nLWFjdGlvbnMsW2lneERpYWxvZ0FjdGlvbnNdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -25,7 +25,7 @@ const IgxButtonType = mkenum({
25
25
  *
26
26
  * @example
27
27
  * ```html
28
- * <button igxButton="outlined">A Button</button>
28
+ * <button type="button" igxButton="outlined">A Button</button>
29
29
  * ```
30
30
  */
31
31
  export class IgxButtonDirective extends DisplayDensityBase {
@@ -35,7 +35,7 @@ export class IgxButtonDirective extends DisplayDensityBase {
35
35
  *
36
36
  * @example
37
37
  * ```html
38
- * <button igxButton="flat" [selected]="button.selected"></button>
38
+ * <button type="button" igxButton="flat" [selected]="button.selected"></button>
39
39
  * ```
40
40
  */
41
41
  set selected(value) {
@@ -108,7 +108,7 @@ export class IgxButtonDirective extends DisplayDensityBase {
108
108
  *
109
109
  * @example
110
110
  * ```html
111
- * <button igxButton="icon"></button>
111
+ * <button type="button" igxButton="icon"></button>
112
112
  * ```
113
113
  */
114
114
  set type(type) {
@@ -122,7 +122,7 @@ export class IgxButtonDirective extends DisplayDensityBase {
122
122
  *
123
123
  * @example
124
124
  * ```html
125
- * <button igxButton igxButtonColor="orange"></button>
125
+ * <button type="button" igxButton igxButtonColor="orange"></button>
126
126
  * ```
127
127
  */
128
128
  set color(value) {
@@ -134,7 +134,7 @@ export class IgxButtonDirective extends DisplayDensityBase {
134
134
  *
135
135
  * @example
136
136
  * ```html
137
- * <button igxButton igxButtonBackground="red"></button>
137
+ * <button type="button" igxButton igxButtonBackground="red"></button>
138
138
  * ```
139
139
  */
140
140
  set background(value) {
@@ -146,7 +146,7 @@ export class IgxButtonDirective extends DisplayDensityBase {
146
146
  *
147
147
  * @example
148
148
  * ```html
149
- * <button igxButton="flat" igxLabel="Label"></button>
149
+ * <button type="button" igxButton="flat" igxLabel="Label"></button>
150
150
  * ```
151
151
  */
152
152
  set label(value) {
@@ -169,7 +169,7 @@ export class IgxButtonDirective extends DisplayDensityBase {
169
169
  *
170
170
  * @example
171
171
  * ```html
172
- * <button igxButton= "fab" [disabled]="true"></button>
172
+ * <button type="button" igxButton="fab" [disabled]="true"></button>
173
173
  * ```
174
174
  */
175
175
  set disabled(val) {
@@ -331,4 +331,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
331
331
  exports: [IgxButtonDirective]
332
332
  }]
333
333
  }] });
334
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFFUixZQUFZLEVBQ1osUUFBUSxFQUNSLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQTBCLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHMUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLElBQUksRUFBRSxNQUFNO0lBQ1osTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsS0FBSztDQUNiLENBQUMsQ0FBQztBQU9IOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFJSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsa0JBQWtCO0lBdUV0RDs7Ozs7Ozs7T0FRRztJQUNILElBQ1csUUFBUSxDQUFDLEtBQWM7UUFDOUIsSUFBRyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRTtZQUN6QixJQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7b0JBQ3JCLE1BQU0sRUFBRSxJQUFJO2lCQUNmLENBQUMsQ0FBQzthQUNOO1lBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2Ys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ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgUmVuZGVyZXIyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBPcHRpb25hbCxcbiAgICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eUJhc2UsIERpc3BsYXlEZW5zaXR5VG9rZW4sIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsIERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IG1rZW51bSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcblxuY29uc3QgSWd4QnV0dG9uVHlwZSA9IG1rZW51bSh7XG4gICAgRmxhdDogJ2ZsYXQnLFxuICAgIFJhaXNlZDogJ3JhaXNlZCcsXG4gICAgT3V0bGluZWQ6ICdvdXRsaW5lZCcsXG4gICAgSWNvbjogJ2ljb24nLFxuICAgIEZBQjogJ2ZhYidcbn0pO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIEJ1dHRvbiB0eXBlLlxuICovXG5leHBvcnQgdHlwZSBJZ3hCdXR0b25UeXBlID0gdHlwZW9mIElneEJ1dHRvblR5cGVba2V5b2YgdHlwZW9mIElneEJ1dHRvblR5cGVdO1xuXG4vKipcbiAqIFRoZSBCdXR0b24gZGlyZWN0aXZlIHByb3ZpZGVzIHRoZSBJZ25pdGUgVUkgQnV0dG9uIGZ1bmN0aW9uYWxpdHkgdG8gZXZlcnkgY29tcG9uZW50IHRoYXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgYnV0dG9uLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4QnV0dG9uTW9kdWxlXG4gKlxuICogQGlneFBhcmVudCBEYXRhIEVudHJ5ICYgRGlzcGxheVxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtYnV0dG9uLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGJ1dHRvbiwgc3BhbiwgZGl2LCBjbGlja1xuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIEJ1dHRvbiBkaXJlY3RpdmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBhbnkgYnV0dG9uLCBzcGFuIG9yIGRpdiBhbmQgdHVybiBpdCBpbnRvIGEgZnVsbHkgZnVuY3Rpb25hbCBidXR0b24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gaWd4QnV0dG9uPVwib3V0bGluZWRcIj5BIEJ1dHRvbjwvYnV0dG9uPlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneEJ1dHRvbl0nXG59KVxuZXhwb3J0IGNsYXNzIElneEJ1dHRvbkRpcmVjdGl2ZSBleHRlbmRzIERpc3BsYXlEZW5zaXR5QmFzZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdHlwZTogSWd4QnV0dG9uVHlwZSB8ICcnO1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBib29sZWFuIHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgYnV0dG9uIGlzIHNlbGVjdGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBidXR0b25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJ1dHRvbkV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYHJvbGVgIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuYnV0dG9uLnJvbGUgPSAnbmF2YnV0dG9uJztcbiAgICAgKiBsZXQgYnV0dG9uUm9sZSA9IHRoaXMuYnV0dG9uLnJvbGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ2J1dHRvbic7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtYnV0dG9uJylcbiAgICBwdWJsaWMgX2Nzc0NsYXNzID0gJ2lneC1idXR0b24nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF90eXBlOiBJZ3hCdXR0b25UeXBlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbG9yOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9iYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBzZWxlY3RlZC5cbiAgICAgKiBNYWlubHkgdXNlZCBpbiB0aGUgSWd4QnV0dG9uR3JvdXAgY29tcG9uZW50IGFuZCBpdCB3aWxsIGhhdmUgbm8gZWZmZWN0IGlmIHNldCBzZXBhcmF0ZWx5LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b249XCJmbGF0XCIgW3NlbGVjdGVkXT1cImJ1dHRvbi5zZWxlY3RlZFwiPjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZih0aGlzLl9zZWxlY3RlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGlmKCF0aGlzLl9zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uU2VsZWN0ZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbjogdGhpc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9uc1xuICAgICkge1xuICAgICAgICBzdXBlcihfZGlzcGxheURlbnNpdHlPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkNsaWNrKGV2OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQ2xpY2suZW1pdChldik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdW5kZXJseWluZyBET00gZWxlbWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0eXBlIG9mIHRoZSBidXR0b24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbj1cImljb25cIj48L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEJ1dHRvbicpXG4gICAgcHVibGljIHNldCB0eXBlKHR5cGU6IElneEJ1dHRvblR5cGUpIHtcbiAgICAgICAgY29uc3QgdCA9IHR5cGUgPyB0eXBlIDogSWd4QnV0dG9uVHlwZS5GbGF0O1xuICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gdCkge1xuICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBidXR0b24gdGV4dCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxidXR0b24gaWd4QnV0dG9uIGlneEJ1dHRvbkNvbG9yPVwib3JhbmdlXCI+PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hCdXR0b25Db2xvcicpXG4gICAgcHVibGljIHNldCBjb2xvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NvbG9yID0gdmFsdWUgfHwgdGhpcy5uYXRpdmVFbGVtZW50LnN0eWxlLmNvbG9yO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdjb2xvcicsIHRoaXMuX2NvbG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBidXR0b24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBgYGBodG1sXG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gaWd4QnV0dG9uQmFja2dyb3VuZD1cInJlZFwiPjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4QnV0dG9uQmFja2dyb3VuZCcpXG4gICAgcHVibGljIHNldCBiYWNrZ3JvdW5kKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gdmFsdWUgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdiYWNrZ3JvdW5kJywgdGhpcy5fYmFja2dyb3VuZENvbG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgYGBgaHRtbFxuICAgICAqIDxidXR0b24gaWd4QnV0dG9uPVwiZmxhdFwiIGlneExhYmVsPVwiTGFiZWxcIj48L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneExhYmVsJylcbiAgICBwdWJsaWMgc2V0IGxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSB2YWx1ZSB8fCB0aGlzLl9sYWJlbDtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubmF0aXZlRWxlbWVudCwgJ2FyaWEtbGFiZWwnLCB0aGlzLl9sYWJlbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgYnV0dG9uO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgZGlzYWJsZWQgPSB0aGlzLmJ1dHRvbi5kaXNhYmxlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWJ1dHRvbi0tZGlzYWJsZWQnKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzL2Rpc2FibGVzIHRoZSBidXR0b24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbj0gXCJmYWJcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gKHZhbCBhcyBhbnkgPT09ICcnKSB8fCB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWJ1dHRvbi0tZmxhdCcpXG4gICAgcHVibGljIGdldCBmbGF0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gSWd4QnV0dG9uVHlwZS5GbGF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1idXR0b24tLXJhaXNlZCcpXG4gICAgcHVibGljIGdldCByYWlzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlID09PSBJZ3hCdXR0b25UeXBlLlJhaXNlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtYnV0dG9uLS1vdXRsaW5lZCcpXG4gICAgcHVibGljIGdldCBvdXRsaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09IElneEJ1dHRvblR5cGUuT3V0bGluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWJ1dHRvbi0taWNvbicpXG4gICAgcHVibGljIGdldCBpY29uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gSWd4QnV0dG9uVHlwZS5JY29uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1idXR0b24tLWZhYicpXG4gICAgcHVibGljIGdldCBmYWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlID09PSBJZ3hCdXR0b25UeXBlLkZBQjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtYnV0dG9uLS1jb3N5JylcbiAgICBwdWJsaWMgZ2V0IGNvc3koKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb3N5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1idXR0b24tLWNvbXBhY3QnKVxuICAgIHB1YmxpYyBnZXQgY29tcGFjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvbXBhY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkID8gdGhpcy5fZGlzYWJsZWQgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRlc2VsZWN0KCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQnV0dG9uRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGJ1dHRvbjogSWd4QnV0dG9uRGlyZWN0aXZlO1xufVxuXG4vKipcbiAqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4QnV0dG9uRGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbSWd4QnV0dG9uRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hCdXR0b25Nb2R1bGUge31cbiJdfQ==
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFFUixZQUFZLEVBQ1osUUFBUSxFQUNSLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQTBCLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHMUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLElBQUksRUFBRSxNQUFNO0lBQ1osTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsS0FBSztDQUNiLENBQUMsQ0FBQztBQU9IOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFJSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsa0JBQWtCO0lBdUV0RDs7Ozs7Ozs7T0FRRztJQUNILElBQ1csUUFBUSxDQUFDLEtBQWM7UUFDOUIsSUFBRyxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRTtZQUN6QixJQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7b0JBQ3JCLE1BQU0sRUFBRSxJQUFJO2lCQUNmLENBQUMsQ0FBQzthQUNOO1lBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2Ys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ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgUmVuZGVyZXIyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBPcHRpb25hbCxcbiAgICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eUJhc2UsIERpc3BsYXlEZW5zaXR5VG9rZW4sIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsIERpc3BsYXlEZW5zaXR5IH0gZnJvbSAnLi4vLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IG1rZW51bSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcblxuY29uc3QgSWd4QnV0dG9uVHlwZSA9IG1rZW51bSh7XG4gICAgRmxhdDogJ2ZsYXQnLFxuICAgIFJhaXNlZDogJ3JhaXNlZCcsXG4gICAgT3V0bGluZWQ6ICdvdXRsaW5lZCcsXG4gICAgSWNvbjogJ2ljb24nLFxuICAgIEZBQjogJ2ZhYidcbn0pO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIEJ1dHRvbiB0eXBlLlxuICovXG5leHBvcnQgdHlwZSBJZ3hCdXR0b25UeXBlID0gdHlwZW9mIElneEJ1dHRvblR5cGVba2V5b2YgdHlwZW9mIElneEJ1dHRvblR5cGVdO1xuXG4vKipcbiAqIFRoZSBCdXR0b24gZGlyZWN0aXZlIHByb3ZpZGVzIHRoZSBJZ25pdGUgVUkgQnV0dG9uIGZ1bmN0aW9uYWxpdHkgdG8gZXZlcnkgY29tcG9uZW50IHRoYXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgYnV0dG9uLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4QnV0dG9uTW9kdWxlXG4gKlxuICogQGlneFBhcmVudCBEYXRhIEVudHJ5ICYgRGlzcGxheVxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtYnV0dG9uLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGJ1dHRvbiwgc3BhbiwgZGl2LCBjbGlja1xuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIEJ1dHRvbiBkaXJlY3RpdmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBhbnkgYnV0dG9uLCBzcGFuIG9yIGRpdiBhbmQgdHVybiBpdCBpbnRvIGEgZnVsbHkgZnVuY3Rpb25hbCBidXR0b24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbj1cIm91dGxpbmVkXCI+QSBCdXR0b248L2J1dHRvbj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hCdXR0b25dJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hCdXR0b25EaXJlY3RpdmUgZXh0ZW5kcyBEaXNwbGF5RGVuc2l0eUJhc2Uge1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3R5cGU6IElneEJ1dHRvblR5cGUgfCAnJztcbiAgICBwcml2YXRlIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogYm9vbGVhbiB8ICcnO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBidXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIGJ1dHRvbiBpcyBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYnV0dG9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElCdXR0b25FdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGByb2xlYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmJ1dHRvbi5yb2xlID0gJ25hdmJ1dHRvbic7XG4gICAgICogbGV0IGJ1dHRvblJvbGUgPSB0aGlzLmJ1dHRvbi5yb2xlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICdidXR0b24nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWJ1dHRvbicpXG4gICAgcHVibGljIF9jc3NDbGFzcyA9ICdpZ3gtYnV0dG9uJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdHlwZTogSWd4QnV0dG9uVHlwZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb2xvcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2xhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBidXR0b24gaXMgc2VsZWN0ZWQuXG4gICAgICogTWFpbmx5IHVzZWQgaW4gdGhlIElneEJ1dHRvbkdyb3VwIGNvbXBvbmVudCBhbmQgaXQgd2lsbCBoYXZlIG5vIGVmZmVjdCBpZiBzZXQgc2VwYXJhdGVseS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbj1cImZsYXRcIiBbc2VsZWN0ZWRdPVwiYnV0dG9uLnNlbGVjdGVkXCI+PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmKHRoaXMuX3NlbGVjdGVkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgaWYoIXRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25TZWxlY3RlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uOiB0aGlzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIHByb3RlY3RlZCBfZGlzcGxheURlbnNpdHlPcHRpb25zOiBJRGlzcGxheURlbnNpdHlPcHRpb25zXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQ2xpY2soZXY6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5idXR0b25DbGljay5lbWl0KGV2KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIERPTSBlbGVtZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHR5cGUgb2YgdGhlIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbj1cImljb25cIj48L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEJ1dHRvbicpXG4gICAgcHVibGljIHNldCB0eXBlKHR5cGU6IElneEJ1dHRvblR5cGUpIHtcbiAgICAgICAgY29uc3QgdCA9IHR5cGUgPyB0eXBlIDogSWd4QnV0dG9uVHlwZS5GbGF0O1xuICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gdCkge1xuICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBidXR0b24gdGV4dCBjb2xvci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbiBpZ3hCdXR0b25Db2xvcj1cIm9yYW5nZVwiPjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4QnV0dG9uQ29sb3InKVxuICAgIHB1YmxpYyBzZXQgY29sb3IodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jb2xvciA9IHZhbHVlIHx8IHRoaXMubmF0aXZlRWxlbWVudC5zdHlsZS5jb2xvcjtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5uYXRpdmVFbGVtZW50LCAnY29sb3InLCB0aGlzLl9jb2xvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYnV0dG9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgYGBgaHRtbFxuICAgICAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbiBpZ3hCdXR0b25CYWNrZ3JvdW5kPVwicmVkXCI+PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hCdXR0b25CYWNrZ3JvdW5kJylcbiAgICBwdWJsaWMgc2V0IGJhY2tncm91bmQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZSB8fCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMubmF0aXZlRWxlbWVudCwgJ2JhY2tncm91bmQnLCB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBgYGBodG1sXG4gICAgICogPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uPVwiZmxhdFwiIGlneExhYmVsPVwiTGFiZWxcIj48L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneExhYmVsJylcbiAgICBwdWJsaWMgc2V0IGxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSB2YWx1ZSB8fCB0aGlzLl9sYWJlbDtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubmF0aXZlRWxlbWVudCwgJ2FyaWEtbGFiZWwnLCB0aGlzLl9sYWJlbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgYnV0dG9uO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgZGlzYWJsZWQgPSB0aGlzLmJ1dHRvbi5kaXNhYmxlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWJ1dHRvbi0tZGlzYWJsZWQnKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzL2Rpc2FibGVzIHRoZSBidXR0b24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZ3hCdXR0b249XCJmYWJcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gKHZhbCBhcyBhbnkgPT09ICcnKSB8fCB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWJ1dHRvbi0tZmxhdCcpXG4gICAgcHVibGljIGdldCBmbGF0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gSWd4QnV0dG9uVHlwZS5GbGF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1idXR0b24tLXJhaXNlZCcpXG4gICAgcHVibGljIGdldCByYWlzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlID09PSBJZ3hCdXR0b25UeXBlLlJhaXNlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtYnV0dG9uLS1vdXRsaW5lZCcpXG4gICAgcHVibGljIGdldCBvdXRsaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09IElneEJ1dHRvblR5cGUuT3V0bGluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWJ1dHRvbi0taWNvbicpXG4gICAgcHVibGljIGdldCBpY29uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gSWd4QnV0dG9uVHlwZS5JY29uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1idXR0b24tLWZhYicpXG4gICAgcHVibGljIGdldCBmYWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlID09PSBJZ3hCdXR0b25UeXBlLkZBQjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtYnV0dG9uLS1jb3N5JylcbiAgICBwdWJsaWMgZ2V0IGNvc3koKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb3N5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1idXR0b24tLWNvbXBhY3QnKVxuICAgIHB1YmxpYyBnZXQgY29tcGFjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvbXBhY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkID8gdGhpcy5fZGlzYWJsZWQgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRlc2VsZWN0KCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQnV0dG9uRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGJ1dHRvbjogSWd4QnV0dG9uRGlyZWN0aXZlO1xufVxuXG4vKipcbiAqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4QnV0dG9uRGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbSWd4QnV0dG9uRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hCdXR0b25Nb2R1bGUge31cbiJdfQ==
@@ -6,7 +6,7 @@ export class IgxRippleDirective {
6
6
  /**
7
7
  * Enables/disables the ripple to be centered.
8
8
  * ```html
9
- * <button #rippleContainer igxRipple [igxRippleCentered] = "true"></button>
9
+ * <button type="button" #rippleContainer igxButton igxRipple [igxRippleCentered]="true"></button>
10
10
  * ```
11
11
  *
12
12
  * @memberof IgxRippleDirective
@@ -34,8 +34,8 @@ export class IgxRippleDirective {
34
34
  * ```
35
35
  * Can set the ripple to activate on a child element inside the parent where igxRipple is defined.
36
36
  * ```html
37
- * <div #rippleContainer [igxRippleTarget] = "'#child"'>
38
- * <button id="child">Click</button>
37
+ * <div #rippleContainer [igxRippleTarget]="'#child"'>
38
+ * <button type="button" igxButton id="child">Click</button>
39
39
  * </div>
40
40
  * ```
41
41
  *
@@ -46,7 +46,7 @@ export class IgxRippleDirective {
46
46
  * Sets/gets the ripple duration(in milliseconds).
47
47
  * Default value is `600`.
48
48
  * ```html
49
- * <button #rippleContainer igxRipple [igxRippleDuration] = "800"></button>
49
+ * <button type="button" #rippleContainer igxButton igxRipple [igxRippleDuration]="800"></button>
50
50
  * ```
51
51
  * ```typescript
52
52
  * @ViewChild('rippleContainer', {read: IgxRippleDirective})
@@ -61,7 +61,7 @@ export class IgxRippleDirective {
61
61
  * Sets/gets whether the ripple is disabled.
62
62
  * Default value is `false`.
63
63
  * ```html
64
- * <button #rippleContainer igxRipple [igxRippleDisabled] = "true"></button>
64
+ * <button type="button" #rippleContainer igxRipple [igxRippleDisabled]="true"></button>
65
65
  * ```
66
66
  * ```typescript
67
67
  * @ViewChild('rippleContainer', {read: IgxRippleDirective})
@@ -170,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
170
170
  exports: [IgxRippleDirective]
171
171
  }]
172
172
  }] });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlwcGxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaXJlY3RpdmVzL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBb0IsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFLdkUsTUFBTSxPQUFPLGtCQUFrQjtJQXFEM0I7Ozs7Ozs7T0FPRztJQUNILElBQ1csUUFBUSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBa0JELElBQWMsYUFBYTtRQUN2QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFPRCxZQUNjLE9BQXlCLEVBQ3pCLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ3JCLElBQVk7UUFIVixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDckIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQTlGeEI7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQWtCRztRQUVJLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBZ0J6Qjs7Ozs7Ozs7Ozs7OztXQWFHO1FBRUksbUJBQWMsR0FBRyxHQUFHLENBQUM7UUFhNUI7Ozs7Ozs7Ozs7Ozs7V0FhRztRQUVJLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBTXRCLHVCQUFrQixHQUFHLG1CQUFtQixDQUFDO1FBQ3pDLG9CQUFlLEdBQUcsWUFBWSxDQUFDO1FBQy9CLGNBQVMsR0FBRyxLQUFL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LFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOztBQWdFekM7O0dBRUc7QUFLSCxNQUFNLE9BQU8sZUFBZTs7NEdBQWYsZUFBZTs2R0FBZixlQUFlLGlCQTFLZixrQkFBa0IsYUFBbEIsa0JBQWtCOzZHQTBLbEIsZUFBZTsyRkFBZixlQUFlO2tCQUozQixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLGtCQUFrQixDQUFDO29CQUNsQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE5nTW9kdWxlLCBOZ1pvbmUsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5pbWF0aW9uQnVpbGRlciwgc3R5bGUsIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4UmlwcGxlXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4UmlwcGxlRGlyZWN0aXZlIHtcbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIHJpcHBsZSB0YXJnZXQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgICNyaXBwbGVDb250YWluZXIgY2xhc3M9XCJkaXYtMVwiIGlneFJpcHBsZSBbaWd4UmlwcGxlVGFyZ2V0XSA9IFwiJy5kaXYtMSdcIj48L2Rpdj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZCgncmlwcGxlQ29udGFpbmVyJywge3JlYWQ6IElneFJpcHBsZURpcmVjdGl2ZX0pXG4gICAgICogcHVibGljIHJpcHBsZTogSWd4UmlwcGxlRGlyZWN0aXZlO1xuICAgICAqIGxldCByaXBwbGVUYXJnZXQgPSB0aGlzLnJpcHBsZS5yaXBwbGVUYXJnZXQ7XG4gICAgICogYGBgXG4gICAgICogQ2FuIHNldCB0aGUgcmlwcGxlIHRvIGFjdGl2YXRlIG9uIGEgY2hpbGQgZWxlbWVudCBpbnNpZGUgdGhlIHBhcmVudCB3aGVyZSBpZ3hSaXBwbGUgaXMgZGVmaW5lZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGRpdiAjcmlwcGxlQ29udGFpbmVyIFtpZ3hSaXBwbGVUYXJnZXRdID0gXCInI2NoaWxkXCInPlxuICAgICAqICA8YnV0dG9uIGlkPVwiY2hpbGRcIj5DbGljazwvYnV0dG9uPlxuICAgICAqIDwvZGl2PlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFJpcHBsZURpcmVjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4UmlwcGxlVGFyZ2V0JylcbiAgICBwdWJsaWMgcmlwcGxlVGFyZ2V0ID0gJyc7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSByaXBwbGUgY29sb3IuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxidXR0b24gI3JpcHBsZUNvbnRhaW5lciBbaWd4UmlwcGxlXSA9IFwiJ3JlZCdcIiA+PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoJ3JpcHBsZUNvbnRhaW5lcicsIHtyZWFkOiBJZ3hSaXBwbGVEaXJlY3RpdmV9KVxuICAgICAqIHB1YmxpYyByaXBwbGU6IElneFJpcHBsZURpcmVjdGl2ZTtcbiAgICAgKiBsZXQgcmlwcGxlQ29sb3IgPSB0aGlzLnJpcHBsZS5yaXBwbGVDb2xvcjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hSaXBwbGVEaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneFJpcHBsZScpXG4gICAgcHVibGljIHJpcHBsZUNvbG9yOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSByaXBwbGUgZHVyYXRpb24oaW4gbWlsbGlzZWNvbmRzKS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGA2MDBgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uICNyaXBwbGVDb250YWluZXIgaWd4UmlwcGxlIFtpZ3hSaXBwbGVEdXJhdGlvbl0gPSBcIjgwMFwiPjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdyaXBwbGVDb250YWluZXInLCB7cmVhZDogSWd4UmlwcGxlRGlyZWN0aXZlfSlcbiAgICAgKiBwdWJsaWMgcmlwcGxlOiBJZ3hSaXBwbGVEaXJlY3RpdmU7XG4gICAgICogbGV0IHJpcHBsZUR1cmF0aW9uID0gdGhpcy5yaXBwbGUucmlwcGxlRHVyYXRpb247XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UmlwcGxlRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hSaXBwbGVEdXJhdGlvbicpXG4gICAgcHVibGljIHJpcHBsZUR1cmF0aW9uID0gNjAwO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgdGhlIHJpcHBsZSB0byBiZSBjZW50ZXJlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiAjcmlwcGxlQ29udGFpbmVyIGlneFJpcHBsZSBbaWd4UmlwcGxlQ2VudGVyZWRdID0gXCJ0cnVlXCI+PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UmlwcGxlRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hSaXBwbGVDZW50ZXJlZCcpXG4gICAgcHVibGljIHNldCBjZW50ZXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jZW50ZXJlZCA9IHZhbHVlIHx8IHRoaXMuY2VudGVyZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSByaXBwbGUgaXMgZGlzYWJsZWQuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uICNyaXBwbGVDb250YWluZXIgaWd4UmlwcGxlIFtpZ3hSaXBwbGVEaXNhYmxlZF0gPSBcInRydWVcIj48L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZCgncmlwcGxlQ29udGFpbmVyJywge3JlYWQ6IElneFJpcHBsZURpcmVjdGl2ZX0pXG4gICAgICogcHVibGljIHJpcHBsZTogSWd4UmlwcGxlRGlyZWN0aXZlO1xuICAgICAqIGxldCBpc1JpcHBsZURpc2FibGVkID0gdGhpcy5yaXBwbGUucmlwcGxlRGlzYWJsZWQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UmlwcGxlRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hSaXBwbGVEaXNhYmxlZCcpXG4gICAgcHVibGljIHJpcHBsZURpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByaXBwbGVFbGVtZW50Q2xhc3MgPSAnaWd4LXJpcHBsZV9faW5uZXInO1xuICAgIHByaXZhdGUgcmlwcGxlSG9zdENsYXNzID0gJ2lneC1yaXBwbGUnO1xuICAgIHByaXZhdGUgX2NlbnRlcmVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhbmltYXRpb25RdWV1ZSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBidWlsZGVyOiBBbmltYXRpb25CdWlsZGVyLFxuICAgICAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgem9uZTogTmdab25lKSB7IH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Nb3VzZURvd24oZXZlbnQpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuX3JpcHBsZShldmVudCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3R5bGVzKHJpcHBsZUVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzdHlsZVBhcmFtczogYW55KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MocmlwcGxlRWxlbWVudCwgdGhpcy5yaXBwbGVFbGVtZW50Q2xhc3MpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpcHBsZUVsZW1lbnQsICd3aWR0aCcsIGAke3N0eWxlUGFyYW1zLnJhZGl1c31weGApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpcHBsZUVsZW1lbnQsICdoZWlnaHQnLCBgJHtzdHlsZVBhcmFtcy5yYWRpdXN9cHhgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyaXBwbGVFbGVtZW50LCAndG9wJywgYCR7c3R5bGVQYXJhbXMudG9wfXB4YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocmlwcGxlRWxlbWVudCwgJ2xlZnQnLCBgJHtzdHlsZVBhcmFtcy5sZWZ0fXB4YCk7XG4gICAgICAgIGlmICh0aGlzLnJpcHBsZUNvbG9yKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpcHBsZUVsZW1lbnQsICdiYWNrZ3JvdW5kJywgdGhpcy5yaXBwbGVDb2xvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9yaXBwbGUoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucmlwcGxlRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICh0aGlzLnJpcHBsZVRhcmdldCA/IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHRoaXMucmlwcGxlVGFyZ2V0KSB8fCB0aGlzLm5hdGl2ZUVsZW1lbnQgOiB0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIGNvbnN0IHJlY3RCb3VuZHMgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IE1hdGgubWF4KHJlY3RCb3VuZHMud2lkdGgsIHJlY3RCb3VuZHMuaGVpZ2h0KTtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLnJvdW5kKGV2ZW50LmNsaWVudFggLSByZWN0Qm91bmRzLmxlZnQgLSByYWRpdXMgLyAyKTtcbiAgICAgICAgbGV0IHRvcCA9IE1hdGgucm91bmQoZXZlbnQuY2xpZW50WSAtIHJlY3RCb3VuZHMudG9wIC0gcmFkaXVzIC8gMik7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NlbnRlcmVkKSB7XG4gICAgICAgICAgICBsZWZ0ID0gdG9wID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB7XG4gICAgICAgICAgICByYWRpdXMsXG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBsZWZ0XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmlwcGxlRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gICAgICAgIHRoaXMuc2V0U3R5bGVzKHJpcHBsZUVsZW1lbnQsIGRpbWVuc2lvbnMpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRhcmdldCwgdGhpcy5yaXBwbGVIb3N0Q2xhc3MpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRhcmdldCwgcmlwcGxlRWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgYW5pbWF0aW9uID0gdGhpcy5idWlsZGVyLmJ1aWxkKFtcbiAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMC41LCB0cmFuc2Zvcm06ICdzY2FsZSguMyknIH0pLFxuICAgICAgICAgICAgYW5pbWF0ZSh0aGlzLnJpcHBsZUR1cmF0aW9uLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDIpJyB9KSlcbiAgICAgICAgXSkuY3JlYXRlKHJpcHBsZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uUXVldWUucHVzaChhbmltYXRpb24pO1xuXG4gICAgICAgIGFuaW1hdGlvbi5vbkRvbmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbmltYXRpb25RdWV1ZS5zcGxpY2UodGhpcy5hbmltYXRpb25RdWV1ZS5pbmRleE9mKGFuaW1hdGlvbiksIDEpO1xuICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZUNoaWxkKHJpcHBsZUVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uUXVldWUubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGFyZ2V0LCB0aGlzLnJpcHBsZUhvc3RDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFuaW1hdGlvbi5wbGF5KCk7XG5cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneFJpcHBsZURpcmVjdGl2ZV0sXG4gICAgZXhwb3J0czogW0lneFJpcHBsZURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UmlwcGxlTW9kdWxlIHsgfVxuIl19
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlwcGxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaXJlY3RpdmVzL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBb0IsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFLdkUsTUFBTSxPQUFPLGtCQUFrQjtJQXFEM0I7Ozs7Ozs7T0FPRztJQUNILElBQ1csUUFBUSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBa0JELElBQWMsYUFBYTtRQUN2QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFPRCxZQUNjLE9BQXlCLEVBQ3pCLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ3JCLElBQVk7UUFIVixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDckIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQTlGeEI7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQWtCRztRQUVJLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBZ0J6Qjs7Ozs7Ozs7Ozs7OztXQWFHO1FBRUksbUJBQWMsR0FBRyxHQUFHLENBQUM7UUFhNUI7Ozs7Ozs7Ozs7Ozs7V0FhRztRQUVJLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBTXRCLHVCQUFrQixHQUFHLG1CQUFtQixDQUFDO1FBQ3pDLG9CQUFlLEdBQUcsWUFBWSxDQUFDO1FBQy9CLGNBQVMsR0FBRyxLQUFL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LFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOztBQWdFekM7O0dBRUc7QUFLSCxNQUFNLE9BQU8sZUFBZTs7NEdBQWYsZUFBZTs2R0FBZixlQUFlLGlCQTFLZixrQkFBa0IsYUFBbEIsa0JBQWtCOzZHQTBLbEIsZUFBZTsyRkFBZixlQUFlO2tCQUozQixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLGtCQUFrQixDQUFDO29CQUNsQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE5nTW9kdWxlLCBOZ1pvbmUsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5pbWF0aW9uQnVpbGRlciwgc3R5bGUsIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4UmlwcGxlXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4UmlwcGxlRGlyZWN0aXZlIHtcbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIHJpcHBsZSB0YXJnZXQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgICNyaXBwbGVDb250YWluZXIgY2xhc3M9XCJkaXYtMVwiIGlneFJpcHBsZSBbaWd4UmlwcGxlVGFyZ2V0XSA9IFwiJy5kaXYtMSdcIj48L2Rpdj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZCgncmlwcGxlQ29udGFpbmVyJywge3JlYWQ6IElneFJpcHBsZURpcmVjdGl2ZX0pXG4gICAgICogcHVibGljIHJpcHBsZTogSWd4UmlwcGxlRGlyZWN0aXZlO1xuICAgICAqIGxldCByaXBwbGVUYXJnZXQgPSB0aGlzLnJpcHBsZS5yaXBwbGVUYXJnZXQ7XG4gICAgICogYGBgXG4gICAgICogQ2FuIHNldCB0aGUgcmlwcGxlIHRvIGFjdGl2YXRlIG9uIGEgY2hpbGQgZWxlbWVudCBpbnNpZGUgdGhlIHBhcmVudCB3aGVyZSBpZ3hSaXBwbGUgaXMgZGVmaW5lZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGRpdiAjcmlwcGxlQ29udGFpbmVyIFtpZ3hSaXBwbGVUYXJnZXRdPVwiJyNjaGlsZFwiJz5cbiAgICAgKiAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbiBpZD1cImNoaWxkXCI+Q2xpY2s8L2J1dHRvbj5cbiAgICAgKiA8L2Rpdj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hSaXBwbGVEaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneFJpcHBsZVRhcmdldCcpXG4gICAgcHVibGljIHJpcHBsZVRhcmdldCA9ICcnO1xuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgcmlwcGxlIGNvbG9yLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjcmlwcGxlQ29udGFpbmVyIGlneEJ1dHRvbiBbaWd4UmlwcGxlXT1cIidyZWQnXCI+PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoJ3JpcHBsZUNvbnRhaW5lcicsIHtyZWFkOiBJZ3hSaXBwbGVEaXJlY3RpdmV9KVxuICAgICAqIHB1YmxpYyByaXBwbGU6IElneFJpcHBsZURpcmVjdGl2ZTtcbiAgICAgKiBsZXQgcmlwcGxlQ29sb3IgPSB0aGlzLnJpcHBsZS5yaXBwbGVDb2xvcjtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hSaXBwbGVEaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneFJpcHBsZScpXG4gICAgcHVibGljIHJpcHBsZUNvbG9yOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSByaXBwbGUgZHVyYXRpb24oaW4gbWlsbGlzZWNvbmRzKS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGA2MDBgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjcmlwcGxlQ29udGFpbmVyIGlneEJ1dHRvbiBpZ3hSaXBwbGUgW2lneFJpcHBsZUR1cmF0aW9uXT1cIjgwMFwiPjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdyaXBwbGVDb250YWluZXInLCB7cmVhZDogSWd4UmlwcGxlRGlyZWN0aXZlfSlcbiAgICAgKiBwdWJsaWMgcmlwcGxlOiBJZ3hSaXBwbGVEaXJlY3RpdmU7XG4gICAgICogbGV0IHJpcHBsZUR1cmF0aW9uID0gdGhpcy5yaXBwbGUucmlwcGxlRHVyYXRpb247XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UmlwcGxlRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hSaXBwbGVEdXJhdGlvbicpXG4gICAgcHVibGljIHJpcHBsZUR1cmF0aW9uID0gNjAwO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgdGhlIHJpcHBsZSB0byBiZSBjZW50ZXJlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI3JpcHBsZUNvbnRhaW5lciBpZ3hCdXR0b24gaWd4UmlwcGxlIFtpZ3hSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCI+PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4UmlwcGxlRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hSaXBwbGVDZW50ZXJlZCcpXG4gICAgcHVibGljIHNldCBjZW50ZXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jZW50ZXJlZCA9IHZhbHVlIHx8IHRoaXMuY2VudGVyZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSByaXBwbGUgaXMgZGlzYWJsZWQuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjcmlwcGxlQ29udGFpbmVyIGlneFJpcHBsZSBbaWd4UmlwcGxlRGlzYWJsZWRdPVwidHJ1ZVwiPjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdyaXBwbGVDb250YWluZXInLCB7cmVhZDogSWd4UmlwcGxlRGlyZWN0aXZlfSlcbiAgICAgKiBwdWJsaWMgcmlwcGxlOiBJZ3hSaXBwbGVEaXJlY3RpdmU7XG4gICAgICogbGV0IGlzUmlwcGxlRGlzYWJsZWQgPSB0aGlzLnJpcHBsZS5yaXBwbGVEaXNhYmxlZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hSaXBwbGVEaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneFJpcHBsZURpc2FibGVkJylcbiAgICBwdWJsaWMgcmlwcGxlRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJpcHBsZUVsZW1lbnRDbGFzcyA9ICdpZ3gtcmlwcGxlX19pbm5lcic7XG4gICAgcHJpdmF0ZSByaXBwbGVIb3N0Q2xhc3MgPSAnaWd4LXJpcHBsZSc7XG4gICAgcHJpdmF0ZSBfY2VudGVyZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGFuaW1hdGlvblF1ZXVlID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGJ1aWxkZXI6IEFuaW1hdGlvbkJ1aWxkZXIsXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHsgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbk1vdXNlRG93bihldmVudCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5fcmlwcGxlKGV2ZW50KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdHlsZXMocmlwcGxlRWxlbWVudDogSFRNTEVsZW1lbnQsIHN0eWxlUGFyYW1zOiBhbnkpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhyaXBwbGVFbGVtZW50LCB0aGlzLnJpcHBsZUVsZW1lbnRDbGFzcyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocmlwcGxlRWxlbWVudCwgJ3dpZHRoJywgYCR7c3R5bGVQYXJhbXMucmFkaXVzfXB4YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocmlwcGxlRWxlbWVudCwgJ2hlaWdodCcsIGAke3N0eWxlUGFyYW1zLnJhZGl1c31weGApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpcHBsZUVsZW1lbnQsICd0b3AnLCBgJHtzdHlsZVBhcmFtcy50b3B9cHhgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyaXBwbGVFbGVtZW50LCAnbGVmdCcsIGAke3N0eWxlUGFyYW1zLmxlZnR9cHhgKTtcbiAgICAgICAgaWYgKHRoaXMucmlwcGxlQ29sb3IpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocmlwcGxlRWxlbWVudCwgJ2JhY2tncm91bmQnLCB0aGlzLnJpcHBsZUNvbG9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3JpcHBsZShldmVudCkge1xuICAgICAgICBpZiAodGhpcy5yaXBwbGVEaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gKHRoaXMucmlwcGxlVGFyZ2V0ID8gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5yaXBwbGVUYXJnZXQpIHx8IHRoaXMubmF0aXZlRWxlbWVudCA6IHRoaXMubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgcmVjdEJvdW5kcyA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gTWF0aC5tYXgocmVjdEJvdW5kcy53aWR0aCwgcmVjdEJvdW5kcy5oZWlnaHQpO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGgucm91bmQoZXZlbnQuY2xpZW50WCAtIHJlY3RCb3VuZHMubGVmdCAtIHJhZGl1cyAvIDIpO1xuICAgICAgICBsZXQgdG9wID0gTWF0aC5yb3VuZChldmVudC5jbGllbnRZIC0gcmVjdEJvdW5kcy50b3AgLSByYWRpdXMgLyAyKTtcblxuICAgICAgICBpZiAodGhpcy5fY2VudGVyZWQpIHtcbiAgICAgICAgICAgIGxlZnQgPSB0b3AgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IHtcbiAgICAgICAgICAgIHJhZGl1cyxcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGxlZnRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByaXBwbGVFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cbiAgICAgICAgdGhpcy5zZXRTdHlsZXMocmlwcGxlRWxlbWVudCwgZGltZW5zaW9ucyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGFyZ2V0LCB0aGlzLnJpcHBsZUhvc3RDbGFzcyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGFyZ2V0LCByaXBwbGVFbGVtZW50KTtcblxuICAgICAgICBjb25zdCBhbmltYXRpb24gPSB0aGlzLmJ1aWxkZXIuYnVpbGQoW1xuICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLjUsIHRyYW5zZm9ybTogJ3NjYWxlKC4zKScgfSksXG4gICAgICAgICAgICBhbmltYXRlKHRoaXMucmlwcGxlRHVyYXRpb24sIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGUoMiknIH0pKVxuICAgICAgICBdKS5jcmVhdGUocmlwcGxlRWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5hbmltYXRpb25RdWV1ZS5wdXNoKGFuaW1hdGlvbik7XG5cbiAgICAgICAgYW5pbWF0aW9uLm9uRG9uZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvblF1ZXVlLnNwbGljZSh0aGlzLmFuaW1hdGlvblF1ZXVlLmluZGV4T2YoYW5pbWF0aW9uKSwgMSk7XG4gICAgICAgICAgICB0YXJnZXQucmVtb3ZlQ2hpbGQocmlwcGxlRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5hbmltYXRpb25RdWV1ZS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0YXJnZXQsIHRoaXMucmlwcGxlSG9zdENsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYW5pbWF0aW9uLnBsYXkoKTtcblxuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4UmlwcGxlRGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbSWd4UmlwcGxlRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hSaXBwbGVNb2R1bGUgeyB9XG4iXX0=