@ieeesa-npm/groups 0.15.28 → 0.15.29
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.
|
@@ -617,13 +617,16 @@ export class TreeViewComponent {
|
|
|
617
617
|
* group, filtered by per-group permissions and group type. The "Manage
|
|
618
618
|
* Interest Form" action (SP3M-380) is gated: it renders only when the
|
|
619
619
|
* interest-form feature is enabled for the tenant
|
|
620
|
-
* (GroupsService.isInterestFormFeatureEnabled()) AND either the user holds
|
|
621
|
-
* VIEW_AND_MANAGE_GROUP_INTEREST permission for that specific group
|
|
622
|
-
* per-group, no global fallback) OR the user is a
|
|
623
|
-
*
|
|
624
|
-
*
|
|
625
|
-
*
|
|
626
|
-
*
|
|
620
|
+
* (GroupsService.isInterestFormFeatureEnabled()) AND either (a) the user holds
|
|
621
|
+
* the VIEW_AND_MANAGE_GROUP_INTEREST permission for that specific group
|
|
622
|
+
* (strictly per-group, no global fallback — e.g. a Chair), OR (b) the user is a
|
|
623
|
+
* cross-group admin whose admin role holds BOTH MANAGE_ALL_GROUPS ("Manage All
|
|
624
|
+
* Group Details") AND the interest permission globally. The admin override
|
|
625
|
+
* requires the interest permission too: an admin whose role is not mapped with
|
|
626
|
+
* the interest permission does NOT see the action on every group. It is always
|
|
627
|
+
* hidden on admin/system group types (e.g. the System Users Group), which are
|
|
628
|
+
* not real committees with an interest form, and hidden entirely when the
|
|
629
|
+
* feature is disabled. When shown it is kept leftmost by the trailing sort.
|
|
627
630
|
* @param {GroupNode} group
|
|
628
631
|
* @return {Menu[]}
|
|
629
632
|
* @memberof TreeViewComponent
|
|
@@ -660,19 +663,14 @@ export class TreeViewComponent {
|
|
|
660
663
|
(this.groupsService.validateAccess(this.permissionType.CREATE_SUBGROUP, groupPermissions) ||
|
|
661
664
|
this.groupsService.validateAccess(this.permissionType.MANAGE_ALL_GROUPS)) &&
|
|
662
665
|
!isAdminGroupType) ||
|
|
666
|
+
// Interest form: hidden on admin/system group types; else shown per-group
|
|
667
|
+
// (e.g. Chair) OR for an admin holding BOTH MANAGE_ALL_GROUPS and the interest permission.
|
|
663
668
|
(e?.id === GroupAction.MANAGE_INTEREST_FORM &&
|
|
664
669
|
this.groupsService.isInterestFormFeatureEnabled() &&
|
|
665
|
-
// Hidden on admin/system group types (e.g. the System Users Group):
|
|
666
|
-
// those are not real committees with an interest form.
|
|
667
670
|
!isAdminGroupType &&
|
|
668
|
-
// Either the user holds the interest permission on THIS specific group
|
|
669
|
-
// (strictly per-group: a non-member group has `permissions: null`,
|
|
670
|
-
// coerced to [] so validateAccess stays in its per-group branch and does
|
|
671
|
-
// NOT fall back to the global permission set), OR the user is a
|
|
672
|
-
// cross-group admin (MANAGE_ALL_GROUPS = "Manage All Group Details") who
|
|
673
|
-
// manages all groups and therefore sees the action on every non-admin group.
|
|
674
671
|
(this.groupsService.validateAccess(this.permissionType.VIEW_AND_MANAGE_GROUP_INTEREST, groupPermissions ?? []) ||
|
|
675
|
-
this.groupsService.validateAccess(this.permissionType.MANAGE_ALL_GROUPS)
|
|
672
|
+
(this.groupsService.validateAccess(this.permissionType.MANAGE_ALL_GROUPS) &&
|
|
673
|
+
this.groupsService.validateAccess(this.permissionType.VIEW_AND_MANAGE_GROUP_INTEREST))))) {
|
|
676
674
|
filteredMenu.push(e);
|
|
677
675
|
}
|
|
678
676
|
});
|
|
@@ -742,4 +740,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
742
740
|
}], manageInterestFormClick: [{
|
|
743
741
|
type: Output
|
|
744
742
|
}] } });
|
|
745
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBR04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBRWIsbUJBQW1CLEVBRW5CLHNCQUFzQixFQUV2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0vQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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c0JBRG5CLEtBQUs7Z0JBR0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBNZW51Q29tcG9uZW50LFxyXG4gIE1lbnUsXHJcbiAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBJY29uQnV0dG9uLFxyXG4gIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgQnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBHcm91cEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbGxlY3Rpb25WaWV3ZXIsXHJcbiAgU2VsZWN0aW9uQ2hhbmdlLFxyXG4gIERhdGFTb3VyY2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdFRyZWVNb2R1bGUsIE1hdFRyZWVOb2RlUGFkZGluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRHcm91cEFuZFBhcmVudEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRpdC1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbi8qKlxyXG4gKiBEeW5hbWljIEZsYXQgbm9kZSBjcmVhdGVzIGEgbm9kZSBzdHJ1Y3R1cmVcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBOb2RlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR3JvdXBOb2RlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGl0ZW06IEdyb3VwSW5mbyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGxldmVsID0gMSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGV4cGFuZGFibGUgPSBmYWxzZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxufVxyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBzdG9yZXMgdGhlIHBhcmVudCBub2RlcyBhbmQgY2hpbGQgbm9kZXNcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcclxuICByb290TGV2ZWxOb2RlcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKiBJbml0aWFsIGRhdGEgZnJvbSBkYXRhYmFzZSAqL1xyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICAvKipcclxuICAgKiBHZXQgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cEluZm9bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgZ2V0Q2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBDaGlsZCBncm91cHMgaW5mb1xyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IHZhbHVlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIHNldENoaWxkR3JvdXBzSW5mbyh2YWx1ZTogR3JvdXBJbmZvW10pOiB2b2lkIHtcclxuICAgIHRoaXMuY2hpbGRHcm91cHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZ3JvdXBzIGRhdGEgYW5kIGNyZWF0ZXMgdGhlIG5vZGUgc3RydWN0dXJlIGZvciBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IGRhdGFcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBpbml0aWFsRGF0YShkYXRhOiBHcm91cEluZm9bXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHRoaXMucm9vdExldmVsTm9kZXMgPSBkYXRhO1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdExldmVsTm9kZXM/Lm1hcChcclxuICAgICAgKG5vZGUpID0+IG5ldyBHcm91cE5vZGUobm9kZSwgMCwgdGhpcy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gbm9kZVxyXG4gICAqIEByZXR1cm4geyp9ICB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlKG5vZGU6IEdyb3VwSW5mbyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCEhbm9kZT8uY2hpbGRyZW4gJiYgbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHx8IG5vZGU/Lmhhc0NoaWxkcmVuXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRHluYW1pYyBEYXRhIFNvdXJjZSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHdpdGggZHluYW1pYyBkYXRhIGJhc2VcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzRGF0YVNvdXJjZVxyXG4gKiBAaW1wbGVtZW50cyB7RGF0YVNvdXJjZTxHcm91cE5vZGU+fVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2UgaW1wbGVtZW50cyBEYXRhU291cmNlPEdyb3VwTm9kZT4ge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBkYXRhQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cE5vZGVbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVwZGF0ZWQgdHJlZSBjb250cm9sIGRhdGFcclxuICAgKiBAdHlwZSB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBnZXQgZGF0YSgpOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhQ2hhbmdlPy52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5zaW9uTW9kZWw/LmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KS5hZGRlZCB8fFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikucmVtb3ZlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVUcmVlQ29udHJvbChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbWVyZ2UoY29sbGVjdGlvblZpZXdlcj8udmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2U/LmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZD8uZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIHRydWUpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2U/LnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2U/LmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGE/LmluZGV4T2YoY2xpY2tlZE5vZGUpO1xyXG4gICAgaWYgKCFjaGlsZHJlbiB8fCBpbmRleCA8IDApIHtcclxuICAgICAgLy8gSWYgbm8gY2hpbGRyZW4sIG9yIGNhbm5vdCBmaW5kIHRoZSBub2RlLCBubyBvcFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4cGFuZCkge1xyXG4gICAgICBjbGlja2VkTm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbj8ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGU/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YT8uc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5kYXRhW2ldPy5sZXZlbCA+IGNsaWNrZWROb2RlPy5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhPy5zcGxpY2UoaW5kZXggKyAxLCBjb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoZSBjaGFuZ2VcclxuICAgIHRoaXMuZGF0YUNoYW5nZT8ubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBidXR0b25zOiBNZW51W10gPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8uYnV0dG9ucztcclxuICB0cmVlUGFkZGluZ0luZGVudDogbnVtYmVyID0gdGhpcy5jb25zdGFudHM/LnZpZXdHcm91cHM/LnRyZWVQYWRkaW5nSW5kZW50O1xyXG4gIHNlbGVjdGVkR3JvdXAhOiBHcm91cE5vZGU7XHJcbiAgc2VsZWN0ZWRHcm91cEFjdGlvbiE6IE1lbnUgfCBJY29uQnV0dG9uO1xyXG4gIHRyZWVDb250cm9sITogRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT47XHJcbiAgZGF0YVNvdXJjZSE6IEdyb3Vwc0RhdGFTb3VyY2U7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIG1hdFRyZWVOb2RlUGFkZGluZyE6IE1hdFRyZWVOb2RlUGFkZGluZzxHcm91cE5vZGU+O1xyXG4gIHBsdXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzRdO1xyXG4gIG1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s1XTtcclxuICBlZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8hOiBFZGl0R3JvdXBBbmRQYXJlbnRJbmZvO1xyXG4gIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGU7XHJcblxyXG4gIG1lbnVJdGVtczogTWVudVtdID0gdGhpcy5idXR0b25zPy5maWx0ZXIoXHJcbiAgICAoZSkgPT5cclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24/LkVYUEFORF9HUk9VUF9WSUVXICYmXHJcbiAgICAgIGUuaWQgIT09IEdyb3VwQWN0aW9uPy5DT0xMQVBTRV9HUk9VUF9WSUVXXHJcbiAgKTtcclxuICBwcml2YXRlIHBhcmVudEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhcmVudEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLnBhcmVudEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICBnZXQgcGFyZW50R3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRHcm91cHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjaGlsZEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLmNoaWxkR3JvdXBzID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWRDaGlsZEdyb3VwcygpO1xyXG4gIH1cclxuICBnZXQgY2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGlzR3JvdXBTZWFyY2hPckZpbHRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzR3JvdXBTZWFyY2hPckZpbHRlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBkZWxldGVkR3JvdXBJZCE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWxldGVkR3JvdXBJZEluZm8oaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IGlkO1xyXG4gICAgdGhpcy5kZWxldGVHcm91cE5vZGUodGhpcy5kZWxldGVkR3JvdXBJZCk7XHJcbiAgfVxyXG4gIGdldCBkZWxldGVkR3JvdXBJZEluZm8oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmRlbGV0ZWRHcm91cElkO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHVzZXJHcm91cFBlcm1pc3Npb25zITogR3JvdXBQZXJtaXNzaW9uW107XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZWRpdEdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRHcm91cEFuZFBhcmVudEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgdmlld1Jvc3RlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIG1hbmFnZUludGVyZXN0Rm9ybUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgaXNNb2JpbGVWaWV3ID0gZmFsc2U7XHJcbiAgZ3JvdXBGdW5jdGlvblR5cGUgPSBHcm91cEZ1bmN0aW9uVHlwZTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGRhdGFiYXNlOiBHcm91cHMsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZ3JvdXBzU2VydmljZTogR3JvdXBzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlOiBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICAgICAgLmdldEJyZWFrcG9pbnQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogeyBtYXRjaGVzOiBib29sZWFuIH0pID0+IHtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHJlc3VsdD8ubWF0Y2hlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSB0cmVlIHZpZXcgY29tcG9uZW50XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBBc3NpZ24gQVJJQSByb2xlIGZvciBhbGwgbWF0IHRyZWUgbm9kZXMgYXMgXCJyb3dcIlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YUNoYW5nZVxyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGVzID1cclxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9dHJlZWl0ZW1dJyk7XHJcbiAgICAgICAgdHJlZUl0ZW1Ob2Rlcz8uZm9yRWFjaCgobm9kZTogSFRNTEVsZW1lbnQpID0+IChub2RlLnJvbGUgPSAncm93JykpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGV2ZWwgb2YgdGhlIG5vZGVcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldExldmVsID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8ubGV2ZWw7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0aGUgbm9kZSBpcyBleHBhbmRhYmxlIG9yIG5vdFxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8uZXhwYW5kYWJsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHBhc3NlZCBub2RlIGhhcyBjaGlsZHJlbiBvdGhlcndpc2UgZmFsc2VcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFzQ2hpbGRHcm91cHMgPSAoaW5kZXg6IG51bWJlciwgX25vZGVEYXRhOiBHcm91cE5vZGUpID0+XHJcbiAgICBfbm9kZURhdGEuZXhwYW5kYWJsZTtcclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgZ3JvdXAgaW5mbyB3aGVuIHRoZSB0b2dnbGUgZ3JvdXAgaXMgY2xpY2tlZCBvciB0b2dnbGVzIHRoZSBncm91cCB2aWV3XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdmlld0NoaWxkR3JvdXBzKG5vZGU6IEdyb3VwTm9kZSkge1xyXG4gICAgaWYgKCFub2RlPy5pdGVtPy5oYXNDaGlsZHJlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sPy50b2dnbGUobm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2Uuc2V0R3JvdXBGdW5jdGlvblR5cGUoR3JvdXBGdW5jdGlvblR5cGUuVE9HR0xFKTtcclxuICAgICAgdGhpcy50b2dnbGVHcm91cENsaWNrLmVtaXQobm9kZT8uaXRlbSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGJveCBzaGFkb3cgYmFzZWQgb24gdGhlIGdyb3VwIHR5cGUgbGVnZW5kIGNvbG9yXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldEJveFNoYWRvdygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYm94U2hhZG93OiAnMHB4IDFweCAwcHggMHB4ICNjOWNiZDAgaW5zZXQnLFxyXG4gICAgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YVNvdXJjZSB3aXRoIHBhcmVudCBncm91cHMgZGF0YVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNldEdyb3VwRGF0YVNvdXJjZSgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5kYXRhU291cmNlICYmXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBhcmVudEdyb3Vwc0luZm8/LmZvckVhY2goKHBhcmVudEdyb3VwTm9kZSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmluZEluZGV4KFxyXG4gICAgICAgICAgICAobm9kZSkgPT4gbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT0gcGFyZW50R3JvdXBOb2RlPy5ncm91cElkXHJcbiAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgbmV3R3JvdXBOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgcGFyZW50R3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShwYXJlbnRHcm91cE5vZGUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBOb2Rlc1JlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2U/LnB1c2gobmV3R3JvdXBOb2RlKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2Rlc1JlZmVyZW5jZTtcclxuICAgICAgICAgIHRoaXMuc29ydFBhcmVudEdyb3Vwc0FscGhhYmV0aWNhbGx5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5FRElUXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lZGl0R3JvdXAodGhpcy5wYXJlbnRHcm91cHNJbmZvKTtcclxuICAgICAgdGhpcy5zb3J0UGFyZW50R3JvdXBzQWxwaGFiZXRpY2FsbHkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT4oXHJcbiAgICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgR3JvdXBzRGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmRhdGFiYXNlKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFiYXNlPy5pbml0aWFsRGF0YSh0aGlzLnBhcmVudEdyb3Vwc0luZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1cGRhdGVkIG5vZGUgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb1tdfSBncm91cHNJbmZvXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZWRpdEdyb3VwKGdyb3Vwc0luZm86IEdyb3VwSW5mb1tdKSB7XHJcbiAgICBjb25zdCBncm91cE5vZGVSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBjb25zdCBlZGl0ZWROb2RlID0gZ3JvdXBzSW5mbz8uZmluZChcclxuICAgICAgKG5vZGUpID0+XHJcbiAgICAgICAgbm9kZT8uZ3JvdXBJZCA9PT0gdGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSW5mbz8uZ3JvdXBJZFxyXG4gICAgKTtcclxuICAgIGdyb3VwTm9kZVJlZmVyZW5jZT8uZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT1cclxuICAgICAgICB0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbz8uZ3JvdXBJbmZvPy5ncm91cElkXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IG5vT2ZDaGlsZHJlblJlZmVyZW5jZSA9IG5vZGUuaXRlbS5ub09mQ2hpbGRyZW47XHJcbiAgICAgICAgbm9kZS5pdGVtID0gZWRpdGVkTm9kZSBhcyBHcm91cEluZm87XHJcbiAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IG5vT2ZDaGlsZHJlblJlZmVyZW5jZTtcclxuICAgICAgICBub2RlLmV4cGFuZGFibGUgPSB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShub2RlPy5pdGVtKTtcclxuICAgICAgICBpZiAobm9kZS5pdGVtLmhhc0NoaWxkcmVuICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICAgICAgdGhpcy50cmVlQ29udHJvbC50b2dnbGUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2RlUmVmZXJlbmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBMb2FkcyB0aGUgY2hpbGQgZ3JvdXBzIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbG9hZENoaWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5kYXRhYmFzZT8uc2V0Q2hpbGRHcm91cHNJbmZvKHRoaXMuY2hpbGRHcm91cHNJbmZvKTtcclxuICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbT8uaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBQYXJlbnROb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwLmxldmVsLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5zcGxpY2UoXHJcbiAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSxcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICBncm91cFBhcmVudE5vZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKGdyb3VwUGFyZW50Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0aGlzLnNlbGVjdGVkR3JvdXApKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmRhdGFiYXNlLmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgICAgIGNoaWxkcmVuPy5mb3JFYWNoKChncm91cE5vZGUpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGU/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwTm9kZT8uZ3JvdXBJZFxyXG4gICAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0dyb3VwTm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgZ3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cD8ubGV2ZWwgKyAxLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2U/LmlzRXhwYW5kYWJsZShncm91cE5vZGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2UuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChub2RlLml0ZW0uZ3JvdXBJZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwLml0ZW0uZ3JvdXBJZCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLnNwbGljZShcclxuICAgICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSArIDEsXHJcbiAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICBuZXdHcm91cE5vZGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVzUmVmZXJlbmNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkVESVRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cCh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRQYXJlbnRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZFBhcmVudEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLlRPR0dMRVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2w/LnRvZ2dsZSh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgdXBkYXRlcyB0aGUgdHJlZSB2aWV3LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWxldGVkR3JvdXBJZFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZUdyb3VwTm9kZShkZWxldGVkR3JvdXBJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbCAmJiBkZWxldGVkR3JvdXBJZCkge1xyXG4gICAgICBjb25zdCBkZWxldGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IGRlbGV0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRHcm91cCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmF0KGRlbGV0ZWRHcm91cEluZGV4KTtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZVJlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgICBpZiAoZGVsZXRlZEdyb3VwSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKGRlbGV0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWxldGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUuaXRlbS5ncm91cElkID09PSBkZWxldGVkR3JvdXA/Lml0ZW0uZ3JvdXBQYXJlbnRJZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChkZWxldGVkUGFyZW50R3JvdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVsZXRlZFBhcmVudEdyb3VwID0gdGhpcy5kYXRhU291cmNlLmRhdGEuYXQoXHJcbiAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwSW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGRlbGV0ZWRQYXJlbnRHcm91cCAmJiBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gPVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuIC0gMTtcclxuICAgICAgICAgICAgICBpZiAoZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAubGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXggLSAxLCAyLCBuZXdOb2RlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgbmV4dCBncm91cCBhdCB0aGUgc2FtZSBsZXZlbC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRHcm91cEluZGV4XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGVbXX0gZGF0YVNvdXJjZVxyXG4gICAqIEByZXR1cm4geyp9ICB7bnVtYmVyfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXg6IG51bWJlciwgZGF0YVNvdXJjZTogR3JvdXBOb2RlW10pOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEFjcm9ueW0gPVxyXG4gICAgICBkYXRhU291cmNlW3NlbGVjdGVkR3JvdXBJbmRleF0uaXRlbS5ncm91cEFjcm9ueW07XHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChpbmRleCA9IHNlbGVjdGVkR3JvdXBJbmRleCArIDE7IGluZGV4IDwgZGF0YVNvdXJjZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgaWYgKGRhdGFTb3VyY2VbaW5kZXhdLml0ZW0uZ3JvdXBBY3JvbnltPy5pbmNsdWRlcyhzZWxlY3RlZEdyb3VwQWNyb255bSkpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZVtzZWxlY3RlZEdyb3VwSW5kZXhdLmxldmVsID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5sZXZlbCA9PT0gZGF0YVNvdXJjZVtpbmRleF0ubGV2ZWxcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgZ3JvdXBzIGFscGhhYmV0aWNhbGx5IGZyb20gZ2l2ZW4gc3RhcnQgaW5kZXggdG8gZW5kIGluZGV4LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydEluZGV4XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZEluZGV4XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBkYXRhU291cmNlLnNwbGljZShcclxuICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgZW5kSW5kZXggLSBzdGFydEluZGV4LFxyXG4gICAgICAuLi50aGlzLmdyb3Vwc1NvcnRpbmcodGhpcy5kYXRhU291cmNlLmRhdGEuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgcm9vdCBsZXZlbCBwYXJlbnQgZ3JvdXBzIGFscGhhYmV0aWNhbGx5LlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRQYXJlbnRHcm91cHNBbHBoYWJldGljYWxseSgpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBmb3IgKFxyXG4gICAgICBsZXQgZ3JvdXBBID0gMDtcclxuICAgICAgZ3JvdXBBIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgIGdyb3VwQSA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICkge1xyXG4gICAgICBsZXQgbG93ZXN0R3JvdXAgPSBncm91cEE7XHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGdyb3VwQiA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgZ3JvdXBCIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgZ3JvdXBCID0gdGhpcy5nZXROZXh0R3JvdXAoZ3JvdXBCLCBkYXRhU291cmNlKVxyXG4gICAgICApIHtcclxuICAgICAgICBsb3dlc3RHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NvcnRpbmcoW1xyXG4gICAgICAgICAgICBkYXRhU291cmNlW2dyb3VwQl0sXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VbbG93ZXN0R3JvdXBdLFxyXG4gICAgICAgICAgXSlbMF0gPT09IGRhdGFTb3VyY2VbZ3JvdXBCXVxyXG4gICAgICAgICAgICA/IGdyb3VwQlxyXG4gICAgICAgICAgICA6IGxvd2VzdEdyb3VwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsb3dlc3RHcm91cCAhPT0gZ3JvdXBBKSB7XHJcbiAgICAgICAgY29uc3QgbGVmdEdyb3VwID0gZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgIGdyb3VwQSxcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0R3JvdXAgPSBkYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgbG93ZXN0R3JvdXAsXHJcbiAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VSZWZlcmVuY2UgPSBkYXRhU291cmNlLnNsaWNlKDAsIGdyb3VwQSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKC4uLnJpZ2h0R3JvdXApO1xyXG4gICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2UucHVzaChcclxuICAgICAgICAgIC4uLmRhdGFTb3VyY2Uuc2xpY2UoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGxvd2VzdEdyb3VwXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goLi4ubGVmdEdyb3VwKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goXHJcbiAgICAgICAgICAuLi5kYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UubGVuZ3RoXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhU291cmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVdGlsaXR5IG1ldGhvZCB0byBzb3J0IGdyb3VwcyBieSBncm91cCBhY3JvbnltIGluIGFzY2VuZGluZyBvcmRlci5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZVtdfSBncm91cHNcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdyb3Vwc1NvcnRpbmcoZ3JvdXBzOiBHcm91cE5vZGVbXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHJldHVybiBncm91cHMuc29ydCgoZ3JvdXBBOiBHcm91cE5vZGUsIGdyb3VwQjogR3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBBID0gZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBCID0gZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmIChsb3dlckdyb3VwQSA8IGxvd2VyR3JvdXBCKSByZXR1cm4gLTE7XHJcbiAgICAgIGVsc2UgaWYgKGxvd2VyR3JvdXBBID4gbG93ZXJHcm91cEIpIHJldHVybiAxO1xyXG4gICAgICBlbHNlIGlmIChsb3dlckdyb3VwQSA9PT0gbG93ZXJHcm91cEIpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGdyb3VwQT8uaXRlbT8uZ3JvdXBBY3JvbnltPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChncm91cEEuaXRlbS5ncm91cEFjcm9ueW1baW5kZXhdIDwgZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSlcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSA+IGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bVtpbmRleF1cclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbWVudSBncm91cCBhY3Rpb25cclxuICAgKiBAcGFyYW0ge01lbnV9IG1lbnVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwQWN0aW9uc0NsaWNrKG1lbnU6IE1lbnUgfCBJY29uQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24gPSBtZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBleHBhbmQvY29sbGFwc2UgaWNvbiBiYXNlZCBvbiB0aGUgdG9nZ2xlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFRvZ2dsZUJ1dHRvbkluZm8oZ3JvdXA6IEdyb3VwTm9kZSk6IEljb25CdXR0b24ge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQoZ3JvdXApKSByZXR1cm4gdGhpcy5taW51c0NpcmNsZUljb25CdXR0b247XHJcbiAgICByZXR1cm4gdGhpcy5wbHVzQ2lyY2xlSWNvbkJ1dHRvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgZW1pdHRlZCBncm91cCBhY3Rpb25zIGV2ZW50LiBFbWl0cyB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXRcclxuICAgKiBmb3IgdGhlIHNlbGVjdGVkIGFjdGlvbjogdmlldyByb3N0ZXIsIGNyZWF0ZSBzdWIgZ3JvdXAsIGVkaXQgZ3JvdXAsXHJcbiAgICogZGVsZXRlIGdyb3VwLCBvciBtYW5hZ2UgaW50ZXJlc3QgZm9ybS5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBoYW5kbGVHcm91cEFjdGlvbnMoZ3JvdXA6IEdyb3VwTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSKSB7XHJcbiAgICAgIHRoaXMudmlld1Jvc3RlckNsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgICB0aGlzLmNyZWF0ZUdyb3VwQ2xpY2suZW1pdChncm91cD8uaXRlbSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkVESVRfR1JPVVApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICAgIGNvbnN0IGVkaXRHcm91cFBhcmVudEluZm8gPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/LmZpbHRlcihcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwPy5pdGVtPy5ncm91cFBhcmVudElkXHJcbiAgICAgIClbMF0/Lml0ZW07XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvID0ge1xyXG4gICAgICAgIGdyb3VwSW5mbzogZ3JvdXA/Lml0ZW0sXHJcbiAgICAgICAgcGFyZW50R3JvdXBJbmZvOiBlZGl0R3JvdXBQYXJlbnRJbmZvLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmVkaXRHcm91cENsaWNrLmVtaXQodGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVApIHtcclxuICAgICAgdGhpcy5kZWxldGVHcm91cENsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uTUFOQUdFX0lOVEVSRVNUX0ZPUk1cclxuICAgICkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcclxuICAgICAgdGhpcy5tYW5hZ2VJbnRlcmVzdEZvcm1DbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgYWN0aW9uIG1lbnUgaXRlbXMgdGhlIGN1cnJlbnQgdXNlciBtYXkgc2VlIGZvciB0aGUgZ2l2ZW5cclxuICAgKiBncm91cCwgZmlsdGVyZWQgYnkgcGVyLWdyb3VwIHBlcm1pc3Npb25zIGFuZCBncm91cCB0eXBlLiBUaGUgXCJNYW5hZ2VcclxuICAgKiBJbnRlcmVzdCBGb3JtXCIgYWN0aW9uIChTUDNNLTM4MCkgaXMgZ2F0ZWQ6IGl0IHJlbmRlcnMgb25seSB3aGVuIHRoZVxyXG4gICAqIGludGVyZXN0LWZvcm0gZmVhdHVyZSBpcyBlbmFibGVkIGZvciB0aGUgdGVuYW50XHJcbiAgICogKEdyb3Vwc1NlcnZpY2UuaXNJbnRlcmVzdEZvcm1GZWF0dXJlRW5hYmxlZCgpKSBBTkQgZWl0aGVyIHRoZSB1c2VyIGhvbGRzIHRoZVxyXG4gICAqIFZJRVdfQU5EX01BTkFHRV9HUk9VUF9JTlRFUkVTVCBwZXJtaXNzaW9uIGZvciB0aGF0IHNwZWNpZmljIGdyb3VwIChzdHJpY3RseVxyXG4gICAqIHBlci1ncm91cCwgbm8gZ2xvYmFsIGZhbGxiYWNrKSBPUiB0aGUgdXNlciBpcyBhIGNyb3NzLWdyb3VwIGFkbWluIGhvbGRpbmdcclxuICAgKiBNQU5BR0VfQUxMX0dST1VQUyAoXCJNYW5hZ2UgQWxsIEdyb3VwIERldGFpbHNcIikuIEl0IGlzIGFsd2F5cyBoaWRkZW4gb25cclxuICAgKiBhZG1pbi9zeXN0ZW0gZ3JvdXAgdHlwZXMgKGUuZy4gdGhlIFN5c3RlbSBVc2VycyBHcm91cCksIHdoaWNoIGFyZSBub3QgcmVhbFxyXG4gICAqIGNvbW1pdHRlZXMgd2l0aCBhbiBpbnRlcmVzdCBmb3JtLCBhbmQgaGlkZGVuIGVudGlyZWx5IHdoZW4gdGhlIGZlYXR1cmUgaXNcclxuICAgKiBkaXNhYmxlZC4gV2hlbiBzaG93biBpdCBpcyBrZXB0IGxlZnRtb3N0IGJ5IHRoZSB0cmFpbGluZyBzb3J0LlxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBncm91cFxyXG4gICAqIEByZXR1cm4ge01lbnVbXX1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhncm91cDogR3JvdXBOb2RlKTogTWVudVtdIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkTWVudTogTWVudVtdID0gW107XHJcbiAgICBjb25zdCBpc0FkbWluR3JvdXBUeXBlID0gZ3JvdXA/Lml0ZW0/Lmdyb3VwVHlwZUluZm8/LmJ1c2luZXNzUnVsZT8uaXNBZG1pbjtcclxuICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbnMgPSBncm91cD8uaXRlbT8ucGVybWlzc2lvbnM7XHJcbiAgICB0aGlzLm1lbnVJdGVtcz8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICBlLmlzVG9vbFRpcE5lZWRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5WSUVXX1JPU1RFUiAmJlxyXG4gICAgICAgICAgKChpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMsXHJcbiAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICApKSB8fFxyXG4gICAgICAgICAgICAoIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0dST1VQX09GRklDRVJTLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0dST1VQX01FTUJFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0FMTF9ST1NURVJTXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX01FTUJFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkpKSkpIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5FRElUX0dST1VQICYmXHJcbiAgICAgICAgICAhdGhpcy5ncm91cHNTZXJ2aWNlLmlzR3JvdXBzQW5kUm9zdGVyc1Jlc3RyaWN0ZWQoKSAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuRURJVF9HUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSkgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkRFTEVURV9HUk9VUCAmJlxyXG4gICAgICAgICAgIXRoaXMuZ3JvdXBzU2VydmljZS5pc0dyb3Vwc0FuZFJvc3RlcnNSZXN0cmljdGVkKCkgJiZcclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkRFTEVURV9HUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWdyb3VwPy5pdGVtPy5oYXNDaGlsZHJlbikgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkNSRUFURV9TVUJfR1JPVVAgJiZcclxuICAgICAgICAgICF0aGlzLmdyb3Vwc1NlcnZpY2UuaXNHcm91cHNBbmRSb3N0ZXJzUmVzdHJpY3RlZCgpICYmXHJcbiAgICAgICAgICBncm91cD8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8uYnVzaW5lc3NSdWxlPy5hbGxvd1N1Ykdyb3VwICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkNSRUFURV9TVUJHUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUpIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5NQU5BR0VfSU5URVJFU1RfRk9STSAmJlxyXG4gICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmlzSW50ZXJlc3RGb3JtRmVhdHVyZUVuYWJsZWQoKSAmJlxyXG4gICAgICAgICAgLy8gSGlkZGVuIG9uIGFkbWluL3N5c3RlbSBncm91cCB0eXBlcyAoZS5nLiB0aGUgU3lzdGVtIFVzZXJzIEdyb3VwKTpcclxuICAgICAgICAgIC8vIHRob3NlIGFyZSBub3QgcmVhbCBjb21taXR0ZWVzIHdpdGggYW4gaW50ZXJlc3QgZm9ybS5cclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAvLyBFaXRoZXIgdGhlIHVzZXIgaG9sZHMgdGhlIGludGVyZXN0IHBlcm1pc3Npb24gb24gVEhJUyBzcGVjaWZpYyBncm91cFxyXG4gICAgICAgICAgLy8gKHN0cmljdGx5IHBlci1ncm91cDogYSBub24tbWVtYmVyIGdyb3VwIGhhcyBgcGVybWlzc2lvbnM6IG51bGxgLFxyXG4gICAgICAgICAgLy8gY29lcmNlZCB0byBbXSBzbyB2YWxpZGF0ZUFjY2VzcyBzdGF5cyBpbiBpdHMgcGVyLWdyb3VwIGJyYW5jaCBhbmQgZG9lc1xyXG4gICAgICAgICAgLy8gTk9UIGZhbGwgYmFjayB0byB0aGUgZ2xvYmFsIHBlcm1pc3Npb24gc2V0KSwgT1IgdGhlIHVzZXIgaXMgYVxyXG4gICAgICAgICAgLy8gY3Jvc3MtZ3JvdXAgYWRtaW4gKE1BTkFHRV9BTExfR1JPVVBTID0gXCJNYW5hZ2UgQWxsIEdyb3VwIERldGFpbHNcIikgd2hvXHJcbiAgICAgICAgICAvLyBtYW5hZ2VzIGFsbCBncm91cHMgYW5kIHRoZXJlZm9yZSBzZWVzIHRoZSBhY3Rpb24gb24gZXZlcnkgbm9uLWFkbWluIGdyb3VwLlxyXG4gICAgICAgICAgKHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0FORF9NQU5BR0VfR1JPVVBfSU5URVJFU1QsXHJcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnMgPz8gW11cclxuICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9HUk9VUFNcclxuICAgICAgICAgICAgKSkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGZpbHRlcmVkTWVudS5wdXNoKGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIFNob3cgdGhlIE1hbmFnZSBJbnRlcmVzdCBGb3JtIGFjdGlvbiBmaXJzdCAobGVmdG1vc3QpIHBlciB0aGUgZGVzaWduLlxyXG4gICAgZmlsdGVyZWRNZW51LnNvcnQoKG1lbnVBLCBtZW51QikgPT4ge1xyXG4gICAgICBpZiAobWVudUE/LmlkID09PSBHcm91cEFjdGlvbi5NQU5BR0VfSU5URVJFU1RfRk9STSkgcmV0dXJuIC0xO1xyXG4gICAgICBpZiAobWVudUI/LmlkID09PSBHcm91cEFjdGlvbi5NQU5BR0VfSU5URVJFU1RfRk9STSkgcmV0dXJuIDE7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmlsdGVyZWRNZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBUYWtlcyB0aGUgaW5kZXggYW5kIHRoZSBpY29uIGJ1dHRvbiBhcyBhcmd1bWVudHMgYW5kIG5lZWRzIHRvIHJldHVybiB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaWNvbiBidXR0b24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtJY29uQnV0dG9ufSBpY29uQnV0dG9uXHJcbiAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpY29uQnV0dG9uOiBJY29uQnV0dG9uKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpY29uQnV0dG9uLmlkO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBOZ09uRGVzdHJveSBwZXJmb3JtcyBuZWNlc3NhcnkgY2xlYW51cCB0YXNrcywgc3VjaCBhcyB1bnN1YnNjcmliaW5nIGZyb20gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVcIj5cclxuICA8bWF0LXRyZWVcclxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX3Jvb3RcIlxyXG4gICAgI3Jvb3RTZWxlY3RvclxyXG4gICAgcm9sZT1cInRyZWVncmlkXCJcclxuICA+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiXHJcbiAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cInRyZWVQYWRkaW5nSW5kZW50XCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNlwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleFwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Qm94U2hhZG93KClcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgbm9kZT8uaXRlbT8uZ3JvdXBQYXJlbnRJZCAmJlxyXG4gICAgICAgICAgZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpICE9PSBncm91cEZ1bmN0aW9uVHlwZS5GSUxURVIgJiZcclxuICAgICAgICAgIGdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSAhPT0gZ3JvdXBGdW5jdGlvblR5cGUuU0VBUkNIXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS10cmVlX19yb290LW5vZGUtd2hpdGUtYmcnXHJcbiAgICAgICAgICAgIDogJ2llZWVzYS10cmVlX19yb290LW5vZGUnXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlID8gJ2llZWVzYS10cmVlX19jb2xsYXBzZS1pY29uJyA6ICcnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBOb2RlT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRHcm91cHNcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLWJvZHktbWQtMTYgaWVlZXNhLXRyZWVfX3BhcmVudC1ub2RlLXdyYXBwZXJcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgW25nQ2xhc3NdPVwiW1xyXG4gICAgICAgICAgdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdpZWVlc2EtdHJlZV9fZXhwYW5kZWQnIDogJycsXHJcbiAgICAgICAgICBub2RlPy5pdGVtPy5ncm91cFBhcmVudElkICYmXHJcbiAgICAgICAgICBncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgIT09IGdyb3VwRnVuY3Rpb25UeXBlLkZJTFRFUiAmJlxyXG4gICAgICAgICAgZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpICE9PSBncm91cEZ1bmN0aW9uVHlwZS5TRUFSQ0hcclxuICAgICAgICAgICAgPyAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZS13aGl0ZS1iZydcclxuICAgICAgICAgICAgOiAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZSdcclxuICAgICAgICBdXCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleFwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Qm94U2hhZG93KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiByb2xlPVwiZ3JpZGNlbGxcIj5cclxuICAgICAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCIhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlXCJcclxuICAgICAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJ2aWV3Q2hpbGRHcm91cHMobm9kZSlcIlxyXG4gICAgICAgICAgICBbaWNvbkJ1dHRvbl09XCJnZXRUb2dnbGVCdXR0b25JbmZvKG5vZGUpXCJcclxuICAgICAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cE5vZGVPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBOb2RlT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpZWVlc2FHcm91cEluZm9PdXRsZXQ7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cIlxyXG4gICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImQtZmxleCBkLW5vbmUgZ2FwLTMgZC1zbS1mbGV4IGQtbWQtZmxleCBkLWxnLWZsZXggaWVlZXNhLXRyZWVfX2dyb3VwLWFjdGlvbnNcIlxyXG4gICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGllZWVzYS1tZW51XHJcbiAgICAgICAgW2J1dHRvbl09XCJjb25zdGFudHM/LnZpZXdHcm91cHM/Lmdyb3VwQWN0aW9uc01lbnVcIlxyXG4gICAgICAgIFttZW51SXRlbXNdPVwiZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMobm9kZSlcIlxyXG4gICAgICAgIChtZW51SXRlbUNsaWNrKT1cIm9uR3JvdXBBY3Rpb25zQ2xpY2soJGV2ZW50KTsgaGFuZGxlR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICBjbGFzcz1cImQtbGctbm9uZSBkLW1kLW5vbmUgZC1zbS1ub25lXCJcclxuICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICA+PC9pZWVlc2EtbWVudT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwSW5mb091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS10cmVlX19ncm91cC1pbmZvLXdyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVfX2dyb3VwLWluZm8gZC1mbGV4IGFsaWduLWl0ZW1zLWJhc2VsaW5lXCI+XHJcbiAgICAgICAgICA8cFxyXG4gICAgICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLW5hbWUgaWVlZXNhLXRpdGxlLW1kLTE4XCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwibm9kZT8uaXRlbT8uZ3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgICAgPnt7IG5vZGU/Lml0ZW0/Lmdyb3VwTmFtZSB9fTwvcD5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtYWNyb255bSBpZWVlc2EtdGl0bGUtc20tMTZcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJub2RlPy5pdGVtPy5ncm91cEFjcm9ueW1cIlxyXG4gICAgICAgICAgICBpZWVlc2FUZXh0VHJ1bmNhdGVkXHJcbiAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgICA+e3sgbm9kZT8uaXRlbT8uZ3JvdXBBY3JvbnltIH19PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1kZXNjXCI+XHJcbiAgICAgICAgICB7eyBub2RlPy5pdGVtPy5ncm91cFR5cGVJbmZvPy5uYW1lIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMobm9kZSk7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwiaXRlbVwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJcclxuICAgICAgICAgIG9uR3JvdXBBY3Rpb25zQ2xpY2soJGV2ZW50KTsgaGFuZGxlR3JvdXBBY3Rpb25zKG5vZGUpXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICA8L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9tYXQtdHJlZT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
743
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBR04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBRWIsbUJBQW1CLEVBRW5CLHNCQUFzQixFQUV2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0vQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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c0JBRG5CLEtBQUs7Z0JBR0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBNZW51Q29tcG9uZW50LFxyXG4gIE1lbnUsXHJcbiAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBJY29uQnV0dG9uLFxyXG4gIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgQnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBHcm91cEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbGxlY3Rpb25WaWV3ZXIsXHJcbiAgU2VsZWN0aW9uQ2hhbmdlLFxyXG4gIERhdGFTb3VyY2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdFRyZWVNb2R1bGUsIE1hdFRyZWVOb2RlUGFkZGluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRHcm91cEFuZFBhcmVudEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRpdC1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbi8qKlxyXG4gKiBEeW5hbWljIEZsYXQgbm9kZSBjcmVhdGVzIGEgbm9kZSBzdHJ1Y3R1cmVcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBOb2RlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR3JvdXBOb2RlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGl0ZW06IEdyb3VwSW5mbyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGxldmVsID0gMSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGV4cGFuZGFibGUgPSBmYWxzZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxufVxyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBzdG9yZXMgdGhlIHBhcmVudCBub2RlcyBhbmQgY2hpbGQgbm9kZXNcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcclxuICByb290TGV2ZWxOb2RlcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKiBJbml0aWFsIGRhdGEgZnJvbSBkYXRhYmFzZSAqL1xyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICAvKipcclxuICAgKiBHZXQgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cEluZm9bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgZ2V0Q2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBDaGlsZCBncm91cHMgaW5mb1xyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IHZhbHVlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIHNldENoaWxkR3JvdXBzSW5mbyh2YWx1ZTogR3JvdXBJbmZvW10pOiB2b2lkIHtcclxuICAgIHRoaXMuY2hpbGRHcm91cHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZ3JvdXBzIGRhdGEgYW5kIGNyZWF0ZXMgdGhlIG5vZGUgc3RydWN0dXJlIGZvciBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IGRhdGFcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBpbml0aWFsRGF0YShkYXRhOiBHcm91cEluZm9bXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHRoaXMucm9vdExldmVsTm9kZXMgPSBkYXRhO1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdExldmVsTm9kZXM/Lm1hcChcclxuICAgICAgKG5vZGUpID0+IG5ldyBHcm91cE5vZGUobm9kZSwgMCwgdGhpcy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gbm9kZVxyXG4gICAqIEByZXR1cm4geyp9ICB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlKG5vZGU6IEdyb3VwSW5mbyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCEhbm9kZT8uY2hpbGRyZW4gJiYgbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHx8IG5vZGU/Lmhhc0NoaWxkcmVuXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRHluYW1pYyBEYXRhIFNvdXJjZSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHdpdGggZHluYW1pYyBkYXRhIGJhc2VcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzRGF0YVNvdXJjZVxyXG4gKiBAaW1wbGVtZW50cyB7RGF0YVNvdXJjZTxHcm91cE5vZGU+fVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2UgaW1wbGVtZW50cyBEYXRhU291cmNlPEdyb3VwTm9kZT4ge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBkYXRhQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cE5vZGVbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVwZGF0ZWQgdHJlZSBjb250cm9sIGRhdGFcclxuICAgKiBAdHlwZSB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBnZXQgZGF0YSgpOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhQ2hhbmdlPy52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5zaW9uTW9kZWw/LmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KS5hZGRlZCB8fFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikucmVtb3ZlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVUcmVlQ29udHJvbChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbWVyZ2UoY29sbGVjdGlvblZpZXdlcj8udmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2U/LmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZD8uZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIHRydWUpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2U/LnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2U/LmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGE/LmluZGV4T2YoY2xpY2tlZE5vZGUpO1xyXG4gICAgaWYgKCFjaGlsZHJlbiB8fCBpbmRleCA8IDApIHtcclxuICAgICAgLy8gSWYgbm8gY2hpbGRyZW4sIG9yIGNhbm5vdCBmaW5kIHRoZSBub2RlLCBubyBvcFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4cGFuZCkge1xyXG4gICAgICBjbGlja2VkTm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbj8ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGU/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YT8uc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5kYXRhW2ldPy5sZXZlbCA+IGNsaWNrZWROb2RlPy5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhPy5zcGxpY2UoaW5kZXggKyAxLCBjb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoZSBjaGFuZ2VcclxuICAgIHRoaXMuZGF0YUNoYW5nZT8ubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBidXR0b25zOiBNZW51W10gPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8uYnV0dG9ucztcclxuICB0cmVlUGFkZGluZ0luZGVudDogbnVtYmVyID0gdGhpcy5jb25zdGFudHM/LnZpZXdHcm91cHM/LnRyZWVQYWRkaW5nSW5kZW50O1xyXG4gIHNlbGVjdGVkR3JvdXAhOiBHcm91cE5vZGU7XHJcbiAgc2VsZWN0ZWRHcm91cEFjdGlvbiE6IE1lbnUgfCBJY29uQnV0dG9uO1xyXG4gIHRyZWVDb250cm9sITogRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT47XHJcbiAgZGF0YVNvdXJjZSE6IEdyb3Vwc0RhdGFTb3VyY2U7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIG1hdFRyZWVOb2RlUGFkZGluZyE6IE1hdFRyZWVOb2RlUGFkZGluZzxHcm91cE5vZGU+O1xyXG4gIHBsdXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzRdO1xyXG4gIG1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s1XTtcclxuICBlZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8hOiBFZGl0R3JvdXBBbmRQYXJlbnRJbmZvO1xyXG4gIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGU7XHJcblxyXG4gIG1lbnVJdGVtczogTWVudVtdID0gdGhpcy5idXR0b25zPy5maWx0ZXIoXHJcbiAgICAoZSkgPT5cclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24/LkVYUEFORF9HUk9VUF9WSUVXICYmXHJcbiAgICAgIGUuaWQgIT09IEdyb3VwQWN0aW9uPy5DT0xMQVBTRV9HUk9VUF9WSUVXXHJcbiAgKTtcclxuICBwcml2YXRlIHBhcmVudEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhcmVudEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLnBhcmVudEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICBnZXQgcGFyZW50R3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRHcm91cHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjaGlsZEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLmNoaWxkR3JvdXBzID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWRDaGlsZEdyb3VwcygpO1xyXG4gIH1cclxuICBnZXQgY2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGlzR3JvdXBTZWFyY2hPckZpbHRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzR3JvdXBTZWFyY2hPckZpbHRlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBkZWxldGVkR3JvdXBJZCE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWxldGVkR3JvdXBJZEluZm8oaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IGlkO1xyXG4gICAgdGhpcy5kZWxldGVHcm91cE5vZGUodGhpcy5kZWxldGVkR3JvdXBJZCk7XHJcbiAgfVxyXG4gIGdldCBkZWxldGVkR3JvdXBJZEluZm8oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmRlbGV0ZWRHcm91cElkO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHVzZXJHcm91cFBlcm1pc3Npb25zITogR3JvdXBQZXJtaXNzaW9uW107XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZWRpdEdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRHcm91cEFuZFBhcmVudEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgdmlld1Jvc3RlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIG1hbmFnZUludGVyZXN0Rm9ybUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgaXNNb2JpbGVWaWV3ID0gZmFsc2U7XHJcbiAgZ3JvdXBGdW5jdGlvblR5cGUgPSBHcm91cEZ1bmN0aW9uVHlwZTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGRhdGFiYXNlOiBHcm91cHMsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZ3JvdXBzU2VydmljZTogR3JvdXBzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlOiBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICAgICAgLmdldEJyZWFrcG9pbnQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogeyBtYXRjaGVzOiBib29sZWFuIH0pID0+IHtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHJlc3VsdD8ubWF0Y2hlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSB0cmVlIHZpZXcgY29tcG9uZW50XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBBc3NpZ24gQVJJQSByb2xlIGZvciBhbGwgbWF0IHRyZWUgbm9kZXMgYXMgXCJyb3dcIlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YUNoYW5nZVxyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGVzID1cclxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9dHJlZWl0ZW1dJyk7XHJcbiAgICAgICAgdHJlZUl0ZW1Ob2Rlcz8uZm9yRWFjaCgobm9kZTogSFRNTEVsZW1lbnQpID0+IChub2RlLnJvbGUgPSAncm93JykpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGV2ZWwgb2YgdGhlIG5vZGVcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldExldmVsID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8ubGV2ZWw7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0aGUgbm9kZSBpcyBleHBhbmRhYmxlIG9yIG5vdFxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8uZXhwYW5kYWJsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHBhc3NlZCBub2RlIGhhcyBjaGlsZHJlbiBvdGhlcndpc2UgZmFsc2VcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFzQ2hpbGRHcm91cHMgPSAoaW5kZXg6IG51bWJlciwgX25vZGVEYXRhOiBHcm91cE5vZGUpID0+XHJcbiAgICBfbm9kZURhdGEuZXhwYW5kYWJsZTtcclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgZ3JvdXAgaW5mbyB3aGVuIHRoZSB0b2dnbGUgZ3JvdXAgaXMgY2xpY2tlZCBvciB0b2dnbGVzIHRoZSBncm91cCB2aWV3XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdmlld0NoaWxkR3JvdXBzKG5vZGU6IEdyb3VwTm9kZSkge1xyXG4gICAgaWYgKCFub2RlPy5pdGVtPy5oYXNDaGlsZHJlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sPy50b2dnbGUobm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2Uuc2V0R3JvdXBGdW5jdGlvblR5cGUoR3JvdXBGdW5jdGlvblR5cGUuVE9HR0xFKTtcclxuICAgICAgdGhpcy50b2dnbGVHcm91cENsaWNrLmVtaXQobm9kZT8uaXRlbSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGJveCBzaGFkb3cgYmFzZWQgb24gdGhlIGdyb3VwIHR5cGUgbGVnZW5kIGNvbG9yXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldEJveFNoYWRvdygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYm94U2hhZG93OiAnMHB4IDFweCAwcHggMHB4ICNjOWNiZDAgaW5zZXQnLFxyXG4gICAgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YVNvdXJjZSB3aXRoIHBhcmVudCBncm91cHMgZGF0YVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNldEdyb3VwRGF0YVNvdXJjZSgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5kYXRhU291cmNlICYmXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBhcmVudEdyb3Vwc0luZm8/LmZvckVhY2goKHBhcmVudEdyb3VwTm9kZSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmluZEluZGV4KFxyXG4gICAgICAgICAgICAobm9kZSkgPT4gbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT0gcGFyZW50R3JvdXBOb2RlPy5ncm91cElkXHJcbiAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgbmV3R3JvdXBOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgcGFyZW50R3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShwYXJlbnRHcm91cE5vZGUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBOb2Rlc1JlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2U/LnB1c2gobmV3R3JvdXBOb2RlKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2Rlc1JlZmVyZW5jZTtcclxuICAgICAgICAgIHRoaXMuc29ydFBhcmVudEdyb3Vwc0FscGhhYmV0aWNhbGx5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5FRElUXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lZGl0R3JvdXAodGhpcy5wYXJlbnRHcm91cHNJbmZvKTtcclxuICAgICAgdGhpcy5zb3J0UGFyZW50R3JvdXBzQWxwaGFiZXRpY2FsbHkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT4oXHJcbiAgICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgR3JvdXBzRGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmRhdGFiYXNlKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFiYXNlPy5pbml0aWFsRGF0YSh0aGlzLnBhcmVudEdyb3Vwc0luZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1cGRhdGVkIG5vZGUgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb1tdfSBncm91cHNJbmZvXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZWRpdEdyb3VwKGdyb3Vwc0luZm86IEdyb3VwSW5mb1tdKSB7XHJcbiAgICBjb25zdCBncm91cE5vZGVSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBjb25zdCBlZGl0ZWROb2RlID0gZ3JvdXBzSW5mbz8uZmluZChcclxuICAgICAgKG5vZGUpID0+XHJcbiAgICAgICAgbm9kZT8uZ3JvdXBJZCA9PT0gdGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSW5mbz8uZ3JvdXBJZFxyXG4gICAgKTtcclxuICAgIGdyb3VwTm9kZVJlZmVyZW5jZT8uZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT1cclxuICAgICAgICB0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbz8uZ3JvdXBJbmZvPy5ncm91cElkXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IG5vT2ZDaGlsZHJlblJlZmVyZW5jZSA9IG5vZGUuaXRlbS5ub09mQ2hpbGRyZW47XHJcbiAgICAgICAgbm9kZS5pdGVtID0gZWRpdGVkTm9kZSBhcyBHcm91cEluZm87XHJcbiAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IG5vT2ZDaGlsZHJlblJlZmVyZW5jZTtcclxuICAgICAgICBub2RlLmV4cGFuZGFibGUgPSB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShub2RlPy5pdGVtKTtcclxuICAgICAgICBpZiAobm9kZS5pdGVtLmhhc0NoaWxkcmVuICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICAgICAgdGhpcy50cmVlQ29udHJvbC50b2dnbGUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2RlUmVmZXJlbmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBMb2FkcyB0aGUgY2hpbGQgZ3JvdXBzIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbG9hZENoaWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5kYXRhYmFzZT8uc2V0Q2hpbGRHcm91cHNJbmZvKHRoaXMuY2hpbGRHcm91cHNJbmZvKTtcclxuICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbT8uaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBQYXJlbnROb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwLmxldmVsLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5zcGxpY2UoXHJcbiAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSxcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICBncm91cFBhcmVudE5vZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKGdyb3VwUGFyZW50Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0aGlzLnNlbGVjdGVkR3JvdXApKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmRhdGFiYXNlLmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgICAgIGNoaWxkcmVuPy5mb3JFYWNoKChncm91cE5vZGUpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGU/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwTm9kZT8uZ3JvdXBJZFxyXG4gICAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0dyb3VwTm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgZ3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cD8ubGV2ZWwgKyAxLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2U/LmlzRXhwYW5kYWJsZShncm91cE5vZGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2UuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChub2RlLml0ZW0uZ3JvdXBJZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwLml0ZW0uZ3JvdXBJZCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLnNwbGljZShcclxuICAgICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSArIDEsXHJcbiAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICBuZXdHcm91cE5vZGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVzUmVmZXJlbmNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkVESVRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cCh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRQYXJlbnRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZFBhcmVudEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLlRPR0dMRVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2w/LnRvZ2dsZSh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgdXBkYXRlcyB0aGUgdHJlZSB2aWV3LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWxldGVkR3JvdXBJZFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZUdyb3VwTm9kZShkZWxldGVkR3JvdXBJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbCAmJiBkZWxldGVkR3JvdXBJZCkge1xyXG4gICAgICBjb25zdCBkZWxldGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IGRlbGV0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRHcm91cCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmF0KGRlbGV0ZWRHcm91cEluZGV4KTtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZVJlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgICBpZiAoZGVsZXRlZEdyb3VwSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKGRlbGV0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWxldGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUuaXRlbS5ncm91cElkID09PSBkZWxldGVkR3JvdXA/Lml0ZW0uZ3JvdXBQYXJlbnRJZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChkZWxldGVkUGFyZW50R3JvdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVsZXRlZFBhcmVudEdyb3VwID0gdGhpcy5kYXRhU291cmNlLmRhdGEuYXQoXHJcbiAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwSW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGRlbGV0ZWRQYXJlbnRHcm91cCAmJiBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gPVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuIC0gMTtcclxuICAgICAgICAgICAgICBpZiAoZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAubGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXggLSAxLCAyLCBuZXdOb2RlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgbmV4dCBncm91cCBhdCB0aGUgc2FtZSBsZXZlbC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRHcm91cEluZGV4XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGVbXX0gZGF0YVNvdXJjZVxyXG4gICAqIEByZXR1cm4geyp9ICB7bnVtYmVyfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXg6IG51bWJlciwgZGF0YVNvdXJjZTogR3JvdXBOb2RlW10pOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEFjcm9ueW0gPVxyXG4gICAgICBkYXRhU291cmNlW3NlbGVjdGVkR3JvdXBJbmRleF0uaXRlbS5ncm91cEFjcm9ueW07XHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChpbmRleCA9IHNlbGVjdGVkR3JvdXBJbmRleCArIDE7IGluZGV4IDwgZGF0YVNvdXJjZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgaWYgKGRhdGFTb3VyY2VbaW5kZXhdLml0ZW0uZ3JvdXBBY3JvbnltPy5pbmNsdWRlcyhzZWxlY3RlZEdyb3VwQWNyb255bSkpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZVtzZWxlY3RlZEdyb3VwSW5kZXhdLmxldmVsID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5sZXZlbCA9PT0gZGF0YVNvdXJjZVtpbmRleF0ubGV2ZWxcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgZ3JvdXBzIGFscGhhYmV0aWNhbGx5IGZyb20gZ2l2ZW4gc3RhcnQgaW5kZXggdG8gZW5kIGluZGV4LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydEluZGV4XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZEluZGV4XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBkYXRhU291cmNlLnNwbGljZShcclxuICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgZW5kSW5kZXggLSBzdGFydEluZGV4LFxyXG4gICAgICAuLi50aGlzLmdyb3Vwc1NvcnRpbmcodGhpcy5kYXRhU291cmNlLmRhdGEuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgcm9vdCBsZXZlbCBwYXJlbnQgZ3JvdXBzIGFscGhhYmV0aWNhbGx5LlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRQYXJlbnRHcm91cHNBbHBoYWJldGljYWxseSgpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBmb3IgKFxyXG4gICAgICBsZXQgZ3JvdXBBID0gMDtcclxuICAgICAgZ3JvdXBBIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgIGdyb3VwQSA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICkge1xyXG4gICAgICBsZXQgbG93ZXN0R3JvdXAgPSBncm91cEE7XHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGdyb3VwQiA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgZ3JvdXBCIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgZ3JvdXBCID0gdGhpcy5nZXROZXh0R3JvdXAoZ3JvdXBCLCBkYXRhU291cmNlKVxyXG4gICAgICApIHtcclxuICAgICAgICBsb3dlc3RHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NvcnRpbmcoW1xyXG4gICAgICAgICAgICBkYXRhU291cmNlW2dyb3VwQl0sXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VbbG93ZXN0R3JvdXBdLFxyXG4gICAgICAgICAgXSlbMF0gPT09IGRhdGFTb3VyY2VbZ3JvdXBCXVxyXG4gICAgICAgICAgICA/IGdyb3VwQlxyXG4gICAgICAgICAgICA6IGxvd2VzdEdyb3VwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsb3dlc3RHcm91cCAhPT0gZ3JvdXBBKSB7XHJcbiAgICAgICAgY29uc3QgbGVmdEdyb3VwID0gZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgIGdyb3VwQSxcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0R3JvdXAgPSBkYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgbG93ZXN0R3JvdXAsXHJcbiAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VSZWZlcmVuY2UgPSBkYXRhU291cmNlLnNsaWNlKDAsIGdyb3VwQSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKC4uLnJpZ2h0R3JvdXApO1xyXG4gICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2UucHVzaChcclxuICAgICAgICAgIC4uLmRhdGFTb3VyY2Uuc2xpY2UoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGxvd2VzdEdyb3VwXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goLi4ubGVmdEdyb3VwKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goXHJcbiAgICAgICAgICAuLi5kYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UubGVuZ3RoXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhU291cmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVdGlsaXR5IG1ldGhvZCB0byBzb3J0IGdyb3VwcyBieSBncm91cCBhY3JvbnltIGluIGFzY2VuZGluZyBvcmRlci5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZVtdfSBncm91cHNcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdyb3Vwc1NvcnRpbmcoZ3JvdXBzOiBHcm91cE5vZGVbXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHJldHVybiBncm91cHMuc29ydCgoZ3JvdXBBOiBHcm91cE5vZGUsIGdyb3VwQjogR3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBBID0gZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBCID0gZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmIChsb3dlckdyb3VwQSA8IGxvd2VyR3JvdXBCKSByZXR1cm4gLTE7XHJcbiAgICAgIGVsc2UgaWYgKGxvd2VyR3JvdXBBID4gbG93ZXJHcm91cEIpIHJldHVybiAxO1xyXG4gICAgICBlbHNlIGlmIChsb3dlckdyb3VwQSA9PT0gbG93ZXJHcm91cEIpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGdyb3VwQT8uaXRlbT8uZ3JvdXBBY3JvbnltPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChncm91cEEuaXRlbS5ncm91cEFjcm9ueW1baW5kZXhdIDwgZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSlcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSA+IGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bVtpbmRleF1cclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbWVudSBncm91cCBhY3Rpb25cclxuICAgKiBAcGFyYW0ge01lbnV9IG1lbnVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwQWN0aW9uc0NsaWNrKG1lbnU6IE1lbnUgfCBJY29uQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24gPSBtZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBleHBhbmQvY29sbGFwc2UgaWNvbiBiYXNlZCBvbiB0aGUgdG9nZ2xlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFRvZ2dsZUJ1dHRvbkluZm8oZ3JvdXA6IEdyb3VwTm9kZSk6IEljb25CdXR0b24ge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQoZ3JvdXApKSByZXR1cm4gdGhpcy5taW51c0NpcmNsZUljb25CdXR0b247XHJcbiAgICByZXR1cm4gdGhpcy5wbHVzQ2lyY2xlSWNvbkJ1dHRvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgZW1pdHRlZCBncm91cCBhY3Rpb25zIGV2ZW50LiBFbWl0cyB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXRcclxuICAgKiBmb3IgdGhlIHNlbGVjdGVkIGFjdGlvbjogdmlldyByb3N0ZXIsIGNyZWF0ZSBzdWIgZ3JvdXAsIGVkaXQgZ3JvdXAsXHJcbiAgICogZGVsZXRlIGdyb3VwLCBvciBtYW5hZ2UgaW50ZXJlc3QgZm9ybS5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBoYW5kbGVHcm91cEFjdGlvbnMoZ3JvdXA6IEdyb3VwTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSKSB7XHJcbiAgICAgIHRoaXMudmlld1Jvc3RlckNsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgICB0aGlzLmNyZWF0ZUdyb3VwQ2xpY2suZW1pdChncm91cD8uaXRlbSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkVESVRfR1JPVVApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICAgIGNvbnN0IGVkaXRHcm91cFBhcmVudEluZm8gPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/LmZpbHRlcihcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwPy5pdGVtPy5ncm91cFBhcmVudElkXHJcbiAgICAgIClbMF0/Lml0ZW07XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvID0ge1xyXG4gICAgICAgIGdyb3VwSW5mbzogZ3JvdXA/Lml0ZW0sXHJcbiAgICAgICAgcGFyZW50R3JvdXBJbmZvOiBlZGl0R3JvdXBQYXJlbnRJbmZvLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmVkaXRHcm91cENsaWNrLmVtaXQodGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVApIHtcclxuICAgICAgdGhpcy5kZWxldGVHcm91cENsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uTUFOQUdFX0lOVEVSRVNUX0ZPUk1cclxuICAgICkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcclxuICAgICAgdGhpcy5tYW5hZ2VJbnRlcmVzdEZvcm1DbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgYWN0aW9uIG1lbnUgaXRlbXMgdGhlIGN1cnJlbnQgdXNlciBtYXkgc2VlIGZvciB0aGUgZ2l2ZW5cclxuICAgKiBncm91cCwgZmlsdGVyZWQgYnkgcGVyLWdyb3VwIHBlcm1pc3Npb25zIGFuZCBncm91cCB0eXBlLiBUaGUgXCJNYW5hZ2VcclxuICAgKiBJbnRlcmVzdCBGb3JtXCIgYWN0aW9uIChTUDNNLTM4MCkgaXMgZ2F0ZWQ6IGl0IHJlbmRlcnMgb25seSB3aGVuIHRoZVxyXG4gICAqIGludGVyZXN0LWZvcm0gZmVhdHVyZSBpcyBlbmFibGVkIGZvciB0aGUgdGVuYW50XHJcbiAgICogKEdyb3Vwc1NlcnZpY2UuaXNJbnRlcmVzdEZvcm1GZWF0dXJlRW5hYmxlZCgpKSBBTkQgZWl0aGVyIChhKSB0aGUgdXNlciBob2xkc1xyXG4gICAqIHRoZSBWSUVXX0FORF9NQU5BR0VfR1JPVVBfSU5URVJFU1QgcGVybWlzc2lvbiBmb3IgdGhhdCBzcGVjaWZpYyBncm91cFxyXG4gICAqIChzdHJpY3RseSBwZXItZ3JvdXAsIG5vIGdsb2JhbCBmYWxsYmFjayDigJQgZS5nLiBhIENoYWlyKSwgT1IgKGIpIHRoZSB1c2VyIGlzIGFcclxuICAgKiBjcm9zcy1ncm91cCBhZG1pbiB3aG9zZSBhZG1pbiByb2xlIGhvbGRzIEJPVEggTUFOQUdFX0FMTF9HUk9VUFMgKFwiTWFuYWdlIEFsbFxyXG4gICAqIEdyb3VwIERldGFpbHNcIikgQU5EIHRoZSBpbnRlcmVzdCBwZXJtaXNzaW9uIGdsb2JhbGx5LiBUaGUgYWRtaW4gb3ZlcnJpZGVcclxuICAgKiByZXF1aXJlcyB0aGUgaW50ZXJlc3QgcGVybWlzc2lvbiB0b286IGFuIGFkbWluIHdob3NlIHJvbGUgaXMgbm90IG1hcHBlZCB3aXRoXHJcbiAgICogdGhlIGludGVyZXN0IHBlcm1pc3Npb24gZG9lcyBOT1Qgc2VlIHRoZSBhY3Rpb24gb24gZXZlcnkgZ3JvdXAuIEl0IGlzIGFsd2F5c1xyXG4gICAqIGhpZGRlbiBvbiBhZG1pbi9zeXN0ZW0gZ3JvdXAgdHlwZXMgKGUuZy4gdGhlIFN5c3RlbSBVc2VycyBHcm91cCksIHdoaWNoIGFyZVxyXG4gICAqIG5vdCByZWFsIGNvbW1pdHRlZXMgd2l0aCBhbiBpbnRlcmVzdCBmb3JtLCBhbmQgaGlkZGVuIGVudGlyZWx5IHdoZW4gdGhlXHJcbiAgICogZmVhdHVyZSBpcyBkaXNhYmxlZC4gV2hlbiBzaG93biBpdCBpcyBrZXB0IGxlZnRtb3N0IGJ5IHRoZSB0cmFpbGluZyBzb3J0LlxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBncm91cFxyXG4gICAqIEByZXR1cm4ge01lbnVbXX1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhncm91cDogR3JvdXBOb2RlKTogTWVudVtdIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkTWVudTogTWVudVtdID0gW107XHJcbiAgICBjb25zdCBpc0FkbWluR3JvdXBUeXBlID0gZ3JvdXA/Lml0ZW0/Lmdyb3VwVHlwZUluZm8/LmJ1c2luZXNzUnVsZT8uaXNBZG1pbjtcclxuICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbnMgPSBncm91cD8uaXRlbT8ucGVybWlzc2lvbnM7XHJcbiAgICB0aGlzLm1lbnVJdGVtcz8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICBlLmlzVG9vbFRpcE5lZWRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5WSUVXX1JPU1RFUiAmJlxyXG4gICAgICAgICAgKChpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMsXHJcbiAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICApKSB8fFxyXG4gICAgICAgICAgICAoIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0dST1VQX09GRklDRVJTLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0dST1VQX01FTUJFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0FMTF9ST1NURVJTXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX01FTUJFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkpKSkpIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5FRElUX0dST1VQICYmXHJcbiAgICAgICAgICAhdGhpcy5ncm91cHNTZXJ2aWNlLmlzR3JvdXBzQW5kUm9zdGVyc1Jlc3RyaWN0ZWQoKSAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuRURJVF9HUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSkgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkRFTEVURV9HUk9VUCAmJlxyXG4gICAgICAgICAgIXRoaXMuZ3JvdXBzU2VydmljZS5pc0dyb3Vwc0FuZFJvc3RlcnNSZXN0cmljdGVkKCkgJiZcclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkRFTEVURV9HUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWdyb3VwPy5pdGVtPy5oYXNDaGlsZHJlbikgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkNSRUFURV9TVUJfR1JPVVAgJiZcclxuICAgICAgICAgICF0aGlzLmdyb3Vwc1NlcnZpY2UuaXNHcm91cHNBbmRSb3N0ZXJzUmVzdHJpY3RlZCgpICYmXHJcbiAgICAgICAgICBncm91cD8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8uYnVzaW5lc3NSdWxlPy5hbGxvd1N1Ykdyb3VwICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkNSRUFURV9TVUJHUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUpIHx8XHJcbiAgICAgICAgLy8gSW50ZXJlc3QgZm9ybTogaGlkZGVuIG9uIGFkbWluL3N5c3RlbSBncm91cCB0eXBlczsgZWxzZSBzaG93biBwZXItZ3JvdXBcclxuICAgICAgICAvLyAoZS5nLiBDaGFpcikgT1IgZm9yIGFuIGFkbWluIGhvbGRpbmcgQk9USCBNQU5BR0VfQUxMX0dST1VQUyBhbmQgdGhlIGludGVyZXN0IHBlcm1pc3Npb24uXHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5NQU5BR0VfSU5URVJFU1RfRk9STSAmJlxyXG4gICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmlzSW50ZXJlc3RGb3JtRmVhdHVyZUVuYWJsZWQoKSAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuVklFV19BTkRfTUFOQUdFX0dST1VQX0lOVEVSRVNULFxyXG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zID8/IFtdXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0FORF9NQU5BR0VfR1JPVVBfSU5URVJFU1RcclxuICAgICAgICAgICAgICApKSkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGZpbHRlcmVkTWVudS5wdXNoKGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIFNob3cgdGhlIE1hbmFnZSBJbnRlcmVzdCBGb3JtIGFjdGlvbiBmaXJzdCAobGVmdG1vc3QpIHBlciB0aGUgZGVzaWduLlxyXG4gICAgZmlsdGVyZWRNZW51LnNvcnQoKG1lbnVBLCBtZW51QikgPT4ge1xyXG4gICAgICBpZiAobWVudUE/LmlkID09PSBHcm91cEFjdGlvbi5NQU5BR0VfSU5URVJFU1RfRk9STSkgcmV0dXJuIC0xO1xyXG4gICAgICBpZiAobWVudUI/LmlkID09PSBHcm91cEFjdGlvbi5NQU5BR0VfSU5URVJFU1RfRk9STSkgcmV0dXJuIDE7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmlsdGVyZWRNZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBUYWtlcyB0aGUgaW5kZXggYW5kIHRoZSBpY29uIGJ1dHRvbiBhcyBhcmd1bWVudHMgYW5kIG5lZWRzIHRvIHJldHVybiB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaWNvbiBidXR0b24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtJY29uQnV0dG9ufSBpY29uQnV0dG9uXHJcbiAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpY29uQnV0dG9uOiBJY29uQnV0dG9uKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpY29uQnV0dG9uLmlkO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBOZ09uRGVzdHJveSBwZXJmb3JtcyBuZWNlc3NhcnkgY2xlYW51cCB0YXNrcywgc3VjaCBhcyB1bnN1YnNjcmliaW5nIGZyb20gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVcIj5cclxuICA8bWF0LXRyZWVcclxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX3Jvb3RcIlxyXG4gICAgI3Jvb3RTZWxlY3RvclxyXG4gICAgcm9sZT1cInRyZWVncmlkXCJcclxuICA+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiXHJcbiAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cInRyZWVQYWRkaW5nSW5kZW50XCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNlwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleFwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Qm94U2hhZG93KClcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgbm9kZT8uaXRlbT8uZ3JvdXBQYXJlbnRJZCAmJlxyXG4gICAgICAgICAgZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpICE9PSBncm91cEZ1bmN0aW9uVHlwZS5GSUxURVIgJiZcclxuICAgICAgICAgIGdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSAhPT0gZ3JvdXBGdW5jdGlvblR5cGUuU0VBUkNIXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS10cmVlX19yb290LW5vZGUtd2hpdGUtYmcnXHJcbiAgICAgICAgICAgIDogJ2llZWVzYS10cmVlX19yb290LW5vZGUnXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlID8gJ2llZWVzYS10cmVlX19jb2xsYXBzZS1pY29uJyA6ICcnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBOb2RlT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRHcm91cHNcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLWJvZHktbWQtMTYgaWVlZXNhLXRyZWVfX3BhcmVudC1ub2RlLXdyYXBwZXJcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgW25nQ2xhc3NdPVwiW1xyXG4gICAgICAgICAgdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdpZWVlc2EtdHJlZV9fZXhwYW5kZWQnIDogJycsXHJcbiAgICAgICAgICBub2RlPy5pdGVtPy5ncm91cFBhcmVudElkICYmXHJcbiAgICAgICAgICBncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgIT09IGdyb3VwRnVuY3Rpb25UeXBlLkZJTFRFUiAmJlxyXG4gICAgICAgICAgZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpICE9PSBncm91cEZ1bmN0aW9uVHlwZS5TRUFSQ0hcclxuICAgICAgICAgICAgPyAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZS13aGl0ZS1iZydcclxuICAgICAgICAgICAgOiAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZSdcclxuICAgICAgICBdXCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleFwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Qm94U2hhZG93KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiByb2xlPVwiZ3JpZGNlbGxcIj5cclxuICAgICAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCIhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlXCJcclxuICAgICAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJ2aWV3Q2hpbGRHcm91cHMobm9kZSlcIlxyXG4gICAgICAgICAgICBbaWNvbkJ1dHRvbl09XCJnZXRUb2dnbGVCdXR0b25JbmZvKG5vZGUpXCJcclxuICAgICAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cE5vZGVPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBOb2RlT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpZWVlc2FHcm91cEluZm9PdXRsZXQ7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cIlxyXG4gICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImQtZmxleCBkLW5vbmUgZ2FwLTMgZC1zbS1mbGV4IGQtbWQtZmxleCBkLWxnLWZsZXggaWVlZXNhLXRyZWVfX2dyb3VwLWFjdGlvbnNcIlxyXG4gICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGllZWVzYS1tZW51XHJcbiAgICAgICAgW2J1dHRvbl09XCJjb25zdGFudHM/LnZpZXdHcm91cHM/Lmdyb3VwQWN0aW9uc01lbnVcIlxyXG4gICAgICAgIFttZW51SXRlbXNdPVwiZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMobm9kZSlcIlxyXG4gICAgICAgIChtZW51SXRlbUNsaWNrKT1cIm9uR3JvdXBBY3Rpb25zQ2xpY2soJGV2ZW50KTsgaGFuZGxlR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICBjbGFzcz1cImQtbGctbm9uZSBkLW1kLW5vbmUgZC1zbS1ub25lXCJcclxuICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICA+PC9pZWVlc2EtbWVudT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwSW5mb091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS10cmVlX19ncm91cC1pbmZvLXdyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVfX2dyb3VwLWluZm8gZC1mbGV4IGFsaWduLWl0ZW1zLWJhc2VsaW5lXCI+XHJcbiAgICAgICAgICA8cFxyXG4gICAgICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLW5hbWUgaWVlZXNhLXRpdGxlLW1kLTE4XCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwibm9kZT8uaXRlbT8uZ3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgICAgPnt7IG5vZGU/Lml0ZW0/Lmdyb3VwTmFtZSB9fTwvcD5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtYWNyb255bSBpZWVlc2EtdGl0bGUtc20tMTZcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJub2RlPy5pdGVtPy5ncm91cEFjcm9ueW1cIlxyXG4gICAgICAgICAgICBpZWVlc2FUZXh0VHJ1bmNhdGVkXHJcbiAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgICA+e3sgbm9kZT8uaXRlbT8uZ3JvdXBBY3JvbnltIH19PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1kZXNjXCI+XHJcbiAgICAgICAgICB7eyBub2RlPy5pdGVtPy5ncm91cFR5cGVJbmZvPy5uYW1lIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMobm9kZSk7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwiaXRlbVwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJcclxuICAgICAgICAgIG9uR3JvdXBBY3Rpb25zQ2xpY2soJGV2ZW50KTsgaGFuZGxlR3JvdXBBY3Rpb25zKG5vZGUpXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICA8L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9tYXQtdHJlZT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -3463,13 +3463,16 @@ class TreeViewComponent {
|
|
|
3463
3463
|
* group, filtered by per-group permissions and group type. The "Manage
|
|
3464
3464
|
* Interest Form" action (SP3M-380) is gated: it renders only when the
|
|
3465
3465
|
* interest-form feature is enabled for the tenant
|
|
3466
|
-
* (GroupsService.isInterestFormFeatureEnabled()) AND either the user holds
|
|
3467
|
-
* VIEW_AND_MANAGE_GROUP_INTEREST permission for that specific group
|
|
3468
|
-
* per-group, no global fallback) OR the user is a
|
|
3469
|
-
*
|
|
3470
|
-
*
|
|
3471
|
-
*
|
|
3472
|
-
*
|
|
3466
|
+
* (GroupsService.isInterestFormFeatureEnabled()) AND either (a) the user holds
|
|
3467
|
+
* the VIEW_AND_MANAGE_GROUP_INTEREST permission for that specific group
|
|
3468
|
+
* (strictly per-group, no global fallback — e.g. a Chair), OR (b) the user is a
|
|
3469
|
+
* cross-group admin whose admin role holds BOTH MANAGE_ALL_GROUPS ("Manage All
|
|
3470
|
+
* Group Details") AND the interest permission globally. The admin override
|
|
3471
|
+
* requires the interest permission too: an admin whose role is not mapped with
|
|
3472
|
+
* the interest permission does NOT see the action on every group. It is always
|
|
3473
|
+
* hidden on admin/system group types (e.g. the System Users Group), which are
|
|
3474
|
+
* not real committees with an interest form, and hidden entirely when the
|
|
3475
|
+
* feature is disabled. When shown it is kept leftmost by the trailing sort.
|
|
3473
3476
|
* @param {GroupNode} group
|
|
3474
3477
|
* @return {Menu[]}
|
|
3475
3478
|
* @memberof TreeViewComponent
|
|
@@ -3506,19 +3509,14 @@ class TreeViewComponent {
|
|
|
3506
3509
|
(this.groupsService.validateAccess(this.permissionType.CREATE_SUBGROUP, groupPermissions) ||
|
|
3507
3510
|
this.groupsService.validateAccess(this.permissionType.MANAGE_ALL_GROUPS)) &&
|
|
3508
3511
|
!isAdminGroupType) ||
|
|
3512
|
+
// Interest form: hidden on admin/system group types; else shown per-group
|
|
3513
|
+
// (e.g. Chair) OR for an admin holding BOTH MANAGE_ALL_GROUPS and the interest permission.
|
|
3509
3514
|
(e?.id === GroupAction.MANAGE_INTEREST_FORM &&
|
|
3510
3515
|
this.groupsService.isInterestFormFeatureEnabled() &&
|
|
3511
|
-
// Hidden on admin/system group types (e.g. the System Users Group):
|
|
3512
|
-
// those are not real committees with an interest form.
|
|
3513
3516
|
!isAdminGroupType &&
|
|
3514
|
-
// Either the user holds the interest permission on THIS specific group
|
|
3515
|
-
// (strictly per-group: a non-member group has `permissions: null`,
|
|
3516
|
-
// coerced to [] so validateAccess stays in its per-group branch and does
|
|
3517
|
-
// NOT fall back to the global permission set), OR the user is a
|
|
3518
|
-
// cross-group admin (MANAGE_ALL_GROUPS = "Manage All Group Details") who
|
|
3519
|
-
// manages all groups and therefore sees the action on every non-admin group.
|
|
3520
3517
|
(this.groupsService.validateAccess(this.permissionType.VIEW_AND_MANAGE_GROUP_INTEREST, groupPermissions ?? []) ||
|
|
3521
|
-
this.groupsService.validateAccess(this.permissionType.MANAGE_ALL_GROUPS)
|
|
3518
|
+
(this.groupsService.validateAccess(this.permissionType.MANAGE_ALL_GROUPS) &&
|
|
3519
|
+
this.groupsService.validateAccess(this.permissionType.VIEW_AND_MANAGE_GROUP_INTEREST))))) {
|
|
3522
3520
|
filteredMenu.push(e);
|
|
3523
3521
|
}
|
|
3524
3522
|
});
|