vcomply-workflow-engine 3.4.22 → 3.4.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/esm2020/lib/add-multiple-responsibility/add-multiple-responsibility.component.mjs +2 -4
  2. package/esm2020/lib/add-multiple-risk/add-multiple-risk.component.mjs +2 -3
  3. package/esm2020/lib/formgroup/cs-select/cs-select.component.mjs +5 -5
  4. package/esm2020/lib/formgroup/cs-switch/cs-switch.component.mjs +1 -4
  5. package/esm2020/lib/log-an-issue/log-an-issue.component.mjs +1 -11
  6. package/esm2020/lib/more-option/more-option.component.mjs +5 -6
  7. package/esm2020/lib/pipes/filter.pipe.mjs +1 -2
  8. package/esm2020/lib/pipes/search.pipe.mjs +3 -5
  9. package/esm2020/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.mjs +3 -7
  10. package/esm2020/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.mjs +1 -5
  11. package/esm2020/lib/sharedComponents/approval-workflow/approval-workflow.component.mjs +1 -7
  12. package/esm2020/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.mjs +80 -36
  13. package/esm2020/lib/sharedComponents/assessment-list/assessment-list.component.mjs +27 -21
  14. package/esm2020/lib/sharedComponents/assessment-preview/preview/preview.component.mjs +7 -4
  15. package/esm2020/lib/sharedComponents/audit-category-list/audit-category-list.component.mjs +3 -4
  16. package/esm2020/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.mjs +3 -9
  17. package/esm2020/lib/sharedComponents/bulk-view/bulk-view.component.mjs +9 -7
  18. package/esm2020/lib/sharedComponents/category-multiselect/category-multi-select.component.mjs +6 -8
  19. package/esm2020/lib/sharedComponents/checkpoint/checkpoints/checkpoints.component.mjs +93 -27
  20. package/esm2020/lib/sharedComponents/checkpoint/checkpoints-questions/checkpoints-questions.component.mjs +11 -9
  21. package/esm2020/lib/sharedComponents/checkpoint-policy/checkpoints-policy-container/checkpoints-policy-container.component.mjs +13 -12
  22. package/esm2020/lib/sharedComponents/checkpoint-policy/checkpoints-policy-questions/checkpoints-policy-questions.component.mjs +28 -19
  23. package/esm2020/lib/sharedComponents/floating-bar/floating-bar.component.mjs +8 -8
  24. package/esm2020/lib/sharedComponents/format-and-evidence/format-and-evidence.component.mjs +35 -37
  25. package/esm2020/lib/sharedComponents/framework-list/parent-table/parent-table.component.mjs +7 -7
  26. package/esm2020/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.mjs +1 -12
  27. package/esm2020/lib/sharedComponents/frequency/frequency-container/frequency-container.component.mjs +1 -3
  28. package/esm2020/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.mjs +1 -13
  29. package/esm2020/lib/sharedComponents/frequency/frequency-due-date/frequency-due-date.component.mjs +1 -7
  30. package/esm2020/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.mjs +1 -26
  31. package/esm2020/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.mjs +1 -15
  32. package/esm2020/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.mjs +1 -14
  33. package/esm2020/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.mjs +14 -8
  34. package/esm2020/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.mjs +1 -13
  35. package/esm2020/lib/sharedComponents/frequency/frequency-radio-list/frequency-radio-list.component.mjs +1 -2
  36. package/esm2020/lib/sharedComponents/frequency/frequency-random/frequency-random.component.mjs +1 -18
  37. package/esm2020/lib/sharedComponents/frequency/frequency-top/frequency-top.component.mjs +2 -2
  38. package/esm2020/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.mjs +1 -12
  39. package/esm2020/lib/sharedComponents/frequency/frequency.service.mjs +2 -11
  40. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.mjs +1 -2
  41. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.mjs +1 -2
  42. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.mjs +1 -2
  43. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.mjs +1 -2
  44. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.mjs +1 -2
  45. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.mjs +1 -2
  46. package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.mjs +2 -2
  47. package/esm2020/lib/sharedComponents/group-users-list/group-users-list.component.mjs +1 -3
  48. package/esm2020/lib/sharedComponents/link-program/link-program/link-program.component.mjs +48 -38
  49. package/esm2020/lib/sharedComponents/link-program/restapi.service.mjs +31 -16
  50. package/esm2020/lib/sharedComponents/no-data/no-data.component.mjs +2 -4
  51. package/esm2020/lib/sharedComponents/owner-list/owner-list.component.mjs +12 -10
  52. package/esm2020/lib/sharedComponents/program-listing/program-listing.component.mjs +127 -58
  53. package/esm2020/lib/sharedComponents/radio-list-with-pagination/radio-list.component.mjs +4 -7
  54. package/esm2020/lib/sharedComponents/risk-classification/risk-classification.component.mjs +11 -6
  55. package/esm2020/lib/sharedComponents/select-approvers/select-approvers.component.mjs +1 -2
  56. package/esm2020/lib/sharedComponents/users-radio-list/users-radio-list.component.mjs +2 -3
  57. package/esm2020/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +1 -4
  58. package/esm2020/lib/ui-kit/popover/popover-longpress.directive.mjs +1 -3
  59. package/esm2020/lib/ui-kit/popover/popover.component.mjs +26 -12
  60. package/esm2020/lib/ui-kit/tooltip/tooltip.directive.mjs +8 -5
  61. package/esm2020/lib/workflow/shared/components/attributes/attributes.component.mjs +1 -2
  62. package/esm2020/lib/workflow/shared/components/edit-mode/edit-mode.component.mjs +1 -4
  63. package/esm2020/lib/workflow/shared/components/grc-object-list/grc-object-list.component.mjs +1 -2
  64. package/esm2020/lib/workflow/shared/components/list-popup/list-popup.component.mjs +1 -4
  65. package/esm2020/lib/workflow/shared/components/table-card/table-card.component.mjs +4 -8
  66. package/esm2020/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.mjs +245 -108
  67. package/esm2020/lib/workflow-assessment/workflow-assessment.component.mjs +2 -4
  68. package/esm2020/lib/workflow-compliance/workflow-compliance.component.mjs +10 -8
  69. package/esm2020/lib/workflow-engine-container/workflow-engine-container.component.mjs +1 -5
  70. package/esm2020/lib/workflow-policy/workflow-policy.component.mjs +5 -5
  71. package/esm2020/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.mjs +45 -45
  72. package/esm2020/lib/workflow-program/create-program-ui/define-framework-listing/define-framework-listing.component.mjs +43 -25
  73. package/esm2020/lib/workflow-program/create-program-ui/define-framework-listing/pipes/sub-cat-indeter.pipe.mjs +4 -4
  74. package/esm2020/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.mjs +1 -2
  75. package/esm2020/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.mjs +25 -14
  76. package/esm2020/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.mjs +6 -3
  77. package/esm2020/lib/workflow-program/create-program-ui/role-list/role-list.component.mjs +25 -19
  78. package/esm2020/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.mjs +1 -4
  79. package/esm2020/lib/workflow-program/workflow-program.component.mjs +232 -110
  80. package/esm2020/lib/workflow-services/add-risk.service.mjs +1 -2
  81. package/esm2020/lib/workflow-services/assessment.service.mjs +1 -5
  82. package/esm2020/lib/workflow-services/programs.service.mjs +173 -57
  83. package/fesm2015/vcomply-workflow-engine.mjs +1380 -938
  84. package/fesm2015/vcomply-workflow-engine.mjs.map +1 -1
  85. package/fesm2020/vcomply-workflow-engine.mjs +1390 -943
  86. package/fesm2020/vcomply-workflow-engine.mjs.map +1 -1
  87. package/lib/formgroup/cs-switch/cs-switch.component.d.ts +2 -3
  88. package/lib/sharedComponents/assessment-list/assessment-list.component.d.ts +4 -5
  89. package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts +2 -3
  90. package/lib/sharedComponents/bulk-view/bulk-view.component.d.ts +2 -3
  91. package/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.d.ts +2 -4
  92. package/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.d.ts +1 -1
  93. package/lib/sharedComponents/link-program/restapi.service.d.ts +3 -3
  94. package/lib/sharedComponents/no-data/no-data.component.d.ts +2 -4
  95. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +2 -3
  96. package/lib/workflow/shared/components/edit-mode/edit-mode.component.d.ts +2 -3
  97. package/lib/workflow/shared/components/list-popup/list-popup.component.d.ts +2 -3
  98. package/lib/workflow/shared/components/table-card/table-card.component.d.ts +2 -5
  99. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.d.ts +8 -9
  100. package/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.d.ts +2 -4
  101. package/package.json +1 -1
@@ -15,7 +15,8 @@ export class ProgramsService {
15
15
  }
16
16
  getRoles() {
17
17
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
18
- return this.http.get(this.env?.organizationGet + 'roles/getProgramRoles&bypass-businessCycle=true', { headers });
18
+ return this.http.get(this.env?.organizationGet +
19
+ 'roles/getProgramRoles&bypass-businessCycle=true', { headers });
19
20
  }
