@csmart/ngc-smart-core 1.18.17 → 1.18.20

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.
@@ -228,55 +228,37 @@ export class SmartAuthService {
228
228
  this.loginStaff = selData.loginStaff;
229
229
  this.selectedOffender = selData.selectedOffender;
230
230
  let routePath = '';
231
- if (accessControlConfig.route.url &&
232
- accessControlConfig.route.url.length > 0) {
231
+ if (accessControlConfig.route.url && accessControlConfig.route.url.length > 0) {
233
232
  routePath = accessControlConfig.route.url[0].path;
234
233
  }
235
234
  const permissions = this.loginStaff.permissions;
236
235
  const resource = routePath;
237
- const roleId = accessControlConfig.roleId
238
- ? accessControlConfig.roleId.toUpperCase()
239
- : null;
236
+ const roleId = accessControlConfig.roleId?.toUpperCase() || null;
240
237
  const accessType = accessControlConfig.accessType;
241
- const assignmentStaffRelationId = (!this.selectedOffender || !this.selectedOffender
242
- .assignmentStaffRelationId)
243
- ? 'N/A'
244
- : this.selectedOffender.assignmentStaffRelationId;
245
- const permission = permissions.find((p) => {
246
- return (p.appModuleId === accessControlConfig.appModuleId &&
247
- p.resource === resource &&
248
- (!roleId || p.roleId === roleId) &&
249
- (p.assignmentStaffRelationId === 'N/A' ||
250
- p.assignmentStaffRelationId === assignmentStaffRelationId));
251
- });
252
- if (permission) {
253
- if (accessType === 'read') {
254
- if (!permission.readFlag) {
255
- return false;
256
- }
257
- else {
258
- return true;
259
- }
260
- }
261
- else if ((accessType === 'create' && !permission.createFlag) ||
262
- (accessType === 'update' && !permission.updateFlag) ||
263
- (accessType === 'delete' && !permission.deleteFlag) ||
264
- (accessType === 'assign' && !permission.assignFlag) ||
265
- (accessType === 'close' && !permission.closeFlag) ||
266
- (accessType === 'expunge' && !permission.expungeFlag) ||
267
- (accessType === 'reopen' && !permission.reopenFlag)) {
268
- return false;
269
- }
270
- else {
271
- return true;
272
- }
273
- }
274
- else {
275
- if (accessType === 'read') {
276
- return false;
277
- }
278
- }
279
- return false;
238
+ const assignmentStaffRelationId = this.selectedOffender?.assignmentStaffRelationId || 'N/A';
239
+ // Find matching permissions (prioritize specific role over aggregated)
240
+ const specificPermission = permissions.find(p => p.appModuleId === accessControlConfig.appModuleId &&
241
+ p.resource.trim() === resource &&
242
+ p.roleId.trim().toUpperCase() === roleId &&
243
+ (p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId));
244
+ const aggregatedPermission = permissions.find(p => p.appModuleId === accessControlConfig.appModuleId &&
245
+ p.resource.trim() === resource &&
246
+ p.roleId.trim() === '*' &&
247
+ (p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId));
248
+ const permission = specificPermission || aggregatedPermission;
249
+ if (!permission)
250
+ return false;
251
+ const flagMap = {
252
+ 'read': permission.readFlag,
253
+ 'create': permission.createFlag,
254
+ 'update': permission.updateFlag,
255
+ 'delete': permission.deleteFlag,
256
+ 'assign': permission.assignFlag,
257
+ 'close': permission.closeFlag,
258
+ 'expunge': permission.expungeFlag,
259
+ 'reopen': permission.reopenFlag
260
+ };
261
+ return !!flagMap[accessType];
280
262
  }
281
263
  canAppFeatureActivate(loginStaff, feature, appModuleId = null) {
282
264
  // if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {
@@ -503,4 +485,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
503
485
  type: Inject,
504
486
  args: [SMART_DOMAIN_FORMAT]
505
487
  }] }] });
