qms-angular 1.1.14 → 1.1.16

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 (41) hide show
  1. package/bundles/qms-angular.umd.js +510 -154
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/breadcrumb/breadcrumb.js +3 -3
  4. package/esm2015/lib/components/qms-nav-drawer/qms-nav-drawer.component.js +3 -3
  5. package/esm2015/lib/components/qms-paginator/qms-paginator.component.js +12 -3
  6. package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +49 -23
  7. package/esm2015/lib/components/select-access-dialog/select-access-dialog.module.js +5 -1
  8. package/esm2015/lib/components/select-department/common/animation.js +4 -4
  9. package/esm2015/lib/components/select-department/model/select-department-popup-data.model.js +5 -2
  10. package/esm2015/lib/components/select-department/select-department.component.js +28 -14
  11. package/esm2015/lib/components/select-department/select-department.module.js +4 -2
  12. package/esm2015/lib/components/select-department-tree/animation/animation.js +54 -0
  13. package/esm2015/lib/components/select-department-tree/model/department-search-result.model.js +6 -0
  14. package/esm2015/lib/components/select-department-tree/public-api.js +3 -1
  15. package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +296 -73
  16. package/esm2015/lib/components/select-department-tree/select-department-tree.module.js +15 -5
  17. package/esm2015/lib/components/select-department-tree/service/select-department-tree-global.service.js +1 -1
  18. package/esm2015/lib/components/select-one/select-one-next.component.js +1 -1
  19. package/esm2015/lib/components/tree/basic-tree.component.js +1 -1
  20. package/esm2015/lib/model/en.js +5 -2
  21. package/esm2015/lib/model/no.js +4 -1
  22. package/fesm2015/qms-angular.js +494 -153
  23. package/fesm2015/qms-angular.js.map +1 -1
  24. package/lib/components/select-access-dialog/select-access-dialog.component.d.ts +8 -0
  25. package/lib/components/select-department/model/select-department-popup-data.model.d.ts +2 -0
  26. package/lib/components/select-department/select-department.component.d.ts +14 -8
  27. package/lib/components/select-department-tree/animation/animation.d.ts +1 -0
  28. package/lib/components/select-department-tree/model/department-search-result.model.d.ts +11 -0
  29. package/lib/components/select-department-tree/public-api.d.ts +2 -0
  30. package/lib/components/select-department-tree/select-department-tree.component.d.ts +50 -17
  31. package/lib/model/en.d.ts +3 -0
  32. package/lib/model/no.d.ts +3 -0
  33. package/package.json +1 -1
  34. package/qms-angular.metadata.json +1 -1
  35. package/src/lib/components/breadcrumb/breadcrumb.scss +3 -3
  36. package/src/lib/components/qms-paginator/qms-paginator.component.scss +4 -0
  37. package/src/lib/components/select-access-dialog/select-access-dialog.component.scss +69 -2
  38. package/src/lib/components/select-department/select-department.component.scss +1 -9
  39. package/src/lib/components/select-department-tree/select-department-tree.component.scss +166 -2
  40. package/src/themes/_qms-icon-font.scss +1 -1
  41. package/src/themes/core/_table-pure-gap.scss +0 -1
@@ -1,46 +1,69 @@
1
1
  import { SelectionModel } from '@angular/cdk/collections';
2
2
  import { FlatTreeControl } from '@angular/cdk/tree';
3
- import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input } from '@angular/core';
3
+ import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output } from '@angular/core';
4
4
  import { FormControl } from '@angular/forms';
5
5
  import { MatIconRegistry } from '@angular/material/icon';
6
6
  import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
7
7
  import { DomSanitizer } from '@angular/platform-browser';
8
- import { Subject } from 'rxjs';
9
- import { takeUntil } from 'rxjs/operators';
8
+ import { BehaviorSubject, of, Subject, timer } from 'rxjs';
9
+ import { delay, switchMap, takeUntil } from 'rxjs/operators';
10
10
  import { QMSFlatNodeTree } from '../../common/models/qms-flat-node.model';
11
+ import { TranslateLibraryService } from '../../services/translation-registry.service';
11
12
  import { QMSIconRegistryService } from '../app-icon/icon-registry.service';
13
+ import { PaginationSize } from '../qms-paginator';
12
14
  import { ItemIconType } from '../related/common/item-icon-type.enum';
15
+ import { AnimationTreeDepartment } from './animation/animation';
13
16
  import { QMSSelectDepartmentTreeConfig } from './model/select-department-tree.config';