20
21
  /**
21
22
  * Uploads the given file to server
@@ -32,9 +33,12 @@ export class ProgramsService {
32
33
  }
33
34
  getResponsibilityCenterList() {
34
35
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
35
- return this.http.get(this.env?.complianceGet + 'responsibilityCenterTree&bypass-businessCycle=true', {
36
+ return this.http
37
+ .get(this.env?.complianceGet +
38
+ 'responsibilityCenterTree&bypass-businessCycle=true', {
36
39
  headers,
37
- }).pipe(retry(2));
40
+ })
41
+ .pipe(retry(2));
38
42
  }
39
43
  fetchRoleUsers(roles, page, searchKey) {
40
44
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
@@ -42,45 +46,63 @@ export class ProgramsService {
42
46
  if (page) {
43
47
  queryString += `&page=${page}`;
44
48
  }
45
- ;
46
- if (searchKey) { }
47
- return this.http.post(this.env.organizationPost + 'roles/getUserDetails&limit=30&bypass-businessCycle=true' + queryString, { role_ids: roles ?? [] }, { headers }).pipe(retry(2));
49
+ if (searchKey) {
50
+ }
51
+ return this.http
52
+ .post(this.env.organizationPost +
53
+ 'roles/getUserDetails&limit=30&bypass-businessCycle=true' +
54
+ queryString, { role_ids: roles ?? [] }, { headers })
55
+ .pipe(retry(2));
48
56
  }
49
57
  fetchAllRoleUsers(roles) {
50
58
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
51
- return this.http.post(this.env?.organizationPost + 'roles/getUserDetails&type=all&bypass-businessCycle=true', { role_ids: roles ?? [] }, { headers }).pipe(retry(2));
59
+ return this.http
60
+ .post(this.env?.organizationPost +
61
+ 'roles/getUserDetails&type=all&bypass-businessCycle=true', { role_ids: roles ?? [] }, { headers })
62
+ .pipe(retry(2));
52
63
  }
53
64
  fetchAllRoleGroups(roles) {
54
65
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
55
- return this.http.post(this.env.organizationPost + 'roles/getGroupDetails&type=all&bypass-businessCycle=true', { role_ids: roles ?? [] }, { headers }).pipe(retry(2));
66
+ return this.http
67
+ .post(this.env.organizationPost +
68
+ 'roles/getGroupDetails&type=all&bypass-businessCycle=true', { role_ids: roles ?? [] }, { headers })
69
+ .pipe(retry(2));
56
70
  }
57
71
  fetchAllOrgUser() {
58
72
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
59
73
  //https://devapi.v-comply.com/organization/?mode=organisationUsersList&paginationType=small&admin=1
60
- return this.http.get(this.env?.organizationGet + 'organisationUsersList&paginationType=small&bypass-businessCycle=true', { headers }).pipe(retry(2));
74
+ return this.http
75
+ .get(this.env?.organizationGet +
76
+ 'organisationUsersList&paginationType=small&bypass-businessCycle=true', { headers })
77
+ .pipe(retry(2));
61
78
  }
62
79
  fetchComplianceGroups() {
63
80
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
64
81
  //https://devapi.v-comply.com/organization/?mode=groupsList&status=1&type=compliance
65
- return this.http.get(this.env?.organizationGet + 'groupsList&status=1&type=compliance&bypass-businessCycle=true', { headers }).pipe(retry(2));
82
+ return this.http
83
+ .get(this.env?.organizationGet +
84
+ 'groupsList&status=1&type=compliance&bypass-businessCycle=true', { headers })
85
+ .pipe(retry(2));
66
86
  }
67
87
  getBusinessCycle() {
68
- const businessCycle = JSON.parse(localStorage.getItem("businessCycle") ?? '{}');
88
+ const businessCycle = JSON.parse(localStorage.getItem('businessCycle') ?? '{}');
69
89
  return {
70
90
  selected_cycle: businessCycle
71
91
  ? businessCycle?.selectedCycle?.start_date +
72
- "-" +
92
+ '-' +
73
93
  businessCycle?.selectedCycle?.end_date
74
- : "",
75
- start_date: businessCycle ? businessCycle?.selectedCycle?.start_date : "",
76
- end_date: businessCycle ? businessCycle?.selectedCycle?.end_date : "",
94
+ : '',
95
+ start_date: businessCycle ? businessCycle?.selectedCycle?.start_date : '',
96
+ end_date: businessCycle ? businessCycle?.selectedCycle?.end_date : '',
77
97
  selected_cycle_arr: businessCycle
78
98
  ? businessCycle?.selectedCycle?.selected_cycle_arr
79
99
  : [],
80
100
  };
81
101
  }
82
102
  saveProgram(payload) {
83
- const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken()).set('x-business-cycle', JSON.stringify((this.getBusinessCycle())));
103
+ const headers = new HttpHeaders()
104
+ .set('token', this.authService.getAuthorizationToken())
105
+ .set('x-business-cycle', JSON.stringify(this.getBusinessCycle()));
84
106
  return this.http.post(this.env.programEndpoint + '/category/?isBusinessCycle=true', payload, { headers });
85
107
  }
86
108
  buildPayload(formData, instance) {
@@ -90,51 +112,123 @@ export class ProgramsService {
90
112
  const payload = {
91
113
  mode: 'program',
92
114
  name: form?.program_name.trim() ?? '',
93
- description: { text: form?.program_description ?? '', attachments: form?.program_description_attachments ?? [] },
94
- program_objective: { text: form?.program_objective ?? '', attachments: form?.objective_attachment ?? [] },
95
- roles: form.program_roles.map((ele) => { return { roleId: ele?._id, roleName: ele?.roleName, licenseType: ele?.licenseType }; }),
115
+ description: {
116
+ text: form?.program_description ?? '',
117
+ attachments: form?.program_description_attachments ?? [],
118
+ },
119
+ program_objective: {
120
+ text: form?.program_objective ?? '',
121
+ attachments: form?.objective_attachment ?? [],
122
+ },
123
+ roles: form.program_roles.map((ele) => {
124
+ return {
125
+ roleId: ele?._id,
126
+ roleName: ele?.roleName,
127
+ licenseType: ele?.licenseType,
128
+ };
129
+ }),
96
130
  owners: this.listToId(form?.program_owners, 'member_id') ?? [],
97
- owners_group: option?.ROLES ? this.listToId(form?.program_owners_group, 'group_id') ?? [] : [],
131
+ owners_group: option?.ROLES
132
+ ? this.listToId(form?.program_owners_group, 'group_id') ?? []
133
+ : [],
98
134
  all_user_in_role: option?.ROLES ? form?.all_user_in_role ?? false : false,
99
135
  programType: form?.program_type ?? 0,
100
136
  // state:0,
101
137
  state: form?.program_state ?? 0,
102
- approvers: (option?.APPROVER || !hasProgramFullPermission) ? this.listToId(form?.program_approver, 'member_id') ?? [] : [],
138
+ approvers: option?.APPROVER || !hasProgramFullPermission
139
+ ? this.listToId(form?.program_approver, 'member_id') ?? []
140
+ : [],
103
141
  calculate_past_upcoming_event: form?.performance_calculation ?? '',
104
- program_frequency: (option.PROGRAM_FREQUENCY || !hasProgramFullPermission) ? (form?.recurring_frequency ? 1 : 0) : 1,
105
- lock_scope: (option.SCOPE_CHANGES || !hasProgramFullPermission) ? (form?.lock_scope_change ? 1 : 0) : 0,
106
- rc_ids: (option.RC || !hasProgramFullPermission) ? this.listToId(form?.rc, 'item_id') : [],
107
- assignee_ids: (option.ASSIGNEES || !hasProgramFullPermission) ? this.listToId(form?.program_assignee, 'member_id') : [],
108
- assignee_group_ids: (option.ASSIGNEES || !hasProgramFullPermission) ? this.listToId(form?.program_assignee_group, 'group_id') : [],
109
- default_assignee_ids: (option.ASSIGNEES || !hasProgramFullPermission) ? this.listToId(form?.program_default_assignee, 'member_id') : [],
110
- default_assignee_group_ids: (option.ASSIGNEES || !hasProgramFullPermission) ? this.listToId(form?.program_default_assignee_group, 'group_id') : [],
111
- default_assignee_type: (option.ASSIGNEES || !hasProgramFullPermission) ? form?.assignee_completion_criteria : 'ALL',
112
- reviewers: (option.REVIEWER || !hasProgramFullPermission) ? this.listToId(form?.program_reviewer, 'member_id') : [],
113
- reviewer_group_ids: (option.REVIEWER || !hasProgramFullPermission) ? this.listToId(form?.program_reviewer_group, 'group_id') : [],
114
- default_reviewers: (option.REVIEWER || !hasProgramFullPermission) ? this.listToId(form?.program_default_reviewer, 'member_id') : [],
115
- default_reviewer_group_ids: (option.REVIEWER || !hasProgramFullPermission) ? this.listToId(form?.program_default_reviewer_group, 'group_id') : [],
142
+ program_frequency: option.PROGRAM_FREQUENCY || !hasProgramFullPermission
143
+ ? form?.recurring_frequency
144
+ ? 1
145
+ : 0
146
+ : 1,
147
+ lock_scope: option.SCOPE_CHANGES || !hasProgramFullPermission
148
+ ? form?.lock_scope_change
149
+ ? 1
150
+ : 0
151
+ : 0,
152
+ rc_ids: option.RC || !hasProgramFullPermission
153
+ ? this.listToId(form?.rc, 'item_id')
154
+ : [],
155
+ assignee_ids: option.ASSIGNEES || !hasProgramFullPermission
156
+ ? this.listToId(form?.program_assignee, 'member_id')
157
+ : [],
158
+ assignee_group_ids: option.ASSIGNEES || !hasProgramFullPermission
159
+ ? this.listToId(form?.program_assignee_group, 'group_id')
160
+ : [],
161
+ default_assignee_ids: option.ASSIGNEES || !hasProgramFullPermission
162
+ ? this.listToId(form?.program_default_assignee, 'member_id')
163
+ : [],
164
+ default_assignee_group_ids: option.ASSIGNEES || !hasProgramFullPermission
165
+ ? this.listToId(form?.program_default_assignee_group, 'group_id')
166
+ : [],
167
+ default_assignee_type: option.ASSIGNEES || !hasProgramFullPermission
168
+ ? form?.assignee_completion_criteria
169
+ : 'ALL',
170
+ reviewers: option.REVIEWER || !hasProgramFullPermission
171
+ ? this.listToId(form?.program_reviewer, 'member_id')
172
+ : [],
173
+ reviewer_group_ids: option.REVIEWER || !hasProgramFullPermission
174
+ ? this.listToId(form?.program_reviewer_group, 'group_id')
175
+ : [],
176
+ default_reviewers: option.REVIEWER || !hasProgramFullPermission
177
+ ? this.listToId(form?.program_default_reviewer, 'member_id')
178
+ : [],
179
+ default_reviewer_group_ids: option.REVIEWER || !hasProgramFullPermission
180
+ ? this.listToId(form?.program_default_reviewer_group, 'group_id')
181
+ : [],
116
182
  default_reviewers_type: form?.reviewer_completion_criteria,
117
- overseers: (option.OVERSEER || !hasProgramFullPermission) ? { cc_email: this.listToId(form?.program_overseer, 'member_id'), cc_email_groups: this.listToId(form?.program_overseer_group, 'group_id'),
118
- failure_cc_email: [], failure_cc_email_groups: [] } : { cc_email: [], cc_email_groups: [],
119
- failure_cc_email: [], failure_cc_email_groups: [] },
120
- default_overseers: (option.OVERSEER || !hasProgramFullPermission) ? { cc_email: this.listToId(form?.program_default_overseer, 'member_id'),
121
- cc_email_groups: this.listToId(form?.program_default_overseer_group, 'group_id'),
122
- failure_cc_email: this.listToId(form?.program_default_failed_overseer, 'member_id'),
123
- failure_cc_email_groups: this.listToId(form?.program_default_failed_overseer_group, 'group_id') } :
124
- { cc_email: [], cc_email_groups: [], failure_cc_email: [], failure_cc_email_groups: [] },
125
- assessment: (option?.ASSESSMENT || !hasProgramFullPermission) ? this.generateAssessment(form.program_assessments) : [],
126
- evidence_upload_flag: (option?.FORMATE_EVIDENCE || !hasProgramFullPermission) ? form?.evidence_required ? 1 : 0 : 0,
183
+ overseers: option.OVERSEER || !hasProgramFullPermission
184
+ ? {
185
+ cc_email: this.listToId(form?.program_overseer, 'member_id'),
186
+ cc_email_groups: this.listToId(form?.program_overseer_group, 'group_id'),
187
+ failure_cc_email: [],
188
+ failure_cc_email_groups: [],
189
+ }
190
+ : {
191
+ cc_email: [],
192
+ cc_email_groups: [],
193
+ failure_cc_email: [],
194
+ failure_cc_email_groups: [],
195
+ },
196
+ default_overseers: option.OVERSEER || !hasProgramFullPermission
197
+ ? {
198
+ cc_email: this.listToId(form?.program_default_overseer, 'member_id'),
199
+ cc_email_groups: this.listToId(form?.program_default_overseer_group, 'group_id'),
200
+ failure_cc_email: this.listToId(form?.program_default_failed_overseer, 'member_id'),
201
+ failure_cc_email_groups: this.listToId(form?.program_default_failed_overseer_group, 'group_id'),
202
+ }
203
+ : {
204
+ cc_email: [],
205
+ cc_email_groups: [],
206
+ failure_cc_email: [],
207
+ failure_cc_email_groups: [],
208
+ },
209
+ assessment: option?.ASSESSMENT || !hasProgramFullPermission
210
+ ? this.generateAssessment(form.program_assessments)
211
+ : [],
212
+ evidence_upload_flag: option?.FORMATE_EVIDENCE || !hasProgramFullPermission
213
+ ? form?.evidence_required
214
+ ? 1
215
+ : 0
216
+ : 0,
127
217
  is_key_evidence: form?.allow_any_file_key_evidence,
128
218
  custom_fields: option?.CUSTOM_FIELDS ? form?.custom_fields ?? [] : [],
129
219
  framework: this.getFramework(form?.framework) ?? [],
130
220
  _id: instance.mode === 'EDIT' ? instance.programId : undefined,
131
221
  };
132
- console.log("payload", payload);
133
222
  return payload;
134
223
  }
135
224
  generateAssessment(assessment) {
136
225
  if (assessment && assessment?.length) {
137
- return assessment.map((cat) => { return { ...cat, assessmentIds: cat.assessmentIds?.map((assess) => assess.id) }; });
226
+ return assessment.map((cat) => {
227
+ return {
228
+ ...cat,
229
+ assessmentIds: cat.assessmentIds?.map((assess) => assess.id),
230
+ };
231
+ });
138
232
  }
139
233
  else {
140
234
  return [];
@@ -142,13 +236,19 @@ export class ProgramsService {
142
236
  }
143
237
  getFramework(input) {
144
238
  if (input) {
145
- return [{
239
+ return [
240
+ {
146
241
  _id: input?._id,
147
242
  framework_name: input?.name,
148
243
  type: input?.type,
149
- in_scope: input?.in_scope ? this.listToId(input?.in_scope, '_id') : [],
150
- out_scope: input?.out_scope ? this.listToId(input?.out_scope, '_id') : []
151
- }];
244
+ in_scope: input?.in_scope
245
+ ? this.listToId(input?.in_scope, '_id')
246
+ : [],
247
+ out_scope: input?.out_scope
248
+ ? this.listToId(input?.out_scope, '_id')
249
+ : [],
250
+ },
251
+ ];
152
252
  }
153
253
  else {
154
254
  return [];
@@ -168,8 +268,13 @@ export class ProgramsService {
168
268
  * @returns
169
269
  */
