igniteui-angular 13.0.0-alpha.3 → 13.0.0-alpha.4

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 (27) hide show
  1. package/esm2020/lib/core/utils.mjs +3 -2
  2. package/esm2020/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +1 -90
  3. package/esm2020/lib/grids/cell.component.mjs +5 -5
  4. package/esm2020/lib/grids/common/grid.interface.mjs +1 -1
  5. package/esm2020/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.mjs +4 -4
  6. package/esm2020/lib/grids/grid/grid.component.mjs +1 -1
  7. package/esm2020/lib/grids/grid-base.directive.mjs +13 -9
  8. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +1 -1
  9. package/esm2020/lib/grids/hierarchical-grid/row-island.component.mjs +1 -1
  10. package/esm2020/lib/grids/state.directive.mjs +8 -5
  11. package/esm2020/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +13 -11
  12. package/esm2020/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +17 -15
  13. package/esm2020/lib/grids/toolbar/grid-toolbar.base.mjs +6 -4
  14. package/esm2020/lib/grids/tree-grid/tree-grid.component.mjs +1 -1
  15. package/fesm2015/igniteui-angular.mjs +37 -109
  16. package/fesm2015/igniteui-angular.mjs.map +1 -1
  17. package/fesm2020/igniteui-angular.mjs +31 -109
  18. package/fesm2020/igniteui-angular.mjs.map +1 -1
  19. package/lib/core/utils.d.ts +5 -0
  20. package/lib/directives/scroll-inertia/scroll_inertia.directive.d.ts +0 -24
  21. package/lib/grids/common/grid.interface.d.ts +19 -1
  22. package/lib/grids/grid-base.directive.d.ts +5 -5
  23. package/lib/grids/state.directive.d.ts +3 -3
  24. package/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.d.ts +1 -1
  25. package/lib/grids/toolbar/grid-toolbar-exporter.component.d.ts +1 -1
  26. package/lib/grids/toolbar/grid-toolbar.base.d.ts +1 -1
  27. package/package.json +2 -2
