@ieeesa-npm/tenants 0.5.1 → 0.5.2

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZWQtcHJvZmlsZS1maWVsZHMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW5hbnRzL3NyYy9saWIvbW9kZWxzL3JlcXVpcmVkLXByb2ZpbGUtZmllbGRzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVkUHJvZmlsZUZpZWxkT3B0aW9uIHtcclxuICBmaWVsZDogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgZW5hYmxlZDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJlZFByb2ZpbGVGaWVsZHNWYWx1ZSB7XHJcbiAgcmVxdWlyZWRGaWVsZHM6IHN0cmluZ1tdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVkUHJvZmlsZUZpZWxkc0NvbmZpZ3VyYXRpb24ge1xyXG4gIGNvbmZpZ0ZpZWxkSWQ6IHN0cmluZztcclxuICBjb25maWdGaWVsZE5hbWU6IHN0cmluZztcclxuICBjb25maWdGaWVsZFZhbHVlOiBSZXF1aXJlZFByb2ZpbGVGaWVsZHNWYWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJlZFByb2ZpbGVGaWVsZHNSZXNwb25zZSB7XHJcbiAgc3RhdHVzOiBib29sZWFuO1xyXG4gIGJvZHk/OiBSZXF1aXJlZFByb2ZpbGVGaWVsZHNDb25maWd1cmF0aW9uW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlUmVxdWlyZWRQcm9maWxlRmllbGRzUGF5bG9hZCB7XHJcbiAgcGF5bG9hZDoge1xyXG4gICAgYXBwSWQ6IHN0cmluZztcclxuICAgIGNvbmZpZ0ZpZWxkTmFtZTogc3RyaW5nO1xyXG4gICAgY29uZmlnRmllbGRJZDogc3RyaW5nO1xyXG4gICAgY29uZmlnRmllbGRWYWx1ZTogUmVxdWlyZWRQcm9maWxlRmllbGRzVmFsdWU7XHJcbiAgfTtcclxufSJdfQ==
@@ -490,6 +490,20 @@ export class TenantApplicationsService {
490
490
  throw error;
491
491
  }));
492
492
  }
