igniteui-angular 12.3.28 → 12.3.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/igniteui-angular.umd.js +148 -22
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/esm2015/lib/grids/api.service.js +2 -3
- package/esm2015/lib/grids/common/crud.service.js +3 -3
- package/esm2015/lib/grids/common/events.js +1 -1
- package/esm2015/lib/grids/grid-base.directive.js +12 -10
- package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid.component.js +3 -1
- package/esm2015/lib/grids/tree-grid/tree-grid.component.js +19 -3
- package/esm2015/lib/simple-combo/simple-combo.component.js +2 -2
- package/esm2015/lib/splitter/splitter-pane/splitter-pane.component.js +58 -6
- package/esm2015/lib/splitter/splitter.component.js +22 -3
- package/esm2015/lib/tree/tree.component.js +30 -1
- package/fesm2015/igniteui-angular.js +141 -23
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/igniteui-angular.metadata.json +1 -1
- package/lib/grids/common/events.d.ts +1 -0
- package/lib/splitter/splitter-pane/splitter-pane.component.d.ts +19 -5
- package/lib/tree/tree.component.d.ts +29 -0
- package/package.json +1 -1
|
@@ -37,6 +37,35 @@ IgxTreeExpandIndicatorDirective.decorators = [
|
|
|
37
37
|
selector: '[igxTreeExpandIndicator]'
|
|
38
38
|
},] }
|
|
39
39
|
];
|
|
40
|
+
/**
|
|
41
|
+
* IgxTreeComponent allows a developer to show a set of nodes in a hierarchical fashion.
|
|
42
|
+
*
|
|
43
|
+
* @igxModule IgxTreeModule
|
|
44
|
+
* @igxKeywords tree
|
|
45
|
+
* @igxTheme igx-tree-theme
|
|
46
|
+
* @igxGroup Grids & Lists
|
|
47
|
+
*
|
|
48
|
+
* @remark
|
|
49
|
+
* The Angular Tree Component allows users to represent hierarchical data in a tree-view structure,
|
|
50
|
+
* maintaining parent-child relationships, as well as to define static tree-view structure without a corresponding data model.
|
|
51
|
+
* Its primary purpose is to allow end-users to visualize and navigate within hierarchical data structures.
|
|
52
|
+
* The Ignite UI for Angular Tree Component also provides load on demand capabilities, item activation,
|
|
53
|
+
* bi-state and cascading selection of items through built-in checkboxes, built-in keyboard navigation and more.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```html
|
|
57
|
+
* <igx-tree>
|
|
58
|
+
* <igx-tree-node>
|
|
59
|
+
* I am a parent node 1
|
|
60
|
+
* <igx-tree-node>
|
|
61
|
+
* I am a child node 1
|
|
62
|
+
* </igx-tree-node>
|
|
63
|
+
* ...
|
|
64
|
+
* </igx-tree-node>
|
|
65
|
+
* ...
|
|
66
|
+
* </igx-tree>
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
40
69
|
export class IgxTreeComponent extends DisplayDensityBase {
|
|
41
70
|
constructor(navService, selectionService, treeService, element, _displayDensityOptions) {
|
|
42
71
|
super(_displayDensityOptions);
|
|
@@ -478,4 +507,4 @@ IgxTreeModule.decorators = [
|
|
|
478
507
|
]
|
|
479
508
|
},] }
|
|
480
509
|
];
|
|
481
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvdHJlZS90cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNILFNBQVMsRUFBYSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUMxRSxRQUFRLEVBQUUsV0FBVyxFQUF5QixlQUFlLEVBQWEsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUN0SCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0sd0JBQXdCLENBQUM7QUFDekcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFDSCxrQkFBa0IsRUFBRSxvQkFBb0IsRUFFM0MsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxF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LGdCQUFnQjt3QkFVNUIsS0FBSztpQ0F3QkwsS0FBSztnQ0FtQkwsS0FBSzs0QkFzQkwsTUFBTTs0QkFtQk4sTUFBTTsyQkFpQk4sTUFBTTs2QkFtQk4sTUFBTTs0QkFpQk4sTUFBTTtnQ0FXTixNQUFNOzhCQWFOLFlBQVksU0FBQywrQkFBK0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7b0JBSW5FLGVBQWUsU0FBQyxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7O0FBd1BoRTs7OztHQUlHO0FBNkJILE1BQU0sT0FBTyxhQUFhOzs7WUE1QnpCLFFBQVEsU0FBQztnQkFDTixZQUFZLEVBQUU7b0JBQ1YsNEJBQTRCO29CQUM1QiwrQkFBK0I7b0JBQy9CLHdCQUF3QjtvQkFDeEIsZ0JBQWdCO29CQUNoQixvQkFBb0I7aUJBQ3ZCO2dCQUNELE9BQU8sRUFBRTtvQkFDTCxZQUFZO29CQUNaLFdBQVc7b0JBQ1gsYUFBYTtvQkFDYixtQkFBbUI7b0JBQ25CLGlCQUFpQjtvQkFDakIsb0JBQW9CO2lCQUN2QjtnQkFDRCxPQUFPLEVBQUU7b0JBQ0wsNEJBQTRCO29CQUM1QiwrQkFBK0I7b0JBQy9CLHdCQUF3QjtvQkFDeEIsZ0JBQWdCO29CQUNoQixvQkFBb0I7b0JBQ3BCLGFBQWE7b0JBQ2IsbUJBQW1CO29CQUNuQixpQkFBaUI7b0JBQ2pCLHVCQUF1QjtpQkFDMUI7YUFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCwgUXVlcnlMaXN0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENvbnRlbnRDaGlsZCwgRGlyZWN0aXZlLFxuICAgIE5nTW9kdWxlLCBUZW1wbGF0ZVJlZiwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb250ZW50Q2hpbGRyZW4sIE9uRGVzdHJveSwgSG9zdEJpbmRpbmcsIEVsZW1lbnRSZWYsIE9wdGlvbmFsLCBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGdyb3dWZXJJbiwgZ3Jvd1Zlck91dCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvZ3Jvdyc7XG5pbXBvcnQgeyBJZ3hDaGVja2JveE1vZHVsZSB9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eUJhc2UsIERpc3BsYXlEZW5zaXR5VG9rZW4sIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMgfSBmcm9tICcuLi9jb3JlL2Rpc3BsYXlEZW5zaXR5JztcbmltcG9ydCB7IElneEV4cGFuc2lvblBhbmVsTW9kdWxlIH0gZnJvbSAnLi4vZXhwYW5zaW9uLXBhbmVsL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgVG9nZ2xlQW5pbWF0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi9leHBhbnNpb24tcGFuZWwvdG9nZ2xlLWFuaW1hdGlvbi1jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwTW9kdWxlIH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJy4uL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIElHWF9UUkVFX0NPTVBPTkVOVCwgSWd4VHJlZVNlbGVjdGlvblR5cGUsIElneFRyZWUsIElUcmVlTm9kZVRvZ2dsZWRFdmVudEFyZ3MsXG4gICAgSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MsIElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50LCBJZ3hUcmVlTm9kZSwgSWd4VHJlZVNlYXJjaFJlc29sdmVyXG59IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vdHJlZS1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZU5vZGVDb21wb25lbnQsIElneFRyZWVOb2RlTGlua0RpcmVjdGl2ZSB9IGZyb20gJy4vdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4VHJlZVNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3RyZWUtc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUuc2VydmljZSc7XG5cbi8qKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqIFVzZWQgZm9yIHRlbXBsYXRpbmcgdGhlIHNlbGVjdCBtYXJrZXIgb2YgdGhlIHRyZWVcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4VHJlZVNlbGVjdE1hcmtlcl0nXG59KVxuZXhwb3J0IGNsYXNzIElneFRyZWVTZWxlY3RNYXJrZXJEaXJlY3RpdmUge1xufVxuXG4vKipcbiAqIEBoaWRkZW4gQGludGVybmFsXG4gKiBVc2VkIGZvciB0ZW1wbGF0aW5nIHRoZSBleHBhbmQgaW5kaWNhdG9yIG9mIHRoZSB0cmVlXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneFRyZWVFeHBhbmRJbmRpY2F0b3JdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlRXhwYW5kSW5kaWNhdG9yRGlyZWN0aXZlIHtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICd0cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgSWd4VHJlZVNlcnZpY2UsXG4gICAgICAgIElneFRyZWVTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBJZ3hUcmVlTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX1RSRUVfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogSWd4VHJlZUNvbXBvbmVudCB9LFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZUNvbXBvbmVudCBleHRlbmRzIERpc3BsYXlEZW5zaXR5QmFzZSBpbXBsZW1lbnRzIElneFRyZWUsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXRyZWUnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtdHJlZSc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdHJlZSBzZWxlY3Rpb24gbW9kZVxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBCeSBkZWZhdWx0IHRoZSB0cmVlIHNlbGVjdGlvbiBtb2RlIGlzICdOb25lJ1xuICAgICAqIEBwYXJhbSBzZWxlY3Rpb25Nb2RlOiBJZ3hUcmVlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uTW9kZTogSWd4VHJlZVNlbGVjdGlvblR5cGUpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gc2VsZWN0aW9uTW9kZTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmNsZWFyTm9kZXNTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICAvKiogR2V0L1NldCBob3cgdGhlIHRyZWUgc2hvdWxkIGhhbmRsZSBicmFuY2ggZXhwYW5zaW9uLlxuICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIG9ubHkgYSBzaW5nbGUgYnJhbmNoIGNhbiBiZSBleHBhbmRlZCBhdCBhIHRpbWUsIGNvbGxhcHNpbmcgYWxsIG90aGVyc1xuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZSBbc2luZ2xlQnJhbmNoRXhwYW5kXT1cInRydWVcIj5cbiAgICAgKiAuLi5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHRyZWU6IElneFRyZWUgPSB0aGlzLnRyZWU7XG4gICAgICogdGhpcy50cmVlLnNpbmdsZUJyYW5jaEV4cGFuZCA9IGZhbHNlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNpbmdsZUJyYW5jaEV4cGFuZCA9IGZhbHNlO1xuXG4gICAgLyoqIEdldC9TZXQgdGhlIGFuaW1hdGlvbiBzZXR0aW5ncyB0aGF0IGJyYW5jaGVzIHNob3VsZCB1c2Ugd2hlbiBleHBhbmRpbmcvY29sbHBhc2luZy5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWUgW2FuaW1hdGlvblNldHRpbmdzXT1cImN1c3RvbUFuaW1hdGlvblNldHRpbmdzXCI+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBhbmltYXRpb25TZXR0aW5nczogVG9nZ2xlQW5pbWF0aW9uU2V0dGluZ3MgPSB7XG4gICAgICogICAgICBvcGVuQW5pbWF0aW9uOiBncm93VmVySW4sXG4gICAgICogICAgICBjbG9zZUFuaW1hdGlvbjogZ3Jvd1Zlck91dFxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB0aGlzLnRyZWUuYW5pbWF0aW9uU2V0dGluZ3MgPSBhbmltYXRpb25TZXR0aW5ncztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbmltYXRpb25TZXR0aW5nczogVG9nZ2xlQW5pbWF0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIG9wZW5BbmltYXRpb246IGdyb3dWZXJJbixcbiAgICAgICAgY2xvc2VBbmltYXRpb246IGdyb3dWZXJPdXRcbiAgICB9O1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgbm9kZSBzZWxlY3Rpb24gaXMgY2hhbmdlZCB0aHJvdWdoIGludGVyYWN0aW9uXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlIChub2RlU2VsZWN0aW9uKT1cImhhbmRsZU5vZGVTZWxlY3Rpb24oJGV2ZW50KVwiPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKmBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgaGFuZGxlTm9kZVNlbGVjdGlvbihldmVudDogSVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQpIHtcbiAgICAgKiAgY29uc3QgbmV3U2VsZWN0aW9uOiBJZ3hUcmVlTm9kZTxhbnk+W10gPSBldmVudC5uZXdTZWxlY3Rpb247XG4gICAgICogIGNvbnN0IGFkZGVkOiBJZ3hUcmVlTm9kZTxhbnk+W10gPSBldmVudC5hZGRlZDtcbiAgICAgKiAgY29uc29sZS5sb2coXCJOZXcgc2VsZWN0aW9uIHdpbGwgYmU6IFwiLCBuZXdTZWxlY3Rpb24pO1xuICAgICAqICBjb25zb2xlLmxvZyhcIkFkZGVkIG5vZGVzOiBcIiwgZXZlbnQuYWRkZWQpO1xuICAgICAqIH1cbiAgICAgKmBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBub2RlU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxJVHJlZU5vZGVTZWxlY3Rpb25FdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBub2RlIGlzIGV4cGFuZGluZywgYmVmb3JlIGl0IGZpbmlzaGVzXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlIChub2RlRXhwYW5kaW5nKT1cImhhbmRsZU5vZGVFeHBhbmRpbmcoJGV2ZW50KVwiPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKmBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgaGFuZGxlTm9kZUV4cGFuZGluZyhldmVudDogSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MpIHtcbiAgICAgKiAgY29uc3QgZXhwYW5kZWROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gZXZlbnQubm9kZTtcbiAgICAgKiAgaWYgKGV4cGFuZGVkTm9kZS5kaXNhYmxlZCkge1xuICAgICAqICAgICAgZXZlbnQuY2FuY2VsID0gdHJ1ZTtcbiAgICAgKiAgfVxuICAgICAqIH1cbiAgICAgKmBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBub2RlRXhwYW5kaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBub2RlIGlzIGV4cGFuZGVkLCBhZnRlciBpdCBmaW5pc2hlc1xuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZSAobm9kZUV4cGFuZGVkKT1cImhhbmRsZU5vZGVFeHBhbmRlZCgkZXZlbnQpXCI+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBoYW5kbGVOb2RlRXhwYW5kZWQoZXZlbnQ6IElUcmVlTm9kZVRvZ2dsZWRFdmVudEFyZ3MpIHtcbiAgICAgKiAgY29uc3QgZXhwYW5kZWROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gZXZlbnQubm9kZTtcbiAgICAgKiAgY29uc29sZS5sb2coXCJOb2RlIGlzIGV4cGFuZGVkOiBcIiwgZXhwYW5kZWROb2RlLmRhdGEpO1xuICAgICAqIH1cbiAgICAgKmBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBub2RlRXhwYW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElUcmVlTm9kZVRvZ2dsZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzaW5nLCBiZWZvcmUgaXQgZmluaXNoZXNcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWUgKG5vZGVDb2xsYXBzaW5nKT1cImhhbmRsZU5vZGVDb2xsYXBzaW5nKCRldmVudClcIj5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICpgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGhhbmRsZU5vZGVDb2xsYXBzaW5nKGV2ZW50OiBJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJncykge1xuICAgICAqICBjb25zdCBjb2xsYXBzZWROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gZXZlbnQubm9kZTtcbiAgICAgKiAgaWYgKGNvbGxhcHNlZE5vZGUuYWx3YXlzT3Blbikge1xuICAgICAqICAgICAgZXZlbnQuY2FuY2VsID0gdHJ1ZTtcbiAgICAgKiAgfVxuICAgICAqIH1cbiAgICAgKmBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBub2RlQ29sbGFwc2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQsIGFmdGVyIGl0IGZpbmlzaGVzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWUgKG5vZGVDb2xsYXBzZWQpPVwiaGFuZGxlTm9kZUNvbGxhcHNlZCgkZXZlbnQpXCI+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGhhbmRsZU5vZGVDb2xsYXBzZWQoZXZlbnQ6IElUcmVlTm9kZVRvZ2dsZWRFdmVudEFyZ3MpIHtcbiAgICAgKiAgY29uc3QgY29sbGFwc2VkTm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IGV2ZW50Lm5vZGU7XG4gICAgICogIGNvbnNvbGUubG9nKFwiTm9kZSBpcyBjb2xsYXBzZWQ6IFwiLCBjb2xsYXBzZWROb2RlLmRhdGEpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbm9kZUNvbGxhcHNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVRyZWVOb2RlVG9nZ2xlZEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgYWN0aXZlIG5vZGUgaXMgY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgXG4gICAgICogPGlneC10cmVlIChhY3RpdmVOb2RlQ2hhbmdlZCk9XCJhY3RpdmVOb2RlQ2hhbmdlZCgkZXZlbnQpXCI+PC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWN0aXZlTm9kZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElneFRyZWVOb2RlPGFueT4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBIGN1c3RvbSB0ZW1wbGF0ZSB0byBiZSB1c2VkIGZvciB0aGUgZXhwYW5kIGluZGljYXRvciBvZiBub2Rlc1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogIDxuZy10ZW1wbGF0ZSBpZ3hUcmVlRXhwYW5kSW5kaWNhdG9yIGxldC1leHBhbmRlZD5cbiAgICAgKiAgICAgIDxpZ3gtaWNvbj57eyBleHBhbmRlZCA/IFwiY2xvc2VfZnVsbHNjcmVlblwiOiBcIm9wZW5faW5fZnVsbFwifX08L2lneC1pY29uPlxuICAgICAqICA8L25nLXRlbXBsYXRlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hUcmVlRXhwYW5kSW5kaWNhdG9yRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIGV4cGFuZEluZGljYXRvcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4VHJlZU5vZGVDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgbm9kZXM6IFF1ZXJ5TGlzdDxJZ3hUcmVlTm9kZUNvbXBvbmVudDxhbnk+PjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBkaXNhYmxlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4VHJlZU5vZGU8YW55Pj4oKTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsICoqcm9vdCBsZXZlbCoqIG5vZGVzXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgdHJlZTogSWd4VHJlZSA9IHRoaXMudHJlZTtcbiAgICAgKiBjb25zdCByb290Tm9kZXM6IElneFRyZWVOb2RlQ29tcG9uZW50PGFueT5bXSA9IHRyZWUucm9vdE5vZGVzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcm9vdE5vZGVzKCk6IElneFRyZWVOb2RlQ29tcG9uZW50PGFueT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzPy5maWx0ZXIobm9kZSA9PiBub2RlLmxldmVsID09PSAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGFjdGl2ZSBub2RlIGlzIHNldCB0aHJvdWdoIEFQSVxuICAgICAqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZlTm9kZUJpbmRpbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElneFRyZWVOb2RlPGFueT4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZm9yY2VTZWxlY3QgPSBbXTtcblxuICAgIHByaXZhdGUgX3NlbGVjdGlvbjogSWd4VHJlZVNlbGVjdGlvblR5cGUgPSBJZ3hUcmVlU2VsZWN0aW9uVHlwZS5Ob25lO1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgdW5zdWJDaGlsZHJlbiQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbmF2U2VydmljZTogSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlbGVjdGlvblNlcnZpY2U6IElneFRyZWVTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyZWVTZXJ2aWNlOiBJZ3hUcmVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucz86IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5yZWdpc3Rlcih0aGlzKTtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5yZWdpc3Rlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgYWxsIG9mIHRoZSBwYXNzZWQgbm9kZXMuXG4gICAgICogSWYgbm8gbm9kZXMgYXJlIHBhc3NlZCwgZXhwYW5kcyBBTEwgbm9kZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlcyBub2RlcyB0byBiZSBleHBhbmRlZFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHRhcmdldE5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2Rlcyh0cnVlLCAoX2RhdGE6IGFueSwgbm9kZTogSWd4VHJlZU5vZGU8YW55PikgPT4gbm9kZS5kYXRhLmV4cGFuZGFibGUpO1xuICAgICAqIHRyZWUuZXhwYW5kQWxsKG5vZGVzKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5kQWxsKG5vZGVzPzogSWd4VHJlZU5vZGU8YW55PltdKSB7XG4gICAgICAgIG5vZGVzID0gbm9kZXMgfHwgdGhpcy5ub2Rlcy50b0FycmF5KCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2goZSA9PiBlLmV4cGFuZGVkID0gdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIGFsbCBvZiB0aGUgcGFzc2VkIG5vZGVzLlxuICAgICAqIElmIG5vIG5vZGVzIGFyZSBwYXNzZWQsIGNvbGxhcHNlcyBBTEwgbm9kZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlcyBub2RlcyB0byBiZSBjb2xsYXBzZWRcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCB0YXJnZXROb2RlczogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXModHJ1ZSwgKF9kYXRhOiBhbnksIG5vZGU6IElneFRyZWVOb2RlPGFueT4pID0+IG5vZGUuZGF0YS5jb2xsYXBzaWJsZSk7XG4gICAgICogdHJlZS5jb2xsYXBzZUFsbChub2Rlcyk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbGxhcHNlQWxsKG5vZGVzPzogSWd4VHJlZU5vZGU8YW55PltdKSB7XG4gICAgICAgIG5vZGVzID0gbm9kZXMgfHwgdGhpcy5ub2Rlcy50b0FycmF5KCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2goZSA9PiBlLmV4cGFuZGVkID0gZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0IGFsbCBub2RlcyBpZiB0aGUgbm9kZXMgY29sbGVjdGlvbiBpcyBlbXB0eS4gT3RoZXJ3aXNlLCBkZXNlbGVjdCB0aGUgbm9kZXMgaW4gdGhlIG5vZGVzIGNvbGxlY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgYXJyID0gW1xuICAgICAqICAgICAgdGhpcy50cmVlLm5vZGVzLnRvQXJyYXkoKVswXSxcbiAgICAgKiAgICAgIHRoaXMudHJlZS5ub2Rlcy50b0FycmF5KClbMV1cbiAgICAgKiAgXTtcbiAgICAgKiAgdGhpcy50cmVlLmRlc2VsZWN0QWxsKGFycik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIG5vZGVzOiBJZ3hUcmVlTm9kZUNvbXBvbmVudDxhbnk+W11cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RBbGwobm9kZXM/OiBJZ3hUcmVlTm9kZUNvbXBvbmVudDxhbnk+W10pIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbGwgb2YgdGhlIG5vZGVzIHRoYXQgbWF0Y2ggdGhlIHBhc3NlZCBzZWFyY2hUZXJtLlxuICAgICAqIEFjY2VwdHMgYSBjdXN0b20gY29tcGFyZXIgZnVuY3Rpb24gZm9yIGV2YWx1YXRpbmcgdGhlIHNlYXJjaCB0ZXJtIGFnYWluc3QgdGhlIG5vZGVzLlxuICAgICAqXG4gICAgICogQHJlbWFya1xuICAgICAqIERlZmF1bHQgc2VhcmNoIGNvbXBhcmVzIHRoZSBwYXNzZWQgYHNlYXJjaFRlcm1gIGFnYWluc3QgdGhlIG5vZGUncyBgZGF0YWAgSW5wdXQuXG4gICAgICogV2hlbiB1c2luZyBgZmluZE5vZGVzYCB3L28gYSBgY29tcGFyZXJgLCBtYWtlIHN1cmUgYWxsIG5vZGVzIGhhdmUgYGRhdGFgIHBhc3NlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWFyY2hUZXJtIFRoZSBkYXRhIG9mIHRoZSBzZWFyY2hlZCBub2RlXG4gICAgICogQHBhcmFtIGNvbXBhcmVyIEEgY3VzdG9tIGNvbXBhcmVyIGZ1bmN0aW9uIHRoYXQgZXZhbHVhdGVzIHRoZSBwYXNzZWQgYHNlYXJjaFRlcm1gIGFnYWluc3QgYWxsIG5vZGVzLlxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIG5vZGVzIHRoYXQgbWF0Y2ggdGhlIHNlYXJjaC4gYG51bGxgIGlmIG5vIG5vZGVzIGFyZSBmb3VuZC5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgIDxpZ3gtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCI+XG4gICAgICogICAgICAgICAge3sgbm9kZS5sYWJlbCB9fVxuICAgICAqICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgZGF0YTogRGF0YUVudHJ5W10gPSBGRVRDSEVEX0RBVEE7XG4gICAgICogLi4uXG4gICAgICogY29uc3QgbWF0Y2hlZE5vZGVzOiBJZ3hUcmVlTm9kZTxEYXRhRW50cnk+W10gPSB0aGlzLnRyZWUuZmluZE5vZGVzPERhdGFFbnRyeT4oc2VhcmNoVGVybTogZGF0YVs1XSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBVc2luZyBhIGN1c3RvbSBjb21wYXJlclxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgZGF0YTogRGF0YUVudHJ5W10gPSBGRVRDSEVEX0RBVEE7XG4gICAgICogLi4uXG4gICAgICogY29uc3QgY29tcGFyZXI6IElneFRyZWVTZWFyY2hSZXNvbHZlciA9IChkYXRhOiBhbnksIG5vZGU6IElneFRyZWVOb2RlPERhdGFFbnRyeT4pIHtcbiAgICAgKiAgICAgIHJldHVybiBub2RlLmRhdGEuaW5kZXggJSAyID09PSAwO1xuICAgICAqIH1cbiAgICAgKiBjb25zdCBldmVuSW5kZXhOb2RlczogSWd4VHJlZU5vZGU8RGF0YUVudHJ5PltdID0gdGhpcy50cmVlLmZpbmROb2RlczxEYXRhRW50cnk+KG51bGwsIGNvbXBhcmVyKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZmluZE5vZGVzKHNlYXJjaFRlcm06IGFueSwgY29tcGFyZXI/OiBJZ3hUcmVlU2VhcmNoUmVzb2x2ZXIpOiBJZ3hUcmVlTm9kZUNvbXBvbmVudDxhbnk+W10gfCBudWxsIHtcbiAgICAgICAgY29uc3QgY29tcGFyZUZ1bmMgPSBjb21wYXJlciB8fCB0aGlzLl9jb21wYXJlcjtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMubm9kZXMuZmlsdGVyKG5vZGUgPT4gY29tcGFyZUZ1bmMoc2VhcmNoVGVybSwgbm9kZSkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cz8ubGVuZ3RoID09PSAwID8gbnVsbCA6IHJlc3VsdHM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmhhbmRsZUtleWRvd24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UudXBkYXRlX2Rpc2FibGVkX2NhY2hlKGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlQmluZGluZ0NoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChub2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZFRvTm9kZSh0aGlzLm5hdlNlcnZpY2UuYWN0aXZlTm9kZSk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbE5vZGVJbnRvVmlldyhub2RlPy5oZWFkZXI/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbkRlbnNpdHlDaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbE5vZGVJbnRvVmlldyh0aGlzLm5hdlNlcnZpY2UuYWN0aXZlTm9kZT8uaGVhZGVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YlRvQ29sbGFwc2luZygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMubm9kZXMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3ViVG9DaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNjcm9sbE5vZGVJbnRvVmlldyh0aGlzLm5hdlNlcnZpY2UuYWN0aXZlTm9kZT8uaGVhZGVyPy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5zdWJUb0NoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJDaGlsZHJlbiQubmV4dCgpO1xuICAgICAgICB0aGlzLnVuc3ViQ2hpbGRyZW4kLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRUb05vZGUobm9kZTogSWd4VHJlZU5vZGU8YW55Pikge1xuICAgICAgICBpZiAobm9kZSAmJiBub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIG5vZGUucGF0aC5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuICE9PSBub2RlICYmICFuLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG4uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJUb0NvbGxhcHNpbmcoKSB7XG4gICAgICAgIHRoaXMubm9kZUNvbGxhcHNpbmcucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLnVwZGF0ZV92aXNpYmxlX2NhY2hlKGV2ZW50Lm5vZGUsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubm9kZUV4cGFuZGluZy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UudXBkYXRlX3Zpc2libGVfY2FjaGUoZXZlbnQubm9kZSwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3ViVG9DaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLnVuc3ViQ2hpbGRyZW4kLm5leHQoKTtcbiAgICAgICAgY29uc3QgdG9CZVNlbGVjdGVkID0gWy4uLnRoaXMuZm9yY2VTZWxlY3RdO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE5vZGVzV2l0aE5vRXZlbnQodG9CZVNlbGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9yY2VTZWxlY3QgPSBbXTtcbiAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgbm9kZS5leHBhbmRlZENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3ViQ2hpbGRyZW4kKSkuc3Vic2NyaWJlKG5vZGVTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLnVwZGF0ZV92aXNpYmxlX2NhY2hlKG5vZGUsIG5vZGVTdGF0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGUuY2xvc2VBbmltYXRpb25Eb25lLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJDaGlsZHJlbiQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGU/LmhlYWRlci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsTm9kZUludG9WaWV3KHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBub2RlLm9wZW5BbmltYXRpb25Eb25lLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJDaGlsZHJlbiQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGU/LmhlYWRlci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsTm9kZUludG9WaWV3KHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hdlNlcnZpY2UuaW5pdF9pbnZpc2libGVfY2FjaGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbE5vZGVJbnRvVmlldyhlbDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCFlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vZGVSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRyZWVSZWN0ID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0b3BPZmZzZXQgPSB0cmVlUmVjdC50b3AgPiBub2RlUmVjdC50b3AgPyBub2RlUmVjdC50b3AgLSB0cmVlUmVjdC50b3AgOiAwO1xuICAgICAgICBjb25zdCBib3R0b21PZmZzZXQgPSB0cmVlUmVjdC5ib3R0b20gPCBub2RlUmVjdC5ib3R0b20gPyBub2RlUmVjdC5ib3R0b20gLSB0cmVlUmVjdC5ib3R0b20gOiAwO1xuICAgICAgICBjb25zdCBzaG91bGRTY3JvbGwgPSAhIXRvcE9mZnNldCB8fCAhIWJvdHRvbU9mZnNldDtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCAmJiB0aGlzLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gdGhpcy5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgLy8gdGhpcy5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IG5vZGVSZWN0LnkgLSB0cmVlUmVjdC55IC0gbm9kZVJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICsgYm90dG9tT2Zmc2V0ICsgdG9wT2Zmc2V0ICsgKHRvcE9mZnNldCA/IC0xIDogKzEpICogbm9kZVJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29tcGFyZXIgPSA8VD4oZGF0YTogVCwgbm9kZTogSWd4VHJlZU5vZGVDb21wb25lbnQ8VD4pID0+IG5vZGUuZGF0YSA9PT0gZGF0YTtcblxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBOZ01vZHVsZSBkZWZpbmluZyB0aGUgY29tcG9uZW50cyBhbmQgZGlyZWN0aXZlcyBuZWVkZWQgZm9yIGBpZ3gtdHJlZWBcbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgSWd4VHJlZVNlbGVjdE1hcmtlckRpcmVjdGl2ZSxcbiAgICAgICAgSWd4VHJlZUV4cGFuZEluZGljYXRvckRpcmVjdGl2ZSxcbiAgICAgICAgSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlLFxuICAgICAgICBJZ3hUcmVlQ29tcG9uZW50LFxuICAgICAgICBJZ3hUcmVlTm9kZUNvbXBvbmVudFxuICAgIF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBJZ3hJY29uTW9kdWxlLFxuICAgICAgICBJZ3hJbnB1dEdyb3VwTW9kdWxlLFxuICAgICAgICBJZ3hDaGVja2JveE1vZHVsZSxcbiAgICAgICAgSWd4UHJvZ3Jlc3NCYXJNb2R1bGVcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgSWd4VHJlZVNlbGVjdE1hcmtlckRpcmVjdGl2ZSxcbiAgICAgICAgSWd4VHJlZUV4cGFuZEluZGljYXRvckRpcmVjdGl2ZSxcbiAgICAgICAgSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlLFxuICAgICAgICBJZ3hUcmVlQ29tcG9uZW50LFxuICAgICAgICBJZ3hUcmVlTm9kZUNvbXBvbmVudCxcbiAgICAgICAgSWd4SWNvbk1vZHVsZSxcbiAgICAgICAgSWd4SW5wdXRHcm91cE1vZHVsZSxcbiAgICAgICAgSWd4Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIElneEV4cGFuc2lvblBhbmVsTW9kdWxlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlTW9kdWxlIHtcbn1cbiJdfQ==
|
|
510
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvdHJlZS90cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNILFNBQVMsRUFBYSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUMxRSxRQUFRLEVBQUUsV0FBVyxFQUF5QixlQUFlLEVBQWEsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUN0SCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0sd0JBQXdCLENBQUM7QUFDekcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFDSCxrQkFBa0IsRUFBRSxvQkFBb0IsRUFFM0MsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxF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SSxNQUFNLFNBQUMsbUJBQW1COzs7dUJBcE4xQyxXQUFXLFNBQUMsZ0JBQWdCO3dCQVU1QixLQUFLO2lDQXdCTCxLQUFLO2dDQW1CTCxLQUFLOzRCQXNCTCxNQUFNOzRCQW1CTixNQUFNOzJCQWlCTixNQUFNOzZCQW1CTixNQUFNOzRCQWlCTixNQUFNO2dDQVdOLE1BQU07OEJBYU4sWUFBWSxTQUFDLCtCQUErQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtvQkFJbkUsZUFBZSxTQUFDLG9CQUFvQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTs7QUF3UGhFOzs7O0dBSUc7QUE2QkgsTUFBTSxPQUFPLGFBQWE7OztZQTVCekIsUUFBUSxTQUFDO2dCQUNOLFlBQVksRUFBRTtvQkFDViw0QkFBNEI7b0JBQzVCLCtCQUErQjtvQkFDL0Isd0JBQXdCO29CQUN4QixnQkFBZ0I7b0JBQ2hCLG9CQUFvQjtpQkFDdkI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNMLFlBQVk7b0JBQ1osV0FBVztvQkFDWCxhQUFhO29CQUNiLG1CQUFtQjtvQkFDbkIsaUJBQWlCO29CQUNqQixvQkFBb0I7aUJBQ3ZCO2dCQUNELE9BQU8sRUFBRTtvQkFDTCw0QkFBNEI7b0JBQzVCLCtCQUErQjtvQkFDL0Isd0JBQXdCO29CQUN4QixnQkFBZ0I7b0JBQ2hCLG9CQUFvQjtvQkFDcEIsYUFBYTtvQkFDYixtQkFBbUI7b0JBQ25CLGlCQUFpQjtvQkFDakIsdUJBQXVCO2lCQUMxQjthQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LCBRdWVyeUxpc3QsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ29udGVudENoaWxkLCBEaXJlY3RpdmUsXG4gICAgTmdNb2R1bGUsIFRlbXBsYXRlUmVmLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIENvbnRlbnRDaGlsZHJlbiwgT25EZXN0cm95LCBIb3N0QmluZGluZywgRWxlbWVudFJlZiwgT3B0aW9uYWwsIEluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZ3Jvd1ZlckluLCBncm93VmVyT3V0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9ncm93JztcbmltcG9ydCB7IElneENoZWNrYm94TW9kdWxlIH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5QmFzZSwgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGlzcGxheURlbnNpdHknO1xuaW1wb3J0IHsgSWd4RXhwYW5zaW9uUGFuZWxNb2R1bGUgfSBmcm9tICcuLi9leHBhbnNpb24tcGFuZWwvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB9IGZyb20gJy4uL2V4cGFuc2lvbi1wYW5lbC90b2dnbGUtYW5pbWF0aW9uLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hJY29uTW9kdWxlIH0gZnJvbSAnLi4vaWNvbi9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICcuLi9pbnB1dC1ncm91cC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnLi4vcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgSUdYX1RSRUVfQ09NUE9ORU5ULCBJZ3hUcmVlU2VsZWN0aW9uVHlwZSwgSWd4VHJlZSwgSVRyZWVOb2RlVG9nZ2xlZEV2ZW50QXJncyxcbiAgICBJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJncywgSVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQsIElneFRyZWVOb2RlLCBJZ3hUcmVlU2VhcmNoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi90cmVlLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hUcmVlTm9kZUNvbXBvbmVudCwgSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlIH0gZnJvbSAnLi90cmVlLW5vZGUvdHJlZS1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vdHJlZS1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICogVXNlZCBmb3IgdGVtcGxhdGluZyB0aGUgc2VsZWN0IG1hcmtlciBvZiB0aGUgdHJlZVxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hUcmVlU2VsZWN0TWFya2VyXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZVNlbGVjdE1hcmtlckRpcmVjdGl2ZSB7XG59XG5cbi8qKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqIFVzZWQgZm9yIHRlbXBsYXRpbmcgdGhlIGV4cGFuZCBpbmRpY2F0b3Igb2YgdGhlIHRyZWVcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4VHJlZUV4cGFuZEluZGljYXRvcl0nXG59KVxuZXhwb3J0IGNsYXNzIElneFRyZWVFeHBhbmRJbmRpY2F0b3JEaXJlY3RpdmUge1xufVxuXG4vKipcbiAqIElneFRyZWVDb21wb25lbnQgYWxsb3dzIGEgZGV2ZWxvcGVyIHRvIHNob3cgYSBzZXQgb2Ygbm9kZXMgaW4gYSBoaWVyYXJjaGljYWwgZmFzaGlvbi5cbiAqXG4gKiBAaWd4TW9kdWxlIElneFRyZWVNb2R1bGVcbiAqIEBpZ3hLZXl3b3JkcyB0cmVlXG4gKiBAaWd4VGhlbWUgaWd4LXRyZWUtdGhlbWVcbiAqIEBpZ3hHcm91cCBHcmlkcyAmIExpc3RzXG4gKlxuICogQHJlbWFya1xuICogVGhlIEFuZ3VsYXIgVHJlZSBDb21wb25lbnQgYWxsb3dzIHVzZXJzIHRvIHJlcHJlc2VudCBoaWVyYXJjaGljYWwgZGF0YSBpbiBhIHRyZWUtdmlldyBzdHJ1Y3R1cmUsXG4gKiBtYWludGFpbmluZyBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcywgYXMgd2VsbCBhcyB0byBkZWZpbmUgc3RhdGljIHRyZWUtdmlldyBzdHJ1Y3R1cmUgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgZGF0YSBtb2RlbC5cbiAqIEl0cyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gYWxsb3cgZW5kLXVzZXJzIHRvIHZpc3VhbGl6ZSBhbmQgbmF2aWdhdGUgd2l0aGluIGhpZXJhcmNoaWNhbCBkYXRhIHN0cnVjdHVyZXMuXG4gKiBUaGUgSWduaXRlIFVJIGZvciBBbmd1bGFyIFRyZWUgQ29tcG9uZW50IGFsc28gcHJvdmlkZXMgbG9hZCBvbiBkZW1hbmQgY2FwYWJpbGl0aWVzLCBpdGVtIGFjdGl2YXRpb24sXG4gKiBiaS1zdGF0ZSBhbmQgY2FzY2FkaW5nIHNlbGVjdGlvbiBvZiBpdGVtcyB0aHJvdWdoIGJ1aWx0LWluIGNoZWNrYm94ZXMsIGJ1aWx0LWluIGtleWJvYXJkIG5hdmlnYXRpb24gYW5kIG1vcmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtdHJlZT5cbiAqICAgPGlneC10cmVlLW5vZGU+XG4gKiAgICAgIEkgYW0gYSBwYXJlbnQgbm9kZSAxXG4gKiAgICAgIDxpZ3gtdHJlZS1ub2RlPlxuICogICAgICAgICAgSSBhbSBhIGNoaWxkIG5vZGUgMVxuICogICAgICA8L2lneC10cmVlLW5vZGU+XG4gKiAgICAgIC4uLlxuICogICA8L2lneC10cmVlLW5vZGU+XG4gKlx0IC4uLlxuICogPC9pZ3gtdHJlZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC10cmVlJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RyZWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBJZ3hUcmVlU2VydmljZSxcbiAgICAgICAgSWd4VHJlZVNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgeyBwcm92aWRlOiBJR1hfVFJFRV9DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBJZ3hUcmVlQ29tcG9uZW50IH0sXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlQ29tcG9uZW50IGV4dGVuZHMgRGlzcGxheURlbnNpdHlCYXNlIGltcGxlbWVudHMgSWd4VHJlZSwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdHJlZScpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC10cmVlJztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0cmVlIHNlbGVjdGlvbiBtb2RlXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEJ5IGRlZmF1bHQgdGhlIHRyZWUgc2VsZWN0aW9uIG1vZGUgaXMgJ05vbmUnXG4gICAgICogQHBhcmFtIHNlbGVjdGlvbk1vZGU6IElneFRyZWVTZWxlY3Rpb25UeXBlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGlvbihzZWxlY3Rpb25Nb2RlOiBJZ3hUcmVlU2VsZWN0aW9uVHlwZSkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb25Nb2RlO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuY2xlYXJOb2Rlc1NlbGVjdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBHZXQvU2V0IGhvdyB0aGUgdHJlZSBzaG91bGQgaGFuZGxlIGJyYW5jaCBleHBhbnNpb24uXG4gICAgICogSWYgc2V0IHRvIGB0cnVlYCwgb25seSBhIHNpbmdsZSBicmFuY2ggY2FuIGJlIGV4cGFuZGVkIGF0IGEgdGltZSwgY29sbGFwc2luZyBhbGwgb3RoZXJzXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlIFtzaW5nbGVCcmFuY2hFeHBhbmRdPVwidHJ1ZVwiPlxuICAgICAqIC4uLlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgdHJlZTogSWd4VHJlZSA9IHRoaXMudHJlZTtcbiAgICAgKiB0aGlzLnRyZWUuc2luZ2xlQnJhbmNoRXhwYW5kID0gZmFsc2U7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2luZ2xlQnJhbmNoRXhwYW5kID0gZmFsc2U7XG5cbiAgICAvKiogR2V0L1NldCB0aGUgYW5pbWF0aW9uIHNldHRpbmdzIHRoYXQgYnJhbmNoZXMgc2hvdWxkIHVzZSB3aGVuIGV4cGFuZGluZy9jb2xscGFzaW5nLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZSBbYW5pbWF0aW9uU2V0dGluZ3NdPVwiY3VzdG9tQW5pbWF0aW9uU2V0dGluZ3NcIj5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGFuaW1hdGlvblNldHRpbmdzOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyA9IHtcbiAgICAgKiAgICAgIG9wZW5BbmltYXRpb246IGdyb3dWZXJJbixcbiAgICAgKiAgICAgIGNsb3NlQW5pbWF0aW9uOiBncm93VmVyT3V0XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHRoaXMudHJlZS5hbmltYXRpb25TZXR0aW5ncyA9IGFuaW1hdGlvblNldHRpbmdzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFuaW1hdGlvblNldHRpbmdzOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgb3BlbkFuaW1hdGlvbjogZ3Jvd1ZlckluLFxuICAgICAgICBjbG9zZUFuaW1hdGlvbjogZ3Jvd1Zlck91dFxuICAgIH07XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBub2RlIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIHRocm91Z2ggaW50ZXJhY3Rpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWUgKG5vZGVTZWxlY3Rpb24pPVwiaGFuZGxlTm9kZVNlbGVjdGlvbigkZXZlbnQpXCI+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBoYW5kbGVOb2RlU2VsZWN0aW9uKGV2ZW50OiBJVHJlZU5vZGVTZWxlY3Rpb25FdmVudCkge1xuICAgICAqICBjb25zdCBuZXdTZWxlY3Rpb246IElneFRyZWVOb2RlPGFueT5bXSA9IGV2ZW50Lm5ld1NlbGVjdGlvbjtcbiAgICAgKiAgY29uc3QgYWRkZWQ6IElneFRyZWVOb2RlPGFueT5bXSA9IGV2ZW50LmFkZGVkO1xuICAgICAqICBjb25zb2xlLmxvZyhcIk5ldyBzZWxlY3Rpb24gd2lsbCBiZTogXCIsIG5ld1NlbGVjdGlvbik7XG4gICAgICogIGNvbnNvbGUubG9nKFwiQWRkZWQgbm9kZXM6IFwiLCBldmVudC5hZGRlZCk7XG4gICAgICogfVxuICAgICAqYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG5vZGVTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIG5vZGUgaXMgZXhwYW5kaW5nLCBiZWZvcmUgaXQgZmluaXNoZXNcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWUgKG5vZGVFeHBhbmRpbmcpPVwiaGFuZGxlTm9kZUV4cGFuZGluZygkZXZlbnQpXCI+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBoYW5kbGVOb2RlRXhwYW5kaW5nKGV2ZW50OiBJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJncykge1xuICAgICAqICBjb25zdCBleHBhbmRlZE5vZGU6IElneFRyZWVOb2RlPGFueT4gPSBldmVudC5ub2RlO1xuICAgICAqICBpZiAoZXhwYW5kZWROb2RlLmRpc2FibGVkKSB7XG4gICAgICogICAgICBldmVudC5jYW5jZWwgPSB0cnVlO1xuICAgICAqICB9XG4gICAgICogfVxuICAgICAqYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG5vZGVFeHBhbmRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElUcmVlTm9kZVRvZ2dsaW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQsIGFmdGVyIGl0IGZpbmlzaGVzXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlIChub2RlRXhwYW5kZWQpPVwiaGFuZGxlTm9kZUV4cGFuZGVkKCRldmVudClcIj5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICpgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGhhbmRsZU5vZGVFeHBhbmRlZChldmVudDogSVRyZWVOb2RlVG9nZ2xlZEV2ZW50QXJncykge1xuICAgICAqICBjb25zdCBleHBhbmRlZE5vZGU6IElneFRyZWVOb2RlPGFueT4gPSBldmVudC5ub2RlO1xuICAgICAqICBjb25zb2xlLmxvZyhcIk5vZGUgaXMgZXhwYW5kZWQ6IFwiLCBleHBhbmRlZE5vZGUuZGF0YSk7XG4gICAgICogfVxuICAgICAqYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG5vZGVFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVRyZWVOb2RlVG9nZ2xlZEV2ZW50QXJncz4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNpbmcsIGJlZm9yZSBpdCBmaW5pc2hlc1xuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZSAobm9kZUNvbGxhcHNpbmcpPVwiaGFuZGxlTm9kZUNvbGxhcHNpbmcoJGV2ZW50KVwiPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKmBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgaGFuZGxlTm9kZUNvbGxhcHNpbmcoZXZlbnQ6IElUcmVlTm9kZVRvZ2dsaW5nRXZlbnRBcmdzKSB7XG4gICAgICogIGNvbnN0IGNvbGxhcHNlZE5vZGU6IElneFRyZWVOb2RlPGFueT4gPSBldmVudC5ub2RlO1xuICAgICAqICBpZiAoY29sbGFwc2VkTm9kZS5hbHdheXNPcGVuKSB7XG4gICAgICogICAgICBldmVudC5jYW5jZWwgPSB0cnVlO1xuICAgICAqICB9XG4gICAgICogfVxuICAgICAqYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG5vZGVDb2xsYXBzaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZCwgYWZ0ZXIgaXQgZmluaXNoZXNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZSAobm9kZUNvbGxhcHNlZCk9XCJoYW5kbGVOb2RlQ29sbGFwc2VkKCRldmVudClcIj5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgaGFuZGxlTm9kZUNvbGxhcHNlZChldmVudDogSVRyZWVOb2RlVG9nZ2xlZEV2ZW50QXJncykge1xuICAgICAqICBjb25zdCBjb2xsYXBzZWROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gZXZlbnQubm9kZTtcbiAgICAgKiAgY29uc29sZS5sb2coXCJOb2RlIGlzIGNvbGxhcHNlZDogXCIsIGNvbGxhcHNlZE5vZGUuZGF0YSk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBub2RlQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJVHJlZU5vZGVUb2dnbGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBhY3RpdmUgbm9kZSBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBcbiAgICAgKiA8aWd4LXRyZWUgKGFjdGl2ZU5vZGVDaGFuZ2VkKT1cImFjdGl2ZU5vZGVDaGFuZ2VkKCRldmVudClcIj48L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBhY3RpdmVOb2RlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4VHJlZU5vZGU8YW55Pj4oKTtcblxuICAgIC8qKlxuICAgICAqIEEgY3VzdG9tIHRlbXBsYXRlIHRvIGJlIHVzZWQgZm9yIHRoZSBleHBhbmQgaW5kaWNhdG9yIG9mIG5vZGVzXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgPG5nLXRlbXBsYXRlIGlneFRyZWVFeHBhbmRJbmRpY2F0b3IgbGV0LWV4cGFuZGVkPlxuICAgICAqICAgICAgPGlneC1pY29uPnt7IGV4cGFuZGVkID8gXCJjbG9zZV9mdWxsc2NyZWVuXCI6IFwib3Blbl9pbl9mdWxsXCJ9fTwvaWd4LWljb24+XG4gICAgICogIDwvbmctdGVtcGxhdGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRyZWVFeHBhbmRJbmRpY2F0b3JEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgZXhwYW5kSW5kaWNhdG9yOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hUcmVlTm9kZUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHB1YmxpYyBub2RlczogUXVlcnlMaXN0PElneFRyZWVOb2RlQ29tcG9uZW50PGFueT4+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGRpc2FibGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hUcmVlTm9kZTxhbnk+PigpO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbGwgKipyb290IGxldmVsKiogbm9kZXNcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCB0cmVlOiBJZ3hUcmVlID0gdGhpcy50cmVlO1xuICAgICAqIGNvbnN0IHJvb3ROb2RlczogSWd4VHJlZU5vZGVDb21wb25lbnQ8YW55PltdID0gdHJlZS5yb290Tm9kZXM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCByb290Tm9kZXMoKTogSWd4VHJlZU5vZGVDb21wb25lbnQ8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXM/LmZpbHRlcihub2RlID0+IG5vZGUubGV2ZWwgPT09IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgYWN0aXZlIG5vZGUgaXMgc2V0IHRocm91Z2ggQVBJXG4gICAgICpcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmVOb2RlQmluZGluZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4VHJlZU5vZGU8YW55Pj4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBmb3JjZVNlbGVjdCA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uOiBJZ3hUcmVlU2VsZWN0aW9uVHlwZSA9IElneFRyZWVTZWxlY3Rpb25UeXBlLk5vbmU7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSB1bnN1YkNoaWxkcmVuJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBuYXZTZXJ2aWNlOiBJZ3hUcmVlTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2VsZWN0aW9uU2VydmljZTogSWd4VHJlZVNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJlZVNlcnZpY2U6IElneFRyZWVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIHByb3RlY3RlZCBfZGlzcGxheURlbnNpdHlPcHRpb25zPzogSURpc3BsYXlEZW5zaXR5T3B0aW9ucykge1xuICAgICAgICBzdXBlcihfZGlzcGxheURlbnNpdHlPcHRpb25zKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hdlNlcnZpY2UucmVnaXN0ZXIodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kcyBhbGwgb2YgdGhlIHBhc3NlZCBub2Rlcy5cbiAgICAgKiBJZiBubyBub2RlcyBhcmUgcGFzc2VkLCBleHBhbmRzIEFMTCBub2Rlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVzIG5vZGVzIHRvIGJlIGV4cGFuZGVkXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgdGFyZ2V0Tm9kZXM6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKHRydWUsIChfZGF0YTogYW55LCBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+KSA9PiBub2RlLmRhdGEuZXhwYW5kYWJsZSk7XG4gICAgICogdHJlZS5leHBhbmRBbGwobm9kZXMpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbmRBbGwobm9kZXM/OiBJZ3hUcmVlTm9kZTxhbnk+W10pIHtcbiAgICAgICAgbm9kZXMgPSBub2RlcyB8fCB0aGlzLm5vZGVzLnRvQXJyYXkoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChlID0+IGUuZXhwYW5kZWQgPSB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb2xsYXBzZXMgYWxsIG9mIHRoZSBwYXNzZWQgbm9kZXMuXG4gICAgICogSWYgbm8gbm9kZXMgYXJlIHBhc3NlZCwgY29sbGFwc2VzIEFMTCBub2Rlc1xuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVzIG5vZGVzIHRvIGJlIGNvbGxhcHNlZFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHRhcmdldE5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2Rlcyh0cnVlLCAoX2RhdGE6IGFueSwgbm9kZTogSWd4VHJlZU5vZGU8YW55PikgPT4gbm9kZS5kYXRhLmNvbGxhcHNpYmxlKTtcbiAgICAgKiB0cmVlLmNvbGxhcHNlQWxsKG5vZGVzKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY29sbGFwc2VBbGwobm9kZXM/OiBJZ3hUcmVlTm9kZTxhbnk+W10pIHtcbiAgICAgICAgbm9kZXMgPSBub2RlcyB8fCB0aGlzLm5vZGVzLnRvQXJyYXkoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChlID0+IGUuZXhwYW5kZWQgPSBmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZWxlY3QgYWxsIG5vZGVzIGlmIHRoZSBub2RlcyBjb2xsZWN0aW9uIGlzIGVtcHR5LiBPdGhlcndpc2UsIGRlc2VsZWN0IHRoZSBub2RlcyBpbiB0aGUgbm9kZXMgY29sbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBhcnIgPSBbXG4gICAgICogICAgICB0aGlzLnRyZWUubm9kZXMudG9BcnJheSgpWzBdLFxuICAgICAqICAgICAgdGhpcy50cmVlLm5vZGVzLnRvQXJyYXkoKVsxXVxuICAgICAqICBdO1xuICAgICAqICB0aGlzLnRyZWUuZGVzZWxlY3RBbGwoYXJyKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gbm9kZXM6IElneFRyZWVOb2RlQ29tcG9uZW50PGFueT5bXVxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdEFsbChub2Rlcz86IElneFRyZWVOb2RlQ29tcG9uZW50PGFueT5bXSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KG5vZGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCBvZiB0aGUgbm9kZXMgdGhhdCBtYXRjaCB0aGUgcGFzc2VkIHNlYXJjaFRlcm0uXG4gICAgICogQWNjZXB0cyBhIGN1c3RvbSBjb21wYXJlciBmdW5jdGlvbiBmb3IgZXZhbHVhdGluZyB0aGUgc2VhcmNoIHRlcm0gYWdhaW5zdCB0aGUgbm9kZXMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrXG4gICAgICogRGVmYXVsdCBzZWFyY2ggY29tcGFyZXMgdGhlIHBhc3NlZCBgc2VhcmNoVGVybWAgYWdhaW5zdCB0aGUgbm9kZSdzIGBkYXRhYCBJbnB1dC5cbiAgICAgKiBXaGVuIHVzaW5nIGBmaW5kTm9kZXNgIHcvbyBhIGBjb21wYXJlcmAsIG1ha2Ugc3VyZSBhbGwgbm9kZXMgaGF2ZSBgZGF0YWAgcGFzc2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNlYXJjaFRlcm0gVGhlIGRhdGEgb2YgdGhlIHNlYXJjaGVkIG5vZGVcbiAgICAgKiBAcGFyYW0gY29tcGFyZXIgQSBjdXN0b20gY29tcGFyZXIgZnVuY3Rpb24gdGhhdCBldmFsdWF0ZXMgdGhlIHBhc3NlZCBgc2VhcmNoVGVybWAgYWdhaW5zdCBhbGwgbm9kZXMuXG4gICAgICogQHJldHVybnMgQXJyYXkgb2Ygbm9kZXMgdGhhdCBtYXRjaCB0aGUgc2VhcmNoLiBgbnVsbGAgaWYgbm8gbm9kZXMgYXJlIGZvdW5kLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtkYXRhXT1cIm5vZGVcIj5cbiAgICAgKiAgICAgICAgICB7eyBub2RlLmxhYmVsIH19XG4gICAgICogICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBkYXRhOiBEYXRhRW50cnlbXSA9IEZFVENIRURfREFUQTtcbiAgICAgKiAuLi5cbiAgICAgKiBjb25zdCBtYXRjaGVkTm9kZXM6IElneFRyZWVOb2RlPERhdGFFbnRyeT5bXSA9IHRoaXMudHJlZS5maW5kTm9kZXM8RGF0YUVudHJ5PihzZWFyY2hUZXJtOiBkYXRhWzVdKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFVzaW5nIGEgY3VzdG9tIGNvbXBhcmVyXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBkYXRhOiBEYXRhRW50cnlbXSA9IEZFVENIRURfREFUQTtcbiAgICAgKiAuLi5cbiAgICAgKiBjb25zdCBjb21wYXJlcjogSWd4VHJlZVNlYXJjaFJlc29sdmVyID0gKGRhdGE6IGFueSwgbm9kZTogSWd4VHJlZU5vZGU8RGF0YUVudHJ5Pikge1xuICAgICAqICAgICAgcmV0dXJuIG5vZGUuZGF0YS5pbmRleCAlIDIgPT09IDA7XG4gICAgICogfVxuICAgICAqIGNvbnN0IGV2ZW5JbmRleE5vZGVzOiBJZ3hUcmVlTm9kZTxEYXRhRW50cnk+W10gPSB0aGlzLnRyZWUuZmluZE5vZGVzPERhdGFFbnRyeT4obnVsbCwgY29tcGFyZXIpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kTm9kZXMoc2VhcmNoVGVybTogYW55LCBjb21wYXJlcj86IElneFRyZWVTZWFyY2hSZXNvbHZlcik6IElneFRyZWVOb2RlQ29tcG9uZW50PGFueT5bXSB8IG51bGwge1xuICAgICAgICBjb25zdCBjb21wYXJlRnVuYyA9IGNvbXBhcmVyIHx8IHRoaXMuX2NvbXBhcmVyO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ub2Rlcy5maWx0ZXIobm9kZSA9PiBjb21wYXJlRnVuYyhzZWFyY2hUZXJtLCBub2RlKSk7XG4gICAgICAgIHJldHVybiByZXN1bHRzPy5sZW5ndGggPT09IDAgPyBudWxsIDogcmVzdWx0cztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLm5hdlNlcnZpY2UuaGFuZGxlS2V5ZG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmRpc2FibGVkQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS51cGRhdGVfZGlzYWJsZWRfY2FjaGUoZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFjdGl2ZU5vZGVCaW5kaW5nQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kVG9Ob2RlKHRoaXMubmF2U2VydmljZS5hY3RpdmVOb2RlKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTm9kZUludG9WaWV3KG5vZGU/LmhlYWRlcj8ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uRGVuc2l0eUNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsTm9kZUludG9WaWV3KHRoaXMubmF2U2VydmljZS5hY3RpdmVOb2RlPy5oZWFkZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3ViVG9Db2xsYXBzaW5nKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5ub2Rlcy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJUb0NoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2Nyb2xsTm9kZUludG9WaWV3KHRoaXMubmF2U2VydmljZS5hY3RpdmVOb2RlPy5oZWFkZXI/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnN1YlRvQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YkNoaWxkcmVuJC5uZXh0KCk7XG4gICAgICAgIHRoaXMudW5zdWJDaGlsZHJlbiQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGFuZFRvTm9kZShub2RlOiBJZ3hUcmVlTm9kZTxhbnk+KSB7XG4gICAgICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgbm9kZS5wYXRoLmZvckVhY2gobiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG4gIT09IG5vZGUgJiYgIW4uZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbi5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YlRvQ29sbGFwc2luZygpIHtcbiAgICAgICAgdGhpcy5ub2RlQ29sbGFwc2luZy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UudXBkYXRlX3Zpc2libGVfY2FjaGUoZXZlbnQubm9kZSwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ub2RlRXhwYW5kaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS51cGRhdGVfdmlzaWJsZV9jYWNoZShldmVudC5ub2RlLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJUb0NoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMudW5zdWJDaGlsZHJlbiQubmV4dCgpO1xuICAgICAgICBjb25zdCB0b0JlU2VsZWN0ZWQgPSBbLi4udGhpcy5mb3JjZVNlbGVjdF07XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Tm9kZXNXaXRoTm9FdmVudCh0b0JlU2VsZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JjZVNlbGVjdCA9IFtdO1xuICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBub2RlLmV4cGFuZGVkQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJDaGlsZHJlbiQpKS5zdWJzY3JpYmUobm9kZVN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UudXBkYXRlX3Zpc2libGVfY2FjaGUobm9kZSwgbm9kZVN0YXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbm9kZS5jbG9zZUFuaW1hdGlvbkRvbmUucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YkNoaWxkcmVuJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZT8uaGVhZGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxOb2RlSW50b1ZpZXcodGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGUub3BlbkFuaW1hdGlvbkRvbmUucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YkNoaWxkcmVuJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZT8uaGVhZGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxOb2RlSW50b1ZpZXcodGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmF2U2VydmljZS5pbml0X2ludmlzaWJsZV9jYWNoZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2Nyb2xsTm9kZUludG9WaWV3KGVsOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAoIWVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9kZVJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgdHJlZVJlY3QgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRvcE9mZnNldCA9IHRyZWVSZWN0LnRvcCA+IG5vZGVSZWN0LnRvcCA/IG5vZGVSZWN0LnRvcCAtIHRyZWVSZWN0LnRvcCA6IDA7XG4gICAgICAgIGNvbnN0IGJvdHRvbU9mZnNldCA9IHRyZWVSZWN0LmJvdHRvbSA8IG5vZGVSZWN0LmJvdHRvbSA/IG5vZGVSZWN0LmJvdHRvbSAtIHRyZWVSZWN0LmJvdHRvbSA6IDA7XG4gICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbCA9ICEhdG9wT2Zmc2V0IHx8ICEhYm90dG9tT2Zmc2V0O1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsICYmIHRoaXMubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyB0aGlzLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gbm9kZVJlY3QueSAtIHRyZWVSZWN0LnkgLSBub2RlUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgKyBib3R0b21PZmZzZXQgKyB0b3BPZmZzZXQgKyAodG9wT2Zmc2V0ID8gLTEgOiArMSkgKiBub2RlUmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb21wYXJlciA9IDxUPihkYXRhOiBULCBub2RlOiBJZ3hUcmVlTm9kZUNvbXBvbmVudDxUPikgPT4gbm9kZS5kYXRhID09PSBkYXRhO1xuXG59XG5cbi8qKlxuICogQGhpZGRlblxuICpcbiAqIE5nTW9kdWxlIGRlZmluaW5nIHRoZSBjb21wb25lbnRzIGFuZCBkaXJlY3RpdmVzIG5lZWRlZCBmb3IgYGlneC10cmVlYFxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBJZ3hUcmVlU2VsZWN0TWFya2VyRGlyZWN0aXZlLFxuICAgICAgICBJZ3hUcmVlRXhwYW5kSW5kaWNhdG9yRGlyZWN0aXZlLFxuICAgICAgICBJZ3hUcmVlTm9kZUxpbmtEaXJlY3RpdmUsXG4gICAgICAgIElneFRyZWVDb21wb25lbnQsXG4gICAgICAgIElneFRyZWVOb2RlQ29tcG9uZW50XG4gICAgXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIElneEljb25Nb2R1bGUsXG4gICAgICAgIElneElucHV0R3JvdXBNb2R1bGUsXG4gICAgICAgIElneENoZWNrYm94TW9kdWxlLFxuICAgICAgICBJZ3hQcm9ncmVzc0Jhck1vZHVsZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBJZ3hUcmVlU2VsZWN0TWFya2VyRGlyZWN0aXZlLFxuICAgICAgICBJZ3hUcmVlRXhwYW5kSW5kaWNhdG9yRGlyZWN0aXZlLFxuICAgICAgICBJZ3hUcmVlTm9kZUxpbmtEaXJlY3RpdmUsXG4gICAgICAgIElneFRyZWVDb21wb25lbnQsXG4gICAgICAgIElneFRyZWVOb2RlQ29tcG9uZW50LFxuICAgICAgICBJZ3hJY29uTW9kdWxlLFxuICAgICAgICBJZ3hJbnB1dEdyb3VwTW9kdWxlLFxuICAgICAgICBJZ3hDaGVja2JveE1vZHVsZSxcbiAgICAgICAgSWd4RXhwYW5zaW9uUGFuZWxNb2R1bGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneFRyZWVNb2R1bGUge1xufVxuIl19
|
|
@@ -6703,8 +6703,8 @@ class IgxRowAddCrudState extends IgxRowCrudState {
|
|
|
6703
6703
|
if (isAddRow) {
|
|
6704
6704
|
this.endAddRow();
|
|
6705
6705
|
if (commit) {
|
|
6706
|
-
this.grid.rowAddedNotifier.next({ data: args.newValue });
|
|
6707
|
-
this.grid.rowAdded.emit({ data: args.newValue });
|
|
6706
|
+
this.grid.rowAddedNotifier.next({ data: args.newValue, owner: this.grid });
|
|
6707
|
+
this.grid.rowAdded.emit({ data: args.newValue, owner: this.grid });
|
|
6708
6708
|
}
|
|
6709
6709
|
}
|
|
6710
6710
|
return args;
|
|
@@ -7145,8 +7145,7 @@ class GridBaseAPIService {
|
|
|
7145
7145
|
return;
|
|
7146
7146
|
}
|
|
7147
7147
|
const record = data[index];
|
|
7148
|
-
|
|
7149
|
-
grid.rowDeletedNotifier.next({ data: data[index] });
|
|
7148
|
+
grid.rowDeletedNotifier.next({ data: data[index], owner: grid });
|
|
7150
7149
|
this.deleteRowFromData(rowId, index);
|
|
7151
7150
|
if (grid.selectionService.isRowSelected(rowId)) {
|
|
7152
7151
|
grid.selectionService.deselectRow(rowId);
|
|
@@ -37287,7 +37286,7 @@ class IgxSimpleComboComponent extends IgxComboBaseDirective {
|
|
|
37287
37286
|
}
|
|
37288
37287
|
/** @hidden @internal */
|
|
37289
37288
|
onBlur() {
|
|
37290
|
-
if (this.collapsed) {
|
|
37289
|
+
if (this.collapsed && !this.selectedItem) {
|
|
37291
37290
|
this.clearOnBlur();
|
|
37292
37291
|
}
|
|
37293
37292
|
super.onBlur();
|
|
@@ -51697,8 +51696,8 @@ class IgxGridBaseDirective extends DisplayDensityBase {
|
|
|
51697
51696
|
this.notifyChanges(true);
|
|
51698
51697
|
this.cdr.detectChanges();
|
|
51699
51698
|
});
|
|
51700
|
-
this.verticalScrollContainer.contentSizeChange.pipe(filter(() => !this._init), destructor).subscribe(() => {
|
|
51701
|
-
this.notifyChanges();
|
|
51699
|
+
this.verticalScrollContainer.contentSizeChange.pipe(filter(() => !this._init), throttleTime(30), destructor).subscribe(() => {
|
|
51700
|
+
this.notifyChanges(true);
|
|
51702
51701
|
});
|
|
51703
51702
|
this.onDensityChanged.pipe(destructor).subscribe(() => {
|
|
51704
51703
|
this.crudService.endEdit(false);
|
|
@@ -52602,7 +52601,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
|
|
|
52602
52601
|
// commit pending states prior to adding a row
|
|
52603
52602
|
this.crudService.endEdit(true);
|
|
52604
52603
|
this.gridAPI.addRowToData(data);
|
|
52605
|
-
this.rowAddedNotifier.next({ data });
|
|
52604
|
+
this.rowAddedNotifier.next({ data, owner: this });
|
|
52606
52605
|
this.pipeTrigger++;
|
|
52607
52606
|
this.notifyChanges();
|
|
52608
52607
|
}
|
|
@@ -52629,7 +52628,8 @@ class IgxGridBaseDirective extends DisplayDensityBase {
|
|
|
52629
52628
|
rowID: rowId,
|
|
52630
52629
|
cancel: false,
|
|
52631
52630
|
rowData: this.getRowData(rowId),
|
|
52632
|
-
oldValue: null
|
|
52631
|
+
oldValue: null,
|
|
52632
|
+
owner: this
|
|
52633
52633
|
};
|
|
52634
52634
|
this.rowDelete.emit(args);
|
|
52635
52635
|
if (args.cancel) {
|
|
@@ -52637,8 +52637,7 @@ class IgxGridBaseDirective extends DisplayDensityBase {
|
|
|
52637
52637
|
}
|
|
52638
52638
|
const record = this.gridAPI.deleteRowById(rowId);
|
|
52639
52639
|
if (record !== null && record !== undefined) {
|
|
52640
|
-
|
|
52641
|
-
this.rowDeleted.emit({ data: record });
|
|
52640
|
+
this.rowDeleted.emit({ data: record, owner: this });
|
|
52642
52641
|
}
|
|
52643
52642
|
return record;
|
|
52644
52643
|
}
|
|
@@ -54675,12 +54674,14 @@ class IgxGridBaseDirective extends DisplayDensityBase {
|
|
|
54675
54674
|
}
|
|
54676
54675
|
_shouldAutoSize(renderedHeight) {
|
|
54677
54676
|
this.tbody.nativeElement.style.display = 'none';
|
|
54678
|
-
|
|
54677
|
+
let res = !this.nativeElement.parentElement ||
|
|
54679
54678
|
this.nativeElement.parentElement.clientHeight === 0 ||
|
|
54680
|
-
this.nativeElement.parentElement.clientHeight === renderedHeight
|
|
54679
|
+
this.nativeElement.parentElement.clientHeight === renderedHeight;
|
|
54680
|
+
if (!this.platform.isChromium && !this.platform.isFirefox) {
|
|
54681
54681
|
// If grid causes the parent container to extend (for example when container is flex)
|
|
54682
54682
|
// we should always auto-size since the actual size of the container will continuously change as the grid renders elements.
|
|
54683
|
-
this.checkContainerSizeChange();
|
|
54683
|
+
res = this.checkContainerSizeChange();
|
|
54684
|
+
}
|
|
54684
54685
|
this.tbody.nativeElement.style.display = '';
|
|
54685
54686
|
return res;
|
|
54686
54687
|
}
|
|
@@ -65893,7 +65894,7 @@ class IgxTreeGridComponent extends IgxGridBaseDirective {
|
|
|
65893
65894
|
addRow(data, parentRowID) {
|
|
65894
65895
|
this.crudService.endEdit(true);
|
|
65895
65896
|
this.gridAPI.addRowToData(data, parentRowID);
|
|
65896
|
-
this.rowAddedNotifier.next({ data });
|
|
65897
|
+
this.rowAddedNotifier.next({ data, owner: this });
|
|
65897
65898
|
this.pipeTrigger++;
|
|
65898
65899
|
this.notifyChanges();
|
|
65899
65900
|
}
|
|
@@ -66000,7 +66001,22 @@ class IgxTreeGridComponent extends IgxGridBaseDirective {
|
|
|
66000
66001
|
// if this is flat self-referencing data, and CascadeOnDelete is set to true
|
|
66001
66002
|
// and if we have transactions we should start pending transaction. This allows
|
|
66002
66003
|
// us in case of delete action to delete all child rows as single undo action
|
|
66003
|
-
|
|
66004
|
+
const args = {
|
|
66005
|
+
rowID: rowId,
|
|
66006
|
+
cancel: false,
|
|
66007
|
+
rowData: this.getRowData(rowId),
|
|
66008
|
+
oldValue: null,
|
|
66009
|
+
owner: this
|
|
66010
|
+
};
|
|
66011
|
+
this.rowDelete.emit(args);
|
|
66012
|
+
if (args.cancel) {
|
|
66013
|
+
return;
|
|
66014
|
+
}
|
|
66015
|
+
const record = this.gridAPI.deleteRowById(rowId);
|
|
66016
|
+
if (record !== null && record !== undefined) {
|
|
66017
|
+
this.rowDeleted.emit({ data: record, owner: this });
|
|
66018
|
+
}
|
|
66019
|
+
return record;
|
|
66004
66020
|
}
|
|
66005
66021
|
/**
|
|
66006
66022
|
* Returns the `IgxTreeGridRow` by index.
|
|
@@ -66344,6 +66360,7 @@ IgxTreeGridComponent.decorators = [
|
|
|
66344
66360
|
{ provide: GridBaseAPIService, useClass: IgxTreeGridAPIService },
|
|
66345
66361
|
{ provide: IgxGridBaseDirective, useExisting: forwardRef(() => IgxTreeGridComponent) },
|
|
66346
66362
|
IgxFilteringService,
|
|
66363
|
+
IgxColumnResizingService,
|
|
66347
66364
|
IgxForOfSyncService,
|
|
66348
66365
|
IgxForOfScrollSyncService
|
|
66349
66366
|
]
|
|
@@ -69192,6 +69209,7 @@ IgxHierarchicalGridComponent.decorators = [
|
|
|
69192
69209
|
{ provide: GridBaseAPIService, useClass: IgxHierarchicalGridAPIService },
|
|
69193
69210
|
{ provide: IgxGridBaseDirective, useExisting: forwardRef(() => IgxHierarchicalGridComponent) },
|
|
69194
69211
|
IgxGridSummaryService,
|
|
69212
|
+
IgxColumnResizingService,
|
|
69195
69213
|
IgxFilteringService,
|
|
69196
69214
|
IgxHierarchicalGridNavigationService,
|
|
69197
69215
|
IgxForOfSyncService,
|
|
@@ -73869,17 +73887,67 @@ class IgxSplitterPaneComponent {
|
|
|
73869
73887
|
this.overflow = 'auto';
|
|
73870
73888
|
/**
|
|
73871
73889
|
* @hidden @internal
|
|
73872
|
-
*
|
|
73890
|
+
* Get/Sets the `minWidth` properties of the current pane.
|
|
73891
|
+
*/
|
|
73892
|
+
this.minWidth = '0';
|
|
73893
|
+
/**
|
|
73894
|
+
* @hidden @internal
|
|
73895
|
+
* Get/Sets the `maxWidth` properties of the current pane.
|
|
73896
|
+
*/
|
|
73897
|
+
this.maxWidth = '100%';
|
|
73898
|
+
/**
|
|
73899
|
+
* @hidden @internal
|
|
73900
|
+
* Gets/Sets the `minHeight` properties of the current pane.
|
|
73873
73901
|
*/
|
|
73874
|
-
this.minHeight = 0;
|
|
73902
|
+
this.minHeight = '0';
|
|
73875
73903
|
/**
|
|
73876
73904
|
* @hidden @internal
|
|
73877
|
-
* Gets/Sets the `maxHeight`
|
|
73905
|
+
* Gets/Sets the `maxHeight` properties of the current `IgxSplitterPaneComponent`.
|
|
73878
73906
|
*/
|
|
73879
73907
|
this.maxHeight = '100%';
|
|
73880
73908
|
this._size = 'auto';
|
|
73881
73909
|
this._collapsed = false;
|
|
73882
73910
|
}
|
|
73911
|
+
/**
|
|
73912
|
+
* Gets/Sets the minimum allowed size of the current pane.
|
|
73913
|
+
*
|
|
73914
|
+
* @example
|
|
73915
|
+
* ```html
|
|
73916
|
+
* <igx-splitter>
|
|
73917
|
+
* <igx-splitter-pane [minSize]='minSize'>...</igx-splitter-pane>
|
|
73918
|
+
* </igx-splitter>
|
|
73919
|
+
* ```
|
|
73920
|
+
*/
|
|
73921
|
+
get minSize() {
|
|
73922
|
+
return this._minSize;
|
|
73923
|
+
}
|
|
73924
|
+
;
|
|
73925
|
+
set minSize(value) {
|
|
73926
|
+
this._minSize = value;
|
|
73927
|
+
if (this.owner) {
|
|
73928
|
+
this.owner.panes.notifyOnChanges();
|
|
73929
|
+
}
|
|
73930
|
+
}
|
|
73931
|
+
/**
|
|
73932
|
+
* Gets/Set the maximum allowed size of the current pane.
|
|
73933
|
+
*
|
|
73934
|
+
* @example
|
|
73935
|
+
* ```html
|
|
73936
|
+
* <igx-splitter>
|
|
73937
|
+
* <igx-splitter-pane [maxSize]='maxSize'>...</igx-splitter-pane>
|
|
73938
|
+
* </igx-splitter>
|
|
73939
|
+
* ```
|
|
73940
|
+
*/
|
|
73941
|
+
get maxSize() {
|
|
73942
|
+
return this._maxSize;
|
|
73943
|
+
}
|
|
73944
|
+
;
|
|
73945
|
+
set maxSize(value) {
|
|
73946
|
+
this._maxSize = value;
|
|
73947
|
+
if (this.owner) {
|
|
73948
|
+
this.owner.panes.notifyOnChanges();
|
|
73949
|
+
}
|
|
73950
|
+
}
|
|
73883
73951
|
/**
|
|
73884
73952
|
* Gets/Sets the size of the current pane.
|
|
73885
73953
|
* * @example
|
|
@@ -73991,8 +74059,10 @@ IgxSplitterPaneComponent.propDecorators = {
|
|
|
73991
74059
|
collapsedChange: [{ type: Output }],
|
|
73992
74060
|
order: [{ type: HostBinding, args: ['style.order',] }],
|
|
73993
74061
|
overflow: [{ type: HostBinding, args: ['style.overflow',] }],
|
|
73994
|
-
|
|
73995
|
-
|
|
74062
|
+
minWidth: [{ type: HostBinding, args: ['style.min-width',] }],
|
|
74063
|
+
maxWidth: [{ type: HostBinding, args: ['style.max-width',] }],
|
|
74064
|
+
minHeight: [{ type: HostBinding, args: ['style.min-height',] }],
|
|
74065
|
+
maxHeight: [{ type: HostBinding, args: ['style.max-height',] }],
|
|
73996
74066
|
size: [{ type: Input }],
|
|
73997
74067
|
flex: [{ type: HostBinding, args: ['style.flex',] }],
|
|
73998
74068
|
collapsed: [{ type: Input }]
|
|
@@ -74093,8 +74163,10 @@ class IgxSplitterComponent {
|
|
|
74093
74163
|
return this._type;
|
|
74094
74164
|
}
|
|
74095
74165
|
set type(value) {
|
|
74166
|
+
var _a;
|
|
74096
74167
|
this._type = value;
|
|
74097
74168
|
this.resetPaneSizes();
|
|
74169
|
+
(_a = this.panes) === null || _a === void 0 ? void 0 : _a.notifyOnChanges();
|
|
74098
74170
|
}
|
|
74099
74171
|
/**
|
|
74100
74172
|
* @hidden @internal
|
|
@@ -74199,7 +74271,18 @@ class IgxSplitterComponent {
|
|
|
74199
74271
|
* This method inits panes with properties.
|
|
74200
74272
|
*/
|
|
74201
74273
|
initPanes() {
|
|
74202
|
-
this.panes.forEach(pane =>
|
|
74274
|
+
this.panes.forEach(pane => {
|
|
74275
|
+
var _a, _b, _c, _d;
|
|
74276
|
+
pane.owner = this;
|
|
74277
|
+
if (this.type === SplitterType.Horizontal) {
|
|
74278
|
+
pane.minWidth = (_a = pane.minSize) !== null && _a !== void 0 ? _a : '0';
|
|
74279
|
+
pane.maxWidth = (_b = pane.maxSize) !== null && _b !== void 0 ? _b : '100%';
|
|
74280
|
+
}
|
|
74281
|
+
else {
|
|
74282
|
+
pane.minHeight = (_c = pane.minSize) !== null && _c !== void 0 ? _c : '0';
|
|
74283
|
+
pane.maxHeight = (_d = pane.maxSize) !== null && _d !== void 0 ? _d : '100%';
|
|
74284
|
+
}
|
|
74285
|
+
});
|
|
74203
74286
|
this.assignFlexOrder();
|
|
74204
74287
|
if (this.panes.filter(x => x.collapsed).length > 0) {
|
|
74205
74288
|
// if any panes are collapsed, reset sizes.
|
|
@@ -74213,7 +74296,13 @@ class IgxSplitterComponent {
|
|
|
74213
74296
|
resetPaneSizes() {
|
|
74214
74297
|
if (this.panes) {
|
|
74215
74298
|
// if type is changed runtime, should reset sizes.
|
|
74216
|
-
this.panes.forEach(x =>
|
|
74299
|
+
this.panes.forEach(x => {
|
|
74300
|
+
x.size = 'auto';
|
|
74301
|
+
x.minWidth = '0';
|
|
74302
|
+
x.maxWidth = '100%';
|
|
74303
|
+
x.minHeight = '0';
|
|
74304
|
+
x.maxHeight = '100%';
|
|
74305
|
+
});
|
|
74217
74306
|
}
|
|
74218
74307
|
}
|
|
74219
74308
|
/**
|
|
@@ -76749,6 +76838,35 @@ IgxTreeExpandIndicatorDirective.decorators = [
|
|
|
76749
76838
|
selector: '[igxTreeExpandIndicator]'
|
|
76750
76839
|
},] }
|
|
76751
76840
|
];
|
|
76841
|
+
/**
|
|
76842
|
+
* IgxTreeComponent allows a developer to show a set of nodes in a hierarchical fashion.
|
|
76843
|
+
*
|
|
76844
|
+
* @igxModule IgxTreeModule
|
|
76845
|
+
* @igxKeywords tree
|
|
76846
|
+
* @igxTheme igx-tree-theme
|
|
76847
|
+
* @igxGroup Grids & Lists
|
|
76848
|
+
*
|
|
76849
|
+
* @remark
|
|
76850
|
+
* The Angular Tree Component allows users to represent hierarchical data in a tree-view structure,
|
|
76851
|
+
* maintaining parent-child relationships, as well as to define static tree-view structure without a corresponding data model.
|
|
76852
|
+
* Its primary purpose is to allow end-users to visualize and navigate within hierarchical data structures.
|
|
76853
|
+
* The Ignite UI for Angular Tree Component also provides load on demand capabilities, item activation,
|
|
76854
|
+
* bi-state and cascading selection of items through built-in checkboxes, built-in keyboard navigation and more.
|
|
76855
|
+
*
|
|
76856
|
+
* @example
|
|
76857
|
+
* ```html
|
|
76858
|
+
* <igx-tree>
|
|
76859
|
+
* <igx-tree-node>
|
|
76860
|
+
* I am a parent node 1
|
|
76861
|
+
* <igx-tree-node>
|
|
76862
|
+
* I am a child node 1
|
|
76863
|
+
* </igx-tree-node>
|
|
76864
|
+
* ...
|
|
76865
|
+
* </igx-tree-node>
|
|
76866
|
+
* ...
|
|
76867
|
+
* </igx-tree>
|
|
76868
|
+
* ```
|
|
76869
|
+
*/
|
|
76752
76870
|
class IgxTreeComponent extends DisplayDensityBase {
|
|
76753
76871
|
constructor(navService, selectionService, treeService, element, _displayDensityOptions) {
|
|
76754
76872
|
super(_displayDensityOptions);
|