14
- import { QMSSelectDepartmentTreeGlobalService } from './service/select-department-tree-global.service';
17
+ import * as _ from 'lodash';
15
18
  export class SelectDepartmentTreeComponent {
16
- constructor(selectDepartmentService, cdRef, domSanitizer, appIconService, iconRegistry, eleRef) {
17
- this.selectDepartmentService = selectDepartmentService;
19
+ constructor(cdRef, domSanitizer, appIconService, iconRegistry, eleRef, trans) {
18
20
  this.cdRef = cdRef;
19
21
  this.domSanitizer = domSanitizer;
20
22
  this.appIconService = appIconService;
21
23
  this.iconRegistry = iconRegistry;
22
24
  this.eleRef = eleRef;
25
+ this.trans = trans;
23
26
  this.enableIncludeChild = false;
24
27
  this.enableTreeSearch = false;
28
+ this.isSelectOne = false;
29
+ this.activeViewSearch = false;
25
30
  this.treeDataSourceConfig = new QMSSelectDepartmentTreeConfig();
31
+ this.checkSearchMappingTree = true;
32
+ this.enablePagingSearch = true;
33
+ this.onSearchEvent = new EventEmitter();
34
+ this.onPagingSearchEvent = new EventEmitter();
26
35
  this.ngUnsubscribe = new Subject();
27
36
  this.isLoaded = false;
28
- this.groupIncludeChild = [];
29
- this.singleItem = [];
37
+ this.resultGroupSelected = [];
38
+ this.resultSingleSelected = [];
39
+ this.resultSearchSelected = [];
30
40
  this.resultSelected = [];
31
- this.valueChange$ = new Subject();
32
- this.textSearch = new FormControl('');
33
- this.onSearchEvent = new EventEmitter();
41
+ this.getDataTree$ = new BehaviorSubject([]);
42
+ this.onValueChangeEvent = new EventEmitter();
43
+ this.searchDepartment$ = new Subject();
34
44
  this.resultSearch = [];
45
+ this.pagingResultSearch = [];
46
+ this.isSelectAllResultSearch = false;
47
+ this.indeterminateSearchResult = false;
48
+ this.currentPaginationConfig = {
49
+ pageIndex: 0,
50
+ pageSize: 10,
51
+ length: 0
52
+ };
53
+ this.indexView = 0;
54
+ this.scrollToNodeEvent$ = new Subject();
35
55
  this.activeNode = '';
56
+ this.getActiveNodeEvent$ = new Subject();
57
+ this.PAGINATION_SIZE = PaginationSize;
36
58
  this.nestedTreeNodeMap = new Map();
37
59
  this.flatTreeNodeMap = new Map();
38
60
  this.checkListSelection = new SelectionModel(true);
39
- this.isShowTreeSearch = false;
61
+ this.checkListSelectionSearch = new SelectionModel(true);
62
+ this.formSearchControl = new FormControl('');
40
63
  this.itemIconType = ItemIconType;
41
64
  this._transformer = (node, level) => {
42
65
  var _a;
43
- const flatNode = this._convertToFlatNode(node) || new QMSFlatNodeTree();
66
+ const flatNode = this.convertToFlatNode(node) || new QMSFlatNodeTree();
44
67
  flatNode.id = node.id;
45
68
  flatNode.name = node.name;
46
69
  flatNode.expandable = (node.children && node.children.length > 0) || (!!node.childCount);
@@ -63,7 +86,7 @@ export class SelectDepartmentTreeComponent {
63
86
  this.treeFlattener = new MatTreeFlattener(this._transformer, this.getLevel, this.isExpandable, this._getChild);
64
87
  this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
65
88
  // Init tree data
66
- this.selectDepartmentService.getDataTree$
89
+ this.getDataTree$
67
90
  .pipe(takeUntil(this.ngUnsubscribe))
68
91
  .subscribe(data => {
69
92
  this.dataSource.data = data;
@@ -76,29 +99,83 @@ export class SelectDepartmentTreeComponent {
76
99
  appIconService.registerDeviationIcon(iconRegistry, domSanitizer);
77
100
  appIconService.registerChecklistIcon(iconRegistry, domSanitizer);
78
101
  appIconService.registerRiskIcon(iconRegistry, domSanitizer);
79
- this.textSearch.valueChanges
80
- .pipe(takeUntil(this.ngUnsubscribe))
81
- .subscribe(result => {
82
- if (result) {
83
- this.onSearchEvent.emit(result);
84
- return;
102
+ this.trans.getLanguageSubject$.pipe().subscribe((res) => {
103
+ if (res) {
104
+ this.LANG = this.trans.getObjectLang(res);
85
105
  }
86
106
  });
87
- this.selectDepartmentService.searchDepartment$
107
+ this.searchDepartment$
88
108
  .pipe(takeUntil(this.ngUnsubscribe))
89
109
  .subscribe(result => {
90
- this.resultSearch = result;
110
+ this.resultSearch = [];
111
+ this.setIndexView(1);
112
+ if (result && result.length) {
113
+ result.forEach(item => {
114
+ const node = this.treeControl.dataNodes.find(node => node.id === item.id);
115
+ const parents = node ? this._getAllParentNode(node) : [];
116
+ this.resultSearch.push(Object.assign(Object.assign({}, item), { disabled: this.checkSearchMappingTree && !node, path: [
117
+ ...(parents.map((x, index) => ({
118
+ id: x.id,
119
+ name: x.name,
120
+ })).reverse() || []),
121
+ {
122
+ id: item.id,
123
+ name: item.name,
124
+ }
125
+ ] }));
126
+ });
127
+ }
128
+ this.currentPaginationConfig.pageIndex = 0;
129
+ this.currentPaginationConfig.pageSize = 10;
130
+ this.onPagingSearchResult(this.currentPaginationConfig);
131
+ this._mapToResultSearch();
132
+ this._checkStateCheckboxAllSearch();
133
+ this.cdRef.detectChanges();
134
+ });
135
+ this.scrollToNodeEvent$.pipe(takeUntil(this.ngUnsubscribe), switchMap((val) => {
136
+ const delayTiming = this.indexView === 1 ? 700 : 0;
137
+ this.setIndexView(0);
138
+ return of(val).pipe(delay(delayTiming));
139
+ })).subscribe(res => {
140
+ this.onScrollIntoNode(res);
91
141
  });
142
+ this.getActiveNodeEvent$.pipe(takeUntil(this.ngUnsubscribe), switchMap(val => {
143
+ this.activeNode = val;
144
+ return timer(1500);
145
+ })).subscribe(_ => {
146
+ this.activeNode = '';
147
+ });
148
+ // this.checkListSelectionSearch.changed
149
+ // .pipe(takeUntil(this.ngUnsubscribe))
150
+ // .subscribe(result =>{
151
+ // const { added, removed } = result;
152
+ // if(added.length){
153
+ // const nodes = added.map(item =>({
154
+ // id: item.id,
155
+ // name: item.name,
156
+ // children: null,
157
+ // } as QMSTreeNode)).filter(item => !this.treeControl.dataNodes.find(x => item.id == x.id));
158
+ // this.resultSelected.push(...nodes);
159
+ // }
160
+ // if(removed.length){
161
+ // removed.forEach(item =>{
162
+ // const index = this.resultSelected.findIndex(x => x.id === item.id );
163
+ // if(index>=0){
164
+ // this.resultSelected.splice(index, 1);
165
+ // }
166
+ // })
167
+ // }
168
+ // });
92
169
  }
93
170
  set treeData(value) {
94
171
  this.treeDataSourceConfig.treeData = value || [];
95
- this.selectDepartmentService.updateDataTree(this.treeDataSourceConfig.treeData);
172
+ this.updateDataTree(this.treeDataSourceConfig.treeData);
96
173
  }
97
174
  set selectedList(value) {
98
175
  this.treeDataSourceConfig.selectedList = value || [];
99
176
  }
100
177
  get currentTreeData() {
101
- return this.selectDepartmentService.getDataTree$.value;
178
+ return this.getDataTree$.value;
102
179
  }
103
180
  ngOnInit() {
104
181
  this._initTreeData();
@@ -124,22 +201,38 @@ export class SelectDepartmentTreeComponent {
124
201
  };
125
202
  return node;
126
203
  });
127
- this.selectDepartmentService.updateDataTree(rootNode);
128
- const groupResult = this.treeDataSourceConfig.treeData.reduce((result, currentValue) => {
204
+ if (!rootNode.length)
205
+ throw ('Data invalid.');
206
+ this.updateDataTree(rootNode);
207
+ const groupResult = this.treeDataSourceConfig.treeData.filter(x => +x.parentId !== 0).reduce((result, currentValue) => {
129
208
  (result[currentValue['parentId']] = result[currentValue['parentId']] || []).push(currentValue);
130
209
  return result;
131
210
  }, {});
132
- const groupResultKey = Object.keys(groupResult);
133
- while (this.treeControl.dataNodes.filter(node => node.expandable).every(node => !node.markedGetChildren)) {
134
- groupResultKey.forEach((key, index) => {
211
+ const getAllParent = (parentId) => {
212
+ const parents = [];
213
+ let parent = this.treeDataSourceConfig.treeData.find(x => +x.id === +parentId);
214
+ while (parent) {
215
+ parents.push(parent);
216
+ parent = this.treeDataSourceConfig.treeData.find(x => +x.id === +parent.parentId);
217
+ }
218
+ return parents;
219
+ };
220
+ if (!(rootNode && !!rootNode.length))
221
+ return;
222
+ let groupResultKey = Object.keys(groupResult).filter(x => getAllParent(x).length);
223
+ while (groupResultKey.length) {
224
+ groupResultKey = groupResultKey.filter((key) => {
135
225
  const parentFlatNode = this.treeControl.dataNodes.find(node => node.id === key);
136
226
  if (parentFlatNode) {
137
- const parentNestedNode = this._convertToNestedNode(parentFlatNode);
227
+ const parentNestedNode = this.convertToNestedNode(parentFlatNode);
138
228
  parentNestedNode.markedGetChildren = true;
139
- parentNestedNode.children = groupResult[key];
229
+ parentNestedNode.children = _.cloneDeep(groupResult[key]);
140
230
  parentNestedNode.childCount = parentNestedNode.children.length;
141
- this.selectDepartmentService.updateDataTree(this.currentTreeData);
231
+ this.updateDataTree(this.currentTreeData);
232
+ groupResult[key] = [];
233
+ return false;
142
234
  }
235
+ return true;
143
236
  });
144
237
  }
145
238
  }
@@ -147,8 +240,8 @@ export class SelectDepartmentTreeComponent {
147
240
  _initCheckListSelected() {
148
241
  if (!this.treeDataSourceConfig.selectedList.length)
149
242
  return;
150
- this.groupIncludeChild = this.treeDataSourceConfig.selectedList.filter(item => item.children);
151
- this.singleItem = this.treeDataSourceConfig.selectedList.filter(item => item.children === null);
243
+ this.resultGroupSelected = this.treeDataSourceConfig.selectedList.filter(item => item.children);
244
+ this.resultSingleSelected = this.treeDataSourceConfig.selectedList.filter(item => item.children === null);
152
245
  this.treeDataSourceConfig.selectedList.forEach(item => {
153
246
  var _a;
154
247
  const flatNode = this.treeControl.dataNodes.find(node => node.id === item.id);
@@ -162,11 +255,17 @@ export class SelectDepartmentTreeComponent {
162
255
  }
163
256
  });
164
257
  this.onExpandAllParent(flatNode);
165
- this.resultSelected = [...this.singleItem, ...this.groupIncludeChild];
166
- this.valueChange$.next(this.resultSelected);
167
258
  }
259
+ this.resultSelected = [...this.resultSingleSelected, ...this.resultGroupSelected];
260
+ this.onValueChangeEvent.emit(this.resultSelected);
168
261
  });
169
262
  }
263
+ updateDataTree(data) {
264
+ this.getDataTree$.next(data);
265
+ }
266
+ setResultSearch(data) {
267
+ this.searchDepartment$.next(data);
268
+ }
170
269
  onExpandNode(node) {
171
270
  }
172
271
  onOptionSearchSelected(value) {
@@ -175,7 +274,7 @@ export class SelectDepartmentTreeComponent {
175
274
  return;
176
275
  this.checkListSelection.select(flatNode);
177
276
  this._handleCheckNode(flatNode);
178
- this.scrollIntoNode(flatNode.id);
277
+ this.onScrollIntoNode(flatNode.id);
179
278
  }
180
279
  onSlideToggleChange() {
181
280
  }
@@ -184,12 +283,30 @@ export class SelectDepartmentTreeComponent {
184
283
  }
185
284
  onCheckNode(node) {
186
285
  this.checkListSelection.toggle(node);
187
- this._handleCheckNode(node);
188
- this.valueChange$.next(this.resultSelected);
286
+ if (this.isSelectOne) {
287
+ this._handleSelectOne(node);
288
+ }
289
+ else {
290
+ this._handleCheckNode(node);
291
+ }
292
+ this.onValueChangeEvent.emit(this.resultSelected);
293
+ this._mapToResultSearch();
294
+ this._checkStateCheckboxAllSearch();
295
+ }
296
+ _handleSelectOne(node) {
297
+ const selected = this.checkListSelection.selected.filter(x => x.id !== node.id);
298
+ this.checkListSelection.deselect(...selected);
299
+ if (this.checkListSelection.isSelected(node)) {
300
+ const nestedNode = this.convertToNestedNode(this.checkListSelection.selected[0]);
301
+ const itemSelected = Object.assign(Object.assign({}, nestedNode), { children: null });
302
+ this.resultSelected = [itemSelected];
303
+ return;
304
+ }
305
+ this.resultSelected = [];
189
306
  }
190
307
  onExpandAllParent(node) {
191
308
  const parents = this._getAllParentNode(node);
192
- if (!!(parents === null || parents === void 0 ? void 0 : parents.length)) {
309
+ if (parents === null || parents === void 0 ? void 0 : parents.length) {
193
310
  parents.forEach(parent => {
194
311
  this.treeControl.expand(parent);
195
312
  });
@@ -199,67 +316,69 @@ export class SelectDepartmentTreeComponent {
199
316
  const flatNode = this.treeControl.dataNodes.find(item => item.id === nodeId);
200
317
  this.checkListSelection.deselect(flatNode);
201
318
  flatNode && this._handleCheckNode(flatNode);
319
+ this._checkStateCheckboxAllSearch();
202
320
  }
203
321
  isIndeterminate(node) {
204
- const childSelected = this._getListChildrenOfNode(node).filter(item => this.checkListSelection.isSelected(item));
322
+ const childSelected = this.getListChildrenOfNode(node).filter(item => this.checkListSelection.isSelected(item));
205
323
  return (!!childSelected.length && !this.checkListSelection.isSelected(node));
206
324
  }
207
325
  isCheckAll(node) {
208
- const listCheck = [...this._getListChildrenOfNode(node), node];
326
+ const listCheck = [...this.getListChildrenOfNode(node), node];
209
327
  return listCheck.every(item => this.checkListSelection.isSelected(item));
210
328
  }
211
329
  _handleCheckNode(node) {
212
330
  const isSelectedNode = this.checkListSelection.isSelected(node);
213
- const isOwnerGroup = !!this.groupIncludeChild.find(gr => (gr === null || gr === void 0 ? void 0 : gr.id) === node.id);
331
+ const isOwnerGroup = !!this.resultGroupSelected.find(gr => (gr === null || gr === void 0 ? void 0 : gr.id) === node.id);
214
332
  if (isSelectedNode) {
215
- const children = this.treeDataSourceConfig.includeChildren && this._getListChildrenOfNode(node);
333
+ const children = this.treeDataSourceConfig.includeChildren && this.getListChildrenOfNode(node);
216
334
  children && this.checkListSelection.select(...children);
217
335
  }
218
336
  else {
219
- const childSelected = this._getChildrenSelected(node);
337
+ const childSelected = this.getChildrenSelected(node);
220
338
  // check node is owner group or mode is 'include children' and remove all children
221
339
  (isOwnerGroup || this.treeDataSourceConfig.includeChildren) && this.checkListSelection.deselect(...childSelected);
222
340
  }
223
341
  this._updateGroupResult(node);
224
342
  this._updateSingleResult();
225
- this.resultSelected = [...this.singleItem, ...this.groupIncludeChild];
343
+ this.resultSelected = [...this.resultSingleSelected, ...this.resultGroupSelected];
344
+ this._mapToResultSearch();
226
345
  }
227
346
  // Check group root contain node and re-update chilren
228
347
  _updateGroupResult(node) {
229
- const nestedNode = this._convertToNestedNode(node);
348
+ const nestedNode = this.convertToNestedNode(node);
230
349
  const existedGroup = this._getExistedGroup(node);
231
- const childrenSelected = this._mapToNestedListNode(this._getChildrenSelected(this._convertToFlatNode(existedGroup) || node));
232
- const item = this.groupIncludeChild.find(gr => gr.id == nestedNode.id || gr.id === (existedGroup === null || existedGroup === void 0 ? void 0 : existedGroup.id));
350
+ const childrenSelected = this._mapToNestedListNode(this.getChildrenSelected(this.convertToFlatNode(existedGroup) || node));
351
+ const item = this.resultGroupSelected.find(gr => gr.id == nestedNode.id || gr.id === (existedGroup === null || existedGroup === void 0 ? void 0 : existedGroup.id));
233
352
  if (!!item) {
234
353
  item.children = childrenSelected;
235
354
  }
236
355
  else {
237
- this.treeDataSourceConfig.includeChildren && this.groupIncludeChild.push(Object.assign(Object.assign({}, nestedNode), { children: childrenSelected }));
356
+ this.treeDataSourceConfig.includeChildren && this.resultGroupSelected.push(Object.assign(Object.assign({}, nestedNode), { children: childrenSelected }));
238
357
  }
239
358
  this._checkGroupSelected(childrenSelected);
240
359
  }
241
360
  // Check single selected result
242
361
  _updateSingleResult() {
243
362
  let excludeChildOfGroup = [];
244
- this.groupIncludeChild.forEach(gr => {
363
+ this.resultGroupSelected.forEach(gr => {
245
364
  excludeChildOfGroup = [...excludeChildOfGroup, ...gr.children.map(x => x.id)];
246
365
  });
247
- this.singleItem = this.treeControl.dataNodes.filter(item => {
366
+ this.resultSingleSelected = this.treeControl.dataNodes.filter(item => {
248
367
  const isSelected = this.checkListSelection.isSelected(item);
249
368
  const existedGroup = this._getExistedGroup(item);
250
- const isOwnerGroup = !!this.groupIncludeChild.find(x => (x === null || x === void 0 ? void 0 : x.id) === item.id);
369
+ const isOwnerGroup = !!this.resultGroupSelected.find(x => (x === null || x === void 0 ? void 0 : x.id) === item.id);
251
370
  return isSelected && !existedGroup && !isOwnerGroup && !excludeChildOfGroup.includes(item.id);
252
371
  }).map(item => {
253
- const nestedNode = this._convertToNestedNode(item);
372
+ const nestedNode = this.convertToNestedNode(item);
254
373
  nestedNode.children = null;
255
374
  return nestedNode;
256
375
  });
257
376
  }
258
377
  _checkGroupSelected(childSelected) {
259
- this.groupIncludeChild = this.groupIncludeChild.filter(gr => {
378
+ this.resultGroupSelected = this.resultGroupSelected.filter(gr => {
260
379
  const flatNode = this.treeControl.dataNodes.find(node => node.id === gr.id);
261
380
  const childSelectedInGroup = gr.children.filter(x => childSelected.includes(x));
262
- gr.childCount = this._getListChildrenOfNode(flatNode).length;
381
+ gr.childCount = this.getListChildrenOfNode(flatNode).length;
263
382
  // if Mode is 'include child' the group list will filter exclude all child selected , ortherwise filter exclude all child in group that node is contained
264
383
  const arrChild = this.treeDataSourceConfig.includeChildren ? childSelected : childSelectedInGroup;
265
384
  return gr.childCount > 0 && this.checkListSelection.isSelected(flatNode) && !arrChild.find(_x => _x.id === gr.id);
@@ -267,28 +386,28 @@ export class SelectDepartmentTreeComponent {
267
386
  }
268
387
  _getExistedGroup(node) {
269
388
  const allParent = this._getAllParentNode(node);
270
- const listGroupIds = this.groupIncludeChild.map(gr => gr.id);
389
+ const listGroupIds = this.resultGroupSelected.map(gr => gr.id);
271
390
  let existedGroup;
272
391
  allParent.forEach(item => {
273
392
  if (listGroupIds.includes(item.id)) {
274
- existedGroup = this._convertToNestedNode(item);
393
+ existedGroup = this.convertToNestedNode(item);
275
394
  }
276
395
  });
277
396
  return existedGroup;
278
397
  }
279
- _getChildrenSelected(node) {
280
- return this._getListChildrenOfNode(node).filter(x => this.checkListSelection.isSelected(x));
398
+ getChildrenSelected(node) {
399
+ return this.getListChildrenOfNode(node).filter(x => this.checkListSelection.isSelected(x));
281
400
  }
282
- _getListChildrenOfNode(node) {
401
+ getListChildrenOfNode(node) {
283
402
  return this.treeControl.getDescendants(node);
284
403
  }
285
404
  _mapToNestedListNode(flatNodeList) {
286
- return flatNodeList.map(item => this._convertToNestedNode(item));
405
+ return flatNodeList.map(item => this.convertToNestedNode(item));
287
406
  }
288
- _convertToNestedNode(node) {
407
+ convertToNestedNode(node) {
289
408
  return this.flatTreeNodeMap.get(node);
290
409
  }
291
- _convertToFlatNode(node) {
410
+ convertToFlatNode(node) {
292
411
  return this.nestedTreeNodeMap.get(node);
293
412
  }
294
413
  _getRootSelected(node) {
@@ -334,19 +453,113 @@ export class SelectDepartmentTreeComponent {
334
453
  return this.itemIconType.path;
335
454
  return;
336
455
  }
337
- scrollIntoNode(nodeId) {
456
+ onScrollIntoNode(nodeId) {
338
457
  const flatNode = this.treeControl.dataNodes.find(item => item.id === nodeId);
339
458
  if (!nodeId)
340
459
  return;
341
460
  this.treeControl.expand(flatNode);
342
461
  this.onExpandAllParent(flatNode);
343
462
  const element = this.eleRef.nativeElement.querySelector(`#node-${flatNode.id}`);
344
- element.scrollIntoView({
463
+ element && element.scrollIntoView({
345
464
  behavior: 'smooth',
346
465
  block: 'center',
347
466
  });
467
+ this.getActiveNodeEvent$.next(nodeId);
468
+ }
469
+ onSearch() {
470
+ if (this.formSearchControl.value) {
471
+ this.onSearchEvent.emit(this.formSearchControl.value);
472
+ return;
473
+ }
348
474
  }
349
- _expandAllGroupExist() {
475
+ onClickResultItem(item) {
476
+ const node = this.treeControl.dataNodes.find(x => item.id === x.id);
477
+ if (node) {
478
+ this.scrollToNode(node.id);
479
+ }
480
+ }
481
+ onBreadCrumbItemClick(item) {
482
+ const node = this.treeControl.dataNodes.find(x => item.id === x.id);
483
+ if (node) {
484
+ this.setIndexView(0);
485
+ of(node.id).pipe(delay(700)).subscribe(res => {
486
+ this.onScrollIntoNode(res);
487
+ });
488
+ }
489
+ }
490
+ onCheckItemSearchResult(item) {
491
+ this.checkListSelectionSearch.toggle(item);
492
+ if (this.isSelectOne) {
493
+ this.checkListSelectionSearch.deselect(...this.checkListSelectionSearch.selected.filter(x => x.id !== item.id));
494
+ }
495
+ this._handleCheckResutlSearch(item);
496
+ this._checkStateCheckboxAllSearch();
497
+ this.onValueChangeEvent.emit(this.resultSelected);
498
+ }
499
+ _mapToResultSearch() {
500
+ if (!!this.resultSearch.length)
501
+ this.resultSearch.forEach(item => {
502
+ const node = this.treeControl.dataNodes.find(node => node.id == item.id);
503
+ this.checkListSelection.isSelected(node) ? this.checkListSelectionSearch.select(item) : this.checkListSelectionSearch.deselect(item);
504
+ });
505
+ }
506
+ _handleCheckResutlSearch(item) {
507
+ const currentNode = this.treeControl.dataNodes.find(x => item.id === x.id);
508
+ if (currentNode) {
509
+ this.checkListSelectionSearch.isSelected(item) ? this.checkListSelection.select(currentNode) : this.checkListSelection.deselect(currentNode);
510
+ this.isSelectOne ? this._handleSelectOne(currentNode) : this._handleCheckNode(currentNode);
511
+ }
512
+ }
513
+ onSelectAllSearchResult(checked) {
514
+ const arrResult = (this.enablePagingSearch ? this.pagingResultSearch : this.resultSearch).filter(x => !x.disabled);
515
+ this.isSelectAllResultSearch = !checked;
516
+ const handle = (arr) => {
517
+ arr.length && arr.forEach(item => {
518
+ if (this.isSelectAllResultSearch) {
519
+ !this.checkListSelectionSearch.isSelected(item) && this.checkListSelectionSearch.select(item);
520
+ }
521
+ else {
522
+ this.checkListSelectionSearch.deselect(item);
523
+ }
524
+ this._handleCheckResutlSearch(item);
525
+ });
526
+ };
527
+ if (this.treeDataSourceConfig.includeChildren) {
528
+ const mainGroup = arrResult.filter((item) => {
529
+ const node = this.treeControl.dataNodes.find(x => x.id === item.id);
530
+ const existItemGroup = this._getAllParentNode(node).filter(x => arrResult.some(x1 => x1.id === x.id));
531
+ return existItemGroup.length === 0;
532
+ });
533
+ handle(mainGroup);
534
+ }
535
+ else {
536
+ handle(arrResult);
537
+ }
538
+ this._checkStateCheckboxAllSearch();
539
+ this.onValueChangeEvent.emit(this.resultSelected);
540
+ }
541
+ _checkStateCheckboxAllSearch() {
542
+ const arrResult = this.enablePagingSearch ? this.pagingResultSearch : this.resultSearch;
543
+ this.isSelectAllResultSearch = !!arrResult.length && arrResult.filter(x => !x.disabled).every(x => this.checkListSelectionSearch.isSelected(x));
544
+ this.indeterminateSearchResult = !this.isSelectAllResultSearch && !!arrResult.length && arrResult.some(x => this.checkListSelectionSearch.isSelected(x));
545
+ }
546
+ onPagingSearchResult(val) {
547
+ if (!this.enablePagingSearch)
548
+ return;
549
+ this.currentPaginationConfig = val;
550
+ this.pagingResultSearch = this.resultSearch.slice(val.pageIndex * val.pageSize, (val.pageIndex * val.pageSize) + val.pageSize);
551
+ this._checkStateCheckboxAllSearch();
552
+ this.onPagingSearchEvent.emit(val);
553
+ }
554
+ scrollToNode(nodeId) {
555
+ // this.getActiveNodeEvent$.next(nodeId);
556
+ this.scrollToNodeEvent$.next(nodeId);
557
+ }
558
+ setIndexView(index) {
559
+ if (index === 1) {
560
+ this.treeDataSourceConfig.includeChildren = false;
561
+ }
562
+ this.indexView = index;
350
563
  }
351
564
  getSelectedNodeStorage() {
352
565
  return JSON.parse(localStorage.getItem('selectedNode'));
@@ -358,22 +571,32 @@ export class SelectDepartmentTreeComponent {
358
571
  SelectDepartmentTreeComponent.decorators = [
359
572
  { type: Component, args: [{
360
573
  selector: 'qms-select-department-tree',
361
- template: "<div class=\"qms-select-department-tree-container\">\r\n <div class=\"input-select-department\">\r\n <div *ngIf=\"enableTreeSearch\" class=\"input__field\">\r\n <mat-form-field class=\"w100\" qms-form qms-search-field>\r\n <input type=\"text\" placeholder=\"Search\" matInput />\r\n <button qms-btn-icon color=\"light\" matSuffix>\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"enableIncludeChild\" class=\"select__toggle-include toggle-include-child mt-1\">\r\n <mat-slide-toggle [(ngModel)]=\"treeDataSourceConfig.includeChildren\" (ngModelChange)=\"onSlideToggleChange()\"\r\n color=\"default\" qms-group-options>\r\n <span class=\"text-label\">Select include children</span>\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"line__divider\"></div>\r\n </div>\r\n\r\n <div class=\"tree-department-wrapper\">\r\n <mat-tree class=\"select-department-tree\" [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding [ngClass]=\"{\r\n active: activeNode == node.id,\r\n 'mat-tree-node-disabled-all': node.disabled\r\n }\">\r\n <button class=\"btn-toggle\" mat-icon-button disabled></button>\r\n <ng-container [ngTemplateOutlet]=\"showCheckboxTemplate\" [ngTemplateOutletContext]=\"{ node: node }\">\r\n </ng-container>\r\n </mat-tree-node>\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding [ngClass]=\"{\r\n 'expand-node': treeControl.isExpanded(node),\r\n 'collapse-node': !treeControl.isExpanded(node),\r\n active: activeNode == node.id,\r\n 'mat-tree-node-disabled': node.disabled\r\n }\">\r\n <div class=\"node-content-wraper\">\r\n <button class=\"btn-toggle\" mat-icon-button (click)=\"onExpandNode(node)\" matTreeNodeToggle>\r\n <mat-icon>\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n <ng-container [ngTemplateOutlet]=\"showCheckboxTemplate\r\n \" [ngTemplateOutletContext]=\"{ node: node }\"></ng-container>\r\n <mat-progress-bar *ngIf=\"false\" mode=\"indeterminate\" class=\"example-tree-progress-bar\">\r\n </mat-progress-bar>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n <!-- Template for Checkbox -->\r\n <ng-template #showCheckboxTemplate let-node=\"node\">\r\n <mat-checkbox [id]=\"'node-'+node.id\" qms-group-options color=\"default\" label=\"none\" class=\"flex-direction-row\"\r\n [checked]=\"checkListSelection.isSelected(node)\" (click)=\"onCheckNode(node)\" [attr.disabled]=\"node.disabled\">\r\n <img *ngIf=\"node.itemIconSvg\" class=\"material-icons type-icon\" [src]=\"node.itemIconSvg\" />\r\n <span *ngIf=\"node.itemIcon\" [class]=\"node.itemIcon\" [qmsTransformIcon]=\"node.itemIcon\"\r\n class=\"material-icons-outlined type-icon\"></span>\r\n <span *ngIf=\"node.itemMatIcon\" class=\"material-icons-outlined type-icon\">{{\r\n node.itemMatIcon }}\r\n </span>\r\n <span class=\"text-name cursor-pointer ml-5 123\" [ngClass]=\"{ disabled: node.disabled }\">{{ node.name\r\n }}\r\n </span>\r\n </mat-checkbox>\r\n </ng-template>\r\n</div>\r\n",
362
- styles: ["@charset \"UTF-8\";@font-face{font-family:icomoon;src:url(../assets/fonts/icomoon.eot?aghldx);src:url(../assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(../assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(../assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(../assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class*=\" icon-\"],[class^=icon-]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\uE91B\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\uE922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\uE923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\uE924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\uE925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\uE926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\uE927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\uE928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\uE929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\uE92A\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\uE92B\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\uE92C\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\uE92D\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\uE92E\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\uE92F\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\uE930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\uE931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\uE932\"}.icon-add-tooltip:before{content:\"\uE933\"}.icon-admin:before{content:\"\uE934\"}.icon-annual-cycle:before{content:\"\uE935\"}.icon-assignment-repete:before{content:\"\uE936\"}.icon-barrier-add:before{content:\"\uE937\"}.icon-barrier-edit:before{content:\"\uE938\"}.icon-barrier-view:before{content:\"\uE939\"}.icon-button-group:before{content:\"\uE93A\"}.icon-chemical-manager:before{content:\"\uE93B\"}.icon-chronic-health-hazard .path1:before{content:\"\uE93C\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\uE93D\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\uE93E\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\uE93F\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\uE940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\uE941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\uE942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\uE943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\uE944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\uE945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\uE946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\uE947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\uE948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\uE949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\uE94A\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\uE94B\"}.icon-corrosive .path1:before{content:\"\uE94C\";color:#323232}.icon-corrosive .path2:before{content:\"\uE94D\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\uE94E\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\uE94F\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\uE950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\uE951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\uE952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\uE953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\uE954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\uE955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\uE956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\uE957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\uE958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\uE959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\uE95A\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\uE95B\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\uE95C\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\uE95D\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\uE95E\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\uE95F\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\uE960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\uE961\"}.icon-database-sds:before{content:\"\uE962\"}.icon-description-add:before{content:\"\uE963\"}.icon-description-edit:before{content:\"\uE964\"}.icon-description-view:before{content:\"\uE965\";color:#666}.icon-document-read .path1:before{content:\"\uE966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\uE967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\uE968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\uE969\"}.icon-expired-off:before{content:\"\uE96A\"}.icon-expired-on:before{content:\"\uE96B\"}.icon-explosive .path1:before{content:\"\uE96C\";color:#e32730}.icon-explosive .path2:before{content:\"\uE96D\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\uE96E\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\uE96F\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\uE970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\uE971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\uE972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\uE973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\uE974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\uE975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\uE976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\uE977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\uE978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\uE979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\uE97A\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\uE97B\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\uE97C\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\uE97D\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\uE97E\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\uE97F\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\uE980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\uE981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\uE982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\uE983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\uE984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\uE985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\uE986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\uE987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\uE988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\uE989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\uE98A\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\uE98B\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\uE98C\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\uE98D\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\uE98E\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\uE98F\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\uE990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\uE991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\uE992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\uE993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\uE994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\uE995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\uE996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\uE997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\uE998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\uE999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\uE99A\"}.icon-file-pdf:before{content:\"\uE99B\"}.icon-file-pdf-verified .path1:before{content:\"\uE99C\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\uE99D\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\uE99E\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\uE99F\"}.icon-filter-alt:before{content:\"\uE9A0\"}.icon-flammable .path1:before{content:\"\uE9A1\";color:#323232}.icon-flammable .path2:before{content:\"\uE9A2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\uE9A3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\uE9A4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\uE9A5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\uE9A6\";color:#323232}.icon-health-hazard .path2:before{content:\"\uE9A7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\uE9A8\"}.icon-location:before{content:\"\uE9A9\"}.icon-measure-add:before{content:\"\uE9AA\"}.icon-measure-edit:before{content:\"\uE9AB\"}.icon-measure-view:before{content:\"\uE9AC\";color:#666}.icon-messages:before{content:\"\uE9AD\"}.icon-monitoring:before{content:\"\uE9AE\";color:#666}.icon-move:before{content:\"\uE9AF\"}.icon-oxidizing .path1:before{content:\"\uE9B0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\uE9B1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\uE9B2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\uE9B3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\uE9B4\"}.icon-process-area-open:before{content:\"\uE9B5\"}.icon-process-linked .path1:before{content:\"\uE9B6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\uE9B7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\uE9B8\"}.icon-search-in-file:before{content:\"\uE9B9\"}.icon-sort-ascending:before{content:\"\uE9BA\"}.icon-sort-descending:before{content:\"\uE9BB\"}.icon-subscript:before{content:\"\uE9BC\"}.icon-superscript:before{content:\"\uE9BD\"}.icon-syncronice-favorites:before{content:\"\uE9BE\"}.icon-system-settings:before{content:\"\uE9BF\"}.icon-view-three-outlined:before{content:\"\uE9C0\"}.icon-workplace-safety:before{content:\"\uE9C1\"}.icon-checklist:before{content:\"\uE900\"}.icon-department-document .path1:before{content:\"\uE901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\uE902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\uE903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\uE904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\uE905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\uE906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\uE907\"}.icon-dropdown-folder .path1:before{content:\"\uE908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\uE909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\uE90A\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\uE90B\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\uE90C\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\uE90D\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\uE90E\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\uE90F\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\uE910\"}.icon-folder-open:before{content:\"\uE911\"}.icon-keyboard_arrow_down:before{content:\"\uE912\"}.icon-keyboard_arrow_up:before{content:\"\uE913\"}.icon-local-document .path1:before{content:\"\uE914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\uE915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\uE916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\uE917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\uE918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\uE919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\uE91A\"}.icon-regional-document .path1:before{content:\"\uE91C\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\uE91D\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\uE91E\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\uE91F\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\uE920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\uE921\";margin-left:-1em;color:#662e0d}.qms-select-department-tree-container .mr10{margin-right:10px}.qms-select-department-tree-container .mt5{margin-bottom:5px}.qms-select-department-tree-container .mb5{margin-top:5px}.qms-select-department-tree-container .w100{width:100%}.qms-select-department-tree-container .text-right{text-align:right}.qms-select-department-tree-container .mt20{margin-top:20px}.qms-select-department-tree-container .text-selected{color:rgba(0,0,0,.6);font-size:12px;line-height:16px;margin-top:1rem}.qms-select-department-tree-container .input__field{display:flex;align-items:center;position:relative}.qms-select-department-tree-container .input__field input.input-search{width:100%;padding:10px;outline:none;border:none;background:var(--background-input-text)}.qms-select-department-tree-container .input__field .btn-search{cursor:pointer;vertical-align:middle;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.qms-select-department-tree-container .input__field .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qms-select-department-tree-container .tree-department-wrapper{height:375px;overflow-y:auto}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node:hover{background:rgba(0,0,0,.08)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node:active{background:rgba(0,0,0,.12)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active{color:var(--primary);background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active .text-name,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active button,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active .text-name,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active button{color:var(--primary)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active:hover{background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node .text-name,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node button{color:var(--primary)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node:hover{background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .type-icon{margin-right:5px;color:var(--ws-action-active)}.qms-select-department-tree-container .mat-tree.select-department-tree .text-name{color:var(--default-color)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-icon-rtl-mirror{color:rgba(0,0,0,.6)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-icon-button.btn-toggle{width:35px;height:35px;line-height:35px}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all{cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all button.mat-button-disabled{color:rgba(0,0,0,.38)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all .text-name.disabled{color:rgba(0,0,0,.38);cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all.active{background-color:transparent}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled button.mat-button-disabled{color:rgba(0,0,0,.38)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled .text-name.disabled{color:rgba(0,0,0,.38);cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled.active,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled.expand-node:active,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled.expand-node:hover,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled:active,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled:hover{background-color:transparent}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node>.node-content-wraper{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;position:relative;display:flex;justify-content:center;align-items:center}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node>.node-content-wraper>.mat-progress-bar{height:3px;width:100%;position:absolute;bottom:0;left:10px}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node>.node-content-wraper>.mat-progress-bar .mat-progress-bar-fill:after{background:var(--primary)}.qms-select-department-tree-container .text-name{position:relative;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;cursor:pointer;width:100%}.qms-select-department-tree-container .cursor-pointer{cursor:pointer}.qms-select-department-tree-container .ml-5{margin-left:10px}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .mat-checkbox-layout{white-space:normal}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .mat-checkbox-label{flex-direction:row;align-items:center;position:relative;padding-bottom:2px}"]
574
+ template: "<div class=\"qms-select-department-tree-container\">\r\n <div class=\"input-select-department\">\r\n <form (ngSubmit)=\"onSearch()\" *ngIf=\"enableTreeSearch\" class=\"input__field\">\r\n <mat-form-field class=\"w100\" qms-form qms-search-field>\r\n <input [formControl]=\"formSearchControl\" type=\"text\" placeholder=\"Search\" matInput />\r\n <button type=\"submit\" qms-btn-icon color=\"light\" matSuffix>\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <button qms-btn-icon color=\"light\" [@inOutAnimation] *ngIf=\"!!formSearchControl.value\" matSuffix\r\n aria-label=\"Clear\" (click)=\"formSearchControl.reset()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </form>\r\n\r\n <div [class.justify-content-between]=\"enableIncludeChild\" class=\"select__toggle-include toggle-include-child mt-1 d-flex justify-content-end align-items-center\">\r\n <mat-slide-toggle *ngIf=\"enableIncludeChild\" [disabled]=\"indexView === 1\"\r\n [(ngModel)]=\"treeDataSourceConfig.includeChildren\" (ngModelChange)=\"onSlideToggleChange()\" color=\"default\"\r\n qms-group-options>\r\n <span class=\"text-label\">{{LANG.SELECT_INCLUDE_CHILD}}</span>\r\n </mat-slide-toggle>\r\n <button [@inOutAnimation] *ngIf=\"indexView === 1 && enableTreeSearch\" (click)=\"setIndexView(0)\" qms-btn-icon\r\n color=\"light\" [qms-tool-tip]=\"LANG.BACK_TO_TREE\" mode=\"dark\" position=\"top\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button [@inOutAnimation] *ngIf=\"indexView === 0 && enableTreeSearch\" (click)=\"setIndexView(1)\" qms-btn-icon\r\n color=\"light\" [qms-tool-tip]=\"LANG.GOTO_SEACH_RESULT\" mode=\"dark\" position=\"top\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <mat-divider class=\"mx-auto\"></mat-divider>\r\n <div [@animateSlideView]=\"indexView\" class=\"tree-department-wrapper\">\r\n <mat-tree *ngIf=\"indexView === 0\" class=\"select-department-tree\" [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node [@triggerColor]=\"activeNode == node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle\r\n matTreeNodePadding [ngClass]=\"{\r\n 'mat-tree-node-disabled-all': node.disabled\r\n }\">\r\n <button class=\"btn-toggle\" qms-btn-icon color=\"light\" disabled></button>\r\n <ng-container [ngTemplateOutlet]=\"showCheckboxTemplate\" [ngTemplateOutletContext]=\"{ node: node }\">\r\n </ng-container>\r\n </mat-tree-node>\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-tree-node [@triggerColor]=\"activeNode == node.id\" *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding [ngClass]=\"{\r\n 'expand-node': treeControl.isExpanded(node),\r\n 'collapse-node': !treeControl.isExpanded(node),\r\n 'mat-tree-node-disabled': node.disabled\r\n }\">\r\n <div class=\"node-content-wraper\">\r\n <button class=\"btn-toggle\" qms-btn-icon color=\"light\" (click)=\"onExpandNode(node)\" matTreeNodeToggle>\r\n <mat-icon>\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n <ng-container [ngTemplateOutlet]=\"showCheckboxTemplate\r\n \" [ngTemplateOutletContext]=\"{ node: node }\"></ng-container>\r\n <mat-progress-bar *ngIf=\"false\" mode=\"indeterminate\" class=\"example-tree-progress-bar\">\r\n </mat-progress-bar>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"indexView === 1\" class=\"qms-view-search-result\">\r\n <div class=\"\">\r\n <mat-checkbox *ngIf=\"!!resultSearch.length\" [disabled]=\"!resultSearch.length || isSelectOne\" #checkAllSearch [indeterminate]=\"indeterminateSearchResult\"\r\n [checked]=\"isSelectAllResultSearch\" qms-group-options color=\"default\" label=\"none\"\r\n (click)=\"!isSelectOne && onSelectAllSearchResult(checkAllSearch.checked)\">\r\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}</span>\r\n </mat-checkbox>\r\n </div>\r\n <div [class.active-paging]=\"resultSearch.length > 10 && enablePagingSearch\" class=\"result\">\r\n <div *ngFor=\"let item of (enablePagingSearch ? pagingResultSearch : resultSearch)\"\r\n (click)=\"$event.stopPropagation();onClickResultItem(item)\"\r\n [class.active]=\"checkListSelectionSearch.isSelected(item)\" class=\"result-item user-select-none\" matRipple>\r\n <mat-checkbox [disabled]=\"item.disabled\" (click)=\"$event.stopImmediatePropagation(); !item.disabled && onCheckItemSearchResult(item)\"\r\n [checked]=\"checkListSelectionSearch.isSelected(item)\" qms-group-options color=\"default\" label=\"none\">\r\n </mat-checkbox>\r\n <div class=\"item-result-content-wraper\">\r\n <div class=\"text-gray fw-bold fs-base mb0\">{{item.name}}</div>\r\n <qms-breadcrumb [numDisplayItem]=\"6\" (onItemClick)=\"onBreadCrumbItemClick($event)\" *ngIf=\"item.path.length > 1\"\r\n class=\"breadcrumb-container\" [nodes]=\"item.path\">\r\n </qms-breadcrumb>\r\n\r\n <div *ngIf=\"item.path.length === 1\" class=\"d-flex align-items-center\">\r\n <!-- <mat-icon class=\"me-1\">arrow_right</mat-icon> -->\r\n <span class=\"item-breadcrumb-disable\">{{item.path[0].name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-divider *ngIf=\"resultSearch.length > 10 && enablePagingSearch\" class=\"mx-auto\"></mat-divider>\r\n <qms-paginator *ngIf=\"resultSearch.length > 10 && enablePagingSearch\" [length]=\"resultSearch.length\"\r\n [numHidden]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 100]\" (page)='onPagingSearchResult($event)'\r\n [size]='PAGINATION_SIZE.medium'>\r\n </qms-paginator>\r\n </div>\r\n </div>\r\n\r\n <!-- Template for Checkbox -->\r\n <ng-template #showCheckboxTemplate let-node=\"node\">\r\n <mat-checkbox [id]=\"'node-'+node.id\" qms-group-options color=\"default\" label=\"none\" class=\"flex-direction-row\"\r\n [checked]=\"checkListSelection.isSelected(node)\" (click)=\"onCheckNode(node)\" [attr.disabled]=\"node.disabled\">\r\n <img *ngIf=\"node.itemIconSvg\" class=\"material-icons type-icon\" [src]=\"node.itemIconSvg\" />\r\n <span *ngIf=\"node.itemIcon\" [class]=\"node.itemIcon\" [qmsTransformIcon]=\"node.itemIcon\"\r\n class=\"material-icons-outlined type-icon\"></span>\r\n <span *ngIf=\"node.itemMatIcon\" class=\"material-icons-outlined type-icon\">{{\r\n node.itemMatIcon }}\r\n </span>\r\n <span class=\"text-name cursor-pointer ml5 123\" [ngClass]=\"{ disabled: node.disabled }\">{{ node.name\r\n }}\r\n </span>\r\n </mat-checkbox>\r\n </ng-template>\r\n</div>\r\n",
575
+ animations: [
576
+ AnimationTreeDepartment
577
+ ],
578
+ styles: ["@charset \"UTF-8\";@font-face{font-family:icomoon;src:url(../assets/fonts/icomoon.eot?aghldx);src:url(../assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(../assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(../assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(../assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class^=icon-]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\uE91B\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\uE922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\uE923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\uE924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\uE925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\uE926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\uE927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\uE928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\uE929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\uE92A\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\uE92B\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\uE92C\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\uE92D\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\uE92E\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\uE92F\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\uE930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\uE931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\uE932\"}.icon-add-tooltip:before{content:\"\uE933\"}.icon-admin:before{content:\"\uE934\"}.icon-annual-cycle:before{content:\"\uE935\"}.icon-assignment-repete:before{content:\"\uE936\"}.icon-barrier-add:before{content:\"\uE937\"}.icon-barrier-edit:before{content:\"\uE938\"}.icon-barrier-view:before{content:\"\uE939\"}.icon-button-group:before{content:\"\uE93A\"}.icon-chemical-manager:before{content:\"\uE93B\"}.icon-chronic-health-hazard .path1:before{content:\"\uE93C\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\uE93D\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\uE93E\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\uE93F\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\uE940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\uE941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\uE942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\uE943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\uE944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\uE945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\uE946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\uE947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\uE948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\uE949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\uE94A\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\uE94B\"}.icon-corrosive .path1:before{content:\"\uE94C\";color:#323232}.icon-corrosive .path2:before{content:\"\uE94D\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\uE94E\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\uE94F\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\uE950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\uE951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\uE952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\uE953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\uE954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\uE955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\uE956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\uE957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\uE958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\uE959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\uE95A\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\uE95B\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\uE95C\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\uE95D\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\uE95E\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\uE95F\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\uE960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\uE961\"}.icon-database-sds:before{content:\"\uE962\"}.icon-description-add:before{content:\"\uE963\"}.icon-description-edit:before{content:\"\uE964\"}.icon-description-view:before{content:\"\uE965\";color:#666}.icon-document-read .path1:before{content:\"\uE966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\uE967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\uE968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\uE969\"}.icon-expired-off:before{content:\"\uE96A\"}.icon-expired-on:before{content:\"\uE96B\"}.icon-explosive .path1:before{content:\"\uE96C\";color:#e32730}.icon-explosive .path2:before{content:\"\uE96D\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\uE96E\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\uE96F\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\uE970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\uE971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\uE972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\uE973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\uE974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\uE975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\uE976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\uE977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\uE978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\uE979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\uE97A\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\uE97B\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\uE97C\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\uE97D\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\uE97E\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\uE97F\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\uE980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\uE981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\uE982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\uE983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\uE984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\uE985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\uE986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\uE987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\uE988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\uE989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\uE98A\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\uE98B\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\uE98C\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\uE98D\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\uE98E\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\uE98F\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\uE990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\uE991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\uE992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\uE993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\uE994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\uE995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\uE996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\uE997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\uE998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\uE999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\uE99A\"}.icon-file-pdf:before{content:\"\uE99B\"}.icon-file-pdf-verified .path1:before{content:\"\uE99C\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\uE99D\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\uE99E\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\uE99F\"}.icon-filter-alt:before{content:\"\uE9A0\"}.icon-flammable .path1:before{content:\"\uE9A1\";color:#323232}.icon-flammable .path2:before{content:\"\uE9A2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\uE9A3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\uE9A4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\uE9A5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\uE9A6\";color:#323232}.icon-health-hazard .path2:before{content:\"\uE9A7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\uE9A8\"}.icon-location:before{content:\"\uE9A9\"}.icon-measure-add:before{content:\"\uE9AA\"}.icon-measure-edit:before{content:\"\uE9AB\"}.icon-measure-view:before{content:\"\uE9AC\";color:#666}.icon-messages:before{content:\"\uE9AD\"}.icon-monitoring:before{content:\"\uE9AE\";color:#666}.icon-move:before{content:\"\uE9AF\"}.icon-oxidizing .path1:before{content:\"\uE9B0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\uE9B1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\uE9B2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\uE9B3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\uE9B4\"}.icon-process-area-open:before{content:\"\uE9B5\"}.icon-process-linked .path1:before{content:\"\uE9B6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\uE9B7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\uE9B8\"}.icon-search-in-file:before{content:\"\uE9B9\"}.icon-sort-ascending:before{content:\"\uE9BA\"}.icon-sort-descending:before{content:\"\uE9BB\"}.icon-subscript:before{content:\"\uE9BC\"}.icon-superscript:before{content:\"\uE9BD\"}.icon-syncronice-favorites:before{content:\"\uE9BE\"}.icon-system-settings:before{content:\"\uE9BF\"}.icon-view-three-outlined:before{content:\"\uE9C0\"}.icon-workplace-safety:before{content:\"\uE9C1\"}.icon-checklist:before{content:\"\uE900\"}.icon-department-document .path1:before{content:\"\uE901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\uE902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\uE903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\uE904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\uE905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\uE906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\uE907\"}.icon-dropdown-folder .path1:before{content:\"\uE908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\uE909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\uE90A\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\uE90B\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\uE90C\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\uE90D\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\uE90E\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\uE90F\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\uE910\"}.icon-folder-open:before{content:\"\uE911\"}.icon-keyboard_arrow_down:before{content:\"\uE912\"}.icon-keyboard_arrow_up:before{content:\"\uE913\"}.icon-local-document .path1:before{content:\"\uE914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\uE915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\uE916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\uE917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\uE918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\uE919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\uE91A\"}.icon-regional-document .path1:before{content:\"\uE91C\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\uE91D\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\uE91E\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\uE91F\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\uE920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\uE921\";margin-left:-1em;color:#662e0d}.qms-select-department-tree-container .mr10{margin-right:10px}.qms-select-department-tree-container .mt5{margin-bottom:5px}.qms-select-department-tree-container .mb5{margin-top:5px}.qms-select-department-tree-container .w100{width:100%}.qms-select-department-tree-container .text-right{text-align:right}.qms-select-department-tree-container .mt20{margin-top:20px}.qms-select-department-tree-container .text-selected{color:rgba(0,0,0,.6);font-size:12px;line-height:16px;margin-top:1rem}.qms-select-department-tree-container .input__field{display:flex;align-items:center;position:relative}.qms-select-department-tree-container .input__field input.input-search{width:100%;padding:10px;outline:none;border:none;background:var(--background-input-text)}.qms-select-department-tree-container .input__field .btn-search{cursor:pointer;vertical-align:middle;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.qms-select-department-tree-container .input__field .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qms-select-department-tree-container .tree-department-wrapper{height:375px;padding-right:4px;overflow-y:auto;overflow-x:hidden;position:relative}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node{border-radius:4px}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node:hover{background:rgba(0,0,0,.08)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node:active{background:rgba(0,0,0,.12)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active{color:var(--primary);background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active .text-name,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.active button,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active .text-name,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active button{color:var(--primary)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active:hover{background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.collapse-node.active:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node .text-name,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node button{color:var(--primary)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node:hover{background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.expand-node:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .mat-tree.select-department-tree .type-icon{margin-right:5px;color:var(--ws-action-active)}.qms-select-department-tree-container .mat-tree.select-department-tree .text-name{color:var(--default-color)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-icon-rtl-mirror{color:rgba(0,0,0,.6)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-icon-button.btn-toggle{width:35px;height:35px;line-height:35px}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all{cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all .mat-icon-rtl-mirror,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all button.mat-button-disabled{color:rgba(0,0,0,.38)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all .text-name.disabled{color:rgba(0,0,0,.38);cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled-all.active{background-color:transparent}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled .type-icon,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled button.mat-button-disabled{color:rgba(0,0,0,.38)}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled .text-name.disabled{color:rgba(0,0,0,.38);cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled.active,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled.expand-node:active,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled.expand-node:hover,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled:active,.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node.mat-tree-node-disabled:hover{background-color:transparent}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node>.node-content-wraper{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;position:relative;display:flex;justify-content:center;align-items:center}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node>.node-content-wraper>.mat-progress-bar{height:3px;width:100%;position:absolute;bottom:0;left:10px}.qms-select-department-tree-container .mat-tree.select-department-tree .mat-tree-node>.node-content-wraper>.mat-progress-bar .mat-progress-bar-fill:after{background:var(--primary)}.qms-select-department-tree-container .text-name{position:relative;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;cursor:pointer;width:100%}.qms-select-department-tree-container .cursor-pointer{cursor:pointer}.qms-select-department-tree-container .ml5{margin-left:10px!important}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .mat-checkbox-layout{white-space:normal}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .mat-checkbox-label{flex-direction:row;align-items:center;position:relative;padding-bottom:2px}.qms-select-department-tree-container .qms-view-search-result{height:375px;width:100%}.qms-select-department-tree-container .qms-view-search-result .result{max-height:calc(100% - 44px);overflow-y:auto;margin-bottom:4px;padding-right:4px}.qms-select-department-tree-container .qms-view-search-result .result.active-paging{max-height:calc(100% - 104px)}.qms-select-department-tree-container .qms-view-search-result .result-item{border-radius:4px;display:grid;grid-template-columns:45px 1fr;align-items:center;cursor:pointer;transition:background .3s ease}.qms-select-department-tree-container .qms-view-search-result .result-item:not(:first-child){margin-top:4px!important}.qms-select-department-tree-container .qms-view-search-result .result-item.active,.qms-select-department-tree-container .qms-view-search-result .result-item:hover{background:linear-gradient(0deg,rgba(1,99,178,.12),rgba(1,99,178,.12)),#fff}.qms-select-department-tree-container .qms-view-search-result .result-item .item-result-content-wraper{padding:5px 15px}.qms-select-department-tree-container .qms-view-search-result ::ng-deep .mat-checkbox.qms-group-options{display:flex;height:100%}.qms-select-department-tree-container ::ng-deep .breadcrumb-container{flex-wrap:wrap}.qms-select-department-tree-container ::ng-deep .mat-button-focus-overlay{background-color:transparent}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item{margin:0}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transition:color .3s ease}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text:not(:last-child){max-width:150px!important}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text:not(:last-child):hover{color:var(--primary)}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-icon{display:flex;align-items:center;justify-content:center}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-form-field-wrapper{padding-bottom:0}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container{min-height:40px}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;justify-content:center;align-items:center}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-total-result span{font-weight:600;font-size:13px;color:rgba(0,0,0,.8)}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-paginator-range-actions{margin-bottom:0;grid-column-gap:2px;-moz-column-gap:2px;column-gap:2px}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-paginator-range-actions>.qms-btn-icon{width:30px;height:30px;line-height:30px}.qms-select-department-tree-container ::ng-deep .qms-paginator>.qms-btn-icon-wrapper{width:30px;height:30px;display:flex;justify-content:center;align-items:center}.qms-select-department-tree-container ::ng-deep .qms-paginator .qms-paginator-page-size{margin-right:12px;height:100%;display:flex;align-items:center;justify-content:center}.qms-select-department-tree-container ::ng-deep .qms-paginator .qms-paginator-page-size>.qms-form-page-size .mat-form-field-flex{width:60px;height:30px;display:flex;align-items:center;padding:0 4px}.qms-select-department-tree-container ::ng-deep .qms-paginator .qms-paginator-page-size>.qms-form-page-size .mat-form-field-flex .mat-form-field-infix{height:30px}.qms-select-department-tree-container ::ng-deep .qms-paginator .qms-paginator-page-size>.qms-pagesize-label{display:none}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-form-field.qms-form .mat-select-min-line,.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-form-field.qms-form mat-select-trigger{font-size:14px}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-select-value{text-align:center}.qms-select-department-tree-container .text-gray{color:#242424}.qms-select-department-tree-container .mb0{margin-bottom:0!important}.qms-select-department-tree-container .fs-base{font-size:14px!important}.qms-select-department-tree-container .user-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .item-breadcrumb-disable{cursor:not-allowed;color:rgba(0,0,0,.6);font-weight:400;font-size:14px}"]
363
579
  },] }
364
580
  ];
365
581
  SelectDepartmentTreeComponent.ctorParameters = () => [
366
- { type: QMSSelectDepartmentTreeGlobalService },
367
582
  { type: ChangeDetectorRef },
368
583
  { type: DomSanitizer },
369
584
  { type: QMSIconRegistryService },
370
585
  { type: MatIconRegistry },
371
- { type: ElementRef }
586
+ { type: ElementRef },
587
+ { type: TranslateLibraryService }
372
588
  ];
373
589
  SelectDepartmentTreeComponent.propDecorators = {
374
590
  enableIncludeChild: [{ type: Input }],
375
591
  enableTreeSearch: [{ type: Input }],
592
+ isSelectOne: [{ type: Input }],
593
+ activeViewSearch: [{ type: Input }],
376
594
  treeData: [{ type: Input }],
377
- selectedList: [{ type: Input }]
595
+ selectedList: [{ type: Input }],
596
+ checkSearchMappingTree: [{ type: Input }],
597
+ enablePagingSearch: [{ type: Input }],
598
+ onSearchEvent: [{ type: Output }],
599
+ onPagingSearchEvent: [{ type: Output }],
600
+ onValueChangeEvent: [{ type: Output }]
378
601
  };
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQU92RyxNQUFNLE9B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U0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUcsQ0FBQzs7O1lBL1lGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsNEJBQTRCO2dCQUN0Qyxtb0hBQXNEOzthQUV2RDs7O1lBTlEsb0NBQW9DO1lBWnBDLGlCQUFpQjtZQUlqQixZQUFZO1lBS1osc0JBQXNCO1lBUHRCLGVBQWU7WUFGZSxVQUFVOzs7aUNBcUI5QyxLQUFLOytCQUNMLEtBQUs7dUJBRUwsS0FBSzsyQkFJTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFFNU0ZsYXROb2RlVHJlZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWZsYXQtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1RyZWVOb2RlIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtdHJlZS1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TSWNvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uL2FwcC1pY29uL2ljb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IEl0ZW1JY29uVHlwZSB9IGZyb20gJy4uL3JlbGF0ZWQvY29tbW9uL2l0ZW0taWNvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZyB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb25maWcnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2Uvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS1nbG9iYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Ftcy1zZWxlY3QtZGVwYXJ0bWVudC10cmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3REZXBhcnRtZW50VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGVuYWJsZUluY2x1ZGVDaGlsZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVuYWJsZVRyZWVTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0cmVlRGF0YVNvdXJjZUNvbmZpZyA9IG5ldyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZygpO1xyXG4gIEBJbnB1dCgpIHNldCB0cmVlRGF0YSh2YWx1ZTogUU1TVHJlZU5vZGVbXSkge1xyXG4gICAgdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy50cmVlRGF0YSA9IHZhbHVlIHx8IFtdO1xyXG4gICAgdGhpcy5zZWxlY3REZXBhcnRtZW50U2VydmljZS51cGRhdGVEYXRhVHJlZSh0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnRyZWVEYXRhKTtcclxuICB9XHJcbiAgQElucHV0KCkgc2V0IHNlbGVjdGVkTGlzdCh2YWx1ZTogUU1TVHJlZU5vZGVbXSkge1xyXG4gICAgdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5zZWxlY3RlZExpc3QgPSB2YWx1ZSB8fCBbXTtcclxuICB9XHJcbiAgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgaXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgZ3JvdXBJbmNsdWRlQ2hpbGQ6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuICBzaW5nbGVJdGVtOiBRTVNUcmVlTm9kZVtdID0gW107XHJcbiAgcmVzdWx0U2VsZWN0ZWQ6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuXHJcbiAgZ2V0IGN1cnJlbnRUcmVlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdERlcGFydG1lbnRTZXJ2aWNlLmdldERhdGFUcmVlJC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHZhbHVlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFFNU1RyZWVOb2RlW10+KCk7XHJcblxyXG4gIHRleHRTZWFyY2ggPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gIG9uU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICByZXN1bHRTZWFyY2g6IFFNU0ZsYXROb2RlVHJlZVtdID0gW107XHJcblxyXG4gIGFjdGl2ZU5vZGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBuZXN0ZWRUcmVlTm9kZU1hcCA9IG5ldyBNYXA8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT4oKTtcclxuICBmbGF0VHJlZU5vZGVNYXAgPSBuZXcgTWFwPFFNU0ZsYXROb2RlVHJlZSwgUU1TVHJlZU5vZGU+KCk7XHJcbiAgY2hlY2tMaXN0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFFNU0ZsYXROb2RlVHJlZT4odHJ1ZSk7XHJcbiAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxRTVNGbGF0Tm9kZVRyZWU+O1xyXG4gIHRyZWVGbGF0dGVuZXI6IE1hdFRyZWVGbGF0dGVuZXI8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XHJcbiAgZGF0YVNvdXJjZTogTWF0VHJlZUZsYXREYXRhU291cmNlPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xyXG5cclxuICBpc1Nob3dUcmVlU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGF0YVNvdXJjZVRyZWVTZWFyY2g6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcclxuXHJcbiAgaXRlbUljb25UeXBlID0gSXRlbUljb25UeXBlXHJcbiAgX3RyYW5zZm9ybWVyID0gKG5vZGU6IFFNU1RyZWVOb2RlLCBsZXZlbDogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuX2NvbnZlcnRUb0ZsYXROb2RlKG5vZGUpIHx8IG5ldyBRTVNGbGF0Tm9kZVRyZWUoKTtcclxuICAgIGZsYXROb2RlLmlkID0gbm9kZS5pZDtcclxuICAgIGZsYXROb2RlLm5hbWUgPSBub2RlLm5hbWU7XHJcbiAgICBmbGF0Tm9kZS5leHBhbmRhYmxlID0gKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB8fCAoISFub2RlLmNoaWxkQ291bnQpO1xyXG4gICAgZmxhdE5vZGUubGV2ZWwgPSBsZXZlbDtcclxuICAgIGZsYXROb2RlLnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcclxuICAgIGZsYXROb2RlLm1hcmtlZEdldENoaWxkcmVuID0gISFub2RlLmNoaWxkcmVuPy5sZW5ndGg7XHJcbiAgICBmbGF0Tm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XHJcbiAgICBmbGF0Tm9kZS5pdGVtSWNvblN2ZyA9IG5vZGUuaXRlbUljb25Tdmc7XHJcbiAgICBmbGF0Tm9kZS5pc0ZpbGUgPSBub2RlLmlzRmlsZTtcclxuICAgIGZsYXROb2RlLmRpc2FibGVkID0gbm9kZS5kaXNhYmxlZDtcclxuICAgIHRoaXMuZmxhdFRyZWVOb2RlTWFwLnNldChmbGF0Tm9kZSwgbm9kZSk7XHJcbiAgICB0aGlzLm5lc3RlZFRyZWVOb2RlTWFwLnNldChub2RlLCBmbGF0Tm9kZSk7XHJcbiAgICByZXR1cm4gZmxhdE5vZGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExldmVsID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZT8ubGV2ZWw7XHJcbiAgcHJpdmF0ZSBfZ2V0Q2hpbGQgPSAobm9kZTogUU1TVHJlZU5vZGUpID0+IG5vZGUuY2hpbGRyZW47XHJcbiAgcHJpdmF0ZSBpc0V4cGFuZGFibGUgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XHJcbiAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGUuZXhwYW5kYWJsZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc2VsZWN0RGVwYXJ0bWVudFNlcnZpY2U6IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlR2xvYmFsU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxyXG4gICAgcHJpdmF0ZSBlbGVSZWY6IEVsZW1lbnRSZWZcclxuICApIHtcclxuICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPFFNU0ZsYXROb2RlVHJlZT4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xyXG4gICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIodGhpcy5fdHJhbnNmb3JtZXIsIHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlLCB0aGlzLl9nZXRDaGlsZCk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcblxyXG4gICAgLy8gSW5pdCB0cmVlIGRhdGFcclxuICAgIHRoaXMuc2VsZWN0RGVwYXJ0bWVudFNlcnZpY2UuZ2V0RGF0YVRyZWUkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuICAgICAgfSk7XHJcbiAgICAvLyBSZWdpc3RlciBpY29uXHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRG9jdW1lbnRJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJDaGVja2xpc3RJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUmlza0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG5cclxuXHJcbiAgICB0aGlzLnRleHRTZWFyY2gudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgdGhpcy5vblNlYXJjaEV2ZW50LmVtaXQocmVzdWx0KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0RGVwYXJ0bWVudFNlcnZpY2Uuc2VhcmNoRGVwYXJ0bWVudCRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaCA9IHJlc3VsdDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2luaXRUcmVlRGF0YSgpXHJcbiAgICB0aGlzLl9pbml0Q2hlY2tMaXN0U2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFRyZWVEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcudHJlZURhdGEubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy50cmVlRGF0YS5maWx0ZXIoaXRlbSA9PiAraXRlbS5wYXJlbnRJZCA9PT0gMClcclxuICAgICAgICAubWFwKChpdGVtLCBfaW5kZXgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5vZGUgPSB7XHJcbiAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgIG1hcmtlZEdldENoaWxkcmVuOiBpdGVtLm1hcmtlZEdldENoaWxkcmVuLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLmRpc2FibGVkTGlzdC5pbmNsdWRlcyhpdGVtLmlkKSxcclxuICAgICAgICAgICAgaXRlbUljb246IGl0ZW0uaXRlbUljb24sXHJcbiAgICAgICAgICAgIGl0ZW1NYXRJY29uOiBpdGVtLml0ZW1NYXRJY29uLFxyXG4gICAgICAgICAgICBpdGVtSWNvblN2ZzogaXRlbS5pdGVtSWNvblN2Z1xyXG4gICAgICAgICAgfSBhcyBRTVNUcmVlTm9kZVxyXG4gICAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0RGVwYXJ0bWVudFNlcnZpY2UudXBkYXRlRGF0YVRyZWUocm9vdE5vZGUpO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXBSZXN1bHQgPSB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnRyZWVEYXRhLnJlZHVjZSgocmVzdWx0LCBjdXJyZW50VmFsdWUpID0+IHtcclxuICAgICAgICAocmVzdWx0W2N1cnJlbnRWYWx1ZVsncGFyZW50SWQnXV0gPSByZXN1bHRbY3VycmVudFZhbHVlWydwYXJlbnRJZCddXSB8fCBbXSkucHVzaChcclxuICAgICAgICAgIGN1cnJlbnRWYWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSwge30pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXBSZXN1bHRLZXkgPSBPYmplY3Qua2V5cyhncm91cFJlc3VsdCk7XHJcbiAgICAgIHdoaWxlICh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIobm9kZSA9PiBub2RlLmV4cGFuZGFibGUpLmV2ZXJ5KG5vZGUgPT4gIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4pKSB7XHJcbiAgICAgICAgZ3JvdXBSZXN1bHRLZXkuZm9yRWFjaCgoa2V5LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50RmxhdE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0ga2V5KTtcclxuICAgICAgICAgIGlmIChwYXJlbnRGbGF0Tm9kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnROZXN0ZWROb2RlID0gdGhpcy5fY29udmVydFRvTmVzdGVkTm9kZShwYXJlbnRGbGF0Tm9kZSk7XHJcbiAgICAgICAgICAgIHBhcmVudE5lc3RlZE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICBwYXJlbnROZXN0ZWROb2RlLmNoaWxkcmVuID0gZ3JvdXBSZXN1bHRba2V5XTtcclxuICAgICAgICAgICAgcGFyZW50TmVzdGVkTm9kZS5jaGlsZENvdW50ID0gcGFyZW50TmVzdGVkTm9kZS5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVwYXJ0bWVudFNlcnZpY2UudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdENoZWNrTGlzdFNlbGVjdGVkKCkge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnNlbGVjdGVkTGlzdC5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuZ3JvdXBJbmNsdWRlQ2hpbGQgPSB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnNlbGVjdGVkTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLmNoaWxkcmVuKTtcclxuICAgIHRoaXMuc2luZ2xlSXRlbSA9IHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuc2VsZWN0ZWRMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0uY2hpbGRyZW4gPT09IG51bGwpO1xyXG4gICAgdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5zZWxlY3RlZExpc3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgIGlmIChmbGF0Tm9kZSkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XHJcbiAgICAgICAgaXRlbS5jaGlsZHJlbj8ubGVuZ3RoICYmIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChfeCA9PiBfeC5pZCA9PT0gY2hpbGQuaWQpO1xyXG4gICAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uRXhwYW5kQWxsUGFyZW50KG5vZGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5vbkV4cGFuZEFsbFBhcmVudChmbGF0Tm9kZSk7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFsuLi50aGlzLnNpbmdsZUl0ZW0sIC4uLiB0aGlzLmdyb3VwSW5jbHVkZUNoaWxkXTtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlJC5uZXh0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuXHJcbiAgfVxyXG5cclxuICBvbk9wdGlvblNlYXJjaFNlbGVjdGVkKHZhbHVlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IHZhbHVlLmlkKTtcclxuICAgIGlmICghZmxhdE5vZGUpIHJldHVybjtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XHJcbiAgICB0aGlzLl9oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5zY3JvbGxJbnRvTm9kZShmbGF0Tm9kZS5pZCk7XHJcbiAgfVxyXG5cclxuICBvblNsaWRlVG9nZ2xlQ2hhbmdlKCkge1xyXG5cclxuICB9XHJcblxyXG4gIGRpc3BsYXlXaGVuU2VsZWN0RGVwYXJ0bWVudE9wdGlvbigkZXZlbnQ6IGFueSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgb25DaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XHJcbiAgICB0aGlzLl9oYW5kbGVDaGVja05vZGUobm9kZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlJC5uZXh0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgb25FeHBhbmRBbGxQYXJlbnQobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBwYXJlbnRzID0gdGhpcy5fZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIGlmICghIXBhcmVudHM/Lmxlbmd0aCkge1xyXG4gICAgICBwYXJlbnRzLmZvckVhY2gocGFyZW50ID0+IHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChwYXJlbnQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlTm9kZShub2RlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gbm9kZUlkKTtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGZsYXROb2RlKTtcclxuICAgIGZsYXROb2RlICYmIHRoaXMuX2hhbmRsZUNoZWNrTm9kZShmbGF0Tm9kZSk7XHJcbiAgfVxyXG5cclxuICBpc0luZGV0ZXJtaW5hdGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBjaGlsZFNlbGVjdGVkID0gdGhpcy5fZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcihpdGVtID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSkpO1xyXG4gICAgcmV0dXJuICghIWNoaWxkU2VsZWN0ZWQubGVuZ3RoICYmICF0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpKTtcclxuICB9XHJcblxyXG4gIGlzQ2hlY2tBbGwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBsaXN0Q2hlY2sgPSBbLi4udGhpcy5fZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLCBub2RlXTtcclxuICAgIHJldHVybiBsaXN0Q2hlY2suZXZlcnkoaXRlbSA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGlzU2VsZWN0ZWROb2RlID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcclxuICAgIGNvbnN0IGlzT3duZXJHcm91cCA9ICEhdGhpcy5ncm91cEluY2x1ZGVDaGlsZC5maW5kKGdyID0+IGdyPy5pZCA9PT0gbm9kZS5pZCk7XHJcbiAgICBpZiAoaXNTZWxlY3RlZE5vZGUpIHtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLmluY2x1ZGVDaGlsZHJlbiAmJiB0aGlzLl9nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSk7XHJcbiAgICAgIGNoaWxkcmVuICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5jaGlsZHJlbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3QgY2hpbGRTZWxlY3RlZCA9IHRoaXMuX2dldENoaWxkcmVuU2VsZWN0ZWQobm9kZSk7XHJcbiAgICAgIC8vIGNoZWNrIG5vZGUgaXMgb3duZXIgZ3JvdXAgb3IgbW9kZSBpcyAnaW5jbHVkZSBjaGlsZHJlbicgYW5kIHJlbW92ZSBhbGwgY2hpbGRyZW5cclxuICAgICAgKGlzT3duZXJHcm91cCB8fCB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLmluY2x1ZGVDaGlsZHJlbikgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4uY2hpbGRTZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVHcm91cFJlc3VsdChub2RlKTtcclxuICAgIHRoaXMuX3VwZGF0ZVNpbmdsZVJlc3VsdCgpO1xyXG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFsuLi50aGlzLnNpbmdsZUl0ZW0sIC4uLnRoaXMuZ3JvdXBJbmNsdWRlQ2hpbGRdO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgZ3JvdXAgcm9vdCBjb250YWluIG5vZGUgYW5kIHJlLXVwZGF0ZSBjaGlscmVuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlR3JvdXBSZXN1bHQobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5fY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgIGNvbnN0IGV4aXN0ZWRHcm91cCA9IHRoaXMuX2dldEV4aXN0ZWRHcm91cChub2RlKTtcclxuICAgIGNvbnN0IGNoaWxkcmVuU2VsZWN0ZWQgPSB0aGlzLl9tYXBUb05lc3RlZExpc3ROb2RlKHRoaXMuX2dldENoaWxkcmVuU2VsZWN0ZWQodGhpcy5fY29udmVydFRvRmxhdE5vZGUoZXhpc3RlZEdyb3VwKSB8fCBub2RlKSk7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5ncm91cEluY2x1ZGVDaGlsZC5maW5kKGdyID0+IGdyLmlkID09IG5lc3RlZE5vZGUuaWQgfHwgZ3IuaWQgPT09IGV4aXN0ZWRHcm91cD8uaWQpO1xyXG4gICAgaWYgKCEhaXRlbSkge1xyXG4gICAgICBpdGVtLmNoaWxkcmVuID0gY2hpbGRyZW5TZWxlY3RlZDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLmluY2x1ZGVDaGlsZHJlbiAmJiB0aGlzLmdyb3VwSW5jbHVkZUNoaWxkLnB1c2goeyAuLi5uZXN0ZWROb2RlLCBjaGlsZHJlbjogY2hpbGRyZW5TZWxlY3RlZCB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2NoZWNrR3JvdXBTZWxlY3RlZChjaGlsZHJlblNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIHNpbmdsZSBzZWxlY3RlZCByZXN1bHRcclxuICBwcml2YXRlIF91cGRhdGVTaW5nbGVSZXN1bHQoKSB7XHJcbiAgICBsZXQgZXhjbHVkZUNoaWxkT2ZHcm91cCA9IFtdO1xyXG4gICAgdGhpcy5ncm91cEluY2x1ZGVDaGlsZC5mb3JFYWNoKGdyID0+IHtcclxuICAgICAgZXhjbHVkZUNoaWxkT2ZHcm91cCA9IFsuLi5leGNsdWRlQ2hpbGRPZkdyb3VwLCAuLi5nci5jaGlsZHJlbi5tYXAoeCA9PiB4LmlkKV1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2luZ2xlSXRlbSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSk7XHJcbiAgICAgIGNvbnN0IGV4aXN0ZWRHcm91cCA9IHRoaXMuX2dldEV4aXN0ZWRHcm91cChpdGVtKTtcclxuICAgICAgY29uc3QgaXNPd25lckdyb3VwID0gISF0aGlzLmdyb3VwSW5jbHVkZUNoaWxkLmZpbmQoeCA9PiB4Py5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgIHJldHVybiBpc1NlbGVjdGVkICYmICFleGlzdGVkR3JvdXAgJiYgIWlzT3duZXJHcm91cCAmJiAhZXhjbHVkZUNoaWxkT2ZHcm91cC5pbmNsdWRlcyhpdGVtLmlkKTtcclxuICAgIH0pLm1hcChpdGVtID0+IHtcclxuICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuX2NvbnZlcnRUb05lc3RlZE5vZGUoaXRlbSk7XHJcbiAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBudWxsO1xyXG4gICAgICByZXR1cm4gbmVzdGVkTm9kZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hlY2tHcm91cFNlbGVjdGVkKGNoaWxkU2VsZWN0ZWQ6IFFNU1RyZWVOb2RlW10pIHtcclxuICAgIHRoaXMuZ3JvdXBJbmNsdWRlQ2hpbGQgPSB0aGlzLmdyb3VwSW5jbHVkZUNoaWxkLmZpbHRlcihnciA9PiB7XHJcbiAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGdyLmlkKTtcclxuICAgICAgY29uc3QgY2hpbGRTZWxlY3RlZEluR3JvdXAgPSBnci5jaGlsZHJlbi5maWx0ZXIoeCA9PiBjaGlsZFNlbGVjdGVkLmluY2x1ZGVzKHgpKTtcclxuICAgICAgZ3IuY2hpbGRDb3VudCA9IHRoaXMuX2dldExpc3RDaGlsZHJlbk9mTm9kZShmbGF0Tm9kZSkubGVuZ3RoO1xyXG4gICAgICAvLyBpZiBNb2RlIGlzICdpbmNsdWRlIGNoaWxkJyB0aGUgZ3JvdXAgbGlzdCB3aWxsIGZpbHRlciBleGNsdWRlIGFsbCBjaGlsZCBzZWxlY3RlZCAsIG9ydGhlcndpc2UgZmlsdGVyIGV4Y2x1ZGUgYWxsIGNoaWxkIGluIGdyb3VwIHRoYXQgbm9kZSBpcyBjb250YWluZWRcclxuICAgICAgY29uc3QgYXJyQ2hpbGQgPSB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLmluY2x1ZGVDaGlsZHJlbiA/IGNoaWxkU2VsZWN0ZWQgOiBjaGlsZFNlbGVjdGVkSW5Hcm91cDtcclxuICAgICAgcmV0dXJuIGdyLmNoaWxkQ291bnQgPiAwICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoZmxhdE5vZGUpICYmICFhcnJDaGlsZC5maW5kKF94ID0+IF94LmlkID09PSBnci5pZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEV4aXN0ZWRHcm91cChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuX2dldEFsbFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICBjb25zdCBsaXN0R3JvdXBJZHMgPSB0aGlzLmdyb3VwSW5jbHVkZUNoaWxkLm1hcChnciA9PiBnci5pZCk7XHJcbiAgICBsZXQgZXhpc3RlZEdyb3VwO1xyXG4gICAgYWxsUGFyZW50LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGlmIChsaXN0R3JvdXBJZHMuaW5jbHVkZXMoaXRlbS5pZCkpIHtcclxuICAgICAgICBleGlzdGVkR3JvdXAgPSB0aGlzLl9jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIGV4aXN0ZWRHcm91cDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldENoaWxkcmVuU2VsZWN0ZWQobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKHgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldExpc3RDaGlsZHJlbk9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbWFwVG9OZXN0ZWRMaXN0Tm9kZShmbGF0Tm9kZUxpc3Q6IFFNU0ZsYXROb2RlVHJlZVtdKTogUU1TVHJlZU5vZGVbXSB7XHJcbiAgICByZXR1cm4gZmxhdE5vZGVMaXN0Lm1hcChpdGVtID0+IHRoaXMuX2NvbnZlcnRUb05lc3RlZE5vZGUoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29udmVydFRvTmVzdGVkTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIHJldHVybiB0aGlzLmZsYXRUcmVlTm9kZU1hcC5nZXQobm9kZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb252ZXJ0VG9GbGF0Tm9kZShub2RlOiBRTVNUcmVlTm9kZSkge1xyXG4gICAgcmV0dXJuIHRoaXMubmVzdGVkVHJlZU5vZGVNYXAuZ2V0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Um9vdFNlbGVjdGVkKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB7XHJcbiAgICBjb25zdCBwYXJlbnRMaXN0ID0gdGhpcy5fZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIGxldCBncm91cEV4aXN0OiBRTVNGbGF0Tm9kZVRyZWU7XHJcbiAgICBpZiAocGFyZW50TGlzdC5sZW5ndGgpIHtcclxuICAgICAgcGFyZW50TGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGl0ZW0pKSB7XHJcbiAgICAgICAgICBncm91cEV4aXN0ID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwRXhpc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRBbGxQYXJlbnROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZVtdIHtcclxuICAgIGNvbnN0IGxpc3RQYXJlbnQgPSBbXTtcclxuICAgIGxldCBwYXJlbnQgPSB0aGlzLl9nZXRQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICBsaXN0UGFyZW50LnB1c2gocGFyZW50KTtcclxuICAgICAgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpc3RQYXJlbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRQYXJlbnROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB7XHJcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xyXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHJldHVybjtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuaW5kZXhPZihub2RlKSAtIDE7XHJcbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV07XHJcbiAgICAgIGlmICh0aGlzLmdldExldmVsKGN1cnJlbnROb2RlKSA8IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbUljb25UeXBlKGl0ZW06IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgaWYgKCEhaXRlbS5pdGVtTWF0SWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLm5hbWU7XHJcbiAgICBpZiAoISFpdGVtLml0ZW1JY29uU3ZnKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuc3ZnO1xyXG4gICAgaWYgKCEhaXRlbS5pdGVtSWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnBhdGg7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBzY3JvbGxJbnRvTm9kZShub2RlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gbm9kZUlkKTtcclxuICAgIGlmICghbm9kZUlkKSByZXR1cm47XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChmbGF0Tm9kZSk7XHJcbiAgICB0aGlzLm9uRXhwYW5kQWxsUGFyZW50KGZsYXROb2RlKTtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCNub2RlLSR7ZmxhdE5vZGUuaWR9YCkgYXMgRWxlbWVudDtcclxuXHJcbiAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHtcclxuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxyXG4gICAgICBibG9jazogJ2NlbnRlcicsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4cGFuZEFsbEdyb3VwRXhpc3QoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZE5vZGVTdG9yYWdlKCk6IFFNU0ZsYXROb2RlVHJlZSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VsZWN0ZWROb2RlJykpIGFzIFFNU0ZsYXROb2RlVHJlZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWROb2RlU3RvcmFnZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuaW5jbHVkZUNoaWxkcmVuICYmIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWxlY3RlZE5vZGUnLCBKU09OLnN0cmluZ2lmeShub2RlKSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
602
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FB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S2pCLFlBQVk7WUFNWixzQkFBc0I7WUFUdEIsZUFBZTtZQUZlLFVBQVU7WUFVeEMsdUJBQXVCOzs7aUNBb0I3QixLQUFLOytCQUNMLEtBQUs7MEJBQ0wsS0FBSzsrQkFDTCxLQUFLO3VCQUVMLEtBQUs7MkJBSUwsS0FBSztxQ0FHTCxLQUFLO2lDQUNMLEtBQUs7NEJBQ0wsTUFBTTtrQ0FDTixNQUFNO2lDQWNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgb2YsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlbGF5LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUU1TRmxhdE5vZGVUcmVlIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtZmxhdC1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TVHJlZU5vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy10cmVlLW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWljb24vaWNvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNpemUgfSBmcm9tICcuLi9xbXMtcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgSXRlbUljb25UeXBlIH0gZnJvbSAnLi4vcmVsYXRlZC9jb21tb24vaXRlbS1pY29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEFuaW1hdGlvblRyZWVEZXBhcnRtZW50IH0gZnJvbSAnLi9hbmltYXRpb24vYW5pbWF0aW9uJztcclxuaW1wb3J0IHsgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYiwgRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsIH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50LXNlYXJjaC1yZXN1bHQubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZyB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb25maWcnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2Uvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS1nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncW1zLXNlbGVjdC1kZXBhcnRtZW50LXRyZWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczpbXHJcbiAgICBBbmltYXRpb25UcmVlRGVwYXJ0bWVudFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdERlcGFydG1lbnRUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBMQU5HOiBhbnk7XHJcbiAgQElucHV0KCkgZW5hYmxlSW5jbHVkZUNoaWxkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlVHJlZVNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzU2VsZWN0T25lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWN0aXZlVmlld1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRyZWVEYXRhU291cmNlQ29uZmlnID0gbmV3IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnKCk7XHJcbiAgQElucHV0KCkgc2V0IHRyZWVEYXRhKHZhbHVlOiBRTVNUcmVlTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnRyZWVEYXRhID0gdmFsdWUgfHwgW107XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcudHJlZURhdGEpO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgc2VsZWN0ZWRMaXN0KHZhbHVlOiBRTVNUcmVlTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnNlbGVjdGVkTGlzdCA9IHZhbHVlIHx8IFtdO1xyXG4gIH1cclxuICBASW5wdXQoKSBjaGVja1NlYXJjaE1hcHBpbmdUcmVlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBlbmFibGVQYWdpbmdTZWFyY2ggOiBib29sZWFuID0gdHJ1ZTtcclxuICBAT3V0cHV0KCkgb25TZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2luZ1NlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XHJcblxyXG4gIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGlzTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gIHJlc3VsdEdyb3VwU2VsZWN0ZWQ6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuICByZXN1bHRTaW5nbGVTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSA9IFtdO1xyXG4gIHJlc3VsdFNlYXJjaFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XHJcbiAgcmVzdWx0U2VsZWN0ZWQ6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuXHJcbiAgZ2V0IGN1cnJlbnRUcmVlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmdldERhdGFUcmVlJC52YWx1ZTtcclxuICB9XHJcbiAgZ2V0RGF0YVRyZWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNUcmVlTm9kZVtdPihbXSk7XHJcbiAgQE91dHB1dCgpIG9uVmFsdWVDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TVHJlZU5vZGVbXT4oKTtcclxuICBzZWFyY2hEZXBhcnRtZW50JCA9IG5ldyBTdWJqZWN0PFFNU0ZsYXROb2RlVHJlZVtdPigpO1xyXG5cclxuICByZXN1bHRTZWFyY2g6IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbFtdID0gW107XHJcbiAgcGFnaW5nUmVzdWx0U2VhcmNoOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWxbXSA9IFtdO1xyXG4gIGlzU2VsZWN0QWxsUmVzdWx0U2VhcmNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW5kZXRlcm1pbmF0ZVNlYXJjaFJlc3VsdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgY3VycmVudFBhZ2luYXRpb25Db25maWc6IFBhZ2VFdmVudCA9IHtcclxuICAgIHBhZ2VJbmRleDogMCxcclxuICAgIHBhZ2VTaXplOiAxMCxcclxuICAgIGxlbmd0aDogMFxyXG4gIH07XHJcblxyXG4gIGluZGV4VmlldzogbnVtYmVyID0gMDtcclxuICBzY3JvbGxUb05vZGVFdmVudCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgYWN0aXZlTm9kZTogc3RyaW5nID0gJyc7XHJcbiAgZ2V0QWN0aXZlTm9kZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHJcbiAgUEFHSU5BVElPTl9TSVpFID0gUGFnaW5hdGlvblNpemU7XHJcbiAgbmVzdGVkVHJlZU5vZGVNYXAgPSBuZXcgTWFwPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+KCk7XHJcbiAgZmxhdFRyZWVOb2RlTWFwID0gbmV3IE1hcDxRTVNGbGF0Tm9kZVRyZWUsIFFNU1RyZWVOb2RlPigpO1xyXG4gIGNoZWNrTGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxRTVNGbGF0Tm9kZVRyZWU+KHRydWUpO1xyXG4gIGNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWw+KHRydWUpO1xyXG4gIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8UU1TRmxhdE5vZGVUcmVlPjtcclxuICB0cmVlRmxhdHRlbmVyOiBNYXRUcmVlRmxhdHRlbmVyPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcclxuXHJcbiAgZGF0YVNvdXJjZVRyZWVTZWFyY2g6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcclxuXHJcbiAgZm9ybVNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gIGl0ZW1JY29uVHlwZSA9IEl0ZW1JY29uVHlwZTtcclxuICBfdHJhbnNmb3JtZXIgPSAobm9kZTogUU1TVHJlZU5vZGUsIGxldmVsOiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5jb252ZXJ0VG9GbGF0Tm9kZShub2RlKSB8fCBuZXcgUU1TRmxhdE5vZGVUcmVlKCk7XHJcbiAgICBmbGF0Tm9kZS5pZCA9IG5vZGUuaWQ7XHJcbiAgICBmbGF0Tm9kZS5uYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgZmxhdE5vZGUuZXhwYW5kYWJsZSA9IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgKCEhbm9kZS5jaGlsZENvdW50KTtcclxuICAgIGZsYXROb2RlLmxldmVsID0gbGV2ZWw7XHJcbiAgICBmbGF0Tm9kZS5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XHJcbiAgICBmbGF0Tm9kZS5tYXJrZWRHZXRDaGlsZHJlbiA9ICEhbm9kZS5jaGlsZHJlbj8ubGVuZ3RoO1xyXG4gICAgZmxhdE5vZGUuaXRlbUljb24gPSBub2RlLml0ZW1JY29uO1xyXG4gICAgZmxhdE5vZGUuaXRlbUljb25TdmcgPSBub2RlLml0ZW1JY29uU3ZnO1xyXG4gICAgZmxhdE5vZGUuaXNGaWxlID0gbm9kZS5pc0ZpbGU7XHJcbiAgICBmbGF0Tm9kZS5kaXNhYmxlZCA9IG5vZGUuZGlzYWJsZWQ7XHJcbiAgICB0aGlzLmZsYXRUcmVlTm9kZU1hcC5zZXQoZmxhdE5vZGUsIG5vZGUpO1xyXG4gICAgdGhpcy5uZXN0ZWRUcmVlTm9kZU1hcC5zZXQobm9kZSwgZmxhdE5vZGUpO1xyXG4gICAgcmV0dXJuIGZsYXROb2RlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRMZXZlbCA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGU/LmxldmVsO1xyXG4gIHByaXZhdGUgX2dldENoaWxkID0gKG5vZGU6IFFNU1RyZWVOb2RlKSA9PiBub2RlLmNoaWxkcmVuO1xyXG4gIHByaXZhdGUgaXNFeHBhbmRhYmxlID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xyXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIGFwcEljb25TZXJ2aWNlOiBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgIHByaXZhdGUgZWxlUmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHVibGljIHRyYW5zOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8UU1TRmxhdE5vZGVUcmVlPih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XHJcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcih0aGlzLl90cmFuc2Zvcm1lciwgdGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUsIHRoaXMuX2dldENoaWxkKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcclxuICAgIC8vIEluaXQgdHJlZSBkYXRhXHJcbiAgICB0aGlzLmdldERhdGFUcmVlJFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gUmVnaXN0ZXIgaWNvblxyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEZXZpYXRpb25JY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclJpc2tJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuXHJcbiAgICB0aGlzLnRyYW5zLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSgpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaERlcGFydG1lbnQkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTZWFyY2ggPSBbXTtcclxuICAgICAgICB0aGlzLnNldEluZGV4VmlldygxKTtcclxuICAgICAgICBpZihyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCl7XHJcbiAgICAgICAgICByZXN1bHQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IG5vZGUgPyB0aGlzLl9nZXRBbGxQYXJlbnROb2RlKG5vZGUpIDogW107XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U2VhcmNoLnB1c2goe1xyXG4gICAgICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuY2hlY2tTZWFyY2hNYXBwaW5nVHJlZSAmJiAhbm9kZSAsXHJcbiAgICAgICAgICAgICAgcGF0aDogW1xyXG4gICAgICAgICAgICAgICAgLi4uKHBhcmVudHMubWFwKCh4LCBpbmRleCkgPT4oe1xyXG4gICAgICAgICAgICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgfSBhcyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iKSkucmV2ZXJzZSgpIHx8IFtdKSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2luYXRpb25Db25maWcucGFnZUluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgdGhpcy5vblBhZ2luZ1NlYXJjaFJlc3VsdCh0aGlzLmN1cnJlbnRQYWdpbmF0aW9uQ29uZmlnKTtcclxuICAgICAgICB0aGlzLl9tYXBUb1Jlc3VsdFNlYXJjaCgpO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrU3RhdGVDaGVja2JveEFsbFNlYXJjaCgpO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zY3JvbGxUb05vZGVFdmVudCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxzd2l0Y2hNYXAoKHZhbCk9PiB7XHJcbiAgICAgIGNvbnN0IGRlbGF5VGltaW5nID0gdGhpcy5pbmRleFZpZXcgPT09IDEgPyA3MDAgOiAwO1xyXG4gICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcclxuICAgICAgcmV0dXJuIG9mKHZhbCkucGlwZShkZWxheShkZWxheVRpbWluZykpO1xyXG4gICAgfSkpLnN1YnNjcmliZShyZXMgPT57XHJcbiAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShyZXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5nZXRBY3RpdmVOb2RlRXZlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHN3aXRjaE1hcCh2YWwgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2ZU5vZGUgPSB2YWw7XHJcbiAgICAgIHJldHVybiB0aW1lcigxNTAwKTtcclxuICAgIH0pKS5zdWJzY3JpYmUoIF8gPT57XHJcbiAgICAgIHRoaXMuYWN0aXZlTm9kZSA9ICcnO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guY2hhbmdlZFxyXG4gICAgLy8gLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAvLyAuc3Vic2NyaWJlKHJlc3VsdCA9PntcclxuICAgIC8vICAgY29uc3QgeyBhZGRlZCwgcmVtb3ZlZCB9ID0gcmVzdWx0O1xyXG4gICAgLy8gICBpZihhZGRlZC5sZW5ndGgpe1xyXG4gICAgLy8gICAgIGNvbnN0IG5vZGVzID0gYWRkZWQubWFwKGl0ZW0gPT4oe1xyXG4gICAgLy8gICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAvLyAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAvLyAgICAgICBjaGlsZHJlbjogbnVsbCxcclxuICAgIC8vICAgICB9IGFzIFFNU1RyZWVOb2RlKSkuZmlsdGVyKGl0ZW0gPT4gIXRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiBpdGVtLmlkID09IHguaWQpKTtcclxuICAgIC8vICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2goLi4ubm9kZXMpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGlmKHJlbW92ZWQubGVuZ3RoKXtcclxuICAgIC8vICAgICByZW1vdmVkLmZvckVhY2goaXRlbSA9PntcclxuICAgIC8vICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBpdGVtLmlkICk7XHJcbiAgICAvLyAgICAgICBpZihpbmRleD49MCl7XHJcbiAgICAvLyAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9KVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5pdFRyZWVEYXRhKClcclxuICAgIHRoaXMuX2luaXRDaGVja0xpc3RTZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0VHJlZURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy50cmVlRGF0YS5sZW5ndGgpIHtcclxuICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnRyZWVEYXRhLmZpbHRlcihpdGVtID0+ICtpdGVtLnBhcmVudElkID09PSAwKVxyXG4gICAgICAgIC5tYXAoKGl0ZW0sIF9pbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHtcclxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgbWFya2VkR2V0Q2hpbGRyZW46IGl0ZW0ubWFya2VkR2V0Q2hpbGRyZW4sXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuZGlzYWJsZWRMaXN0LmluY2x1ZGVzKGl0ZW0uaWQpLFxyXG4gICAgICAgICAgICBpdGVtSWNvbjogaXRlbS5pdGVtSWNvbixcclxuICAgICAgICAgICAgaXRlbU1hdEljb246IGl0ZW0uaXRlbU1hdEljb24sXHJcbiAgICAgICAgICAgIGl0ZW1JY29uU3ZnOiBpdGVtLml0ZW1JY29uU3ZnXHJcbiAgICAgICAgICB9IGFzIFFNU1RyZWVOb2RlXHJcbiAgICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmKCFyb290Tm9kZS5sZW5ndGgpIHRocm93KCdEYXRhIGludmFsaWQuJyk7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRyZWUocm9vdE5vZGUpO1xyXG4gICAgICBjb25zdCBncm91cFJlc3VsdCA9IHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcudHJlZURhdGEuZmlsdGVyKHggPT4gK3gucGFyZW50SWQgIT09IDApLnJlZHVjZSgocmVzdWx0LCBjdXJyZW50VmFsdWUpID0+IHtcclxuICAgICAgICAocmVzdWx0W2N1cnJlbnRWYWx1ZVsncGFyZW50SWQnXV0gPSByZXN1bHRbY3VycmVudFZhbHVlWydwYXJlbnRJZCddXSB8fCBbXSkucHVzaChcclxuICAgICAgICAgIGN1cnJlbnRWYWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSwge30pO1xyXG5cclxuICAgICAgY29uc3QgZ2V0QWxsUGFyZW50ID0gKHBhcmVudElkOiBzdHJpbmcpID0+e1xyXG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy50cmVlRGF0YS5maW5kKHggPT4gK3guaWQgPT09ICtwYXJlbnRJZCk7XHJcbiAgICAgICAgd2hpbGUocGFyZW50KXtcclxuICAgICAgICAgIHBhcmVudHMucHVzaChwYXJlbnQpO1xyXG4gICAgICAgICAgcGFyZW50ID0gdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy50cmVlRGF0YS5maW5kKHggPT4gK3guaWQgPT09ICtwYXJlbnQucGFyZW50SWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyZW50cztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoIShyb290Tm9kZSAmJiAhIXJvb3ROb2RlLmxlbmd0aCkpIHJldHVybjtcclxuICAgICAgbGV0IGdyb3VwUmVzdWx0S2V5ID0gT2JqZWN0LmtleXMoZ3JvdXBSZXN1bHQpLmZpbHRlcih4ID0+IGdldEFsbFBhcmVudCh4KS5sZW5ndGgpO1xyXG4gICAgICB3aGlsZShncm91cFJlc3VsdEtleS5sZW5ndGgpIHtcclxuICAgICAgICBncm91cFJlc3VsdEtleSA9IGdyb3VwUmVzdWx0S2V5LmZpbHRlcigoa2V5KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRGbGF0Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBrZXkpO1xyXG4gICAgICAgICAgaWYgKHBhcmVudEZsYXROb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUocGFyZW50RmxhdE5vZGUpO1xyXG4gICAgICAgICAgICBwYXJlbnROZXN0ZWROb2RlLm1hcmtlZEdldENoaWxkcmVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgcGFyZW50TmVzdGVkTm9kZS5jaGlsZHJlbiA9IF8uY2xvbmVEZWVwKGdyb3VwUmVzdWx0W2tleV0pO1xyXG4gICAgICAgICAgICBwYXJlbnROZXN0ZWROb2RlLmNoaWxkQ291bnQgPSBwYXJlbnROZXN0ZWROb2RlLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XHJcbiAgICAgICAgICAgIGdyb3VwUmVzdWx0W2tleV0gPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRDaGVja0xpc3RTZWxlY3RlZCgpIHtcclxuICAgIGlmICghdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5zZWxlY3RlZExpc3QubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLnJlc3VsdEdyb3VwU2VsZWN0ZWQgPSB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnNlbGVjdGVkTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLmNoaWxkcmVuKTtcclxuICAgIHRoaXMucmVzdWx0U2luZ2xlU2VsZWN0ZWQgPSB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLnNlbGVjdGVkTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLmNoaWxkcmVuID09PSBudWxsKTtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuc2VsZWN0ZWRMaXN0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICBpZiAoZmxhdE5vZGUpIHtcclxuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xyXG4gICAgICAgIGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCAmJiBpdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoX3ggPT4gX3guaWQgPT09IGNoaWxkLmlkKTtcclxuICAgICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICAgICAgICAgICAgdGhpcy5vbkV4cGFuZEFsbFBhcmVudChub2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMub25FeHBhbmRBbGxQYXJlbnQoZmxhdE5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbLi4udGhpcy5yZXN1bHRTaW5nbGVTZWxlY3RlZCwgLi4uIHRoaXMucmVzdWx0R3JvdXBTZWxlY3RlZF07XHJcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZURhdGFUcmVlKGRhdGE6IFFNU1RyZWVOb2RlW10pIHtcclxuICAgIHRoaXMuZ2V0RGF0YVRyZWUkLm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBzZXRSZXN1bHRTZWFyY2goZGF0YTogUU1TRmxhdE5vZGVUcmVlW10pIHtcclxuICAgIHRoaXMuc2VhcmNoRGVwYXJ0bWVudCQubmV4dChkYXRhKTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuXHJcbiAgfVxyXG5cclxuICBvbk9wdGlvblNlYXJjaFNlbGVjdGVkKHZhbHVlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IHZhbHVlLmlkKTtcclxuICAgIGlmICghZmxhdE5vZGUpIHJldHVybjtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XHJcbiAgICB0aGlzLl9oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKGZsYXROb2RlLmlkKTtcclxuICB9XHJcblxyXG4gIG9uU2xpZGVUb2dnbGVDaGFuZ2UoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgZGlzcGxheVdoZW5TZWxlY3REZXBhcnRtZW50T3B0aW9uKCRldmVudDogYW55KTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcclxuICAgIGlmICh0aGlzLmlzU2VsZWN0T25lKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdE9uZShub2RlKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUNoZWNrTm9kZShub2RlKTtcclxuICAgIH1cclxuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgICB0aGlzLl9tYXBUb1Jlc3VsdFNlYXJjaCgpO1xyXG4gICAgdGhpcy5fY2hlY2tTdGF0ZUNoZWNrYm94QWxsU2VhcmNoKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVTZWxlY3RPbmUobm9kZTogUU1TRmxhdE5vZGVUcmVlKXtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCAhPT0gbm9kZS5pZCk7XHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLnNlbGVjdGVkKTtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpIHtcclxuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkWzBdKTtcclxuICAgICAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSB7XHJcbiAgICAgICAgICAuLi5uZXN0ZWROb2RlLFxyXG4gICAgICAgICAgY2hpbGRyZW46IG51bGxcclxuICAgICAgICB9IGFzIFFNU1RyZWVOb2RlO1xyXG4gICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbaXRlbVNlbGVjdGVkXTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xyXG4gIH1cclxuXHJcbiAgb25FeHBhbmRBbGxQYXJlbnQobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBwYXJlbnRzID0gdGhpcy5fZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIGlmIChwYXJlbnRzPy5sZW5ndGgpIHtcclxuICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQocGFyZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZU5vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IG5vZGVJZCk7XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChmbGF0Tm9kZSk7XHJcbiAgICBmbGF0Tm9kZSAmJiB0aGlzLl9oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5fY2hlY2tTdGF0ZUNoZWNrYm94QWxsU2VhcmNoKCk7XHJcbiAgfVxyXG5cclxuICBpc0luZGV0ZXJtaW5hdGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBjaGlsZFNlbGVjdGVkID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKGl0ZW0gPT4gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChpdGVtKSk7XHJcbiAgICByZXR1cm4gKCEhY2hpbGRTZWxlY3RlZC5sZW5ndGggJiYgIXRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGVja0FsbChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGxpc3RDaGVjayA9IFsuLi50aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKSwgbm9kZV07XHJcbiAgICByZXR1cm4gbGlzdENoZWNrLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChpdGVtKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBpc1NlbGVjdGVkTm9kZSA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XHJcbiAgICBjb25zdCBpc093bmVyR3JvdXAgPSAhIXRoaXMucmVzdWx0R3JvdXBTZWxlY3RlZC5maW5kKGdyID0+IGdyPy5pZCA9PT0gbm9kZS5pZCk7XHJcbiAgICBpZiAoaXNTZWxlY3RlZE5vZGUpIHtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLmluY2x1ZGVDaGlsZHJlbiAmJiB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKTtcclxuICAgICAgY2hpbGRyZW4gJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLmNoaWxkcmVuKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zdCBjaGlsZFNlbGVjdGVkID0gdGhpcy5nZXRDaGlsZHJlblNlbGVjdGVkKG5vZGUpO1xyXG4gICAgICAvLyBjaGVjayBub2RlIGlzIG93bmVyIGdyb3VwIG9yIG1vZGUgaXMgJ2luY2x1ZGUgY2hpbGRyZW4nIGFuZCByZW1vdmUgYWxsIGNoaWxkcmVuXHJcbiAgICAgIChpc093bmVyR3JvdXAgfHwgdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5pbmNsdWRlQ2hpbGRyZW4pICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmNoaWxkU2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlR3JvdXBSZXN1bHQobm9kZSk7XHJcbiAgICB0aGlzLl91cGRhdGVTaW5nbGVSZXN1bHQoKTtcclxuICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbLi4udGhpcy5yZXN1bHRTaW5nbGVTZWxlY3RlZCwgLi4udGhpcy5yZXN1bHRHcm91cFNlbGVjdGVkXTtcclxuICAgIHRoaXMuX21hcFRvUmVzdWx0U2VhcmNoKCk7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBncm91cCByb290IGNvbnRhaW4gbm9kZSBhbmQgcmUtdXBkYXRlIGNoaWxyZW5cclxuICBwcml2YXRlIF91cGRhdGVHcm91cFJlc3VsdChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICBjb25zdCBleGlzdGVkR3JvdXAgPSB0aGlzLl9nZXRFeGlzdGVkR3JvdXAobm9kZSk7XHJcbiAgICBjb25zdCBjaGlsZHJlblNlbGVjdGVkID0gdGhpcy5fbWFwVG9OZXN0ZWRMaXN0Tm9kZSh0aGlzLmdldENoaWxkcmVuU2VsZWN0ZWQodGhpcy5jb252ZXJ0VG9GbGF0Tm9kZShleGlzdGVkR3JvdXApIHx8IG5vZGUpKTtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdEdyb3VwU2VsZWN0ZWQuZmluZChnciA9PiBnci5pZCA9PSBuZXN0ZWROb2RlLmlkIHx8IGdyLmlkID09PSBleGlzdGVkR3JvdXA/LmlkKTtcclxuICAgIGlmICghIWl0ZW0pIHtcclxuICAgICAgaXRlbS5jaGlsZHJlbiA9IGNoaWxkcmVuU2VsZWN0ZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5pbmNsdWRlQ2hpbGRyZW4gJiYgdGhpcy5yZXN1bHRHcm91cFNlbGVjdGVkLnB1c2goeyAuLi5uZXN0ZWROb2RlLCBjaGlsZHJlbjogY2hpbGRyZW5TZWxlY3RlZCB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2NoZWNrR3JvdXBTZWxlY3RlZChjaGlsZHJlblNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIHNpbmdsZSBzZWxlY3RlZCByZXN1bHRcclxuICBwcml2YXRlIF91cGRhdGVTaW5nbGVSZXN1bHQoKSB7XHJcbiAgICBsZXQgZXhjbHVkZUNoaWxkT2ZHcm91cCA9IFtdO1xyXG4gICAgdGhpcy5yZXN1bHRHcm91cFNlbGVjdGVkLmZvckVhY2goZ3IgPT4ge1xyXG4gICAgICBleGNsdWRlQ2hpbGRPZkdyb3VwID0gWy4uLmV4Y2x1ZGVDaGlsZE9mR3JvdXAsIC4uLmdyLmNoaWxkcmVuLm1hcCh4ID0+IHguaWQpXVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHRTaW5nbGVTZWxlY3RlZCA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSk7XHJcbiAgICAgIGNvbnN0IGV4aXN0ZWRHcm91cCA9IHRoaXMuX2dldEV4aXN0ZWRHcm91cChpdGVtKTtcclxuICAgICAgY29uc3QgaXNPd25lckdyb3VwID0gISF0aGlzLnJlc3VsdEdyb3VwU2VsZWN0ZWQuZmluZCh4ID0+IHg/LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWQgJiYgIWV4aXN0ZWRHcm91cCAmJiAhaXNPd25lckdyb3VwICYmICFleGNsdWRlQ2hpbGRPZkdyb3VwLmluY2x1ZGVzKGl0ZW0uaWQpO1xyXG4gICAgfSkubWFwKGl0ZW0gPT4ge1xyXG4gICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pO1xyXG4gICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gbnVsbDtcclxuICAgICAgcmV0dXJuIG5lc3RlZE5vZGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWNrR3JvdXBTZWxlY3RlZChjaGlsZFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdKSB7XHJcbiAgICB0aGlzLnJlc3VsdEdyb3VwU2VsZWN0ZWQgPSB0aGlzLnJlc3VsdEdyb3VwU2VsZWN0ZWQuZmlsdGVyKGdyID0+IHtcclxuICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gZ3IuaWQpO1xyXG4gICAgICBjb25zdCBjaGlsZFNlbGVjdGVkSW5Hcm91cCA9IGdyLmNoaWxkcmVuLmZpbHRlcih4ID0+IGNoaWxkU2VsZWN0ZWQuaW5jbHVkZXMoeCkpO1xyXG4gICAgICBnci5jaGlsZENvdW50ID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUoZmxhdE5vZGUpLmxlbmd0aDtcclxuICAgICAgLy8gaWYgTW9kZSBpcyAnaW5jbHVkZSBjaGlsZCcgdGhlIGdyb3VwIGxpc3Qgd2lsbCBmaWx0ZXIgZXhjbHVkZSBhbGwgY2hpbGQgc2VsZWN0ZWQgLCBvcnRoZXJ3aXNlIGZpbHRlciBleGNsdWRlIGFsbCBjaGlsZCBpbiBncm91cCB0aGF0IG5vZGUgaXMgY29udGFpbmVkXHJcbiAgICAgIGNvbnN0IGFyckNoaWxkID0gdGhpcy50cmVlRGF0YVNvdXJjZUNvbmZpZy5pbmNsdWRlQ2hpbGRyZW4gPyBjaGlsZFNlbGVjdGVkIDogY2hpbGRTZWxlY3RlZEluR3JvdXA7XHJcbiAgICAgIHJldHVybiBnci5jaGlsZENvdW50ID4gMCAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGZsYXROb2RlKSAmJiAhYXJyQ2hpbGQuZmluZChfeCA9PiBfeC5pZCA9PT0gZ3IuaWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRFeGlzdGVkR3JvdXAobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBhbGxQYXJlbnQgPSB0aGlzLl9nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgY29uc3QgbGlzdEdyb3VwSWRzID0gdGhpcy5yZXN1bHRHcm91cFNlbGVjdGVkLm1hcChnciA9PiBnci5pZCk7XHJcbiAgICBsZXQgZXhpc3RlZEdyb3VwO1xyXG4gICAgYWxsUGFyZW50LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGlmIChsaXN0R3JvdXBJZHMuaW5jbHVkZXMoaXRlbS5pZCkpIHtcclxuICAgICAgICBleGlzdGVkR3JvdXAgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gZXhpc3RlZEdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGRyZW5TZWxlY3RlZChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZCh4KSk7XHJcbiAgfVxyXG5cclxuICBnZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21hcFRvTmVzdGVkTGlzdE5vZGUoZmxhdE5vZGVMaXN0OiBRTVNGbGF0Tm9kZVRyZWVbXSk6IFFNU1RyZWVOb2RlW10ge1xyXG4gICAgcmV0dXJuIGZsYXROb2RlTGlzdC5tYXAoaXRlbSA9PiB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRvTmVzdGVkTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIHJldHVybiB0aGlzLmZsYXRUcmVlTm9kZU1hcC5nZXQobm9kZSk7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9GbGF0Tm9kZShub2RlOiBRTVNUcmVlTm9kZSkge1xyXG4gICAgcmV0dXJuIHRoaXMubmVzdGVkVHJlZU5vZGVNYXAuZ2V0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Um9vdFNlbGVjdGVkKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB7XHJcbiAgICBjb25zdCBwYXJlbnRMaXN0ID0gdGhpcy5fZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIGxldCBncm91cEV4aXN0OiBRTVNGbGF0Tm9kZVRyZWU7XHJcbiAgICBpZiAocGFyZW50TGlzdC5sZW5ndGgpIHtcclxuICAgICAgcGFyZW50TGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGl0ZW0pKSB7XHJcbiAgICAgICAgICBncm91cEV4aXN0ID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwRXhpc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRBbGxQYXJlbnROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZVtdIHtcclxuICAgIGNvbnN0IGxpc3RQYXJlbnQgPSBbXTtcclxuICAgIGxldCBwYXJlbnQgPSB0aGlzLl9nZXRQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICBsaXN0UGFyZW50LnB1c2gocGFyZW50KTtcclxuICAgICAgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpc3RQYXJlbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRQYXJlbnROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB7XHJcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xyXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHJldHVybjtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuaW5kZXhPZihub2RlKSAtIDE7XHJcbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV07XHJcbiAgICAgIGlmICh0aGlzLmdldExldmVsKGN1cnJlbnROb2RlKSA8IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbUljb25UeXBlKGl0ZW06IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgaWYgKCEhaXRlbS5pdGVtTWF0SWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLm5hbWU7XHJcbiAgICBpZiAoISFpdGVtLml0ZW1JY29uU3ZnKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuc3ZnO1xyXG4gICAgaWYgKCEhaXRlbS5pdGVtSWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnBhdGg7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2Nyb2xsSW50b05vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IG5vZGVJZCk7XHJcbiAgICBpZiAoIW5vZGVJZCkgcmV0dXJuO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5vbkV4cGFuZEFsbFBhcmVudChmbGF0Tm9kZSk7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjbm9kZS0ke2ZsYXROb2RlLmlkfWApIGFzIEVsZW1lbnQ7XHJcbiAgICBlbGVtZW50ICYmIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xyXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXHJcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5nZXRBY3RpdmVOb2RlRXZlbnQkLm5leHQobm9kZUlkKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKCl7XHJcbiAgICBpZih0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKXtcclxuICAgICAgdGhpcy5vblNlYXJjaEV2ZW50LmVtaXQodGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tSZXN1bHRJdGVtKGl0ZW0gOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwpe1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiBpdGVtLmlkID09PSB4LmlkICk7XHJcbiAgICBpZihub2RlKXtcclxuICAgICAgdGhpcy5zY3JvbGxUb05vZGUobm9kZS5pZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbSA6IERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIpe1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiBpdGVtLmlkID09PSB4LmlkICk7XHJcbiAgICBpZihub2RlKXtcclxuICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMCk7XHJcbiAgICAgIG9mKG5vZGUuaWQpLnBpcGUoZGVsYXkoNzAwKSkuc3Vic2NyaWJlKHJlcyA9PntcclxuICAgICAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShyZXMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hlY2tJdGVtU2VhcmNoUmVzdWx0KGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCl7XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC50b2dnbGUoaXRlbSk7XHJcbiAgICBpZih0aGlzLmlzU2VsZWN0T25lKXtcclxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoLi4udGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCAhPT0gaXRlbS5pZCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XHJcbiAgICB0aGlzLl9jaGVja1N0YXRlQ2hlY2tib3hBbGxTZWFyY2goKTtcclxuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tYXBUb1Jlc3VsdFNlYXJjaCgpe1xyXG4gICAgaWYoISF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXHJcbiAgICAgIHRoaXMucmVzdWx0U2VhcmNoLmZvckVhY2goaXRlbSA9PntcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT0gaXRlbS5pZCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSA/IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdChpdGVtKSA6IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KGl0ZW0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCl7XHJcbiAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiBpdGVtLmlkID09PSB4LmlkICk7XHJcbiAgICBpZihjdXJyZW50Tm9kZSl7XHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkgPyB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoY3VycmVudE5vZGUpIDogdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoY3VycmVudE5vZGUpO1xyXG4gICAgICB0aGlzLmlzU2VsZWN0T25lID8gdGhpcy5faGFuZGxlU2VsZWN0T25lKGN1cnJlbnROb2RlKSA6IHRoaXMuX2hhbmRsZUNoZWNrTm9kZShjdXJyZW50Tm9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEFsbFNlYXJjaFJlc3VsdChjaGVja2VkKSB7XHJcbiAgICBjb25zdCBhcnJSZXN1bHQgPSggdGhpcy5lbmFibGVQYWdpbmdTZWFyY2ggPyB0aGlzLnBhZ2luZ1Jlc3VsdFNlYXJjaCA6IHRoaXMucmVzdWx0U2VhcmNoKS5maWx0ZXIoeCA9PiAheC5kaXNhYmxlZCk7XHJcbiAgICB0aGlzLmlzU2VsZWN0QWxsUmVzdWx0U2VhcmNoID0gIWNoZWNrZWQ7XHJcbiAgICBjb25zdCBoYW5kbGUgPSAoYXJyOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWxbXSkgPT57XHJcbiAgICAgIGFyci5sZW5ndGggJiYgYXJyLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2gpIHtcclxuICAgICAgICAgICF0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudHJlZURhdGFTb3VyY2VDb25maWcuaW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgIGNvbnN0IG1haW5Hcm91cCA9IGFyclJlc3VsdC5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0SXRlbUdyb3VwID0gdGhpcy5fZ2V0QWxsUGFyZW50Tm9kZShub2RlKS5maWx0ZXIoeCA9PiBhcnJSZXN1bHQuc29tZSh4MSA9PiB4MS5pZCA9PT0geC5pZCkpO1xyXG4gICAgICAgIHJldHVybiBleGlzdEl0ZW1Hcm91cC5sZW5ndGggPT09IDA7XHJcbiAgICAgIH0pO1xyXG4gICAgICBoYW5kbGUobWFpbkdyb3VwKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIGhhbmRsZShhcnJSZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2hlY2tTdGF0ZUNoZWNrYm94QWxsU2VhcmNoKClcclxuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGVja1N0YXRlQ2hlY2tib3hBbGxTZWFyY2goKXtcclxuICAgIGNvbnN0IGFyclJlc3VsdCA9IHRoaXMuZW5hYmxlUGFnaW5nU2VhcmNoID8gdGhpcy5wYWdpbmdSZXN1bHRTZWFyY2ggOiB0aGlzLnJlc3VsdFNlYXJjaDtcclxuICAgIHRoaXMuaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2ggPSAhIWFyclJlc3VsdC5sZW5ndGggJiYgYXJyUmVzdWx0LmZpbHRlcih4ID0+ICF4LmRpc2FibGVkKS5ldmVyeSh4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoeCkpO1xyXG4gICAgdGhpcy5pbmRldGVybWluYXRlU2VhcmNoUmVzdWx0ID0gIXRoaXMuaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2ggJiYgISFhcnJSZXN1bHQubGVuZ3RoICYmIGFyclJlc3VsdC5zb21lKHggPT4gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZCh4KSk7XHJcbiAgfVxyXG5cclxuICBvblBhZ2luZ1NlYXJjaFJlc3VsdCh2YWw6IFBhZ2VFdmVudCkge1xyXG4gICAgaWYoIXRoaXMuZW5hYmxlUGFnaW5nU2VhcmNoKSByZXR1cm47XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdpbmF0aW9uQ29uZmlnID0gdmFsO1xyXG4gICAgdGhpcy5wYWdpbmdSZXN1bHRTZWFyY2ggPSB0aGlzLnJlc3VsdFNlYXJjaC5zbGljZSh2YWwucGFnZUluZGV4ICogdmFsLnBhZ2VTaXplLCAodmFsLnBhZ2VJbmRleCAqIHZhbC5wYWdlU2l6ZSkgKyB2YWwucGFnZVNpemUgKTtcclxuICAgIHRoaXMuX2NoZWNrU3RhdGVDaGVja2JveEFsbFNlYXJjaCgpO1xyXG4gICAgdGhpcy5vblBhZ2luZ1NlYXJjaEV2ZW50LmVtaXQodmFsKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvTm9kZShub2RlSWQ6IHN0cmluZyl7XHJcbiAgICAvLyB0aGlzLmdldEFjdGl2ZU5vZGVFdmVudCQubmV4dChub2RlSWQpO1xyXG4gICAgdGhpcy5zY3JvbGxUb05vZGVFdmVudCQubmV4dChub2RlSWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5kZXhWaWV3KGluZGV4OiBudW1iZXIpe1xyXG4gICAgaWYoaW5kZXggPT09IDEpe1xyXG4gICAgICB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLmluY2x1ZGVDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbmRleFZpZXcgPSBpbmRleDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWROb2RlU3RvcmFnZSgpOiBRTVNGbGF0Tm9kZVRyZWUge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NlbGVjdGVkTm9kZScpKSBhcyBRTVNGbGF0Tm9kZVRyZWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkTm9kZVN0b3JhZ2Uobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlQ29uZmlnLmluY2x1ZGVDaGlsZHJlbiAmJiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VsZWN0ZWROb2RlJywgSlNPTi5zdHJpbmdpZnkobm9kZSkpO1xyXG4gIH1cclxufVxyXG4iXX0=