170
270
  getProgram(id) {
171
- const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken()).set('x-business-cycle', JSON.stringify((this.getBusinessCycle())));
172
- return this.http.get(this.env?.programEndpoint + '/' + id + '?isBusinessCycle=true&bypass-businessCycle=true', { headers });
271
+ const headers = new HttpHeaders()
272
+ .set('token', this.authService.getAuthorizationToken())
273
+ .set('x-business-cycle', JSON.stringify(this.getBusinessCycle()));
274
+ return this.http.get(this.env?.programEndpoint +
275
+ '/' +
276
+ id +
277
+ '?isBusinessCycle=true&bypass-businessCycle=true', { headers });
173
278
  }
174
279
  /**
175
280
  *
@@ -178,16 +283,27 @@ export class ProgramsService {
178
283
  * @returns
179
284
  */
180
285
  updateProgram(payload, id) {
181
- const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken()).set('x-business-cycle', JSON.stringify((this.getBusinessCycle())));
182
- return this.http.post(this.env.programEndpoint + '/category/editCategory/' + id + '?isBusinessCycle=true&bypass-businessCycle=true', payload, { headers });
286
+ const headers = new HttpHeaders()
287
+ .set('token', this.authService.getAuthorizationToken())
288
+ .set('x-business-cycle', JSON.stringify(this.getBusinessCycle()));
289
+ return this.http.post(this.env.programEndpoint +
290
+ '/category/editCategory/' +
291
+ id +
292
+ '?isBusinessCycle=true&bypass-businessCycle=true', payload, { headers });
183
293
  }
184
294
  getMemeberByIds(ids) {
185
295
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
186
- return this.http.post(this.env.organizationPost + 'memberDetailsbyIds&bypass-businessCycle=true', { member_id: ids }, { headers }).pipe(retry(2));
296
+ return this.http
297
+ .post(this.env.organizationPost +
298
+ 'memberDetailsbyIds&bypass-businessCycle=true', { member_id: ids }, { headers })
299
+ .pipe(retry(2));
187
300
  }
188
301
  getMemberByGroups(ids) {
189
302
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
190
- return this.http.post(this.env.organizationPost + 'groupDetailsbyIds&bypass-businessCycle=true', { group_ids: ids }, { headers }).pipe(retry(2));
303
+ return this.http
304
+ .post(this.env.organizationPost +
305
+ 'groupDetailsbyIds&bypass-businessCycle=true', { group_ids: ids }, { headers })
306
+ .pipe(retry(2));
191
307
  }
192
308
  }
