@ieeesa-npm/groups 0.11.6 → 0.11.7
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.
|
@@ -338,11 +338,13 @@ export class TreeViewComponent {
|
|
|
338
338
|
const groupNodesReference = this.dataSource?.data;
|
|
339
339
|
groupNodesReference?.push(newGroupNode);
|
|
340
340
|
this.dataSource.data = groupNodesReference;
|
|
341
|
+
this.sortParentGroupsAlphabetically();
|
|
341
342
|
}
|
|
342
343
|
});
|
|
343
344
|
}
|
|
344
345
|
else if (this.groupsService.getGroupFunctionType() === GroupFunctionType.EDIT) {
|
|
345
346
|
this.editGroup(this.parentGroupsInfo);
|
|
347
|
+
this.sortParentGroupsAlphabetically();
|
|
346
348
|
}
|
|
347
349
|
else {
|
|
348
350
|
this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);
|
|
@@ -402,9 +404,13 @@ export class TreeViewComponent {
|
|
|
402
404
|
}
|
|
403
405
|
});
|
|
404
406
|
}
|
|
407
|
+
const selectedGroupIndex = this.dataSource.data.findIndex((node) => node.item.groupId === this.selectedGroup?.item.groupId);
|
|
408
|
+
this.sortChildGroupsAlphabetically(selectedGroupIndex + 1, this.getNextGroup(selectedGroupIndex, this.dataSource.data));
|
|
405
409
|
}
|
|
406
410
|
else if (this.groupsService.getGroupFunctionType() === GroupFunctionType.EDIT) {
|
|
407
411
|
this.editGroup(this.childGroupsInfo);
|
|
412
|
+
const selectedParentGroupIndex = this.dataSource.data.findIndex((node) => node.item.groupId === this.selectedGroup?.item.groupParentId);
|
|
413
|
+
this.sortChildGroupsAlphabetically(selectedParentGroupIndex + 1, this.getNextGroup(selectedParentGroupIndex, this.dataSource.data));
|
|
408
414
|
}
|
|
409
415
|
else if (this.groupsService.getGroupFunctionType() === GroupFunctionType.TOGGLE) {
|
|
410
416
|
this.treeControl?.toggle(this.selectedGroup);
|
|
@@ -450,6 +456,99 @@ export class TreeViewComponent {
|
|
|
450
456
|
this.deletedGroupId = undefined;
|
|
451
457
|
}
|
|
452
458
|
}
|
|
459
|
+
/**
|
|
460
|
+
* Returns the index of next group at the same level.
|
|
461
|
+
* @param {number} selectedGroupIndex
|
|
462
|
+
* @param {GroupNode[]} dataSource
|
|
463
|
+
* @return {*} {number}
|
|
464
|
+
* @memberof TreeViewComponent
|
|
465
|
+
*/
|
|
466
|
+
getNextGroup(selectedGroupIndex, dataSource) {
|
|
467
|
+
const selectedGroupAcronym = dataSource[selectedGroupIndex].item.groupAcronym;
|
|
468
|
+
let index = 0;
|
|
469
|
+
for (index = selectedGroupIndex + 1; index < dataSource.length; index++) {
|
|
470
|
+
if (dataSource[index].item.groupAcronym.includes(selectedGroupAcronym)) {
|
|
471
|
+
if (dataSource[selectedGroupIndex].level === 0) {
|
|
472
|
+
if (dataSource[selectedGroupIndex].level === dataSource[index].level) {
|
|
473
|
+
break;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
else
|
|
478
|
+
break;
|
|
479
|
+
}
|
|
480
|
+
return index;
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Sort the groups alphabetically from given start index to end index.
|
|
484
|
+
* @param {number} startIndex
|
|
485
|
+
* @param {number} endIndex
|
|
486
|
+
* @memberof TreeViewComponent
|
|
487
|
+
*/
|
|
488
|
+
sortChildGroupsAlphabetically(startIndex, endIndex) {
|
|
489
|
+
const dataSource = this.dataSource.data;
|
|
490
|
+
dataSource.splice(startIndex, endIndex - startIndex, ...this.groupsSorting(this.dataSource.data.slice(startIndex, endIndex)));
|
|
491
|
+
this.dataSource.data = dataSource;
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Sort the root level parent groups alphabetically.
|
|
495
|
+
* @memberof TreeViewComponent
|
|
496
|
+
*/
|
|
497
|
+
sortParentGroupsAlphabetically() {
|
|
498
|
+
let dataSource = this.dataSource.data;
|
|
499
|
+
for (let groupA = 0; groupA < dataSource.length; groupA = this.getNextGroup(groupA, dataSource)) {
|
|
500
|
+
let lowestGroup = groupA;
|
|
501
|
+
for (let groupB = this.getNextGroup(groupA, dataSource); groupB < dataSource.length; groupB = this.getNextGroup(groupB, dataSource)) {
|
|
502
|
+
lowestGroup =
|
|
503
|
+
this.groupsSorting([
|
|
504
|
+
dataSource[groupB],
|
|
505
|
+
dataSource[lowestGroup],
|
|
506
|
+
])[0] === dataSource[groupB]
|
|
507
|
+
? groupB
|
|
508
|
+
: lowestGroup;
|
|
509
|
+
}
|
|
510
|
+
if (lowestGroup !== groupA) {
|
|
511
|
+
const leftGroup = dataSource.slice(groupA, this.getNextGroup(groupA, dataSource));
|
|
512
|
+
const rightGroup = dataSource.slice(lowestGroup, this.getNextGroup(lowestGroup, dataSource));
|
|
513
|
+
const dataSourceReference = dataSource.slice(0, groupA);
|
|
514
|
+
dataSourceReference.push(...rightGroup);
|
|
515
|
+
dataSourceReference.push(...dataSource.slice(this.getNextGroup(groupA, dataSource), lowestGroup));
|
|
516
|
+
dataSourceReference.push(...leftGroup);
|
|
517
|
+
dataSourceReference.push(...dataSource.slice(this.getNextGroup(lowestGroup, dataSource), dataSource.length));
|
|
518
|
+
dataSource = dataSourceReference;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
this.dataSource.data = dataSource;
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Utility method to sort groups by group acronym in ascending order.
|
|
525
|
+
* @param {GroupNode[]} groups
|
|
526
|
+
* @return {*} {GroupNode[]}
|
|
527
|
+
* @memberof TreeViewComponent
|
|
528
|
+
*/
|
|
529
|
+
groupsSorting(groups) {
|
|
530
|
+
return groups.sort((groupA, groupB) => {
|
|
531
|
+
const lowerGroupA = groupA.item.groupAcronym.toLowerCase();
|
|
532
|
+
const lowerGroupB = groupB.item.groupAcronym.toLowerCase();
|
|
533
|
+
if (lowerGroupA < lowerGroupB)
|
|
534
|
+
return -1;
|
|
535
|
+
else if (lowerGroupA > lowerGroupB)
|
|
536
|
+
return 1;
|
|
537
|
+
else if (lowerGroupA === lowerGroupB) {
|
|
538
|
+
let index = 0;
|
|
539
|
+
while (index < groupA.item.groupAcronym.length) {
|
|
540
|
+
if (groupA.item.groupAcronym[index] <
|
|
541
|
+
groupB.item.groupAcronym[index])
|
|
542
|
+
return 1;
|
|
543
|
+
else if (groupA.item.groupAcronym[index] >
|
|
544
|
+
groupB.item.groupAcronym[index])
|
|
545
|
+
return -1;
|
|
546
|
+
index++;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
return 0;
|
|
550
|
+
});
|
|
551
|
+
}
|
|
453
552
|
/**
|
|
454
553
|
* Sets the selected menu group action
|
|
455
554
|
* @param {Menu} menu
|
|
@@ -483,6 +582,7 @@ export class TreeViewComponent {
|
|
|
483
582
|
this.createGroupClick.emit(group?.item);
|
|
484
583
|
}
|
|
485
584
|
else if (this.selectedGroupAction?.id === GroupAction.EDIT_GROUP) {
|
|
585
|
+
this.selectedGroup = group;
|
|
486
586
|
const editGroupParentInfo = this.dataSource?.data?.filter(
|
|
487
587
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
488
588
|
(item) => item?.item?.groupId === group?.item?.groupParentId)[0]?.item;
|
|
@@ -590,4 +690,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
590
690
|
}], viewRosterClick: [{
|
|
591
691
|
type: Output
|
|
592
692
|
}] } });
|
|
593
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBR04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBRWIsbUJBQW1CLEVBRW5CLHNCQUFzQixHQUN2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0vQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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RUFBRSxDQUFDO0lBQzlCLENBQUM7K0dBcmNVLGlCQUFpQjttR0FBakIsaUJBQWlCLHNmQzdQOUIsZzBJQTBIQSxxaVREc0hJLFlBQVkseWxCQUNaLGFBQWEsZ2hCQUNiLGFBQWEsOEJBQ2IsZUFBZSwrQkFDZixhQUFhLHlMQUNiLG1CQUFtQixxSUFDbkIsZ0JBQWdCLCtIQUNoQixzQkFBc0I7OzRGQU1iLGlCQUFpQjtrQkFqQjdCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLHNCQUFzQjtxQkFDdkIsaUJBR2MsaUJBQWlCLENBQUMsSUFBSTsrSUF5QmpDLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFVRixlQUFlO3NCQURsQixLQUFLO2dCQVVGLDJCQUEyQjtzQkFEOUIsS0FBSztnQkFTRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBU04sb0JBQW9CO3NCQURuQixLQUFLO2dCQUdJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBNZW51Q29tcG9uZW50LFxyXG4gIE1lbnUsXHJcbiAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBJY29uQnV0dG9uLFxyXG4gIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vcHJlc2VudGF0aW9uJztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IEdyb3VwQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWFjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29sbGVjdGlvblZpZXdlcixcclxuICBTZWxlY3Rpb25DaGFuZ2UsXHJcbiAgRGF0YVNvdXJjZSxcclxufSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0VHJlZU1vZHVsZSwgTWF0VHJlZU5vZGVQYWRkaW5nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IEdyb3VwSW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgRWRpdEdyb3VwQW5kUGFyZW50SW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9lZGl0LWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBHcm91cHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ3JvdXBzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcm91cEZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvcGVybWlzc2lvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLXBlcm1pc3Npb25zLm1vZGVsJztcclxuLyoqXHJcbiAqIER5bmFtaWMgRmxhdCBub2RlIGNyZWF0ZXMgYSBub2RlIHN0cnVjdHVyZVxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBHcm91cE5vZGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cE5vZGUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaXRlbTogR3JvdXBJbmZvLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgbGV2ZWwgPSAxLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZXhwYW5kYWJsZSA9IGZhbHNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG59XHJcblxyXG4vKipcclxuICogR3JvdXBzIHN0b3JlcyB0aGUgcGFyZW50IG5vZGVzIGFuZCBjaGlsZCBub2Rlc1xyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBHcm91cHNcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cHMge1xyXG4gIHJvb3RMZXZlbE5vZGVzITogR3JvdXBJbmZvW107XHJcbiAgLyoqIEluaXRpYWwgZGF0YSBmcm9tIGRhdGFiYXNlICovXHJcbiAgcHJpdmF0ZSBjaGlsZEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgQ2hpbGQgZ3JvdXBzIGluZm9cclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwSW5mb1tdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBnZXRDaGlsZEdyb3Vwc0luZm8oKTogR3JvdXBJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRHcm91cHM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gdmFsdWVcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgc2V0Q2hpbGRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGlsZEdyb3VwcyA9IHZhbHVlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBncm91cHMgZGF0YSBhbmQgY3JlYXRlcyB0aGUgbm9kZSBzdHJ1Y3R1cmUgZm9yIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gZGF0YVxyXG4gICAqIEByZXR1cm4geyp9ICB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGluaXRpYWxEYXRhKGRhdGE6IEdyb3VwSW5mb1tdKTogR3JvdXBOb2RlW10ge1xyXG4gICAgdGhpcy5yb290TGV2ZWxOb2RlcyA9IGRhdGE7XHJcbiAgICByZXR1cm4gdGhpcy5yb290TGV2ZWxOb2Rlcy5tYXAoXHJcbiAgICAgIChub2RlKSA9PiBuZXcgR3JvdXBOb2RlKG5vZGUsIDAsIHRoaXMuaXNFeHBhbmRhYmxlKG5vZGUpKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBub2RlIGlzIGV4cGFuZGFibGUgb3Igbm90XHJcbiAgICogQHBhcmFtIHtHcm91cEluZm99IG5vZGVcclxuICAgKiBAcmV0dXJuIHsqfSAge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGlzRXhwYW5kYWJsZShub2RlOiBHcm91cEluZm8pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICghIW5vZGU/LmNoaWxkcmVuICYmIG5vZGU/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB8fCBub2RlPy5oYXNDaGlsZHJlblxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIER5bmFtaWMgRGF0YSBTb3VyY2UgaGFuZGxlcyB0aGUgY29ubmVjdGlvbiB3aXRoIGR5bmFtaWMgZGF0YSBiYXNlXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2VcclxuICogQGltcGxlbWVudHMge0RhdGFTb3VyY2U8R3JvdXBOb2RlPn1cclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cHNEYXRhU291cmNlIGltcGxlbWVudHMgRGF0YVNvdXJjZTxHcm91cE5vZGU+IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R3JvdXBOb2RlW10+KFtdKTtcclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB1cGRhdGVkIHRyZWUgY29udHJvbCBkYXRhXHJcbiAgICogQHR5cGUge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgZ2V0IGRhdGEoKTogR3JvdXBOb2RlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YUNoYW5nZT8udmFsdWU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGRhdGEgdG8gdHJlZSBjb250cm9sIGFuZCBlbWl0IHRoZSB2YWx1ZSB0byBpbnRpbWF0ZSB0aGUgZGF0YSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHNldCBkYXRhKHZhbHVlOiBHcm91cE5vZGVbXSkge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMgPSB2YWx1ZTtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8R3JvdXBOb2RlPixcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBkYXRhYmFzZTogR3JvdXBzIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBkYXRhIGJhc2UgYW5kIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQHJldHVybiB7Kn0gIHtPYnNlcnZhYmxlPEdyb3VwTm9kZVtdPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8R3JvdXBOb2RlW10+IHtcclxuICAgIHRoaXMudHJlZUNvbnRyb2w/LmV4cGFuc2lvbk1vZGVsPy5jaGFuZ2VkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikuYWRkZWQgfHxcclxuICAgICAgICAgIChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pLnJlbW92ZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlVHJlZUNvbnRyb2woY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIG1lcmdlKGNvbGxlY3Rpb25WaWV3ZXI/LnZpZXdDaGFuZ2UsIHRoaXMuZGF0YUNoYW5nZSkucGlwZShcclxuICAgICAgbWFwKCgpID0+IHRoaXMuZGF0YSlcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERpc2Nvbm5lY3QgdGhlIGNvbm5lY3Rpb24gd2l0aCBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvblZpZXdlcn0gY29sbGVjdGlvblZpZXdlclxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiwgbm8tZW1wdHktZnVuY3Rpb24sIG5vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICBkaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMvcmVtb3ZlcyB0aGUgY2hpbGQgbm9kZXMgd2hpbGUgZXhwYW5kcy9jb2xsYXBzZXMgdGhlIHBhcmVudCBub2RlXHJcbiAgICogQHBhcmFtIHtTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPn0gY2hhbmdlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBoYW5kbGVUcmVlQ29udHJvbChjaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KSB7XHJcbiAgICBpZiAoY2hhbmdlPy5hZGRlZCkge1xyXG4gICAgICBjaGFuZ2UuYWRkZWQ/LmZvckVhY2goKG5vZGUpID0+IHRoaXMudG9nZ2xlTm9kZShub2RlLCB0cnVlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlPy5yZW1vdmVkKSB7XHJcbiAgICAgIGNoYW5nZS5yZW1vdmVkXHJcbiAgICAgICAgLnNsaWNlKClcclxuICAgICAgICAucmV2ZXJzZSgpXHJcbiAgICAgICAgLmZvckVhY2goKG5vZGUpID0+IHRoaXMudG9nZ2xlTm9kZShub2RlLCBmYWxzZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHRoZSBub2RlLCBhZGQvcmVtb3ZlcyB0aGUgbm9kZSBmcm9tIGRpc3BsYXlcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gY2xpY2tlZE5vZGVcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cGFuZFxyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICB0b2dnbGVOb2RlKGNsaWNrZWROb2RlOiBHcm91cE5vZGUsIGV4cGFuZDogYm9vbGVhbikge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmRhdGFiYXNlPy5nZXRDaGlsZEdyb3Vwc0luZm8oKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhPy5pbmRleE9mKGNsaWNrZWROb2RlKTtcclxuICAgIGlmICghY2hpbGRyZW4gfHwgaW5kZXggPCAwKSB7XHJcbiAgICAgIC8vIElmIG5vIGNoaWxkcmVuLCBvciBjYW5ub3QgZmluZCB0aGUgbm9kZSwgbm8gb3BcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHBhbmQpIHtcclxuICAgICAgY2xpY2tlZE5vZGUuaXRlbS5ub09mQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgIGNvbnN0IG5vZGVzID0gY2hpbGRyZW4/Lm1hcChcclxuICAgICAgICAobm9kZSkgPT5cclxuICAgICAgICAgIG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgIG5vZGUsXHJcbiAgICAgICAgICAgIGNsaWNrZWROb2RlPy5sZXZlbCArIDEsXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2U/LmlzRXhwYW5kYWJsZShub2RlKVxyXG4gICAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRhdGE/LnNwbGljZShpbmRleCArIDEsIDAsIC4uLm5vZGVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGkgPSBpbmRleCArIDE7XHJcbiAgICAgICAgaSA8IHRoaXMuZGF0YT8ubGVuZ3RoICYmIHRoaXMuZGF0YVtpXT8ubGV2ZWwgPiBjbGlja2VkTm9kZT8ubGV2ZWw7XHJcbiAgICAgICAgaSsrLCBjb3VudCsrIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxyXG4gICAgICApIHt9XHJcbiAgICAgIHRoaXMuZGF0YT8uc3BsaWNlKGluZGV4ICsgMSwgY291bnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdGlmeSB0aGUgY2hhbmdlXHJcbiAgICB0aGlzLmRhdGFDaGFuZ2U/Lm5leHQodGhpcy5kYXRhKTtcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIERpc3BsYXlzIHRoZSBncm91cHMgd2hlcmUgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcHMgYXJlIHJlcHJlc2VudGVkIGluIGEgdHJlZSB2aWV3L2hpZXJhcmNoeS5cclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgVHJlZVZpZXdDb21wb25lbnRcclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLXRyZWUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0VHJlZU1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNZW51Q29tcG9uZW50LFxyXG4gICAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBUZXh0VHJ1bmNhdGVkRGlyZWN0aXZlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29uc3RhbnRzOiBhbnkgPSBjb25zdGFudHM7XHJcbiAgYnV0dG9uczogTWVudVtdID0gdGhpcy5jb25zdGFudHM/LnZpZXdHcm91cHM/LmJ1dHRvbnM7XHJcbiAgdHJlZVBhZGRpbmdJbmRlbnQ6IG51bWJlciA9IHRoaXMuY29uc3RhbnRzPy52aWV3R3JvdXBzPy50cmVlUGFkZGluZ0luZGVudDtcclxuICBzZWxlY3RlZEdyb3VwITogR3JvdXBOb2RlO1xyXG4gIHNlbGVjdGVkR3JvdXBBY3Rpb24hOiBNZW51IHwgSWNvbkJ1dHRvbjtcclxuICB0cmVlQ29udHJvbCE6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+O1xyXG4gIGRhdGFTb3VyY2UhOiBHcm91cHNEYXRhU291cmNlO1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBtYXRUcmVlTm9kZVBhZGRpbmchOiBNYXRUcmVlTm9kZVBhZGRpbmc8R3JvdXBOb2RlPjtcclxuICBwbHVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s0XTtcclxuICBtaW51c0NpcmNsZUljb25CdXR0b246IEljb25CdXR0b24gPSB0aGlzLmJ1dHRvbnNbNV07XHJcbiAgZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvITogRWRpdEdyb3VwQW5kUGFyZW50SW5mbztcclxuICBwZXJtaXNzaW9uVHlwZSA9IFBlcm1pc3Npb25UeXBlO1xyXG5cclxuICBtZW51SXRlbXM6IE1lbnVbXSA9IHRoaXMuYnV0dG9ucz8uZmlsdGVyKFxyXG4gICAgKGUpID0+XHJcbiAgICAgIGUuaWQgIT09IEdyb3VwQWN0aW9uPy5FWFBBTkRfR1JPVVBfVklFVyAmJlxyXG4gICAgICBlLmlkICE9PSBHcm91cEFjdGlvbj8uQ09MTEFQU0VfR1JPVVBfVklFV1xyXG4gICk7XHJcbiAgcHJpdmF0ZSBwYXJlbnRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYXJlbnRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSkge1xyXG4gICAgdGhpcy5wYXJlbnRHcm91cHMgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkgdGhpcy5zZXRHcm91cERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgZ2V0IHBhcmVudEdyb3Vwc0luZm8oKTogR3JvdXBJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50R3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGNoaWxkR3JvdXBzITogR3JvdXBJbmZvW107XHJcbiAgQElucHV0KClcclxuICBzZXQgY2hpbGRHcm91cHNJbmZvKHZhbHVlOiBHcm91cEluZm9bXSkge1xyXG4gICAgdGhpcy5jaGlsZEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5sb2FkQ2hpbGRHcm91cHMoKTtcclxuICB9XHJcbiAgZ2V0IGNoaWxkR3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZEdyb3VwcztcclxuICB9XHJcbiAgcHJpdmF0ZSBpc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNHcm91cFNlYXJjaE9yRmlsdGVyID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZGVsZXRlZEdyb3VwSWQhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KClcclxuICBzZXQgZGVsZXRlZEdyb3VwSWRJbmZvKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuZGVsZXRlZEdyb3VwSWQgPSBpZDtcclxuICAgIHRoaXMuZGVsZXRlR3JvdXBOb2RlKHRoaXMuZGVsZXRlZEdyb3VwSWQpO1xyXG4gIH1cclxuICBnZXQgZGVsZXRlZEdyb3VwSWRJbmZvKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5kZWxldGVkR3JvdXBJZDtcclxuICB9XHJcbiAgQElucHV0KClcclxuICB1c2VyR3JvdXBQZXJtaXNzaW9ucyE6IEdyb3VwUGVybWlzc2lvbltdO1xyXG5cclxuICBAT3V0cHV0KCkgdG9nZ2xlR3JvdXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIEBPdXRwdXQoKSBjcmVhdGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGVkaXRHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFZGl0R3JvdXBBbmRQYXJlbnRJbmZvPigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIHZpZXdSb3N0ZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R3JvdXBJbmZvPigpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tZW1wdHktZnVuY3Rpb25cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGRhdGFiYXNlOiBHcm91cHMsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZ3JvdXBzU2VydmljZTogR3JvdXBzU2VydmljZSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cclxuICApIHt9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHRyZWUgdmlldyBjb21wb25lbnRcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0R3JvdXBEYXRhU291cmNlKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEFzc2lnbiBBUklBIHJvbGUgZm9yIGFsbCBtYXQgdHJlZSBub2RlcyBhcyBcInJvd1wiXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhU291cmNlPy5kYXRhQ2hhbmdlXHJcbiAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyZWVJdGVtTm9kZXMgPVxyXG4gICAgICAgICAgdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT10cmVlaXRlbV0nKTtcclxuICAgICAgICB0cmVlSXRlbU5vZGVzPy5mb3JFYWNoKChub2RlOiBIVE1MRWxlbWVudCkgPT4gKG5vZGUucm9sZSA9ICdyb3cnKSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBsZXZlbCBvZiB0aGUgbm9kZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0TGV2ZWwgPSAobm9kZTogR3JvdXBOb2RlKSA9PiBub2RlPy5sZXZlbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBub2RlIGlzIGV4cGFuZGFibGUgb3Igbm90XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogR3JvdXBOb2RlKSA9PiBub2RlPy5leHBhbmRhYmxlO1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgcGFzc2VkIG5vZGUgaGFzIGNoaWxkcmVuIG90aGVyd2lzZSBmYWxzZVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBoYXNDaGlsZEdyb3VwcyA9IChpbmRleDogbnVtYmVyLCBfbm9kZURhdGE6IEdyb3VwTm9kZSkgPT5cclxuICAgIF9ub2RlRGF0YS5leHBhbmRhYmxlO1xyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRoZSBncm91cCBpbmZvIHdoZW4gdGhlIHRvZ2dsZSBncm91cCBpcyBjbGlja2VkIG9yIHRvZ2dsZXMgdGhlIGdyb3VwIHZpZXdcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICB2aWV3Q2hpbGRHcm91cHMobm9kZTogR3JvdXBOb2RlKSB7XHJcbiAgICBpZiAoIW5vZGU/Lml0ZW0/Lmhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGVkKG5vZGUpKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2w/LnRvZ2dsZShub2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5zZXRHcm91cEZ1bmN0aW9uVHlwZShHcm91cEZ1bmN0aW9uVHlwZS5UT0dHTEUpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUdyb3VwQ2xpY2suZW1pdChub2RlPy5pdGVtKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gbm9kZTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgYm94IHNoYWRvdyBiYXNlZCBvbiB0aGUgZ3JvdXAgdHlwZSBsZWdlbmQgY29sb3JcclxuICAgKiBAcmV0dXJuIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0Qm94U2hhZG93KCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBib3hTaGFkb3c6ICcwcHggMXB4IDBweCAwcHggI2M5Y2JkMCBpbnNldCcsXHJcbiAgICB9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkYXRhU291cmNlIHdpdGggcGFyZW50IGdyb3VwcyBkYXRhXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc2V0R3JvdXBEYXRhU291cmNlKCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgJiZcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkNSRUFURVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucGFyZW50R3JvdXBzSW5mbz8uZm9yRWFjaCgocGFyZW50R3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIChub2RlKSA9PiBub2RlPy5pdGVtPy5ncm91cElkID09PSBwYXJlbnRHcm91cE5vZGU/Lmdyb3VwSWRcclxuICAgICAgICAgICkgPT09IC0xXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdHcm91cE5vZGUgPSBuZXcgR3JvdXBOb2RlKFxyXG4gICAgICAgICAgICBwYXJlbnRHcm91cE5vZGUsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuaXNFeHBhbmRhYmxlKHBhcmVudEdyb3VwTm9kZSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBncm91cE5vZGVzUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlPy5kYXRhO1xyXG4gICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZT8ucHVzaChuZXdHcm91cE5vZGUpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVzUmVmZXJlbmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuRURJVFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwKHRoaXMucGFyZW50R3JvdXBzSW5mbyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+KFxyXG4gICAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGFibGVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IEdyb3Vwc0RhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy5kYXRhYmFzZSk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhYmFzZT8uaW5pdGlhbERhdGEodGhpcy5wYXJlbnRHcm91cHNJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdXBkYXRlZCBub2RlIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gZ3JvdXBzSW5mb1xyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGVkaXRHcm91cChncm91cHNJbmZvOiBHcm91cEluZm9bXSkge1xyXG4gICAgY29uc3QgZ3JvdXBOb2RlUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlPy5kYXRhO1xyXG4gICAgY29uc3QgZWRpdGVkTm9kZSA9IGdyb3Vwc0luZm8/LmZpbmQoXHJcbiAgICAgIChub2RlKSA9PlxyXG4gICAgICAgIG5vZGU/Lmdyb3VwSWQgPT09IHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvPy5ncm91cEluZm8/Lmdyb3VwSWRcclxuICAgICk7XHJcbiAgICBncm91cE5vZGVSZWZlcmVuY2U/LmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIG5vZGU/Lml0ZW0/Lmdyb3VwSWQgPT09XHJcbiAgICAgICAgdGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSW5mbz8uZ3JvdXBJZFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBub09mQ2hpbGRyZW5SZWZlcmVuY2UgPSBub2RlLml0ZW0ubm9PZkNoaWxkcmVuO1xyXG4gICAgICAgIG5vZGUuaXRlbSA9IGVkaXRlZE5vZGUgYXMgR3JvdXBJbmZvO1xyXG4gICAgICAgIG5vZGUuaXRlbS5ub09mQ2hpbGRyZW4gPSBub09mQ2hpbGRyZW5SZWZlcmVuY2U7XHJcbiAgICAgICAgbm9kZS5leHBhbmRhYmxlID0gdGhpcy5kYXRhYmFzZS5pc0V4cGFuZGFibGUobm9kZT8uaXRlbSk7XHJcbiAgICAgICAgaWYgKG5vZGUuaXRlbS5oYXNDaGlsZHJlbiAmJiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkpIHtcclxuICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wudG9nZ2xlKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGdyb3VwTm9kZVJlZmVyZW5jZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTG9hZHMgdGhlIGNoaWxkIGdyb3VwcyBhbmQgdXBkYXRlcyB0aGUgdHJlZSB2aWV3LlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGxvYWRDaGlsZEdyb3VwcygpIHtcclxuICAgIHRoaXMuZGF0YWJhc2U/LnNldENoaWxkR3JvdXBzSW5mbyh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICBjb25zdCBncm91cE5vZGVzUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlPy5kYXRhO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuQ1JFQVRFXHJcbiAgICApIHtcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXA/Lml0ZW0/Lmhhc0NoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwLml0ZW0uaGFzQ2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwUGFyZW50Tm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAuaXRlbSxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cC5sZXZlbCxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2Uuc3BsaWNlKFxyXG4gICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5pbmRleE9mKHRoaXMuc2VsZWN0ZWRHcm91cCksXHJcbiAgICAgICAgICAxLFxyXG4gICAgICAgICAgZ3JvdXBQYXJlbnROb2RlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChncm91cFBhcmVudE5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQodGhpcy5zZWxlY3RlZEdyb3VwKSkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5kYXRhYmFzZS5nZXRDaGlsZEdyb3Vwc0luZm8oKTtcclxuICAgICAgICBjaGlsZHJlbj8uZm9yRWFjaCgoZ3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgIChub2RlKSA9PiBub2RlPy5pdGVtPy5ncm91cElkID09PSBncm91cE5vZGU/Lmdyb3VwSWRcclxuICAgICAgICAgICAgKSA9PT0gLTFcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdHcm91cE5vZGUgPSBuZXcgR3JvdXBOb2RlKFxyXG4gICAgICAgICAgICAgIGdyb3VwTm9kZSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXA/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgICB0aGlzLmRhdGFiYXNlPy5pc0V4cGFuZGFibGUoZ3JvdXBOb2RlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBncm91cE5vZGVzUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlPy5kYXRhO1xyXG4gICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAobm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cC5pdGVtLmdyb3VwSWQpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuaXRlbS5ub09mQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5zcGxpY2UoXHJcbiAgICAgICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5pbmRleE9mKHRoaXMuc2VsZWN0ZWRHcm91cCkgKyAxLFxyXG4gICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgbmV3R3JvdXBOb2RlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2Rlc1JlZmVyZW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkVESVRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cCh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuVE9HR0xFXHJcbiAgICApIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbD8udG9nZ2xlKHRoaXMuc2VsZWN0ZWRHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgdGhlIHNlbGVjdGVkIGdyb3VwIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlbGV0ZWRHcm91cElkXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZGVsZXRlR3JvdXBOb2RlKGRlbGV0ZWRHcm91cElkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRyZWVDb250cm9sICYmIGRlbGV0ZWRHcm91cElkKSB7XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRHcm91cEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KFxyXG4gICAgICAgIChub2RlKSA9PiBub2RlLml0ZW0uZ3JvdXBJZCA9PT0gZGVsZXRlZEdyb3VwSWRcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZGVsZXRlZEdyb3VwID0gdGhpcy5kYXRhU291cmNlLmRhdGEuYXQoZGVsZXRlZEdyb3VwSW5kZXgpO1xyXG4gICAgICBjb25zdCBkYXRhU291cmNlUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICAgIGlmIChkZWxldGVkR3JvdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBpZiAoZGVsZXRlZEdyb3VwPy5pdGVtLmdyb3VwUGFyZW50SWQgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IGRlbGV0ZWRQYXJlbnRHcm91cEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IGRlbGV0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGRlbGV0ZWRQYXJlbnRHcm91cEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWxldGVkUGFyZW50R3JvdXAgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5hdChcclxuICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXBJbmRleFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoZGVsZXRlZFBhcmVudEdyb3VwICYmIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLm5vT2ZDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLm5vT2ZDaGlsZHJlbiA9XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gLSAxO1xyXG4gICAgICAgICAgICAgIGlmIChkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLmhhc0NoaWxkcmVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5sZXZlbCxcclxuICAgICAgICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCAtIDEsIDIsIG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2Uuc3BsaWNlKGRlbGV0ZWRHcm91cEluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhU291cmNlUmVmZXJlbmNlO1xyXG4gICAgICB0aGlzLmRlbGV0ZWRHcm91cElkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbWVudSBncm91cCBhY3Rpb25cclxuICAgKiBAcGFyYW0ge01lbnV9IG1lbnVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwQWN0aW9uc0NsaWNrKG1lbnU6IE1lbnUgfCBJY29uQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24gPSBtZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBleHBhbmQvY29sbGFwc2UgaWNvbiBiYXNlZCBvbiB0aGUgdG9nZ2xlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFRvZ2dsZUJ1dHRvbkluZm8oZ3JvdXA6IEdyb3VwTm9kZSk6IEljb25CdXR0b24ge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQoZ3JvdXApKSByZXR1cm4gdGhpcy5taW51c0NpcmNsZUljb25CdXR0b247XHJcbiAgICByZXR1cm4gdGhpcy5wbHVzQ2lyY2xlSWNvbkJ1dHRvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgZW1pdHRlZCBncm91cCBhY3Rpb25zIGV2ZW50XHJcbiAgICogQHBhcmFtIHtHcm91cEluZm99IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFuZGxlR3JvdXBBY3Rpb25zKGdyb3VwOiBHcm91cE5vZGUpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5WSUVXX1JPU1RFUikge1xyXG4gICAgICB0aGlzLnZpZXdSb3N0ZXJDbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uQ1JFQVRFX1NVQl9HUk9VUCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcclxuICAgICAgdGhpcy5jcmVhdGVHcm91cENsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5FRElUX0dST1VQKSB7XHJcbiAgICAgIGNvbnN0IGVkaXRHcm91cFBhcmVudEluZm8gPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/LmZpbHRlcihcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwPy5pdGVtPy5ncm91cFBhcmVudElkXHJcbiAgICAgIClbMF0/Lml0ZW07XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvID0ge1xyXG4gICAgICAgIGdyb3VwSW5mbzogZ3JvdXA/Lml0ZW0sXHJcbiAgICAgICAgcGFyZW50R3JvdXBJbmZvOiBlZGl0R3JvdXBQYXJlbnRJbmZvLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmVkaXRHcm91cENsaWNrLmVtaXQodGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVApIHtcclxuICAgICAgdGhpcy5kZWxldGVHcm91cENsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBtZW51IGl0ZW1zIGJhc2VkIG9uIGdyb3VwcyBoYXNDaGlsZHJlbi5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAcmV0dXJuIHtNZW51W119XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMoZ3JvdXA6IEdyb3VwTm9kZSk6IE1lbnVbXSB7XHJcbiAgICBjb25zdCBmaWx0ZXJlZE1lbnU6IE1lbnVbXSA9IFtdO1xyXG4gICAgY29uc3QgaXNBZG1pbkdyb3VwVHlwZSA9IGdyb3VwPy5pdGVtPy5ncm91cFR5cGVJbmZvPy5idXNpbmVzc1J1bGU/LmlzQWRtaW47XHJcbiAgICBjb25zdCBncm91cFBlcm1pc3Npb25zID0gZ3JvdXA/Lml0ZW0/LnBlcm1pc3Npb25zO1xyXG4gICAgdGhpcy5tZW51SXRlbXM/LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgZS5pc1Rvb2xUaXBOZWVkZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIChlPy5pZCA9PT0gR3JvdXBBY3Rpb24uVklFV19ST1NURVIgJiZcclxuICAgICAgICAgICgoaXNBZG1pbkdyb3VwVHlwZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfU1lTVEVNX1VTRVJTLFxyXG4gICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgKSkgfHxcclxuICAgICAgICAgICAgKCFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAgICAgKHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuVklFV19HUk9VUF9PRkZJQ0VSUyxcclxuICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX09GRklDRVJTLFxyXG4gICAgICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuVklFV19HUk9VUF9NRU1CRVJTLFxyXG4gICAgICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuVklFV19BTExfUk9TVEVSU1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9HUk9VUF9NRU1CRVJTLFxyXG4gICAgICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICAgICApKSkpKSB8fFxyXG4gICAgICAgIChlPy5pZCA9PT0gR3JvdXBBY3Rpb24uRURJVF9HUk9VUCAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuRURJVF9HUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSkgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkRFTEVURV9HUk9VUCAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuREVMRVRFX0dST1VQLFxyXG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfR1JPVVBTXHJcbiAgICAgICAgICAgICkpICYmXHJcbiAgICAgICAgICAhZ3JvdXA/Lml0ZW0/Lmhhc0NoaWxkcmVuKSB8fFxyXG4gICAgICAgIChlPy5pZCA9PT0gR3JvdXBBY3Rpb24uQ1JFQVRFX1NVQl9HUk9VUCAmJlxyXG4gICAgICAgICAgZ3JvdXA/Lml0ZW0/Lmdyb3VwVHlwZUluZm8/LmJ1c2luZXNzUnVsZT8uYWxsb3dTdWJHcm91cCAmJlxyXG4gICAgICAgICAgKHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5DUkVBVEVfU1VCR1JPVVAsXHJcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9HUk9VUFNcclxuICAgICAgICAgICAgKSkgJiZcclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlKVxyXG4gICAgICApIHtcclxuICAgICAgICBmaWx0ZXJlZE1lbnUucHVzaChlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmlsdGVyZWRNZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBUYWtlcyB0aGUgaW5kZXggYW5kIHRoZSBpY29uIGJ1dHRvbiBhcyBhcmd1bWVudHMgYW5kIG5lZWRzIHRvIHJldHVybiB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaWNvbiBidXR0b24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtJY29uQnV0dG9ufSBpY29uQnV0dG9uXHJcbiAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpY29uQnV0dG9uOiBJY29uQnV0dG9uKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpY29uQnV0dG9uLmlkO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBOZ09uRGVzdHJveSBwZXJmb3JtcyBuZWNlc3NhcnkgY2xlYW51cCB0YXNrcywgc3VjaCBhcyB1bnN1YnNjcmliaW5nIGZyb20gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVcIj5cclxuICA8bWF0LXRyZWVcclxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX3Jvb3RcIlxyXG4gICAgI3Jvb3RTZWxlY3RvclxyXG4gICAgcm9sZT1cInRyZWVncmlkXCJcclxuICA+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiXHJcbiAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cInRyZWVQYWRkaW5nSW5kZW50XCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNlwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleCBnYXAtbGctMyBteS0wIGdhcC0wIGdhcC1zbS0wIGdhcC1tZC0yXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3coKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgIWlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSA/ICdpZWVlc2EtdHJlZV9fY29sbGFwc2UtaWNvbicgOiAnJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGllZWVzYUdyb3VwTm9kZU91dGxldDtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IGhhc0NoaWxkR3JvdXBzXCJcclxuICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgIFttYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnRdPVwidHJlZVBhZGRpbmdJbmRlbnRcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1ib2R5LW1kLTE2IGllZWVzYS10cmVlX19wYXJlbnQtbm9kZS13cmFwcGVyXCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKVxyXG4gICAgICAgICAgICA/ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlLXdoaXRlLWJnJ1xyXG4gICAgICAgICAgICA6ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZSB3LTEwMCBkLWZsZXggZ2FwLWxnLTMgbXktMCBnYXAtMCBnYXAtc20tMCBnYXAtbWQtMlwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Qm94U2hhZG93KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiByb2xlPVwiZ3JpZGNlbGxcIj5cclxuICAgICAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCIhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlXCJcclxuICAgICAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJ2aWV3Q2hpbGRHcm91cHMobm9kZSlcIlxyXG4gICAgICAgICAgICBbaWNvbkJ1dHRvbl09XCJnZXRUb2dnbGVCdXR0b25JbmZvKG5vZGUpXCJcclxuICAgICAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cE5vZGVPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBOb2RlT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpZWVlc2FHcm91cEluZm9PdXRsZXQ7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cIlxyXG4gICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImQtZmxleCBkLW5vbmUgZ2FwLTMgZC1zbS1mbGV4IGQtbWQtZmxleCBkLWxnLWZsZXggaWVlZXNhLXRyZWVfX2dyb3VwLWFjdGlvbnNcIlxyXG4gICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGllZWVzYS1tZW51XHJcbiAgICAgICAgW21lbnVJdGVtc109XCJnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhub2RlKVwiXHJcbiAgICAgICAgKG1lbnVJdGVtQ2xpY2spPVwib25Hcm91cEFjdGlvbnNDbGljaygkZXZlbnQpOyBoYW5kbGVHcm91cEFjdGlvbnMobm9kZSlcIlxyXG4gICAgICAgIGNsYXNzPVwiZC1sZy1ub25lIGQtbWQtbm9uZSBkLXNtLW5vbmVcIlxyXG4gICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgID48L2llZWVzYS1tZW51PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBJbmZvT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVfX2dyb3VwLWluZm8td3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX2dyb3VwLWluZm8gZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtc20tY29sdW1uIGZsZXgtbWQtY29sdW1uIGZsZXgtbGctcm93IGFsaWduLWl0ZW1zLXN0YXJ0IGFsaWduLWl0ZW1zLXNtLWJhc2VsaW5lIGFsaWduLWl0ZW1zLW1kLWJhc2VsaW5lIGFsaWduLWl0ZW1zLWxnLWJhc2VsaW5lIGdhcC0yIG1iLTFcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtbmFtZSBpZWVlc2EtaGVhZGxpbmUtc20tMjZcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJub2RlPy5pdGVtPy5ncm91cE5hbWVcIlxyXG4gICAgICAgICAgICBpZWVlc2FUZXh0VHJ1bmNhdGVkXHJcbiAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgICA+e3sgbm9kZT8uaXRlbT8uZ3JvdXBOYW1lIH19PC9wPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1hY3JvbnltIGllZWVzYS10aXRsZS1sZy0yNFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIm5vZGU/Lml0ZW0/Lmdyb3VwQWNyb255bVwiXHJcbiAgICAgICAgICAgIGllZWVzYVRleHRUcnVuY2F0ZWRcclxuICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgbm9kZT8uaXRlbT8uZ3JvdXBBY3JvbnltIH19XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS1ib2R5LW1kLTE2IGllZWVzYS10cmVlX19ub2RlLWdyb3VwLWRlc2NcIj5cclxuICAgICAgICAgIHt7IG5vZGU/Lml0ZW0/Lmdyb3VwVHlwZUluZm8/Lm5hbWUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQgbGV0LW5vZGU+XHJcbiAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhub2RlKTsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgICBbaWNvbkJ1dHRvbl09XCJpdGVtXCJcclxuICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIlxyXG4gICAgICAgICAgb25Hcm91cEFjdGlvbnNDbGljaygkZXZlbnQpOyBoYW5kbGVHcm91cEFjdGlvbnMobm9kZSlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L21hdC10cmVlPlxyXG48L2Rpdj5cclxuIl19
|
|
693
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBR04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBRWIsbUJBQW1CLEVBRW5CLHNCQUFzQixHQUN2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0vQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7O0FBRXBFOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNwQjtJQUNFLDBDQUEwQztJQUNuQyxJQUFlO0lBQ3RCLDBDQUEwQztJQUNuQyxRQUFRLENBQUM7SUFDaEIsMENBQTBDO0lBQ25DLGFBQWEsS0FBSztJQUN6QiwwQ0FBMEM7SUFDbkMsWUFBWSxLQUFLLENBQUMsNkNBQTZDOztRQU4vRCxTQUFJLEdBQUosSUFBSSxDQUFXO1FBRWYsVUFBSyxHQUFMLEtBQUssQ0FBSTtRQUVULGVBQVUsR0FBVixVQUFVLENBQVE7UUFFbEIsY0FBUyxHQUFULFNBQVMsQ0FBUTtJQUN2QixDQUFDO0NBQ0w7QUFFRDs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLE1BQU07SUFJakI7Ozs7T0FJRztJQUNILGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBQyxLQUFrQjtRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsSUFBaUI7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDNUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLElBQWU7UUFDMUIsT0FBTyxDQUNMLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FDdEUsQ0FBQztJQUNKLENBQUM7K0dBMUNVLE1BQU07bUhBQU4sTUFBTSxjQURPLE1BQU07OzRGQUNuQixNQUFNO2tCQURsQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7QUE2Q2xDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUczQjs7OztPQUlHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsSUFBSSxJQUFJLENBQUMsS0FBa0I7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDtJQUNFLDBDQUEwQztJQUNsQyxXQUF1QztJQUMvQywwQ0FBMEM7SUFDbEMsUUFBZ0IsQ0FBQyw2Q0FBNkM7O1FBRjlELGdCQUFXLEdBQVgsV0FBVyxDQUE0QjtRQUV2QyxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBdkIxQixhQUFRLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7UUFDcEQsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFjLEVBQUUsQ0FBQyxDQUFDO0lBdUIvQyxDQUFDO0lBRUo7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsZ0JBQWtDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU87YUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEIsSUFDRyxNQUFxQyxDQUFDLEtBQUs7Z0JBQzNDLE1BQXFDLENBQUMsT0FBTyxFQUM5QztnQkFDQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBb0MsQ0FBQyxDQUFDO2FBQzlEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDOUQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDckIsQ0FBQztJQUNKLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsc0lBQXNJO0lBQ3RJLFVBQVUsQ0FBQyxnQkFBa0M7UUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLE1BQWtDO1FBQ2xELElBQUksTUFBTSxFQUFFLEtBQUssRUFBRTtZQUNqQixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELElBQUksTUFBTSxFQUFFLE9BQU8sRUFBRTtZQUNuQixNQUFNLENBQUMsT0FBTztpQkFDWCxLQUFLLEVBQUU7aUJBQ1AsT0FBTyxFQUFFO2lCQUNULE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxVQUFVLENBQUMsV0FBc0IsRUFBRSxNQUFlO1FBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDMUIsaURBQWlEO1lBQ2pELE9BQU87U0FDUjtRQUVELElBQUksTUFBTSxFQUFFO1lBQ1YsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNoRCxNQUFNLEtBQUssR0FBRyxRQUFRLEVBQUUsR0FBRyxDQUN6QixDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsSUFBSSxTQUFTLENBQ1gsSUFBSSxFQUNKLFdBQVcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUN0QixJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FDbEMsQ0FDSixDQUFDO1lBQ0YsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztTQUMzQzthQUFNO1lBQ0wsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsS0FDRSxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUNqQixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsV0FBVyxFQUFFLEtBQUssRUFDakUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsb0NBQW9DO2NBQ2pELEdBQUU7WUFDSixJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFDRDs7Ozs7R0FLRztBQWtCSCxNQUFNLE9BQU8saUJBQWlCO0lBc0I1QixJQUNJLGdCQUFnQixDQUFDLEtBQWtCO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksS0FBSztZQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQ0ksZUFBZSxDQUFDLEtBQWtCO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFDSSwyQkFBMkIsQ0FBQyxLQUFjO1FBQzVDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUNELElBQUksMkJBQTJCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUNJLGtCQUFrQixDQUFDLEVBQXNCO1FBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQVNELDZEQUE2RDtJQUM3RDtJQUNFLDBDQUEwQztJQUNuQyxRQUFnQjtJQUN2QiwwQ0FBMEM7SUFDbkMsVUFBc0I7SUFDN0IsMENBQTBDO0lBQ25DLGFBQTRCLENBQUMsNkNBQTZDOztRQUoxRSxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBRWhCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFFdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUF0RXJDLDhEQUE4RDtRQUM5RCxjQUFTLEdBQVEsU0FBUyxDQUFDO1FBQzNCLFlBQU8sR0FBVyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUM7UUFDdEQsc0JBQWlCLEdBQVcsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLENBQUM7UUFLMUUsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRXBELHlCQUFvQixHQUFlLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsMEJBQXFCLEdBQWUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwRCxtQkFBYyxHQUFHLGNBQWMsQ0FBQztRQUVoQyxjQUFTLEdBQVcsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQ3RDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMsRUFBRSxLQUFLLFdBQVcsRUFBRSxpQkFBaUI7WUFDdkMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxXQUFXLEVBQUUsbUJBQW1CLENBQzVDLENBQUM7UUFtQk0sMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBb0I1QixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBQ2pELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFDakQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUM1RCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBQ2pELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQThCMUQ7Ozs7V0FJRztRQUNILGFBQVEsR0FBRyxDQUFDLElBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUU1Qzs7OztXQUlHO1FBQ0gsaUJBQVksR0FBRyxDQUFDLElBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztRQUVyRDs7Ozs7O1dBTUc7UUFDSCxtQkFBYyxHQUFHLENBQUMsS0FBYSxFQUFFLFNBQW9CLEVBQUUsRUFBRSxDQUN2RCxTQUFTLENBQUMsVUFBVSxDQUFDO0lBM0NwQixDQUFDO0lBQ0o7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVO1lBQ3pCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDL0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUF3QkQ7Ozs7T0FJRztJQUNILGVBQWUsQ0FBQyxJQUFlO1FBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUM1QixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCw4REFBOEQ7SUFDOUQsWUFBWTtRQUNWLE9BQU87WUFDTCxTQUFTLEVBQUUsK0JBQStCO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsa0JBQWtCO1FBQ2hCLElBQ0UsSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUN0RTtZQUNBLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDakQsSUFDRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLENBQzlCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sS0FBSyxlQUFlLEVBQUUsT0FBTyxDQUMzRCxLQUFLLENBQUMsQ0FBQyxFQUNSO29CQUNBLE1BQU0sWUFBWSxHQUFHLElBQUksU0FBUyxDQUNoQyxlQUFlLEVBQ2YsQ0FBQyxFQUNELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUM1QyxDQUFDO29CQUNGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7b0JBQ2xELG1CQUFtQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7b0JBQzNDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2lCQUN2QztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLEVBQ3BFO1lBQ0EsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztTQUN2QzthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FDcEMsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsWUFBWSxDQUNsQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzFFO0lBQ0gsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsVUFBdUI7UUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsSUFBSSxDQUNqQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDekUsQ0FBQztRQUNGLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLElBQ0UsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPO2dCQUNuQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFDcEQ7Z0JBQ0EsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDckQsSUFBSSxDQUFDLElBQUksR0FBRyxVQUF1QixDQUFDO2dCQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvQjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztJQUM1QyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsZUFBZTtRQUNiLElBQUksQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7UUFDbEQsSUFDRSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUN0RTtZQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQzNDLE1BQU0sZUFBZSxHQUFHLElBQUksU0FBUyxDQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQ3hCLElBQUksQ0FDTCxDQUFDO2dCQUNGLG1CQUFtQixDQUFDLE1BQU0sQ0FDeEIsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDL0MsQ0FBQyxFQUNELGVBQWUsQ0FDaEIsQ0FBQztnQkFDRixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUMxQztZQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNuRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3BELFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDOUIsSUFDRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLENBQzlCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sS0FBSyxTQUFTLEVBQUUsT0FBTyxDQUNyRCxLQUFLLENBQUMsQ0FBQyxFQUNSO3dCQUNBLE1BQU0sWUFBWSxHQUFHLElBQUksU0FBUyxDQUNoQyxTQUFTLEVBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FDdkMsQ0FBQzt3QkFDRixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO3dCQUNsRCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0NBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7NkJBQzFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNILG1CQUFtQixDQUFDLE1BQU0sQ0FDeEIsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQ25ELENBQUMsRUFDRCxZQUFZLENBQ2IsQ0FBQzt3QkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztxQkFDNUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUN2RCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUNqRSxDQUFDO1lBQ0YsSUFBSSxDQUFDLDZCQUE2QixDQUNoQyxrQkFBa0IsR0FBRyxDQUFDLEVBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FDNUQsQ0FBQztTQUNIO2FBQU0sSUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLEtBQUssaUJBQWlCLENBQUMsSUFBSSxFQUNwRTtZQUNBLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUM3RCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUN2RSxDQUFDO1lBQ0YsSUFBSSxDQUFDLDZCQUE2QixDQUNoQyx3QkFBd0IsR0FBRyxDQUFDLEVBQzVCLElBQUksQ0FBQyxZQUFZLENBQ2Ysd0JBQXdCLEVBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNyQixDQUNGLENBQUM7U0FDSDthQUFNLElBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLGlCQUFpQixDQUFDLE1BQU0sRUFDdEU7WUFDQSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILGVBQWUsQ0FBQyxjQUFrQztRQUNoRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksY0FBYyxFQUFFO1lBQ3RDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUN0RCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssY0FBYyxDQUMvQyxDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDaEUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNqRCxJQUFJLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRTtvQkFDN0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQzVELENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FDakUsQ0FBQztvQkFDRixJQUFJLHVCQUF1QixLQUFLLENBQUMsQ0FBQyxFQUFFO3dCQUNsQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDaEQsdUJBQXVCLENBQ3hCLENBQUM7d0JBQ0YsSUFBSSxrQkFBa0IsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFOzRCQUM5RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWTtnQ0FDbEMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7NEJBQzNDLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUU7Z0NBQzlDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dDQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLFNBQVMsQ0FDM0Isa0JBQWtCLENBQUMsSUFBSSxFQUN2QixrQkFBa0IsQ0FBQyxLQUFLLEVBQ3hCLEtBQUssQ0FDTixDQUFDO2dDQUNGLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDOzZCQUMvRDtpQ0FBTTtnQ0FDTCxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7NkJBQ2xEO3lCQUNGO3FCQUNGO3lCQUFNO3dCQUNMLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDbEQ7aUJBQ0Y7cUJBQU07b0JBQ0wsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNsRDthQUNGO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7WUFDM0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0gsWUFBWSxDQUNWLGtCQUEwQixFQUMxQixVQUF1QjtRQUV2QixNQUFNLG9CQUFvQixHQUN4QixVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ25ELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEtBQUssS0FBSyxHQUFHLGtCQUFrQixHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN2RSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO2dCQUN0RSxJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQzlDLElBQ0UsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQ2hFO3dCQUNBLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjs7Z0JBQU0sTUFBTTtTQUNkO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCw2QkFBNkIsQ0FBQyxVQUFrQixFQUFFLFFBQWdCO1FBQ2hFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxNQUFNLENBQ2YsVUFBVSxFQUNWLFFBQVEsR0FBRyxVQUFVLEVBQ3JCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQ3hFLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7SUFDcEMsQ0FBQztJQUNEOzs7T0FHRztJQUNILDhCQUE4QjtRQUM1QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUN0QyxLQUNFLElBQUksTUFBTSxHQUFHLENBQUMsRUFDZCxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFDMUIsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUM5QztZQUNBLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUN6QixLQUNFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUNsRCxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFDMUIsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUM5QztnQkFDQSxXQUFXO29CQUNULElBQUksQ0FBQyxhQUFhLENBQUM7d0JBQ2pCLFVBQVUsQ0FBQyxNQUFNLENBQUM7d0JBQ2xCLFVBQVUsQ0FBQyxXQUFXLENBQUM7cUJBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUMxQixDQUFDLENBQUMsTUFBTTt3QkFDUixDQUFDLENBQUMsV0FBVyxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFO2dCQUMxQixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUNoQyxNQUFNLEVBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQ3RDLENBQUM7Z0JBQ0YsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FDakMsV0FBVyxFQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUMzQyxDQUFDO2dCQUNGLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3hELG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO2dCQUN4QyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQ3JDLFdBQVcsQ0FDWixDQUNGLENBQUM7Z0JBQ0YsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLG1CQUFtQixDQUFDLElBQUksQ0FDdEIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsRUFDMUMsVUFBVSxDQUFDLE1BQU0sQ0FDbEIsQ0FDRixDQUFDO2dCQUNGLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQzthQUNsQztTQUNGO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0lBQ3BDLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILGFBQWEsQ0FBQyxNQUFtQjtRQUMvQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFpQixFQUFFLE1BQWlCLEVBQUUsRUFBRTtZQUMxRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzRCxJQUFJLFdBQVcsR0FBRyxXQUFXO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ3BDLElBQUksV0FBVyxHQUFHLFdBQVc7Z0JBQUUsT0FBTyxDQUFDLENBQUM7aUJBQ3hDLElBQUksV0FBVyxLQUFLLFdBQVcsRUFBRTtnQkFDcEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNkLE9BQU8sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtvQkFDOUMsSUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7d0JBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQzt3QkFFL0IsT0FBTyxDQUFDLENBQUM7eUJBQ04sSUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7d0JBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQzt3QkFFL0IsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDWixLQUFLLEVBQUUsQ0FBQztpQkFDVDthQUNGO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsSUFBdUI7UUFDekMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FBQyxLQUFnQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsS0FBZ0I7UUFDakMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDNUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRTtZQUN4RSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxXQUFXLENBQUMsVUFBVSxFQUFFO1lBQ2xFLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTTtZQUN2RCw4REFBOEQ7WUFDOUQsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxLQUFLLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUNsRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztZQUNYLElBQUksQ0FBQywyQkFBMkIsR0FBRztnQkFDakMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJO2dCQUN0QixlQUFlLEVBQUUsbUJBQW1CO2FBQ3JDLENBQUM7WUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM1RDthQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxXQUFXLENBQUMsWUFBWSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsdUJBQXVCLENBQUMsS0FBZ0I7UUFDdEMsTUFBTSxZQUFZLEdBQVcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUMzRSxNQUFNLGdCQUFnQixHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsQ0FBQyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFDRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssV0FBVyxDQUFDLFdBQVc7Z0JBQ2hDLENBQUMsQ0FBQyxnQkFBZ0I7b0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUN2QyxnQkFBZ0IsQ0FDakIsQ0FBQztvQkFDRixDQUFDLENBQUMsZ0JBQWdCO3dCQUNoQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUN2QyxnQkFBZ0IsQ0FDakI7NEJBQ0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQ3pDLGdCQUFnQixDQUNqQjs0QkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFDdEMsZ0JBQWdCLENBQ2pCOzRCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUNyQzs0QkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFDeEMsZ0JBQWdCLENBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxVQUFVO29CQUMvQixDQUFDLGdCQUFnQjtvQkFDakIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQzlCLGdCQUFnQixDQUNqQjt3QkFDQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FDdEMsQ0FBQyxDQUFDO2dCQUNQLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxXQUFXLENBQUMsWUFBWTtvQkFDakMsQ0FBQyxnQkFBZ0I7b0JBQ2pCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUNoQyxnQkFBZ0IsQ0FDakI7d0JBQ0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQ3RDLENBQUM7b0JBQ0osQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxnQkFBZ0I7b0JBQ3JDLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhO29CQUN2RCxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFDbkMsZ0JBQWdCLENBQ2pCO3dCQUNDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUN0QyxDQUFDO29CQUNKLENBQUMsZ0JBQWdCLENBQUMsRUFDcEI7Z0JBQ0EsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUNEOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxLQUFhLEVBQUUsVUFBc0I7UUFDN0MsT0FBTyxVQUFVLENBQUMsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDOytHQXZsQlUsaUJBQWlCO21HQUFqQixpQkFBaUIsc2ZDN1A5QixnMElBMEhBLHFpVERzSEksWUFBWSx5bEJBQ1osYUFBYSxnaEJBQ2IsYUFBYSw4QkFDYixlQUFlLCtCQUNmLGFBQWEseUxBQ2IsbUJBQW1CLHFJQUNuQixnQkFBZ0IsK0hBQ2hCLHNCQUFzQjs7NEZBTWIsaUJBQWlCO2tCQWpCN0IsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3FCQUN2QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJOytJQXlCakMsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVVGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBVUYsMkJBQTJCO3NCQUQ5QixLQUFLO2dCQVNGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFTTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBR0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0YWJsZSxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE1lbnVDb21wb25lbnQsXHJcbiAgTWVudSxcclxuICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gIEljb25CdXR0b24sXHJcbiAgVGV4dFRydW5jYXRlZERpcmVjdGl2ZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb2xsZWN0aW9uVmlld2VyLFxyXG4gIFNlbGVjdGlvbkNoYW5nZSxcclxuICBEYXRhU291cmNlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRUcmVlTW9kdWxlLCBNYXRUcmVlTm9kZVBhZGRpbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQgeyBFZGl0R3JvdXBBbmRQYXJlbnRJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VkaXQtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IEdyb3Vwc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyb3VwRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9wZXJtaXNzaW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtcGVybWlzc2lvbnMubW9kZWwnO1xyXG4vKipcclxuICogRHluYW1pYyBGbGF0IG5vZGUgY3JlYXRlcyBhIG5vZGUgc3RydWN0dXJlXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEdyb3VwTm9kZVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdyb3VwTm9kZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBpdGVtOiBHcm91cEluZm8sXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBsZXZlbCA9IDEsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBleHBhbmRhYmxlID0gZmFsc2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cclxuICApIHt9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHcm91cHMgc3RvcmVzIHRoZSBwYXJlbnQgbm9kZXMgYW5kIGNoaWxkIG5vZGVzXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEdyb3Vwc1xyXG4gKi9cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEdyb3VwcyB7XHJcbiAgcm9vdExldmVsTm9kZXMhOiBHcm91cEluZm9bXTtcclxuICAvKiogSW5pdGlhbCBkYXRhIGZyb20gZGF0YWJhc2UgKi9cclxuICBwcml2YXRlIGNoaWxkR3JvdXBzITogR3JvdXBJbmZvW107XHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBDaGlsZCBncm91cHMgaW5mb1xyXG4gICAqIEByZXR1cm4geyp9ICB7R3JvdXBJbmZvW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIGdldENoaWxkR3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGlsZEdyb3VwcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgQ2hpbGQgZ3JvdXBzIGluZm9cclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb1tdfSB2YWx1ZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBzZXRDaGlsZEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoaWxkR3JvdXBzID0gdmFsdWU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGdyb3VwcyBkYXRhIGFuZCBjcmVhdGVzIHRoZSBub2RlIHN0cnVjdHVyZSBmb3IgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb1tdfSBkYXRhXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cE5vZGVbXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgaW5pdGlhbERhdGEoZGF0YTogR3JvdXBJbmZvW10pOiBHcm91cE5vZGVbXSB7XHJcbiAgICB0aGlzLnJvb3RMZXZlbE5vZGVzID0gZGF0YTtcclxuICAgIHJldHVybiB0aGlzLnJvb3RMZXZlbE5vZGVzLm1hcChcclxuICAgICAgKG5vZGUpID0+IG5ldyBHcm91cE5vZGUobm9kZSwgMCwgdGhpcy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gbm9kZVxyXG4gICAqIEByZXR1cm4geyp9ICB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlKG5vZGU6IEdyb3VwSW5mbyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCEhbm9kZT8uY2hpbGRyZW4gJiYgbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHx8IG5vZGU/Lmhhc0NoaWxkcmVuXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRHluYW1pYyBEYXRhIFNvdXJjZSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHdpdGggZHluYW1pYyBkYXRhIGJhc2VcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzRGF0YVNvdXJjZVxyXG4gKiBAaW1wbGVtZW50cyB7RGF0YVNvdXJjZTxHcm91cE5vZGU+fVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2UgaW1wbGVtZW50cyBEYXRhU291cmNlPEdyb3VwTm9kZT4ge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBkYXRhQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cE5vZGVbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVwZGF0ZWQgdHJlZSBjb250cm9sIGRhdGFcclxuICAgKiBAdHlwZSB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBnZXQgZGF0YSgpOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhQ2hhbmdlPy52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5zaW9uTW9kZWw/LmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KS5hZGRlZCB8fFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikucmVtb3ZlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVUcmVlQ29udHJvbChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbWVyZ2UoY29sbGVjdGlvblZpZXdlcj8udmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2U/LmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZD8uZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIHRydWUpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2U/LnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2U/LmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGE/LmluZGV4T2YoY2xpY2tlZE5vZGUpO1xyXG4gICAgaWYgKCFjaGlsZHJlbiB8fCBpbmRleCA8IDApIHtcclxuICAgICAgLy8gSWYgbm8gY2hpbGRyZW4sIG9yIGNhbm5vdCBmaW5kIHRoZSBub2RlLCBubyBvcFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4cGFuZCkge1xyXG4gICAgICBjbGlja2VkTm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbj8ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGU/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YT8uc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5kYXRhW2ldPy5sZXZlbCA+IGNsaWNrZWROb2RlPy5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhPy5zcGxpY2UoaW5kZXggKyAxLCBjb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoZSBjaGFuZ2VcclxuICAgIHRoaXMuZGF0YUNoYW5nZT8ubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBidXR0b25zOiBNZW51W10gPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8uYnV0dG9ucztcclxuICB0cmVlUGFkZGluZ0luZGVudDogbnVtYmVyID0gdGhpcy5jb25zdGFudHM/LnZpZXdHcm91cHM/LnRyZWVQYWRkaW5nSW5kZW50O1xyXG4gIHNlbGVjdGVkR3JvdXAhOiBHcm91cE5vZGU7XHJcbiAgc2VsZWN0ZWRHcm91cEFjdGlvbiE6IE1lbnUgfCBJY29uQnV0dG9uO1xyXG4gIHRyZWVDb250cm9sITogRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT47XHJcbiAgZGF0YVNvdXJjZSE6IEdyb3Vwc0RhdGFTb3VyY2U7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIG1hdFRyZWVOb2RlUGFkZGluZyE6IE1hdFRyZWVOb2RlUGFkZGluZzxHcm91cE5vZGU+O1xyXG4gIHBsdXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzRdO1xyXG4gIG1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s1XTtcclxuICBlZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8hOiBFZGl0R3JvdXBBbmRQYXJlbnRJbmZvO1xyXG4gIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGU7XHJcblxyXG4gIG1lbnVJdGVtczogTWVudVtdID0gdGhpcy5idXR0b25zPy5maWx0ZXIoXHJcbiAgICAoZSkgPT5cclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24/LkVYUEFORF9HUk9VUF9WSUVXICYmXHJcbiAgICAgIGUuaWQgIT09IEdyb3VwQWN0aW9uPy5DT0xMQVBTRV9HUk9VUF9WSUVXXHJcbiAgKTtcclxuICBwcml2YXRlIHBhcmVudEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhcmVudEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLnBhcmVudEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICBnZXQgcGFyZW50R3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRHcm91cHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjaGlsZEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLmNoaWxkR3JvdXBzID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWRDaGlsZEdyb3VwcygpO1xyXG4gIH1cclxuICBnZXQgY2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGlzR3JvdXBTZWFyY2hPckZpbHRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzR3JvdXBTZWFyY2hPckZpbHRlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBkZWxldGVkR3JvdXBJZCE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWxldGVkR3JvdXBJZEluZm8oaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IGlkO1xyXG4gICAgdGhpcy5kZWxldGVHcm91cE5vZGUodGhpcy5kZWxldGVkR3JvdXBJZCk7XHJcbiAgfVxyXG4gIGdldCBkZWxldGVkR3JvdXBJZEluZm8oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmRlbGV0ZWRHcm91cElkO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHVzZXJHcm91cFBlcm1pc3Npb25zITogR3JvdXBQZXJtaXNzaW9uW107XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZWRpdEdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRHcm91cEFuZFBhcmVudEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgdmlld1Jvc3RlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby1lbXB0eS1mdW5jdGlvblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZGF0YWJhc2U6IEdyb3VwcyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBncm91cHNTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgdHJlZSB2aWV3IGNvbXBvbmVudFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRHcm91cERhdGFTb3VyY2UoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQXNzaWduIEFSSUEgcm9sZSBmb3IgYWxsIG1hdCB0cmVlIG5vZGVzIGFzIFwicm93XCJcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGFDaGFuZ2VcclxuICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHJlZUl0ZW1Ob2RlcyA9XHJcbiAgICAgICAgICB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPXRyZWVpdGVtXScpO1xyXG4gICAgICAgIHRyZWVJdGVtTm9kZXM/LmZvckVhY2goKG5vZGU6IEhUTUxFbGVtZW50KSA9PiAobm9kZS5yb2xlID0gJ3JvdycpKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGxldmVsIG9mIHRoZSBub2RlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRMZXZlbCA9IChub2RlOiBHcm91cE5vZGUpID0+IG5vZGU/LmxldmVsO1xyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGlzRXhwYW5kYWJsZSA9IChub2RlOiBHcm91cE5vZGUpID0+IG5vZGU/LmV4cGFuZGFibGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBwYXNzZWQgbm9kZSBoYXMgY2hpbGRyZW4gb3RoZXJ3aXNlIGZhbHNlXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IG5vZGVcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGhhc0NoaWxkR3JvdXBzID0gKGluZGV4OiBudW1iZXIsIF9ub2RlRGF0YTogR3JvdXBOb2RlKSA9PlxyXG4gICAgX25vZGVEYXRhLmV4cGFuZGFibGU7XHJcbiAgLyoqXHJcbiAgICogRW1pdHMgdGhlIGdyb3VwIGluZm8gd2hlbiB0aGUgdG9nZ2xlIGdyb3VwIGlzIGNsaWNrZWQgb3IgdG9nZ2xlcyB0aGUgZ3JvdXAgdmlld1xyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBncm91cFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHZpZXdDaGlsZEdyb3Vwcyhub2RlOiBHcm91cE5vZGUpIHtcclxuICAgIGlmICghbm9kZT8uaXRlbT8uaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQobm9kZSkpIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbD8udG9nZ2xlKG5vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnNldEdyb3VwRnVuY3Rpb25UeXBlKEdyb3VwRnVuY3Rpb25UeXBlLlRPR0dMRSk7XHJcbiAgICAgIHRoaXMudG9nZ2xlR3JvdXBDbGljay5lbWl0KG5vZGU/Lml0ZW0pO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBub2RlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBib3ggc2hhZG93IGJhc2VkIG9uIHRoZSBncm91cCB0eXBlIGxlZ2VuZCBjb2xvclxyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXRCb3hTaGFkb3coKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGJveFNoYWRvdzogJzBweCAxcHggMHB4IDBweCAjYzljYmQwIGluc2V0JyxcclxuICAgIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGRhdGFTb3VyY2Ugd2l0aCBwYXJlbnQgZ3JvdXBzIGRhdGFcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBzZXRHcm91cERhdGFTb3VyY2UoKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSAmJlxyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuQ1JFQVRFXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5wYXJlbnRHcm91cHNJbmZvPy5mb3JFYWNoKChwYXJlbnRHcm91cE5vZGUpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/LmZpbmRJbmRleChcclxuICAgICAgICAgICAgKG5vZGUpID0+IG5vZGU/Lml0ZW0/Lmdyb3VwSWQgPT09IHBhcmVudEdyb3VwTm9kZT8uZ3JvdXBJZFxyXG4gICAgICAgICAgKSA9PT0gLTFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbnN0IG5ld0dyb3VwTm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgIHBhcmVudEdyb3VwTm9kZSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZS5pc0V4cGFuZGFibGUocGFyZW50R3JvdXBOb2RlKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlPy5wdXNoKG5ld0dyb3VwTm9kZSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGdyb3VwTm9kZXNSZWZlcmVuY2U7XHJcbiAgICAgICAgICB0aGlzLnNvcnRQYXJlbnRHcm91cHNBbHBoYWJldGljYWxseSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuRURJVFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwKHRoaXMucGFyZW50R3JvdXBzSW5mbyk7XHJcbiAgICAgIHRoaXMuc29ydFBhcmVudEdyb3Vwc0FscGhhYmV0aWNhbGx5KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+KFxyXG4gICAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGFibGVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IEdyb3Vwc0RhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy5kYXRhYmFzZSk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhYmFzZT8uaW5pdGlhbERhdGEodGhpcy5wYXJlbnRHcm91cHNJbmZvKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdXBkYXRlZCBub2RlIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtHcm91cEluZm9bXX0gZ3JvdXBzSW5mb1xyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGVkaXRHcm91cChncm91cHNJbmZvOiBHcm91cEluZm9bXSkge1xyXG4gICAgY29uc3QgZ3JvdXBOb2RlUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlPy5kYXRhO1xyXG4gICAgY29uc3QgZWRpdGVkTm9kZSA9IGdyb3Vwc0luZm8/LmZpbmQoXHJcbiAgICAgIChub2RlKSA9PlxyXG4gICAgICAgIG5vZGU/Lmdyb3VwSWQgPT09IHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvPy5ncm91cEluZm8/Lmdyb3VwSWRcclxuICAgICk7XHJcbiAgICBncm91cE5vZGVSZWZlcmVuY2U/LmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIG5vZGU/Lml0ZW0/Lmdyb3VwSWQgPT09XHJcbiAgICAgICAgdGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSW5mbz8uZ3JvdXBJZFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBub09mQ2hpbGRyZW5SZWZlcmVuY2UgPSBub2RlLml0ZW0ubm9PZkNoaWxkcmVuO1xyXG4gICAgICAgIG5vZGUuaXRlbSA9IGVkaXRlZE5vZGUgYXMgR3JvdXBJbmZvO1xyXG4gICAgICAgIG5vZGUuaXRlbS5ub09mQ2hpbGRyZW4gPSBub09mQ2hpbGRyZW5SZWZlcmVuY2U7XHJcbiAgICAgICAgbm9kZS5leHBhbmRhYmxlID0gdGhpcy5kYXRhYmFzZS5pc0V4cGFuZGFibGUobm9kZT8uaXRlbSk7XHJcbiAgICAgICAgaWYgKG5vZGUuaXRlbS5oYXNDaGlsZHJlbiAmJiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkpIHtcclxuICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wudG9nZ2xlKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGdyb3VwTm9kZVJlZmVyZW5jZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTG9hZHMgdGhlIGNoaWxkIGdyb3VwcyBhbmQgdXBkYXRlcyB0aGUgdHJlZSB2aWV3LlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGxvYWRDaGlsZEdyb3VwcygpIHtcclxuICAgIHRoaXMuZGF0YWJhc2U/LnNldENoaWxkR3JvdXBzSW5mbyh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICBjb25zdCBncm91cE5vZGVzUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlPy5kYXRhO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSA9PT0gR3JvdXBGdW5jdGlvblR5cGUuQ1JFQVRFXHJcbiAgICApIHtcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXA/Lml0ZW0/Lmhhc0NoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwLml0ZW0uaGFzQ2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwUGFyZW50Tm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAuaXRlbSxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cC5sZXZlbCxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2Uuc3BsaWNlKFxyXG4gICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5pbmRleE9mKHRoaXMuc2VsZWN0ZWRHcm91cCksXHJcbiAgICAgICAgICAxLFxyXG4gICAgICAgICAgZ3JvdXBQYXJlbnROb2RlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChncm91cFBhcmVudE5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQodGhpcy5zZWxlY3RlZEdyb3VwKSkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5kYXRhYmFzZS5nZXRDaGlsZEdyb3Vwc0luZm8oKTtcclxuICAgICAgICBjaGlsZHJlbj8uZm9yRWFjaCgoZ3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgIChub2RlKSA9PiBub2RlPy5pdGVtPy5ncm91cElkID09PSBncm91cE5vZGU/Lmdyb3VwSWRcclxuICAgICAgICAgICAgKSA9PT0gLTFcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdHcm91cE5vZGUgPSBuZXcgR3JvdXBOb2RlKFxyXG4gICAgICAgICAgICAgIGdyb3VwTm9kZSxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXA/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgICB0aGlzLmRhdGFiYXNlPy5pc0V4cGFuZGFibGUoZ3JvdXBOb2RlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBncm91cE5vZGVzUmVmZXJlbmNlID0gdGhpcy5kYXRhU291cmNlPy5kYXRhO1xyXG4gICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAobm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cC5pdGVtLmdyb3VwSWQpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuaXRlbS5ub09mQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5zcGxpY2UoXHJcbiAgICAgICAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5pbmRleE9mKHRoaXMuc2VsZWN0ZWRHcm91cCkgKyAxLFxyXG4gICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgbmV3R3JvdXBOb2RlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2Rlc1JlZmVyZW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzZWxlY3RlZEdyb3VwSW5kZXggPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoXHJcbiAgICAgICAgKG5vZGUpID0+IG5vZGUuaXRlbS5ncm91cElkID09PSB0aGlzLnNlbGVjdGVkR3JvdXA/Lml0ZW0uZ3JvdXBJZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNvcnRDaGlsZEdyb3Vwc0FscGhhYmV0aWNhbGx5KFxyXG4gICAgICAgIHNlbGVjdGVkR3JvdXBJbmRleCArIDEsXHJcbiAgICAgICAgdGhpcy5nZXROZXh0R3JvdXAoc2VsZWN0ZWRHcm91cEluZGV4LCB0aGlzLmRhdGFTb3VyY2UuZGF0YSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5FRElUXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lZGl0R3JvdXAodGhpcy5jaGlsZEdyb3Vwc0luZm8pO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZFBhcmVudEdyb3VwSW5kZXggPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoXHJcbiAgICAgICAgKG5vZGUpID0+IG5vZGUuaXRlbS5ncm91cElkID09PSB0aGlzLnNlbGVjdGVkR3JvdXA/Lml0ZW0uZ3JvdXBQYXJlbnRJZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNvcnRDaGlsZEdyb3Vwc0FscGhhYmV0aWNhbGx5KFxyXG4gICAgICAgIHNlbGVjdGVkUGFyZW50R3JvdXBJbmRleCArIDEsXHJcbiAgICAgICAgdGhpcy5nZXROZXh0R3JvdXAoXHJcbiAgICAgICAgICBzZWxlY3RlZFBhcmVudEdyb3VwSW5kZXgsXHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5UT0dHTEVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sPy50b2dnbGUodGhpcy5zZWxlY3RlZEdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyB0aGUgc2VsZWN0ZWQgZ3JvdXAgYW5kIHVwZGF0ZXMgdGhlIHRyZWUgdmlldy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVsZXRlZEdyb3VwSWRcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBkZWxldGVHcm91cE5vZGUoZGVsZXRlZEdyb3VwSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2wgJiYgZGVsZXRlZEdyb3VwSWQpIHtcclxuICAgICAgY29uc3QgZGVsZXRlZEdyb3VwSW5kZXggPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoXHJcbiAgICAgICAgKG5vZGUpID0+IG5vZGUuaXRlbS5ncm91cElkID09PSBkZWxldGVkR3JvdXBJZFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkZWxldGVkR3JvdXAgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5hdChkZWxldGVkR3JvdXBJbmRleCk7XHJcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YTtcclxuICAgICAgaWYgKGRlbGV0ZWRHcm91cEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGlmIChkZWxldGVkR3JvdXA/Lml0ZW0uZ3JvdXBQYXJlbnRJZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29uc3QgZGVsZXRlZFBhcmVudEdyb3VwSW5kZXggPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIChub2RlKSA9PiBub2RlLml0ZW0uZ3JvdXBJZCA9PT0gZGVsZXRlZEdyb3VwPy5pdGVtLmdyb3VwUGFyZW50SWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoZGVsZXRlZFBhcmVudEdyb3VwSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZWRQYXJlbnRHcm91cCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmF0KFxyXG4gICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cEluZGV4XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChkZWxldGVkUGFyZW50R3JvdXAgJiYgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuID1cclxuICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLm5vT2ZDaGlsZHJlbiAtIDE7XHJcbiAgICAgICAgICAgICAgaWYgKGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLm5vT2ZDaGlsZHJlbiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0uaGFzQ2hpbGRyZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSBuZXcgR3JvdXBOb2RlKFxyXG4gICAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbSxcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLmxldmVsLFxyXG4gICAgICAgICAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2Uuc3BsaWNlKGRlbGV0ZWRHcm91cEluZGV4IC0gMSwgMiwgbmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2Uuc3BsaWNlKGRlbGV0ZWRHcm91cEluZGV4LCAxKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2Uuc3BsaWNlKGRlbGV0ZWRHcm91cEluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGFTb3VyY2VSZWZlcmVuY2U7XHJcbiAgICAgIHRoaXMuZGVsZXRlZEdyb3VwSWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGluZGV4IG9mIG5leHQgZ3JvdXAgYXQgdGhlIHNhbWUgbGV2ZWwuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNlbGVjdGVkR3JvdXBJbmRleFxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlW119IGRhdGFTb3VyY2VcclxuICAgKiBAcmV0dXJuIHsqfSAge251bWJlcn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBnZXROZXh0R3JvdXAoXHJcbiAgICBzZWxlY3RlZEdyb3VwSW5kZXg6IG51bWJlcixcclxuICAgIGRhdGFTb3VyY2U6IEdyb3VwTm9kZVtdXHJcbiAgKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBBY3JvbnltID1cclxuICAgICAgZGF0YVNvdXJjZVtzZWxlY3RlZEdyb3VwSW5kZXhdLml0ZW0uZ3JvdXBBY3JvbnltO1xyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAoaW5kZXggPSBzZWxlY3RlZEdyb3VwSW5kZXggKyAxOyBpbmRleCA8IGRhdGFTb3VyY2UubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGlmIChkYXRhU291cmNlW2luZGV4XS5pdGVtLmdyb3VwQWNyb255bS5pbmNsdWRlcyhzZWxlY3RlZEdyb3VwQWNyb255bSkpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZVtzZWxlY3RlZEdyb3VwSW5kZXhdLmxldmVsID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5sZXZlbCA9PT0gZGF0YVNvdXJjZVtpbmRleF0ubGV2ZWxcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgZ3JvdXBzIGFscGhhYmV0aWNhbGx5IGZyb20gZ2l2ZW4gc3RhcnQgaW5kZXggdG8gZW5kIGluZGV4LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydEluZGV4XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZEluZGV4XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBkYXRhU291cmNlLnNwbGljZShcclxuICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgZW5kSW5kZXggLSBzdGFydEluZGV4LFxyXG4gICAgICAuLi50aGlzLmdyb3Vwc1NvcnRpbmcodGhpcy5kYXRhU291cmNlLmRhdGEuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgcm9vdCBsZXZlbCBwYXJlbnQgZ3JvdXBzIGFscGhhYmV0aWNhbGx5LlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRQYXJlbnRHcm91cHNBbHBoYWJldGljYWxseSgpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBmb3IgKFxyXG4gICAgICBsZXQgZ3JvdXBBID0gMDtcclxuICAgICAgZ3JvdXBBIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgIGdyb3VwQSA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICkge1xyXG4gICAgICBsZXQgbG93ZXN0R3JvdXAgPSBncm91cEE7XHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGdyb3VwQiA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgZ3JvdXBCIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgZ3JvdXBCID0gdGhpcy5nZXROZXh0R3JvdXAoZ3JvdXBCLCBkYXRhU291cmNlKVxyXG4gICAgICApIHtcclxuICAgICAgICBsb3dlc3RHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NvcnRpbmcoW1xyXG4gICAgICAgICAgICBkYXRhU291cmNlW2dyb3VwQl0sXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VbbG93ZXN0R3JvdXBdLFxyXG4gICAgICAgICAgXSlbMF0gPT09IGRhdGFTb3VyY2VbZ3JvdXBCXVxyXG4gICAgICAgICAgICA/IGdyb3VwQlxyXG4gICAgICAgICAgICA6IGxvd2VzdEdyb3VwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsb3dlc3RHcm91cCAhPT0gZ3JvdXBBKSB7XHJcbiAgICAgICAgY29uc3QgbGVmdEdyb3VwID0gZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgIGdyb3VwQSxcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0R3JvdXAgPSBkYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgbG93ZXN0R3JvdXAsXHJcbiAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VSZWZlcmVuY2UgPSBkYXRhU291cmNlLnNsaWNlKDAsIGdyb3VwQSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKC4uLnJpZ2h0R3JvdXApO1xyXG4gICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2UucHVzaChcclxuICAgICAgICAgIC4uLmRhdGFTb3VyY2Uuc2xpY2UoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGxvd2VzdEdyb3VwXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goLi4ubGVmdEdyb3VwKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goXHJcbiAgICAgICAgICAuLi5kYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UubGVuZ3RoXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhU291cmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVdGlsaXR5IG1ldGhvZCB0byBzb3J0IGdyb3VwcyBieSBncm91cCBhY3JvbnltIGluIGFzY2VuZGluZyBvcmRlci5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZVtdfSBncm91cHNcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdyb3Vwc1NvcnRpbmcoZ3JvdXBzOiBHcm91cE5vZGVbXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHJldHVybiBncm91cHMuc29ydCgoZ3JvdXBBOiBHcm91cE5vZGUsIGdyb3VwQjogR3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBBID0gZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBCID0gZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmIChsb3dlckdyb3VwQSA8IGxvd2VyR3JvdXBCKSByZXR1cm4gLTE7XHJcbiAgICAgIGVsc2UgaWYgKGxvd2VyR3JvdXBBID4gbG93ZXJHcm91cEIpIHJldHVybiAxO1xyXG4gICAgICBlbHNlIGlmIChsb3dlckdyb3VwQSA9PT0gbG93ZXJHcm91cEIpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGdyb3VwQS5pdGVtLmdyb3VwQWNyb255bS5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSA8XHJcbiAgICAgICAgICAgIGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bVtpbmRleF1cclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSA+XHJcbiAgICAgICAgICAgIGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bVtpbmRleF1cclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbWVudSBncm91cCBhY3Rpb25cclxuICAgKiBAcGFyYW0ge01lbnV9IG1lbnVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwQWN0aW9uc0NsaWNrKG1lbnU6IE1lbnUgfCBJY29uQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24gPSBtZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBleHBhbmQvY29sbGFwc2UgaWNvbiBiYXNlZCBvbiB0aGUgdG9nZ2xlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFRvZ2dsZUJ1dHRvbkluZm8oZ3JvdXA6IEdyb3VwTm9kZSk6IEljb25CdXR0b24ge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQoZ3JvdXApKSByZXR1cm4gdGhpcy5taW51c0NpcmNsZUljb25CdXR0b247XHJcbiAgICByZXR1cm4gdGhpcy5wbHVzQ2lyY2xlSWNvbkJ1dHRvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgZW1pdHRlZCBncm91cCBhY3Rpb25zIGV2ZW50XHJcbiAgICogQHBhcmFtIHtHcm91cEluZm99IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFuZGxlR3JvdXBBY3Rpb25zKGdyb3VwOiBHcm91cE5vZGUpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5WSUVXX1JPU1RFUikge1xyXG4gICAgICB0aGlzLnZpZXdSb3N0ZXJDbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uQ1JFQVRFX1NVQl9HUk9VUCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcclxuICAgICAgdGhpcy5jcmVhdGVHcm91cENsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5FRElUX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgICBjb25zdCBlZGl0R3JvdXBQYXJlbnRJbmZvID0gdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maWx0ZXIoXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtPy5pdGVtPy5ncm91cElkID09PSBncm91cD8uaXRlbT8uZ3JvdXBQYXJlbnRJZFxyXG4gICAgICApWzBdPy5pdGVtO1xyXG4gICAgICB0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbyA9IHtcclxuICAgICAgICBncm91cEluZm86IGdyb3VwPy5pdGVtLFxyXG4gICAgICAgIHBhcmVudEdyb3VwSW5mbzogZWRpdEdyb3VwUGFyZW50SW5mbyxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5lZGl0R3JvdXBDbGljay5lbWl0KHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uREVMRVRFX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlR3JvdXBDbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZmlsdGVyZWQgbWVudSBpdGVtcyBiYXNlZCBvbiBncm91cHMgaGFzQ2hpbGRyZW4uXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7TWVudVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKGdyb3VwOiBHcm91cE5vZGUpOiBNZW51W10ge1xyXG4gICAgY29uc3QgZmlsdGVyZWRNZW51OiBNZW51W10gPSBbXTtcclxuICAgIGNvbnN0IGlzQWRtaW5Hcm91cFR5cGUgPSBncm91cD8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8uYnVzaW5lc3NSdWxlPy5pc0FkbWluO1xyXG4gICAgY29uc3QgZ3JvdXBQZXJtaXNzaW9ucyA9IGdyb3VwPy5pdGVtPy5wZXJtaXNzaW9ucztcclxuICAgIHRoaXMubWVudUl0ZW1zPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgIGUuaXNUb29sVGlwTmVlZGVkID0gZmFsc2U7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSICYmXHJcbiAgICAgICAgICAoKGlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUyxcclxuICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICkpIHx8XHJcbiAgICAgICAgICAgICghaXNBZG1pbkdyb3VwVHlwZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9HUk9VUF9PRkZJQ0VSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBfTUVNQkVSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfQUxMX1JPU1RFUlNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfTUVNQkVSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSkpKSkgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkVESVRfR1JPVVAgJiZcclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkVESVRfR1JPVVAsXHJcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9HUk9VUFNcclxuICAgICAgICAgICAgKSkpIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVAgJiZcclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkRFTEVURV9HUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWdyb3VwPy5pdGVtPy5oYXNDaGlsZHJlbikgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkNSRUFURV9TVUJfR1JPVVAgJiZcclxuICAgICAgICAgIGdyb3VwPy5pdGVtPy5ncm91cFR5cGVJbmZvPy5idXNpbmVzc1J1bGU/LmFsbG93U3ViR3JvdXAgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuQ1JFQVRFX1NVQkdST1VQLFxyXG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfR1JPVVBTXHJcbiAgICAgICAgICAgICkpICYmXHJcbiAgICAgICAgICAhaXNBZG1pbkdyb3VwVHlwZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZmlsdGVyZWRNZW51LnB1c2goZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpbHRlcmVkTWVudTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVGFrZXMgdGhlIGluZGV4IGFuZCB0aGUgaWNvbiBidXR0b24gYXMgYXJndW1lbnRzIGFuZCBuZWVkcyB0byByZXR1cm4gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGljb24gYnV0dG9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEBwYXJhbSB7SWNvbkJ1dHRvbn0gaWNvbkJ1dHRvblxyXG4gICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaWNvbkJ1dHRvbjogSWNvbkJ1dHRvbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaWNvbkJ1dHRvbi5pZDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTmdPbkRlc3Ryb3kgcGVyZm9ybXMgbmVjZXNzYXJ5IGNsZWFudXAgdGFza3MsIHN1Y2ggYXMgdW5zdWJzY3JpYmluZyBmcm9tIHN1YnNjcmlwdGlvbiB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImllZWVzYS10cmVlXCI+XHJcbiAgPG1hdC10cmVlXHJcbiAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiXHJcbiAgICBjbGFzcz1cImllZWVzYS10cmVlX19yb290XCJcclxuICAgICNyb290U2VsZWN0b3JcclxuICAgIHJvbGU9XCJ0cmVlZ3JpZFwiXHJcbiAgPlxyXG4gICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLWJvZHktbWQtMTZcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZSB3LTEwMCBkLWZsZXggZ2FwLWxnLTMgbXktMCBnYXAtMCBnYXAtc20tMCBnYXAtbWQtMlwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Qm94U2hhZG93KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICFpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUgPyAnaWVlZXNhLXRyZWVfX2NvbGxhcHNlLWljb24nIDogJydcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgID48L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cE5vZGVPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZEdyb3Vwc1wiXHJcbiAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cInRyZWVQYWRkaW5nSW5kZW50XCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNiBpZWVlc2EtdHJlZV9fcGFyZW50LW5vZGUtd3JhcHBlclwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgIHRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSlcclxuICAgICAgICAgICAgPyAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZS13aGl0ZS1iZydcclxuICAgICAgICAgICAgOiAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZSdcclxuICAgICAgICBcIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUgdy0xMDAgZC1mbGV4IGdhcC1sZy0zIG15LTAgZ2FwLTAgZ2FwLXNtLTAgZ2FwLW1kLTJcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldEJveFNoYWRvdygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgcm9sZT1cImdyaWRjZWxsXCI+XHJcbiAgICAgICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZVwiXHJcbiAgICAgICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwidmlld0NoaWxkR3JvdXBzKG5vZGUpXCJcclxuICAgICAgICAgICAgW2ljb25CdXR0b25dPVwiZ2V0VG9nZ2xlQnV0dG9uSW5mbyhub2RlKVwiXHJcbiAgICAgICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBOb2RlT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwTm9kZU91dGxldCBsZXQtbm9kZT5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWVlZXNhR3JvdXBJbmZvT3V0bGV0OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XCJcclxuICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggZC1ub25lIGdhcC0zIGQtc20tZmxleCBkLW1kLWZsZXggZC1sZy1mbGV4IGllZWVzYS10cmVlX19ncm91cC1hY3Rpb25zXCJcclxuICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpZWVlc2EtbWVudVxyXG4gICAgICAgIFttZW51SXRlbXNdPVwiZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMobm9kZSlcIlxyXG4gICAgICAgIChtZW51SXRlbUNsaWNrKT1cIm9uR3JvdXBBY3Rpb25zQ2xpY2soJGV2ZW50KTsgaGFuZGxlR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICBjbGFzcz1cImQtbGctbm9uZSBkLW1kLW5vbmUgZC1zbS1ub25lXCJcclxuICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICA+PC9pZWVlc2EtbWVudT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwSW5mb091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS10cmVlX19ncm91cC1pbmZvLXdyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ncm91cC1pbmZvIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LXNtLWNvbHVtbiBmbGV4LW1kLWNvbHVtbiBmbGV4LWxnLXJvdyBhbGlnbi1pdGVtcy1zdGFydCBhbGlnbi1pdGVtcy1zbS1iYXNlbGluZSBhbGlnbi1pdGVtcy1tZC1iYXNlbGluZSBhbGlnbi1pdGVtcy1sZy1iYXNlbGluZSBnYXAtMiBtYi0xXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cFxyXG4gICAgICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLW5hbWUgaWVlZXNhLWhlYWRsaW5lLXNtLTI2XCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwibm9kZT8uaXRlbT8uZ3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgICAgPnt7IG5vZGU/Lml0ZW0/Lmdyb3VwTmFtZSB9fTwvcD5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtYWNyb255bSBpZWVlc2EtdGl0bGUtbGctMjRcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJub2RlPy5pdGVtPy5ncm91cEFjcm9ueW1cIlxyXG4gICAgICAgICAgICBpZWVlc2FUZXh0VHJ1bmNhdGVkXHJcbiAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IG5vZGU/Lml0ZW0/Lmdyb3VwQWNyb255bSB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNiBpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1kZXNjXCI+XHJcbiAgICAgICAgICB7eyBub2RlPy5pdGVtPy5ncm91cFR5cGVJbmZvPy5uYW1lIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMobm9kZSk7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwiaXRlbVwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJcclxuICAgICAgICAgIG9uR3JvdXBBY3Rpb25zQ2xpY2soJGV2ZW50KTsgaGFuZGxlR3JvdXBBY3Rpb25zKG5vZGUpXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICA8L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9tYXQtdHJlZT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -2011,11 +2011,13 @@ class TreeViewComponent {
|
|
|
2011
2011
|
const groupNodesReference = this.dataSource?.data;
|
|
2012
2012
|
groupNodesReference?.push(newGroupNode);
|
|
2013
2013
|
this.dataSource.data = groupNodesReference;
|
|
2014
|
+
this.sortParentGroupsAlphabetically();
|
|
2014
2015
|
}
|
|
2015
2016
|
});
|
|
2016
2017
|
}
|
|
2017
2018
|
else if (this.groupsService.getGroupFunctionType() === GroupFunctionType.EDIT) {
|
|
2018
2019
|
this.editGroup(this.parentGroupsInfo);
|
|
2020
|
+
this.sortParentGroupsAlphabetically();
|
|
2019
2021
|
}
|
|
2020
2022
|
else {
|
|
2021
2023
|
this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);
|
|
@@ -2075,9 +2077,13 @@ class TreeViewComponent {
|
|
|
2075
2077
|
}
|
|
2076
2078
|
});
|
|
2077
2079
|
}
|
|
2080
|
+
const selectedGroupIndex = this.dataSource.data.findIndex((node) => node.item.groupId === this.selectedGroup?.item.groupId);
|
|
2081
|
+
this.sortChildGroupsAlphabetically(selectedGroupIndex + 1, this.getNextGroup(selectedGroupIndex, this.dataSource.data));
|
|
2078
2082
|
}
|
|
2079
2083
|
else if (this.groupsService.getGroupFunctionType() === GroupFunctionType.EDIT) {
|
|
2080
2084
|
this.editGroup(this.childGroupsInfo);
|
|
2085
|
+
const selectedParentGroupIndex = this.dataSource.data.findIndex((node) => node.item.groupId === this.selectedGroup?.item.groupParentId);
|
|
2086
|
+
this.sortChildGroupsAlphabetically(selectedParentGroupIndex + 1, this.getNextGroup(selectedParentGroupIndex, this.dataSource.data));
|
|
2081
2087
|
}
|
|
2082
2088
|
else if (this.groupsService.getGroupFunctionType() === GroupFunctionType.TOGGLE) {
|
|
2083
2089
|
this.treeControl?.toggle(this.selectedGroup);
|
|
@@ -2123,6 +2129,99 @@ class TreeViewComponent {
|
|
|
2123
2129
|
this.deletedGroupId = undefined;
|
|
2124
2130
|
}
|
|
2125
2131
|
}
|
|
2132
|
+
/**
|
|
2133
|
+
* Returns the index of next group at the same level.
|
|
2134
|
+
* @param {number} selectedGroupIndex
|
|
2135
|
+
* @param {GroupNode[]} dataSource
|
|
2136
|
+
* @return {*} {number}
|
|
2137
|
+
* @memberof TreeViewComponent
|
|
2138
|
+
*/
|
|
2139
|
+
getNextGroup(selectedGroupIndex, dataSource) {
|
|
2140
|
+
const selectedGroupAcronym = dataSource[selectedGroupIndex].item.groupAcronym;
|
|
2141
|
+
let index = 0;
|
|
2142
|
+
for (index = selectedGroupIndex + 1; index < dataSource.length; index++) {
|
|
2143
|
+
if (dataSource[index].item.groupAcronym.includes(selectedGroupAcronym)) {
|
|
2144
|
+
if (dataSource[selectedGroupIndex].level === 0) {
|
|
2145
|
+
if (dataSource[selectedGroupIndex].level === dataSource[index].level) {
|
|
2146
|
+
break;
|
|
2147
|
+
}
|
|
2148
|
+
}
|
|
2149
|
+
}
|
|
2150
|
+
else
|
|
2151
|
+
break;
|
|
2152
|
+
}
|
|
2153
|
+
return index;
|
|
2154
|
+
}
|
|
2155
|
+
/**
|
|
2156
|
+
* Sort the groups alphabetically from given start index to end index.
|
|
2157
|
+
* @param {number} startIndex
|
|
2158
|
+
* @param {number} endIndex
|
|
2159
|
+
* @memberof TreeViewComponent
|
|
2160
|
+
*/
|
|
2161
|
+
sortChildGroupsAlphabetically(startIndex, endIndex) {
|
|
2162
|
+
const dataSource = this.dataSource.data;
|
|
2163
|
+
dataSource.splice(startIndex, endIndex - startIndex, ...this.groupsSorting(this.dataSource.data.slice(startIndex, endIndex)));
|
|
2164
|
+
this.dataSource.data = dataSource;
|
|
2165
|
+
}
|
|
2166
|
+
/**
|
|
2167
|
+
* Sort the root level parent groups alphabetically.
|
|
2168
|
+
* @memberof TreeViewComponent
|
|
2169
|
+
*/
|
|
2170
|
+
sortParentGroupsAlphabetically() {
|
|
2171
|
+
let dataSource = this.dataSource.data;
|
|
2172
|
+
for (let groupA = 0; groupA < dataSource.length; groupA = this.getNextGroup(groupA, dataSource)) {
|
|
2173
|
+
let lowestGroup = groupA;
|
|
2174
|
+
for (let groupB = this.getNextGroup(groupA, dataSource); groupB < dataSource.length; groupB = this.getNextGroup(groupB, dataSource)) {
|
|
2175
|
+
lowestGroup =
|
|
2176
|
+
this.groupsSorting([
|
|
2177
|
+
dataSource[groupB],
|
|
2178
|
+
dataSource[lowestGroup],
|
|
2179
|
+
])[0] === dataSource[groupB]
|
|
2180
|
+
? groupB
|
|
2181
|
+
: lowestGroup;
|
|
2182
|
+
}
|
|
2183
|
+
if (lowestGroup !== groupA) {
|
|
2184
|
+
const leftGroup = dataSource.slice(groupA, this.getNextGroup(groupA, dataSource));
|
|
2185
|
+
const rightGroup = dataSource.slice(lowestGroup, this.getNextGroup(lowestGroup, dataSource));
|
|
2186
|
+
const dataSourceReference = dataSource.slice(0, groupA);
|
|
2187
|
+
dataSourceReference.push(...rightGroup);
|
|
2188
|
+
dataSourceReference.push(...dataSource.slice(this.getNextGroup(groupA, dataSource), lowestGroup));
|
|
2189
|
+
dataSourceReference.push(...leftGroup);
|
|
2190
|
+
dataSourceReference.push(...dataSource.slice(this.getNextGroup(lowestGroup, dataSource), dataSource.length));
|
|
2191
|
+
dataSource = dataSourceReference;
|
|
2192
|
+
}
|
|
2193
|
+
}
|
|
2194
|
+
this.dataSource.data = dataSource;
|
|
2195
|
+
}
|
|
2196
|
+
/**
|
|
2197
|
+
* Utility method to sort groups by group acronym in ascending order.
|
|
2198
|
+
* @param {GroupNode[]} groups
|
|
2199
|
+
* @return {*} {GroupNode[]}
|
|
2200
|
+
* @memberof TreeViewComponent
|
|
2201
|
+
*/
|
|
2202
|
+
groupsSorting(groups) {
|
|
2203
|
+
return groups.sort((groupA, groupB) => {
|
|
2204
|
+
const lowerGroupA = groupA.item.groupAcronym.toLowerCase();
|
|
2205
|
+
const lowerGroupB = groupB.item.groupAcronym.toLowerCase();
|
|
2206
|
+
if (lowerGroupA < lowerGroupB)
|
|
2207
|
+
return -1;
|
|
2208
|
+
else if (lowerGroupA > lowerGroupB)
|
|
2209
|
+
return 1;
|
|
2210
|
+
else if (lowerGroupA === lowerGroupB) {
|
|
2211
|
+
let index = 0;
|
|
2212
|
+
while (index < groupA.item.groupAcronym.length) {
|
|
2213
|
+
if (groupA.item.groupAcronym[index] <
|
|
2214
|
+
groupB.item.groupAcronym[index])
|
|
2215
|
+
return 1;
|
|
2216
|
+
else if (groupA.item.groupAcronym[index] >
|
|
2217
|
+
groupB.item.groupAcronym[index])
|
|
2218
|
+
return -1;
|
|
2219
|
+
index++;
|
|
2220
|
+
}
|
|
2221
|
+
}
|
|
2222
|
+
return 0;
|
|
2223
|
+
});
|
|
2224
|
+
}
|
|
2126
2225
|
/**
|
|
2127
2226
|
* Sets the selected menu group action
|
|
2128
2227
|
* @param {Menu} menu
|
|
@@ -2156,6 +2255,7 @@ class TreeViewComponent {
|
|
|
2156
2255
|
this.createGroupClick.emit(group?.item);
|
|
2157
2256
|
}
|
|
2158
2257
|
else if (this.selectedGroupAction?.id === GroupAction.EDIT_GROUP) {
|
|
2258
|
+
this.selectedGroup = group;
|
|
2159
2259
|
const editGroupParentInfo = this.dataSource?.data?.filter(
|
|
2160
2260
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2161
2261
|
(item) => item?.item?.groupId === group?.item?.groupParentId)[0]?.item;
|