493
+ getRequiredProfileFields(appId) {
494
+ return this.httpService
495
+ .getData(`${this.apiBaseUrl}/configurations/config/required_profile_fields/${appId}`)
496
+ .pipe(map((response) => response), catchError((error) => {
497
+ throw error;
498
+ }));
499
+ }
500
+ updateRequiredProfileFields(payload) {
501
+ return this.httpService
502
+ .putData(`${this.apiBaseUrl}/configurations/config/requiredProfileFields`, payload)
503
+ .pipe(map((response) => response), catchError((error) => {
504
+ throw error;
505
+ }));
506
+ }
493
507
  /**
494
508
  * It generates Feature list from checkbox options generated in form array.
495
509
  * @param {CheckboxOption[]} features
@@ -615,4 +629,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
615
629
  providedIn: 'root',
616
630
  }]
617
631
  }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.TenantPermissionsService }, { type: i3.TenantPermissionsMapService }]; } });
618
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWFwcGxpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVuYW50cy9zcmMvbGliL3NlcnZpY2VzL3RlbmFudC1hcHBsaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEtBQUssV0FBVyxNQUFNLDBCQUEwQixDQUFDOzs7OztBQWtFeEQsTUFBTSxPQUFPLHlCQUF5QjtJQXFCcEM7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBd0I7SUFDaEMsMENBQTBDO0lBQ2xDLHdCQUFrRDtJQUMxRCwwQ0FBMEM7SUFDbEMsMkJBQXdELENBQUMsNkNBQTZDOztRQUp0RyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUV4Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBRWxELGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBNkI7UUExQmxFLGdCQUFXLEdBQUcsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUM7UUFLL0Msc0JBQWlCLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUM7UUFHdEQsaUJBQVksR0FBa0IsRUFBRSxDQUFDO1FBQ2pDLG9CQUFlLEdBQXFCLEVBQUUsQ0FBQztRQUN2QyxnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFDaEMsZ0JBQVcsR0FBZSxFQUFFLENBQUM7UUFDN0Isb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBT3ZDLCtCQUEwQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFRakQsQ0FBQztJQUNKLFlBQVksQ0FBQyxVQUFrQixFQUFFLGNBQWdDO1FBQy9ELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElB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Ozs7T0FLRztJQUNILFVBQVUsQ0FDUixpQkFBMkM7UUFFM0MsT0FBTyxJQUFJLENBQUMsV0FBVzthQUNwQixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSx5QkFBeUIsRUFBRSxpQkFBaUIsQ0FBQzthQUN2RSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxhQUFhLENBQUMsS0FBYTtRQUN6QixPQUFPLElBQUksQ0FBQyxXQUFXO2FBQ3BCLE9BQU8sQ0FDTixHQUFHLElBQUksQ0FBQyxVQUFVLDhDQUE4QyxLQUFLLEVBQUUsQ0FDeEU7YUFDQSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLFVBQWlDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDOytHQXh0QlUseUJBQXlCO21IQUF6Qix5QkFBeUIsY0FGeEIsTUFBTTs7NEZBRVAseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IEdldFRlbmFudHNQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbi1zY2hlbWEtdmlldy10ZW5hbnQtbGlzdC5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgVGVuYW50c1Blcm1pc3Npb25zLFxyXG4gIFVzZXJQZXJtaXNzaW9uLFxyXG59IGZyb20gJy4uL21vZGVscy90ZW5hbnRzLXBlcm1pc3Npb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUZW5hbnRQZXJtaXNzaW9uc01hcFNlcnZpY2UgfSBmcm9tICcuL3RlbmFudC1wZXJtaXNzaW9ucy1tYXAuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ3JlYXRlVGVuYW50UmVxdWVzdFBheWxvYWQsXHJcbiAgQ3JlYXRlVGVuYW50UmVzcG9uc2UsXHJcbiAgR2V0VGVuYW50c1Jlc3BvbnNlLFxyXG4gIE5ld1RlbmFudEluZm8sXHJcbiAgVGVuYW50QmFzaWNJbmZvLFxyXG4gIFRlbmFudERldGFpbHNSZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvdGVuYW50Lm1vZGVsJztcclxuaW1wb3J0IHsgUmFkaW9PcHRpb24gfSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgeyBDaGVja2JveE9wdGlvbiB9IGZyb20gJ0BpZWVlc2EtbnBtL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgRmVhdHVyZUlkLFxyXG4gIEZlYXR1cmVzLFxyXG4gIEdldEZlYXR1cmVzUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2ZlYXR1cmVzLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBBcHBUeXBlQ29uZmlnLFxyXG4gIEdldEFwcFR5cGVzUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2FwcC10eXBlLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFRlbmFudFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4vdGVuYW50LXBlcm1pc3Npb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZW5hbnRGdW5jdGlvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvdGVuYW50LWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEdldFJvbGVzQW5kUGVybWlzc2lvbnNQYXlsb2FkLFxyXG4gIEdldFJvbGVzQW5kUGVybWlzc2lvbnNSZXNwb25zZSxcclxuICBHZXRSb2xlc1Jlc3BvbnNlLFxyXG4gIFJvbGVJbmZvLFxyXG4gIERlbGV0ZVJvbGVSZXF1ZXN0UGF5bG9hZCxcclxuICBEZWxldGVSb2xlUmVzcG9uc2UsXHJcbiAgUm9sZSxcclxuICBHZXRQZXJtaXNzaW9uc1Jlc3BvbnNlLFxyXG4gIFJvbGVQZXJtaXNzaW9uTWFwcGluZ1JlcXVlc3RQYXlsb2FkLFxyXG4gIFJvbGVQZXJtaXNzaW9uTWFwcGluZ1Jlc3BvbnNlLFxyXG4gIFJvbGVzQW5kUGVybWlzc2lvbnNSZXF1ZXN0UGF5bG9hZCxcclxuICBSb2xlc0FuZFBlcm1pc3Npb25zUmVzcG9uc2UsXHJcbiAgUm9sZURldGFpbHMsXHJcbiAgQ3JlYXRlTW9kaWZ5Um9sZVJlcXVlc3RQYXlsb2FkLFxyXG4gIENyZWF0ZU1vZGlmeVJvbGVSZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvcm9sZXMtYW5kLXBlcm1pc3Npb25zLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBVcGRhdGVUZW5hbnRTdGF0dXNSZXF1ZXN0UGF5bG9hZCxcclxuICBVcGRhdGVUZW5hbnRTdGF0dXNSZXNwb25zZSxcclxufSBmcm9tICcuLi9tb2RlbHMvdXBkYXRlLXRlbmFudC1zdGF0dXMubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEdldFJvbGVUeXBlc1BheWxvYWQsXHJcbiAgUm9sZVR5cGVDb25maWd1cmF0aW9uLFxyXG4gIFJvbGVUeXBlT3B0aW9uLFxyXG4gIFJvbGVUeXBlUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3JvbGUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFZpZXdHcm91cFR5cGVSZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy92aWV3LXRlbmFudC1ncm91cC10eXBlcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQ3JlYXRlR3JvdXBUeXBlUmVxdWVzdFBheWxvYWQsXHJcbiAgQ3JlYXRlR3JvdXBUeXBlUmVzcG9uc2UsXHJcbiAgQ3JlYXRlZE9yTW9kaWZpZWRHcm91cFR5cGVJbmZvLFxyXG4gIEdldFJvc3RlclR5cGVPclNldHRpbmdzUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2NyZWF0ZS1ncm91cC10eXBlLm1vZGVsJztcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2Uge1xyXG4gIHRlbmFudHNUZXh0ID0gc2NyZWVuVGV4dHM/LnZpZXdUZW5hbnRzPy5lcnJvcnM7XHJcbiAgYXBpQmFzZVVybCE6IHN0cmluZztcclxuICB1c2VyUGVybWlzc2lvbiE6IFVzZXJQZXJtaXNzaW9uW107XHJcbiAgc2VsZWN0ZWRUZW5hbnRJbmZvITogVGVuYW50QmFzaWNJbmZvIHwgdW5kZWZpbmVkO1xyXG4gIHVzZXJUZW5hbnRzUGVybWlzc2lvbnMhOiBUZW5hbnRzUGVybWlzc2lvbnNbXTtcclxuICBjcmVhdGVUZW5hbnRzVGV4dCA9IHNjcmVlblRleHRzPy5jcmVhdGVUZW5hbnQ/LmVycm9ycztcclxuICBuZXdUZW5hbnRJbmZvITogTmV3VGVuYW50SW5mbztcclxuICB0ZW5hbnRGdW5jdGlvblR5cGUhOiBUZW5hbnRGdW5jdGlvblR5cGU7XHJcbiAgcmFkaW9PcHRpb25zOiBSYWRpb09wdGlvbltdID0gW107XHJcbiAgY2hlY2tCb3hPcHRpb25zOiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgYXBwVHlwZUluZm86IFJhZGlvT3B0aW9uW10gPSBbXTtcclxuICBmZWF0dXJlTGlzdDogRmVhdHVyZXNbXSA9IFtdO1xyXG4gIHJvbGVUeXBlT3B0aW9uczogUm9sZVR5cGVPcHRpb25bXSA9IFtdO1xyXG4gIG5ld2x5Q3JlYXRlZFJvbGUhOiBSb2xlSW5mbztcclxuICByb2xlVHlwZU9wdGlvbiE6IFJvbGVUeXBlT3B0aW9uW107XHJcbiAgc2VsZWN0ZWRSb2xlSW5mbyE6IFJvbGVEZXRhaWxzO1xyXG4gIHJvbGVzITogUm9sZVtdO1xyXG4gIGdyb3VwVHlwZXMhOiBWaWV3R3JvdXBUeXBlUmVzcG9uc2U7XHJcbiAgbmV3bHlDcmVhdGVkR3JvdXBUeXBlITogQ3JlYXRlZE9yTW9kaWZpZWRHcm91cFR5cGVJbmZvO1xyXG4gIGlzR3JvdXBUeXBlQWRkZWRPck1vZGlmaWVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdGVuYW50UGVybWlzc2lvbnNTZXJ2aWNlOiBUZW5hbnRQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdGVuYW50UGVybWlzc2lvbnNNYXBTZXJ2aWNlOiBUZW5hbnRQZXJtaXNzaW9uc01hcFNlcnZpY2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG4gIHNldEFwcENvbmZpZyhhcGlCYXNlVXJsOiBzdHJpbmcsIHVzZXJQZXJtaXNzaW9uOiBVc2VyUGVybWlzc2lvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwaUJhc2VVcmwgPSBhcGlCYXNlVXJsO1xyXG4gICAgdGhpcy51c2VyUGVybWlzc2lvbiA9IHVzZXJQZXJtaXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0ZW5hbnQgZGV0YWlscyBmcm9tIHNlcnZlciB1c2luZyBIdHRwU2VydmljZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8VGVuYW50RGV0YWlsc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFRlbmFudERldGFpbHMoYXBwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VGVuYW50RGV0YWlsc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2FwcC9kZXRhaWxzLyR7YXBwSWR9YClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1c2VyIHRlbmFudHMgcGVybWlzc2lvbnNcclxuICAgKiBAcGFyYW0ge1RlbmFudHNQZXJtaXNzaW9uc1tdfSBUZW5hbnRzUGVybWlzc2lvbnNcclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFVzZXJUZW5hbnRzUGVybWlzc2lvbnModXNlclRlbmFudHNQZXJtaXNzaW9uczogVGVuYW50c1Blcm1pc3Npb25zW10pIHtcclxuICAgIHRoaXMudXNlclRlbmFudHNQZXJtaXNzaW9ucyA9IHVzZXJUZW5hbnRzUGVybWlzc2lvbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHVzZXIgdGVuYW50cyBwZXJtaXNzaW9uc1xyXG4gICAqIEByZXR1cm4ge1RlbmFudHNQZXJtaXNzaW9uc1tdfVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0VXNlclRlbmFudHNQZXJtaXNzaW9ucygpOiBUZW5hbnRzUGVybWlzc2lvbnNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyVGVuYW50c1Blcm1pc3Npb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdXNlciB0ZW5hbnRzIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtUZW5hbnRCYXNpY0luZm99IHRlbmFudEluZm9cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFNlbGVjdGVkVGVuYW50SW5mb3JtYXRpb24odGVuYW50SW5mbzogVGVuYW50QmFzaWNJbmZvKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGVuYW50SW5mbyA9IHRlbmFudEluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRlbmFudHMgaW5mb3JtYXRpb25cclxuICAgKiBAcmV0dXJuIHtUZW5hbnRCYXNpY0luZm99XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZFRlbmFudEluZm9ybWF0aW9uKCk6IFRlbmFudEJhc2ljSW5mbyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRlbmFudEluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHJvbGVzIGluZm9ybWF0aW9uc1xyXG4gICAqIEBwYXJhbSB7Um9sZX0gcm9sZXNcclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFJvbGVzSW5mbyhyb2xlczogUm9sZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvbGVzID0gcm9sZXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHJvbGVzIGluZm9ybWF0aW9uXHJcbiAgICogQHJldHVybiB7Um9sZX1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJvbGVzSW5mbygpOiBSb2xlW10gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMucm9sZXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIHJvbGUgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtSb2xlRGV0YWlsc30gcm9sZUluZm9cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFNlbGVjdGVkUm9sZUluZm9ybWF0aW9uKHJvbGVJbmZvOiBSb2xlRGV0YWlscyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvbGVJbmZvID0gcm9sZUluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNlbGVjdGVkIHJvbGUgaW5mb3JtYXRpb24uXHJcbiAgICogQHJldHVybiB7Um9sZURldGFpbHN9XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZFJvbGVJbmZvcm1hdGlvbigpOiBSb2xlRGV0YWlscyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvbGVJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgcm9sZSB0eXBlIG9wdGlvbnMuXHJcbiAgICogQHBhcmFtIHtSb2xlVHlwZU9wdGlvbn0gcm9sZVR5cGVPcHRpb25zXHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRSb2xlVHlwZU9wdGlvbihyb2xlVHlwZU9wdGlvbnM6IFJvbGVUeXBlT3B0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMucm9sZVR5cGVPcHRpb24gPSByb2xlVHlwZU9wdGlvbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRlbmFudCByb2xlIHR5cGUgb3B0aW9ucy5cclxuICAgKiBAcmV0dXJuIHtSb2xlVHlwZU9wdGlvbn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJvbGVUeXBlT3B0aW9uKCk6IFJvbGVUeXBlT3B0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucm9sZVR5cGVPcHRpb247XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGxpc3Qgb2YgYXBwbGljYXRpb24gdHlwZSBpbmZvcm1hdGlvblxyXG4gICAqIEBwYXJhbSB7UmFkaW9PcHRpb259IGFwcFR5cGVJbmZvXHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRBcHBsaWNhdGlvblR5cGUoYXBwVHlwZUluZm86IFJhZGlvT3B0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwVHlwZUluZm8gPSBhcHBUeXBlSW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBhcHBsaWNhdGlvbiB0eXBlIGluZm9ybWF0aW9uXHJcbiAgICogQHJldHVybiB7UmFkaW9PcHRpb259XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRBcHBsaWNhdGlvblR5cGUoKTogUmFkaW9PcHRpb25bXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5hcHBUeXBlSW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIHBlcm1pc3Npb25zXHJcbiAgICogQHBhcmFtIHVzZXJzUGVybWlzc2lvbnNcclxuICAgKiBAcmV0dXJucyBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGZpbHRlclBlcm1pc3Npb24odXNlcnNQZXJtaXNzaW9uczogVXNlclBlcm1pc3Npb25bXSk6IFRlbmFudHNQZXJtaXNzaW9uc1tdIHtcclxuICAgIHJldHVybiB0aGlzLnRlbmFudFBlcm1pc3Npb25zU2VydmljZT8uZmlsdGVyVGVuYW50c1Blcm1pc3Npb25zKFxyXG4gICAgICB1c2Vyc1Blcm1pc3Npb25zLFxyXG4gICAgICB0aGlzLnRlbmFudFBlcm1pc3Npb25zTWFwU2VydmljZT8uZ2V0R2xvYmFsVGVuYW50c1Blcm1pc3Npb25zKClcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRpbmcgYWNjZXNzIGZvciB0ZW5hbnRzXHJcbiAgICogQHBhcmFtIHBlcm1pc3Npb25UeXBlIFBlcm1pc3Npb24gVHlwZSB0byB2YWxpZGF0ZSBwZXJtaXNzaW9uXHJcbiAgICogQHBhcmFtIG1hcHBlZFVzZXJQZXJtaXNzaW9ucyBQZXJtaXNzaW9uIHdoaWNoIGFyZSBtYXBwZWQgd2l0aCB0ZW5hbnRzXHJcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWRcclxuICAgKi9cclxuICB2YWxpZGF0ZUFjY2VzcyhcclxuICAgIHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSxcclxuICAgIHBlcm1pc3Npb25zOiBUZW5hbnRzUGVybWlzc2lvbnNbXVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVuYW50UGVybWlzc2lvbnNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzUGVybWlzc2lvbihcclxuICAgICAgcGVybWlzc2lvblR5cGUsXHJcbiAgICAgIHBlcm1pc3Npb25zXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0ZW5hbnRzLlxyXG4gICAqIEBwYXJhbSB7R2V0VGVuYW50c1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldFRlbmFudHNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRUZW5hbnRzTGlzdChwYXlsb2FkOiBHZXRUZW5hbnRzUGF5bG9hZCk6IE9ic2VydmFibGU8R2V0VGVuYW50c1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9hcHAvY29uZmlnYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGxpc3Qgb2YgZmVhdHVyZXMgZnJvbSBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRGZWF0dXJlc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZlYXR1cmVzKCk6IE9ic2VydmFibGU8R2V0RmVhdHVyZXNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9hcHAvZmVhdHVyZXNgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgbGlzdCBvZiByb2xlcyBmcm9tIHNlcnZlciB1c2luZyBIdHRwU2VydmljZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwSWRcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R2V0Um9sZXNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb2xlcyhhcHBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxHZXRSb2xlc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb2xlLyR7YXBwSWR9YClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIGJhc2VkIG9uIHRoZSBhcHBJZCBhbmQgcmV0dXJuIHRoZSBzdWNjZXNzIG9yIGVycm9yIHJlc3BvbnNlIGFzIE9ic2VydmFibGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcElkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRQZXJtaXNzaW9uc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFBlcm1pc3Npb25zKGFwcElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEdldFBlcm1pc3Npb25zUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Blcm1pc3Npb25zLyR7YXBwSWR9YClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHJvbGVzIG9yIHBlcm1pc3Npb25zIGJhc2VkIG9uIHRoZSByb2xlSWQgb3IgcGVybWlzc2lvbklkIGluIHRoZSBwYXlsb2FkIGFuZCByZXR1cm4gdGhlIHN1Y2Nlc3Mgb3IgZXJyb3IgcmVzcG9uc2UgYXMgT2JzZXJ2YWJsZS5cclxuICAgKiBAcGFyYW0ge1JvbGVQZXJtaXNzaW9uTWFwcGluZ1JlcXVlc3RQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8Um9sZVBlcm1pc3Npb25NYXBwaW5nUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9sZVBlcm1pc3Npb25NYXBwaW5nKFxyXG4gICAgcGF5bG9hZDogUm9sZVBlcm1pc3Npb25NYXBwaW5nUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPFJvbGVQZXJtaXNzaW9uTWFwcGluZ1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvdXNlcnMvcm9sZVBlcm1pc3Npb25NYXBwaW5nYCxcclxuICAgICAgICBwYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTdWJtaXQgdGhlIG5ldyBtYXBwaW5ncyBvZiByb2xlcyB0byBwZXJtaXNzaW9ucyB0byB0aGUgc2VydmVyLlxyXG4gICAqIEBwYXJhbSB7Um9sZXNBbmRQZXJtaXNzaW9uc1JlcXVlc3RQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8Um9sZXNBbmRQZXJtaXNzaW9uc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNhdmVSb2xlUGVybWlzc2lvbk1hcHBpbmcoXHJcbiAgICBwYXlsb2FkOiBSb2xlc0FuZFBlcm1pc3Npb25zUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPFJvbGVzQW5kUGVybWlzc2lvbnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3VzZXJzL3JvbGVQZXJtaXNzaW9uYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGxpc3Qgb2Ygcm9sZXMgYW5kIHBlcm1pc3Npb25zIG1hcHBpbmdzIGZyb20gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZFxyXG4gICAqIEBwYXJhbSB7R2V0Um9sZXNBbmRQZXJtaXNzaW9uc1BheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R2V0Um9sZXNBbmRQZXJtaXNzaW9uc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJvbGVzQW5kUGVybWlzc2lvbnNNYXBwaW5ncyhcclxuICAgIGFwcElkOiBzdHJpbmcsXHJcbiAgICBwYXlsb2FkOiBHZXRSb2xlc0FuZFBlcm1pc3Npb25zUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8R2V0Um9sZXNBbmRQZXJtaXNzaW9uc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9sZUJhc2VkUGVybWlzc2lvbnMvJHthcHBJZH1gLFxyXG4gICAgICAgIHBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgbGlzdCBvZiBhcHBsaWNhdGlvbiB0eXBlcyBmcm9tIHNlcnZlciB1c2luZyBIdHRwU2VydmljZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEFwcFR5cGVzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0QXBwbGljYXRpb25UeXBlcygpOiBPYnNlcnZhYmxlPEdldEFwcFR5cGVzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvY29uZmlnL2FwcF90eXBlYClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBQb3N0cyBjcmVhdGUgcm9sZSBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlIHRvIGNyZWF0ZSBhIG5ldyByb2xlLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlTW9kaWZ5Um9sZVJlcXVlc3RQYXlsb2FkfSBjcmVhdGVNb2RpZnlSb2xlUGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q3JlYXRlTW9kaWZ5Um9sZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGNyZWF0ZVJvbGUoXHJcbiAgICBjcmVhdGVNb2RpZnlSb2xlUGF5bG9hZDogQ3JlYXRlTW9kaWZ5Um9sZVJlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVNb2RpZnlSb2xlUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb2xlYCwgY3JlYXRlTW9kaWZ5Um9sZVBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUG9zdHMgdGhlIGVkaXRlZCByb2xlIGZvcm0gZGF0YSB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UgZm9yIHVwZGF0aW5nIHRoZSByb2xlIGluZm9ybWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlTW9kaWZ5Um9sZVJlcXVlc3RQYXlsb2FkfSBjcmVhdGVNb2RpZnlSb2xlUGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q3JlYXRlTW9kaWZ5Um9sZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGVkaXRSb2xlKFxyXG4gICAgY3JlYXRlTW9kaWZ5Um9sZVBheWxvYWQ6IENyZWF0ZU1vZGlmeVJvbGVSZXF1ZXN0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlTW9kaWZ5Um9sZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb2xlYCwgY3JlYXRlTW9kaWZ5Um9sZVBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgbGlzdCBvZiByb2xlIHR5cGVzIGZyb20gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7R2V0Um9sZVR5cGVzUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Um9sZVR5cGVSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb2xlVHlwZXMocGF5bG9hZDogR2V0Um9sZVR5cGVzUGF5bG9hZCk6IE9ic2VydmFibGU8Um9sZVR5cGVSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvY29uZmlnL2NvbmZpZ0ZpZWxkYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIHRoZSBzZWxlY3QvZHJvcGRvd24gb3B0aW9ucyBmcm9tIHRoZSByb2xlIHR5cGVzIHJlY2VpdmVkIGZyb20gc2VydmVyLlxyXG4gICAqIEBwYXJhbSB7Um9sZVR5cGVDb25maWd1cmF0aW9uW119IHJvbGVUeXBlUmVzcG9uc2VcclxuICAgKiBAcmV0dXJuIHtSb2xlVHlwZU9wdGlvbltdfVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9sZVR5cGVPcHRpb25zKFxyXG4gICAgcm9sZVR5cGVSZXNwb25zZTogUm9sZVR5cGVDb25maWd1cmF0aW9uW11cclxuICApOiBSb2xlVHlwZU9wdGlvbltdIHtcclxuICAgIHRoaXMucm9sZVR5cGVPcHRpb25zID0gW107XHJcbiAgICByb2xlVHlwZVJlc3BvbnNlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgdGhpcy5yb2xlVHlwZU9wdGlvbnM/LnB1c2goe1xyXG4gICAgICAgIGlkOiBpdGVtPy5jb25maWdGaWVsZElkLFxyXG4gICAgICAgIG5hbWU6IGl0ZW0/LmNvbmZpZ0ZpZWxkVmFsdWU/LnJvbGVUeXBlTmFtZSxcclxuICAgICAgICBvcmRlcjogaXRlbT8uY29uZmlnRmllbGRWYWx1ZT8udmlld09yZGVyLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yb2xlVHlwZU9wdGlvbnMuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpO1xyXG4gICAgcmV0dXJuIHRoaXMucm9sZVR5cGVPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUG9zdHMgdGVuYW50IGFwcGxpY2F0aW9uIGZvcm0gZGF0YSB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UgZm9yIGNyZWF0aW5nIG5ldyB0ZW5hbnQgYXBwbGljYXRpb24uXHJcbiAgICogQHBhcmFtIHtDcmVhdGVUZW5hbnRQYXlsb2FkfSBjcmVhdGVUZW5hbnRQYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcmVhdGVUZW5hbnRSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBjcmVhdGVUZW5hbnQoXHJcbiAgICBjcmVhdGVUZW5hbnRQYXlsb2FkOiBDcmVhdGVUZW5hbnRSZXF1ZXN0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlVGVuYW50UmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2FwcC9jcmVhdGVUZW5hbnRgLFxyXG4gICAgICAgIGNyZWF0ZVRlbmFudFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIHRoZSBjaGVja2JveCBvcHRpb25zIGZyb20gZmVhdHVyZXMgbGlzdCBmcm9tIHNlcnZlci5cclxuICAgKiBAcGFyYW0ge0ZlYXR1cmVzTGlzdFtdfSBmZWF0dXJlc1xyXG4gICAqIEByZXR1cm5zIHtDaGVja2JveE9wdGlvbltdfVxyXG4gICAqL1xyXG4gIGdldEZlYXR1cmVPcHRpb25zKGZlYXR1cmVzOiBGZWF0dXJlc1tdKTogQ2hlY2tib3hPcHRpb25bXSB7XHJcbiAgICB0aGlzLmNoZWNrQm94T3B0aW9ucyA9IFtdO1xyXG4gICAgZmVhdHVyZXM/LmZvckVhY2goKGZlYXR1cmU6IEZlYXR1cmVzKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hlY2tCb3hPcHRpb25zPy5wdXNoKHtcclxuICAgICAgICBpZDogZmVhdHVyZT8uZmVhdHVyZUlkLFxyXG4gICAgICAgIG5hbWU6IGZlYXR1cmU/LmZlYXR1cmVOYW1lLFxyXG4gICAgICAgIGNoZWNrZWQ6IGZlYXR1cmU/LmlzRGVmYXVsdCxcclxuICAgICAgICBkaXNhYmxlZDogZmVhdHVyZT8uaXNEZWZhdWx0LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tCb3hPcHRpb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIHRoZSByYWRpbyBvcHRpb25zIGZyb20gYXBwbGljYXRpb24gdHlwZXMgZnJvbSBzZXJ2ZXIuXHJcbiAgICogQHBhcmFtIHtBcHBUeXBlQ29uZmlnW119IGFwcFR5cGVPcHRpb25zXHJcbiAgICogQHJldHVybnMge1JhZGlvT3B0aW9uW119XHJcbiAgICovXHJcbiAgZ2V0QXBwbGljYXRpb25UeXBlT3B0aW9ucyhhcHBUeXBlT3B0aW9uczogQXBwVHlwZUNvbmZpZ1tdKTogUmFkaW9PcHRpb25bXSB7XHJcbiAgICB0aGlzLnJhZGlvT3B0aW9ucyA9IFtdO1xyXG4gICAgYXBwVHlwZU9wdGlvbnM/LmZvckVhY2goKGFwcFR5cGU6IEFwcFR5cGVDb25maWcpID0+IHtcclxuICAgICAgdGhpcy5yYWRpb09wdGlvbnM/LnB1c2goe1xyXG4gICAgICAgIGlkOiBhcHBUeXBlPy5jb25maWdGaWVsZElkLFxyXG4gICAgICAgIGxhYmVsOiBhcHBUeXBlPy5jb25maWdGaWVsZFZhbHVlPy50eXBlLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMucmFkaW9PcHRpb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIHRoZSBzZWxlY3RlZCBmZWF0dXJlcyBpZCdzLlxyXG4gICAqIEBwYXJhbSB7Q2hlY2tib3hPcHRpb25bXX0gZmVhdHVyZU9wdGlvbnNcclxuICAgKiBAcmV0dXJucyB7RmVhdHVyZUlkW119XHJcbiAgICovXHJcbiAgZ2V0RmVhdHVyZUlkcyhmZWF0dXJlT3B0aW9uczogQ2hlY2tib3hPcHRpb25bXSk6IEZlYXR1cmVJZFtdIHtcclxuICAgIGNvbnN0IGZlYXR1cmVJZHM6IEZlYXR1cmVJZFtdID0gW107XHJcbiAgICBmZWF0dXJlT3B0aW9ucz8uZm9yRWFjaCgoZmVhdHVyZU9wdGlvbjogQ2hlY2tib3hPcHRpb24pID0+IHtcclxuICAgICAgaWYgKGZlYXR1cmVPcHRpb24/LmNoZWNrZWQpIHtcclxuICAgICAgICBmZWF0dXJlSWRzLnB1c2goe1xyXG4gICAgICAgICAgZmVhdHVyZUlkOiBmZWF0dXJlT3B0aW9uLmlkIGFzIHN0cmluZyxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmVhdHVyZUlkcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbmV3bHkgY3JlYXRlZCB0ZW5hbnQgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtOZXdUZW5hbnRJbmZvfSBuZXdUZW5hbnRJbmZvXHJcbiAgICovXHJcbiAgc2V0TmV3VGVuYW50SW5mbyhuZXdUZW5hbnRJbmZvOiBOZXdUZW5hbnRJbmZvKTogdm9pZCB7XHJcbiAgICB0aGlzLm5ld1RlbmFudEluZm8gPSBuZXdUZW5hbnRJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIHRlbmFudCBpbmZvcm1hdGlvbi5cclxuICAgKi9cclxuICBnZXQgZ2V0TmV3VGVuYW50SW5mbygpOiBOZXdUZW5hbnRJbmZvIHtcclxuICAgIHJldHVybiB0aGlzLm5ld1RlbmFudEluZm87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRlbmFudCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSB7VGVuYW50RnVuY3Rpb25UeXBlfSB0ZW5hbnRGdW5jdGlvblR5cGUgLXRlbmFudCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqL1xyXG4gIHNldFRlbmFudEZ1bmN0aW9uVHlwZSh0ZW5hbnRGdW5jdGlvblR5cGU6IFRlbmFudEZ1bmN0aW9uVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy50ZW5hbnRGdW5jdGlvblR5cGUgPSB0ZW5hbnRGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRlbmFudCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEByZXR1cm4ge1RlbmFudEZ1bmN0aW9uVHlwZX0gLXRlbmFudCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqL1xyXG4gIGdldFRlbmFudEZ1bmN0aW9uVHlwZSgpOiBUZW5hbnRGdW5jdGlvblR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudGVuYW50RnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTdG9yZXMgdGhlIG5ld2x5IGNyZWF0ZWQgcm9sZSBpbmZvcm1hdGlvbi5cclxuICAgKiBAcGFyYW0ge1JvbGVJbmZvfSBuZXdseUNyZWF0ZWRSb2xlIC1jcmVhdGUgcm9sZSBpbmZvcm1hdGlvbi5cclxuICAgKi9cclxuICBzZXROZXdseUNyZWF0ZWRSb2xlSW5mbyhuZXdseUNyZWF0ZWRSb2xlOiBSb2xlSW5mbyk6IHZvaWQge1xyXG4gICAgdGhpcy5uZXdseUNyZWF0ZWRSb2xlID0gbmV3bHlDcmVhdGVkUm9sZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCByb2xlIGluZm9ybWF0aW9uLlxyXG4gICAqIEByZXR1cm4ge1JvbGVJbmZvfSAtY3JlYXRlIHJvbGUgaW5mb3JtYXRpb24uXHJcbiAgICovXHJcbiAgZ2V0TmV3bHlDcmVhdGVkUm9sZUluZm8oKTogUm9sZUluZm8ge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3bHlDcmVhdGVkUm9sZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU3RvcmVzIHRoZSBuZXdseSBjcmVhdGVkIGdyb3VwIHR5cGUgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtDcmVhdGVkT3JNb2RpZmllZEdyb3VwVHlwZUluZm99IG5ld2x5Q3JlYXRlZEdyb3VwVHlwZVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0TmV3bHlDcmVhdGVkR3JvdXBUeXBlSW5mbyhuZXdseUNyZWF0ZWRHcm91cFR5cGU6IENyZWF0ZWRPck1vZGlmaWVkR3JvdXBUeXBlSW5mbyk6IHZvaWQge1xyXG4gICAgdGhpcy5uZXdseUNyZWF0ZWRHcm91cFR5cGUgPSBuZXdseUNyZWF0ZWRHcm91cFR5cGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgZ3JvdXAgdHlwZSBpbmZvcm1hdGlvbi5cclxuICAgKiBAcmV0dXJuIHsqfSAge0NyZWF0ZWRPck1vZGlmaWVkR3JvdXBUeXBlSW5mb31cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldE5ld2x5Q3JlYXRlZEdyb3VwVHlwZUluZm8oKTogQ3JlYXRlZE9yTW9kaWZpZWRHcm91cFR5cGVJbmZvIHtcclxuICAgIHJldHVybiB0aGlzLm5ld2x5Q3JlYXRlZEdyb3VwVHlwZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUG9zdHMgdGhlIGVkaXRlZCB0ZW5hbnQgYXBwbGljYXRpb24gZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSBmb3IgdXBkYXRpbmcgdGhlIHRlbmFudCBpbmZvcm1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0NyZWF0ZVRlbmFudFBheWxvYWR9IGVkaXRUZW5hbnRQYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcmVhdGVUZW5hbnRSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBlZGl0VGVuYW50KFxyXG4gICAgZWRpdFRlbmFudFBheWxvYWQ6IENyZWF0ZVRlbmFudFJlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVUZW5hbnRSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9hcHAvZWRpdFRlbmFudGAsXHJcbiAgICAgICAgZWRpdFRlbmFudFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIHVwZGF0ZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdG8gdXBkYXRlIHRoZSB0ZW5hbnQgYXBwbGljYXRpb24gc3RhdHVzIHRvIGFjdGl2ZS9pbmFjdGl2ZSB1c2luZyBIdHRwU2VydmljZSBhbmQgcmV0dXJucyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIHJlc3BvbnNlLlxyXG4gICAqIEBwYXJhbSB7VXBkYXRlVGVuYW50U3RhdHVzUmVxdWVzdFBheWxvYWR9IHVwZGF0ZVRlbmFudFN0YXR1c1BheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFVwZGF0ZVRlbmFudFN0YXR1c1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHVwZGF0ZVRlbmFudFN0YXR1cyhcclxuICAgIHVwZGF0ZVRlbmFudFN0YXR1c1BheWxvYWQ6IFVwZGF0ZVRlbmFudFN0YXR1c1JlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxVcGRhdGVUZW5hbnRTdGF0dXNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9hcHAvdXBkYXRlU3RhdHVzYCxcclxuICAgICAgICB1cGRhdGVUZW5hbnRTdGF0dXNQYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJdCBnZW5lcmF0ZXMgRmVhdHVyZSBsaXN0IGZyb20gY2hlY2tib3ggb3B0aW9ucyBnZW5lcmF0ZWQgaW4gZm9ybSBhcnJheS5cclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9uW119IGZlYXR1cmVzXHJcbiAgICogQHJldHVybiB7RmVhdHVyZXNbXX1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZlYXR1cmVzTGlzdChmZWF0dXJlczogQ2hlY2tib3hPcHRpb25bXSk6IEZlYXR1cmVzW10ge1xyXG4gICAgdGhpcy5mZWF0dXJlTGlzdCA9IFtdO1xyXG4gICAgZmVhdHVyZXM/LmZvckVhY2goKGZlYXR1cmU6IENoZWNrYm94T3B0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChmZWF0dXJlLmNoZWNrZWQpXHJcbiAgICAgICAgdGhpcy5mZWF0dXJlTGlzdD8ucHVzaCh7XHJcbiAgICAgICAgICBmZWF0dXJlSWQ6IGZlYXR1cmU/LmlkIGFzIHN0cmluZyxcclxuICAgICAgICAgIGZlYXR1cmVOYW1lOiBmZWF0dXJlPy5uYW1lIGFzIHN0cmluZyxcclxuICAgICAgICAgIGlzRGVmYXVsdDogZmVhdHVyZT8uY2hlY2tlZCxcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuZmVhdHVyZUxpc3Q7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgcm9zdGVyIHR5cGUgZnJvbSBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHJldHVybiB7Kn0gIHtPYnNlcnZhYmxlPEdldFJvc3RlclR5cGVPclNldHRpbmdzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9zdGVyVHlwZSgpOiBPYnNlcnZhYmxlPEdldFJvc3RlclR5cGVPclNldHRpbmdzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvbG9va3VwL1Jvc3RlclR5cGVgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgZ3JvdXAgdHlwZSBzZXR0aW5ncyBmcm9tIHNlcnZlciB1c2luZyBIdHRwU2VydmljZS5cclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R2V0Um9zdGVyVHlwZU9yU2V0dGluZ3NSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cFR5cGVTZXR0aW5ncygpOiBPYnNlcnZhYmxlPEdldFJvc3RlclR5cGVPclNldHRpbmdzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvbG9va3VwL0dUX1NldHRpbmdzYClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBQb3N0cyB0aGUgZ3JvdXAgdHlwZSBkZXRhaWxzIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSB0byBjcmVhdGUgbmV3IGdyb3VwIHR5cGUuXHJcbiAgICogQHBhcmFtIHtDcmVhdGVHcm91cFR5cGVSZXF1ZXN0UGF5bG9hZH0gY3JlYXRlR3JvdXBUeXBlUGF5bG9hZFxyXG4gICAqIEByZXR1cm4geyp9ICB7T2JzZXJ2YWJsZTxDcmVhdGVHcm91cFR5cGVSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBjcmVhdGVHcm91cFR5cGUoXHJcbiAgICBjcmVhdGVHcm91cFR5cGVQYXlsb2FkOiBDcmVhdGVHcm91cFR5cGVSZXF1ZXN0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlR3JvdXBUeXBlUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2NvbmZpZy9ncm91cFR5cGVgLFxyXG4gICAgICAgIGNyZWF0ZUdyb3VwVHlwZVBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgc29ydGVkIHJvbGUgbGlzdCBkYXRhLlxyXG4gICAqIEBwYXJhbSB7Um9sZVtdfSByb2xlTGlzdFxyXG4gICAqIEByZXR1cm4ge1JvbGVbXX1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNvcnRSb2xlc0J5Um9sZVR5cGUocm9sZUxpc3Q6IFJvbGVbXSk6IFJvbGVbXSB7XHJcbiAgICByZXR1cm4gcm9sZUxpc3Quc29ydCgoYSwgYikgPT4gYT8udmlld09yZGVyIC0gYj8udmlld09yZGVyKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUG9zdHMgdGhlIHJvbGUgZGV0YWlscyB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UgZm9yIGRlbGV0aW5nIHRoZSByb2xlLlxyXG4gICAqIEBwYXJhbSB7RGVsZXRlUm9sZVJlcXVlc3RQYXlsb2FkfSBkZWxldGVSb2xlUmVxdWVzdFBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPERlbGV0ZVJvbGVSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBkZWxldGVSb2xlKFxyXG4gICAgZGVsZXRlUm9sZVBheWxvYWQ6IERlbGV0ZVJvbGVSZXF1ZXN0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8RGVsZXRlUm9sZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb2xlL2RlbGV0ZVJvbGVgLCBkZWxldGVSb2xlUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGdyb3VwIHR5cGVzIGZyb20gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Vmlld0dyb3VwVHlwZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwVHlwZXMoYXBwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Vmlld0dyb3VwVHlwZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2NvbmZpZy9hcHBHcm91cFR5cGVEZXRhaWxzLyR7YXBwSWR9YFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyBncm91cCB0eXBlIGRldGFpbHMuXHJcbiAgICogQHBhcmFtIHtWaWV3R3JvdXBUeXBlUmVzcG9uc2V9IGdyb3VwVHlwZXNcclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNldEdyb3VwVHlwZURldGFpbHMoZ3JvdXBUeXBlczogVmlld0dyb3VwVHlwZVJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwVHlwZXMgPSBncm91cFR5cGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBncm91cCB0eXBlIGRldGFpbHMuXHJcbiAgICogQHJldHVybiB7Vmlld0dyb3VwVHlwZVJlc3BvbnNlfVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBUeXBlRGV0YWlscygpOiBWaWV3R3JvdXBUeXBlUmVzcG9uc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBUeXBlcztcclxuICB9XHJcbn1cclxuIl19
632
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWFwcGxpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVuYW50cy9zcmMvbGliL3NlcnZpY2VzL3RlbmFudC1hcHBsaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEtBQUssV0FBVyxNQUFNLDBCQUEwQixDQUFDOzs7OztBQXNFeEQsTUFBTSxPQUFPLHlCQUF5QjtJQXFCcEM7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBd0I7SUFDaEMsMENBQTBDO0lBQ2xDLHdCQUFrRDtJQUMxRCwwQ0FBMEM7SUFDbEMsMkJBQXdELENBQUMsNkNBQTZDOztRQUp0RyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUV4Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBRWxELGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBNkI7UUExQmxFLGdCQUFXLEdBQUcsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUM7UUFLL0Msc0JBQWlCLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUM7UUFHdEQsaUJBQVksR0FBa0IsRUFBRSxDQUFDO1FBQ2pDLG9CQUFlLEdBQXFCLEVBQUUsQ0FBQztRQUN2QyxnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFDaEMsZ0JBQVcsR0FBZSxFQUFFLENBQUM7UUFDN0Isb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBT3ZDLCtCQUEwQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFRakQsQ0FBQztJQUNKLFlBQVksQ0FBQyxVQUFrQixFQUFFLGNBQWdDO1FBQy9ELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElB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VUFBVSw4Q0FBOEMsS0FBSyxFQUFFLENBQ3hFO2FBQ0EsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2YsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxtQkFBbUIsQ0FBQyxVQUFpQztRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQzsrR0FydkJVLHlCQUF5QjttSEFBekIseUJBQXlCLGNBRnhCLE1BQU07OzRGQUVQLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBzY3JlZW5UZXh0cyBmcm9tICcuLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBHZXRUZW5hbnRzUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy90YWJsZS1jb2x1bW4tc2NoZW1hLXZpZXctdGVuYW50LWxpc3QubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIFRlbmFudHNQZXJtaXNzaW9ucyxcclxuICBVc2VyUGVybWlzc2lvbixcclxufSBmcm9tICcuLi9tb2RlbHMvdGVuYW50cy1wZXJtaXNzaW9uLm1vZGVsJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgVGVuYW50UGVybWlzc2lvbnNNYXBTZXJ2aWNlIH0gZnJvbSAnLi90ZW5hbnQtcGVybWlzc2lvbnMtbWFwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIENyZWF0ZVRlbmFudFJlcXVlc3RQYXlsb2FkLFxyXG4gIENyZWF0ZVRlbmFudFJlc3BvbnNlLFxyXG4gIEdldFRlbmFudHNSZXNwb25zZSxcclxuICBOZXdUZW5hbnRJbmZvLFxyXG4gIFRlbmFudEJhc2ljSW5mbyxcclxuICBUZW5hbnREZXRhaWxzUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3RlbmFudC5tb2RlbCc7XHJcbmltcG9ydCB7IFJhZGlvT3B0aW9uIH0gZnJvbSAnQGllZWVzYS1ucG0vcHJlc2VudGF0aW9uJztcclxuaW1wb3J0IHsgQ2hlY2tib3hPcHRpb24gfSBmcm9tICdAaWVlZXNhLW5wbS9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIEZlYXR1cmVJZCxcclxuICBGZWF0dXJlcyxcclxuICBHZXRGZWF0dXJlc1Jlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9mZWF0dXJlcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQXBwVHlwZUNvbmZpZyxcclxuICBHZXRBcHBUeXBlc1Jlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9hcHAtdHlwZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBUZW5hbnRQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuL3RlbmFudC1wZXJtaXNzaW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGVuYW50RnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3RlbmFudC1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBHZXRSb2xlc0FuZFBlcm1pc3Npb25zUGF5bG9hZCxcclxuICBHZXRSb2xlc0FuZFBlcm1pc3Npb25zUmVzcG9uc2UsXHJcbiAgR2V0Um9sZXNSZXNwb25zZSxcclxuICBSb2xlSW5mbyxcclxuICBEZWxldGVSb2xlUmVxdWVzdFBheWxvYWQsXHJcbiAgRGVsZXRlUm9sZVJlc3BvbnNlLFxyXG4gIFJvbGUsXHJcbiAgR2V0UGVybWlzc2lvbnNSZXNwb25zZSxcclxuICBSb2xlUGVybWlzc2lvbk1hcHBpbmdSZXF1ZXN0UGF5bG9hZCxcclxuICBSb2xlUGVybWlzc2lvbk1hcHBpbmdSZXNwb25zZSxcclxuICBSb2xlc0FuZFBlcm1pc3Npb25zUmVxdWVzdFBheWxvYWQsXHJcbiAgUm9sZXNBbmRQZXJtaXNzaW9uc1Jlc3BvbnNlLFxyXG4gIFJvbGVEZXRhaWxzLFxyXG4gIENyZWF0ZU1vZGlmeVJvbGVSZXF1ZXN0UGF5bG9hZCxcclxuICBDcmVhdGVNb2RpZnlSb2xlUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3JvbGVzLWFuZC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgVXBkYXRlVGVuYW50U3RhdHVzUmVxdWVzdFBheWxvYWQsXHJcbiAgVXBkYXRlVGVuYW50U3RhdHVzUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3VwZGF0ZS10ZW5hbnQtc3RhdHVzLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBHZXRSb2xlVHlwZXNQYXlsb2FkLFxyXG4gIFJvbGVUeXBlQ29uZmlndXJhdGlvbixcclxuICBSb2xlVHlwZU9wdGlvbixcclxuICBSb2xlVHlwZVJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9yb2xlLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBWaWV3R3JvdXBUeXBlUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvdmlldy10ZW5hbnQtZ3JvdXAtdHlwZXMubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENyZWF0ZUdyb3VwVHlwZVJlcXVlc3RQYXlsb2FkLFxyXG4gIENyZWF0ZUdyb3VwVHlwZVJlc3BvbnNlLFxyXG4gIENyZWF0ZWRPck1vZGlmaWVkR3JvdXBUeXBlSW5mbyxcclxuICBHZXRSb3N0ZXJUeXBlT3JTZXR0aW5nc1Jlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9jcmVhdGUtZ3JvdXAtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgUmVxdWlyZWRQcm9maWxlRmllbGRzUmVzcG9uc2UsXHJcbiAgVXBkYXRlUmVxdWlyZWRQcm9maWxlRmllbGRzUGF5bG9hZCxcclxufSBmcm9tICcuLi9tb2RlbHMvcmVxdWlyZWQtcHJvZmlsZS1maWVsZHMubW9kZWwnO1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVuYW50QXBwbGljYXRpb25zU2VydmljZSB7XHJcbiAgdGVuYW50c1RleHQgPSBzY3JlZW5UZXh0cz8udmlld1RlbmFudHM/LmVycm9ycztcclxuICBhcGlCYXNlVXJsITogc3RyaW5nO1xyXG4gIHVzZXJQZXJtaXNzaW9uITogVXNlclBlcm1pc3Npb25bXTtcclxuICBzZWxlY3RlZFRlbmFudEluZm8hOiBUZW5hbnRCYXNpY0luZm8gfCB1bmRlZmluZWQ7XHJcbiAgdXNlclRlbmFudHNQZXJtaXNzaW9ucyE6IFRlbmFudHNQZXJtaXNzaW9uc1tdO1xyXG4gIGNyZWF0ZVRlbmFudHNUZXh0ID0gc2NyZWVuVGV4dHM/LmNyZWF0ZVRlbmFudD8uZXJyb3JzO1xyXG4gIG5ld1RlbmFudEluZm8hOiBOZXdUZW5hbnRJbmZvO1xyXG4gIHRlbmFudEZ1bmN0aW9uVHlwZSE6IFRlbmFudEZ1bmN0aW9uVHlwZTtcclxuICByYWRpb09wdGlvbnM6IFJhZGlvT3B0aW9uW10gPSBbXTtcclxuICBjaGVja0JveE9wdGlvbnM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBhcHBUeXBlSW5mbzogUmFkaW9PcHRpb25bXSA9IFtdO1xyXG4gIGZlYXR1cmVMaXN0OiBGZWF0dXJlc1tdID0gW107XHJcbiAgcm9sZVR5cGVPcHRpb25zOiBSb2xlVHlwZU9wdGlvbltdID0gW107XHJcbiAgbmV3bHlDcmVhdGVkUm9sZSE6IFJvbGVJbmZvO1xyXG4gIHJvbGVUeXBlT3B0aW9uITogUm9sZVR5cGVPcHRpb25bXTtcclxuICBzZWxlY3RlZFJvbGVJbmZvITogUm9sZURldGFpbHM7XHJcbiAgcm9sZXMhOiBSb2xlW107XHJcbiAgZ3JvdXBUeXBlcyE6IFZpZXdHcm91cFR5cGVSZXNwb25zZTtcclxuICBuZXdseUNyZWF0ZWRHcm91cFR5cGUhOiBDcmVhdGVkT3JNb2RpZmllZEdyb3VwVHlwZUluZm87XHJcbiAgaXNHcm91cFR5cGVBZGRlZE9yTW9kaWZpZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSB0ZW5hbnRQZXJtaXNzaW9uc1NlcnZpY2U6IFRlbmFudFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSB0ZW5hbnRQZXJtaXNzaW9uc01hcFNlcnZpY2U6IFRlbmFudFBlcm1pc3Npb25zTWFwU2VydmljZSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cclxuICApIHt9XHJcbiAgc2V0QXBwQ29uZmlnKGFwaUJhc2VVcmw6IHN0cmluZywgdXNlclBlcm1pc3Npb246IFVzZXJQZXJtaXNzaW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMuYXBpQmFzZVVybCA9IGFwaUJhc2VVcmw7XHJcbiAgICB0aGlzLnVzZXJQZXJtaXNzaW9uID0gdXNlclBlcm1pc3Npb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRlbmFudCBkZXRhaWxzIGZyb20gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcElkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxUZW5hbnREZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0VGVuYW50RGV0YWlscyhhcHBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxUZW5hbnREZXRhaWxzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvYXBwL2RldGFpbHMvJHthcHBJZH1gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVzZXIgdGVuYW50cyBwZXJtaXNzaW9uc1xyXG4gICAqIEBwYXJhbSB7VGVuYW50c1Blcm1pc3Npb25zW119IFRlbmFudHNQZXJtaXNzaW9uc1xyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0VXNlclRlbmFudHNQZXJtaXNzaW9ucyh1c2VyVGVuYW50c1Blcm1pc3Npb25zOiBUZW5hbnRzUGVybWlzc2lvbnNbXSkge1xyXG4gICAgdGhpcy51c2VyVGVuYW50c1Blcm1pc3Npb25zID0gdXNlclRlbmFudHNQZXJtaXNzaW9ucztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdXNlciB0ZW5hbnRzIHBlcm1pc3Npb25zXHJcbiAgICogQHJldHVybiB7VGVuYW50c1Blcm1pc3Npb25zW119XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRVc2VyVGVuYW50c1Blcm1pc3Npb25zKCk6IFRlbmFudHNQZXJtaXNzaW9uc1tdIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJUZW5hbnRzUGVybWlzc2lvbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1c2VyIHRlbmFudHMgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge1RlbmFudEJhc2ljSW5mb30gdGVuYW50SW5mb1xyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0U2VsZWN0ZWRUZW5hbnRJbmZvcm1hdGlvbih0ZW5hbnRJbmZvOiBUZW5hbnRCYXNpY0luZm8pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRUZW5hbnRJbmZvID0gdGVuYW50SW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdGVuYW50cyBpbmZvcm1hdGlvblxyXG4gICAqIEByZXR1cm4ge1RlbmFudEJhc2ljSW5mb31cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkVGVuYW50SW5mb3JtYXRpb24oKTogVGVuYW50QmFzaWNJbmZvIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGVuYW50SW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgcm9sZXMgaW5mb3JtYXRpb25zXHJcbiAgICogQHBhcmFtIHtSb2xlfSByb2xlc1xyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0Um9sZXNJbmZvKHJvbGVzOiBSb2xlW10pOiB2b2lkIHtcclxuICAgIHRoaXMucm9sZXMgPSByb2xlcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgcm9sZXMgaW5mb3JtYXRpb25cclxuICAgKiBAcmV0dXJuIHtSb2xlfVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9sZXNJbmZvKCk6IFJvbGVbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5yb2xlcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgcm9sZSBpbmZvcm1hdGlvbi5cclxuICAgKiBAcGFyYW0ge1JvbGVEZXRhaWxzfSByb2xlSW5mb1xyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0U2VsZWN0ZWRSb2xlSW5mb3JtYXRpb24ocm9sZUluZm86IFJvbGVEZXRhaWxzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm9sZUluZm8gPSByb2xlSW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgcm9sZSBpbmZvcm1hdGlvbi5cclxuICAgKiBAcmV0dXJuIHtSb2xlRGV0YWlsc31cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkUm9sZUluZm9ybWF0aW9uKCk6IFJvbGVEZXRhaWxzIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm9sZUluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHRlbmFudCByb2xlIHR5cGUgb3B0aW9ucy5cclxuICAgKiBAcGFyYW0ge1JvbGVUeXBlT3B0aW9ufSByb2xlVHlwZU9wdGlvbnNcclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFJvbGVUeXBlT3B0aW9uKHJvbGVUeXBlT3B0aW9uczogUm9sZVR5cGVPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5yb2xlVHlwZU9wdGlvbiA9IHJvbGVUeXBlT3B0aW9ucztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdGVuYW50IHJvbGUgdHlwZSBvcHRpb25zLlxyXG4gICAqIEByZXR1cm4ge1JvbGVUeXBlT3B0aW9ufVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9sZVR5cGVPcHRpb24oKTogUm9sZVR5cGVPcHRpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5yb2xlVHlwZU9wdGlvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbGlzdCBvZiBhcHBsaWNhdGlvbiB0eXBlIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtSYWRpb09wdGlvbn0gYXBwVHlwZUluZm9cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNldEFwcGxpY2F0aW9uVHlwZShhcHBUeXBlSW5mbzogUmFkaW9PcHRpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5hcHBUeXBlSW5mbyA9IGFwcFR5cGVJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uIHR5cGUgaW5mb3JtYXRpb25cclxuICAgKiBAcmV0dXJuIHtSYWRpb09wdGlvbn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEFwcGxpY2F0aW9uVHlwZSgpOiBSYWRpb09wdGlvbltdIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmFwcFR5cGVJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBGaWx0ZXIgcGVybWlzc2lvbnNcclxuICAgKiBAcGFyYW0gdXNlcnNQZXJtaXNzaW9uc1xyXG4gICAqIEByZXR1cm5zIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZmlsdGVyUGVybWlzc2lvbih1c2Vyc1Blcm1pc3Npb25zOiBVc2VyUGVybWlzc2lvbltdKTogVGVuYW50c1Blcm1pc3Npb25zW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVuYW50UGVybWlzc2lvbnNTZXJ2aWNlPy5maWx0ZXJUZW5hbnRzUGVybWlzc2lvbnMoXHJcbiAgICAgIHVzZXJzUGVybWlzc2lvbnMsXHJcbiAgICAgIHRoaXMudGVuYW50UGVybWlzc2lvbnNNYXBTZXJ2aWNlPy5nZXRHbG9iYWxUZW5hbnRzUGVybWlzc2lvbnMoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGluZyBhY2Nlc3MgZm9yIHRlbmFudHNcclxuICAgKiBAcGFyYW0gcGVybWlzc2lvblR5cGUgUGVybWlzc2lvbiBUeXBlIHRvIHZhbGlkYXRlIHBlcm1pc3Npb25cclxuICAgKiBAcGFyYW0gbWFwcGVkVXNlclBlcm1pc3Npb25zIFBlcm1pc3Npb24gd2hpY2ggYXJlIG1hcHBlZCB3aXRoIHRlbmFudHNcclxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZFxyXG4gICAqL1xyXG4gIHZhbGlkYXRlQWNjZXNzKFxyXG4gICAgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLFxyXG4gICAgcGVybWlzc2lvbnM6IFRlbmFudHNQZXJtaXNzaW9uc1tdXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRQZXJtaXNzaW9uc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3NQZXJtaXNzaW9uKFxyXG4gICAgICBwZXJtaXNzaW9uVHlwZSxcclxuICAgICAgcGVybWlzc2lvbnNcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHRlbmFudHMuXHJcbiAgICogQHBhcmFtIHtHZXRUZW5hbnRzUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0VGVuYW50c1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFRlbmFudHNMaXN0KHBheWxvYWQ6IEdldFRlbmFudHNQYXlsb2FkKTogT2JzZXJ2YWJsZTxHZXRUZW5hbnRzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2FwcC9jb25maWdgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgbGlzdCBvZiBmZWF0dXJlcyBmcm9tIHNlcnZlciB1c2luZyBIdHRwU2VydmljZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEZlYXR1cmVzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0RmVhdHVyZXMoKTogT2JzZXJ2YWJsZTxHZXRGZWF0dXJlc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2FwcC9mZWF0dXJlc2ApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyBsaXN0IG9mIHJvbGVzIGZyb20gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZFxyXG4gICAqIEByZXR1cm4geyp9ICB7T2JzZXJ2YWJsZTxHZXRSb2xlc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJvbGVzKGFwcElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEdldFJvbGVzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3JvbGUvJHthcHBJZH1gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgYmFzZWQgb24gdGhlIGFwcElkIGFuZCByZXR1cm4gdGhlIHN1Y2Nlc3Mgb3IgZXJyb3IgcmVzcG9uc2UgYXMgT2JzZXJ2YWJsZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldFBlcm1pc3Npb25zUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0UGVybWlzc2lvbnMoYXBwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8R2V0UGVybWlzc2lvbnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcGVybWlzc2lvbnMvJHthcHBJZH1gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygcm9sZXMgb3IgcGVybWlzc2lvbnMgYmFzZWQgb24gdGhlIHJvbGVJZCBvciBwZXJtaXNzaW9uSWQgaW4gdGhlIHBheWxvYWQgYW5kIHJldHVybiB0aGUgc3VjY2VzcyBvciBlcnJvciByZXNwb25zZSBhcyBPYnNlcnZhYmxlLlxyXG4gICAqIEBwYXJhbSB7Um9sZVBlcm1pc3Npb25NYXBwaW5nUmVxdWVzdFBheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxSb2xlUGVybWlzc2lvbk1hcHBpbmdSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb2xlUGVybWlzc2lvbk1hcHBpbmcoXHJcbiAgICBwYXlsb2FkOiBSb2xlUGVybWlzc2lvbk1hcHBpbmdSZXF1ZXN0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Um9sZVBlcm1pc3Npb25NYXBwaW5nUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy91c2Vycy9yb2xlUGVybWlzc2lvbk1hcHBpbmdgLFxyXG4gICAgICAgIHBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFN1Ym1pdCB0aGUgbmV3IG1hcHBpbmdzIG9mIHJvbGVzIHRvIHBlcm1pc3Npb25zIHRvIHRoZSBzZXJ2ZXIuXHJcbiAgICogQHBhcmFtIHtSb2xlc0FuZFBlcm1pc3Npb25zUmVxdWVzdFBheWxvYWR9IHBheWxvYWRcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxSb2xlc0FuZFBlcm1pc3Npb25zUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2F2ZVJvbGVQZXJtaXNzaW9uTWFwcGluZyhcclxuICAgIHBheWxvYWQ6IFJvbGVzQW5kUGVybWlzc2lvbnNSZXF1ZXN0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Um9sZXNBbmRQZXJtaXNzaW9uc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvdXNlcnMvcm9sZVBlcm1pc3Npb25gLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgbGlzdCBvZiByb2xlcyBhbmQgcGVybWlzc2lvbnMgbWFwcGluZ3MgZnJvbSBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcElkXHJcbiAgICogQHBhcmFtIHtHZXRSb2xlc0FuZFBlcm1pc3Npb25zUGF5bG9hZH0gcGF5bG9hZFxyXG4gICAqIEByZXR1cm4geyp9ICB7T2JzZXJ2YWJsZTxHZXRSb2xlc0FuZFBlcm1pc3Npb25zUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9sZXNBbmRQZXJtaXNzaW9uc01hcHBpbmdzKFxyXG4gICAgYXBwSWQ6IHN0cmluZyxcclxuICAgIHBheWxvYWQ6IEdldFJvbGVzQW5kUGVybWlzc2lvbnNQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRSb2xlc0FuZFBlcm1pc3Npb25zUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb2xlQmFzZWRQZXJtaXNzaW9ucy8ke2FwcElkfWAsXHJcbiAgICAgICAgcGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyBsaXN0IG9mIGFwcGxpY2F0aW9uIHR5cGVzIGZyb20gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0QXBwVHlwZXNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRBcHBsaWNhdGlvblR5cGVzKCk6IE9ic2VydmFibGU8R2V0QXBwVHlwZXNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9jb25maWcvYXBwX3R5cGVgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFBvc3RzIGNyZWF0ZSByb2xlIGZvcm0gZGF0YSB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UgdG8gY3JlYXRlIGEgbmV3IHJvbGUuXHJcbiAgICogQHBhcmFtIHtDcmVhdGVNb2RpZnlSb2xlUmVxdWVzdFBheWxvYWR9IGNyZWF0ZU1vZGlmeVJvbGVQYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcmVhdGVNb2RpZnlSb2xlUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgY3JlYXRlUm9sZShcclxuICAgIGNyZWF0ZU1vZGlmeVJvbGVQYXlsb2FkOiBDcmVhdGVNb2RpZnlSb2xlUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPENyZWF0ZU1vZGlmeVJvbGVSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3JvbGVgLCBjcmVhdGVNb2RpZnlSb2xlUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBQb3N0cyB0aGUgZWRpdGVkIHJvbGUgZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSBmb3IgdXBkYXRpbmcgdGhlIHJvbGUgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtDcmVhdGVNb2RpZnlSb2xlUmVxdWVzdFBheWxvYWR9IGNyZWF0ZU1vZGlmeVJvbGVQYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcmVhdGVNb2RpZnlSb2xlUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZWRpdFJvbGUoXHJcbiAgICBjcmVhdGVNb2RpZnlSb2xlUGF5bG9hZDogQ3JlYXRlTW9kaWZ5Um9sZVJlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVNb2RpZnlSb2xlUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wdXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3JvbGVgLCBjcmVhdGVNb2RpZnlSb2xlUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBsaXN0IG9mIHJvbGUgdHlwZXMgZnJvbSBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHBhcmFtIHtHZXRSb2xlVHlwZXNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSb2xlVHlwZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJvbGVUeXBlcyhwYXlsb2FkOiBHZXRSb2xlVHlwZXNQYXlsb2FkKTogT2JzZXJ2YWJsZTxSb2xlVHlwZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9jb25maWcvY29uZmlnRmllbGRgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdHMgdGhlIHNlbGVjdC9kcm9wZG93biBvcHRpb25zIGZyb20gdGhlIHJvbGUgdHlwZXMgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXIuXHJcbiAgICogQHBhcmFtIHtSb2xlVHlwZUNvbmZpZ3VyYXRpb25bXX0gcm9sZVR5cGVSZXNwb25zZVxyXG4gICAqIEByZXR1cm4ge1JvbGVUeXBlT3B0aW9uW119XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRSb2xlVHlwZU9wdGlvbnMoXHJcbiAgICByb2xlVHlwZVJlc3BvbnNlOiBSb2xlVHlwZUNvbmZpZ3VyYXRpb25bXVxyXG4gICk6IFJvbGVUeXBlT3B0aW9uW10ge1xyXG4gICAgdGhpcy5yb2xlVHlwZU9wdGlvbnMgPSBbXTtcclxuICAgIHJvbGVUeXBlUmVzcG9uc2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICB0aGlzLnJvbGVUeXBlT3B0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgaWQ6IGl0ZW0/LmNvbmZpZ0ZpZWxkSWQsXHJcbiAgICAgICAgbmFtZTogaXRlbT8uY29uZmlnRmllbGRWYWx1ZT8ucm9sZVR5cGVOYW1lLFxyXG4gICAgICAgIG9yZGVyOiBpdGVtPy5jb25maWdGaWVsZFZhbHVlPy52aWV3T3JkZXIsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJvbGVUeXBlT3B0aW9ucy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XHJcbiAgICByZXR1cm4gdGhpcy5yb2xlVHlwZU9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3N0cyB0ZW5hbnQgYXBwbGljYXRpb24gZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSBmb3IgY3JlYXRpbmcgbmV3IHRlbmFudCBhcHBsaWNhdGlvbi5cclxuICAgKiBAcGFyYW0ge0NyZWF0ZVRlbmFudFBheWxvYWR9IGNyZWF0ZVRlbmFudFBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENyZWF0ZVRlbmFudFJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGNyZWF0ZVRlbmFudChcclxuICAgIGNyZWF0ZVRlbmFudFBheWxvYWQ6IENyZWF0ZVRlbmFudFJlcXVlc3RQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVUZW5hbnRSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvYXBwL2NyZWF0ZVRlbmFudGAsXHJcbiAgICAgICAgY3JlYXRlVGVuYW50UGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdHMgdGhlIGNoZWNrYm94IG9wdGlvbnMgZnJvbSBmZWF0dXJlcyBsaXN0IGZyb20gc2VydmVyLlxyXG4gICAqIEBwYXJhbSB7RmVhdHVyZXNMaXN0W119IGZlYXR1cmVzXHJcbiAgICogQHJldHVybnMge0NoZWNrYm94T3B0aW9uW119XHJcbiAgICovXHJcbiAgZ2V0RmVhdHVyZU9wdGlvbnMoZmVhdHVyZXM6IEZlYXR1cmVzW10pOiBDaGVja2JveE9wdGlvbltdIHtcclxuICAgIHRoaXMuY2hlY2tCb3hPcHRpb25zID0gW107XHJcbiAgICBmZWF0dXJlcz8uZm9yRWFjaCgoZmVhdHVyZTogRmVhdHVyZXMpID0+IHtcclxuICAgICAgdGhpcy5jaGVja0JveE9wdGlvbnM/LnB1c2goe1xyXG4gICAgICAgIGlkOiBmZWF0dXJlPy5mZWF0dXJlSWQsXHJcbiAgICAgICAgbmFtZTogZmVhdHVyZT8uZmVhdHVyZU5hbWUsXHJcbiAgICAgICAgY2hlY2tlZDogZmVhdHVyZT8uaXNEZWZhdWx0LFxyXG4gICAgICAgIGRpc2FibGVkOiBmZWF0dXJlPy5pc0RlZmF1bHQsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja0JveE9wdGlvbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdHMgdGhlIHJhZGlvIG9wdGlvbnMgZnJvbSBhcHBsaWNhdGlvbiB0eXBlcyBmcm9tIHNlcnZlci5cclxuICAgKiBAcGFyYW0ge0FwcFR5cGVDb25maWdbXX0gYXBwVHlwZU9wdGlvbnNcclxuICAgKiBAcmV0dXJucyB7UmFkaW9PcHRpb25bXX1cclxuICAgKi9cclxuICBnZXRBcHBsaWNhdGlvblR5cGVPcHRpb25zKGFwcFR5cGVPcHRpb25zOiBBcHBUeXBlQ29uZmlnW10pOiBSYWRpb09wdGlvbltdIHtcclxuICAgIHRoaXMucmFkaW9PcHRpb25zID0gW107XHJcbiAgICBhcHBUeXBlT3B0aW9ucz8uZm9yRWFjaCgoYXBwVHlwZTogQXBwVHlwZUNvbmZpZykgPT4ge1xyXG4gICAgICB0aGlzLnJhZGlvT3B0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgaWQ6IGFwcFR5cGU/LmNvbmZpZ0ZpZWxkSWQsXHJcbiAgICAgICAgbGFiZWw6IGFwcFR5cGU/LmNvbmZpZ0ZpZWxkVmFsdWU/LnR5cGUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5yYWRpb09wdGlvbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdHMgdGhlIHNlbGVjdGVkIGZlYXR1cmVzIGlkJ3MuXHJcbiAgICogQHBhcmFtIHtDaGVja2JveE9wdGlvbltdfSBmZWF0dXJlT3B0aW9uc1xyXG4gICAqIEByZXR1cm5zIHtGZWF0dXJlSWRbXX1cclxuICAgKi9cclxuICBnZXRGZWF0dXJlSWRzKGZlYXR1cmVPcHRpb25zOiBDaGVja2JveE9wdGlvbltdKTogRmVhdHVyZUlkW10ge1xyXG4gICAgY29uc3QgZmVhdHVyZUlkczogRmVhdHVyZUlkW10gPSBbXTtcclxuICAgIGZlYXR1cmVPcHRpb25zPy5mb3JFYWNoKChmZWF0dXJlT3B0aW9uOiBDaGVja2JveE9wdGlvbikgPT4ge1xyXG4gICAgICBpZiAoZmVhdHVyZU9wdGlvbj8uY2hlY2tlZCkge1xyXG4gICAgICAgIGZlYXR1cmVJZHMucHVzaCh7XHJcbiAgICAgICAgICBmZWF0dXJlSWQ6IGZlYXR1cmVPcHRpb24uaWQgYXMgc3RyaW5nLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmZWF0dXJlSWRzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBuZXdseSBjcmVhdGVkIHRlbmFudCBpbmZvcm1hdGlvbi5cclxuICAgKiBAcGFyYW0ge05ld1RlbmFudEluZm99IG5ld1RlbmFudEluZm9cclxuICAgKi9cclxuICBzZXROZXdUZW5hbnRJbmZvKG5ld1RlbmFudEluZm86IE5ld1RlbmFudEluZm8pOiB2b2lkIHtcclxuICAgIHRoaXMubmV3VGVuYW50SW5mbyA9IG5ld1RlbmFudEluZm87XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgdGVuYW50IGluZm9ybWF0aW9uLlxyXG4gICAqL1xyXG4gIGdldCBnZXROZXdUZW5hbnRJbmZvKCk6IE5ld1RlbmFudEluZm8ge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3VGVuYW50SW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGVuYW50IGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHtUZW5hbnRGdW5jdGlvblR5cGV9IHRlbmFudEZ1bmN0aW9uVHlwZSAtdGVuYW50IGZ1bmN0aW9uIHR5cGUuXHJcbiAgICovXHJcbiAgc2V0VGVuYW50RnVuY3Rpb25UeXBlKHRlbmFudEZ1bmN0aW9uVHlwZTogVGVuYW50RnVuY3Rpb25UeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLnRlbmFudEZ1bmN0aW9uVHlwZSA9IHRlbmFudEZ1bmN0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGVuYW50IGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHJldHVybiB7VGVuYW50RnVuY3Rpb25UeXBlfSAtdGVuYW50IGZ1bmN0aW9uIHR5cGUuXHJcbiAgICovXHJcbiAgZ2V0VGVuYW50RnVuY3Rpb25UeXBlKCk6IFRlbmFudEZ1bmN0aW9uVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFN0b3JlcyB0aGUgbmV3bHkgY3JlYXRlZCByb2xlIGluZm9ybWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7Um9sZUluZm99IG5ld2x5Q3JlYXRlZFJvbGUgLWNyZWF0ZSByb2xlIGluZm9ybWF0aW9uLlxyXG4gICAqL1xyXG4gIHNldE5ld2x5Q3JlYXRlZFJvbGVJbmZvKG5ld2x5Q3JlYXRlZFJvbGU6IFJvbGVJbmZvKTogdm9pZCB7XHJcbiAgICB0aGlzLm5ld2x5Q3JlYXRlZFJvbGUgPSBuZXdseUNyZWF0ZWRSb2xlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIHJvbGUgaW5mb3JtYXRpb24uXHJcbiAgICogQHJldHVybiB7Um9sZUluZm99IC1jcmVhdGUgcm9sZSBpbmZvcm1hdGlvbi5cclxuICAgKi9cclxuICBnZXROZXdseUNyZWF0ZWRSb2xlSW5mbygpOiBSb2xlSW5mbyB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXdseUNyZWF0ZWRSb2xlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTdG9yZXMgdGhlIG5ld2x5IGNyZWF0ZWQgZ3JvdXAgdHlwZSBpbmZvcm1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0NyZWF0ZWRPck1vZGlmaWVkR3JvdXBUeXBlSW5mb30gbmV3bHlDcmVhdGVkR3JvdXBUeXBlXHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXROZXdseUNyZWF0ZWRHcm91cFR5cGVJbmZvKG5ld2x5Q3JlYXRlZEdyb3VwVHlwZTogQ3JlYXRlZE9yTW9kaWZpZWRHcm91cFR5cGVJbmZvKTogdm9pZCB7XHJcbiAgICB0aGlzLm5ld2x5Q3JlYXRlZEdyb3VwVHlwZSA9IG5ld2x5Q3JlYXRlZEdyb3VwVHlwZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCBncm91cCB0eXBlIGluZm9ybWF0aW9uLlxyXG4gICAqIEByZXR1cm4geyp9ICB7Q3JlYXRlZE9yTW9kaWZpZWRHcm91cFR5cGVJbmZvfVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0TmV3bHlDcmVhdGVkR3JvdXBUeXBlSW5mbygpOiBDcmVhdGVkT3JNb2RpZmllZEdyb3VwVHlwZUluZm8ge1xyXG4gICAgcmV0dXJuIHRoaXMubmV3bHlDcmVhdGVkR3JvdXBUeXBlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBQb3N0cyB0aGUgZWRpdGVkIHRlbmFudCBhcHBsaWNhdGlvbiBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlIGZvciB1cGRhdGluZyB0aGUgdGVuYW50IGluZm9ybWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlVGVuYW50UGF5bG9hZH0gZWRpdFRlbmFudFBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENyZWF0ZVRlbmFudFJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGVkaXRUZW5hbnQoXHJcbiAgICBlZGl0VGVuYW50UGF5bG9hZDogQ3JlYXRlVGVuYW50UmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPENyZWF0ZVRlbmFudFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2FwcC9lZGl0VGVuYW50YCxcclxuICAgICAgICBlZGl0VGVuYW50UGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2VuZHMgdXBkYXRlIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB0byB1cGRhdGUgdGhlIHRlbmFudCBhcHBsaWNhdGlvbiBzdGF0dXMgdG8gYWN0aXZlL2luYWN0aXZlIHVzaW5nIEh0dHBTZXJ2aWNlIGFuZCByZXR1cm5zIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgcmVzcG9uc2UuXHJcbiAgICogQHBhcmFtIHtVcGRhdGVUZW5hbnRTdGF0dXNSZXF1ZXN0UGF5bG9hZH0gdXBkYXRlVGVuYW50U3RhdHVzUGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8VXBkYXRlVGVuYW50U3RhdHVzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgdXBkYXRlVGVuYW50U3RhdHVzKFxyXG4gICAgdXBkYXRlVGVuYW50U3RhdHVzUGF5bG9hZDogVXBkYXRlVGVuYW50U3RhdHVzUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPFVwZGF0ZVRlbmFudFN0YXR1c1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2FwcC91cGRhdGVTdGF0dXNgLFxyXG4gICAgICAgIHVwZGF0ZVRlbmFudFN0YXR1c1BheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXF1aXJlZFByb2ZpbGVGaWVsZHMoYXBwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UmVxdWlyZWRQcm9maWxlRmllbGRzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvY29uZmlnL3JlcXVpcmVkX3Byb2ZpbGVfZmllbGRzLyR7YXBwSWR9YFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlKSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVJlcXVpcmVkUHJvZmlsZUZpZWxkcyhcclxuICAgIHBheWxvYWQ6IFVwZGF0ZVJlcXVpcmVkUHJvZmlsZUZpZWxkc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPHsgc3RhdHVzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9jb25maWcvcmVxdWlyZWRQcm9maWxlRmllbGRzYCxcclxuICAgICAgICBwYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJdCBnZW5lcmF0ZXMgRmVhdHVyZSBsaXN0IGZyb20gY2hlY2tib3ggb3B0aW9ucyBnZW5lcmF0ZWQgaW4gZm9ybSBhcnJheS5cclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9uW119IGZlYXR1cmVzXHJcbiAgICogQHJldHVybiB7RmVhdHVyZXNbXX1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZlYXR1cmVzTGlzdChmZWF0dXJlczogQ2hlY2tib3hPcHRpb25bXSk6IEZlYXR1cmVzW10ge1xyXG4gICAgdGhpcy5mZWF0dXJlTGlzdCA9IFtdO1xyXG4gICAgZmVhdHVyZXM/LmZvckVhY2goKGZlYXR1cmU6IENoZWNrYm94T3B0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChmZWF0dXJlLmNoZWNrZWQpXHJcbiAgICAgICAgdGhpcy5mZWF0dXJlTGlzdD8ucHVzaCh7XHJcbiAgICAgICAgICBmZWF0dXJlSWQ6IGZlYXR1cmU/LmlkIGFzIHN0cmluZyxcclxuICAgICAgICAgIGZlYXR1cmVOYW1lOiBmZWF0dXJlPy5uYW1lIGFzIHN0cmluZyxcclxuICAgICAgICAgIGlzRGVmYXVsdDogZmVhdHVyZT8uY2hlY2tlZCxcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuZmVhdHVyZUxpc3Q7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgcm9zdGVyIHR5cGUgZnJvbSBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UuXHJcbiAgICogQHJldHVybiB7Kn0gIHtPYnNlcnZhYmxlPEdldFJvc3RlclR5cGVPclNldHRpbmdzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Um9zdGVyVHlwZSgpOiBPYnNlcnZhYmxlPEdldFJvc3RlclR5cGVPclNldHRpbmdzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvbG9va3VwL1Jvc3RlclR5cGVgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgZ3JvdXAgdHlwZSBzZXR0aW5ncyBmcm9tIHNlcnZlciB1c2luZyBIdHRwU2VydmljZS5cclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R2V0Um9zdGVyVHlwZU9yU2V0dGluZ3NSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cFR5cGVTZXR0aW5ncygpOiBPYnNlcnZhYmxlPEdldFJvc3RlclR5cGVPclNldHRpbmdzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvbG9va3VwL0dUX1NldHRpbmdzYClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBQb3N0cyB0aGUgZ3JvdXAgdHlwZSBkZXRhaWxzIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSB0byBjcmVhdGUgbmV3IGdyb3VwIHR5cGUuXHJcbiAgICogQHBhcmFtIHtDcmVhdGVHcm91cFR5cGVSZXF1ZXN0UGF5bG9hZH0gY3JlYXRlR3JvdXBUeXBlUGF5bG9hZFxyXG4gICAqIEByZXR1cm4geyp9ICB7T2JzZXJ2YWJsZTxDcmVhdGVHcm91cFR5cGVSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBjcmVhdGVHcm91cFR5cGUoXHJcbiAgICBjcmVhdGVHcm91cFR5cGVQYXlsb2FkOiBDcmVhdGVHcm91cFR5cGVSZXF1ZXN0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlR3JvdXBUeXBlUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2NvbmZpZy9ncm91cFR5cGVgLFxyXG4gICAgICAgIGNyZWF0ZUdyb3VwVHlwZVBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgc29ydGVkIHJvbGUgbGlzdCBkYXRhLlxyXG4gICAqIEBwYXJhbSB7Um9sZVtdfSByb2xlTGlzdFxyXG4gICAqIEByZXR1cm4ge1JvbGVbXX1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNvcnRSb2xlc0J5Um9sZVR5cGUocm9sZUxpc3Q6IFJvbGVbXSk6IFJvbGVbXSB7XHJcbiAgICByZXR1cm4gcm9sZUxpc3Quc29ydCgoYSwgYikgPT4gYT8udmlld09yZGVyIC0gYj8udmlld09yZGVyKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUG9zdHMgdGhlIHJvbGUgZGV0YWlscyB0byBzZXJ2ZXIgdXNpbmcgSHR0cFNlcnZpY2UgZm9yIGRlbGV0aW5nIHRoZSByb2xlLlxyXG4gICAqIEBwYXJhbSB7RGVsZXRlUm9sZVJlcXVlc3RQYXlsb2FkfSBkZWxldGVSb2xlUmVxdWVzdFBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPERlbGV0ZVJvbGVSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIFRlbmFudEFwcGxpY2F0aW9uc1NlcnZpY2VcclxuICAgKi9cclxuICBkZWxldGVSb2xlKFxyXG4gICAgZGVsZXRlUm9sZVBheWxvYWQ6IERlbGV0ZVJvbGVSZXF1ZXN0UGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8RGVsZXRlUm9sZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb2xlL2RlbGV0ZVJvbGVgLCBkZWxldGVSb2xlUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGdyb3VwIHR5cGVzIGZyb20gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Vmlld0dyb3VwVHlwZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEdyb3VwVHlwZXMoYXBwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Vmlld0dyb3VwVHlwZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2NvbmZpZ3VyYXRpb25zL2NvbmZpZy9hcHBHcm91cFR5cGVEZXRhaWxzLyR7YXBwSWR9YFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyBncm91cCB0eXBlIGRldGFpbHMuXHJcbiAgICogQHBhcmFtIHtWaWV3R3JvdXBUeXBlUmVzcG9uc2V9IGdyb3VwVHlwZXNcclxuICAgKiBAbWVtYmVyb2YgVGVuYW50QXBwbGljYXRpb25zU2VydmljZVxyXG4gICAqL1xyXG4gIHNldEdyb3VwVHlwZURldGFpbHMoZ3JvdXBUeXBlczogVmlld0dyb3VwVHlwZVJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwVHlwZXMgPSBncm91cFR5cGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBncm91cCB0eXBlIGRldGFpbHMuXHJcbiAgICogQHJldHVybiB7Vmlld0dyb3VwVHlwZVJlc3BvbnNlfVxyXG4gICAqIEBtZW1iZXJvZiBUZW5hbnRBcHBsaWNhdGlvbnNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBUeXBlRGV0YWlscygpOiBWaWV3R3JvdXBUeXBlUmVzcG9uc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBUeXBlcztcclxuICB9XHJcbn1cclxuIl19