@@ -360,4 +360,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
360
360
  }], expandChildren: [{
361
361
  type: Input
362
362
  }] } });
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWlzbGFuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvaGllcmFyY2hpY2FsLWdyaWQvcm93LWlzbGFuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEVBS1QsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUVkLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQTBCLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR2xFLE9BQU8sRUFBNkIscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsdUJBQXVCLEVBQWlDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixF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QUFXLEVBQUU7Z0JBSW5ELFlBQVk7c0JBRGxCLGVBQWU7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtnQkFPeEYsWUFBWTtzQkFEbEIsTUFBTTtnQkFnQkEsV0FBVztzQkFEakIsTUFBTTtnQkFpQkEsZUFBZTtzQkFEckIsTUFBTTtnQkFnQ0ksY0FBYztzQkFEeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVDaGFuZ2VSZWNvcmQsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIExPQ0FMRV9JRCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZEFQSVNlcnZpY2UgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJRGlzcGxheURlbnNpdHlPcHRpb25zLCBEaXNwbGF5RGVuc2l0eVRva2VuIH0gZnJvbSAnLi4vLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hHcmlkU3VtbWFyeVNlcnZpY2UgfSBmcm9tICcuLi9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBmaXJzdCwgZmlsdGVyLCB0YWtlVW50aWwsIHBsdWNrIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneFJvd0lzbGFuZEFQSVNlcnZpY2UgfSBmcm9tICcuL3Jvdy1pc2xhbmQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9yZXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlVHlwZSwgR3JpZFR5cGUsIElHWF9HUklEX1NFUlZJQ0VfQkFTRSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkVG9vbGJhckRpcmVjdGl2ZSwgSWd4R3JpZFRvb2xiYXJUZW1wbGF0ZUNvbnRleHQgfSBmcm9tICcuLi90b29sYmFyL2NvbW1vbic7XG5pbXBvcnQgeyBJZ3hBY3Rpb25TdHJpcENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2FjdGlvbi1zdHJpcC9hY3Rpb24tc3RyaXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBhZ2luYXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3BhZ2luYXRvci9wYWdpbmF0b3ItaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24tZmFjdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IElHcmlkQ3JlYXRlZEV2ZW50QXJncyB9IGZyb20gJy4vZXZlbnRzJztcblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc2VsZWN0b3I6ICdpZ3gtcm93LWlzbGFuZCcsXG4gICAgdGVtcGxhdGU6IGBgLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBJZ3hSb3dJc2xhbmRBUElTZXJ2aWNlLFxuICAgICAgICBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4Um93SXNsYW5kQ29tcG9uZW50IGV4dGVuZHMgSWd4SGllcmFyY2hpY2FsR3JpZEJhc2VEaXJlY3RpdmVcbiAgICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGtleSBvZiB0aGUgcm93IGlzbGFuZCBieSB3aGljaCBjaGlsZCBkYXRhIHdvdWxkIGJlIHRha2VuIGZyb20gdGhlIHJvdyBkYXRhIGlmIHN1Y2ggaXMgcHJvdmlkZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQgW2RhdGFdPVwiRGF0YVwiIFthdXRvR2VuZXJhdGVdPVwidHJ1ZVwiPlxuICAgICAqICAgICAgPGlneC1yb3ctaXNsYW5kIFtrZXldPVwiJ2NoaWxkRGF0YSdcIj5cbiAgICAgKiAgICAgICAgICA8IS0tIC4uLiAtLT5cbiAgICAgKiAgICAgIDwvaWd4LXJvdy1pc2xhbmQ+XG4gICAgICogPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Um93SXNsYW5kQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMga2V5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hSb3dJc2xhbmRDb21wb25lbnQsIHsgcmVhZDogSWd4Um93SXNsYW5kQ29tcG9uZW50LCBkZXNjZW5kYW50czogZmFsc2UgfSlcbiAgICBwdWJsaWMgY2hpbGRyZW4gPSBuZXcgUXVlcnlMaXN0PElneFJvd0lzbGFuZENvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneENvbHVtbkNvbXBvbmVudCwgeyByZWFkOiBJZ3hDb2x1bW5Db21wb25lbnQsIGRlc2NlbmRhbnRzOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjaGlsZENvbHVtbnMgPSBuZXcgUXVlcnlMaXN0PElneENvbHVtbkNvbXBvbmVudD4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoSWd4R3JpZFRvb2xiYXJEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgaXNsYW5kVG9vbGJhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJZ3hHcmlkVG9vbGJhclRlbXBsYXRlQ29udGV4dD47XG5cbiAgICBAQ29udGVudENoaWxkKElneFBhZ2luYXRvckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyBpc2xhbmRQYWdpbmF0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4QWN0aW9uU3RyaXBDb21wb25lbnQsIHsgcmVhZDogSWd4QWN0aW9uU3RyaXBDb21wb25lbnQsIGRlc2NlbmRhbnRzOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBhY3Rpb25TdHJpcHM6IFF1ZXJ5TGlzdDxJZ3hBY3Rpb25TdHJpcENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxheW91dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1taXRlZCB3aGVuIGEgZ3JpZCBpcyBiZWluZyBjcmVhdGVkIGJhc2VkIG9uIHRoaXMgcm93IGlzbGFuZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1oaWVyYXJjaGljYWwtZ3JpZCBbZGF0YV09XCJEYXRhXCIgW2F1dG9HZW5lcmF0ZV09XCJ0cnVlXCI+XG4gICAgICogICAgICA8aWd4LXJvdy1pc2xhbmQgW2tleV09XCInY2hpbGREYXRhJ1wiIChncmlkQ3JlYXRlZCk9XCJncmlkQ3JlYXRlZCgkZXZlbnQpXCIgI3Jvd0lzbGFuZD5cbiAgICAgKiAgICAgICAgICA8IS0tIC4uLiAtLT5cbiAgICAgKiAgICAgIDwvaWd4LXJvdy1pc2xhbmQ+XG4gICAgICogPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Um93SXNsYW5kQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGdyaWRDcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZENyZWF0ZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIGEgZ3JpZCBpcyBiZWluZyBpbml0aWFsaXplZCBmb3IgdGhpcyByb3cgaXNsYW5kLlxuICAgICAqIFRoZSBlbWl0dGluZyBpcyBkb25lIGluIGBuZ0FmdGVyVmlld0luaXRgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWhpZXJhcmNoaWNhbC1ncmlkIFtkYXRhXT1cIkRhdGFcIiBbYXV0b0dlbmVyYXRlXT1cInRydWVcIj5cbiAgICAgKiAgICAgIDxpZ3gtcm93LWlzbGFuZCBba2V5XT1cIidjaGlsZERhdGEnXCIgKGdyaWRJbml0aWFsaXplZCk9XCJncmlkSW5pdGlhbGl6ZWQoJGV2ZW50KVwiICNyb3dJc2xhbmQ+XG4gICAgICogICAgICAgICAgPCEtLSAuLi4gLS0+XG4gICAgICogICAgICA8L2lneC1yb3ctaXNsYW5kPlxuICAgICAqIDwvaWd4LWhpZXJhcmNoaWNhbC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFJvd0lzbGFuZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBncmlkSW5pdGlhbGl6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkQ3JlYXRlZEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdGlhbENoYW5nZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcm9vdEdyaWQgPSBudWxsO1xuICAgIHB1YmxpYyByZWFkb25seSBkYXRhOiBhbnlbXSB8IG51bGw7XG4gICAgcHVibGljIHJlYWRvbmx5IGZpbHRlcmVkRGF0YTogYW55W107XG5cbiAgICBwcml2YXRlIHJpX2NvbHVtbkxpc3REaWZmZXI7XG4gICAgcHJpdmF0ZSBsYXlvdXRfaWQgPSBgaWd4LXJvdy1pc2xhbmQtYDtcbiAgICBwcml2YXRlIGlzSW5pdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBpZiBhbGwgaW1tZWRpYXRlIGNoaWxkcmVuIG9mIHRoZSBncmlkcyBmb3IgdGhpcyBgSWd4Um93SXNsYW5kQ29tcG9uZW50YCBzaG91bGQgYmUgZXhwYW5kZWQvY29sbGFwc2VkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWhpZXJhcmNoaWNhbC1ncmlkIFtkYXRhXT1cIkRhdGFcIiBbYXV0b0dlbmVyYXRlXT1cInRydWVcIj5cbiAgICAgKiAgICAgIDxpZ3gtcm93LWlzbGFuZCBba2V5XT1cIidjaGlsZERhdGEnXCIgW2V4cGFuZENoaWxkcmVuXT1cInRydWVcIiAjcm93SXNsYW5kPlxuICAgICAqICAgICAgICAgIDwhLS0gLi4uIC0tPlxuICAgICAqICAgICAgPC9pZ3gtcm93LWlzbGFuZD5cbiAgICAgKiA8L2lneC1oaWVyYXJjaGljYWwtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hSb3dJc2xhbmRDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZXhwYW5kQ2hpbGRyZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEV4cGFuZFN0YXRlID0gdmFsdWU7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQVBJLmdldENoaWxkR3JpZHMoKS5mb3JFYWNoKChncmlkKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jb250YWlucyhncmlkLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGNoYW5nZXMgcmlnaHQgYXdheSBpZiB0aGUgZ3JpZCBpcyB2aXNpYmxlXG4gICAgICAgICAgICAgICAgZ3JpZC5leHBhbmRDaGlsZHJlbiA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRWxzZSBkZWZlciB0aGUgZGV0ZWN0aW9uIG9uIGNoYW5nZXMgd2hlbiB0aGUgZ3JpZCBnZXRzIGludG8gdmlldyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgICAgICAgICAgICAgZ3JpZC51cGRhdGVPblJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgaWYgYWxsIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGUgZ3JpZHMgZm9yIHRoaXMgYElneFJvd0lzbGFuZENvbXBvbmVudGAgaGF2ZSBiZWVuIHNldCB0byBiZSBleHBhbmRlZC9jb2xsYXBzZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5yb3dJc2xhbmQuZXhwYW5kQ2hpbGRyZW47XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Um93SXNsYW5kQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBleHBhbmRDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRFeHBhbmRTdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpZCgpIHtcbiAgICAgICAgY29uc3QgcElkID0gdGhpcy5wYXJlbnRJZCA/IHRoaXMucGFyZW50SWQuc3Vic3RyaW5nKHRoaXMucGFyZW50SWQuaW5kZXhPZih0aGlzLmxheW91dF9pZCkgKyB0aGlzLmxheW91dF9pZC5sZW5ndGgpICsgJy0nIDogJyc7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dF9pZCArIHBJZCArIHRoaXMua2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhcmVudElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRJc2xhbmQgPyB0aGlzLnBhcmVudElzbGFuZC5pZCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIGxldCBwdHIgPSB0aGlzLnBhcmVudElzbGFuZDtcbiAgICAgICAgbGV0IGx2bCA9IDA7XG4gICAgICAgIHdoaWxlIChwdHIpIHtcbiAgICAgICAgICAgIGx2bCsrO1xuICAgICAgICAgICAgcHRyID0gcHRyLnBhcmVudElzbGFuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbHZsICsgMTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNlbGVjdGlvblNlcnZpY2U6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY29sUmVzaXppbmdTZXJ2aWNlOiBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSUdYX0dSSURfU0VSVklDRV9CQVNFKSBwdWJsaWMgZ3JpZEFQSTogR3JpZFNlcnZpY2VUeXBlLFxuICAgICAgICBwcm90ZWN0ZWQgdHJhbnNhY3Rpb25GYWN0b3J5OiBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5LFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgem9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwdWJsaWMgZG9jdW1lbnQsXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgbmF2aWdhdGlvbjogSWd4SGllcmFyY2hpY2FsR3JpZE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KElneE92ZXJsYXlTZXJ2aWNlKSBwcm90ZWN0ZWQgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgc3VtbWFyeVNlcnZpY2U6IElneEdyaWRTdW1tYXJ5U2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgcHVibGljIHJvd0lzbGFuZEFQSTogSWd4Um93SXNsYW5kQVBJU2VydmljZSxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgc2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgICAgIGNvbFJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgIGdyaWRBUEksXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkZhY3RvcnksXG4gICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgem9uZSxcbiAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgY2RyLFxuICAgICAgICAgICAgcmVzb2x2ZXIsXG4gICAgICAgICAgICBkaWZmZXJzLFxuICAgICAgICAgICAgdmlld1JlZixcbiAgICAgICAgICAgIG5hdmlnYXRpb24sXG4gICAgICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICAgICAgb3ZlcmxheVNlcnZpY2UsXG4gICAgICAgICAgICBzdW1tYXJ5U2VydmljZSxcbiAgICAgICAgICAgIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgICAgICBsb2NhbGVJZCxcbiAgICAgICAgICAgIHBsYXRmb3JtXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaGdyaWRBUEkgPSBncmlkQVBJIGFzIElneEhpZXJhcmNoaWNhbEdyaWRBUElTZXJ2aWNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5ncmlkID0gdGhpcztcbiAgICAgICAgdGhpcy5yb290R3JpZCA9IHRoaXMuaGdyaWRBUEkuZ3JpZDtcbiAgICAgICAgdGhpcy5yb3dJc2xhbmRBUEkucm93SXNsYW5kID0gdGhpcztcbiAgICAgICAgdGhpcy5yaV9jb2x1bW5MaXN0RGlmZmVyID0gdGhpcy5kaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbigpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGV4aXN0aW5nIGdyaWRzIHNpbmNlIHRoZWlyIGNoaWxkIHJpIGhhdmUgYmVlbiBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0R3JpZHNGb3JJc2xhbmQodGhpcy5rZXkpLmZvckVhY2goZ3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIChncmlkIGFzIGFueSkub25Sb3dJc2xhbmRDaGFuZ2UodGhpcy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbmVzdGVkQ29sdW1ucyA9IHRoaXMuY2hpbGRyZW4ubWFwKChsYXlvdXQpID0+IGxheW91dC5jb2x1bW5MaXN0LnRvQXJyYXkoKSk7XG4gICAgICAgIGNvbnN0IGNvbHNBcnJheSA9IFtdLmNvbmNhdC5hcHBseShbXSwgbmVzdGVkQ29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHRvcENvbHMgPSB0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKChpdGVtKSA9PiBjb2xzQXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTEpO1xuICAgICAgICB0aGlzLmNoaWxkQ29sdW1ucy5yZXNldCh0b3BDb2xzKTtcbiAgICAgICAgdGhpcy5jb2x1bW5MaXN0LmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkxpc3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBoYW5kbGUgY29sdW1uIGNoYW5nZXMgc28gdGhhdCB0aGV5IGFyZSBwYXNzZWQgdG8gY2hpbGQgZ3JpZCBpbnN0YW5jZXMgd2hlbiBjb2x1bW5DaGFuZ2UgaXMgZW1pdHRlZC5cbiAgICAgICAgdGhpcy5yaV9jb2x1bW5MaXN0RGlmZmVyLmRpZmYodGhpcy5jaGlsZENvbHVtbnMpO1xuICAgICAgICB0aGlzLmNoaWxkQ29sdW1ucy50b0FycmF5KCkuZm9yRWFjaCh4ID0+IHguY29sdW1uQ2hhbmdlLnBpcGUodGFrZVVudGlsKHguZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb2x1bW5MaXN0KCkpKTtcbiAgICAgICAgdGhpcy5jaGlsZENvbHVtbnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChjaGFuZ2U6IFF1ZXJ5TGlzdDxJZ3hDb2x1bW5Db21wb25lbnQ+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gdGhpcy5yaV9jb2x1bW5MaXN0RGlmZmVyLmRpZmYoY2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChkaWZmKSB7XG4gICAgICAgICAgICAgICAgZGlmZi5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPElneENvbHVtbkNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkLml0ZW0uY29sdW1uQ2hhbmdlLnBpcGUodGFrZVVudGlsKHJlY29yZC5pdGVtLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29sdW1uTGlzdCgpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWN0aW9uU3RyaXAgPSB0aGlzLmFjdGlvblN0cmlwcy5maXJzdDtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uU3RyaXApIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uU3RyaXAubWVudU92ZXJsYXlTZXR0aW5ncy5vdXRsZXQgPSB0aGlzLm91dGxldDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnJvd0lzbGFuZEFQSS5yZWdpc3Rlcih0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50SXNsYW5kKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudElzbGFuZC5yb3dJc2xhbmRBUEkucmVnaXN0ZXJDaGlsZFJvd0lzbGFuZCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm9vdEdyaWQuaGdyaWRBUEkucmVnaXN0ZXJDaGlsZFJvd0lzbGFuZCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBjaGlsZCB0b29sYmFyIGlmIHRoZSBwYXJlbnQgaXNsYW5kIGhhcyBhIHRvb2xiYXIgZGVmaW5pdGlvblxuICAgICAgICB0aGlzLmdyaWRDcmVhdGVkLnBpcGUocGx1Y2soJ2dyaWQnKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoZ3JpZCA9PiB7XG4gICAgICAgICAgICBncmlkLnJlbmRlcmVkJC5waXBlKGZpcnN0KCksIGZpbHRlcigoKSA9PiAhIXRoaXMuaXNsYW5kVG9vbGJhclRlbXBsYXRlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IGdyaWQudG9vbGJhck91dGxldC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5pc2xhbmRUb29sYmFyVGVtcGxhdGUsIHsgJGltcGxpY2l0OiBncmlkIH0pKTtcbiAgICAgICAgICAgIGdyaWQucmVuZGVyZWQkLnBpcGUoZmlyc3QoKSwgZmlsdGVyKCgpID0+ICEhdGhpcy5pc2xhbmRQYWdpbmF0b3JUZW1wbGF0ZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdEdyaWQucGFnaW5hdG9yTGlzdC5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gZ3JpZC5zZXRVcFBhZ2luYXRvcigpKTtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC5wYWdpbmF0b3JPdXRsZXQuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuaXNsYW5kUGFnaW5hdG9yVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2UuZW1pdChjaGFuZ2VzKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsQ2hhbmdlcy5wdXNoKGNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgZGVzdHJveSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgcmVuZGVyZWQgYW55dGhpbmcgdG8gdXNlIHJlbW92ZUV2ZW50TGlzdGVuZXIgb25cbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQVBJLnVuc2V0KHRoaXMuaWQpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnRJc2xhbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JpZHNGb3JJc2xhbmQodGhpcy5rZXkpLmZvckVhY2goZ3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbkdyaWRTdGF0ZShncmlkKTtcbiAgICAgICAgICAgICAgICBncmlkLmhncmlkQVBJLnVuc2V0Q2hpbGRSb3dJc2xhbmQodGhpcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50SXNsYW5kLnJvd0lzbGFuZEFQSS51bnNldENoaWxkUm93SXNsYW5kKHRoaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb290R3JpZC5oZ3JpZEFQSS51bnNldENoaWxkUm93SXNsYW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jbGVhbkdyaWRTdGF0ZSh0aGlzLnJvb3RHcmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVmbG93KCkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGNhbGN1bGF0ZUdyaWRIZWlnaHQoKSB7IH1cblxuICAgIHByb3RlY3RlZCB1cGRhdGVDb2x1bW5MaXN0KCkge1xuICAgICAgICBjb25zdCBuZXN0ZWRDb2x1bW5zID0gdGhpcy5jaGlsZHJlbi5tYXAoKGxheW91dCkgPT4gbGF5b3V0LmNvbHVtbkxpc3QudG9BcnJheSgpKTtcbiAgICAgICAgY29uc3QgY29sc0FycmF5ID0gW10uY29uY2F0LmFwcGx5KFtdLCBuZXN0ZWRDb2x1bW5zKTtcbiAgICAgICAgY29uc3QgdG9wQ29scyA9IHRoaXMuY29sdW1uTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2xzQXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgZGVmYXVsdCB3aWR0aCBvZiB0aGUgY29sdW1ucyB0aGF0IGNvbWUgaW50byB0aGlzIHJvdyBpc2xhbmQsXG4gICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUgcm9vdCBjYXRjaGVzIHRoZW0gZmlyc3QgZHVyaW5nIHRoZSBkZXRlY3RDaGFuZ2VzKCkgYW5kIHNldHMgdGhlaXIgZGVmYXVsdFdpZHRoLiAqL1xuICAgICAgICAgICAgICAgIGl0ZW0uZGVmYXVsdFdpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGlsZENvbHVtbnMucmVzZXQodG9wQ29scyk7XG5cbiAgICAgICAgaWYgKHRoaXMucGFyZW50SXNsYW5kKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudElzbGFuZC5jb2x1bW5MaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb290R3JpZC5jb2x1bW5MaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpLmZvckVhY2goKGdyaWQ6IEdyaWRUeXBlKSA9PiB7XG4gICAgICAgICAgICBncmlkLmNyZWF0ZUNvbHVtbnNMaXN0KHRoaXMuY2hpbGRDb2x1bW5zLnRvQXJyYXkoKSk7XG4gICAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZ3JpZC5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGdyaWQudXBkYXRlT25SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlQ2hpbGRyZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmZpcnN0ID09PSB0aGlzKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnJlc2V0KHRoaXMuY2hpbGRyZW4udG9BcnJheSgpLnNsaWNlKDEpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50SXNsYW5kID0gdGhpcztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhbkdyaWRTdGF0ZShncmlkKSB7XG4gICAgICAgIGdyaWQuY2hpbGRHcmlkVGVtcGxhdGVzLmZvckVhY2goKHRtcGwpID0+IHtcbiAgICAgICAgICAgIHRtcGwub3duZXIuY2xlYW5WaWV3KHRtcGwuY29udGV4dC50ZW1wbGF0ZUlEKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGdyaWQuY2hpbGRHcmlkVGVtcGxhdGVzLmNsZWFyKCk7XG4gICAgICAgIGdyaWQub25Sb3dJc2xhbmRDaGFuZ2UoKTtcbiAgICB9XG59XG4iXX0=
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWlzbGFuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvaGllcmFyY2hpY2FsLWdyaWQvcm93LWlzbGFuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEVBS1QsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUVkLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQTBCLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR2xFLE9BQU8sRUFBNkIscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsdUJBQXVCLEVBQWlDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixF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QUFXLEVBQUU7Z0JBSW5ELFlBQVk7c0JBRGxCLGVBQWU7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtnQkFPeEYsWUFBWTtzQkFEbEIsTUFBTTtnQkFnQkEsV0FBVztzQkFEakIsTUFBTTtnQkFpQkEsZUFBZTtzQkFEckIsTUFBTTtnQkFnQ0ksY0FBYztzQkFEeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVDaGFuZ2VSZWNvcmQsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIExPQ0FMRV9JRCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZEFQSVNlcnZpY2UgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJRGlzcGxheURlbnNpdHlPcHRpb25zLCBEaXNwbGF5RGVuc2l0eVRva2VuIH0gZnJvbSAnLi4vLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hHcmlkU3VtbWFyeVNlcnZpY2UgfSBmcm9tICcuLi9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBmaXJzdCwgZmlsdGVyLCB0YWtlVW50aWwsIHBsdWNrIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneFJvd0lzbGFuZEFQSVNlcnZpY2UgfSBmcm9tICcuL3Jvdy1pc2xhbmQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9yZXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlVHlwZSwgR3JpZFR5cGUsIElHWF9HUklEX1NFUlZJQ0VfQkFTRSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkVG9vbGJhckRpcmVjdGl2ZSwgSWd4R3JpZFRvb2xiYXJUZW1wbGF0ZUNvbnRleHQgfSBmcm9tICcuLi90b29sYmFyL2NvbW1vbic7XG5pbXBvcnQgeyBJZ3hBY3Rpb25TdHJpcENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2FjdGlvbi1zdHJpcC9hY3Rpb24tc3RyaXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBhZ2luYXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3BhZ2luYXRvci9wYWdpbmF0b3ItaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24tZmFjdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IElHcmlkQ3JlYXRlZEV2ZW50QXJncyB9IGZyb20gJy4vZXZlbnRzJztcblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc2VsZWN0b3I6ICdpZ3gtcm93LWlzbGFuZCcsXG4gICAgdGVtcGxhdGU6IGBgLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBJZ3hSb3dJc2xhbmRBUElTZXJ2aWNlLFxuICAgICAgICBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4Um93SXNsYW5kQ29tcG9uZW50IGV4dGVuZHMgSWd4SGllcmFyY2hpY2FsR3JpZEJhc2VEaXJlY3RpdmVcbiAgICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGtleSBvZiB0aGUgcm93IGlzbGFuZCBieSB3aGljaCBjaGlsZCBkYXRhIHdvdWxkIGJlIHRha2VuIGZyb20gdGhlIHJvdyBkYXRhIGlmIHN1Y2ggaXMgcHJvdmlkZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtaGllcmFyY2hpY2FsLWdyaWQgW2RhdGFdPVwiRGF0YVwiIFthdXRvR2VuZXJhdGVdPVwidHJ1ZVwiPlxuICAgICAqICAgICAgPGlneC1yb3ctaXNsYW5kIFtrZXldPVwiJ2NoaWxkRGF0YSdcIj5cbiAgICAgKiAgICAgICAgICA8IS0tIC4uLiAtLT5cbiAgICAgKiAgICAgIDwvaWd4LXJvdy1pc2xhbmQ+XG4gICAgICogPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Um93SXNsYW5kQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMga2V5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hSb3dJc2xhbmRDb21wb25lbnQsIHsgcmVhZDogSWd4Um93SXNsYW5kQ29tcG9uZW50LCBkZXNjZW5kYW50czogZmFsc2UgfSlcbiAgICBwdWJsaWMgY2hpbGRyZW4gPSBuZXcgUXVlcnlMaXN0PElneFJvd0lzbGFuZENvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneENvbHVtbkNvbXBvbmVudCwgeyByZWFkOiBJZ3hDb2x1bW5Db21wb25lbnQsIGRlc2NlbmRhbnRzOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjaGlsZENvbHVtbnMgPSBuZXcgUXVlcnlMaXN0PElneENvbHVtbkNvbXBvbmVudD4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoSWd4R3JpZFRvb2xiYXJEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgaXNsYW5kVG9vbGJhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJZ3hHcmlkVG9vbGJhclRlbXBsYXRlQ29udGV4dD47XG5cbiAgICBAQ29udGVudENoaWxkKElneFBhZ2luYXRvckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyBpc2xhbmRQYWdpbmF0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4QWN0aW9uU3RyaXBDb21wb25lbnQsIHsgcmVhZDogSWd4QWN0aW9uU3RyaXBDb21wb25lbnQsIGRlc2NlbmRhbnRzOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBhY3Rpb25TdHJpcHM6IFF1ZXJ5TGlzdDxJZ3hBY3Rpb25TdHJpcENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxheW91dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1taXRlZCB3aGVuIGEgZ3JpZCBpcyBiZWluZyBjcmVhdGVkIGJhc2VkIG9uIHRoaXMgcm93IGlzbGFuZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1oaWVyYXJjaGljYWwtZ3JpZCBbZGF0YV09XCJEYXRhXCIgW2F1dG9HZW5lcmF0ZV09XCJ0cnVlXCI+XG4gICAgICogICAgICA8aWd4LXJvdy1pc2xhbmQgW2tleV09XCInY2hpbGREYXRhJ1wiIChncmlkQ3JlYXRlZCk9XCJncmlkQ3JlYXRlZCgkZXZlbnQpXCIgI3Jvd0lzbGFuZD5cbiAgICAgKiAgICAgICAgICA8IS0tIC4uLiAtLT5cbiAgICAgKiAgICAgIDwvaWd4LXJvdy1pc2xhbmQ+XG4gICAgICogPC9pZ3gtaGllcmFyY2hpY2FsLWdyaWQ+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Um93SXNsYW5kQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGdyaWRDcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZENyZWF0ZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIGEgZ3JpZCBpcyBiZWluZyBpbml0aWFsaXplZCBmb3IgdGhpcyByb3cgaXNsYW5kLlxuICAgICAqIFRoZSBlbWl0dGluZyBpcyBkb25lIGluIGBuZ0FmdGVyVmlld0luaXRgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWhpZXJhcmNoaWNhbC1ncmlkIFtkYXRhXT1cIkRhdGFcIiBbYXV0b0dlbmVyYXRlXT1cInRydWVcIj5cbiAgICAgKiAgICAgIDxpZ3gtcm93LWlzbGFuZCBba2V5XT1cIidjaGlsZERhdGEnXCIgKGdyaWRJbml0aWFsaXplZCk9XCJncmlkSW5pdGlhbGl6ZWQoJGV2ZW50KVwiICNyb3dJc2xhbmQ+XG4gICAgICogICAgICAgICAgPCEtLSAuLi4gLS0+XG4gICAgICogICAgICA8L2lneC1yb3ctaXNsYW5kPlxuICAgICAqIDwvaWd4LWhpZXJhcmNoaWNhbC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFJvd0lzbGFuZENvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBncmlkSW5pdGlhbGl6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkQ3JlYXRlZEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdGlhbENoYW5nZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcm9vdEdyaWQgPSBudWxsO1xuICAgIHB1YmxpYyByZWFkb25seSBkYXRhOiBhbnlbXSB8IG51bGw7XG4gICAgcHVibGljIHJlYWRvbmx5IGZpbHRlcmVkRGF0YTogYW55W107XG5cbiAgICBwcml2YXRlIHJpX2NvbHVtbkxpc3REaWZmZXI7XG4gICAgcHJpdmF0ZSBsYXlvdXRfaWQgPSBgaWd4LXJvdy1pc2xhbmQtYDtcbiAgICBwcml2YXRlIGlzSW5pdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBpZiBhbGwgaW1tZWRpYXRlIGNoaWxkcmVuIG9mIHRoZSBncmlkcyBmb3IgdGhpcyBgSWd4Um93SXNsYW5kQ29tcG9uZW50YCBzaG91bGQgYmUgZXhwYW5kZWQvY29sbGFwc2VkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWhpZXJhcmNoaWNhbC1ncmlkIFtkYXRhXT1cIkRhdGFcIiBbYXV0b0dlbmVyYXRlXT1cInRydWVcIj5cbiAgICAgKiAgICAgIDxpZ3gtcm93LWlzbGFuZCBba2V5XT1cIidjaGlsZERhdGEnXCIgW2V4cGFuZENoaWxkcmVuXT1cInRydWVcIiAjcm93SXNsYW5kPlxuICAgICAqICAgICAgICAgIDwhLS0gLi4uIC0tPlxuICAgICAqICAgICAgPC9pZ3gtcm93LWlzbGFuZD5cbiAgICAgKiA8L2lneC1oaWVyYXJjaGljYWwtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hSb3dJc2xhbmRDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZXhwYW5kQ2hpbGRyZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEV4cGFuZFN0YXRlID0gdmFsdWU7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQVBJLmdldENoaWxkR3JpZHMoKS5mb3JFYWNoKChncmlkKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jb250YWlucyhncmlkLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGNoYW5nZXMgcmlnaHQgYXdheSBpZiB0aGUgZ3JpZCBpcyB2aXNpYmxlXG4gICAgICAgICAgICAgICAgZ3JpZC5leHBhbmRDaGlsZHJlbiA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRWxzZSBkZWZlciB0aGUgZGV0ZWN0aW9uIG9uIGNoYW5nZXMgd2hlbiB0aGUgZ3JpZCBnZXRzIGludG8gdmlldyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgICAgICAgICAgICAgZ3JpZC51cGRhdGVPblJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgaWYgYWxsIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGUgZ3JpZHMgZm9yIHRoaXMgYElneFJvd0lzbGFuZENvbXBvbmVudGAgaGF2ZSBiZWVuIHNldCB0byBiZSBleHBhbmRlZC9jb2xsYXBzZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5yb3dJc2xhbmQuZXhwYW5kQ2hpbGRyZW47XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Um93SXNsYW5kQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBleHBhbmRDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRFeHBhbmRTdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpZCgpIHtcbiAgICAgICAgY29uc3QgcElkID0gdGhpcy5wYXJlbnRJZCA/IHRoaXMucGFyZW50SWQuc3Vic3RyaW5nKHRoaXMucGFyZW50SWQuaW5kZXhPZih0aGlzLmxheW91dF9pZCkgKyB0aGlzLmxheW91dF9pZC5sZW5ndGgpICsgJy0nIDogJyc7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dF9pZCArIHBJZCArIHRoaXMua2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhcmVudElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRJc2xhbmQgPyB0aGlzLnBhcmVudElzbGFuZC5pZCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIGxldCBwdHIgPSB0aGlzLnBhcmVudElzbGFuZDtcbiAgICAgICAgbGV0IGx2bCA9IDA7XG4gICAgICAgIHdoaWxlIChwdHIpIHtcbiAgICAgICAgICAgIGx2bCsrO1xuICAgICAgICAgICAgcHRyID0gcHRyLnBhcmVudElzbGFuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbHZsICsgMTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNlbGVjdGlvblNlcnZpY2U6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY29sUmVzaXppbmdTZXJ2aWNlOiBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSUdYX0dSSURfU0VSVklDRV9CQVNFKSBwdWJsaWMgZ3JpZEFQSTogR3JpZFNlcnZpY2VUeXBlLFxuICAgICAgICBwcm90ZWN0ZWQgdHJhbnNhY3Rpb25GYWN0b3J5OiBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5LFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgem9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwdWJsaWMgZG9jdW1lbnQsXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgbmF2aWdhdGlvbjogSWd4SGllcmFyY2hpY2FsR3JpZE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KElneE92ZXJsYXlTZXJ2aWNlKSBwcm90ZWN0ZWQgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgc3VtbWFyeVNlcnZpY2U6IElneEdyaWRTdW1tYXJ5U2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgcHVibGljIHJvd0lzbGFuZEFQSTogSWd4Um93SXNsYW5kQVBJU2VydmljZSxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgc2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgICAgIGNvbFJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgIGdyaWRBUEksXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkZhY3RvcnksXG4gICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgem9uZSxcbiAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgY2RyLFxuICAgICAgICAgICAgcmVzb2x2ZXIsXG4gICAgICAgICAgICBkaWZmZXJzLFxuICAgICAgICAgICAgdmlld1JlZixcbiAgICAgICAgICAgIG5hdmlnYXRpb24sXG4gICAgICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICAgICAgb3ZlcmxheVNlcnZpY2UsXG4gICAgICAgICAgICBzdW1tYXJ5U2VydmljZSxcbiAgICAgICAgICAgIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgICAgICBsb2NhbGVJZCxcbiAgICAgICAgICAgIHBsYXRmb3JtXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaGdyaWRBUEkgPSBncmlkQVBJIGFzIElneEhpZXJhcmNoaWNhbEdyaWRBUElTZXJ2aWNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5ncmlkID0gdGhpcyBhcyBhbnk7XG4gICAgICAgIHRoaXMucm9vdEdyaWQgPSB0aGlzLmhncmlkQVBJLmdyaWQ7XG4gICAgICAgIHRoaXMucm93SXNsYW5kQVBJLnJvd0lzbGFuZCA9IHRoaXM7XG4gICAgICAgIHRoaXMucmlfY29sdW1uTGlzdERpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKFtdKS5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBleGlzdGluZyBncmlkcyBzaW5jZSB0aGVpciBjaGlsZCByaSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgICAgICAgICAgICB0aGlzLmdldEdyaWRzRm9ySXNsYW5kKHRoaXMua2V5KS5mb3JFYWNoKGdyaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoZ3JpZCBhcyBhbnkpLm9uUm93SXNsYW5kQ2hhbmdlKHRoaXMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG5lc3RlZENvbHVtbnMgPSB0aGlzLmNoaWxkcmVuLm1hcCgobGF5b3V0KSA9PiBsYXlvdXQuY29sdW1uTGlzdC50b0FycmF5KCkpO1xuICAgICAgICBjb25zdCBjb2xzQXJyYXkgPSBbXS5jb25jYXQuYXBwbHkoW10sIG5lc3RlZENvbHVtbnMpO1xuICAgICAgICBjb25zdCB0b3BDb2xzID0gdGhpcy5jb2x1bW5MaXN0LmZpbHRlcigoaXRlbSkgPT4gY29sc0FycmF5LmluZGV4T2YoaXRlbSkgPT09IC0xKTtcbiAgICAgICAgdGhpcy5jaGlsZENvbHVtbnMucmVzZXQodG9wQ29scyk7XG4gICAgICAgIHRoaXMuY29sdW1uTGlzdC5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5MaXN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGNvbHVtbiBjaGFuZ2VzIHNvIHRoYXQgdGhleSBhcmUgcGFzc2VkIHRvIGNoaWxkIGdyaWQgaW5zdGFuY2VzIHdoZW4gY29sdW1uQ2hhbmdlIGlzIGVtaXR0ZWQuXG4gICAgICAgIHRoaXMucmlfY29sdW1uTGlzdERpZmZlci5kaWZmKHRoaXMuY2hpbGRDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5jaGlsZENvbHVtbnMudG9BcnJheSgpLmZvckVhY2goeCA9PiB4LmNvbHVtbkNoYW5nZS5waXBlKHRha2VVbnRpbCh4LmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29sdW1uTGlzdCgpKSk7XG4gICAgICAgIHRoaXMuY2hpbGRDb2x1bW5zLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoY2hhbmdlOiBRdWVyeUxpc3Q8SWd4Q29sdW1uQ29tcG9uZW50PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9IHRoaXMucmlfY29sdW1uTGlzdERpZmZlci5kaWZmKGNoYW5nZSk7XG4gICAgICAgICAgICBpZiAoZGlmZikge1xuICAgICAgICAgICAgICAgIGRpZmYuZm9yRWFjaEFkZGVkSXRlbSgocmVjb3JkOiBJdGVyYWJsZUNoYW5nZVJlY29yZDxJZ3hDb2x1bW5Db21wb25lbnQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZC5pdGVtLmNvbHVtbkNoYW5nZS5waXBlKHRha2VVbnRpbChyZWNvcmQuaXRlbS5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbHVtbkxpc3QoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFjdGlvblN0cmlwID0gdGhpcy5hY3Rpb25TdHJpcHMuZmlyc3Q7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvblN0cmlwKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvblN0cmlwLm1lbnVPdmVybGF5U2V0dGluZ3Mub3V0bGV0ID0gdGhpcy5vdXRsZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5yb3dJc2xhbmRBUEkucmVnaXN0ZXIodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzbGFuZCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQucm93SXNsYW5kQVBJLnJlZ2lzdGVyQ2hpbGRSb3dJc2xhbmQodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvb3RHcmlkLmhncmlkQVBJLnJlZ2lzdGVyQ2hpbGRSb3dJc2xhbmQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5pdCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgY2hpbGQgdG9vbGJhciBpZiB0aGUgcGFyZW50IGlzbGFuZCBoYXMgYSB0b29sYmFyIGRlZmluaXRpb25cbiAgICAgICAgdGhpcy5ncmlkQ3JlYXRlZC5waXBlKHBsdWNrKCdncmlkJyksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGdyaWQgPT4ge1xuICAgICAgICAgICAgZ3JpZC5yZW5kZXJlZCQucGlwZShmaXJzdCgpLCBmaWx0ZXIoKCkgPT4gISF0aGlzLmlzbGFuZFRvb2xiYXJUZW1wbGF0ZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiBncmlkLnRvb2xiYXJPdXRsZXQuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuaXNsYW5kVG9vbGJhclRlbXBsYXRlLCB7ICRpbXBsaWNpdDogZ3JpZCB9KSk7XG4gICAgICAgICAgICBncmlkLnJlbmRlcmVkJC5waXBlKGZpcnN0KCksIGZpbHRlcigoKSA9PiAhIXRoaXMuaXNsYW5kUGFnaW5hdG9yVGVtcGxhdGUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3RHcmlkLnBhZ2luYXRvckxpc3QuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IGdyaWQuc2V0VXBQYWdpbmF0b3IoKSk7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQucGFnaW5hdG9yT3V0bGV0LmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLmlzbGFuZFBhZ2luYXRvclRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMubGF5b3V0Q2hhbmdlLmVtaXQoY2hhbmdlcyk7XG4gICAgICAgIGlmICghdGhpcy5pc0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbENoYW5nZXMucHVzaChjaGFuZ2VzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIE92ZXJyaWRlIHRoZSBiYXNlIGRlc3Ryb3kgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHJlbmRlcmVkIGFueXRoaW5nIHRvIHVzZSByZW1vdmVFdmVudExpc3RlbmVyIG9uXG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJvd0lzbGFuZEFQSS51bnNldCh0aGlzLmlkKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50SXNsYW5kKSB7XG4gICAgICAgICAgICB0aGlzLmdldEdyaWRzRm9ySXNsYW5kKHRoaXMua2V5KS5mb3JFYWNoKGdyaWQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYW5HcmlkU3RhdGUoZ3JpZCk7XG4gICAgICAgICAgICAgICAgZ3JpZC5oZ3JpZEFQSS51bnNldENoaWxkUm93SXNsYW5kKHRoaXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBhcmVudElzbGFuZC5yb3dJc2xhbmRBUEkudW5zZXRDaGlsZFJvd0lzbGFuZCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm9vdEdyaWQuaGdyaWRBUEkudW5zZXRDaGlsZFJvd0lzbGFuZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5HcmlkU3RhdGUodGhpcy5yb290R3JpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZmxvdygpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBjYWxjdWxhdGVHcmlkSGVpZ2h0KCkgeyB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlQ29sdW1uTGlzdCgpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkQ29sdW1ucyA9IHRoaXMuY2hpbGRyZW4ubWFwKChsYXlvdXQpID0+IGxheW91dC5jb2x1bW5MaXN0LnRvQXJyYXkoKSk7XG4gICAgICAgIGNvbnN0IGNvbHNBcnJheSA9IFtdLmNvbmNhdC5hcHBseShbXSwgbmVzdGVkQ29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHRvcENvbHMgPSB0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sc0FycmF5LmluZGV4T2YoaXRlbSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIGRlZmF1bHQgd2lkdGggb2YgdGhlIGNvbHVtbnMgdGhhdCBjb21lIGludG8gdGhpcyByb3cgaXNsYW5kLFxuICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIHJvb3QgY2F0Y2hlcyB0aGVtIGZpcnN0IGR1cmluZyB0aGUgZGV0ZWN0Q2hhbmdlcygpIGFuZCBzZXRzIHRoZWlyIGRlZmF1bHRXaWR0aC4gKi9cbiAgICAgICAgICAgICAgICBpdGVtLmRlZmF1bHRXaWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hpbGRDb2x1bW5zLnJlc2V0KHRvcENvbHMpO1xuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudElzbGFuZCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRJc2xhbmQuY29sdW1uTGlzdC5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm9vdEdyaWQuY29sdW1uTGlzdC5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93SXNsYW5kQVBJLmdldENoaWxkR3JpZHMoKS5mb3JFYWNoKChncmlkOiBHcmlkVHlwZSkgPT4ge1xuICAgICAgICAgICAgZ3JpZC5jcmVhdGVDb2x1bW5zTGlzdCh0aGlzLmNoaWxkQ29sdW1ucy50b0FycmF5KCkpO1xuICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGdyaWQubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBncmlkLnVwZGF0ZU9uUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUNoaWxkcmVuKCkge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5maXJzdCA9PT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5yZXNldCh0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKS5zbGljZSgxKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudElzbGFuZCA9IHRoaXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW5HcmlkU3RhdGUoZ3JpZCkge1xuICAgICAgICBncmlkLmNoaWxkR3JpZFRlbXBsYXRlcy5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICB0bXBsLm93bmVyLmNsZWFuVmlldyh0bXBsLmNvbnRleHQudGVtcGxhdGVJRCk7XG4gICAgICAgIH0pO1xuICAgICAgICBncmlkLmNoaWxkR3JpZFRlbXBsYXRlcy5jbGVhcigpO1xuICAgICAgICBncmlkLm9uUm93SXNsYW5kQ2hhbmdlKCk7XG4gICAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { Directive, Optional, Input, NgModule, Host } from '@angular/core';
1
+ import { Directive, Optional, Input, NgModule, Host, Inject } from '@angular/core';
2
2
  import { FilteringExpressionsTree } from '../data-operations/filtering-expressions-tree';