193
309
  ProgramsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProgramsService, deps: [{ token: i1.HttpClient }, { token: i2.AuthService }, { token: i3.Configurations, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -195,9 +311,9 @@ ProgramsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", vers
195
311
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProgramsService, decorators: [{
196
312
  type: Injectable,
197
313
  args: [{
198
- providedIn: 'root'
314
+ providedIn: 'root',
199
315
  }]
200
316
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.Configurations, decorators: [{
201
317
  type: Optional
202
318
  }] }]; } });
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXNlcnZpY2VzL3Byb2dyYW1zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBTzdCLE1BQU0sT0FBTyxlQUFlO0lBRzFCLFlBQW9CLElBQWdCLEVBQVUsV0FBd0IsRUFBYyxNQUF1QjtRQUF2RixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDcEUsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FFN0I7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUN6RixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZUFBZSxHQUFHLGlEQUFpRCxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUNoSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsT0FBWSxFQUFFLElBQVM7UUFDakMsSUFBSTtRQUNKLDBCQUEwQjtRQUMxQix1QkFBdUI7UUFDdkIsTUFBTSxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMs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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyByZXRyeSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmFtc1NlcnZpY2Uge1xyXG5cclxuICBlbnYgITogYW55O1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIEBPcHRpb25hbCgpIGNvbmZpZz86IENvbmZpZ3VyYXRpb25zKSB7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuZW52ID0gY29uZmlnLmVudkNvbmZpZztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSb2xlcygpe1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuZW52Py5vcmdhbml6YXRpb25HZXQgKyAncm9sZXMvZ2V0UHJvZ3JhbVJvbGVzJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLHtoZWFkZXJzfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGxvYWRzIHRoZSBnaXZlbiBmaWxlIHRvIHNlcnZlclxyXG4gICAqIEBwYXJhbSBwYXlsb2FkIHBheWxvYWQgRmlsZSBkYXRhIHRvIGJlIHVwbG9hZGVkXHJcbiAgICogQHBhcmFtIHBhdGggcGF0aCBQYXRoIG9mIGZpbGUgdG8gYmUgdXBsb2FkZWRcclxuICAgKiBAcmV0dXJucyByZXNwb25zZSBhZnRlciB1cGxvYWRpbmcgYSBmaWxlXHJcbiAgICovXHJcbiAgdXBsb2FkRmlsZXMocGF5bG9hZDogYW55LCBwYXRoOiBhbnkpIHtcclxuICAgIC8vIHtcclxuICAgIC8vICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAvLyAgIG9ic2VydmU6ICdldmVudHMnfVxyXG4gICAgY29uc3QgT1JHX1BBVEggPSBgby8ke3BhdGh9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmVudi5maWxlVXBsb2FkRW5kUG9pbnQgKyBPUkdfUEFUSCAgKyAnJm5nc3ctYnlwYXNzPXRydWUnLCBwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIGdldFJlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdCgpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4odGhpcy5lbnY/LmNvbXBsaWFuY2VHZXQgKyAncmVzcG9uc2liaWxpdHlDZW50ZXJUcmVlJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLCB7XHJcbiAgICAgICAgaGVhZGVycyxcclxuICAgICAgfSkucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZmV0Y2hSb2xlVXNlcnMocm9sZXM6YW55LHBhZ2U/OmFueSwgc2VhcmNoS2V5Pzphbnkpe1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIGxldCBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgaWYocGFnZSl7IHF1ZXJ5U3RyaW5nICs9IGAmcGFnZT0ke3BhZ2V9YH07XHJcbiAgICBpZihzZWFyY2hLZXkpe31cclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odGhpcy5lbnYub3JnYW5pemF0aW9uUG9zdCArICdyb2xlcy9nZXRVc2VyRGV0YWlscyZsaW1pdD0zMCZieXBhc3MtYnVzaW5lc3NDeWNsZT10cnVlJytxdWVyeVN0cmluZyx7IHJvbGVfaWRzIDpyb2xlcyA/PyBbXX0sIHtoZWFkZXJzfSkucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBmZXRjaEFsbFJvbGVVc2Vycyhyb2xlczphbnkpe1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odGhpcy5lbnY/Lm9yZ2FuaXphdGlvblBvc3QgKyAncm9sZXMvZ2V0VXNlckRldGFpbHMmdHlwZT1hbGwmYnlwYXNzLWJ1c2luZXNzQ3ljbGU9dHJ1ZScseyByb2xlX2lkcyA6cm9sZXMgPz8gW119LCB7aGVhZGVyc30pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hBbGxSb2xlR3JvdXBzKHJvbGVzOmFueSl7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueVtdPih0aGlzLmVudi5vcmdhbml6YXRpb25Qb3N0ICsgJ3JvbGVzL2dldEdyb3VwRGV0YWlscyZ0eXBlPWFsbCZieXBhc3MtYnVzaW5lc3NDeWNsZT10cnVlJyx7IHJvbGVfaWRzIDpyb2xlcyA/PyBbXX0sIHtoZWFkZXJzfSkucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG4gIGZldGNoQWxsT3JnVXNlcigpe1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIC8vaHR0cHM6Ly9kZXZhcGkudi1jb21wbHkuY29tL29yZ2FuaXphdGlvbi8/bW9kZT1vcmdhbmlzYXRpb25Vc2Vyc0xpc3QmcGFnaW5hdGlvblR5cGU9c21hbGwmYWRtaW49MVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52Py5vcmdhbml6YXRpb25HZXQgKyAnb3JnYW5pc2F0aW9uVXNlcnNMaXN0JnBhZ2luYXRpb25UeXBlPXNtYWxsJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLCB7aGVhZGVyc30pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuICBmZXRjaENvbXBsaWFuY2VHcm91cHMoKXtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgICAvL2h0dHBzOi8vZGV2YXBpLnYtY29tcGx5LmNvbS9vcmdhbml6YXRpb24vP21vZGU9Z3JvdXBzTGlzdCZzdGF0dXM9MSZ0eXBlPWNvbXBsaWFuY2VcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmVudj8ub3JnYW5pemF0aW9uR2V0ICsgJ2dyb3Vwc0xpc3Qmc3RhdHVzPTEmdHlwZT1jb21wbGlhbmNlJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLCB7aGVhZGVyc30pLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnVzaW5lc3NDeWNsZSgpe1xyXG4gICAgY29uc3QgYnVzaW5lc3NDeWNsZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0N5Y2xlXCIpID8/ICd7fScpO1xyXG4gICByZXR1cm4ge1xyXG4gICAgICBzZWxlY3RlZF9jeWNsZTogYnVzaW5lc3NDeWNsZVxyXG4gICAgICAgID8gYnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRDeWNsZT8uc3RhcnRfZGF0ZSArXHJcbiAgICAgICAgXCItXCIgK1xyXG4gICAgICAgIGJ1c2luZXNzQ3ljbGU/LnNlbGVjdGVkQ3ljbGU/LmVuZF9kYXRlXHJcbiAgICAgICAgOiBcIlwiLFxyXG4gICAgICBzdGFydF9kYXRlOiBidXNpbmVzc0N5Y2xlID8gYnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRDeWNsZT8uc3RhcnRfZGF0ZSA6IFwiXCIsXHJcbiAgICAgIGVuZF9kYXRlOiBidXNpbmVzc0N5Y2xlID8gYnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRDeWNsZT8uZW5kX2RhdGUgOiBcIlwiLFxyXG4gICAgICBzZWxlY3RlZF9jeWNsZV9hcnI6IGJ1c2luZXNzQ3ljbGVcclxuICAgICAgICA/IGJ1c2luZXNzQ3ljbGU/LnNlbGVjdGVkQ3ljbGU/LnNlbGVjdGVkX2N5Y2xlX2FyclxyXG4gICAgICAgIDogW10sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2F2ZVByb2dyYW0ocGF5bG9hZDphbnkpe1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKS5zZXQoJ3gtYnVzaW5lc3MtY3ljbGUnLCAgSlNPTi5zdHJpbmdpZnkoKHRoaXMuZ2V0QnVzaW5lc3NDeWNsZSgpKSkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueVtdPih0aGlzLmVudi5wcm9ncmFtRW5kcG9pbnQgKyAnL2NhdGVnb3J5Lz9pc0J1c2luZXNzQ3ljbGU9dHJ1ZScscGF5bG9hZCwge2hlYWRlcnN9KTtcclxuICB9XHJcblxyXG5cclxuIGJ1aWxkUGF5bG9hZChmb3JtRGF0YTphbnksaW5zdGFuY2U6YW55KXtcclxuY29uc3QgZm9ybSA9IGZvcm1EYXRhPy52YWx1ZTtcclxuY29uc3Qgb3B0aW9uID0gaW5zdGFuY2UuYWRkaXRpb25hbE9wdGlvbjtcclxuY29uc3QgaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uID0gaW5zdGFuY2U/Lm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbjtcclxuY29uc3QgcGF5bG9hZCA9IHtcclxuICBtb2RlOiAncHJvZ3JhbScsXHJcbiAgbmFtZTpmb3JtPy5wcm9ncmFtX25hbWUudHJpbSgpID8/ICcnLFxyXG4gIGRlc2NyaXB0aW9uOnt0ZXh0OmZvcm0/LnByb2dyYW1fZGVzY3JpcHRpb24gPz8gJycsYXR0YWNobWVudHM6Zm9ybT8ucHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cyA/PyBbXX0sXHJcbiAgcHJvZ3JhbV9vYmplY3RpdmUgOiB7dGV4dDpmb3JtPy5wcm9ncmFtX29iamVjdGl2ZSA/PyAnJyxhdHRhY2htZW50czpmb3JtPy5vYmplY3RpdmVfYXR0YWNobWVudCA/PyBbXX0sXHJcbiAgcm9sZXM6ICAgZm9ybS5wcm9ncmFtX3JvbGVzLm1hcCgoZWxlOmFueSkgPT4ge3JldHVybiB7cm9sZUlkOmVsZT8uX2lkLHJvbGVOYW1lOmVsZT8ucm9sZU5hbWUsIGxpY2Vuc2VUeXBlOmVsZT8ubGljZW5zZVR5cGV9fSksXHJcbiAgb3duZXJzOnRoaXMubGlzdFRvSWQoZm9ybT8ucHJvZ3JhbV9vd25lcnMsJ21lbWJlcl9pZCcpID8/IFtdLFxyXG4gIG93bmVyc19ncm91cDogb3B0aW9uPy5ST0xFUyA/IHRoaXMubGlzdFRvSWQoZm9ybT8ucHJvZ3JhbV9vd25lcnNfZ3JvdXAsJ2dyb3VwX2lkJykgPz8gW10gOiBbXSxcclxuICBhbGxfdXNlcl9pbl9yb2xlOiBvcHRpb24/LlJPTEVTICAgPyBmb3JtPy5hbGxfdXNlcl9pbl9yb2xlID8/IGZhbHNlOiBmYWxzZSxcclxuICBwcm9ncmFtVHlwZTpmb3JtPy5wcm9ncmFtX3R5cGUgPz8gMCxcclxuICAvLyBzdGF0ZTowLFxyXG4gIHN0YXRlOiBmb3JtPy5wcm9ncmFtX3N0YXRlID8/IDAsXHJcbiAgYXBwcm92ZXJzOiAob3B0aW9uPy5BUFBST1ZFUiB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSA/IHRoaXMubGlzdFRvSWQoZm9ybT8ucHJvZ3JhbV9hcHByb3ZlciwnbWVtYmVyX2lkJykgPz8gW10gOiBbXSxcclxuICBjYWxjdWxhdGVfcGFzdF91cGNvbWluZ19ldmVudDogZm9ybT8ucGVyZm9ybWFuY2VfY2FsY3VsYXRpb24gPz8gJycsXHJcbiAgcHJvZ3JhbV9mcmVxdWVuY3kgOiAob3B0aW9uLlBST0dSQU1fRlJFUVVFTkNZIHx8ICFoYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pICA/IChmb3JtPy5yZWN1cnJpbmdfZnJlcXVlbmN5ID8gMSA6IDAgKTogMSxcclxuICBsb2NrX3Njb3BlOiAob3B0aW9uLlNDT1BFX0NIQU5HRVMgfHwgIWhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikgPyAoZm9ybT8ubG9ja19zY29wZV9jaGFuZ2UgPyAxIDowICk6IDAgLFxyXG4gIHJjX2lkczogKG9wdGlvbi5SQyB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSA/ICB0aGlzLmxpc3RUb0lkKGZvcm0/LnJjLCdpdGVtX2lkJyk6W10sXHJcbiAgYXNzaWduZWVfaWRzOiAob3B0aW9uLkFTU0lHTkVFUyB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSA/ICB0aGlzLmxpc3RUb0lkKGZvcm0/LnByb2dyYW1fYXNzaWduZWUsJ21lbWJlcl9pZCcpIDpbXSxcclxuICBhc3NpZ25lZV9ncm91cF9pZHM6KG9wdGlvbi5BU1NJR05FRVMgfHwgIWhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikgPyB0aGlzLmxpc3RUb0lkKGZvcm0/LnByb2dyYW1fYXNzaWduZWVfZ3JvdXAsJ2dyb3VwX2lkJyk6W10sXHJcbiAgZGVmYXVsdF9hc3NpZ25lZV9pZHMgOiAob3B0aW9uLkFTU0lHTkVFUyB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSA/ICB0aGlzLmxpc3RUb0lkKGZvcm0/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZSwnbWVtYmVyX2lkJyk6W10sXHJcbiAgZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHM6KG9wdGlvbi5BU1NJR05FRVMgfHwgIWhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikgPyB0aGlzLmxpc3RUb0lkKGZvcm0/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZV9ncm91cCwnZ3JvdXBfaWQnKTpbXSxcclxuICBkZWZhdWx0X2Fzc2lnbmVlX3R5cGU6KG9wdGlvbi5BU1NJR05FRVMgfHwgIWhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikgPyAgZm9ybT8uYXNzaWduZWVfY29tcGxldGlvbl9jcml0ZXJpYTonQUxMJyxcclxuICByZXZpZXdlcnM6IChvcHRpb24uUkVWSUVXRVIgfHwgIWhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikgPyAgdGhpcy5saXN0VG9JZChmb3JtPy5wcm9ncmFtX3Jldmlld2VyLCdtZW1iZXJfaWQnKSA6W10sXHJcbiAgcmV2aWV3ZXJfZ3JvdXBfaWRzOiAgKG9wdGlvbi5SRVZJRVdFUiB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSA/IHRoaXMubGlzdFRvSWQoZm9ybT8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cCwnZ3JvdXBfaWQnKTpbXSxcclxuICBkZWZhdWx0X3Jldmlld2VyczogKG9wdGlvbi5SRVZJRVdFUiB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSA/dGhpcy5saXN0VG9JZChmb3JtPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXIsJ21lbWJlcl9pZCcpOltdLFxyXG4gIGRlZmF1bHRfcmV2aWV3ZXJfZ3JvdXBfaWRzOiAgKG9wdGlvbi5SRVZJRVdFUiB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSA/dGhpcy5saXN0VG9JZChmb3JtPy5wcm9ncmFtX2RlZmF1bHRfcmV2aWV3ZXJfZ3JvdXAsJ2dyb3VwX2lkJyk6W10sXHJcbiAgZGVmYXVsdF9yZXZpZXdlcnNfdHlwZTpmb3JtPy5yZXZpZXdlcl9jb21wbGV0aW9uX2NyaXRlcmlhLFxyXG4gIG92ZXJzZWVyczoob3B0aW9uLk9WRVJTRUVSIHx8ICFoYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pID8gIHtjY19lbWFpbDogdGhpcy5saXN0VG9JZChmb3JtPy5wcm9ncmFtX292ZXJzZWVyLCdtZW1iZXJfaWQnKSxjY19lbWFpbF9ncm91cHM6dGhpcy5saXN0VG9JZChmb3JtPy5wcm9ncmFtX292ZXJzZWVyX2dyb3VwLCdncm91cF9pZCcpLFxyXG4gIGZhaWx1cmVfY2NfZW1haWw6IFtdLGZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzOltdfSA6IHtjY19lbWFpbDpbXSxjY19lbWFpbF9ncm91cHM6W10sXHJcbiAgZmFpbHVyZV9jY19lbWFpbDogW10sZmFpbHVyZV9jY19lbWFpbF9ncm91cHM6W119LFxyXG5cclxuICBkZWZhdWx0X292ZXJzZWVyczogKG9wdGlvbi5PVkVSU0VFUiB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSA/IHtjY19lbWFpbDogdGhpcy5saXN0VG9JZChmb3JtPy5wcm9ncmFtX2RlZmF1bHRfb3ZlcnNlZXIsJ21lbWJlcl9pZCcpLFxyXG4gIGNjX2VtYWlsX2dyb3Vwczp0aGlzLmxpc3RUb0lkKGZvcm0/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cCwnZ3JvdXBfaWQnKSxcclxuICBmYWlsdXJlX2NjX2VtYWlsOiB0aGlzLmxpc3RUb0lkKGZvcm0/LnByb2dyYW1fZGVmYXVsdF9mYWlsZWRfb3ZlcnNlZXIsJ21lbWJlcl9pZCcpLFxyXG4gIGZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzOnRoaXMubGlzdFRvSWQoZm9ybT8ucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cCwnZ3JvdXBfaWQnKX0gOlxyXG4gIHtjY19lbWFpbDogW10sY2NfZW1haWxfZ3JvdXBzOltdLGZhaWx1cmVfY2NfZW1haWw6IFtdLGZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzOltdfSxcclxuXHJcbiAgYXNzZXNzbWVudDogKG9wdGlvbj8uQVNTRVNTTUVOVCB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSA/ICB0aGlzLmdlbmVyYXRlQXNzZXNzbWVudChmb3JtLnByb2dyYW1fYXNzZXNzbWVudHMpIDogW10sXHJcbiAgZXZpZGVuY2VfdXBsb2FkX2ZsYWc6IChvcHRpb24/LkZPUk1BVEVfRVZJREVOQ0UgIHx8ICFoYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pID8gIGZvcm0/LmV2aWRlbmNlX3JlcXVpcmVkID8gMSA6IDAgOiAwLFxyXG4gIGlzX2tleV9ldmlkZW5jZTogZm9ybT8uYWxsb3dfYW55X2ZpbGVfa2V5X2V2aWRlbmNlLFxyXG4gIGN1c3RvbV9maWVsZHM6IG9wdGlvbj8uQ1VTVE9NX0ZJRUxEUyA/IGZvcm0/LmN1c3RvbV9maWVsZHMgPz8gW10gOiBbXSxcclxuICBmcmFtZXdvcms6dGhpcy5nZXRGcmFtZXdvcmsoZm9ybT8uZnJhbWV3b3JrKSA/PyBbXSxcclxuICBfaWQ6IGluc3RhbmNlLm1vZGUgPT09ICdFRElUJyA/IGluc3RhbmNlLnByb2dyYW1JZCA6IHVuZGVmaW5lZCxcclxufVxyXG5jb25zb2xlLmxvZyhcInBheWxvYWRcIixwYXlsb2FkKVxyXG5yZXR1cm4gcGF5bG9hZDtcclxuIH1cclxuIGdlbmVyYXRlQXNzZXNzbWVudChhc3Nlc3NtZW50OmFueSl7XHJcbiAgIGlmKGFzc2Vzc21lbnQgJiYgYXNzZXNzbWVudD8ubGVuZ3RoKXtcclxuICAgIHJldHVybiBhc3Nlc3NtZW50Lm1hcCgoY2F0OmFueSkgPT4ge3JldHVybiB7Li4uY2F0LGFzc2Vzc21lbnRJZHMgOiBjYXQuYXNzZXNzbWVudElkcz8ubWFwKChhc3Nlc3M6YW55KSA9PiBhc3Nlc3MuaWQpfX0pXHJcbiAgIH1lbHNle1xyXG4gICAgIHJldHVybiBbXTtcclxuICAgfVxyXG4gfVxyXG4gZ2V0RnJhbWV3b3JrKGlucHV0OmFueSl7XHJcbiAgIGlmKGlucHV0KXtcclxuICAgIHJldHVybiBbe1xyXG4gICAgICBfaWQ6aW5wdXQ/Ll9pZCxcclxuICAgICAgZnJhbWV3b3JrX25hbWU6aW5wdXQ/Lm5hbWUsXHJcbiAgICAgIHR5cGU6IGlucHV0Py50eXBlLFxyXG4gICAgICBpbl9zY29wZTogaW5wdXQ/LmluX3Njb3BlID8gdGhpcy5saXN0VG9JZChpbnB1dD8uaW5fc2NvcGUsJ19pZCcpOiAgW10sXHJcbiAgICAgIG91dF9zY29wZTogaW5wdXQ/Lm91dF9zY29wZSA/IHRoaXMubGlzdFRvSWQoaW5wdXQ/Lm91dF9zY29wZSwnX2lkJyk6IFtdXHJcbiAgICB9XVxyXG4gICB9ZWxzZXtcclxuICAgICByZXR1cm4gW11cclxuICAgfVxyXG5cclxuIH1cclxuXHJcbiBsaXN0VG9JZChsaXN0OmFueSxrZXk6c3RyaW5nKXtcclxuICAgaWYobGlzdCAmJiBsaXN0Py5sZW5ndGgpe1xyXG4gICAgcmV0dXJuIGxpc3QubWFwKChlbGU6YW55KSA9PiBlbGVba2V5XSk7XHJcbiAgIH1lbHNle1xyXG4gICAgIHJldHVybiBbXTtcclxuICAgfVxyXG5cclxuIH1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0gaWQgOiBwcm9ncmFtIG9iamVjdCBpZFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuIGdldFByb2dyYW0oaWQ6YW55KXtcclxuICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpLnNldCgneC1idXNpbmVzcy1jeWNsZScsICBKU09OLnN0cmluZ2lmeSgodGhpcy5nZXRCdXNpbmVzc0N5Y2xlKCkpKSk7XHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KHRoaXMuZW52Py5wcm9ncmFtRW5kcG9pbnQgKyAnLycgKyBpZCArJz9pc0J1c2luZXNzQ3ljbGU9dHJ1ZSZieXBhc3MtYnVzaW5lc3NDeWNsZT10cnVlJywge2hlYWRlcnN9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBwYXJhbSBwYXlsb2FkIHBheWxvYWQgd2hpY2ggbmVlZCB0byBiZSB1cGRhdGVkXHJcbiAqIEBwYXJhbSBpZCBwcm9ncmFtIG9iamVjdCBpZFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxudXBkYXRlUHJvZ3JhbShwYXlsb2FkOmFueSwgaWQ6IHN0cmluZyl7XHJcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKS5zZXQoJ3gtYnVzaW5lc3MtY3ljbGUnLCAgSlNPTi5zdHJpbmdpZnkoKHRoaXMuZ2V0QnVzaW5lc3NDeWNsZSgpKSkpO1xyXG4gIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odGhpcy5lbnYucHJvZ3JhbUVuZHBvaW50ICsgJy9jYXRlZ29yeS9lZGl0Q2F0ZWdvcnkvJysgaWQgICsgJz9pc0J1c2luZXNzQ3ljbGU9dHJ1ZSZieXBhc3MtYnVzaW5lc3NDeWNsZT10cnVlJyxwYXlsb2FkLCB7aGVhZGVyc30pO1xyXG59XHJcblxyXG5cclxuZ2V0TWVtZWJlckJ5SWRzKGlkczphbnkpe1xyXG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueVtdPih0aGlzLmVudi5vcmdhbml6YXRpb25Qb3N0ICsgJ21lbWJlckRldGFpbHNieUlkcyZieXBhc3MtYnVzaW5lc3NDeWNsZT10cnVlJyx7bWVtYmVyX2lkOiBpZHN9LCB7aGVhZGVyc30pLnBpcGUocmV0cnkoMikpO1xyXG59XHJcblxyXG5nZXRNZW1iZXJCeUdyb3VwcyhpZHM6YW55KXtcclxuICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odGhpcy5lbnYub3JnYW5pemF0aW9uUG9zdCArICdncm91cERldGFpbHNieUlkcyZieXBhc3MtYnVzaW5lc3NDeWNsZT10cnVlJyx7Z3JvdXBfaWRzOiBpZHN9LCB7aGVhZGVyc30pLnBpcGUocmV0cnkoMikpO1xyXG59XHJcblxyXG59XHJcbiJdfQ==
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXNlcnZpY2VzL3Byb2dyYW1zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBTzdCLE1BQU0sT0FBTyxlQUFlO0lBRTFCLFlBQ1UsSUFBZ0IsRUFDaEIsV0FBd0IsRUFDcEIsTUFBdUI7UUFGM0IsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUdoQyxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQ25DLE9BQU8sRUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQ3pDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixJQUFJLENBQUMsR0FBRyxFQUFFLGVBQWU7WUFDdkIsaURBQWlELEVBQ25ELEVBQUUsT0FBTyxFQUFFLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxPQUFZLEVBQUUsSUFBUztRQUNqQyxJQUFJO1FBQ0osMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2QixNQUFNLFFBQVEsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUks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LEVBQ1AsRUFBRSxPQUFPLEVBQUUsQ0FDWixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFRO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUNuQyxPQUFPLEVBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUN6QyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FDSCxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQjtZQUN2Qiw4Q0FBOEMsRUFDaEQsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQ2xCLEVBQUUsT0FBTyxFQUFFLENBQ1o7YUFDQSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVE7UUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQ25DLE9BQU8sRUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQ3pDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUNILElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCO1lBQ3ZCLDZDQUE2QyxFQUMvQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFDbEIsRUFBRSxPQUFPLEVBQUUsQ0FDWjthQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixDQUFDOzs0R0F2YVUsZUFBZTtnSEFBZixlQUFlLGNBRmQsTUFBTTsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBTUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyByZXRyeSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3JhbXNTZXJ2aWNlIHtcclxuICBlbnYhOiBhbnk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIGNvbmZpZz86IENvbmZpZ3VyYXRpb25zXHJcbiAgKSB7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuZW52ID0gY29uZmlnLmVudkNvbmZpZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJvbGVzKCkge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcclxuICAgICAgJ3Rva2VuJyxcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLmVudj8ub3JnYW5pemF0aW9uR2V0ICtcclxuICAgICAgICAncm9sZXMvZ2V0UHJvZ3JhbVJvbGVzJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLFxyXG4gICAgICB7IGhlYWRlcnMgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwbG9hZHMgdGhlIGdpdmVuIGZpbGUgdG8gc2VydmVyXHJcbiAgICogQHBhcmFtIHBheWxvYWQgcGF5bG9hZCBGaWxlIGRhdGEgdG8gYmUgdXBsb2FkZWRcclxuICAgKiBAcGFyYW0gcGF0aCBwYXRoIFBhdGggb2YgZmlsZSB0byBiZSB1cGxvYWRlZFxyXG4gICAqIEByZXR1cm5zIHJlc3BvbnNlIGFmdGVyIHVwbG9hZGluZyBhIGZpbGVcclxuICAgKi9cclxuICB1cGxvYWRGaWxlcyhwYXlsb2FkOiBhbnksIHBhdGg6IGFueSkge1xyXG4gICAgLy8ge1xyXG4gICAgLy8gICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcclxuICAgIC8vICAgb2JzZXJ2ZTogJ2V2ZW50cyd9XHJcbiAgICBjb25zdCBPUkdfUEFUSCA9IGBvLyR7cGF0aH1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLmVudi5maWxlVXBsb2FkRW5kUG9pbnQgKyBPUkdfUEFUSCArICcmbmdzdy1ieXBhc3M9dHJ1ZScsXHJcbiAgICAgIHBheWxvYWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNwb25zaWJpbGl0eUNlbnRlckxpc3QoKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PGFueVtdPihcclxuICAgICAgICB0aGlzLmVudj8uY29tcGxpYW5jZUdldCArXHJcbiAgICAgICAgICAncmVzcG9uc2liaWxpdHlDZW50ZXJUcmVlJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnMsXHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIGZldGNoUm9sZVVzZXJzKHJvbGVzOiBhbnksIHBhZ2U/OiBhbnksIHNlYXJjaEtleT86IGFueSkge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcclxuICAgICAgJ3Rva2VuJyxcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxyXG4gICAgKTtcclxuICAgIGxldCBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgaWYgKHBhZ2UpIHtcclxuICAgICAgcXVlcnlTdHJpbmcgKz0gYCZwYWdlPSR7cGFnZX1gO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlYXJjaEtleSkge1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDxhbnlbXT4oXHJcbiAgICAgICAgdGhpcy5lbnYub3JnYW5pemF0aW9uUG9zdCArXHJcbiAgICAgICAgICAncm9sZXMvZ2V0VXNlckRldGFpbHMmbGltaXQ9MzAmYnlwYXNzLWJ1c2luZXNzQ3ljbGU9dHJ1ZScgK1xyXG4gICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgeyByb2xlX2lkczogcm9sZXMgPz8gW10gfSxcclxuICAgICAgICB7IGhlYWRlcnMgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIGZldGNoQWxsUm9sZVVzZXJzKHJvbGVzOiBhbnkpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0PGFueVtdPihcclxuICAgICAgICB0aGlzLmVudj8ub3JnYW5pemF0aW9uUG9zdCArXHJcbiAgICAgICAgICAncm9sZXMvZ2V0VXNlckRldGFpbHMmdHlwZT1hbGwmYnlwYXNzLWJ1c2luZXNzQ3ljbGU9dHJ1ZScsXHJcbiAgICAgICAgeyByb2xlX2lkczogcm9sZXMgPz8gW10gfSxcclxuICAgICAgICB7IGhlYWRlcnMgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIGZldGNoQWxsUm9sZUdyb3Vwcyhyb2xlczogYW55KSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDxhbnlbXT4oXHJcbiAgICAgICAgdGhpcy5lbnYub3JnYW5pemF0aW9uUG9zdCArXHJcbiAgICAgICAgICAncm9sZXMvZ2V0R3JvdXBEZXRhaWxzJnR5cGU9YWxsJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLFxyXG4gICAgICAgIHsgcm9sZV9pZHM6IHJvbGVzID8/IFtdIH0sXHJcbiAgICAgICAgeyBoZWFkZXJzIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG4gIGZldGNoQWxsT3JnVXNlcigpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICAvL2h0dHBzOi8vZGV2YXBpLnYtY29tcGx5LmNvbS9vcmdhbml6YXRpb24vP21vZGU9b3JnYW5pc2F0aW9uVXNlcnNMaXN0JnBhZ2luYXRpb25UeXBlPXNtYWxsJmFkbWluPTFcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldDxhbnlbXT4oXHJcbiAgICAgICAgdGhpcy5lbnY/Lm9yZ2FuaXphdGlvbkdldCArXHJcbiAgICAgICAgICAnb3JnYW5pc2F0aW9uVXNlcnNMaXN0JnBhZ2luYXRpb25UeXBlPXNtYWxsJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLFxyXG4gICAgICAgIHsgaGVhZGVycyB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuICBmZXRjaENvbXBsaWFuY2VHcm91cHMoKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgLy9odHRwczovL2RldmFwaS52LWNvbXBseS5jb20vb3JnYW5pemF0aW9uLz9tb2RlPWdyb3Vwc0xpc3Qmc3RhdHVzPTEmdHlwZT1jb21wbGlhbmNlXHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52Py5vcmdhbml6YXRpb25HZXQgK1xyXG4gICAgICAgICAgJ2dyb3Vwc0xpc3Qmc3RhdHVzPTEmdHlwZT1jb21wbGlhbmNlJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLFxyXG4gICAgICAgIHsgaGVhZGVycyB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnVzaW5lc3NDeWNsZSgpIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzQ3ljbGUgPSBKU09OLnBhcnNlKFxyXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NDeWNsZScpID8/ICd7fSdcclxuICAgICk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZWxlY3RlZF9jeWNsZTogYnVzaW5lc3NDeWNsZVxyXG4gICAgICAgID8gYnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRDeWNsZT8uc3RhcnRfZGF0ZSArXHJcbiAgICAgICAgICAnLScgK1xyXG4gICAgICAgICAgYnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRDeWNsZT8uZW5kX2RhdGVcclxuICAgICAgICA6ICcnLFxyXG4gICAgICBzdGFydF9kYXRlOiBidXNpbmVzc0N5Y2xlID8gYnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRDeWNsZT8uc3RhcnRfZGF0ZSA6ICcnLFxyXG4gICAgICBlbmRfZGF0ZTogYnVzaW5lc3NDeWNsZSA/IGJ1c2luZXNzQ3ljbGU/LnNlbGVjdGVkQ3ljbGU/LmVuZF9kYXRlIDogJycsXHJcbiAgICAgIHNlbGVjdGVkX2N5Y2xlX2FycjogYnVzaW5lc3NDeWNsZVxyXG4gICAgICAgID8gYnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRDeWNsZT8uc2VsZWN0ZWRfY3ljbGVfYXJyXHJcbiAgICAgICAgOiBbXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzYXZlUHJvZ3JhbShwYXlsb2FkOiBhbnkpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxyXG4gICAgICAuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpXHJcbiAgICAgIC5zZXQoJ3gtYnVzaW5lc3MtY3ljbGUnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmdldEJ1c2luZXNzQ3ljbGUoKSkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueVtdPihcclxuICAgICAgdGhpcy5lbnYucHJvZ3JhbUVuZHBvaW50ICsgJy9jYXRlZ29yeS8/aXNCdXNpbmVzc0N5Y2xlPXRydWUnLFxyXG4gICAgICBwYXlsb2FkLFxyXG4gICAgICB7IGhlYWRlcnMgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkUGF5bG9hZChmb3JtRGF0YTogYW55LCBpbnN0YW5jZTogYW55KSB7XHJcbiAgICBjb25zdCBmb3JtID0gZm9ybURhdGE/LnZhbHVlO1xyXG4gICAgY29uc3Qgb3B0aW9uID0gaW5zdGFuY2UuYWRkaXRpb25hbE9wdGlvbjtcclxuICAgIGNvbnN0IGhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbiA9XHJcbiAgICAgIGluc3RhbmNlPy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb247XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBtb2RlOiAncHJvZ3JhbScsXHJcbiAgICAgIG5hbWU6IGZvcm0/LnByb2dyYW1fbmFtZS50cmltKCkgPz8gJycsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiB7XHJcbiAgICAgICAgdGV4dDogZm9ybT8ucHJvZ3JhbV9kZXNjcmlwdGlvbiA/PyAnJyxcclxuICAgICAgICBhdHRhY2htZW50czogZm9ybT8ucHJvZ3JhbV9kZXNjcmlwdGlvbl9hdHRhY2htZW50cyA/PyBbXSxcclxuICAgICAgfSxcclxuICAgICAgcHJvZ3JhbV9vYmplY3RpdmU6IHtcclxuICAgICAgICB0ZXh0OiBmb3JtPy5wcm9ncmFtX29iamVjdGl2ZSA/PyAnJyxcclxuICAgICAgICBhdHRhY2htZW50czogZm9ybT8ub2JqZWN0aXZlX2F0dGFjaG1lbnQgPz8gW10sXHJcbiAgICAgIH0sXHJcbiAgICAgIHJvbGVzOiBmb3JtLnByb2dyYW1fcm9sZXMubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByb2xlSWQ6IGVsZT8uX2lkLFxyXG4gICAgICAgICAgcm9sZU5hbWU6IGVsZT8ucm9sZU5hbWUsXHJcbiAgICAgICAgICBsaWNlbnNlVHlwZTogZWxlPy5saWNlbnNlVHlwZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KSxcclxuICAgICAgb3duZXJzOiB0aGlzLmxpc3RUb0lkKGZvcm0/LnByb2dyYW1fb3duZXJzLCAnbWVtYmVyX2lkJykgPz8gW10sXHJcbiAgICAgIG93bmVyc19ncm91cDogb3B0aW9uPy5ST0xFU1xyXG4gICAgICAgID8gdGhpcy5saXN0VG9JZChmb3JtPy5wcm9ncmFtX293bmVyc19ncm91cCwgJ2dyb3VwX2lkJykgPz8gW11cclxuICAgICAgICA6IFtdLFxyXG4gICAgICBhbGxfdXNlcl9pbl9yb2xlOiBvcHRpb24/LlJPTEVTID8gZm9ybT8uYWxsX3VzZXJfaW5fcm9sZSA/PyBmYWxzZSA6IGZhbHNlLFxyXG4gICAgICBwcm9ncmFtVHlwZTogZm9ybT8ucHJvZ3JhbV90eXBlID8/IDAsXHJcbiAgICAgIC8vIHN0YXRlOjAsXHJcbiAgICAgIHN0YXRlOiBmb3JtPy5wcm9ncmFtX3N0YXRlID8/IDAsXHJcbiAgICAgIGFwcHJvdmVyczpcclxuICAgICAgICBvcHRpb24/LkFQUFJPVkVSIHx8ICFoYXNQcm9ncmFtRnVsbFBlcm1pc3Npb25cclxuICAgICAgICAgID8gdGhpcy5saXN0VG9JZChmb3JtPy5wcm9ncmFtX2FwcHJvdmVyLCAnbWVtYmVyX2lkJykgPz8gW11cclxuICAgICAgICAgIDogW10sXHJcbiAgICAgIGNhbGN1bGF0ZV9wYXN0X3VwY29taW5nX2V2ZW50OiBmb3JtPy5wZXJmb3JtYW5jZV9jYWxjdWxhdGlvbiA/PyAnJyxcclxuICAgICAgcHJvZ3JhbV9mcmVxdWVuY3k6XHJcbiAgICAgICAgb3B0aW9uLlBST0dSQU1fRlJFUVVFTkNZIHx8ICFoYXNQcm9ncmFtRnVsbFBlcm1pc3Npb25cclxuICAgICAgICAgID8gZm9ybT8ucmVjdXJyaW5nX2ZyZXF1ZW5jeVxyXG4gICAgICAgICAgICA/IDFcclxuICAgICAgICAgICAgOiAwXHJcbiAgICAgICAgICA6IDEsXHJcbiAgICAgIGxvY2tfc2NvcGU6XHJcbiAgICAgICAgb3B0aW9uLlNDT1BFX0NIQU5HRVMgfHwgIWhhc1Byb2dyYW1GdWxsUGVybWlzc2lvblxyXG4gICAgICAgICAgPyBmb3JtPy5sb2NrX3Njb3BlX2NoYW5nZVxyXG4gICAgICAgICAgICA/IDFcclxuICAgICAgICAgICAgOiAwXHJcbiAgICAgICAgICA6IDAsXHJcbiAgICAgIHJjX2lkczpcclxuICAgICAgICBvcHRpb24uUkMgfHwgIWhhc1Byb2dyYW1GdWxsUGVybWlzc2lvblxyXG4gICAgICAgICAgPyB0aGlzLmxpc3RUb0lkKGZvcm0/LnJjLCAnaXRlbV9pZCcpXHJcbiAgICAgICAgICA6IFtdLFxyXG4gICAgICBhc3NpZ25lZV9pZHM6XHJcbiAgICAgICAgb3B0aW9uLkFTU0lHTkVFUyB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uXHJcbiAgICAgICAgICA/IHRoaXMubGlzdFRvSWQoZm9ybT8ucHJvZ3JhbV9hc3NpZ25lZSwgJ21lbWJlcl9pZCcpXHJcbiAgICAgICAgICA6IFtdLFxyXG4gICAgICBhc3NpZ25lZV9ncm91cF9pZHM6XHJcbiAgICAgICAgb3B0aW9uLkFTU0lHTkVFUyB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uXHJcbiAgICAgICAgICA/IHRoaXMubGlzdFRvSWQoZm9ybT8ucHJvZ3JhbV9hc3NpZ25lZV9ncm91cCwgJ2dyb3VwX2lkJylcclxuICAgICAgICAgIDogW10sXHJcbiAgICAgIGRlZmF1bHRfYXNzaWduZWVfaWRzOlxyXG4gICAgICAgIG9wdGlvbi5BU1NJR05FRVMgfHwgIWhhc1Byb2dyYW1GdWxsUGVybWlzc2lvblxyXG4gICAgICAgICAgPyB0aGlzLmxpc3RUb0lkKGZvcm0/LnByb2dyYW1fZGVmYXVsdF9hc3NpZ25lZSwgJ21lbWJlcl9pZCcpXHJcbiAgICAgICAgICA6IFtdLFxyXG4gICAgICBkZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkczpcclxuICAgICAgICBvcHRpb24uQVNTSUdORUVTIHx8ICFoYXNQcm9ncmFtRnVsbFBlcm1pc3Npb25cclxuICAgICAgICAgID8gdGhpcy5saXN0VG9JZChmb3JtPy5wcm9ncmFtX2RlZmF1bHRfYXNzaWduZWVfZ3JvdXAsICdncm91cF9pZCcpXHJcbiAgICAgICAgICA6IFtdLFxyXG4gICAgICBkZWZhdWx0X2Fzc2lnbmVlX3R5cGU6XHJcbiAgICAgICAgb3B0aW9uLkFTU0lHTkVFUyB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uXHJcbiAgICAgICAgICA/IGZvcm0/LmFzc2lnbmVlX2NvbXBsZXRpb25fY3JpdGVyaWFcclxuICAgICAgICAgIDogJ0FMTCcsXHJcbiAgICAgIHJldmlld2VyczpcclxuICAgICAgICBvcHRpb24uUkVWSUVXRVIgfHwgIWhhc1Byb2dyYW1GdWxsUGVybWlzc2lvblxyXG4gICAgICAgICAgPyB0aGlzLmxpc3RUb0lkKGZvcm0/LnByb2dyYW1fcmV2aWV3ZXIsICdtZW1iZXJfaWQnKVxyXG4gICAgICAgICAgOiBbXSxcclxuICAgICAgcmV2aWV3ZXJfZ3JvdXBfaWRzOlxyXG4gICAgICAgIG9wdGlvbi5SRVZJRVdFUiB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uXHJcbiAgICAgICAgICA/IHRoaXMubGlzdFRvSWQoZm9ybT8ucHJvZ3JhbV9yZXZpZXdlcl9ncm91cCwgJ2dyb3VwX2lkJylcclxuICAgICAgICAgIDogW10sXHJcbiAgICAgIGRlZmF1bHRfcmV2aWV3ZXJzOlxyXG4gICAgICAgIG9wdGlvbi5SRVZJRVdFUiB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uXHJcbiAgICAgICAgICA/IHRoaXMubGlzdFRvSWQoZm9ybT8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyLCAnbWVtYmVyX2lkJylcclxuICAgICAgICAgIDogW10sXHJcbiAgICAgIGRlZmF1bHRfcmV2aWV3ZXJfZ3JvdXBfaWRzOlxyXG4gICAgICAgIG9wdGlvbi5SRVZJRVdFUiB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uXHJcbiAgICAgICAgICA/IHRoaXMubGlzdFRvSWQoZm9ybT8ucHJvZ3JhbV9kZWZhdWx0X3Jldmlld2VyX2dyb3VwLCAnZ3JvdXBfaWQnKVxyXG4gICAgICAgICAgOiBbXSxcclxuICAgICAgZGVmYXVsdF9yZXZpZXdlcnNfdHlwZTogZm9ybT8ucmV2aWV3ZXJfY29tcGxldGlvbl9jcml0ZXJpYSxcclxuICAgICAgb3ZlcnNlZXJzOlxyXG4gICAgICAgIG9wdGlvbi5PVkVSU0VFUiB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICBjY19lbWFpbDogdGhpcy5saXN0VG9JZChmb3JtPy5wcm9ncmFtX292ZXJzZWVyLCAnbWVtYmVyX2lkJyksXHJcbiAgICAgICAgICAgICAgY2NfZW1haWxfZ3JvdXBzOiB0aGlzLmxpc3RUb0lkKFxyXG4gICAgICAgICAgICAgICAgZm9ybT8ucHJvZ3JhbV9vdmVyc2Vlcl9ncm91cCxcclxuICAgICAgICAgICAgICAgICdncm91cF9pZCdcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIGZhaWx1cmVfY2NfZW1haWw6IFtdLFxyXG4gICAgICAgICAgICAgIGZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzOiBbXSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgY2NfZW1haWw6IFtdLFxyXG4gICAgICAgICAgICAgIGNjX2VtYWlsX2dyb3VwczogW10sXHJcbiAgICAgICAgICAgICAgZmFpbHVyZV9jY19lbWFpbDogW10sXHJcbiAgICAgICAgICAgICAgZmFpbHVyZV9jY19lbWFpbF9ncm91cHM6IFtdLFxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgZGVmYXVsdF9vdmVyc2VlcnM6XHJcbiAgICAgICAgb3B0aW9uLk9WRVJTRUVSIHx8ICFoYXNQcm9ncmFtRnVsbFBlcm1pc3Npb25cclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIGNjX2VtYWlsOiB0aGlzLmxpc3RUb0lkKFxyXG4gICAgICAgICAgICAgICAgZm9ybT8ucHJvZ3JhbV9kZWZhdWx0X292ZXJzZWVyLFxyXG4gICAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIGNjX2VtYWlsX2dyb3VwczogdGhpcy5saXN0VG9JZChcclxuICAgICAgICAgICAgICAgIGZvcm0/LnByb2dyYW1fZGVmYXVsdF9vdmVyc2Vlcl9ncm91cCxcclxuICAgICAgICAgICAgICAgICdncm91cF9pZCdcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIGZhaWx1cmVfY2NfZW1haWw6IHRoaXMubGlzdFRvSWQoXHJcbiAgICAgICAgICAgICAgICBmb3JtPy5wcm9ncmFtX2RlZmF1bHRfZmFpbGVkX292ZXJzZWVyLFxyXG4gICAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIGZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzOiB0aGlzLmxpc3RUb0lkKFxyXG4gICAgICAgICAgICAgICAgZm9ybT8ucHJvZ3JhbV9kZWZhdWx0X2ZhaWxlZF9vdmVyc2Vlcl9ncm91cCxcclxuICAgICAgICAgICAgICAgICdncm91cF9pZCdcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICBjY19lbWFpbDogW10sXHJcbiAgICAgICAgICAgICAgY2NfZW1haWxfZ3JvdXBzOiBbXSxcclxuICAgICAgICAgICAgICBmYWlsdXJlX2NjX2VtYWlsOiBbXSxcclxuICAgICAgICAgICAgICBmYWlsdXJlX2NjX2VtYWlsX2dyb3VwczogW10sXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICBhc3Nlc3NtZW50OlxyXG4gICAgICAgIG9wdGlvbj8uQVNTRVNTTUVOVCB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uXHJcbiAgICAgICAgICA/IHRoaXMuZ2VuZXJhdGVBc3Nlc3NtZW50KGZvcm0ucHJvZ3JhbV9hc3Nlc3NtZW50cylcclxuICAgICAgICAgIDogW10sXHJcbiAgICAgIGV2aWRlbmNlX3VwbG9hZF9mbGFnOlxyXG4gICAgICAgIG9wdGlvbj8uRk9STUFURV9FVklERU5DRSB8fCAhaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uXHJcbiAgICAgICAgICA/IGZvcm0/LmV2aWRlbmNlX3JlcXVpcmVkXHJcbiAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICA6IDBcclxuICAgICAgICAgIDogMCxcclxuICAgICAgaXNfa2V5X2V2aWRlbmNlOiBmb3JtPy5hbGxvd19hbnlfZmlsZV9rZXlfZXZpZGVuY2UsXHJcbiAgICAgIGN1c3RvbV9maWVsZHM6IG9wdGlvbj8uQ1VTVE9NX0ZJRUxEUyA/IGZvcm0/LmN1c3RvbV9maWVsZHMgPz8gW10gOiBbXSxcclxuICAgICAgZnJhbWV3b3JrOiB0aGlzLmdldEZyYW1ld29yayhmb3JtPy5mcmFtZXdvcmspID8/IFtdLFxyXG4gICAgICBfaWQ6IGluc3RhbmNlLm1vZGUgPT09ICdFRElUJyA/IGluc3RhbmNlLnByb2dyYW1JZCA6IHVuZGVmaW5lZCxcclxuICAgIH07XHJcbiAgICByZXR1cm4gcGF5bG9hZDtcclxuICB9XHJcbiAgZ2VuZXJhdGVBc3Nlc3NtZW50KGFzc2Vzc21lbnQ6IGFueSkge1xyXG4gICAgaWYgKGFzc2Vzc21lbnQgJiYgYXNzZXNzbWVudD8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBhc3Nlc3NtZW50Lm1hcCgoY2F0OiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uY2F0LFxyXG4gICAgICAgICAgYXNzZXNzbWVudElkczogY2F0LmFzc2Vzc21lbnRJZHM/Lm1hcCgoYXNzZXNzOiBhbnkpID0+IGFzc2Vzcy5pZCksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEZyYW1ld29yayhpbnB1dDogYW55KSB7XHJcbiAgICBpZiAoaW5wdXQpIHtcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBfaWQ6IGlucHV0Py5faWQsXHJcbiAgICAgICAgICBmcmFtZXdvcmtfbmFtZTogaW5wdXQ/Lm5hbWUsXHJcbiAgICAgICAgICB0eXBlOiBpbnB1dD8udHlwZSxcclxuICAgICAgICAgIGluX3Njb3BlOiBpbnB1dD8uaW5fc2NvcGVcclxuICAgICAgICAgICAgPyB0aGlzLmxpc3RUb0lkKGlucHV0Py5pbl9zY29wZSwgJ19pZCcpXHJcbiAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICBvdXRfc2NvcGU6IGlucHV0Py5vdXRfc2NvcGVcclxuICAgICAgICAgICAgPyB0aGlzLmxpc3RUb0lkKGlucHV0Py5vdXRfc2NvcGUsICdfaWQnKVxyXG4gICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsaXN0VG9JZChsaXN0OiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAobGlzdCAmJiBsaXN0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGxpc3QubWFwKChlbGU6IGFueSkgPT4gZWxlW2tleV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgOiBwcm9ncmFtIG9iamVjdCBpZFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0UHJvZ3JhbShpZDogYW55KSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKVxyXG4gICAgICAuc2V0KCd4LWJ1c2luZXNzLWN5Y2xlJywgSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRCdXNpbmVzc0N5Y2xlKCkpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPihcclxuICAgICAgdGhpcy5lbnY/LnByb2dyYW1FbmRwb2ludCArXHJcbiAgICAgICAgJy8nICtcclxuICAgICAgICBpZCArXHJcbiAgICAgICAgJz9pc0J1c2luZXNzQ3ljbGU9dHJ1ZSZieXBhc3MtYnVzaW5lc3NDeWNsZT10cnVlJyxcclxuICAgICAgeyBoZWFkZXJzIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBwYXlsb2FkIHBheWxvYWQgd2hpY2ggbmVlZCB0byBiZSB1cGRhdGVkXHJcbiAgICogQHBhcmFtIGlkIHByb2dyYW0gb2JqZWN0IGlkXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICB1cGRhdGVQcm9ncmFtKHBheWxvYWQ6IGFueSwgaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgIC5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSlcclxuICAgICAgLnNldCgneC1idXNpbmVzcy1jeWNsZScsIEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0QnVzaW5lc3NDeWNsZSgpKSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55W10+KFxyXG4gICAgICB0aGlzLmVudi5wcm9ncmFtRW5kcG9pbnQgK1xyXG4gICAgICAgICcvY2F0ZWdvcnkvZWRpdENhdGVnb3J5LycgK1xyXG4gICAgICAgIGlkICtcclxuICAgICAgICAnP2lzQnVzaW5lc3NDeWNsZT10cnVlJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLFxyXG4gICAgICBwYXlsb2FkLFxyXG4gICAgICB7IGhlYWRlcnMgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldE1lbWViZXJCeUlkcyhpZHM6IGFueSkge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcclxuICAgICAgJ3Rva2VuJyxcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52Lm9yZ2FuaXphdGlvblBvc3QgK1xyXG4gICAgICAgICAgJ21lbWJlckRldGFpbHNieUlkcyZieXBhc3MtYnVzaW5lc3NDeWNsZT10cnVlJyxcclxuICAgICAgICB7IG1lbWJlcl9pZDogaWRzIH0sXHJcbiAgICAgICAgeyBoZWFkZXJzIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRNZW1iZXJCeUdyb3VwcyhpZHM6IGFueSkge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcclxuICAgICAgJ3Rva2VuJyxcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52Lm9yZ2FuaXphdGlvblBvc3QgK1xyXG4gICAgICAgICAgJ2dyb3VwRGV0YWlsc2J5SWRzJmJ5cGFzcy1idXNpbmVzc0N5Y2xlPXRydWUnLFxyXG4gICAgICAgIHsgZ3JvdXBfaWRzOiBpZHMgfSxcclxuICAgICAgICB7IGhlYWRlcnMgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcbn1cclxuIl19