506
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtYXV0aC9zbWFydC1hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2xELE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBR3BCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQU0xRCxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLFlBQ1UsSUFBZ0IsRUFDaEIsWUFBeUIsRUFDekIsVUFBc0IsRUFDVSxtQkFBbUIsRUFDdEIsb0JBQTRCO1FBSnpELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBQTtRQUN0Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVE7SUFDaEUsQ0FBQztJQUVHLGFBQWE7UUFDbEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9D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QyxJQUFJO2FBQ2IsSUFBSSxDQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQzthQUMzRCxJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2IsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxPQUFPLENBQUMsR0FBRyxDQUNULGlEQUFpRCxFQUNqRCxNQUFNLENBQ1AsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLEtBQUssQ0FBQztnQkFDYix5Q0FBeUM7WUFDM0MsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO2lJQTNrQlUsZ0JBQWdCLGlHQVFqQixzQkFBc0IsYUFDdEIsbUJBQW1CO3FJQVRsQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxNQUFNOzJCQUFDLHNCQUFzQjs7MEJBQzdCLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBmcm9tLCB0aHJvd0Vycm9yLCBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YWtlLCBjYXRjaEVycm9yfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBMb2dpblN0YWZmLFxyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgU01BUlRfREFUQV9TRVJWSUNFX1VSTCxcclxuICBTTUFSVF9ET01BSU5fRk9STUFULFxyXG4gIFJvbGUsXHJcbiAgUGVybWlzc2lvbixcclxufSBmcm9tICcuLi9zbWFydC1zdG9yYWdlL3NtYXJ0LXN0b3JhZ2UtbW9kZWwnO1xyXG5pbXBvcnQgeyBYZG1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtc3RvcmFnZS94ZG0uc2VydmljZSc7XHJcbmltcG9ydCB7IFNtYXJ0QWNjZXNzQ29udHJvbENvbmZpZyB9IGZyb20gJy4vc21hcnQtYWNjZXNzLWNvbnRyb2wtY29uZmlnJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydEF1dGhTZXJ2aWNlIHtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBhdXRoblNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgQEluamVjdChTTUFSVF9EQVRBX1NFUlZJQ0VfVVJMKSBwcml2YXRlIHNtYXJ0RGF0YVNlcnZpY2VVcmwsXHJcbiAgICBASW5qZWN0KFNNQVJUX0RPTUFJTl9GT1JNQVQpIHByaXZhdGUgc21hcnREb21haW5Gb3JtYXRVcmw6IHN0cmluZyxcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBnZXRMb2dpblN0YWZmKCk6IE9ic2VydmFibGU8TG9naW5TdGFmZj4ge1xyXG4gICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnU21hcnRBdXRoU2VydmljZSAtIGdldExvZ2luU3RhZmYoKScpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0Rldk1vZGUgJiYgdGhpcy5sb2dpblN0YWZmKSB7XHJcbiAgICAgIGlmICh0aGlzLmxvZ2luU3RhZmYuc3RhZmZJZCkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgaW50ZXJuYWwgaW5zdGFuY2UgaW4gc2VydmljZScsXHJcbiAgICAgICAgICAgIHRoaXMubG9naW5TdGFmZixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZih0aGlzLmxvZ2luU3RhZmYpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubG9naW5TdGFmZi51c2VyTmFtZSkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgdXNpbmcgcHJlc2V0IHVzZXIgbmFtZScsXHJcbiAgICAgICAgICAgIHRoaXMubG9naW5TdGFmZixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0YWZmKHRoaXMubG9naW5TdGFmZi51c2VyTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmcm9tKHRoaXMueGRtU2VydmljZS5nZXRMb2dpblN0YWZmKCkpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoc3RvcmVkUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHN0b3JlZFJlc3VsdCAmJiBzdG9yZWRSZXN1bHQuc3RhZmZJZCkge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgZnJvbSBzZXNzaW9uLicsXHJcbiAgICAgICAgICAgICAgc3RvcmVkUmVzdWx0LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5sb2dpblN0YWZmID0gc3RvcmVkUmVzdWx0O1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHN0b3JlZFJlc3VsdCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdG9yZWRSZXN1bHQgJiYgc3RvcmVkUmVzdWx0LnVzZXJOYW1lKSB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICcjIyMjIyBnZXRMb2dpblN0YWZmKCk6IGdldCB1c2luZyBwcmVzZXQgdXNlciBuYW1lJyxcclxuICAgICAgICAgICAgICB0aGlzLmxvZ2luU3RhZmYsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFmZihzdG9yZWRSZXN1bHQudXNlck5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB1c2VyTmFtZSA9IHRoaXMudXNlck5hbWU7XHJcbiAgICAgICAgICBjb25zdCBzdGFmZk5hbWUgPSB1c2VyTmFtZS5zdWJzdHJpbmcoMCwgdXNlck5hbWUuaW5kZXhPZignQCcpKTtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgJyMjIyMjIGxvZ2luTG9naW5TdGFmZigpOiBnZXQgdXNpbmcgbG9naW4gc3RhZmYgbmFtZSAnLFxyXG4gICAgICAgICAgICAgIHN0YWZmTmFtZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YWZmKHN0YWZmTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXQgdXNlck5hbWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmF1dGhuU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYXV0aG5TZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF07XHJcbiAgICAgIHJldHVybiBhY2NvdW50LnVzZXJuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGVhbVVybChhcHA6IHN0cmluZywgYWZ0ZXJIYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc21hcnREb21haW5Gb3JtYXRVcmwucmVwbGFjZSgnJHtBUFB9JywgYXBwKSArIGFmdGVySGFzaDtcclxuICB9XHJcbiAgcHJpdmF0ZSBpc1NhbWVIb3N0KHVybCwgYXBwKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zbWFydERvbWFpbkZvcm1hdFVybC5yZXBsYWNlKCcke0FQUH0nLCBhcHApID09PSB1cmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVkaXJlY3RUb1RlYW0obG9naW5TdGFmZjogTG9naW5TdGFmZikge1xyXG4gICAgaWYgKGxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KChyb2xlKSA9PiByb2xlLnJvbGVJZCA9PT0gJ0VVVVNQQycpID4gLTEpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzU2FtZUhvc3Qod2luZG93LmxvY2F0aW9uLm9yaWdpbiwgJ2ludmVzdGlnYXRpb24nKSkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5nZXRUZWFtVXJsKCdpbnZlc3RpZ2F0aW9uJywgJy9hc3NpZ25tZW50Jyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KFxyXG4gICAgICAgIChyb2xlKSA9PiByb2xlLnJvbGVJZC5zdWJzdHJpbmcoMCwgMykgPT09ICdSU0MnLFxyXG4gICAgICApID4gLTFcclxuICAgICkge1xyXG4gICAgICBpZiAoIXRoaXMuaXNTYW1lSG9zdCh3aW5kb3cubG9jYXRpb24ub3JpZ2luLCAncnNjJykpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuZ2V0VGVhbVVybCgncnNjJywgJy9vZmZlbmRlci1saXN0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRTZWxlY3RlZE9mZmVuZGVyKHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXIpIHtcclxuICAgIGlmICghdGhpcy5sb2dpblN0YWZmKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRPZmZlbmRlcikge1xyXG4gICAgICAvLyBpZiAoIXNlbGVjdGVkT2ZmZW5kZXIuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCkge1xyXG4gICAgICBjb25zdCByZWxhdGlvbiA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5nZXRTdGFmZk9mZmVuZGVyUmVsYXRpb24oXHJcbiAgICAgICAgICB0aGlzLmxvZ2luU3RhZmYuc3RhZmZJZCxcclxuICAgICAgICAgIHNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZCxcclxuICAgICAgICApLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAocmVsYXRpb24pIHtcclxuICAgICAgICBzZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSByZWxhdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSAnTk9BU1NJR04nO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICAgIHRoaXMueGRtU2VydmljZS5zZXRTZWxlY3RlZE9mZmVuZGVyKHNlbGVjdGVkT2ZmZW5kZXIpO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsZWN0ZWRPZmZlbmRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuY2xlYXJBbGwoKTtcclxuICAgIHRoaXMuYXV0aG5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFBlcm1pc3Npb24oXHJcbiAgICBhcHBNb2R1bGVJZDogc3RyaW5nLFxyXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgKSB7XHJcbiAgICBpZiAoIXRoaXMubG9naW5TdGFmZikge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBhd2FpdCB0aGlzLnhkbVNlcnZpY2UuZ2V0TG9naW5TdGFmZigpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnM7XHJcbiAgICBjb25zdCByZXNvdXJjZSA9XHJcbiAgICAgIHJvdXRlLnVybCAmJiByb3V0ZS51cmwubGVuZ3RoID4gMCA/IHJvdXRlLnVybFswXSEucGF0aCA6ICcnO1xyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZE9mZmVuZGVyKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9IGF3YWl0IHRoaXMueGRtU2VydmljZS5nZXRTZWxlY3RlZE9mZmVuZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPZmZlbmRlcikge1xyXG4gICAgICAvLyBpZiAoIXRoaXMuc2VsZWN0ZWRPZmZlbmRlci5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkKSB7XHJcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gYXdhaXQgdGhpcy5nZXRTdGFmZk9mZmVuZGVyUmVsYXRpb24oXHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmLnN0YWZmSWQsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWQsXHJcbiAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGlmIChyZWxhdGlvbikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlci5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID0gcmVsYXRpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSAnTk9BU1NJR04nO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMueGRtU2VydmljZS5zZXRTZWxlY3RlZE9mZmVuZGVyKHRoaXMuc2VsZWN0ZWRPZmZlbmRlcik7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID1cclxuICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQ7XHJcblxyXG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePVwic2FjLVwiXScpO1xyXG4gICAgY29uc3QgcGF0dGVybiA9IC9ec2FjLShcXFMrKS0oXFxTKykkL2k7XHJcblxyXG4gICAgQXJyYXkuZnJvbShlbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICBsZXQgaGlkZTtcclxuICAgICAgbGV0IGRpc2FibGU7XHJcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5tYXRjaChwYXR0ZXJuKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHRzKTtcclxuICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgIGNvbnN0IHJvbGVJZCA9IHJlc3VsdHNbMV0gPyByZXN1bHRzWzFdLnRvVXBwZXJDYXNlKCkgOiBudWxsO1xyXG4gICAgICAgICAgY29uc3QgcmlnaHQgPSByZXN1bHRzWzJdO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzdWx0c1swXSk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHRzWzFdKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3VsdHNbMl0pO1xyXG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQoZnVuY3Rpb24gKHApIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICBwLmFwcE1vZHVsZUlkID09PSBhcHBNb2R1bGVJZCAmJlxyXG4gICAgICAgICAgICAgIHAucmVzb3VyY2UgPT09IHJlc291cmNlICYmXHJcbiAgICAgICAgICAgICAgcC5yb2xlSWQgPT09IHJvbGVJZCAmJlxyXG4gICAgICAgICAgICAgIHAuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCA9PT0gYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvKlxyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSByZXNvdXJjZTogJywgcmVzb3VyY2UpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSBhcHBNb2R1bGVJZDogJywgYXBwTW9kdWxlSWQpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSByb2xlSWQ6ICcsIHJvbGVJZCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgJyMjIyMjIHNldFBlcm1pc3Npb24oKSBhc3NpZ25tZW50IHJlbGF0aW9uOiAnLFxyXG4gICAgICAgICAgICBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgICovXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnIyMjIyMgTWF0Y2hlZCBwZXJtaXNzaW9uOiAnLCBwZXJtaXNzaW9uKTtcclxuXHJcbiAgICAgICAgICBpZiAocGVybWlzc2lvbikge1xyXG4gICAgICAgICAgICBpZiAocmlnaHQgPT09ICdyZWFkJykge1xyXG4gICAgICAgICAgICAgIGlmICghcGVybWlzc2lvbi5yZWFkRmxhZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhpZGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2NyZWF0ZScgJiYgIXBlcm1pc3Npb24uY3JlYXRlRmxhZykgfHxcclxuICAgICAgICAgICAgICAocmlnaHQgPT09ICd1cGRhdGUnICYmICFwZXJtaXNzaW9uLnVwZGF0ZUZsYWcpIHx8XHJcbiAgICAgICAgICAgICAgKHJpZ2h0ID09PSAnZGVsZXRlJyAmJiAhcGVybWlzc2lvbi5kZWxldGVGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2Fzc2lnbicgJiYgIXBlcm1pc3Npb24uYXNzaWduRmxhZykgfHxcclxuICAgICAgICAgICAgICAocmlnaHQgPT09ICdjbG9zZScgJiYgIXBlcm1pc3Npb24uY2xvc2VGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2V4cHVuZ2UnICYmICFwZXJtaXNzaW9uLmV4cHVuZ2VGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ3Jlb3BlbicgJiYgIXBlcm1pc3Npb24ucmVvcGVuRmxhZylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGlkZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgaGlkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyaWdodCA9PT0gJ3JlYWQnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGhpZGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcclxuICAgICAgICAgICAgICBpZiAoaGlkZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNhYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIGRpc2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc29sZS5sb2coJ2hpZGU6ICcsIGhpZGUpO1xyXG4gICAgICBjb25zb2xlLmxvZygnZGlzYWJsZTogJywgZGlzYWJsZSk7XHJcbiAgICAgIGlmIChoaWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlSHRtbEVsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUh0bWxFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja1Blcm1pc3Npb24oYWNjZXNzQ29udHJvbENvbmZpZzogU21hcnRBY2Nlc3NDb250cm9sQ29uZmlnKSB7XHJcbiAgICBjb25zdCBzZWxEYXRhID0gYWNjZXNzQ29udHJvbENvbmZpZy5yb3V0ZS5kYXRhO1xyXG4gICAgdGhpcy5sb2dpblN0YWZmID0gc2VsRGF0YS5sb2dpblN0YWZmO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsRGF0YS5zZWxlY3RlZE9mZmVuZGVyO1xyXG4gICAgbGV0IHJvdXRlUGF0aCA9ICcnO1xyXG4gICAgaWYgKFxyXG4gICAgICBhY2Nlc3NDb250cm9sQ29uZmlnLnJvdXRlLnVybCAmJlxyXG4gICAgICBhY2Nlc3NDb250cm9sQ29uZmlnLnJvdXRlLnVybC5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcm91dGVQYXRoID0gYWNjZXNzQ29udHJvbENvbmZpZy5yb3V0ZS51cmxbMF0hLnBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnM7XHJcbiAgICBjb25zdCByZXNvdXJjZSA9IHJvdXRlUGF0aDtcclxuICAgIGNvbnN0IHJvbGVJZCA9IGFjY2Vzc0NvbnRyb2xDb25maWcucm9sZUlkXHJcbiAgICAgID8gYWNjZXNzQ29udHJvbENvbmZpZy5yb2xlSWQudG9VcHBlckNhc2UoKVxyXG4gICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBhY2Nlc3NUeXBlID0gYWNjZXNzQ29udHJvbENvbmZpZy5hY2Nlc3NUeXBlO1xyXG4gICAgY29uc3QgYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCA9ICghdGhpcy5zZWxlY3RlZE9mZmVuZGVyIHx8ICF0aGlzLnNlbGVjdGVkT2ZmZW5kZXJcclxuICAgICAgLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQpXHJcbiAgICAgID8gJ04vQSdcclxuICAgICAgOiB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZDtcclxuXHJcbiAgICBjb25zdCBwZXJtaXNzaW9uID0gcGVybWlzc2lvbnMuZmluZCgocCkgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHAuYXBwTW9kdWxlSWQgPT09IGFjY2Vzc0NvbnRyb2xDb25maWcuYXBwTW9kdWxlSWQgJiZcclxuICAgICAgICBwLnJlc291cmNlID09PSByZXNvdXJjZSAmJlxyXG4gICAgICAgICghcm9sZUlkIHx8IHAucm9sZUlkID09PSByb2xlSWQpICYmXHJcbiAgICAgICAgKHAuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCA9PT0gJ04vQScgfHxcclxuICAgICAgICAgIHAuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCA9PT0gYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZClcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChwZXJtaXNzaW9uKSB7XHJcbiAgICAgIGlmIChhY2Nlc3NUeXBlID09PSAncmVhZCcpIHtcclxuICAgICAgICBpZiAoIXBlcm1pc3Npb24ucmVhZEZsYWcpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIChhY2Nlc3NUeXBlID09PSAnY3JlYXRlJyAmJiAhcGVybWlzc2lvbi5jcmVhdGVGbGFnKSB8fFxyXG4gICAgICAgIChhY2Nlc3NUeXBlID09PSAndXBkYXRlJyAmJiAhcGVybWlzc2lvbi51cGRhdGVGbGFnKSB8fFxyXG4gICAgICAgIChhY2Nlc3NUeXBlID09PSAnZGVsZXRlJyAmJiAhcGVybWlzc2lvbi5kZWxldGVGbGFnKSB8fFxyXG4gICAgICAgIChhY2Nlc3NUeXBlID09PSAnYXNzaWduJyAmJiAhcGVybWlzc2lvbi5hc3NpZ25GbGFnKSB8fFxyXG4gICAgICAgIChhY2Nlc3NUeXBlID09PSAnY2xvc2UnICYmICFwZXJtaXNzaW9uLmNsb3NlRmxhZykgfHxcclxuICAgICAgICAoYWNjZXNzVHlwZSA9PT0gJ2V4cHVuZ2UnICYmICFwZXJtaXNzaW9uLmV4cHVuZ2VGbGFnKSB8fFxyXG4gICAgICAgIChhY2Nlc3NUeXBlID09PSAncmVvcGVuJyAmJiAhcGVybWlzc2lvbi5yZW9wZW5GbGFnKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChhY2Nlc3NUeXBlID09PSAncmVhZCcpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5BcHBGZWF0dXJlQWN0aXZhdGUoXHJcbiAgICBsb2dpblN0YWZmOiBMb2dpblN0YWZmLFxyXG4gICAgZmVhdHVyZTogc3RyaW5nLFxyXG4gICAgYXBwTW9kdWxlSWQgPSBudWxsLFxyXG4gICkge1xyXG4gICAgLy8gaWYgKCF0aGlzLmlzQXV0aEVuYWJsZShsb2dpblN0YWZmLnJvbGVzLCBhcHBNb2R1bGVJZCkpIHtcclxuICAgIC8vICAgcmV0dXJuIHRydWU7XHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gdGhpcy5oYXNBcHBGZWF0dXJlUGVybWlzc2lvbihcclxuICAgICAgbG9naW5TdGFmZi5wZXJtaXNzaW9ucyxcclxuICAgICAgZmVhdHVyZSxcclxuICAgICAgYXBwTW9kdWxlSWQsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGlzQXV0aEVuYWJsZShyb2xlczogUm9sZVtdLCBhcHBNb2R1bGVJZDogc3RyaW5nKSB7XHJcbiAgLy8gICBpZiAocm9sZXMgJiYgcm9sZXMubGVuZ3RoID4gMCkge1xyXG4gIC8vICAgICByZXR1cm4gcm9sZXMubWFwKHIgPT4gci5yb2xlSWQpLmZpbmRJbmRleCh0aGlzLmlzRXh0ZXJuYWxSb2xlKSA+IC0xIHx8IGFwcE1vZHVsZUlkID09PSAnUlInO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIGZhbHNlO1xyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGhhc0ludGFrZVJvbGUocm9sZXM6IFJvbGVbXSkge1xyXG4gICAgaWYgKHJvbGVzICYmIHJvbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHJvbGVzLmZpbmRJbmRleCh0aGlzLmlzSW50YWtlUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzQXBwRmVhdHVyZVBlcm1pc3Npb24oXHJcbiAgICBwZXJtaXNzaW9uczogUGVybWlzc2lvbltdLFxyXG4gICAgZmVhdHVyZTogc3RyaW5nLFxyXG4gICAgYXBwTW9kdWxlSWQ6IHN0cmluZyxcclxuICApIHtcclxuICAgIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmIChhcHBNb2R1bGVJZCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBwZXJtaXNzaW9ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIChwKSA9PiBwLnJlc291cmNlID09PSBmZWF0dXJlICYmIHAuYXBwTW9kdWxlSWQgPT09IGFwcE1vZHVsZUlkLFxyXG4gICAgICAgICAgKSA+IC0xXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuZmluZEluZGV4KChwKSA9PiBwLnJlc291cmNlID09PSBmZWF0dXJlKSA+IC0xO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0V4dGVybmFsUm9sZShyb2xlSWQpIHtcclxuICAgIHN3aXRjaCAocm9sZUlkKSB7XHJcbiAgICAgIGNhc2UgJ0VVRFRMJzpcclxuICAgICAgY2FzZSAnRVVEVVNNJzpcclxuICAgICAgY2FzZSAnRVVKREcnOlxyXG4gICAgICBjYXNlICdFVU1QRCc6XHJcbiAgICAgIGNhc2UgJ0VVU09UVic6XHJcbiAgICAgIGNhc2UgJ0VVVVNBMic6XHJcbiAgICAgIGNhc2UgJ0VVVVNBTyc6XHJcbiAgICAgIGNhc2UgJ0VVVVNQQyc6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0ludGFrZVJvbGUocm9sZTogUm9sZSkge1xyXG4gICAgc3dpdGNoIChyb2xlLnJvbGVJZCkge1xyXG4gICAgICBjYXNlICdPUEEnOlxyXG4gICAgICBjYXNlICdPUFMnOlxyXG4gICAgICBjYXNlICdTT1BTJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc2FibGVIdG1sRWxlbWVudChlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhlbGVtZW50KTtcclxuICAgIHN3aXRjaCAoZWxlbWVudC5ub2RlTmFtZSkge1xyXG4gICAgICBjYXNlICdBJzpcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcclxuICAgICAgICAgICdzdHlsZScsXHJcbiAgICAgICAgICAncG9pbnRlci1ldmVudHM6IG5vbmU7Y3Vyc29yOiBub3QtYWxsb3dlZDsnLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgJy0xJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhpZGVIdG1sRWxlbWVudChlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XHJcbiAgICAvLyBlbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJ2hpZGRlbicpO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2Rpc3BsYXk6IG5vbmU7Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFN0YWZmKHVzZXJOYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvZ2luU3RhZmY+IHtcclxuICAgIHJldHVybiB0aGlzLnF1ZXJ5PGFueT4oe1xyXG4gICAgICBxdWVyeTogdGhpcy5maW5kU3RhZmZRdWVyeSxcclxuICAgICAgdmFyaWFibGVzOiB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIHdoZXJlOiB7XHJcbiAgICAgICAgICAgIHVzZXJOYW1lOiB1c2VyTmFtZSxcclxuICAgICAgICAgICAgYWN0aXZlRmxhZzogdHJ1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSkucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIG1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcjIyMjIyBnZXRTdGFmZigpIGZyb20gc2VydmljZSAnLCByZXN1bHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlc3VsdC5maW5kdlN0YWZmcy5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdC5maW5kdlN0YWZmcy5kYXRhWzBdO1xyXG4gICAgICAgICAgICB0aGlzLnhkbVNlcnZpY2Uuc2V0TG9naW5TdGFmZihkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dpblN0YWZmID0gZGF0YTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBxdWVyeTxUPihvcHRpb25zOiB7XHJcbiAgICBxdWVyeTogc3RyaW5nO1xyXG4gICAgdmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcclxuICB9KTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0PHsgZGF0YTogVCB9PihcclxuICAgICAgICB0aGlzLnNtYXJ0RGF0YVNlcnZpY2VVcmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXHJcbiAgICAgICAgICB2YXJpYWJsZXM6IG9wdGlvbnMudmFyaWFibGVzLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICAgJ05vLUF1dGgnOiAnVHJ1ZScsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShtYXAoKGQpID0+IGQuZGF0YSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgZmluZFN0YWZmUXVlcnkoKXtcclxuICAgIHJldHVybiBgXHJcbiAgICAgcXVlcnkgZmluZHZTdGFmZnMoJGlucHV0OiB2U3RhZmZNdWx0aUlucHV0KSB7XHJcbiAgICAgICAgZmluZHZTdGFmZnMoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgICAgICAgdG90YWxDb3VudFxyXG4gICAgICAgICAgbWVzc2FnZVxyXG4gICAgICAgICAgZGF0YSB7XHJcbiAgICAgICAgICAgIHN0YWZmSWRcclxuICAgICAgICAgICAgdXNlck5hbWVcclxuICAgICAgICAgICAgbGFzdE5hbWVcclxuICAgICAgICAgICAgZmlyc3ROYW1lXHJcbiAgICAgICAgICAgIHBob25lXHJcbiAgICAgICAgICAgIGVtYWlsXHJcbiAgICAgICAgICAgIHJvbGVzIHtcclxuICAgICAgICAgICAgICByb2xlSWRcclxuICAgICAgICAgICAgICByb2xlXHJcbiAgICAgICAgICAgICAgb3JnYW5pemF0aW9uSWRcclxuICAgICAgICAgICAgICBvcmdhbml6YXRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwZXJtaXNzaW9ucyB7XHJcbiAgICAgICAgICAgICAgcm9sZUlkXHJcbiAgICAgICAgICAgICAgYXBwTW9kdWxlSWRcclxuICAgICAgICAgICAgICByZXNvdXJjZVxyXG4gICAgICAgICAgICAgIGFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWRcclxuICAgICAgICAgICAgICByZWFkRmxhZ1xyXG4gICAgICAgICAgICAgIGNyZWF0ZUZsYWdcclxuICAgICAgICAgICAgICB1cGRhdGVGbGFnXHJcbiAgICAgICAgICAgICAgZGVsZXRlRmxhZ1xyXG4gICAgICAgICAgICAgIGFzc2lnbkZsYWdcclxuICAgICAgICAgICAgICByZW9wZW5GbGFnXHJcbiAgICAgICAgICAgICAgY2xvc2VGbGFnXHJcbiAgICAgICAgICAgICAgZXhwdW5nZUZsYWdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcHRpb25zIHtcclxuICAgICAgICAgICAgICBvZmZlbmRlckxpc3RPcHRpb25JZFxyXG4gICAgICAgICAgICAgIG5hbWVcclxuICAgICAgICAgICAgICBzZXJ2aWNlQXBpRmllbGROYW1lXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRGbGFnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFN0YWZmT2ZmZW5kZXJSZWxhdGlvbihcclxuICAgIHN0YWZmSWQ6IG51bWJlcixcclxuICAgIG9mZmVuZGVySWQ6IG51bWJlcixcclxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBgXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaW5kdlN0YWZmT2ZmZW5kZXJSZWxhdGlvbnMoaW5wdXQ6IHt3aGVyZToge3N0YWZmSWQ6ICR7c3RhZmZJZH0sIG9mZmVuZGVySWQ6ICR7b2ZmZW5kZXJJZH19fSkge1xyXG4gICAgICAgICAgICAgICAgZGF0YSB7XHJcbiAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1gO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8YW55Pih0aGlzLnNtYXJ0RGF0YVNlcnZpY2VVcmwsIHsgcXVlcnk6IHF1ZXJ5U3RyaW5nIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgJyMjIyMjIGdldFN0YWZmT2ZmZW5kZXJSZWxhdGlvbigpIGZyb20gc2VydmljZSAnLFxyXG4gICAgICAgICAgICAgIHJlc3VsdCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXN1bHQuZGF0YS5maW5kdlN0YWZmT2ZmZW5kZXJSZWxhdGlvbnMuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQuZGF0YS5maW5kdlN0YWZmT2ZmZW5kZXJSZWxhdGlvbnMuZGF0YVswXTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gdGhyb3dFcnJvcignTm8gYWNjZXNzIHJpZ2h0LicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgJyArIGVycm9yKTtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSb2xlUGVybWlzc2lvbnMoXHJcbiAgICBhcHBNb2R1bGVJZDogc3RyaW5nLFxyXG4gICAgcmVzb3VyY2U6IHN0cmluZyxcclxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gYFxyXG4gICAgICAgICAgIHF1ZXJ5IGZpbmR2Um9sZVBlcm1pc3Npb25QaXZvdHN7XHJcbiAgICAgICAgICAgIGZpbmR2Um9sZVBlcm1pc3Npb25QaXZvdHMoaW5wdXQ6IHt3aGVyZToge2FwcE1vZHVsZUlkOiAke2FwcE1vZHVsZUlkfSwgcmVzb3VyY2U6ICR7cmVzb3VyY2V9fX0pe1xyXG4gICAgICAgICAgICAgIHRvdGFsQ291bnRcclxuICAgICAgICAgICAgICBtZXNzYWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1gO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8YW55Pih0aGlzLnNtYXJ0RGF0YVNlcnZpY2VVcmwsIHsgcXVlcnk6IHF1ZXJ5U3RyaW5nIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgJyMjIyMjIGZpbmR2Um9sZVBlcm1pc3Npb25QaXZvdHMoKSBmcm9tIHNlcnZpY2UgJyxcclxuICAgICAgICAgICAgICByZXN1bHQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVzdWx0LmRhdGEuZmluZHZSb2xlUGVybWlzc2lvblBpdm90cy50b3RhbENvdW50ID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIHRocm93RXJyb3IoJ05vIGFjY2VzcyByaWdodC4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgJyArIGVycm9yKTtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuICB9XHJcbn1cclxuIl19
488
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtYXV0aC9zbWFydC1hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2xELE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBR3BCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQU0xRCxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLFlBQ1UsSUFBZ0IsRUFDaEIsWUFBeUIsRUFDekIsVUFBc0IsRUFDVSxtQkFBbUIsRUFDdEIsb0JBQTRCO1FBSnpELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBQTtRQUN0Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVE7SUFDaEUsQ0FBQztJQUVHLGFBQWE7UUFDbEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9D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Q0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLEtBQUssQ0FBQztnQkFDYix5Q0FBeUM7WUFDM0MsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO2lJQS9qQlUsZ0JBQWdCLGlHQVFqQixzQkFBc0IsYUFDdEIsbUJBQW1CO3FJQVRsQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxNQUFNOzJCQUFDLHNCQUFzQjs7MEJBQzdCLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBmcm9tLCB0aHJvd0Vycm9yLCBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YWtlLCBjYXRjaEVycm9yfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBMb2dpblN0YWZmLFxyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgU01BUlRfREFUQV9TRVJWSUNFX1VSTCxcclxuICBTTUFSVF9ET01BSU5fRk9STUFULFxyXG4gIFJvbGUsXHJcbiAgUGVybWlzc2lvbixcclxufSBmcm9tICcuLi9zbWFydC1zdG9yYWdlL3NtYXJ0LXN0b3JhZ2UtbW9kZWwnO1xyXG5pbXBvcnQgeyBYZG1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtc3RvcmFnZS94ZG0uc2VydmljZSc7XHJcbmltcG9ydCB7IFNtYXJ0QWNjZXNzQ29udHJvbENvbmZpZyB9IGZyb20gJy4vc21hcnQtYWNjZXNzLWNvbnRyb2wtY29uZmlnJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydEF1dGhTZXJ2aWNlIHtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBhdXRoblNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgQEluamVjdChTTUFSVF9EQVRBX1NFUlZJQ0VfVVJMKSBwcml2YXRlIHNtYXJ0RGF0YVNlcnZpY2VVcmwsXHJcbiAgICBASW5qZWN0KFNNQVJUX0RPTUFJTl9GT1JNQVQpIHByaXZhdGUgc21hcnREb21haW5Gb3JtYXRVcmw6IHN0cmluZyxcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBnZXRMb2dpblN0YWZmKCk6IE9ic2VydmFibGU8TG9naW5TdGFmZj4ge1xyXG4gICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnU21hcnRBdXRoU2VydmljZSAtIGdldExvZ2luU3RhZmYoKScpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0Rldk1vZGUgJiYgdGhpcy5sb2dpblN0YWZmKSB7XHJcbiAgICAgIGlmICh0aGlzLmxvZ2luU3RhZmYuc3RhZmZJZCkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgaW50ZXJuYWwgaW5zdGFuY2UgaW4gc2VydmljZScsXHJcbiAgICAgICAgICAgIHRoaXMubG9naW5TdGFmZixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZih0aGlzLmxvZ2luU3RhZmYpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubG9naW5TdGFmZi51c2VyTmFtZSkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgdXNpbmcgcHJlc2V0IHVzZXIgbmFtZScsXHJcbiAgICAgICAgICAgIHRoaXMubG9naW5TdGFmZixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0YWZmKHRoaXMubG9naW5TdGFmZi51c2VyTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmcm9tKHRoaXMueGRtU2VydmljZS5nZXRMb2dpblN0YWZmKCkpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoc3RvcmVkUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHN0b3JlZFJlc3VsdCAmJiBzdG9yZWRSZXN1bHQuc3RhZmZJZCkge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAnIyMjIyMgZ2V0TG9naW5TdGFmZigpOiBnZXQgZnJvbSBzZXNzaW9uLicsXHJcbiAgICAgICAgICAgICAgc3RvcmVkUmVzdWx0LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5sb2dpblN0YWZmID0gc3RvcmVkUmVzdWx0O1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHN0b3JlZFJlc3VsdCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdG9yZWRSZXN1bHQgJiYgc3RvcmVkUmVzdWx0LnVzZXJOYW1lKSB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICcjIyMjIyBnZXRMb2dpblN0YWZmKCk6IGdldCB1c2luZyBwcmVzZXQgdXNlciBuYW1lJyxcclxuICAgICAgICAgICAgICB0aGlzLmxvZ2luU3RhZmYsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFmZihzdG9yZWRSZXN1bHQudXNlck5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB1c2VyTmFtZSA9IHRoaXMudXNlck5hbWU7XHJcbiAgICAgICAgICBjb25zdCBzdGFmZk5hbWUgPSB1c2VyTmFtZS5zdWJzdHJpbmcoMCwgdXNlck5hbWUuaW5kZXhPZignQCcpKTtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgJyMjIyMjIGxvZ2luTG9naW5TdGFmZigpOiBnZXQgdXNpbmcgbG9naW4gc3RhZmYgbmFtZSAnLFxyXG4gICAgICAgICAgICAgIHN0YWZmTmFtZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YWZmKHN0YWZmTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXQgdXNlck5hbWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmF1dGhuU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYXV0aG5TZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF07XHJcbiAgICAgIHJldHVybiBhY2NvdW50LnVzZXJuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGVhbVVybChhcHA6IHN0cmluZywgYWZ0ZXJIYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc21hcnREb21haW5Gb3JtYXRVcmwucmVwbGFjZSgnJHtBUFB9JywgYXBwKSArIGFmdGVySGFzaDtcclxuICB9XHJcbiAgcHJpdmF0ZSBpc1NhbWVIb3N0KHVybCwgYXBwKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zbWFydERvbWFpbkZvcm1hdFVybC5yZXBsYWNlKCcke0FQUH0nLCBhcHApID09PSB1cmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVkaXJlY3RUb1RlYW0obG9naW5TdGFmZjogTG9naW5TdGFmZikge1xyXG4gICAgaWYgKGxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KChyb2xlKSA9PiByb2xlLnJvbGVJZCA9PT0gJ0VVVVNQQycpID4gLTEpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzU2FtZUhvc3Qod2luZG93LmxvY2F0aW9uLm9yaWdpbiwgJ2ludmVzdGlnYXRpb24nKSkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5nZXRUZWFtVXJsKCdpbnZlc3RpZ2F0aW9uJywgJy9hc3NpZ25tZW50Jyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KFxyXG4gICAgICAgIChyb2xlKSA9PiByb2xlLnJvbGVJZC5zdWJzdHJpbmcoMCwgMykgPT09ICdSU0MnLFxyXG4gICAgICApID4gLTFcclxuICAgICkge1xyXG4gICAgICBpZiAoIXRoaXMuaXNTYW1lSG9zdCh3aW5kb3cubG9jYXRpb24ub3JpZ2luLCAncnNjJykpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuZ2V0VGVhbVVybCgncnNjJywgJy9vZmZlbmRlci1saXN0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRTZWxlY3RlZE9mZmVuZGVyKHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXIpIHtcclxuICAgIGlmICghdGhpcy5sb2dpblN0YWZmKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRPZmZlbmRlcikge1xyXG4gICAgICAvLyBpZiAoIXNlbGVjdGVkT2ZmZW5kZXIuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCkge1xyXG4gICAgICBjb25zdCByZWxhdGlvbiA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5nZXRTdGFmZk9mZmVuZGVyUmVsYXRpb24oXHJcbiAgICAgICAgICB0aGlzLmxvZ2luU3RhZmYuc3RhZmZJZCxcclxuICAgICAgICAgIHNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZCxcclxuICAgICAgICApLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAocmVsYXRpb24pIHtcclxuICAgICAgICBzZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSByZWxhdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSAnTk9BU1NJR04nO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICAgIHRoaXMueGRtU2VydmljZS5zZXRTZWxlY3RlZE9mZmVuZGVyKHNlbGVjdGVkT2ZmZW5kZXIpO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsZWN0ZWRPZmZlbmRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuY2xlYXJBbGwoKTtcclxuICAgIHRoaXMuYXV0aG5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFBlcm1pc3Npb24oXHJcbiAgICBhcHBNb2R1bGVJZDogc3RyaW5nLFxyXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgKSB7XHJcbiAgICBpZiAoIXRoaXMubG9naW5TdGFmZikge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBhd2FpdCB0aGlzLnhkbVNlcnZpY2UuZ2V0TG9naW5TdGFmZigpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnM7XHJcbiAgICBjb25zdCByZXNvdXJjZSA9XHJcbiAgICAgIHJvdXRlLnVybCAmJiByb3V0ZS51cmwubGVuZ3RoID4gMCA/IHJvdXRlLnVybFswXSEucGF0aCA6ICcnO1xyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZE9mZmVuZGVyKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9IGF3YWl0IHRoaXMueGRtU2VydmljZS5nZXRTZWxlY3RlZE9mZmVuZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPZmZlbmRlcikge1xyXG4gICAgICAvLyBpZiAoIXRoaXMuc2VsZWN0ZWRPZmZlbmRlci5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkKSB7XHJcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gYXdhaXQgdGhpcy5nZXRTdGFmZk9mZmVuZGVyUmVsYXRpb24oXHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmLnN0YWZmSWQsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWQsXHJcbiAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGlmIChyZWxhdGlvbikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlci5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID0gcmVsYXRpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPSAnTk9BU1NJR04nO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMueGRtU2VydmljZS5zZXRTZWxlY3RlZE9mZmVuZGVyKHRoaXMuc2VsZWN0ZWRPZmZlbmRlcik7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID1cclxuICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQ7XHJcblxyXG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePVwic2FjLVwiXScpO1xyXG4gICAgY29uc3QgcGF0dGVybiA9IC9ec2FjLShcXFMrKS0oXFxTKykkL2k7XHJcblxyXG4gICAgQXJyYXkuZnJvbShlbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICBsZXQgaGlkZTtcclxuICAgICAgbGV0IGRpc2FibGU7XHJcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5tYXRjaChwYXR0ZXJuKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHRzKTtcclxuICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgIGNvbnN0IHJvbGVJZCA9IHJlc3VsdHNbMV0gPyByZXN1bHRzWzFdLnRvVXBwZXJDYXNlKCkgOiBudWxsO1xyXG4gICAgICAgICAgY29uc3QgcmlnaHQgPSByZXN1bHRzWzJdO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzdWx0c1swXSk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHRzWzFdKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3VsdHNbMl0pO1xyXG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQoZnVuY3Rpb24gKHApIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICBwLmFwcE1vZHVsZUlkID09PSBhcHBNb2R1bGVJZCAmJlxyXG4gICAgICAgICAgICAgIHAucmVzb3VyY2UgPT09IHJlc291cmNlICYmXHJcbiAgICAgICAgICAgICAgcC5yb2xlSWQgPT09IHJvbGVJZCAmJlxyXG4gICAgICAgICAgICAgIHAuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCA9PT0gYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvKlxyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSByZXNvdXJjZTogJywgcmVzb3VyY2UpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSBhcHBNb2R1bGVJZDogJywgYXBwTW9kdWxlSWQpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIHNldFBlcm1pc3Npb24oKSByb2xlSWQ6ICcsIHJvbGVJZCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgJyMjIyMjIHNldFBlcm1pc3Npb24oKSBhc3NpZ25tZW50IHJlbGF0aW9uOiAnLFxyXG4gICAgICAgICAgICBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgICovXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnIyMjIyMgTWF0Y2hlZCBwZXJtaXNzaW9uOiAnLCBwZXJtaXNzaW9uKTtcclxuXHJcbiAgICAgICAgICBpZiAocGVybWlzc2lvbikge1xyXG4gICAgICAgICAgICBpZiAocmlnaHQgPT09ICdyZWFkJykge1xyXG4gICAgICAgICAgICAgIGlmICghcGVybWlzc2lvbi5yZWFkRmxhZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhpZGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2NyZWF0ZScgJiYgIXBlcm1pc3Npb24uY3JlYXRlRmxhZykgfHxcclxuICAgICAgICAgICAgICAocmlnaHQgPT09ICd1cGRhdGUnICYmICFwZXJtaXNzaW9uLnVwZGF0ZUZsYWcpIHx8XHJcbiAgICAgICAgICAgICAgKHJpZ2h0ID09PSAnZGVsZXRlJyAmJiAhcGVybWlzc2lvbi5kZWxldGVGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2Fzc2lnbicgJiYgIXBlcm1pc3Npb24uYXNzaWduRmxhZykgfHxcclxuICAgICAgICAgICAgICAocmlnaHQgPT09ICdjbG9zZScgJiYgIXBlcm1pc3Npb24uY2xvc2VGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ2V4cHVuZ2UnICYmICFwZXJtaXNzaW9uLmV4cHVuZ2VGbGFnKSB8fFxyXG4gICAgICAgICAgICAgIChyaWdodCA9PT0gJ3Jlb3BlbicgJiYgIXBlcm1pc3Npb24ucmVvcGVuRmxhZylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGlkZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgaGlkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyaWdodCA9PT0gJ3JlYWQnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGhpZGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcclxuICAgICAgICAgICAgICBpZiAoaGlkZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNhYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIGRpc2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc29sZS5sb2coJ2hpZGU6ICcsIGhpZGUpO1xyXG4gICAgICBjb25zb2xlLmxvZygnZGlzYWJsZTogJywgZGlzYWJsZSk7XHJcbiAgICAgIGlmIChoaWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlSHRtbEVsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUh0bWxFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja1Blcm1pc3Npb24oYWNjZXNzQ29udHJvbENvbmZpZzogU21hcnRBY2Nlc3NDb250cm9sQ29uZmlnKSB7XHJcbiAgY29uc3Qgc2VsRGF0YSA9IGFjY2Vzc0NvbnRyb2xDb25maWcucm91dGUuZGF0YTtcclxuICB0aGlzLmxvZ2luU3RhZmYgPSBzZWxEYXRhLmxvZ2luU3RhZmY7XHJcbiAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsRGF0YS5zZWxlY3RlZE9mZmVuZGVyO1xyXG4gIFxyXG4gIGxldCByb3V0ZVBhdGggPSAnJztcclxuICBpZiAoYWNjZXNzQ29udHJvbENvbmZpZy5yb3V0ZS51cmwgJiYgYWNjZXNzQ29udHJvbENvbmZpZy5yb3V0ZS51cmwubGVuZ3RoID4gMCkge1xyXG4gICAgcm91dGVQYXRoID0gYWNjZXNzQ29udHJvbENvbmZpZy5yb3V0ZS51cmxbMF0hLnBhdGg7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IHBlcm1pc3Npb25zID0gdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zO1xyXG4gIGNvbnN0IHJlc291cmNlID0gcm91dGVQYXRoO1xyXG4gIGNvbnN0IHJvbGVJZCA9IGFjY2Vzc0NvbnRyb2xDb25maWcucm9sZUlkPy50b1VwcGVyQ2FzZSgpIHx8IG51bGw7XHJcbiAgY29uc3QgYWNjZXNzVHlwZSA9IGFjY2Vzc0NvbnRyb2xDb25maWcuYWNjZXNzVHlwZTtcclxuICBjb25zdCBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID0gdGhpcy5zZWxlY3RlZE9mZmVuZGVyPy5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkIHx8ICdOL0EnO1xyXG4gIFxyXG4gIC8vIEZpbmQgbWF0Y2hpbmcgcGVybWlzc2lvbnMgKHByaW9yaXRpemUgc3BlY2lmaWMgcm9sZSBvdmVyIGFnZ3JlZ2F0ZWQpXHJcbiAgY29uc3Qgc3BlY2lmaWNQZXJtaXNzaW9uID0gcGVybWlzc2lvbnMuZmluZChwID0+IFxyXG4gICAgcC5hcHBNb2R1bGVJZCA9PT0gYWNjZXNzQ29udHJvbENvbmZpZy5hcHBNb2R1bGVJZCAmJlxyXG4gICAgcC5yZXNvdXJjZS50cmltKCkgPT09IHJlc291cmNlICYmXHJcbiAgICBwLnJvbGVJZC50cmltKCkudG9VcHBlckNhc2UoKSA9PT0gcm9sZUlkICYmXHJcbiAgICAocC5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkID09PSAnTi9BJyB8fCBwLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPT09IGFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQpXHJcbiAgKTtcclxuICBcclxuICBjb25zdCBhZ2dyZWdhdGVkUGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQocCA9PiBcclxuICAgIHAuYXBwTW9kdWxlSWQgPT09IGFjY2Vzc0NvbnRyb2xDb25maWcuYXBwTW9kdWxlSWQgJiZcclxuICAgIHAucmVzb3VyY2UudHJpbSgpID09PSByZXNvdXJjZSAmJlxyXG4gICAgcC5yb2xlSWQudHJpbSgpID09PSAnKicgJiZcclxuICAgIChwLmFzc2lnbm1lbnRTdGFmZlJlbGF0aW9uSWQgPT09ICdOL0EnIHx8IHAuYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZCA9PT0gYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZClcclxuICApO1xyXG4gIFxyXG4gIGNvbnN0IHBlcm1pc3Npb24gPSBzcGVjaWZpY1Blcm1pc3Npb24gfHwgYWdncmVnYXRlZFBlcm1pc3Npb247XHJcbiAgXHJcbiAgaWYgKCFwZXJtaXNzaW9uKSByZXR1cm4gZmFsc2U7XHJcbiAgXHJcbiAgY29uc3QgZmxhZ01hcCA9IHtcclxuICAgICdyZWFkJzogcGVybWlzc2lvbi5yZWFkRmxhZyxcclxuICAgICdjcmVhdGUnOiBwZXJtaXNzaW9uLmNyZWF0ZUZsYWcsXHJcbiAgICAndXBkYXRlJzogcGVybWlzc2lvbi51cGRhdGVGbGFnLFxyXG4gICAgJ2RlbGV0ZSc6IHBlcm1pc3Npb24uZGVsZXRlRmxhZyxcclxuICAgICdhc3NpZ24nOiBwZXJtaXNzaW9uLmFzc2lnbkZsYWcsXHJcbiAgICAnY2xvc2UnOiBwZXJtaXNzaW9uLmNsb3NlRmxhZyxcclxuICAgICdleHB1bmdlJzogcGVybWlzc2lvbi5leHB1bmdlRmxhZyxcclxuICAgICdyZW9wZW4nOiBwZXJtaXNzaW9uLnJlb3BlbkZsYWdcclxuICB9O1xyXG4gIFxyXG4gIHJldHVybiAhIWZsYWdNYXBbYWNjZXNzVHlwZV07XHJcbn1cclxuXHJcbiAgcHVibGljIGNhbkFwcEZlYXR1cmVBY3RpdmF0ZShcclxuICAgIGxvZ2luU3RhZmY6IExvZ2luU3RhZmYsXHJcbiAgICBmZWF0dXJlOiBzdHJpbmcsXHJcbiAgICBhcHBNb2R1bGVJZCA9IG51bGwsXHJcbiAgKSB7XHJcbiAgICAvLyBpZiAoIXRoaXMuaXNBdXRoRW5hYmxlKGxvZ2luU3RhZmYucm9sZXMsIGFwcE1vZHVsZUlkKSkge1xyXG4gICAgLy8gICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLmhhc0FwcEZlYXR1cmVQZXJtaXNzaW9uKFxyXG4gICAgICBsb2dpblN0YWZmLnBlcm1pc3Npb25zLFxyXG4gICAgICBmZWF0dXJlLFxyXG4gICAgICBhcHBNb2R1bGVJZCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgaXNBdXRoRW5hYmxlKHJvbGVzOiBSb2xlW10sIGFwcE1vZHVsZUlkOiBzdHJpbmcpIHtcclxuICAvLyAgIGlmIChyb2xlcyAmJiByb2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgIHJldHVybiByb2xlcy5tYXAociA9PiByLnJvbGVJZCkuZmluZEluZGV4KHRoaXMuaXNFeHRlcm5hbFJvbGUpID4gLTEgfHwgYXBwTW9kdWxlSWQgPT09ICdSUic7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gZmFsc2U7XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgaGFzSW50YWtlUm9sZShyb2xlczogUm9sZVtdKSB7XHJcbiAgICBpZiAocm9sZXMgJiYgcm9sZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gcm9sZXMuZmluZEluZGV4KHRoaXMuaXNJbnRha2VSb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNBcHBGZWF0dXJlUGVybWlzc2lvbihcclxuICAgIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uW10sXHJcbiAgICBmZWF0dXJlOiBzdHJpbmcsXHJcbiAgICBhcHBNb2R1bGVJZDogc3RyaW5nLFxyXG4gICkge1xyXG4gICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGFwcE1vZHVsZUlkKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIHBlcm1pc3Npb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKHApID0+IHAucmVzb3VyY2UgPT09IGZlYXR1cmUgJiYgcC5hcHBNb2R1bGVJZCA9PT0gYXBwTW9kdWxlSWQsXHJcbiAgICAgICAgICApID4gLTFcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5maW5kSW5kZXgoKHApID0+IHAucmVzb3VyY2UgPT09IGZlYXR1cmUpID4gLTE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRXh0ZXJuYWxSb2xlKHJvbGVJZCkge1xyXG4gICAgc3dpdGNoIChyb2xlSWQpIHtcclxuICAgICAgY2FzZSAnRVVEVEwnOlxyXG4gICAgICBjYXNlICdFVURVU00nOlxyXG4gICAgICBjYXNlICdFVUpERyc6XHJcbiAgICAgIGNhc2UgJ0VVTVBEJzpcclxuICAgICAgY2FzZSAnRVVTT1RWJzpcclxuICAgICAgY2FzZSAnRVVVU0EyJzpcclxuICAgICAgY2FzZSAnRVVVU0FPJzpcclxuICAgICAgY2FzZSAnRVVVU1BDJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSW50YWtlUm9sZShyb2xlOiBSb2xlKSB7XHJcbiAgICBzd2l0Y2ggKHJvbGUucm9sZUlkKSB7XHJcbiAgICAgIGNhc2UgJ09QQSc6XHJcbiAgICAgIGNhc2UgJ09QUyc6XHJcbiAgICAgIGNhc2UgJ1NPUFMnOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzYWJsZUh0bWxFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGVsZW1lbnQpO1xyXG4gICAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XHJcbiAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgJ3N0eWxlJyxcclxuICAgICAgICAgICdwb2ludGVyLWV2ZW50czogbm9uZTtjdXJzb3I6IG5vdC1hbGxvd2VkOycsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnLTEnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGlkZUh0bWxFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIC8vIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnaGlkZGVuJyk7XHJcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTogbm9uZTsnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3RhZmYodXNlck5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8TG9naW5TdGFmZj4ge1xyXG4gICAgcmV0dXJuIHRoaXMucXVlcnk8YW55Pih7XHJcbiAgICAgIHF1ZXJ5OiB0aGlzLmZpbmRTdGFmZlF1ZXJ5LFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgd2hlcmU6IHtcclxuICAgICAgICAgICAgdXNlck5hbWU6IHVzZXJOYW1lLFxyXG4gICAgICAgICAgICBhY3RpdmVGbGFnOiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KS5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgbWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJyMjIyMjIGdldFN0YWZmKCkgZnJvbSBzZXJ2aWNlICcsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVzdWx0LmZpbmR2U3RhZmZzLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzdWx0LmZpbmR2U3RhZmZzLmRhdGFbMF07XHJcbiAgICAgICAgICAgIHRoaXMueGRtU2VydmljZS5zZXRMb2dpblN0YWZmKGRhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2luU3RhZmYgPSBkYXRhO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yICcgKyBlcnJvcik7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHF1ZXJ5PFQ+KG9wdGlvbnM6IHtcclxuICAgIHF1ZXJ5OiBzdHJpbmc7XHJcbiAgICB2YXJpYWJsZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG4gIH0pOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8eyBkYXRhOiBUIH0+KFxyXG4gICAgICAgIHRoaXMuc21hcnREYXRhU2VydmljZVVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcclxuICAgICAgICAgIHZhcmlhYmxlczogb3B0aW9ucy52YXJpYWJsZXMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAnTm8tQXV0aCc6ICdUcnVlJyxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKG1hcCgoZCkgPT4gZC5kYXRhKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBmaW5kU3RhZmZRdWVyeSgpe1xyXG4gICAgcmV0dXJuIGBcclxuICAgICBxdWVyeSBmaW5kdlN0YWZmcygkaW5wdXQ6IHZTdGFmZk11bHRpSW5wdXQpIHtcclxuICAgICAgICBmaW5kdlN0YWZmcyhpbnB1dDogJGlucHV0KSB7XHJcbiAgICAgICAgICB0b3RhbENvdW50XHJcbiAgICAgICAgICBtZXNzYWdlXHJcbiAgICAgICAgICBkYXRhIHtcclxuICAgICAgICAgICAgc3RhZmZJZFxyXG4gICAgICAgICAgICB1c2VyTmFtZVxyXG4gICAgICAgICAgICBsYXN0TmFtZVxyXG4gICAgICAgICAgICBmaXJzdE5hbWVcclxuICAgICAgICAgICAgcGhvbmVcclxuICAgICAgICAgICAgZW1haWxcclxuICAgICAgICAgICAgcm9sZXMge1xyXG4gICAgICAgICAgICAgIHJvbGVJZFxyXG4gICAgICAgICAgICAgIHJvbGVcclxuICAgICAgICAgICAgICBvcmdhbml6YXRpb25JZFxyXG4gICAgICAgICAgICAgIG9yZ2FuaXphdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zIHtcclxuICAgICAgICAgICAgICByb2xlSWRcclxuICAgICAgICAgICAgICBhcHBNb2R1bGVJZFxyXG4gICAgICAgICAgICAgIHJlc291cmNlXHJcbiAgICAgICAgICAgICAgYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZFxyXG4gICAgICAgICAgICAgIHJlYWRGbGFnXHJcbiAgICAgICAgICAgICAgY3JlYXRlRmxhZ1xyXG4gICAgICAgICAgICAgIHVwZGF0ZUZsYWdcclxuICAgICAgICAgICAgICBkZWxldGVGbGFnXHJcbiAgICAgICAgICAgICAgYXNzaWduRmxhZ1xyXG4gICAgICAgICAgICAgIHJlb3BlbkZsYWdcclxuICAgICAgICAgICAgICBjbG9zZUZsYWdcclxuICAgICAgICAgICAgICBleHB1bmdlRmxhZ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wdGlvbnMge1xyXG4gICAgICAgICAgICAgIG9mZmVuZGVyTGlzdE9wdGlvbklkXHJcbiAgICAgICAgICAgICAgbmFtZVxyXG4gICAgICAgICAgICAgIHNlcnZpY2VBcGlGaWVsZE5hbWVcclxuICAgICAgICAgICAgICBzZWxlY3RlZEZsYWdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3RhZmZPZmZlbmRlclJlbGF0aW9uKFxyXG4gICAgc3RhZmZJZDogbnVtYmVyLFxyXG4gICAgb2ZmZW5kZXJJZDogbnVtYmVyLFxyXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IGBcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpbmR2U3RhZmZPZmZlbmRlclJlbGF0aW9ucyhpbnB1dDoge3doZXJlOiB7c3RhZmZJZDogJHtzdGFmZklkfSwgb2ZmZW5kZXJJZDogJHtvZmZlbmRlcklkfX19KSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhIHtcclxuICAgICAgICAgICAgICAgICAgYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWA7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDxhbnk+KHRoaXMuc21hcnREYXRhU2VydmljZVVybCwgeyBxdWVyeTogcXVlcnlTdHJpbmcgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAnIyMjIyMgZ2V0U3RhZmZPZmZlbmRlclJlbGF0aW9uKCkgZnJvbSBzZXJ2aWNlICcsXHJcbiAgICAgICAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlc3VsdC5kYXRhLmZpbmR2U3RhZmZPZmZlbmRlclJlbGF0aW9ucy5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdC5kYXRhLmZpbmR2U3RhZmZPZmZlbmRlclJlbGF0aW9ucy5kYXRhWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5hc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0aHJvd0Vycm9yKCdObyBhY2Nlc3MgcmlnaHQuJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJvbGVQZXJtaXNzaW9ucyhcclxuICAgIGFwcE1vZHVsZUlkOiBzdHJpbmcsXHJcbiAgICByZXNvdXJjZTogc3RyaW5nLFxyXG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBgXHJcbiAgICAgICAgICAgcXVlcnkgZmluZHZSb2xlUGVybWlzc2lvblBpdm90c3tcclxuICAgICAgICAgICAgZmluZHZSb2xlUGVybWlzc2lvblBpdm90cyhpbnB1dDoge3doZXJlOiB7YXBwTW9kdWxlSWQ6ICR7YXBwTW9kdWxlSWR9LCByZXNvdXJjZTogJHtyZXNvdXJjZX19fSl7XHJcbiAgICAgICAgICAgICAgdG90YWxDb3VudFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWA7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDxhbnk+KHRoaXMuc21hcnREYXRhU2VydmljZVVybCwgeyBxdWVyeTogcXVlcnlTdHJpbmcgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAnIyMjIyMgZmluZHZSb2xlUGVybWlzc2lvblBpdm90cygpIGZyb20gc2VydmljZSAnLFxyXG4gICAgICAgICAgICAgIHJlc3VsdCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXN1bHQuZGF0YS5maW5kdlJvbGVQZXJtaXNzaW9uUGl2b3RzLnRvdGFsQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gdGhyb3dFcnJvcignTm8gYWNjZXNzIHJpZ2h0LicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -16,15 +16,15 @@ export class UserSettingsService {
16
16
  * @returns Observable of staff settings array
17
17
  */
18
18
  findStaffSettings(staffId) {
19
- const query = `{
20
- findStaffSettings(input: { where: { staffId: ${staffId} } }) {
21
- data {
22
- staffSettingId
23
- settingKey
24
- settingValue
25
- modifiedBy
26
- }
27
- }
19
+ const query = `{
20
+ findStaffSettings(input: { where: { staffId: ${staffId} } }) {
21
+ data {
22
+ staffSettingId
23
+ settingKey
24
+ settingValue
25
+ modifiedBy
26
+ }
27
+ }
28
28
  }`;
29
29
  return this.httpClient.post(this.smartDataServiceUrl, { query }).pipe(map(response => response?.data?.findStaffSettings?.data || []), catchError(error => {
30
30
  console.error('Error fetching staff settings:', error);
@@ -36,13 +36,13 @@ export class UserSettingsService {
36
36
  * @returns Observable of default settings array
37
37
  */
38
38
  findDefaultSettings() {
39
- const query = `{
40
- findDefaultSettings {
41
- data {
42
- defaultSettingId
43
- settingValue
44
- }
45
- }
39
+ const query = `{
40
+ findDefaultSettings {
41
+ data {
42
+ defaultSettingId
43
+ settingValue
44
+ }
45
+ }
46
46
  }`;
47
47
  return this.httpClient.post(this.smartDataServiceUrl, { query }).pipe(map(response => response?.data?.findDefaultSettings?.data || []), catchError(error => {
48
48
  console.error('Error fetching default settings:', error);
@@ -55,17 +55,17 @@ export class UserSettingsService {
55
55
  * @returns Observable with the created staff setting
56
56
  */
57
57
  createStaffSetting(input) {
58
- const mutation = `
59
- mutation CreateStaffSetting($input: CreateStaffSettingInput!) {
60
- createStaffSetting(input: $input) {
61
- data {
62
- staffSettingId
63
- settingKey
64
- settingValue
65
- }
66
- message
67
- }
68
- }
58
+ const mutation = `
59
+ mutation CreateStaffSetting($input: CreateStaffSettingInput!) {
60
+ createStaffSetting(input: $input) {
61
+ data {
62
+ staffSettingId
63
+ settingKey
64
+ settingValue
65
+ }
66
+ message
67
+ }
68
+ }
69
69
  `;
70
70
  return this.httpClient.post(this.smartDataServiceUrl, {
71
71
  query: mutation,
@@ -81,18 +81,18 @@ export class UserSettingsService {
81
81
  * @returns Observable with the updated staff setting
82
82
  */
83
83
  updateStaffSetting(input) {
84
- const mutation = `
85
- mutation UpdateStaffSetting($input: UpdateStaffSettingInput!) {
86
- updateStaffSetting(input: $input) {
87
- data {
88
- staffSettingId
89
- staffId
90
- settingKey
91
- settingValue
92
- }
93
- message
94
- }
95
- }
84
+ const mutation = `
85
+ mutation UpdateStaffSetting($input: UpdateStaffSettingInput!) {
86
+ updateStaffSetting(input: $input) {
87
+ data {
88
+ staffSettingId
89
+ staffId
90
+ settingKey
91
+ settingValue
92
+ }
93
+ message
94
+ }
95
+ }
96
96
  `;
97
97
  return this.httpClient.post(this.smartDataServiceUrl, {
98
98
  query: mutation,
@@ -114,4 +114,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
114
114
  type: Inject,
115
115
  args: [SMART_DATA_SERVICE_URL]
116
116
  }] }] });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zZXR0aW5ncy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvdXNlci1zZXR0aW5ncy91c2VyLXNldHRpbmdzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7O0FBOEM5RSxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQ1UsVUFBc0IsRUFDVSxtQkFBMkI7UUFEM0QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBUTtJQUNsRSxDQUFDO0lBRUo7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLE9BQWU7UUFDL0IsTUFBTSxLQUFLLEdBQUc7cURBQ21DLE9BQU87Ozs7Ozs7O01BUXRELENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN4RSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsRUFDOUQsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkQsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUI7UUFDakIsTUFBTSxLQUFLLEdBQUc7Ozs7Ozs7TUFPWixDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDeEUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQ2hFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLEtBQThCO1FBQy9DLE1BQU0sUUFBUSxHQUFHOzs7Ozs7Ozs7OztLQVdoQixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDekQsS0FBSyxFQUFFLFFBQVE7WUFDZixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUU7U0FDckIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFDbEYsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsS0FBOEI7UUFDL0MsTUFBTSxRQUFRLEdBQUc7Ozs7Ozs7Ozs7OztLQVloQixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDekQsS0FBSyxFQUFFLFFBQVE7WUFDZixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUU7U0FDckIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFDbEYsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7aUlBcEhVLG1CQUFtQiw0Q0FHcEIsc0JBQXNCO3FJQUhyQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBSUksTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTTUFSVF9EQVRBX1NFUlZJQ0VfVVJMIH0gZnJvbSAnLi4vc21hcnQtc3RvcmFnZS9zbWFydC1zdG9yYWdlLW1vZGVsJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RhZmZTZXR0aW5nIHtcclxuICBzdGFmZlNldHRpbmdJZDogc3RyaW5nO1xyXG4gIHNldHRpbmdLZXk6IHN0cmluZztcclxuICBzZXR0aW5nVmFsdWU6IHN0cmluZztcclxuICBtb2RpZmllZEJ5OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdFNldHRpbmcge1xyXG4gIGRlZmF1bHRTZXR0aW5nSWQ6IHN0cmluZztcclxuICBzZXR0aW5nVmFsdWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTdGFmZlNldHRpbmdJbnB1dCB7XHJcbiAgc3RhZmZJZDogbnVtYmVyO1xyXG4gIHNldHRpbmdLZXk6IHN0cmluZztcclxuICBzZXR0aW5nVmFsdWU6IHN0cmluZztcclxuICBtb2RpZmllZEJ5OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlU3RhZmZTZXR0aW5nSW5wdXQge1xyXG4gIHdoZXJlOiB7XHJcbiAgICBzdGFmZlNldHRpbmdJZDogbnVtYmVyO1xyXG4gIH07XHJcbiAgZGF0YToge1xyXG4gICAgc3RhZmZJZDogbnVtYmVyO1xyXG4gICAgc2V0dGluZ0tleTogc3RyaW5nO1xyXG4gICAgc2V0dGluZ1ZhbHVlOiBzdHJpbmc7XHJcbiAgICBtb2RpZmllZEJ5OiBudW1iZXI7XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdGFmZlNldHRpbmdSZXNwb25zZSB7XHJcbiAgZGF0YToge1xyXG4gICAgc3RhZmZTZXR0aW5nSWQ6IG51bWJlcjtcclxuICAgIHN0YWZmSWQ/OiBudW1iZXI7XHJcbiAgICBzZXR0aW5nS2V5OiBzdHJpbmc7XHJcbiAgICBzZXR0aW5nVmFsdWU6IHN0cmluZztcclxuICB9O1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlclNldHRpbmdzU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBASW5qZWN0KFNNQVJUX0RBVEFfU0VSVklDRV9VUkwpIHByaXZhdGUgc21hcnREYXRhU2VydmljZVVybDogc3RyaW5nXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHN0YWZmIHNldHRpbmdzIGZvciBhIGdpdmVuIHN0YWZmIElEXHJcbiAgICogQHBhcmFtIHN0YWZmSWQgVGhlIElEIG9mIHRoZSBzdGFmZiBtZW1iZXJcclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHN0YWZmIHNldHRpbmdzIGFycmF5XHJcbiAgICovXHJcbiAgZmluZFN0YWZmU2V0dGluZ3Moc3RhZmZJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTdGFmZlNldHRpbmdbXT4ge1xyXG4gICAgY29uc3QgcXVlcnkgPSBge1xyXG4gICAgICBmaW5kU3RhZmZTZXR0aW5ncyhpbnB1dDogeyB3aGVyZTogeyBzdGFmZklkOiAke3N0YWZmSWR9IH0gfSkge1xyXG4gICAgICAgIGRhdGEge1xyXG4gICAgICAgICAgc3RhZmZTZXR0aW5nSWRcclxuICAgICAgICAgIHNldHRpbmdLZXlcclxuICAgICAgICAgIHNldHRpbmdWYWx1ZVxyXG4gICAgICAgICAgbW9kaWZpZWRCeVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfWA7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PGFueT4odGhpcy5zbWFydERhdGFTZXJ2aWNlVXJsLCB7IHF1ZXJ5IH0pLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZT8uZGF0YT8uZmluZFN0YWZmU2V0dGluZ3M/LmRhdGEgfHwgW10pLFxyXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBzdGFmZiBzZXR0aW5nczonLCBlcnJvcik7XHJcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGRlZmF1bHQgc2V0dGluZ3NcclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIGRlZmF1bHQgc2V0dGluZ3MgYXJyYXlcclxuICAgKi9cclxuICBmaW5kRGVmYXVsdFNldHRpbmdzKCk6IE9ic2VydmFibGU8RGVmYXVsdFNldHRpbmdbXT4ge1xyXG4gICAgY29uc3QgcXVlcnkgPSBge1xyXG4gICAgICBmaW5kRGVmYXVsdFNldHRpbmdzIHtcclxuICAgICAgICBkYXRhIHtcclxuICAgICAgICAgIGRlZmF1bHRTZXR0aW5nSWRcclxuICAgICAgICAgIHNldHRpbmdWYWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfWA7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PGFueT4odGhpcy5zbWFydERhdGFTZXJ2aWNlVXJsLCB7IHF1ZXJ5IH0pLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZT8uZGF0YT8uZmluZERlZmF1bHRTZXR0aW5ncz8uZGF0YSB8fCBbXSksXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGRlZmF1bHQgc2V0dGluZ3M6JywgZXJyb3IpO1xyXG4gICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG5ldyBzdGFmZiBzZXR0aW5nXHJcbiAgICogQHBhcmFtIGlucHV0IFRoZSBzdGFmZiBzZXR0aW5nIGRhdGEgdG8gY3JlYXRlXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB3aXRoIHRoZSBjcmVhdGVkIHN0YWZmIHNldHRpbmdcclxuICAgKi9cclxuICBjcmVhdGVTdGFmZlNldHRpbmcoaW5wdXQ6IENyZWF0ZVN0YWZmU2V0dGluZ0lucHV0KTogT2JzZXJ2YWJsZTxTdGFmZlNldHRpbmdSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgbXV0YXRpb24gPSBgXHJcbiAgICAgIG11dGF0aW9uIENyZWF0ZVN0YWZmU2V0dGluZygkaW5wdXQ6IENyZWF0ZVN0YWZmU2V0dGluZ0lucHV0ISkge1xyXG4gICAgICAgIGNyZWF0ZVN0YWZmU2V0dGluZyhpbnB1dDogJGlucHV0KSB7XHJcbiAgICAgICAgICBkYXRhIHtcclxuICAgICAgICAgICAgc3RhZmZTZXR0aW5nSWRcclxuICAgICAgICAgICAgc2V0dGluZ0tleVxyXG4gICAgICAgICAgICBzZXR0aW5nVmFsdWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG1lc3NhZ2VcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIGA7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PGFueT4odGhpcy5zbWFydERhdGFTZXJ2aWNlVXJsLCB7XHJcbiAgICAgIHF1ZXJ5OiBtdXRhdGlvbixcclxuICAgICAgdmFyaWFibGVzOiB7IGlucHV0IH1cclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZT8uZGF0YT8uY3JlYXRlU3RhZmZTZXR0aW5nIHx8IHsgZGF0YTogbnVsbCwgbWVzc2FnZTogJycgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIHN0YWZmIHNldHRpbmc6JywgZXJyb3IpO1xyXG4gICAgICAgIHJldHVybiBvZih7IGRhdGE6IG51bGwsIG1lc3NhZ2U6ICdGYWlsZWQgdG8gY3JlYXRlIHN0YWZmIHNldHRpbmcnIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3Rpbmcgc3RhZmYgc2V0dGluZ1xyXG4gICAqIEBwYXJhbSBpbnB1dCBUaGUgdXBkYXRlIGRhdGEgYW5kIGNvbmRpdGlvbnNcclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHdpdGggdGhlIHVwZGF0ZWQgc3RhZmYgc2V0dGluZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZVN0YWZmU2V0dGluZyhpbnB1dDogVXBkYXRlU3RhZmZTZXR0aW5nSW5wdXQpOiBPYnNlcnZhYmxlPFN0YWZmU2V0dGluZ1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBtdXRhdGlvbiA9IGBcclxuICAgICAgbXV0YXRpb24gVXBkYXRlU3RhZmZTZXR0aW5nKCRpbnB1dDogVXBkYXRlU3RhZmZTZXR0aW5nSW5wdXQhKSB7XHJcbiAgICAgICAgdXBkYXRlU3RhZmZTZXR0aW5nKGlucHV0OiAkaW5wdXQpIHtcclxuICAgICAgICAgIGRhdGEge1xyXG4gICAgICAgICAgICBzdGFmZlNldHRpbmdJZFxyXG4gICAgICAgICAgICBzdGFmZklkXHJcbiAgICAgICAgICAgIHNldHRpbmdLZXlcclxuICAgICAgICAgICAgc2V0dGluZ1ZhbHVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBtZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBgO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxhbnk+KHRoaXMuc21hcnREYXRhU2VydmljZVVybCwge1xyXG4gICAgICBxdWVyeTogbXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczogeyBpbnB1dCB9XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2U/LmRhdGE/LnVwZGF0ZVN0YWZmU2V0dGluZyB8fCB7IGRhdGE6IG51bGwsIG1lc3NhZ2U6ICcnIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB1cGRhdGluZyBzdGFmZiBzZXR0aW5nOicsIGVycm9yKTtcclxuICAgICAgICByZXR1cm4gb2YoeyBkYXRhOiBudWxsLCBtZXNzYWdlOiAnRmFpbGVkIHRvIHVwZGF0ZSBzdGFmZiBzZXR0aW5nJyB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zZXR0aW5ncy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvdXNlci1zZXR0aW5ncy91c2VyLXNldHRpbmdzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7O0FBOEM5RSxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQ1UsVUFBc0IsRUFDVSxtQkFBMkI7UUFEM0QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBUTtJQUNsRSxDQUFDO0lBRUo7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLE9BQWU7UUFDL0IsTUFBTSxLQUFLLEdBQUc7cURBQ21DLE9BQU87Ozs7Ozs7O01BUXRELENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN4RSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsRUFDOUQsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkQsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUI7UUFDakIsTUFBTSxLQUFLLEdBQUc7Ozs7Ozs7TUFPWixDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDeEUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQ2hFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLEtBQThCO1FBQy9DLE1BQU0sUUFBUSxHQUFHOzs7Ozs7Ozs7OztLQVdoQixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDekQsS0FBSyxFQUFFLFFBQVE7WUFDZixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUU7U0FDckIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFDbEYsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsS0FBOEI7UUFDL0MsTUFBTSxRQUFRLEdBQUc7Ozs7Ozs7Ozs7OztLQVloQixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDekQsS0FBSyxFQUFFLFFBQVE7WUFDZixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUU7U0FDckIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFDbEYsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7aUlBcEhVLG1CQUFtQiw0Q0FHcEIsc0JBQXNCO3FJQUhyQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBSUksTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU01BUlRfREFUQV9TRVJWSUNFX1VSTCB9IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2Uvc21hcnQtc3RvcmFnZS1tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZmZTZXR0aW5nIHtcbiAgc3RhZmZTZXR0aW5nSWQ6IHN0cmluZztcbiAgc2V0dGluZ0tleTogc3RyaW5nO1xuICBzZXR0aW5nVmFsdWU6IHN0cmluZztcbiAgbW9kaWZpZWRCeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRTZXR0aW5nIHtcbiAgZGVmYXVsdFNldHRpbmdJZDogc3RyaW5nO1xuICBzZXR0aW5nVmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTdGFmZlNldHRpbmdJbnB1dCB7XG4gIHN0YWZmSWQ6IG51bWJlcjtcbiAgc2V0dGluZ0tleTogc3RyaW5nO1xuICBzZXR0aW5nVmFsdWU6IHN0cmluZztcbiAgbW9kaWZpZWRCeTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVN0YWZmU2V0dGluZ0lucHV0IHtcbiAgd2hlcmU6IHtcbiAgICBzdGFmZlNldHRpbmdJZDogbnVtYmVyO1xuICB9O1xuICBkYXRhOiB7XG4gICAgc3RhZmZJZDogbnVtYmVyO1xuICAgIHNldHRpbmdLZXk6IHN0cmluZztcbiAgICBzZXR0aW5nVmFsdWU6IHN0cmluZztcbiAgICBtb2RpZmllZEJ5OiBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZmZTZXR0aW5nUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgc3RhZmZTZXR0aW5nSWQ6IG51bWJlcjtcbiAgICBzdGFmZklkPzogbnVtYmVyO1xuICAgIHNldHRpbmdLZXk6IHN0cmluZztcbiAgICBzZXR0aW5nVmFsdWU6IHN0cmluZztcbiAgfTtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVc2VyU2V0dGluZ3NTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoU01BUlRfREFUQV9TRVJWSUNFX1VSTCkgcHJpdmF0ZSBzbWFydERhdGFTZXJ2aWNlVXJsOiBzdHJpbmdcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHN0YWZmIHNldHRpbmdzIGZvciBhIGdpdmVuIHN0YWZmIElEXG4gICAqIEBwYXJhbSBzdGFmZklkIFRoZSBJRCBvZiB0aGUgc3RhZmYgbWVtYmVyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2Ygc3RhZmYgc2V0dGluZ3MgYXJyYXlcbiAgICovXG4gIGZpbmRTdGFmZlNldHRpbmdzKHN0YWZmSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8U3RhZmZTZXR0aW5nW10+IHtcbiAgICBjb25zdCBxdWVyeSA9IGB7XG4gICAgICBmaW5kU3RhZmZTZXR0aW5ncyhpbnB1dDogeyB3aGVyZTogeyBzdGFmZklkOiAke3N0YWZmSWR9IH0gfSkge1xuICAgICAgICBkYXRhIHtcbiAgICAgICAgICBzdGFmZlNldHRpbmdJZFxuICAgICAgICAgIHNldHRpbmdLZXlcbiAgICAgICAgICBzZXR0aW5nVmFsdWVcbiAgICAgICAgICBtb2RpZmllZEJ5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9YDtcblxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxhbnk+KHRoaXMuc21hcnREYXRhU2VydmljZVVybCwgeyBxdWVyeSB9KS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlPy5kYXRhPy5maW5kU3RhZmZTZXR0aW5ncz8uZGF0YSB8fCBbXSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3RhZmYgc2V0dGluZ3M6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgZGVmYXVsdCBzZXR0aW5nc1xuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIGRlZmF1bHQgc2V0dGluZ3MgYXJyYXlcbiAgICovXG4gIGZpbmREZWZhdWx0U2V0dGluZ3MoKTogT2JzZXJ2YWJsZTxEZWZhdWx0U2V0dGluZ1tdPiB7XG4gICAgY29uc3QgcXVlcnkgPSBge1xuICAgICAgZmluZERlZmF1bHRTZXR0aW5ncyB7XG4gICAgICAgIGRhdGEge1xuICAgICAgICAgIGRlZmF1bHRTZXR0aW5nSWRcbiAgICAgICAgICBzZXR0aW5nVmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1gO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PGFueT4odGhpcy5zbWFydERhdGFTZXJ2aWNlVXJsLCB7IHF1ZXJ5IH0pLnBpcGUoXG4gICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2U/LmRhdGE/LmZpbmREZWZhdWx0U2V0dGluZ3M/LmRhdGEgfHwgW10pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGRlZmF1bHQgc2V0dGluZ3M6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgc3RhZmYgc2V0dGluZ1xuICAgKiBAcGFyYW0gaW5wdXQgVGhlIHN0YWZmIHNldHRpbmcgZGF0YSB0byBjcmVhdGVcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB3aXRoIHRoZSBjcmVhdGVkIHN0YWZmIHNldHRpbmdcbiAgICovXG4gIGNyZWF0ZVN0YWZmU2V0dGluZyhpbnB1dDogQ3JlYXRlU3RhZmZTZXR0aW5nSW5wdXQpOiBPYnNlcnZhYmxlPFN0YWZmU2V0dGluZ1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgbXV0YXRpb24gPSBgXG4gICAgICBtdXRhdGlvbiBDcmVhdGVTdGFmZlNldHRpbmcoJGlucHV0OiBDcmVhdGVTdGFmZlNldHRpbmdJbnB1dCEpIHtcbiAgICAgICAgY3JlYXRlU3RhZmZTZXR0aW5nKGlucHV0OiAkaW5wdXQpIHtcbiAgICAgICAgICBkYXRhIHtcbiAgICAgICAgICAgIHN0YWZmU2V0dGluZ0lkXG4gICAgICAgICAgICBzZXR0aW5nS2V5XG4gICAgICAgICAgICBzZXR0aW5nVmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVzc2FnZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgYDtcblxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxhbnk+KHRoaXMuc21hcnREYXRhU2VydmljZVVybCwge1xuICAgICAgcXVlcnk6IG11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7IGlucHV0IH1cbiAgICB9KS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlPy5kYXRhPy5jcmVhdGVTdGFmZlNldHRpbmcgfHwgeyBkYXRhOiBudWxsLCBtZXNzYWdlOiAnJyB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhdGluZyBzdGFmZiBzZXR0aW5nOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKHsgZGF0YTogbnVsbCwgbWVzc2FnZTogJ0ZhaWxlZCB0byBjcmVhdGUgc3RhZmYgc2V0dGluZycgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBzdGFmZiBzZXR0aW5nXG4gICAqIEBwYXJhbSBpbnB1dCBUaGUgdXBkYXRlIGRhdGEgYW5kIGNvbmRpdGlvbnNcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB3aXRoIHRoZSB1cGRhdGVkIHN0YWZmIHNldHRpbmdcbiAgICovXG4gIHVwZGF0ZVN0YWZmU2V0dGluZyhpbnB1dDogVXBkYXRlU3RhZmZTZXR0aW5nSW5wdXQpOiBPYnNlcnZhYmxlPFN0YWZmU2V0dGluZ1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgbXV0YXRpb24gPSBgXG4gICAgICBtdXRhdGlvbiBVcGRhdGVTdGFmZlNldHRpbmcoJGlucHV0OiBVcGRhdGVTdGFmZlNldHRpbmdJbnB1dCEpIHtcbiAgICAgICAgdXBkYXRlU3RhZmZTZXR0aW5nKGlucHV0OiAkaW5wdXQpIHtcbiAgICAgICAgICBkYXRhIHtcbiAgICAgICAgICAgIHN0YWZmU2V0dGluZ0lkXG4gICAgICAgICAgICBzdGFmZklkXG4gICAgICAgICAgICBzZXR0aW5nS2V5XG4gICAgICAgICAgICBzZXR0aW5nVmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVzc2FnZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgYDtcblxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxhbnk+KHRoaXMuc21hcnREYXRhU2VydmljZVVybCwge1xuICAgICAgcXVlcnk6IG11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7IGlucHV0IH1cbiAgICB9KS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlPy5kYXRhPy51cGRhdGVTdGFmZlNldHRpbmcgfHwgeyBkYXRhOiBudWxsLCBtZXNzYWdlOiAnJyB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB1cGRhdGluZyBzdGFmZiBzZXR0aW5nOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKHsgZGF0YTogbnVsbCwgbWVzc2FnZTogJ0ZhaWxlZCB0byB1cGRhdGUgc3RhZmYgc2V0dGluZycgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1063,55 +1063,37 @@ class SmartAuthService {
1063
1063
  this.loginStaff = selData.loginStaff;
1064
1064
  this.selectedOffender = selData.selectedOffender;
1065
1065
  let routePath = '';
1066
- if (accessControlConfig.route.url &&
1067
- accessControlConfig.route.url.length > 0) {
1066
+ if (accessControlConfig.route.url && accessControlConfig.route.url.length > 0) {
1068
1067
  routePath = accessControlConfig.route.url[0].path;
1069
1068
  }
1070
1069
  const permissions = this.loginStaff.permissions;
1071
1070
  const resource = routePath;
1072
- const roleId = accessControlConfig.roleId
1073
- ? accessControlConfig.roleId.toUpperCase()
1074
- : null;
1071
+ const roleId = accessControlConfig.roleId?.toUpperCase() || null;
1075
1072
  const accessType = accessControlConfig.accessType;
1076
- const assignmentStaffRelationId = (!this.selectedOffender || !this.selectedOffender
1077
- .assignmentStaffRelationId)
1078
- ? 'N/A'
1079
- : this.selectedOffender.assignmentStaffRelationId;
1080
- const permission = permissions.find((p) => {
1081
- return (p.appModuleId === accessControlConfig.appModuleId &&
1082
- p.resource === resource &&
1083
- (!roleId || p.roleId === roleId) &&
1084
- (p.assignmentStaffRelationId === 'N/A' ||
1085
- p.assignmentStaffRelationId === assignmentStaffRelationId));
1086
- });
1087
- if (permission) {
1088
- if (accessType === 'read') {
1089
- if (!permission.readFlag) {
1090
- return false;
1091
- }
1092
- else {
1093
- return true;
1094
- }
1095
- }
1096
- else if ((accessType === 'create' && !permission.createFlag) ||
1097
- (accessType === 'update' && !permission.updateFlag) ||
1098
- (accessType === 'delete' && !permission.deleteFlag) ||
1099
- (accessType === 'assign' && !permission.assignFlag) ||
1100
- (accessType === 'close' && !permission.closeFlag) ||
1101
- (accessType === 'expunge' && !permission.expungeFlag) ||
1102
- (accessType === 'reopen' && !permission.reopenFlag)) {
1103
- return false;
1104
- }
1105
- else {
1106
- return true;
1107
- }
1108
- }
1109
- else {
1110
- if (accessType === 'read') {
1111
- return false;
1112
- }
1113
- }
1114
- return false;
1073
+ const assignmentStaffRelationId = this.selectedOffender?.assignmentStaffRelationId || 'N/A';
1074
+ // Find matching permissions (prioritize specific role over aggregated)
1075
+ const specificPermission = permissions.find(p => p.appModuleId === accessControlConfig.appModuleId &&
1076
+ p.resource.trim() === resource &&
1077
+ p.roleId.trim().toUpperCase() === roleId &&
1078
+ (p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId));
1079
+ const aggregatedPermission = permissions.find(p => p.appModuleId === accessControlConfig.appModuleId &&
1080
+ p.resource.trim() === resource &&
1081
+ p.roleId.trim() === '*' &&
1082
+ (p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId));
1083
+ const permission = specificPermission || aggregatedPermission;
1084
+ if (!permission)
1085
+ return false;
1086
+ const flagMap = {
1087
+ 'read': permission.readFlag,
1088
+ 'create': permission.createFlag,
1089
+ 'update': permission.updateFlag,
1090
+ 'delete': permission.deleteFlag,
1091
+ 'assign': permission.assignFlag,
1092
+ 'close': permission.closeFlag,
1093
+ 'expunge': permission.expungeFlag,
1094
+ 'reopen': permission.reopenFlag
1095
+ };
1096
+ return !!flagMap[accessType];
1115
1097
  }
1116
1098
  canAppFeatureActivate(loginStaff, feature, appModuleId = null) {
1117
1099
  // if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {
@@ -1647,15 +1629,15 @@ class UserSettingsService {
1647
1629
  * @returns Observable of staff settings array
1648
1630
  */
1649
1631
  findStaffSettings(staffId) {
1650
- const query = `{
1651
- findStaffSettings(input: { where: { staffId: ${staffId} } }) {
1652
- data {
1653
- staffSettingId
1654
- settingKey
1655
- settingValue
1656
- modifiedBy
1657
- }
1658
- }
1632
+ const query = `{
1633
+ findStaffSettings(input: { where: { staffId: ${staffId} } }) {
1634
+ data {
1635
+ staffSettingId
1636
+ settingKey
1637
+ settingValue
1638
+ modifiedBy
1639
+ }
1640
+ }
1659
1641
  }`;
1660
1642
  return this.httpClient.post(this.smartDataServiceUrl, { query }).pipe(map(response => response?.data?.findStaffSettings?.data || []), catchError(error => {
1661
1643
  console.error('Error fetching staff settings:', error);
@@ -1667,13 +1649,13 @@ class UserSettingsService {
1667
1649
  * @returns Observable of default settings array
1668
1650
  */
1669
1651
  findDefaultSettings() {
1670
- const query = `{
1671
- findDefaultSettings {
1672
- data {
1673
- defaultSettingId
1674
- settingValue
1675
- }
1676
- }
1652
+ const query = `{
1653
+ findDefaultSettings {
1654
+ data {
1655
+ defaultSettingId
1656
+ settingValue
1657
+ }
1658
+ }
1677
1659
  }`;
1678
1660
  return this.httpClient.post(this.smartDataServiceUrl, { query }).pipe(map(response => response?.data?.findDefaultSettings?.data || []), catchError(error => {
1679
1661
  console.error('Error fetching default settings:', error);
@@ -1686,17 +1668,17 @@ class UserSettingsService {
1686
1668
  * @returns Observable with the created staff setting
1687
1669
  */
1688
1670
  createStaffSetting(input) {
1689
- const mutation = `
1690
- mutation CreateStaffSetting($input: CreateStaffSettingInput!) {
1691
- createStaffSetting(input: $input) {
1692
- data {
1693
- staffSettingId
1694
- settingKey
1695
- settingValue
1696
- }
1697
- message
1698
- }
1699
- }
1671
+ const mutation = `
1672
+ mutation CreateStaffSetting($input: CreateStaffSettingInput!) {
1673
+ createStaffSetting(input: $input) {
1674
+ data {
1675
+ staffSettingId
1676
+ settingKey
1677
+ settingValue
1678
+ }
1679
+ message
1680
+ }
1681
+ }
1700
1682
  `;
1701
1683
  return this.httpClient.post(this.smartDataServiceUrl, {
1702
1684
  query: mutation,
@@ -1712,18 +1694,18 @@ class UserSettingsService {
1712
1694
  * @returns Observable with the updated staff setting
1713
1695
  */
1714
1696
  updateStaffSetting(input) {
1715
- const mutation = `
1716
- mutation UpdateStaffSetting($input: UpdateStaffSettingInput!) {
1717
- updateStaffSetting(input: $input) {
1718
- data {
1719
- staffSettingId
1720
- staffId
1721
- settingKey
1722
- settingValue
1723
- }
1724
- message
1725
- }
1726
- }
1697
+ const mutation = `
1698
+ mutation UpdateStaffSetting($input: UpdateStaffSettingInput!) {
1699
+ updateStaffSetting(input: $input) {
1700
+ data {
1701
+ staffSettingId
1702
+ staffId
1703
+ settingKey
1704
+ settingValue
1705
+ }
1706
+ message
1707
+ }
1708
+ }
1727
1709
  `;
1728
1710
  return this.httpClient.post(this.smartDataServiceUrl, {
1729
1711
  query: mutation,