3
3
  import { IgxColumnComponent } from './columns/column.component';
4
4
  import { IgxColumnGroupComponent } from './columns/column-group.component';
@@ -6,8 +6,8 @@ import { GridColumnDataType } from '../data-operations/data-util';
6
6
  import { IgxBooleanFilteringOperand, IgxNumberFilteringOperand, IgxDateFilteringOperand, IgxStringFilteringOperand } from '../data-operations/filtering-condition';
7
7
  import { IgxGridComponent } from './grid/grid.component';
8
8
  import { delay, take } from 'rxjs/operators';
9
+ import { IGX_GRID_BASE } from './common/grid.interface';
9
10
  import * as i0 from "@angular/core";
10
- import * as i1 from "./grid-base.directive";
11
11
  export class IgxGridStateDirective {
12
12
  /**
13
13
  * @hidden
@@ -497,17 +497,20 @@ export class IgxGridStateDirective {
497
497
  return feature;
498
498
  }
499
499
  }
500
- IgxGridStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridStateDirective, deps: [{ token: i1.IgxGridBaseDirective, host: true, optional: true }, { token: i0.ComponentFactoryResolver }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
500
+ IgxGridStateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridStateDirective, deps: [{ token: IGX_GRID_BASE, host: true, optional: true }, { token: i0.ComponentFactoryResolver }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
501
501
  IgxGridStateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxGridStateDirective, selector: "[igxGridState]", inputs: { options: ["igxGridState", "options"] }, ngImport: i0 });
502
502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridStateDirective, decorators: [{
503
503
  type: Directive,
504
504
  args: [{
505
505
  selector: '[igxGridState]'
506
506
  }]
507
- }], ctorParameters: function () { return [{ type: i1.IgxGridBaseDirective, decorators: [{
507
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
508
508
  type: Host
509
509
  }, {
510
510
  type: Optional
511
+ }, {
512
+ type: Inject,
513
+ args: [IGX_GRID_BASE]
511
514
  }] }, { type: i0.ComponentFactoryResolver }, { type: i0.ViewContainerRef }]; }, propDecorators: { options: [{
512
515
  type: Input,
513
516
  args: ['igxGridState']
@@ -527,4 +530,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
527
530
  exports: [IgxGridStateDirective]
528
531
  }]
529
532
  }] });
530
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3N0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBOEMsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLHdCQUF3QixFQUE2QixNQUFNLCtDQUErQyxDQUFDO0FBRXBILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFDbkYseUJBQXlCLEVBQXNCLE1BQU0sd0NBQXdDLENBQUM7QUFJbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHekQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBK0U3QyxNQUFNLE9BQU8scUJBQXFCO0lBaVQ5Qjs7T0FFRztJQUNILFlBQytCLElBQTBCLEVBQzdDLFFBQWtDLEVBQ2xDLE9BQXlCO1FBRk4sU0FBSSxHQUFKLElBQUksQ0FBc0I7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDbEMsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFwVDdCLGdCQUFXLEdBQW1CLEVBQUUsQ0FBQztRQUdqQyxhQUFRLEdBQXNCO1lBQ2xDLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7WUFDZixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJ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bnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPcHRpb25hbCwgSW5wdXQsIE5nTW9kdWxlLCBIb3N0LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbnMvY29sdW1uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJR3JvdXBpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElQYWdpbmdTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9wYWdpbmctc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQsIElneE51bWJlckZpbHRlcmluZ09wZXJhbmQsIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLFxuICAgIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQsIElGaWx0ZXJpbmdPcGVyYXRpb259IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IElHcm91cEJ5RXhwYW5kU3RhdGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1leHBhbmQtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ1N0YXRlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElQaW5uaW5nQ29uZmlnIH0gZnJvbSAnLi9ncmlkLmNvbW1vbic7XG5pbXBvcnQgeyBkZWxheSwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25SYW5nZSB9IGZyb20gJy4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlIHtcbiAgICBjb2x1bW5zPzogSUNvbHVtblN0YXRlW107XG4gICAgZmlsdGVyaW5nPzogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBhZHZhbmNlZEZpbHRlcmluZz86IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgcGFnaW5nPzogSVBhZ2luZ1N0YXRlO1xuICAgIHNvcnRpbmc/OiBJU29ydGluZ0V4cHJlc3Npb25bXTtcbiAgICBncm91cEJ5PzogSUdyb3VwaW5nU3RhdGU7XG4gICAgY2VsbFNlbGVjdGlvbj86IEdyaWRTZWxlY3Rpb25SYW5nZVtdO1xuICAgIHJvd1NlbGVjdGlvbj86IGFueVtdO1xuICAgIGNvbHVtblNlbGVjdGlvbj86IHN0cmluZ1tdO1xuICAgIHJvd1Bpbm5pbmc/OiBhbnlbXTtcbiAgICBwaW5uaW5nQ29uZmlnPzogSVBpbm5pbmdDb25maWc7XG4gICAgZXhwYW5zaW9uPzogYW55W107XG4gICAgcm93SXNsYW5kcz86IElHcmlkU3RhdGVDb2xsZWN0aW9uW107XG4gICAgaWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRTdGF0ZUNvbGxlY3Rpb24ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcGFyZW50Um93SUQ6IGFueTtcbiAgICBzdGF0ZTogSUdyaWRTdGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlT3B0aW9ucyB7XG4gICAgY29sdW1ucz86IGJvb2xlYW47XG4gICAgZmlsdGVyaW5nPzogYm9vbGVhbjtcbiAgICBhZHZhbmNlZEZpbHRlcmluZz86IGJvb2xlYW47XG4gICAgc29ydGluZz86IGJvb2xlYW47XG4gICAgZ3JvdXBCeT86IGJvb2xlYW47XG4gICAgcGFnaW5nPzogYm9vbGVhbjtcbiAgICBjZWxsU2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgICByb3dTZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIGNvbHVtblNlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgcm93UGlubmluZz86IGJvb2xlYW47XG4gICAgcGlubmluZ0NvbmZpZz86IGJvb2xlYW47XG4gICAgZXhwYW5zaW9uPzogYm9vbGVhbjtcbiAgICByb3dJc2xhbmRzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uU3RhdGUge1xuICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICBzb3J0YWJsZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJhYmxlOiBib29sZWFuO1xuICAgIGVkaXRhYmxlOiBib29sZWFuO1xuICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBib29sZWFuO1xuICAgIGZpbHRlcmluZ0lnbm9yZUNhc2U6IGJvb2xlYW47XG4gICAgaGVhZGVyQ2xhc3Nlczogc3RyaW5nO1xuICAgIGhlYWRlckdyb3VwQ2xhc3Nlczogc3RyaW5nO1xuICAgIG1heFdpZHRoOiBzdHJpbmc7XG4gICAgZ3JvdXBhYmxlOiBib29sZWFuO1xuICAgIG1vdmFibGU6IGJvb2xlYW47XG4gICAgaGlkZGVuOiBib29sZWFuO1xuICAgIGRhdGFUeXBlOiBHcmlkQ29sdW1uRGF0YVR5cGU7XG4gICAgaGFzU3VtbWFyeTogYm9vbGVhbjtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHdpZHRoOiBhbnk7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgcmVzaXphYmxlOiBib29sZWFuO1xuICAgIHNlYXJjaGFibGU6IGJvb2xlYW47XG4gICAgY29sdW1uR3JvdXA6IGJvb2xlYW47XG4gICAgcGFyZW50OiBhbnk7XG4gICAgZGlzYWJsZUhpZGluZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgR3JpZEZlYXR1cmVzID0ga2V5b2YgSUdyaWRTdGF0ZU9wdGlvbnM7XG5cbmludGVyZmFjZSBGZWF0dXJlIHtcbiAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpID0+IElHcmlkU3RhdGU7XG4gICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdIHwgSVBhZ2luZ1N0YXRlIHwgSVNvcnRpbmdFeHByZXNzaW9uW10gfFxuICAgICAgICBJR3JvdXBpbmdTdGF0ZSB8IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfCBHcmlkU2VsZWN0aW9uUmFuZ2VbXSB8IElQaW5uaW5nQ29uZmlnIHwgYW55W10pID0+IHZvaWQ7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneEdyaWRTdGF0ZV0nXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRTdGF0ZURpcmVjdGl2ZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb3B0aW9uczogSUdyaWRTdGF0ZU9wdGlvbnMgfCAnJztcblxuICAgIHByaXZhdGUgZmVhdHVyZUtleXM6IEdyaWRGZWF0dXJlc1tdID0gW107XG4gICAgcHJpdmF0ZSBzdGF0ZTogSUdyaWRTdGF0ZTtcbiAgICBwcml2YXRlIGN1cnJHcmlkOiBJZ3hHcmlkQmFzZURpcmVjdGl2ZTtcbiAgICBwcml2YXRlIF9vcHRpb25zOiBJR3JpZFN0YXRlT3B0aW9ucyA9IHtcbiAgICAgICAgY29sdW1uczogdHJ1ZSxcbiAgICAgICAgZmlsdGVyaW5nOiB0cnVlLFxuICAgICAgICBhZHZhbmNlZEZpbHRlcmluZzogdHJ1ZSxcbiAgICAgICAgc29ydGluZzogdHJ1ZSxcbiAgICAgICAgZ3JvdXBCeTogdHJ1ZSxcbiAgICAgICAgcGFnaW5nOiB0cnVlLFxuICAgICAgICBjZWxsU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICByb3dTZWxlY3Rpb246IHRydWUsXG4gICAgICAgIGNvbHVtblNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgcm93UGlubmluZzogdHJ1ZSxcbiAgICAgICAgZXhwYW5zaW9uOiB0cnVlLFxuICAgICAgICByb3dJc2xhbmRzOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIEZFQVRVUkVTID0ge1xuICAgICAgICBzb3J0aW5nOiAge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gY29udGV4dC5jdXJyR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgc29ydGluZ1N0YXRlLmZvckVhY2gocyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzLnN0cmF0ZWd5O1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcy5vd25lcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzb3J0aW5nOiBzb3J0aW5nU3RhdGUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSVNvcnRpbmdFeHByZXNzaW9uW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJpbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlID0gY29udGV4dC5jdXJyR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWx0ZXJpbmdTdGF0ZS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbHRlcmluZ1N0YXRlLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgKGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZmlsdGVyaW5nOiBmaWx0ZXJpbmdTdGF0ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJUcmVlID0gY29udGV4dC5jcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IGZpbHRlclRyZWUgYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhZHZhbmNlZEZpbHRlcmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgICAgIGxldCBhZHZhbmNlZEZpbHRlcmluZzogYW55O1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJpbmdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmlsdGVyaW5nU3RhdGUub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJpbmdTdGF0ZS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIChpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nID0gZmlsdGVyaW5nU3RhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmcgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgYWR2YW5jZWRGaWx0ZXJpbmcgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVHJlZSA9IGNvbnRleHQuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IGZpbHRlclRyZWUgYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkQ29sdW1uczogSUNvbHVtblN0YXRlW10gPSBjb250ZXh0LmN1cnJHcmlkLmNvbHVtbnMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGMucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZTogYy5zb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyYWJsZTogYy5maWx0ZXJhYmxlLFxuICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogYy5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgc29ydGluZ0lnbm9yZUNhc2U6IGMuc29ydGluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmluZ0lnbm9yZUNhc2U6IGMuZmlsdGVyaW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2xhc3NlczogYy5oZWFkZXJDbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJHcm91cENsYXNzZXM6IGMuaGVhZGVyR3JvdXBDbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYy5tYXhXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBhYmxlOiBjLmdyb3VwYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgbW92YWJsZTogYy5tb3ZhYmxlLFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46IGMuaGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogYy5kYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgaGFzU3VtbWFyeTogYy5oYXNTdW1tYXJ5LFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYy5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogYy5oZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogYy5yZXNpemFibGUsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGU6IGMuc2VhcmNoYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogYy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGMucGFyZW50ID8gYy5wYXJlbnQuaGVhZGVyIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXA6IGMuY29sdW1uR3JvdXAsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVIaWRpbmc6IGMuZGlzYWJsZUhpZGluZ1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjb2x1bW5zOiBncmlkQ29sdW1ucyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJQ29sdW1uU3RhdGVbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmYWN0b3J5ID0gY29udGV4dC5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShJZ3hDb2x1bW5Db21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRmFjdG9yeSA9IGNvbnRleHQucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoSWd4Q29sdW1uR3JvdXBDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2goKGNvbFN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0NvbHVtbkdyb3VwID0gY29sU3RhdGUuY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2xTdGF0ZS5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYxID0gZ3JvdXBGYWN0b3J5LmNyZWF0ZShjb250ZXh0LnZpZXdSZWYuaW5qZWN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZWYxLmluc3RhbmNlLCBjb2xTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmMS5pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Hcm91cDogSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgPSBuZXdDb2x1bW5zLmZpbmQoZSA9PiBlLmhlYWRlciA9PT0gcmVmMS5pbnN0YW5jZS5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwLmNoaWxkcmVuLnJlc2V0KFsuLi5jb2x1bW5Hcm91cC5jaGlsZHJlbi50b0FycmF5KCksIHJlZjEuaW5zdGFuY2VdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYxLmluc3RhbmNlLnBhcmVudCA9IGNvbHVtbkdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmMS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb2x1bW5zLnB1c2gocmVmMS5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYgPSBmYWN0b3J5LmNyZWF0ZShjb250ZXh0LnZpZXdSZWYuaW5qZWN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZWYuaW5zdGFuY2UsIGNvbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWYuaW5zdGFuY2UucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uR3JvdXA6IElneENvbHVtbkdyb3VwQ29tcG9uZW50ID0gbmV3Q29sdW1ucy5maW5kKGUgPT4gZS5oZWFkZXIgPT09IHJlZi5pbnN0YW5jZS5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UucGFyZW50ID0gY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwLmNoaWxkcmVuLnJlc2V0KFsuLi5jb2x1bW5Hcm91cC5jaGlsZHJlbi50b0FycmF5KCksIHJlZi5pbnN0YW5jZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb2x1bW5zLnB1c2gocmVmLmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuY29sdW1uTGlzdC5yZXNldChuZXdDb2x1bW5zKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmNvbHVtbkxpc3Qubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBjb250ZXh0LmN1cnJHcmlkIGFzIElneEdyaWRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucztcbiAgICAgICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb25zLmZvckVhY2goZXhwciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBleHByLnN0cmF0ZWd5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlID0gZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3Vwc0V4cGFuZGVkID0gZ3JpZC5ncm91cHNFeHBhbmRlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7IGdyb3VwQnk6IHsgZXhwcmVzc2lvbnM6IGdyb3VwaW5nRXhwcmVzc2lvbnMsIGV4cGFuc2lvbjogZXhwYW5zaW9uU3RhdGUsIGRlZmF1bHRFeHBhbmRlZDogZ3JvdXBzRXhwYW5kZWR9ICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJR3JvdXBpbmdTdGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBjb250ZXh0LmN1cnJHcmlkIGFzIElneEdyaWRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID0gc3RhdGUuZXhwcmVzc2lvbnMgYXMgSUdyb3VwaW5nRXhwcmVzc2lvbltdO1xuICAgICAgICAgICAgICAgIGlmIChncmlkLmdyb3Vwc0V4cGFuZGVkICE9PSBzdGF0ZS5kZWZhdWx0RXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC50b2dnbGVBbGxHcm91cFJvd3MoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUgPSBzdGF0ZS5leHBhbnNpb24gYXMgSUdyb3VwQnlFeHBhbmRTdGF0ZVtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQucGFnaW5nU3RhdGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcGFnaW5nOiBwYWdpbmdTdGF0ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJUGFnaW5nU3RhdGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQuY3VyckdyaWQucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuY3VyckdyaWQucGFnaW5hdG9yLnBlclBhZ2UgIT09IHN0YXRlLnJlY29yZHNQZXJQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGFnaW5hdG9yLnBlclBhZ2UgPSBzdGF0ZS5yZWNvcmRzUGVyUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBhZ2luYXRvci5wYWdlID0gc3RhdGUuaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd1NlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5zZWxlY3RlZFJvd3M7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93U2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYW55W10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdFJvd3Moc3RhdGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjZWxsU2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBjb250ZXh0LmN1cnJHcmlkLmdldFNlbGVjdGVkUmFuZ2VzKCkubWFwKHJhbmdlID0+XG4gICAgICAgICAgICAgICAgICAgICh7IHJvd1N0YXJ0OiByYW5nZS5yb3dTdGFydCwgcm93RW5kOiByYW5nZS5yb3dFbmQsIGNvbHVtblN0YXJ0OiByYW5nZS5jb2x1bW5TdGFydCwgY29sdW1uRW5kOiByYW5nZS5jb2x1bW5FbmQgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNlbGxTZWxlY3Rpb246IHNlbGVjdGlvbiB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBHcmlkU2VsZWN0aW9uUmFuZ2VbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2gociA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0geyByb3dTdGFydDogci5yb3dTdGFydCwgcm93RW5kOiByLnJvd0VuZCwgY29sdW1uU3RhcnQ6IHIuY29sdW1uU3RhcnQsIGNvbHVtbkVuZDogci5jb2x1bW5FbmR9O1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29sdW1uU2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdGVkQ29sdW1ucygpLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNvbHVtblNlbGVjdGlvbjogc2VsZWN0aW9uIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IHN0cmluZ1tdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5kZXNlbGVjdEFsbENvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdENvbHVtbnMoc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByb3dQaW5uaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaW5uZWQgPSBjb250ZXh0LmN1cnJHcmlkLnBpbm5lZFJvd3MubWFwKHggPT4geC5yb3dJRCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93UGlubmluZzogcGlubmVkIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY2xlYXIgY3VycmVudCBzdGF0ZS5cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBpbm5lZFJvd3MuZm9yRWFjaChyb3cgPT4gcm93LnVucGluKCkpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2gocm93SUQgPT4gY29udGV4dC5jdXJyR3JpZC5waW5Sb3cocm93SUQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGlubmluZ0NvbmZpZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiAoeyBwaW5uaW5nQ29uZmlnOiBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgfSksXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSVBpbm5pbmdDb25maWcpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgPSBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXhwYW5zaW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZXMgPSBBcnJheS5mcm9tKGNvbnRleHQuY3VyckdyaWQuZXhwYW5zaW9uU3RhdGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBleHBhbnNpb246IGV4cGFuc2lvblN0YXRlcyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IG5ldyBNYXA8YW55LCBib29sZWFuPihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbnNpb25TdGF0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd0lzbGFuZHM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZXM6IElHcmlkU3RhdGVDb2xsZWN0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJc2xhbmRzID0gKGNvbnRleHQuY3VyckdyaWQgYXMgYW55KS5hbGxMYXlvdXRMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChyb3dJc2xhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZHMuZm9yRWFjaChyb3dJc2xhbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkcyA9IHJvd0lzbGFuZC5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkcy5mb3JFYWNoKGNoR3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Um93SUQgPSB0aGlzLmdldFBhcmVudFJvd0lEKGNoR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNoR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jdXJyR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZSA9IGNvbnRleHQuYnVpbGRTdGF0ZShjb250ZXh0LmZlYXR1cmVLZXlzKSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRTdGF0ZXMucHVzaCh7IGlkOiBgJHtyb3dJc2xhbmQuaWR9YCwgcGFyZW50Um93SUQsIHN0YXRlOiBjaGlsZEdyaWRTdGF0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjb250ZXh0LmdyaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93SXNsYW5kczogY2hpbGRHcmlkU3RhdGVzIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJc2xhbmRzID0gKGNvbnRleHQuY3VyckdyaWQgYXMgYW55KS5hbGxMYXlvdXRMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChyb3dJc2xhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZHMuZm9yRWFjaChyb3dJc2xhbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkcyA9IHJvd0lzbGFuZC5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkcy5mb3JFYWNoKGNoR3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Um93SUQgPSB0aGlzLmdldFBhcmVudFJvd0lEKGNoR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNoR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZSA9IHN0YXRlLmZpbmQoc3QgPT4gc3QuaWQgPT09IHJvd0lzbGFuZC5pZCAmJiBzdC5wYXJlbnRSb3dJRCA9PT0gcGFyZW50Um93SUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZEdyaWRTdGF0ZSAmJiBjb250ZXh0LmN1cnJHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZUdyaWRTdGF0ZShjaGlsZEdyaWRTdGF0ZS5zdGF0ZSwgY29udGV4dC5mZWF0dXJlS2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY29udGV4dC5ncmlkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJhdmVyc2VzIHRoZSBoaWVyYXJjaHkgdXAgdG8gdGhlIHJvb3QgZ3JpZCB0byByZXR1cm4gdGhlIElEIG9mIHRoZSBleHBhbmRlZCByb3cuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldFBhcmVudFJvd0lEOiAoZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZEdyaWQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkR3JpZCA9IGdyaWQ7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQgPSBncmlkLnBhcmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyaWQuaGdyaWRBUEkuZ2V0UGFyZW50Um93SWQoY2hpbGRHcmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgQW4gb2JqZWN0IHdpdGggb3B0aW9ucyBkZXRlcm1pbmluZyBpZiBhIGNlcnRhaW4gZmVhdHVyZSBzdGF0ZSBzaG91bGQgYmUgc2F2ZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZCBbaWd4R3JpZFN0YXRlXT1cIm9wdGlvbnNcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgb3B0aW9ucyA9IHtzZWxlY3Rpb246IGZhbHNlLCBhZHZhbmNlZEZpbHRlcmluZzogZmFsc2V9O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4R3JpZFN0YXRlJylcbiAgICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogSUdyaWRTdGF0ZU9wdGlvbnMge1xuICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgb3B0aW9ucyh2YWx1ZTogSUdyaWRTdGF0ZU9wdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCB2YWx1ZSk7XG4gICAgICAgIGlmICghKHRoaXMuZ3JpZCBpbnN0YW5jZW9mIElneEdyaWRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb3B0aW9ucy5ncm91cEJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29wdGlvbnMucm93SXNsYW5kcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBwdWJsaWMgZ3JpZDogSWd4R3JpZEJhc2VEaXJlY3RpdmUsXG4gICAgICAgIHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSB2aWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN0YXRlIG9mIGEgZmVhdHVyZSBvciBzdGF0ZXMgb2YgYWxsIGdyaWQgZmVhdHVyZXMsIHVubGVzcyBhIGNlcnRhaW4gZmVhdHVyZSBpcyBkaXNhYmxlZCB0aHJvdWdoIHRoZSBgb3B0aW9uc2AgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYHNlcmlhbGl6ZWAgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByZXR1cm5lZCBvYmplY3Qgd2lsbCBiZSBzZXJpYWxpemVkIHRvIEpTT04gc3RyaW5nLiBEZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAgICogQHBhcmFtIGBmZWF0dXJlYCBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBkZXRlcm1pbmluZyB0aGUgZmVhdHVyZXMgdG8gYmUgYWRkZWQgaW4gdGhlIHN0YXRlLiBJZiBza2lwcGVkLCBhbGwgZmVhdHVyZXMgYXJlIGFkZGVkLlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHNlcmlhbGl6ZWQgdG8gSlNPTiBzdHJpbmcgSUdyaWRTdGF0ZSBvYmplY3QsIG9yIHRoZSBub24tc2VyaWFsaXplZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1ncmlkIFtpZ3hHcmlkU3RhdGVdPVwib3B0aW9uc1wiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgc3RhdGU7XG4gICAgICogbGV0IHN0YXRlID0gdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpOyAvLyByZXR1cm5zIHN0cmluZ1xuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGUoZmFsc2UpIC8vIHJldHVybnMgYElHcmlkU3RhdGVgIG9iamVjdFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdGF0ZShzZXJpYWxpemUgPSB0cnVlLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKTogSUdyaWRTdGF0ZSB8IHN0cmluZyAge1xuICAgICAgICBsZXQgc3RhdGU6IElHcmlkU3RhdGUgfCBzdHJpbmc7XG4gICAgICAgIHRoaXMuY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSA9IHRoaXMuYnVpbGRTdGF0ZShmZWF0dXJlcykgYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgc3RhdGUgPSBKU09OLnN0cmluZ2lmeShzdGF0ZSwgdGhpcy5zdHJpbmdpZnlDYWxsYmFjaykgYXMgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyBncmlkIGZlYXR1cmVzJyBzdGF0ZSBiYXNlZCBvbiB0aGUgSUdyaWRTdGF0ZSBvYmplY3QgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIElHcmlkU3RhdGUgb2JqZWN0IHRvIHJlc3RvcmUgc3RhdGUgZnJvbS5cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBzdGF0ZTtcbiAgICAgKiB0aGlzLnN0YXRlLnNldFN0YXRlKGdyaWRTdGF0ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldFN0YXRlKHN0YXRlOiBJR3JpZFN0YXRlIHwgc3RyaW5nLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEpTT04ucGFyc2Uoc3RhdGUpIGFzIElHcmlkU3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmN1cnJHcmlkID0gdGhpcy5ncmlkO1xuICAgICAgICB0aGlzLnJlc3RvcmVHcmlkU3RhdGUoc3RhdGUsIGZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIFRPRE9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgYW4gSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZFN0YXRlKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSk6IElHcmlkU3RhdGUge1xuICAgICAgICB0aGlzLmFwcGx5RmVhdHVyZXMoa2V5cyk7XG4gICAgICAgIGxldCBncmlkU3RhdGUgPSB7fSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ZdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy5ncmlkIGluc3RhbmNlb2YgSWd4R3JpZENvbXBvbmVudCkgJiYgZiA9PT0gJ2dyb3VwQnknKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZShmKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGU6IElHcmlkU3RhdGUgPSBmZWF0dXJlLmdldEZlYXR1cmVTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICBncmlkU3RhdGUgPSBPYmplY3QuYXNzaWduKGdyaWRTdGF0ZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncmlkU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGNhbGxzIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyB0byByZXN0b3JlIGZlYXR1cmVzIGZyb20gdGhlIHBhc3NlZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVHcmlkU3RhdGUoc3RhdGU6IElHcmlkU3RhdGUsIGZlYXR1cmVzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pIHtcbiAgICAgICAgLy8gVE9ETyBOb3RpZnkgdGhlIGdyaWQgdGhhdCBjb2x1bW5MaXN0LmNoYW5nZXMgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBzdGF0ZSBkaXJlY3RpdmVcbiAgICAgICAgLy8gaW5zdGVhZCBvZiBwaXBpbmcgaXQgbGlrZSBiZWxvd1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gJ2NvbHVtbnMnO1xuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5jaGFuZ2VzLnBpcGUoZGVsYXkoMCksIHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gdGhpcy5mZWF0dXJlS2V5cy5maWx0ZXIoZiA9PiBmICE9PSBjb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZUZlYXR1cmVzKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwbHlGZWF0dXJlcyhmZWF0dXJlcyk7XG4gICAgICAgIGlmICh0aGlzLmZlYXR1cmVLZXlzLmluY2x1ZGVzKGNvbHVtbnMpICYmIHRoaXMub3B0aW9uc1tjb2x1bW5zXSAmJiBzdGF0ZVtjb2x1bW5zXSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGZWF0dXJlKGNvbHVtbnMpLnJlc3RvcmVGZWF0dXJlU3RhdGUodGhpcywgc3RhdGVbY29sdW1uc10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlRmVhdHVyZXMoc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0b3JlRmVhdHVyZXMoc3RhdGU6IElHcmlkU3RhdGUpIHtcbiAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uc1tmXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVTdGF0ZSA9IHN0YXRlW2ZdO1xuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZShmKTtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5yZXN0b3JlRmVhdHVyZVN0YXRlKHRoaXMsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBhbGwgZ3JpZCBmZWF0dXJlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGx5RmVhdHVyZXMoa2V5cz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMgPSBbXTtcbiAgICAgICAgaWYgKCFrZXlzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5wdXNoKGtleSBhcyBHcmlkRmVhdHVyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZUtleXMgPSBbLi4ua2V5cyBhcyBHcmlkRmVhdHVyZXNbXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzLnB1c2goa2V5cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBidWlsZHMgYSBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgZnJvbSBhIHByb3ZpZGVkIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3QoZXhwclRyZWVPYmplY3Q6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB7XG4gICAgICAgIGlmICghZXhwclRyZWVPYmplY3QgfHwgIWV4cHJUcmVlT2JqZWN0LmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zVHJlZSA9IG5ldyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUoZXhwclRyZWVPYmplY3Qub3BlcmF0b3IsIGV4cHJUcmVlT2JqZWN0LmZpZWxkTmFtZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGV4cHJUcmVlT2JqZWN0LmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdGVtIGlzIGFuIGV4cHJlc3Npb25zIHRyZWUgb3IgYSBzaW5nbGUgZXhwcmVzc2lvbi5cbiAgICAgICAgICAgIGlmICgoaXRlbSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdCgoaXRlbSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpKTtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaChzdWJUcmVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwciA9IGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFUeXBlOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VyckdyaWQuY29sdW1uTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5jdXJyR3JpZC5jb2x1bW5MaXN0LmZpbmQoYyA9PiBjLmZpZWxkID09PSBleHByLmZpZWxkTmFtZSkuZGF0YVR5cGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSB0aGlzLnN0YXRlLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBFU0YsIHZhbHVlcyBhcmUgc3RvcmVkIGluIFNldC5cbiAgICAgICAgICAgICAgICAvLyBGaXJzdCB0aG9zZSB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBhbiBhcnJheSBiZWZvcmUgcmV0dXJuaW5nIHN0cmluZyBpbiB0aGUgc3RyaW5naWZ5Q2FsbGJhY2tcbiAgICAgICAgICAgICAgICAvLyBub3cgd2UgbmVlZCB0byBjb252ZXJ0IHRob3NlIGJhY2sgdG8gU2V0XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwci5zZWFyY2hWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuc2VhcmNoVmFsID0gbmV3IFNldChleHByLnNlYXJjaFZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5zZWFyY2hWYWwgPSBleHByLnNlYXJjaFZhbCAmJiAoZGF0YVR5cGUgPT09ICdkYXRlJykgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKGV4cHIuc2VhcmNoVmFsKSkgOiBleHByLnNlYXJjaFZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhwci5jb25kaXRpb24gPSB0aGlzLmdlbmVyYXRlRmlsdGVyaW5nQ29uZGl0aW9uKGRhdGFUeXBlLCBleHByLmNvbmRpdGlvbi5uYW1lKTtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaChleHByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByZXNzaW9uc1RyZWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlsdGVyaW5nIGxvZ2ljIGZ1bmN0aW9uIGZvciBhIGdpdmVuIGRhdGFUeXBlIGFuZCBjb25kaXRpb24gKGNvbnRhaW5zLCBncmVhdGVyVGhhbiwgZXRjLilcbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlRmlsdGVyaW5nQ29uZGl0aW9uKGRhdGFUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IElGaWx0ZXJpbmdPcGVyYXRpb24ge1xuICAgICAgICBsZXQgZmlsdGVycztcbiAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlN0cmluZzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVycy5jb25kaXRpb24obmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdHJpbmdpZnlDYWxsYmFjayhrZXk6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3NlYXJjaFZhbCcgJiYgdmFsIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGZWF0dXJlKGtleTogc3RyaW5nKTogRmVhdHVyZSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmU6IEZlYXR1cmUgPSB0aGlzLkZFQVRVUkVTW2tleV07XG4gICAgICAgIHJldHVybiBmZWF0dXJlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4R3JpZFN0YXRlRGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbSWd4R3JpZFN0YXRlRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU3RhdGVNb2R1bGUgeyB9XG4iXX0=
533
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3N0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBOEMsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ILE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSwrQ0FBK0MsQ0FBQztBQUVwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQ25GLHlCQUF5QixFQUFzQixNQUFNLHdDQUF3QyxDQUFDO0FBR2xHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3pELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0MsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQTZFbEUsTUFBTSxPQUFPLHFCQUFxQjtJQWlUOUI7O09BRUc7SUFDSCxZQUNzRCxJQUFjLEVBQ3hELFFBQWtDLEVBQ2xDLE9BQXlCO1FBRmlCLFNBQUksR0FBSixJQUFJLENBQVU7UUFDeEQsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDbEMsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFwVDdCLGdCQUFXLEdBQW1CLEVBQUUsQ0FBQztRQUdqQyxhQUFRLEdBQXNCO1lBQ2xDLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxF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b0JBQ04sWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT3B0aW9uYWwsIElucHV0LCBOZ01vZHVsZSwgSG9zdCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBWaWV3Q29udGFpbmVyUmVmLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbnMvY29sdW1uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJR3JvdXBpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElQYWdpbmdTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9wYWdpbmctc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQsIElneE51bWJlckZpbHRlcmluZ09wZXJhbmQsIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLFxuICAgIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQsIElGaWx0ZXJpbmdPcGVyYXRpb259IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IElHcm91cEJ5RXhwYW5kU3RhdGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1leHBhbmQtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ1N0YXRlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElQaW5uaW5nQ29uZmlnIH0gZnJvbSAnLi9ncmlkLmNvbW1vbic7XG5pbXBvcnQgeyBkZWxheSwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25SYW5nZSB9IGZyb20gJy4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGUge1xuICAgIGNvbHVtbnM/OiBJQ29sdW1uU3RhdGVbXTtcbiAgICBmaWx0ZXJpbmc/OiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nPzogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBwYWdpbmc/OiBJUGFnaW5nU3RhdGU7XG4gICAgc29ydGluZz86IElTb3J0aW5nRXhwcmVzc2lvbltdO1xuICAgIGdyb3VwQnk/OiBJR3JvdXBpbmdTdGF0ZTtcbiAgICBjZWxsU2VsZWN0aW9uPzogR3JpZFNlbGVjdGlvblJhbmdlW107XG4gICAgcm93U2VsZWN0aW9uPzogYW55W107XG4gICAgY29sdW1uU2VsZWN0aW9uPzogc3RyaW5nW107XG4gICAgcm93UGlubmluZz86IGFueVtdO1xuICAgIHBpbm5pbmdDb25maWc/OiBJUGlubmluZ0NvbmZpZztcbiAgICBleHBhbnNpb24/OiBhbnlbXTtcbiAgICByb3dJc2xhbmRzPzogSUdyaWRTdGF0ZUNvbGxlY3Rpb25bXTtcbiAgICBpZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlQ29sbGVjdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBwYXJlbnRSb3dJRDogYW55O1xuICAgIHN0YXRlOiBJR3JpZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGVPcHRpb25zIHtcbiAgICBjb2x1bW5zPzogYm9vbGVhbjtcbiAgICBmaWx0ZXJpbmc/OiBib29sZWFuO1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nPzogYm9vbGVhbjtcbiAgICBzb3J0aW5nPzogYm9vbGVhbjtcbiAgICBncm91cEJ5PzogYm9vbGVhbjtcbiAgICBwYWdpbmc/OiBib29sZWFuO1xuICAgIGNlbGxTZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIHJvd1NlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgY29sdW1uU2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgICByb3dQaW5uaW5nPzogYm9vbGVhbjtcbiAgICBwaW5uaW5nQ29uZmlnPzogYm9vbGVhbjtcbiAgICBleHBhbnNpb24/OiBib29sZWFuO1xuICAgIHJvd0lzbGFuZHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5TdGF0ZSB7XG4gICAgcGlubmVkOiBib29sZWFuO1xuICAgIHNvcnRhYmxlOiBib29sZWFuO1xuICAgIGZpbHRlcmFibGU6IGJvb2xlYW47XG4gICAgZWRpdGFibGU6IGJvb2xlYW47XG4gICAgc29ydGluZ0lnbm9yZUNhc2U6IGJvb2xlYW47XG4gICAgZmlsdGVyaW5nSWdub3JlQ2FzZTogYm9vbGVhbjtcbiAgICBoZWFkZXJDbGFzc2VzOiBzdHJpbmc7XG4gICAgaGVhZGVyR3JvdXBDbGFzc2VzOiBzdHJpbmc7XG4gICAgbWF4V2lkdGg6IHN0cmluZztcbiAgICBncm91cGFibGU6IGJvb2xlYW47XG4gICAgbW92YWJsZTogYm9vbGVhbjtcbiAgICBoaWRkZW46IGJvb2xlYW47XG4gICAgZGF0YVR5cGU6IEdyaWRDb2x1bW5EYXRhVHlwZTtcbiAgICBoYXNTdW1tYXJ5OiBib29sZWFuO1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgd2lkdGg6IGFueTtcbiAgICBoZWFkZXI6IHN0cmluZztcbiAgICByZXNpemFibGU6IGJvb2xlYW47XG4gICAgc2VhcmNoYWJsZTogYm9vbGVhbjtcbiAgICBjb2x1bW5Hcm91cDogYm9vbGVhbjtcbiAgICBwYXJlbnQ6IGFueTtcbiAgICBkaXNhYmxlSGlkaW5nOiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBHcmlkRmVhdHVyZXMgPSBrZXlvZiBJR3JpZFN0YXRlT3B0aW9ucztcblxuaW50ZXJmYWNlIEZlYXR1cmUge1xuICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSkgPT4gSUdyaWRTdGF0ZTtcbiAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSUNvbHVtblN0YXRlW10gfCBJUGFnaW5nU3RhdGUgfCBJU29ydGluZ0V4cHJlc3Npb25bXSB8XG4gICAgICAgIElHcm91cGluZ1N0YXRlIHwgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB8IEdyaWRTZWxlY3Rpb25SYW5nZVtdIHwgSVBpbm5pbmdDb25maWcgfCBhbnlbXSkgPT4gdm9pZDtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4R3JpZFN0YXRlXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFN0YXRlRGlyZWN0aXZlIHtcbiAgICBwcml2YXRlIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vcHRpb25zOiBJR3JpZFN0YXRlT3B0aW9ucyB8ICcnO1xuXG4gICAgcHJpdmF0ZSBmZWF0dXJlS2V5czogR3JpZEZlYXR1cmVzW10gPSBbXTtcbiAgICBwcml2YXRlIHN0YXRlOiBJR3JpZFN0YXRlO1xuICAgIHByaXZhdGUgY3VyckdyaWQ6IEdyaWRUeXBlO1xuICAgIHByaXZhdGUgX29wdGlvbnM6IElHcmlkU3RhdGVPcHRpb25zID0ge1xuICAgICAgICBjb2x1bW5zOiB0cnVlLFxuICAgICAgICBmaWx0ZXJpbmc6IHRydWUsXG4gICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nOiB0cnVlLFxuICAgICAgICBzb3J0aW5nOiB0cnVlLFxuICAgICAgICBncm91cEJ5OiB0cnVlLFxuICAgICAgICBwYWdpbmc6IHRydWUsXG4gICAgICAgIGNlbGxTZWxlY3Rpb246IHRydWUsXG4gICAgICAgIHJvd1NlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgY29sdW1uU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICByb3dQaW5uaW5nOiB0cnVlLFxuICAgICAgICBleHBhbnNpb246IHRydWUsXG4gICAgICAgIHJvd0lzbGFuZHM6IHRydWVcbiAgICB9O1xuICAgIHByaXZhdGUgRkVBVFVSRVMgPSB7XG4gICAgICAgIHNvcnRpbmc6ICB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgICAgICAgICBzb3J0aW5nU3RhdGUuZm9yRWFjaChzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHMuc3RyYXRlZ3k7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzLm93bmVyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNvcnRpbmc6IHNvcnRpbmdTdGF0ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJU29ydGluZ0V4cHJlc3Npb25bXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc29ydGluZ0V4cHJlc3Npb25zID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbHRlcmluZ1N0YXRlLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyaW5nU3RhdGUuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAoaXRlbSBhcyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaWx0ZXJpbmc6IGZpbHRlcmluZ1N0YXRlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclRyZWUgPSBjb250ZXh0LmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3Qoc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gZmlsdGVyVHJlZSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICAgICAgbGV0IGFkdmFuY2VkRmlsdGVyaW5nOiBhbnk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWx0ZXJpbmdTdGF0ZS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbHRlcmluZ1N0YXRlLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgKGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmcgPSBmaWx0ZXJpbmdTdGF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEZpbHRlcmluZyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBhZHZhbmNlZEZpbHRlcmluZyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJUcmVlID0gY29udGV4dC5jcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gZmlsdGVyVHJlZSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWRDb2x1bW5zOiBJQ29sdW1uU3RhdGVbXSA9IGNvbnRleHQuY3VyckdyaWQuY29sdW1ucy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHBpbm5lZDogYy5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBjLnNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJhYmxlOiBjLmZpbHRlcmFibGUsXG4gICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBjLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBzb3J0aW5nSWdub3JlQ2FzZTogYy5zb3J0aW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyaW5nSWdub3JlQ2FzZTogYy5maWx0ZXJpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJDbGFzc2VzOiBjLmhlYWRlckNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckdyb3VwQ2xhc3NlczogYy5oZWFkZXJHcm91cENsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjLm1heFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBncm91cGFibGU6IGMuZ3JvdXBhYmxlLFxuICAgICAgICAgICAgICAgICAgICBtb3ZhYmxlOiBjLm1vdmFibGUsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogYy5oaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICBoYXNTdW1tYXJ5OiBjLmhhc1N1bW1hcnksXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogYy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBjLmhlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiBjLnJlc2l6YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogYy5zZWFyY2hhYmxlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBjLnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogYy5wYXJlbnQgPyBjLnBhcmVudC5oZWFkZXIgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cDogYy5jb2x1bW5Hcm91cCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUhpZGluZzogYy5kaXNhYmxlSGlkaW5nXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNvbHVtbnM6IGdyaWRDb2x1bW5zIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSBjb250ZXh0LnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KElneENvbHVtbkNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBGYWN0b3J5ID0gY29udGV4dC5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgc3RhdGUuZm9yRWFjaCgoY29sU3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzQ29sdW1uR3JvdXAgPSBjb2xTdGF0ZS5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbFN0YXRlLmNvbHVtbkdyb3VwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZjEgPSBncm91cEZhY3RvcnkuY3JlYXRlKGNvbnRleHQudmlld1JlZi5pbmplY3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlZjEuaW5zdGFuY2UsIGNvbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWYxLmluc3RhbmNlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwOiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCA9IG5ld0NvbHVtbnMuZmluZChlID0+IGUuaGVhZGVyID09PSByZWYxLmluc3RhbmNlLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXAuY2hpbGRyZW4ucmVzZXQoWy4uLmNvbHVtbkdyb3VwLmNoaWxkcmVuLnRvQXJyYXkoKSwgcmVmMS5pbnN0YW5jZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjEuaW5zdGFuY2UucGFyZW50ID0gY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYxLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMucHVzaChyZWYxLmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGZhY3RvcnkuY3JlYXRlKGNvbnRleHQudmlld1JlZi5pbmplY3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlZi5pbnN0YW5jZSwgY29sU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Hcm91cDogSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgPSBuZXdDb2x1bW5zLmZpbmQoZSA9PiBlLmhlYWRlciA9PT0gcmVmLmluc3RhbmNlLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5wYXJlbnQgPSBjb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXAuY2hpbGRyZW4ucmVzZXQoWy4uLmNvbHVtbkdyb3VwLmNoaWxkcmVuLnRvQXJyYXkoKSwgcmVmLmluc3RhbmNlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMucHVzaChyZWYuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5jb2x1bW5MaXN0LnJlc2V0KG5ld0NvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuY29sdW1uTGlzdC5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGNvbnRleHQuY3VyckdyaWQgYXMgSWd4R3JpZENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGluZ0V4cHJlc3Npb25zID0gZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zO1xuICAgICAgICAgICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbnMuZm9yRWFjaChleHByID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGV4cHIuc3RyYXRlZ3k7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5zaW9uU3RhdGUgPSBncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBzRXhwYW5kZWQgPSBncmlkLmdyb3Vwc0V4cGFuZGVkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBCeTogeyBleHByZXNzaW9uczogZ3JvdXBpbmdFeHByZXNzaW9ucywgZXhwYW5zaW9uOiBleHBhbnNpb25TdGF0ZSwgZGVmYXVsdEV4cGFuZGVkOiBncm91cHNFeHBhbmRlZH0gIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElHcm91cGluZ1N0YXRlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGNvbnRleHQuY3VyckdyaWQgYXMgSWd4R3JpZENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBzdGF0ZS5leHByZXNzaW9ucyBhcyBJR3JvdXBpbmdFeHByZXNzaW9uW107XG4gICAgICAgICAgICAgICAgaWYgKGdyaWQuZ3JvdXBzRXhwYW5kZWQgIT09IHN0YXRlLmRlZmF1bHRFeHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICBncmlkLnRvZ2dsZUFsbEdyb3VwUm93cygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZSA9IHN0YXRlLmV4cGFuc2lvbiBhcyBJR3JvdXBCeUV4cGFuZFN0YXRlW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwYWdpbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2luZ1N0YXRlID0gY29udGV4dC5jdXJyR3JpZC5wYWdpbmdTdGF0ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwYWdpbmc6IHBhZ2luZ1N0YXRlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElQYWdpbmdTdGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5jdXJyR3JpZC5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jdXJyR3JpZC5wYWdpbmF0b3IucGVyUGFnZSAhPT0gc3RhdGUucmVjb3Jkc1BlclBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5wYWdpbmF0b3IucGVyUGFnZSA9IHN0YXRlLnJlY29yZHNQZXJQYWdlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGFnaW5hdG9yLnBhZ2UgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93U2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdGVkUm93cztcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb3dTZWxlY3Rpb246IHNlbGVjdGlvbiB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc2VsZWN0Um93cyhzdGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNlbGxTZWxlY3Rpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGNvbnRleHQuY3VyckdyaWQuZ2V0U2VsZWN0ZWRSYW5nZXMoKS5tYXAocmFuZ2UgPT5cbiAgICAgICAgICAgICAgICAgICAgKHsgcm93U3RhcnQ6IHJhbmdlLnJvd1N0YXJ0LCByb3dFbmQ6IHJhbmdlLnJvd0VuZCwgY29sdW1uU3RhcnQ6IHJhbmdlLmNvbHVtblN0YXJ0LCBjb2x1bW5FbmQ6IHJhbmdlLmNvbHVtbkVuZCB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY2VsbFNlbGVjdGlvbjogc2VsZWN0aW9uIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IEdyaWRTZWxlY3Rpb25SYW5nZVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB7IHJvd1N0YXJ0OiByLnJvd1N0YXJ0LCByb3dFbmQ6IHIucm93RW5kLCBjb2x1bW5TdGFydDogci5jb2x1bW5TdGFydCwgY29sdW1uRW5kOiByLmNvbHVtbkVuZH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc2VsZWN0UmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5TZWxlY3Rpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGNvbnRleHQuY3VyckdyaWQuc2VsZWN0ZWRDb2x1bW5zKCkubWFwKGMgPT4gYy5maWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY29sdW1uU2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogc3RyaW5nW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmRlc2VsZWN0QWxsQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc2VsZWN0Q29sdW1ucyhzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd1Bpbm5pbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpbm5lZCA9IGNvbnRleHQuY3VyckdyaWQucGlubmVkUm93cy5tYXAoeCA9PiB4LnJvd0lEKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb3dQaW5uaW5nOiBwaW5uZWQgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYW55W10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhciBjdXJyZW50IHN0YXRlLlxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGlubmVkUm93cy5mb3JFYWNoKHJvdyA9PiByb3cudW5waW4oKSk7XG4gICAgICAgICAgICAgICAgc3RhdGUuZm9yRWFjaChyb3dJRCA9PiBjb250ZXh0LmN1cnJHcmlkLnBpblJvdyhyb3dJRCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwaW5uaW5nQ29uZmlnOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+ICh7IHBpbm5pbmdDb25maWc6IGNvbnRleHQuY3VyckdyaWQucGlubmluZyB9KSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJUGlubmluZ0NvbmZpZyk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGlubmluZyA9IHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBleHBhbnNpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IEFycmF5LmZyb20oY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGV4cGFuc2lvbjogZXhwYW5zaW9uU3RhdGVzIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5zaW9uU3RhdGVzID0gbmV3IE1hcDxhbnksIGJvb2xlYW4+KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmV4cGFuc2lvblN0YXRlcyA9IGV4cGFuc2lvblN0YXRlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93SXNsYW5kczoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlczogSUdyaWRTdGF0ZUNvbGxlY3Rpb25bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lzbGFuZHMgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBhbnkpLmFsbExheW91dExpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0lzbGFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kcy5mb3JFYWNoKHJvd0lzbGFuZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRzID0gcm93SXNsYW5kLnJvd0lzbGFuZEFQSS5nZXRDaGlsZEdyaWRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRzLmZvckVhY2goY2hHcmlkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJRCA9IHRoaXMuZ2V0UGFyZW50Um93SUQoY2hHcmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY2hHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmN1cnJHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlID0gY29udGV4dC5idWlsZFN0YXRlKGNvbnRleHQuZmVhdHVyZUtleXMpIGFzIElHcmlkU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkR3JpZFN0YXRlcy5wdXNoKHsgaWQ6IGAke3Jvd0lzbGFuZC5pZH1gLCBwYXJlbnRSb3dJRCwgc3RhdGU6IGNoaWxkR3JpZFN0YXRlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNvbnRleHQuZ3JpZDtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb3dJc2xhbmRzOiBjaGlsZEdyaWRTdGF0ZXMgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lzbGFuZHMgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBhbnkpLmFsbExheW91dExpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0lzbGFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kcy5mb3JFYWNoKHJvd0lzbGFuZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRzID0gcm93SXNsYW5kLnJvd0lzbGFuZEFQSS5nZXRDaGlsZEdyaWRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRzLmZvckVhY2goY2hHcmlkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJRCA9IHRoaXMuZ2V0UGFyZW50Um93SUQoY2hHcmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY2hHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlID0gc3RhdGUuZmluZChzdCA9PiBzdC5pZCA9PT0gcm93SXNsYW5kLmlkICYmIHN0LnBhcmVudFJvd0lEID09PSBwYXJlbnRSb3dJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkR3JpZFN0YXRlICYmIGNvbnRleHQuY3VyckdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlR3JpZFN0YXRlKGNoaWxkR3JpZFN0YXRlLnN0YXRlLCBjb250ZXh0LmZlYXR1cmVLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjb250ZXh0LmdyaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUcmF2ZXJzZXMgdGhlIGhpZXJhcmNoeSB1cCB0byB0aGUgcm9vdCBncmlkIHRvIHJldHVybiB0aGUgSUQgb2YgdGhlIGV4cGFuZGVkIHJvdy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0UGFyZW50Um93SUQ6IChncmlkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkR3JpZDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoZ3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkID0gZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZCA9IGdyaWQucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JpZC5oZ3JpZEFQSS5nZXRQYXJlbnRSb3dJZChjaGlsZEdyaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBBbiBvYmplY3Qgd2l0aCBvcHRpb25zIGRldGVybWluaW5nIGlmIGEgY2VydGFpbiBmZWF0dXJlIHN0YXRlIHNob3VsZCBiZSBzYXZlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1ncmlkIFtpZ3hHcmlkU3RhdGVdPVwib3B0aW9uc1wiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBvcHRpb25zID0ge3NlbGVjdGlvbjogZmFsc2UsIGFkdmFuY2VkRmlsdGVyaW5nOiBmYWxzZX07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hHcmlkU3RhdGUnKVxuICAgIHB1YmxpYyBnZXQgb3B0aW9ucygpOiBJR3JpZFN0YXRlT3B0aW9ucyB7XG4gICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBJR3JpZFN0YXRlT3B0aW9ucykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX29wdGlvbnMsIHZhbHVlKTtcbiAgICAgICAgaWYgKCEodGhpcy5ncmlkIGluc3RhbmNlb2YgSWd4R3JpZENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmdyb3VwQnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb3B0aW9ucy5yb3dJc2xhbmRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASG9zdCgpIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHVibGljIGdyaWQ6IEdyaWRUeXBlLFxuICAgICAgICBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZikgeyB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdGF0ZSBvZiBhIGZlYXR1cmUgb3Igc3RhdGVzIG9mIGFsbCBncmlkIGZlYXR1cmVzLCB1bmxlc3MgYSBjZXJ0YWluIGZlYXR1cmUgaXMgZGlzYWJsZWQgdGhyb3VnaCB0aGUgYG9wdGlvbnNgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGBzZXJpYWxpemVgIGRldGVybWluZXMgd2hldGhlciB0aGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgYmUgc2VyaWFsaXplZCB0byBKU09OIHN0cmluZy4gRGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgICAqIEBwYXJhbSBgZmVhdHVyZWAgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgZGV0ZXJtaW5pbmcgdGhlIGZlYXR1cmVzIHRvIGJlIGFkZGVkIGluIHRoZSBzdGF0ZS4gSWYgc2tpcHBlZCwgYWxsIGZlYXR1cmVzIGFyZSBhZGRlZC5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIHRvIEpTT04gc3RyaW5nIElHcmlkU3RhdGUgb2JqZWN0LCBvciB0aGUgbm9uLXNlcmlhbGl6ZWQgSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZCBbaWd4R3JpZFN0YXRlXT1cIm9wdGlvbnNcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHN0YXRlO1xuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGUuZ2V0U3RhdGUoKTsgLy8gcmV0dXJucyBzdHJpbmdcbiAgICAgKiBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlKGZhbHNlKSAvLyByZXR1cm5zIGBJR3JpZFN0YXRlYCBvYmplY3RcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U3RhdGUoc2VyaWFsaXplID0gdHJ1ZSwgZmVhdHVyZXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSk6IElHcmlkU3RhdGUgfCBzdHJpbmcgIHtcbiAgICAgICAgbGV0IHN0YXRlOiBJR3JpZFN0YXRlIHwgc3RyaW5nO1xuICAgICAgICB0aGlzLmN1cnJHcmlkID0gdGhpcy5ncmlkO1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGUgPSB0aGlzLmJ1aWxkU3RhdGUoZmVhdHVyZXMpIGFzIElHcmlkU3RhdGU7XG4gICAgICAgIGlmIChzZXJpYWxpemUpIHtcbiAgICAgICAgICAgIHN0YXRlID0gSlNPTi5zdHJpbmdpZnkoc3RhdGUsIHRoaXMuc3RyaW5naWZ5Q2FsbGJhY2spIGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzdG9yZXMgZ3JpZCBmZWF0dXJlcycgc3RhdGUgYmFzZWQgb24gdGhlIElHcmlkU3RhdGUgb2JqZWN0IHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBJR3JpZFN0YXRlIG9iamVjdCB0byByZXN0b3JlIHN0YXRlIGZyb20uXG4gICAgICogQHJldHVybnNcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1ncmlkIFtpZ3hHcmlkU3RhdGVdPVwib3B0aW9uc1wiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgc3RhdGU7XG4gICAgICogdGhpcy5zdGF0ZS5zZXRTdGF0ZShncmlkU3RhdGUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRTdGF0ZShzdGF0ZTogSUdyaWRTdGF0ZSB8IHN0cmluZywgZmVhdHVyZXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc3RhdGUgPSBKU09OLnBhcnNlKHN0YXRlKSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5jdXJyR3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgdGhpcy5yZXN0b3JlR3JpZFN0YXRlKHN0YXRlLCBmZWF0dXJlcyk7XG4gICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUT0RPXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGFuIElHcmlkU3RhdGUgb2JqZWN0LlxuICAgICAqL1xuICAgIHByaXZhdGUgYnVpbGRTdGF0ZShrZXlzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgdGhpcy5hcHBseUZlYXR1cmVzKGtleXMpO1xuICAgICAgICBsZXQgZ3JpZFN0YXRlID0ge30gYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uc1tmXSkge1xuICAgICAgICAgICAgICAgIGlmICghKHRoaXMuZ3JpZCBpbnN0YW5jZW9mIElneEdyaWRDb21wb25lbnQpICYmIGYgPT09ICdncm91cEJ5Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmUoZik7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZVN0YXRlOiBJR3JpZFN0YXRlID0gZmVhdHVyZS5nZXRGZWF0dXJlU3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgZ3JpZFN0YXRlID0gT2JqZWN0LmFzc2lnbihncmlkU3RhdGUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZ3JpZFN0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBjYWxscyBjb3JyZXNwb25kaW5nIG1ldGhvZHMgdG8gcmVzdG9yZSBmZWF0dXJlcyBmcm9tIHRoZSBwYXNzZWQgSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXN0b3JlR3JpZFN0YXRlKHN0YXRlOiBJR3JpZFN0YXRlLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKSB7XG4gICAgICAgIC8vIFRPRE8gTm90aWZ5IHRoZSBncmlkIHRoYXQgY29sdW1uTGlzdC5jaGFuZ2VzIGlzIHRyaWdnZXJlZCBieSB0aGUgc3RhdGUgZGlyZWN0aXZlXG4gICAgICAgIC8vIGluc3RlYWQgb2YgcGlwaW5nIGl0IGxpa2UgYmVsb3dcbiAgICAgICAgY29uc3QgY29sdW1ucyA9ICdjb2x1bW5zJztcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbkxpc3QuY2hhbmdlcy5waXBlKGRlbGF5KDApLCB0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cyA9IHRoaXMuZmVhdHVyZUtleXMuZmlsdGVyKGYgPT4gZiAhPT0gY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVGZWF0dXJlcyhzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFwcGx5RmVhdHVyZXMoZmVhdHVyZXMpO1xuICAgICAgICBpZiAodGhpcy5mZWF0dXJlS2V5cy5pbmNsdWRlcyhjb2x1bW5zKSAmJiB0aGlzLm9wdGlvbnNbY29sdW1uc10gJiYgc3RhdGVbY29sdW1uc10pIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmVhdHVyZShjb2x1bW5zKS5yZXN0b3JlRmVhdHVyZVN0YXRlKHRoaXMsIHN0YXRlW2NvbHVtbnNdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZUZlYXR1cmVzKHN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZUZlYXR1cmVzKHN0YXRlOiBJR3JpZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbZl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGUgPSBzdGF0ZVtmXTtcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmUoZik7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmUucmVzdG9yZUZlYXR1cmVTdGF0ZSh0aGlzLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgYWxsIGdyaWQgZmVhdHVyZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBseUZlYXR1cmVzKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gW107XG4gICAgICAgIGlmICgha2V5cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZUtleXMucHVzaChrZXkgYXMgR3JpZEZlYXR1cmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gWy4uLmtleXMgYXMgR3JpZEZlYXR1cmVzW11dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5wdXNoKGtleXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgYnVpbGRzIGEgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIGZyb20gYSBwcm92aWRlZCBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KGV4cHJUcmVlT2JqZWN0OiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUge1xuICAgICAgICBpZiAoIWV4cHJUcmVlT2JqZWN0IHx8ICFleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGV4cHJUcmVlT2JqZWN0Lm9wZXJhdG9yLCBleHByVHJlZU9iamVjdC5maWVsZE5hbWUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXRlbSBpcyBhbiBleHByZXNzaW9ucyB0cmVlIG9yIGEgc2luZ2xlIGV4cHJlc3Npb24uXG4gICAgICAgICAgICBpZiAoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YlRyZWUgPSB0aGlzLmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3QoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSk7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goc3ViVHJlZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSBpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhVHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJHcmlkLmNvbHVtbkxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IHRoaXMuY3VyckdyaWQuY29sdW1uTGlzdC5maW5kKGMgPT4gYy5maWVsZCA9PT0gZXhwci5maWVsZE5hbWUpLmRhdGFUeXBlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5zdGF0ZS5jb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkID09PSBleHByLmZpZWxkTmFtZSkuZGF0YVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gRVNGLCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBTZXQuXG4gICAgICAgICAgICAgICAgLy8gRmlyc3QgdGhvc2UgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgdG8gYW4gYXJyYXkgYmVmb3JlIHJldHVybmluZyBzdHJpbmcgaW4gdGhlIHN0cmluZ2lmeUNhbGxiYWNrXG4gICAgICAgICAgICAgICAgLy8gbm93IHdlIG5lZWQgdG8gY29udmVydCB0aG9zZSBiYWNrIHRvIFNldFxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cHIuc2VhcmNoVmFsKSkge1xuICAgICAgICAgICAgICAgICAgICBleHByLnNlYXJjaFZhbCA9IG5ldyBTZXQoZXhwci5zZWFyY2hWYWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuc2VhcmNoVmFsID0gZXhwci5zZWFyY2hWYWwgJiYgKGRhdGFUeXBlID09PSAnZGF0ZScpID8gbmV3IERhdGUoRGF0ZS5wYXJzZShleHByLnNlYXJjaFZhbCkpIDogZXhwci5zZWFyY2hWYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4cHIuY29uZGl0aW9uID0gdGhpcy5nZW5lcmF0ZUZpbHRlcmluZ0NvbmRpdGlvbihkYXRhVHlwZSwgZXhwci5jb25kaXRpb24ubmFtZSk7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goZXhwcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbnNUcmVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZpbHRlcmluZyBsb2dpYyBmdW5jdGlvbiBmb3IgYSBnaXZlbiBkYXRhVHlwZSBhbmQgY29uZGl0aW9uIChjb250YWlucywgZ3JlYXRlclRoYW4sIGV0Yy4pXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpbHRlcmluZ0NvbmRpdGlvbihkYXRhVHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBJRmlsdGVyaW5nT3BlcmF0aW9uIHtcbiAgICAgICAgbGV0IGZpbHRlcnM7XG4gICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneEJvb2xlYW5GaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneE51bWJlckZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGU6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5TdHJpbmc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcnMuY29uZGl0aW9uKG5hbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RyaW5naWZ5Q2FsbGJhY2soa2V5OiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdzZWFyY2hWYWwnICYmIHZhbCBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmVhdHVyZShrZXk6IHN0cmluZyk6IEZlYXR1cmUge1xuICAgICAgICBjb25zdCBmZWF0dXJlOiBGZWF0dXJlID0gdGhpcy5GRUFUVVJFU1trZXldO1xuICAgICAgICByZXR1cm4gZmVhdHVyZTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneEdyaWRTdGF0ZURpcmVjdGl2ZV0sXG4gICAgZXhwb3J0czogW0lneEdyaWRTdGF0ZURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFN0YXRlTW9kdWxlIHsgfVxuIl19
@@ -1,10 +1,11 @@
1
- import { Component, Host, Input } from '@angular/core';
1
+ import { Component, Inject, Input } from '@angular/core';
2
+ import { IgxToolbarToken } from './token';
2
3
  import * as i0 from "@angular/core";
3
- import * as i1 from "./token";
4
- import * as i2 from "../../icon/icon.component";
5
- import * as i3 from "../../directives/button/button.directive";
6
- import * as i4 from "../../directives/ripple/ripple.directive";
7
- import * as i5 from "@angular/common";
4
+ import * as i1 from "../../icon/icon.component";
5
+ import * as i2 from "../../directives/button/button.directive";
6
+ import * as i3 from "../../directives/ripple/ripple.directive";
7
+ import * as i4 from "@angular/common";
8
+ import * as i5 from "./token";
8
9
  /**
9
10
  * Provides a pre-configured button to open the advanced filtering dialog of the grid.
10
11
  *
@@ -29,14 +30,15 @@ export class IgxGridToolbarAdvancedFilteringComponent {
29
30
  return this.toolbar.grid;
30
31
  }
31
32
  }
32
- IgxGridToolbarAdvancedFilteringComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, deps: [{ token: i1.IgxToolbarToken, host: true }], target: i0.ɵɵFactoryTarget.Component });
33
- IgxGridToolbarAdvancedFilteringComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxGridToolbarAdvancedFilteringComponent, selector: "igx-grid-toolbar-advanced-filtering", inputs: { overlaySettings: "overlaySettings" }, ngImport: i0, template: "<button igxButton=\"outlined\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog()\"\n [ngClass]=\"grid.advancedFilteringExpressionsTree ? 'igx-grid-toolbar__adv-filter--filtered' : 'igx-grid-toolbar__adv-filter'\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n</button>\n", components: [{ type: i2.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: i3.IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: i4.IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
33
+ IgxGridToolbarAdvancedFilteringComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, deps: [{ token: IgxToolbarToken }], target: i0.ɵɵFactoryTarget.Component });
34
+ IgxGridToolbarAdvancedFilteringComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxGridToolbarAdvancedFilteringComponent, selector: "igx-grid-toolbar-advanced-filtering", inputs: { overlaySettings: "overlaySettings" }, ngImport: i0, template: "<button igxButton=\"outlined\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog()\"\n [ngClass]=\"grid.advancedFilteringExpressionsTree ? 'igx-grid-toolbar__adv-filter--filtered' : 'igx-grid-toolbar__adv-filter'\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n</button>\n", components: [{ type: i1.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: i2.IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: i3.IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
34
35
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, decorators: [{
35
36
  type: Component,
36
37
  args: [{ selector: 'igx-grid-toolbar-advanced-filtering', template: "<button igxButton=\"outlined\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog()\"\n [ngClass]=\"grid.advancedFilteringExpressionsTree ? 'igx-grid-toolbar__adv-filter--filtered' : 'igx-grid-toolbar__adv-filter'\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n</button>\n" }]
37
- }], ctorParameters: function () { return [{ type: i1.IgxToolbarToken, decorators: [{
38
- type: Host
38
+ }], ctorParameters: function () { return [{ type: i5.IgxToolbarToken, decorators: [{
39
+ type: Inject,
40
+ args: [IgxToolbarToken]
39
41
  }] }]; }, propDecorators: { overlaySettings: [{
40
42
  type: Input
41
43
  }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvdG9vbGJhci9ncmlkLXRvb2xiYXItYWR2YW5jZWQtZmlsdGVyaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy90b29sYmFyL2dyaWQtdG9vbGJhci1hZHZhbmNlZC1maWx0ZXJpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBS3ZEOzs7Ozs7Ozs7Ozs7R0FZRztBQUtILE1BQU0sT0FBTyx3Q0FBd0M7SUFZakQsWUFBNEIsT0FBd0I7UUFBeEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7SUFBSSxDQUFDO0lBVnpEOztPQUVHO0lBQ0gsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDOztxSUFQUSx3Q0FBd0M7eUhBQXhDLHdDQUF3QywySEN0QnJELHluQkFVQTsyRkRZYSx3Q0FBd0M7a0JBSnBELFNBQVM7K0JBQ0kscUNBQXFDOzswQkFlbEMsSUFBSTs0Q0FGVixlQUFlO3NCQURyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4VG9vbGJhclRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5pbXBvcnQgeyBPdmVybGF5U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vdmVybGF5L3V0aWxpdGllcyc7XG5cblxuLyoqXG4gKiBQcm92aWRlcyBhIHByZS1jb25maWd1cmVkIGJ1dHRvbiB0byBvcGVuIHRoZSBhZHZhbmNlZCBmaWx0ZXJpbmcgZGlhbG9nIG9mIHRoZSBncmlkLlxuICpcbiAqXG4gKiBAaWd4TW9kdWxlIElneEdyaWRUb29sYmFyTW9kdWxlXG4gKiBAaWd4UGFyZW50IElneEdyaWRUb29sYmFyQ29tcG9uZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZz48L2lneC1ncmlkLXRvb2xiYXItYWR2YW5jZWQtZmlsdGVyaW5nPlxuICogPGlneC1ncmlkLXRvb2xiYXItYWR2YW5jZWQtZmlsdGVyaW5nPkN1c3RvbSB0ZXh0PC9pZ3gtZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1ncmlkLXRvb2xiYXItYWR2YW5jZWQtZmlsdGVyaW5nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZFRvb2xiYXJBZHZhbmNlZEZpbHRlcmluZ0NvbXBvbmVudCB7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBncmlkIGNvbnRhaW5pbmcgdGhpcyBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBncmlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b29sYmFyLmdyaWQ7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3M7XG5cbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIHByaXZhdGUgdG9vbGJhcjogSWd4VG9vbGJhclRva2VuKSB7IH1cbn1cbiIsIjxidXR0b24gaWd4QnV0dG9uPVwib3V0bGluZWRcIiBbZGlzcGxheURlbnNpdHldPVwiZ3JpZC5kaXNwbGF5RGVuc2l0eVwiIG5hbWU9XCJidG5BZHZhbmNlZEZpbHRlcmluZ1wiIGlneFJpcHBsZVxuICAgIFt0aXRsZV09XCJncmlkPy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfdG9vbGJhcl9hZHZhbmNlZF9maWx0ZXJpbmdfYnV0dG9uX3Rvb2x0aXBcIlxuICAgIChjbGljayk9XCJncmlkLm9wZW5BZHZhbmNlZEZpbHRlcmluZ0RpYWxvZygpXCJcbiAgICBbbmdDbGFzc109XCJncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID8gJ2lneC1ncmlkLXRvb2xiYXJfX2Fkdi1maWx0ZXItLWZpbHRlcmVkJyA6ICdpZ3gtZ3JpZC10b29sYmFyX19hZHYtZmlsdGVyJ1wiPlxuICAgIDxpZ3gtaWNvbj5maWx0ZXJfbGlzdDwvaWd4LWljb24+XG4gICAgPHNwYW4gI3JlZj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cIiFyZWYuY2hpbGROb2Rlcy5sZW5ndGhcIj57eyBncmlkPy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfdG9vbGJhcl9hZHZhbmNlZF9maWx0ZXJpbmdfYnV0dG9uX2xhYmVsIH19PC9zcGFuPlxuPC9idXR0b24+XG4iXX0=
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvdG9vbGJhci9ncmlkLXRvb2xiYXItYWR2YW5jZWQtZmlsdGVyaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy90b29sYmFyL2dyaWQtdG9vbGJhci1hZHZhbmNlZC1maWx0ZXJpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7Ozs7QUFJMUM7Ozs7Ozs7Ozs7OztHQVlHO0FBS0gsTUFBTSxPQUFPLHdDQUF3QztJQVlqRCxZQUE4QyxPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtJQUFJLENBQUM7SUFWM0U7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7O3FJQVBRLHdDQUF3QyxrQkFZNUIsZUFBZTt5SEFaM0Isd0NBQXdDLDJIQ3RCckQseW5CQVVBOzJGRFlhLHdDQUF3QztrQkFKcEQsU0FBUzsrQkFDSSxxQ0FBcUM7OzBCQWVqQyxNQUFNOzJCQUFDLGVBQWU7NENBRjdCLGVBQWU7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFRvb2xiYXJUb2tlbiB9IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3ZlcmxheS91dGlsaXRpZXMnO1xuXG5cbi8qKlxuICogUHJvdmlkZXMgYSBwcmUtY29uZmlndXJlZCBidXR0b24gdG8gb3BlbiB0aGUgYWR2YW5jZWQgZmlsdGVyaW5nIGRpYWxvZyBvZiB0aGUgZ3JpZC5cbiAqXG4gKlxuICogQGlneE1vZHVsZSBJZ3hHcmlkVG9vbGJhck1vZHVsZVxuICogQGlneFBhcmVudCBJZ3hHcmlkVG9vbGJhckNvbXBvbmVudFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWdyaWQtdG9vbGJhci1hZHZhbmNlZC1maWx0ZXJpbmc+PC9pZ3gtZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZz5cbiAqIDxpZ3gtZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZz5DdXN0b20gdGV4dDwvaWd4LWdyaWQtdG9vbGJhci1hZHZhbmNlZC1maWx0ZXJpbmc+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtdG9vbGJhci1hZHZhbmNlZC1maWx0ZXJpbmcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRUb29sYmFyQWR2YW5jZWRGaWx0ZXJpbmdDb21wb25lbnQge1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ3JpZCBjb250YWluaW5nIHRoaXMgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ3JpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhci5ncmlkO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuXG4gICAgY29uc3RydWN0b3IoIEBJbmplY3QoSWd4VG9vbGJhclRva2VuKSBwcml2YXRlIHRvb2xiYXI6IElneFRvb2xiYXJUb2tlbikgeyB9XG59XG4iLCI8YnV0dG9uIGlneEJ1dHRvbj1cIm91dGxpbmVkXCIgW2Rpc3BsYXlEZW5zaXR5XT1cImdyaWQuZGlzcGxheURlbnNpdHlcIiBuYW1lPVwiYnRuQWR2YW5jZWRGaWx0ZXJpbmdcIiBpZ3hSaXBwbGVcbiAgICBbdGl0bGVdPVwiZ3JpZD8ucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Rvb2xiYXJfYWR2YW5jZWRfZmlsdGVyaW5nX2J1dHRvbl90b29sdGlwXCJcbiAgICAoY2xpY2spPVwiZ3JpZC5vcGVuQWR2YW5jZWRGaWx0ZXJpbmdEaWFsb2coKVwiXG4gICAgW25nQ2xhc3NdPVwiZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA/ICdpZ3gtZ3JpZC10b29sYmFyX19hZHYtZmlsdGVyLS1maWx0ZXJlZCcgOiAnaWd4LWdyaWQtdG9vbGJhcl9fYWR2LWZpbHRlcidcIj5cbiAgICA8aWd4LWljb24+ZmlsdGVyX2xpc3Q8L2lneC1pY29uPlxuICAgIDxzcGFuICNyZWY+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCIhcmVmLmNoaWxkTm9kZXMubGVuZ3RoXCI+e3sgZ3JpZD8ucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Rvb2xiYXJfYWR2YW5jZWRfZmlsdGVyaW5nX2J1dHRvbl9sYWJlbCB9fTwvc3Bhbj5cbjwvYnV0dG9uPlxuIl19