@deeksha2309/sunbird-collection-editor 8.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/collection-editor-cursor.service.mjs +3 -0
  3. package/esm2022/lib/collection-editor-library.component.mjs +16 -0
  4. package/esm2022/lib/collection-editor-library.module.mjs +137 -0
  5. package/esm2022/lib/components/answer/answer.component.mjs +43 -0
  6. package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +325 -0
  7. package/esm2022/lib/components/asset-browser/asset-browser.data.mjs +53 -0
  8. package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +191 -0
  9. package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +895 -0
  10. package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +43 -0
  11. package/esm2022/lib/components/contentplayer-page/contentplayer-page.component.mjs +351 -0
  12. package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +178 -0
  13. package/esm2022/lib/components/dialcode/dialcode.component.mjs +182 -0
  14. package/esm2022/lib/components/editor/editor.component.mjs +1125 -0
  15. package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +529 -0
  16. package/esm2022/lib/components/header/header.component.mjs +123 -0
  17. package/esm2022/lib/components/library/library.component.mjs +242 -0
  18. package/esm2022/lib/components/library-filter/library-filter.component.mjs +149 -0
  19. package/esm2022/lib/components/library-list/library-list.component.mjs +92 -0
  20. package/esm2022/lib/components/library-player/library-player.component.mjs +62 -0
  21. package/esm2022/lib/components/manage-collaborator/manage-collaborator.component.mjs +256 -0
  22. package/esm2022/lib/components/meta-form/meta-form.component.mjs +377 -0
  23. package/esm2022/lib/components/options/options.component.mjs +144 -0
  24. package/esm2022/lib/components/plain-tree/plain-tree.component.mjs +125 -0
  25. package/esm2022/lib/components/progress-status/progress-status.component.mjs +46 -0
  26. package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +67 -0
  27. package/esm2022/lib/components/quality-params-modal/quality-params-modal.component.mjs +52 -0
  28. package/esm2022/lib/components/question/question.component.mjs +1360 -0
  29. package/esm2022/lib/components/quml-player/quml-player.component.mjs +73 -0
  30. package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +84 -0
  31. package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +143 -0
  32. package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +26 -0
  33. package/esm2022/lib/components/template/template.component.mjs +42 -0
  34. package/esm2022/lib/components/term-and-condition/term-and-condition.component.mjs +68 -0
  35. package/esm2022/lib/directives/telemetry-interact/telemetry-interact.directive.mjs +33 -0
  36. package/esm2022/lib/interfaces/McqForm.mjs +29 -0
  37. package/esm2022/lib/interfaces/editor.mjs +2 -0
  38. package/esm2022/lib/interfaces/framework.mjs +2 -0
  39. package/esm2022/lib/interfaces/httpOptions.mjs +2 -0
  40. package/esm2022/lib/interfaces/requestParam.mjs +2 -0
  41. package/esm2022/lib/interfaces/serverResponse.mjs +2 -0
  42. package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
  43. package/esm2022/lib/services/config/category.config.json +8 -0
  44. package/esm2022/lib/services/config/config.service.mjs +27 -0
  45. package/esm2022/lib/services/config/editor.config.json +31 -0
  46. package/esm2022/lib/services/config/label.config.json +314 -0
  47. package/esm2022/lib/services/config/player.config.json +96 -0
  48. package/esm2022/lib/services/config/url.config.json +69 -0
  49. package/esm2022/lib/services/data/data.service.mjs +192 -0
  50. package/esm2022/lib/services/dialcode/dialcode.service.mjs +309 -0
  51. package/esm2022/lib/services/editor/editor.service.mjs +682 -0
  52. package/esm2022/lib/services/framework/framework.service.mjs +106 -0
  53. package/esm2022/lib/services/helper/helper.service.mjs +160 -0
  54. package/esm2022/lib/services/player/player.service.mjs +99 -0
  55. package/esm2022/lib/services/public-data/public-data.service.mjs +21 -0
  56. package/esm2022/lib/services/question/question.service.mjs +167 -0
  57. package/esm2022/lib/services/telemetry/telemetry.service.mjs +120 -0
  58. package/esm2022/lib/services/toaster/toaster.service.mjs +105 -0
  59. package/esm2022/lib/services/tree/tree.service.mjs +284 -0
  60. package/esm2022/project-sunbird-sunbird-collection-editor.mjs +5 -0
  61. package/esm2022/public-api.mjs +4 -0
  62. package/fesm2022/project-sunbird-sunbird-collection-editor.mjs +10138 -0
  63. package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +1 -0
  64. package/index.d.ts +6 -0
  65. package/lib/assets/.gitkeep +0 -0
  66. package/lib/assets/images/MCQ.png +0 -0
  67. package/lib/assets/images/Spin.gif +0 -0
  68. package/lib/assets/images/bulkuploadfile.png +0 -0
  69. package/lib/assets/images/cancel-sign copy.png +0 -0
  70. package/lib/assets/images/cancel-sign.png +0 -0
  71. package/lib/assets/images/emptyResult.svg +1 -0
  72. package/lib/assets/images/icons-rtl.gif +0 -0
  73. package/lib/assets/images/icons.gif +0 -0
  74. package/lib/assets/images/imageicon.svg +16 -0
  75. package/lib/assets/images/imageicon_blue.svg +16 -0
  76. package/lib/assets/images/layoutoneicon.svg +16 -0
  77. package/lib/assets/images/layoutoneicon_blue.svg +16 -0
  78. package/lib/assets/images/layoutthreeicon.svg +18 -0
  79. package/lib/assets/images/layoutthreeicon_blue.svg +18 -0
  80. package/lib/assets/images/layouttwoicon.svg +18 -0
  81. package/lib/assets/images/layouttwoicon_blue.svg +18 -0
  82. package/lib/assets/images/leftalignicon.svg +17 -0
  83. package/lib/assets/images/leftalignicon_blue.svg +17 -0
  84. package/lib/assets/images/loader.gif +0 -0
  85. package/lib/assets/images/loader.svg +1 -0
  86. package/lib/assets/images/loading.gif +0 -0
  87. package/lib/assets/images/middlealignicon.svg +17 -0
  88. package/lib/assets/images/middlealignicon_blue.svg +17 -0
  89. package/lib/assets/images/question_collection.svg +18 -0
  90. package/lib/assets/images/rightalignicon.svg +17 -0
  91. package/lib/assets/images/rightalignicon_blue.svg +17 -0
  92. package/lib/assets/images/vline-rtl.gif +0 -0
  93. package/lib/assets/images/vline.gif +0 -0
  94. package/lib/assets/images/writing.png +0 -0
  95. package/lib/collection-editor-cursor.service.d.ts +5 -0
  96. package/lib/collection-editor-cursor.service.d.ts.map +1 -0
  97. package/lib/collection-editor-library.component.d.ts +9 -0
  98. package/lib/collection-editor-library.component.d.ts.map +1 -0
  99. package/lib/collection-editor-library.module.d.ts +50 -0
  100. package/lib/collection-editor-library.module.d.ts.map +1 -0
  101. package/lib/components/answer/answer.component.d.ts +24 -0
  102. package/lib/components/answer/answer.component.d.ts.map +1 -0
  103. package/lib/components/asset-browser/asset-browser.component.d.ts +81 -0
  104. package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -0
  105. package/lib/components/asset-browser/asset-browser.data.d.ts +52 -0
  106. package/lib/components/asset-browser/asset-browser.data.d.ts.map +1 -0
  107. package/lib/components/assign-page-number/assign-page-number.component.d.ts +38 -0
  108. package/lib/components/assign-page-number/assign-page-number.component.d.ts.map +1 -0
  109. package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +161 -0
  110. package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -0
  111. package/lib/components/collection-icon/collection-icon.component.d.ts +18 -0
  112. package/lib/components/collection-icon/collection-icon.component.d.ts.map +1 -0
  113. package/lib/components/contentplayer-page/contentplayer-page.component.d.ts +54 -0
  114. package/lib/components/contentplayer-page/contentplayer-page.component.d.ts.map +1 -0
  115. package/lib/components/csv-upload/csv-upload.component.d.ts +42 -0
  116. package/lib/components/csv-upload/csv-upload.component.d.ts.map +1 -0
  117. package/lib/components/dialcode/dialcode.component.d.ts +48 -0
  118. package/lib/components/dialcode/dialcode.component.d.ts.map +1 -0
  119. package/lib/components/editor/editor.component.d.ts +146 -0
  120. package/lib/components/editor/editor.component.d.ts.map +1 -0
  121. package/lib/components/fancy-tree/fancy-tree.component.d.ts +77 -0
  122. package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -0
  123. package/lib/components/header/header.component.d.ts +46 -0
  124. package/lib/components/header/header.component.d.ts.map +1 -0
  125. package/lib/components/library/library.component.d.ts +69 -0
  126. package/lib/components/library/library.component.d.ts.map +1 -0
  127. package/lib/components/library-filter/library-filter.component.d.ts +47 -0
  128. package/lib/components/library-filter/library-filter.component.d.ts.map +1 -0
  129. package/lib/components/library-list/library-list.component.d.ts +32 -0
  130. package/lib/components/library-list/library-list.component.d.ts.map +1 -0
  131. package/lib/components/library-player/library-player.component.d.ts +24 -0
  132. package/lib/components/library-player/library-player.component.d.ts.map +1 -0
  133. package/lib/components/manage-collaborator/manage-collaborator.component.d.ts +75 -0
  134. package/lib/components/manage-collaborator/manage-collaborator.component.d.ts.map +1 -0
  135. package/lib/components/meta-form/meta-form.component.d.ts +51 -0
  136. package/lib/components/meta-form/meta-form.component.d.ts.map +1 -0
  137. package/lib/components/options/options.component.d.ts +53 -0
  138. package/lib/components/options/options.component.d.ts.map +1 -0
  139. package/lib/components/plain-tree/plain-tree.component.d.ts +20 -0
  140. package/lib/components/plain-tree/plain-tree.component.d.ts.map +1 -0
  141. package/lib/components/progress-status/progress-status.component.d.ts +25 -0
  142. package/lib/components/progress-status/progress-status.component.d.ts.map +1 -0
  143. package/lib/components/publish-checklist/publish-checklist.component.d.ts +23 -0
  144. package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -0
  145. package/lib/components/quality-params-modal/quality-params-modal.component.d.ts +24 -0
  146. package/lib/components/quality-params-modal/quality-params-modal.component.d.ts.map +1 -0
  147. package/lib/components/question/question.component.d.ts +215 -0
  148. package/lib/components/question/question.component.d.ts.map +1 -0
  149. package/lib/components/quml-player/quml-player.component.d.ts +26 -0
  150. package/lib/components/quml-player/quml-player.component.d.ts.map +1 -0
  151. package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts +31 -0
  152. package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts.map +1 -0
  153. package/lib/components/resource-reorder/resource-reorder.component.d.ts +45 -0
  154. package/lib/components/resource-reorder/resource-reorder.component.d.ts.map +1 -0
  155. package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +13 -0
  156. package/lib/components/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
  157. package/lib/components/template/template.component.d.ts +21 -0
  158. package/lib/components/template/template.component.d.ts.map +1 -0
  159. package/lib/components/term-and-condition/term-and-condition.component.d.ts +26 -0
  160. package/lib/components/term-and-condition/term-and-condition.component.d.ts.map +1 -0
  161. package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts +27 -0
  162. package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts.map +1 -0
  163. package/lib/interfaces/McqForm.d.ts +32 -0
  164. package/lib/interfaces/McqForm.d.ts.map +1 -0
  165. package/lib/interfaces/editor.d.ts +78 -0
  166. package/lib/interfaces/editor.d.ts.map +1 -0
  167. package/lib/interfaces/framework.d.ts +46 -0
  168. package/lib/interfaces/framework.d.ts.map +1 -0
  169. package/lib/interfaces/httpOptions.d.ts +35 -0
  170. package/lib/interfaces/httpOptions.d.ts.map +1 -0
  171. package/lib/interfaces/requestParam.d.ts +24 -0
  172. package/lib/interfaces/requestParam.d.ts.map +1 -0
  173. package/lib/interfaces/serverResponse.d.ts +38 -0
  174. package/lib/interfaces/serverResponse.d.ts.map +1 -0
  175. package/lib/pipes/sanitize-html.pipe.d.ts +11 -0
  176. package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -0
  177. package/lib/services/config/config.service.d.ts +13 -0
  178. package/lib/services/config/config.service.d.ts.map +1 -0
  179. package/lib/services/data/data.service.d.ts +85 -0
  180. package/lib/services/data/data.service.d.ts.map +1 -0
  181. package/lib/services/dialcode/dialcode.service.d.ts +36 -0
  182. package/lib/services/dialcode/dialcode.service.d.ts.map +1 -0
  183. package/lib/services/editor/editor.service.d.ts +150 -0
  184. package/lib/services/editor/editor.service.d.ts.map +1 -0
  185. package/lib/services/framework/framework.service.d.ts +35 -0
  186. package/lib/services/framework/framework.service.d.ts.map +1 -0
  187. package/lib/services/helper/helper.service.d.ts +41 -0
  188. package/lib/services/helper/helper.service.d.ts.map +1 -0
  189. package/lib/services/player/player.service.d.ts +33 -0
  190. package/lib/services/player/player.service.d.ts.map +1 -0
  191. package/lib/services/public-data/public-data.service.d.ts +15 -0
  192. package/lib/services/public-data/public-data.service.d.ts.map +1 -0
  193. package/lib/services/question/question.service.d.ts +30 -0
  194. package/lib/services/question/question.service.d.ts.map +1 -0
  195. package/lib/services/telemetry/telemetry.service.d.ts +45 -0
  196. package/lib/services/telemetry/telemetry.service.d.ts.map +1 -0
  197. package/lib/services/toaster/toaster.service.d.ts +50 -0
  198. package/lib/services/toaster/toaster.service.d.ts.map +1 -0
  199. package/lib/services/tree/tree.service.d.ts +51 -0
  200. package/lib/services/tree/tree.service.d.ts.map +1 -0
  201. package/package.json +32 -0
  202. package/project-sunbird-sunbird-collection-editor.d.ts.map +1 -0
  203. package/public-api.d.ts +4 -0
  204. package/public-api.d.ts.map +1 -0
@@ -0,0 +1,192 @@
1
+ import { of as observableOf, throwError as observableThrowError } from 'rxjs';
2
+ import { mergeMap } from 'rxjs/operators';
3
+ import { Injectable } from '@angular/core';
4
+ import { v4 as uuidv4 } from 'uuid';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ /**
8
+ * Service to provide base CRUD methods to make api request.
9
+ *
10
+ */
11
+ export class DataService {
12
+ /**
13
+ * Constructor
14
+ * @param HttpClient http HttpClient reference
15
+ */
16
+ constructor(http) {
17
+ /**
18
+ * Contains base Url for api end points
19
+ */
20
+ this.baseUrl = 'api/';
21
+ this.http = http;
22
+ this._document = document;
23
+ const url = this._document.defaultView.questionEditorBaseUrl;
24
+ this.baseUrl = url ? `${url}/api/` : this.baseUrl;
25
+ }
26
+ /**
27
+ * for making get api calls which needs headers in response
28
+ * headers are fetched to get server time using Date attribute in header
29
+ * @param requestParam interface
30
+ */
31
+ getWithHeaders(requestParam) {
32
+ const httpOptions = {
33
+ headers: requestParam.header ? requestParam.header : this.getHeader(),
34
+ params: requestParam.param,
35
+ observe: 'response'
36
+ };
37
+ return this.http.get(this.baseUrl + requestParam.url, httpOptions).pipe(mergeMap(({ body, headers }) => {
38
+ // replace ts time with header date , this value is used in telemetry
39
+ body.ts = this.getDateDiff((headers.get('Date')));
40
+ if (body.responseCode !== 'OK') {
41
+ return observableThrowError(body);
42
+ }
43
+ return observableOf(body);
44
+ }));
45
+ }
46
+ /**
47
+ * for making get api calls
48
+ *
49
+ * @param requestParam interface
50
+ */
51
+ get(requestParam) {
52
+ const httpOptions = {
53
+ headers: requestParam.header ? requestParam.header : this.getHeader(),
54
+ params: requestParam.param
55
+ };
56
+ return this.http.get(this.baseUrl + requestParam.url, httpOptions).pipe(mergeMap((data) => {
57
+ if (data.responseCode !== 'OK') {
58
+ return observableThrowError(data);
59
+ }
60
+ return observableOf(data);
61
+ }));
62
+ }
63
+ /**
64
+ * for making post api calls with headers in response object
65
+ *
66
+ * @param RequestParam requestParam interface
67
+ *
68
+ */
69
+ postWithHeaders(requestParam) {
70
+ const httpOptions = {
71
+ headers: requestParam.header ? this.getHeader(requestParam.header) : this.getHeader(),
72
+ params: requestParam.param,
73
+ observe: 'response'
74
+ };
75
+ return this.http.post(this.baseUrl + requestParam.url, requestParam.data, httpOptions).pipe(mergeMap(({ body, headers }) => {
76
+ // replace ts time with header date , this value is used in telemetry
77
+ body.ts = this.getDateDiff((headers.get('Date')));
78
+ if (body.responseCode !== 'OK') {
79
+ return observableThrowError(body);
80
+ }
81
+ return observableOf(body);
82
+ }));
83
+ }
84
+ /**
85
+ * for making post api calls
86
+ * @param RequestParam requestParam interface
87
+ */
88
+ post(requestParam) {
89
+ const httpOptions = {
90
+ headers: requestParam.header ? this.getHeader(requestParam.header) : this.getHeader(),
91
+ params: requestParam.param
92
+ };
93
+ return this.http.post(this.baseUrl + requestParam.url, requestParam.data, httpOptions).pipe(mergeMap((data) => {
94
+ if (data.responseCode !== 'OK') {
95
+ return observableThrowError(data);
96
+ }
97
+ return observableOf(data);
98
+ }));
99
+ }
100
+ /**
101
+ * for making patch api calls
102
+ *
103
+ * @param RequestParam requestParam interface
104
+ *
105
+ */
106
+ patch(requestParam) {
107
+ const httpOptions = {
108
+ headers: requestParam.header ? requestParam.header : this.getHeader(),
109
+ params: requestParam.param
110
+ };
111
+ return this.http.patch(this.baseUrl + requestParam.url, requestParam.data, httpOptions).pipe(mergeMap((data) => {
112
+ if (data.responseCode !== 'OK') {
113
+ return observableThrowError(data);
114
+ }
115
+ return observableOf(data);
116
+ }));
117
+ }
118
+ /**
119
+ * for making delete api calls
120
+ * @param RequestParam requestParam interface
121
+ */
122
+ delete(requestParam) {
123
+ const httpOptions = {
124
+ headers: requestParam.header ? requestParam.header : this.getHeader(),
125
+ params: requestParam.param,
126
+ body: requestParam.data
127
+ };
128
+ return this.http.delete(this.baseUrl + requestParam.url, httpOptions).pipe(mergeMap((data) => {
129
+ if (data.responseCode !== 'OK') {
130
+ return observableThrowError(data);
131
+ }
132
+ return observableOf(data);
133
+ }));
134
+ }
135
+ /**
136
+ * for preparing headers
137
+ */
138
+ getHeader(headers) {
139
+ // tslint:disable-next-line:variable-name
140
+ const default_headers = {
141
+ Accept: 'application/json',
142
+ // 'X-Consumer-ID': 'X-Consumer-ID',
143
+ 'X-Source': 'web',
144
+ ts: '2020-12-31T16:23:27+05:30',
145
+ 'X-msgid': uuidv4(),
146
+ // tslint:disable-next-line:max-line-length
147
+ Authorization: ''
148
+ };
149
+ try {
150
+ this.deviceId = document.getElementById('deviceId').value || '9d1588c3cbc765c334ccc565e53d81a8';
151
+ this.appId = document.getElementById('appId').value || 'dev.dock.portal';
152
+ }
153
+ catch (err) { }
154
+ if (this.deviceId) {
155
+ default_headers['X-Device-ID'] = this.deviceId;
156
+ }
157
+ if (this.rootOrgId) {
158
+ default_headers['X-Org-code'] = this.rootOrgId;
159
+ }
160
+ if (this.channelId) {
161
+ default_headers['X-Channel-Id'] = this.channelId;
162
+ }
163
+ if (this.appId) {
164
+ default_headers['X-App-Id'] = this.appId;
165
+ }
166
+ if (headers) {
167
+ return { ...default_headers, ...headers };
168
+ }
169
+ else {
170
+ return { ...default_headers };
171
+ }
172
+ }
173
+ getDateDiff(serverdate) {
174
+ const currentdate = new Date();
175
+ const serverDate = new Date(serverdate);
176
+ if (serverdate) {
177
+ return (serverDate - currentdate) / 1000;
178
+ }
179
+ else {
180
+ return 0;
181
+ }
182
+ }
183
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
184
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataService, providedIn: 'root' }); }
185
+ }
186
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataService, decorators: [{
187
+ type: Injectable,
188
+ args: [{
189
+ providedIn: 'root'
190
+ }]
191
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL3NlcnZpY2VzL2RhdGEvZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxFQUFFLElBQUksWUFBWSxFQUFFLFVBQVUsSUFBSSxvQkFBb0IsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBUXBDOzs7R0FHRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBMkJ0Qjs7O09BR0c7SUFDSCxZQUFZLElBQWdCO1FBZDVCOztXQUVHO1FBQ0gsWUFBTyxHQUFHLE1BQU0sQ0FBQztRQVlmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBb0IsQ0FBQTtRQUNyQyxNQUFNLEdBQUcsR0FBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQW1CLENBQUMscUJBQXFCLENBQUM7UUFDdEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDbEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsWUFBMEI7UUFDdkMsTUFBTSxXQUFXLEdBQWdCO1lBQy9CLE9BQU8sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3JFLE1BQU0sRUFB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O1FBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRztRQUNqQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDaEQ7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsZUFBZSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDaEQ7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsZUFBZSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDbEQ7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUMxQztRQUNELElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTyxFQUFFLEdBQUcsZUFBZSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7U0FDM0M7YUFBTTtZQUNMLE9BQU8sRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxVQUFVO1FBQzVCLE1BQU0sV0FBVyxHQUFRLElBQUksSUFBSSxFQUFFLENBQUM7UUFDcEMsTUFBTSxVQUFVLEdBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsSUFBSSxVQUFVLEVBQUU7WUFDZCxPQUFPLENBQUUsVUFBVSxHQUFHLFdBQVcsQ0FBRSxHQUFHLElBQUksQ0FBQztTQUM1QzthQUFNO1lBQ0wsT0FBTyxDQUFDLENBQUM7U0FDVjtJQUNILENBQUM7K0dBbk5VLFdBQVc7bUhBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBvZiBhcyBvYnNlcnZhYmxlT2YsIHRocm93RXJyb3IgYXMgb2JzZXJ2YWJsZVRocm93RXJyb3IsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG4vLyBpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zZXJ2ZXJSZXNwb25zZSc7XG5pbXBvcnQgeyBSZXF1ZXN0UGFyYW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcXVlc3RQYXJhbSc7XG5pbXBvcnQgeyBIdHRwT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaHR0cE9wdGlvbnMnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gcHJvdmlkZSBiYXNlIENSVUQgbWV0aG9kcyB0byBtYWtlIGFwaSByZXF1ZXN0LlxuICpcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNlcnZpY2Uge1xuICAvKipcbiAgICogQ29udGFpbnMgcm9vdE9yZyBJZFxuICAgKi9cbiAgcm9vdE9yZ0lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb250YWlucyBjaGFubmVsIElkXG4gICAqL1xuICBjaGFubmVsSWQ6IHN0cmluZztcbiAgIC8qKlxuICAgICogQ29udGFpbnMgYXBwSWRcbiAgICAqL1xuICBhcHBJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ29udGFpbnMgZGV2b2NlIElkXG4gICAqL1xuICBkZXZpY2VJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ29udGFpbnMgYmFzZSBVcmwgZm9yIGFwaSBlbmQgcG9pbnRzXG4gICAqL1xuICBiYXNlVXJsID0gJ2FwaS8nO1xuICAvKipcbiAgICogYW5ndWxhciBIdHRwQ2xpZW50XG4gICAqL1xuICBodHRwOiBIdHRwQ2xpZW50O1xuXG4gIF9kb2N1bWVudDogRG9jdW1lbnRcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBIdHRwQ2xpZW50IGh0dHAgSHR0cENsaWVudCByZWZlcmVuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgIHRoaXMuX2RvY3VtZW50ID0gZG9jdW1lbnQgYXMgRG9jdW1lbnRcbiAgICBjb25zdCB1cmwgPSAodGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXcgYXMgYW55KS5xdWVzdGlvbkVkaXRvckJhc2VVcmw7XG4gICAgdGhpcy5iYXNlVXJsID0gdXJsID8gYCR7dXJsfS9hcGkvYDogdGhpcy5iYXNlVXJsXG4gIH1cblxuICAvKipcbiAgICogZm9yIG1ha2luZyBnZXQgYXBpIGNhbGxzIHdoaWNoIG5lZWRzIGhlYWRlcnMgaW4gcmVzcG9uc2VcbiAgICogIGhlYWRlcnMgYXJlIGZldGNoZWQgdG8gZ2V0IHNlcnZlciB0aW1lIHVzaW5nIERhdGUgYXR0cmlidXRlIGluIGhlYWRlclxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtIGludGVyZmFjZVxuICAgKi9cbiAgZ2V0V2l0aEhlYWRlcnMocmVxdWVzdFBhcmFtOiBSZXF1ZXN0UGFyYW0pOiBPYnNlcnZhYmxlPFNlcnZlclJlc3BvbnNlPiB7XG4gICAgY29uc3QgaHR0cE9wdGlvbnM6IEh0dHBPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdFBhcmFtLmhlYWRlciA/IHJlcXVlc3RQYXJhbS5oZWFkZXIgOiB0aGlzLmdldEhlYWRlcigpLFxuICAgICAgcGFyYW1zOiByZXF1ZXN0UGFyYW0ucGFyYW0sXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuYmFzZVVybCArIHJlcXVlc3RQYXJhbS51cmwsIGh0dHBPcHRpb25zKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKHtib2R5LCBoZWFkZXJzfTogYW55KSA9PiB7XG4gICAgICAgIC8vIHJlcGxhY2UgdHMgdGltZSB3aXRoIGhlYWRlciBkYXRlICwgdGhpcyB2YWx1ZSBpcyB1c2VkIGluIHRlbGVtZXRyeVxuICAgICAgICBib2R5LnRzID0gIHRoaXMuZ2V0RGF0ZURpZmYoKGhlYWRlcnMuZ2V0KCdEYXRlJykpKTtcbiAgICAgICAgaWYgKGJvZHkucmVzcG9uc2VDb2RlICE9PSAnT0snKSB7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVUaHJvd0Vycm9yKGJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoYm9keSk7XG4gICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogZm9yIG1ha2luZyBnZXQgYXBpIGNhbGxzXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW0gaW50ZXJmYWNlXG4gICAqL1xuICBnZXQocmVxdWVzdFBhcmFtOiBSZXF1ZXN0UGFyYW0pOiBPYnNlcnZhYmxlPFNlcnZlclJlc3BvbnNlPiB7XG4gICAgY29uc3QgaHR0cE9wdGlvbnM6IEh0dHBPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdFBhcmFtLmhlYWRlciA/IHJlcXVlc3RQYXJhbS5oZWFkZXIgOiB0aGlzLmdldEhlYWRlcigpLFxuICAgICAgcGFyYW1zOiByZXF1ZXN0UGFyYW0ucGFyYW1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5iYXNlVXJsICsgcmVxdWVzdFBhcmFtLnVybCwgaHR0cE9wdGlvbnMpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoZGF0YTogU2VydmVyUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGRhdGEucmVzcG9uc2VDb2RlICE9PSAnT0snKSB7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVUaHJvd0Vycm9yKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoZGF0YSk7XG4gICAgICB9KSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBmb3IgbWFraW5nIHBvc3QgYXBpIGNhbGxzIHdpdGggaGVhZGVycyBpbiByZXNwb25zZSBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIFJlcXVlc3RQYXJhbSByZXF1ZXN0UGFyYW0gaW50ZXJmYWNlXG4gICAqXG4gICAqL1xuICBwb3N0V2l0aEhlYWRlcnMocmVxdWVzdFBhcmFtOiBSZXF1ZXN0UGFyYW0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGh0dHBPcHRpb25zOiBIdHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RQYXJhbS5oZWFkZXIgPyB0aGlzLmdldEhlYWRlcihyZXF1ZXN0UGFyYW0uaGVhZGVyKSA6IHRoaXMuZ2V0SGVhZGVyKCksXG4gICAgICBwYXJhbXM6IHJlcXVlc3RQYXJhbS5wYXJhbSxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZSdcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuYmFzZVVybCArIHJlcXVlc3RQYXJhbS51cmwsIHJlcXVlc3RQYXJhbS5kYXRhLCBodHRwT3B0aW9ucykucGlwZShcbiAgICAgIG1lcmdlTWFwKCh7Ym9keSwgaGVhZGVyc306IGFueSkgPT4ge1xuICAgICAgICAvLyByZXBsYWNlIHRzIHRpbWUgd2l0aCBoZWFkZXIgZGF0ZSAsIHRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0ZWxlbWV0cnlcbiAgICAgICAgYm9keS50cyA9ICB0aGlzLmdldERhdGVEaWZmKChoZWFkZXJzLmdldCgnRGF0ZScpKSk7XG4gICAgICAgIGlmIChib2R5LnJlc3BvbnNlQ29kZSAhPT0gJ09LJykge1xuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlVGhyb3dFcnJvcihib2R5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKGJvZHkpO1xuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGZvciBtYWtpbmcgcG9zdCBhcGkgY2FsbHNcbiAgICogQHBhcmFtIFJlcXVlc3RQYXJhbSByZXF1ZXN0UGFyYW0gaW50ZXJmYWNlXG4gICAqL1xuICBwb3N0KHJlcXVlc3RQYXJhbTogUmVxdWVzdFBhcmFtKTogT2JzZXJ2YWJsZTxTZXJ2ZXJSZXNwb25zZT4ge1xuICAgIGNvbnN0IGh0dHBPcHRpb25zOiBIdHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RQYXJhbS5oZWFkZXIgPyB0aGlzLmdldEhlYWRlcihyZXF1ZXN0UGFyYW0uaGVhZGVyKSA6IHRoaXMuZ2V0SGVhZGVyKCksXG4gICAgICBwYXJhbXM6IHJlcXVlc3RQYXJhbS5wYXJhbVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5iYXNlVXJsICsgcmVxdWVzdFBhcmFtLnVybCwgcmVxdWVzdFBhcmFtLmRhdGEsIGh0dHBPcHRpb25zKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKGRhdGE6IFNlcnZlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChkYXRhLnJlc3BvbnNlQ29kZSAhPT0gJ09LJykge1xuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlVGhyb3dFcnJvcihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKGRhdGEpO1xuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGZvciBtYWtpbmcgcGF0Y2ggYXBpIGNhbGxzXG4gICAqXG4gICAqIEBwYXJhbSBSZXF1ZXN0UGFyYW0gcmVxdWVzdFBhcmFtIGludGVyZmFjZVxuICAgKlxuICAgKi9cbiAgcGF0Y2gocmVxdWVzdFBhcmFtOiBSZXF1ZXN0UGFyYW0pOiBPYnNlcnZhYmxlPFNlcnZlclJlc3BvbnNlPiB7XG4gICAgY29uc3QgaHR0cE9wdGlvbnM6IEh0dHBPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdFBhcmFtLmhlYWRlciA/IHJlcXVlc3RQYXJhbS5oZWFkZXIgOiB0aGlzLmdldEhlYWRlcigpLFxuICAgICAgcGFyYW1zOiByZXF1ZXN0UGFyYW0ucGFyYW1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaCh0aGlzLmJhc2VVcmwgKyByZXF1ZXN0UGFyYW0udXJsLCByZXF1ZXN0UGFyYW0uZGF0YSwgaHR0cE9wdGlvbnMpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoZGF0YTogU2VydmVyUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGRhdGEucmVzcG9uc2VDb2RlICE9PSAnT0snKSB7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVUaHJvd0Vycm9yKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoZGF0YSk7XG4gICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogZm9yIG1ha2luZyBkZWxldGUgYXBpIGNhbGxzXG4gICAqIEBwYXJhbSBSZXF1ZXN0UGFyYW0gcmVxdWVzdFBhcmFtIGludGVyZmFjZVxuICAgKi9cbiAgZGVsZXRlKHJlcXVlc3RQYXJhbTogUmVxdWVzdFBhcmFtKTogT2JzZXJ2YWJsZTxTZXJ2ZXJSZXNwb25zZT4ge1xuICAgIGNvbnN0IGh0dHBPcHRpb25zOiBIdHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RQYXJhbS5oZWFkZXIgPyByZXF1ZXN0UGFyYW0uaGVhZGVyIDogdGhpcy5nZXRIZWFkZXIoKSxcbiAgICAgIHBhcmFtczogcmVxdWVzdFBhcmFtLnBhcmFtLFxuICAgICAgYm9keTogcmVxdWVzdFBhcmFtLmRhdGFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKHRoaXMuYmFzZVVybCArIHJlcXVlc3RQYXJhbS51cmwsIGh0dHBPcHRpb25zKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKGRhdGE6IFNlcnZlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChkYXRhLnJlc3BvbnNlQ29kZSAhPT0gJ09LJykge1xuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlVGhyb3dFcnJvcihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKGRhdGEpO1xuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGZvciBwcmVwYXJpbmcgaGVhZGVyc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRIZWFkZXIoaGVhZGVycz86IEh0dHBPcHRpb25zWydoZWFkZXJzJ10pOiBIdHRwT3B0aW9uc1snaGVhZGVycyddIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIGNvbnN0IGRlZmF1bHRfaGVhZGVycyA9IHtcbiAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLy8gJ1gtQ29uc3VtZXItSUQnOiAnWC1Db25zdW1lci1JRCcsXG4gICAgICAnWC1Tb3VyY2UnOiAnd2ViJyxcbiAgICAgIHRzOiAnMjAyMC0xMi0zMVQxNjoyMzoyNyswNTozMCcsIC8vIG1vbWVudCgpLmZvcm1hdCgpLCAvL1RPRE86OlxuICAgICAgJ1gtbXNnaWQnOiB1dWlkdjQoKSxcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIEF1dGhvcml6YXRpb246ICcnXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmRldmljZUlkID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXZpY2VJZCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlIHx8ICc5ZDE1ODhjM2NiYzc2NWMzMzRjY2M1NjVlNTNkODFhOCc7XG4gICAgICB0aGlzLmFwcElkID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBJZCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlIHx8ICdkZXYuZG9jay5wb3J0YWwnO1xuICAgIH0gY2F0Y2ggKGVycikgeyB9XG4gICAgaWYgKHRoaXMuZGV2aWNlSWQpIHtcbiAgICAgIGRlZmF1bHRfaGVhZGVyc1snWC1EZXZpY2UtSUQnXSA9IHRoaXMuZGV2aWNlSWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnJvb3RPcmdJZCkge1xuICAgICAgZGVmYXVsdF9oZWFkZXJzWydYLU9yZy1jb2RlJ10gPSB0aGlzLnJvb3RPcmdJZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hhbm5lbElkKSB7XG4gICAgICBkZWZhdWx0X2hlYWRlcnNbJ1gtQ2hhbm5lbC1JZCddID0gdGhpcy5jaGFubmVsSWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmFwcElkKSB7XG4gICAgICBkZWZhdWx0X2hlYWRlcnNbJ1gtQXBwLUlkJ10gPSB0aGlzLmFwcElkO1xuICAgIH1cbiAgICBpZiAoaGVhZGVycykge1xuICAgICAgcmV0dXJuIHsgLi4uZGVmYXVsdF9oZWFkZXJzLCAuLi5oZWFkZXJzIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IC4uLmRlZmF1bHRfaGVhZGVycyB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZURpZmYoc2VydmVyZGF0ZSk6IG51bWJlciB7XG4gICAgY29uc3QgY3VycmVudGRhdGU6IGFueSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3Qgc2VydmVyRGF0ZTogYW55ID0gbmV3IERhdGUoc2VydmVyZGF0ZSk7XG4gICAgaWYgKHNlcnZlcmRhdGUpIHtcbiAgICAgIHJldHVybiAoIHNlcnZlckRhdGUgLSBjdXJyZW50ZGF0ZSApIC8gMTAwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,309 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { of } from 'rxjs';
3
+ import * as _ from 'lodash-es';
4
+ import { map } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../config/config.service";
7
+ import * as i2 from "../public-data/public-data.service";
8
+ import * as i3 from "../../services/tree/tree.service";
9
+ import * as i4 from "../../services/toaster/toaster.service";
10
+ export class DialcodeService {
11
+ constructor(configService, publicDataService, treeService, toasterService) {
12
+ this.configService = configService;
13
+ this.publicDataService = publicDataService;
14
+ this.treeService = treeService;
15
+ this.toasterService = toasterService;
16
+ this.invaliddialCodeMap = {};
17
+ this.dialCodeMap = {};
18
+ this.dialcodeList = [];
19
+ this.maxChar = 6;
20
+ }
21
+ reserveDialCode(indetifier, requestCount) {
22
+ const req = {
23
+ url: this.configService.urlConFig.URLS.DIALCODE.RESERVE + indetifier,
24
+ data: {
25
+ request: {
26
+ dialcodes: {
27
+ count: requestCount,
28
+ qrCodeSpec: {
29
+ errorCorrectionLevel: 'H'
30
+ }
31
+ }
32
+ }
33
+ }
34
+ };
35
+ return this.publicDataService.post(req);
36
+ }
37
+ linkDialcode(indetifier, dialcodes) {
38
+ const req = {
39
+ url: this.configService.urlConFig.URLS.DIALCODE.LINK + indetifier,
40
+ data: {
41
+ request: {
42
+ content: dialcodes
43
+ }
44
+ }
45
+ };
46
+ return this.publicDataService.post(req);
47
+ }
48
+ downloadQRCode(processId) {
49
+ const req = {
50
+ url: this.configService.urlConFig.URLS.DIALCODE.PROCESS + processId,
51
+ };
52
+ return this.publicDataService.get(req);
53
+ }
54
+ searchDialCode(dialcode) {
55
+ const req = {
56
+ url: this.configService.urlConFig.URLS.DIALCODE.SEARCH,
57
+ data: {
58
+ request: {
59
+ search: {
60
+ identifier: dialcode,
61
+ }
62
+ }
63
+ }
64
+ };
65
+ return this.publicDataService.post(req);
66
+ }
67
+ updateDialCode(dialcode) {
68
+ if (!_.isEmpty(dialcode)) {
69
+ dialcode = _.isArray(dialcode) ? dialcode[0] : dialcode;
70
+ const editFlag = (dialcode && (dialcode.length === this.maxChar)) ? true : false;
71
+ if (_.indexOf(this.dialcodeList, dialcode) !== -1) {
72
+ return of({ isEditable: editFlag, isValid: true });
73
+ }
74
+ else {
75
+ return this.searchDialCode(dialcode).pipe(map(response => {
76
+ if (response.result.count) {
77
+ _.uniq(this.dialcodeList.push(response.result.dialcodes[0].identifier));
78
+ return { isEditable: editFlag, isValid: true };
79
+ }
80
+ else {
81
+ return { isEditable: editFlag, isValid: false };
82
+ }
83
+ }));
84
+ }
85
+ }
86
+ else {
87
+ return of({ isEditable: false });
88
+ }
89
+ }
90
+ clearDialCode() {
91
+ const currentNode = this.treeService.getActiveNode().data;
92
+ if (_.has(this.invaliddialCodeMap, currentNode.id)) {
93
+ _.unset(this.invaliddialCodeMap, currentNode.id);
94
+ }
95
+ if (_.has(this.dialCodeMap, currentNode.id)) {
96
+ _.unset(this.dialCodeMap, currentNode.id);
97
+ }
98
+ if (currentNode.metadata && currentNode.metadata.dialcodes === null) {
99
+ if (this.treeService.treeCache.nodesModified && this.treeService.treeCache.nodesModified[currentNode.id]) {
100
+ this.treeService.treeCache.nodesModified[currentNode.id].metadata.dialcodes = [];
101
+ }
102
+ this.dialCodeMap[currentNode.id] = '';
103
+ currentNode.metadata.dialcodes = null;
104
+ }
105
+ this.treeService.nextTreeStatus('modified');
106
+ }
107
+ changeDialCode(dialcode) {
108
+ const currentNode = this.treeService.getActiveNode().data;
109
+ if (_.isEmpty(dialcode)) {
110
+ if (_.has(this.invaliddialCodeMap, currentNode.id)) {
111
+ _.unset(this.invaliddialCodeMap, currentNode.id);
112
+ }
113
+ if (_.has(this.dialCodeMap, currentNode.id)) {
114
+ _.unset(this.dialCodeMap, currentNode.id);
115
+ }
116
+ if (currentNode.metadata && currentNode.metadata.dialcodes && currentNode.metadata.dialcodes.length) {
117
+ if (this.treeService.treeCache.nodesModified && this.treeService.treeCache.nodesModified[currentNode.id]) {
118
+ this.treeService.treeCache.nodesModified[currentNode.id].metadata.dialcodes = [];
119
+ }
120
+ this.dialCodeMap[currentNode.id] = '';
121
+ currentNode.metadata.dialcodes = null;
122
+ }
123
+ this.treeService.nextTreeStatus('modified');
124
+ }
125
+ }
126
+ validateDialCode(dialcode) {
127
+ if (this.checkDuplicateDialCode(dialcode)) {
128
+ return of({ isEditable: true, isValid: false, statusMsg: 'Duplicate QR code' });
129
+ }
130
+ else if (String(dialcode).match(/^[A-Z0-9]{2,}$/)) {
131
+ const node = this.treeService.getActiveNode();
132
+ if (this.treeService.treeCache.nodesModified && this.treeService.treeCache.nodesModified[node.data.id]) {
133
+ this.treeService.treeCache.nodesModified[node.data.id].metadata.dialcodes = _.castArray(dialcode);
134
+ }
135
+ if (_.indexOf(this.dialcodeList, dialcode) !== -1) {
136
+ if (_.has(this.invaliddialCodeMap, node.data.id)) {
137
+ _.unset(this.invaliddialCodeMap, node.data.id);
138
+ }
139
+ this.dialCodeMap[node.data.id] = dialcode;
140
+ node.data.metadata.dialcodes = dialcode;
141
+ this.treeService.nextTreeStatus('modified');
142
+ return of({ isEditable: true, isValid: true });
143
+ }
144
+ else {
145
+ return this.searchDialCode(dialcode).pipe(map(response => {
146
+ if (response.result.count) {
147
+ _.uniq(this.dialcodeList.push(dialcode));
148
+ if (_.has(this.invaliddialCodeMap, node.data.id)) {
149
+ _.unset(this.invaliddialCodeMap, node.data.id);
150
+ }
151
+ this.dialCodeMap[node.data.id] = dialcode;
152
+ node.data.metadata.dialcodes = dialcode;
153
+ this.treeService.nextTreeStatus('modified');
154
+ return { isEditable: true, isValid: true };
155
+ }
156
+ else {
157
+ if (_.has(this.dialCodeMap, node.data.id)) {
158
+ _.unset(this.dialCodeMap, node.data.id);
159
+ }
160
+ this.invaliddialCodeMap[node.data.id] = dialcode;
161
+ node.data.metadata.dialcodes = dialcode;
162
+ this.treeService.nextTreeStatus('modified');
163
+ return { isEditable: true, isValid: false };
164
+ }
165
+ }));
166
+ }
167
+ }
168
+ else {
169
+ return of({ isEditable: false });
170
+ }
171
+ }
172
+ checkDuplicateDialCode(activeQRCode) {
173
+ const getAllNodes = this.treeService.getTreeObject();
174
+ const findValuesDeepByKey = (obj, key, res = []) => (
175
+ // tslint:disable-next-line:no-unused-expression
176
+ _.cloneDeepWith(obj, (v, k) => { k === key && res.push(v); }) && res);
177
+ const dialcodeArray = _.flattenDeep(findValuesDeepByKey(getAllNodes, 'dialcodes'));
178
+ if (_.includes(dialcodeArray, activeQRCode)) {
179
+ return true;
180
+ }
181
+ return false;
182
+ }
183
+ validateUnitsDialcodes() {
184
+ let dialCodeMisssing = false;
185
+ const rootNode = this.treeService.getTreeObject();
186
+ let dialcodes;
187
+ rootNode.visit((node) => {
188
+ dialcodes = node.data.metadata.dialcodes;
189
+ const unitDialCode = _.isArray(dialcodes) ? dialcodes[0] : dialcodes;
190
+ if (node.data.metadata.visibility === 'Parent' || node.data.root) {
191
+ if (node.data.metadata.dialcodeRequired === 'Yes' && !_.includes(this.dialcodeList, unitDialCode)) {
192
+ dialCodeMisssing = true;
193
+ this.treeService.highlightNode(node.data.id, 'add');
194
+ }
195
+ else if (node.data.metadata.dialcodeRequired === 'Yes' && _.isEmpty(dialcodes)) {
196
+ dialCodeMisssing = true;
197
+ this.treeService.highlightNode(node.data.id, 'add');
198
+ }
199
+ // else if (node.data.metadata.dialcodeRequired === 'No' && !_.isEmpty(dialcodes)) {
200
+ // dialCodeMisssing = true;
201
+ // this.treeService.highlightNode(node.data.id, 'add');
202
+ // }
203
+ }
204
+ });
205
+ if (dialCodeMisssing) {
206
+ return false;
207
+ }
208
+ else {
209
+ return true;
210
+ }
211
+ }
212
+ highlightNodeForInvalidDialCode(res, nodesModified, indetifier) {
213
+ const mapArr = [];
214
+ _.forEach(this.invaliddialCodeMap, (value, key) => {
215
+ if (_.has(res.identifiers, key)) {
216
+ delete this.invaliddialCodeMap[key];
217
+ this.invaliddialCodeMap[res.identifiers[key]] = value;
218
+ this.treeService.highlightNode(res.identifiers[key], 'add');
219
+ this.storeDialCodes(res.identifiers[key], value);
220
+ }
221
+ else {
222
+ this.storeDialCodes(key, value);
223
+ this.treeService.highlightNode(key, 'add');
224
+ }
225
+ });
226
+ _.forEach(this.dialCodeMap, (value, key) => {
227
+ if (_.has(res.identifiers, key)) {
228
+ delete this.dialCodeMap[key];
229
+ this.dialCodeMap[res.identifiers[key]] = value;
230
+ mapArr.push({ identifier: res.identifiers[key], dialcode: value });
231
+ this.treeService.highlightNode(res.identifiers[key], 'remove');
232
+ this.storeDialCodes(res.identifiers[key], value);
233
+ }
234
+ else {
235
+ mapArr.push({ identifier: key, dialcode: value });
236
+ this.storeDialCodes(key, value);
237
+ this.treeService.highlightNode(key, 'remove');
238
+ }
239
+ });
240
+ let dialcodesUpdated = false;
241
+ _.forIn(nodesModified, (node) => {
242
+ if ((node.metadata.dialcodes || node.metadata.dialcodes === null) && !dialcodesUpdated) {
243
+ dialcodesUpdated = true;
244
+ }
245
+ else {
246
+ const dialObj = _.find(mapArr, (Obj) => {
247
+ return Obj.identifier === res.content_id;
248
+ });
249
+ if (!_.isUndefined(dialObj)) {
250
+ dialcodesUpdated = true;
251
+ }
252
+ }
253
+ });
254
+ if (dialcodesUpdated) {
255
+ this.dialcodeLink(mapArr, indetifier);
256
+ }
257
+ }
258
+ storeDialCodes(nodeId, dialCode) {
259
+ const node = this.treeService.getNodeById(nodeId);
260
+ if (node && node.data) {
261
+ node.data.metadata.dialcodes = dialCode;
262
+ }
263
+ }
264
+ dialcodeLink(dialcodeMap, indetifier) {
265
+ if (!_.isEmpty(dialcodeMap)) {
266
+ this.linkDialcode(indetifier, dialcodeMap).subscribe((res) => {
267
+ if (!_.isEmpty(this.dialCodeMap) && !_.isEmpty(this.invaliddialCodeMap)) {
268
+ this.toasterService.warning(_.get(this.configService, 'labelConfig.messages.warning.002'));
269
+ }
270
+ else {
271
+ this.toasterService.success(_.get(this.configService, 'labelConfig.messages.success.009'));
272
+ }
273
+ this.clearDialCodeMaps();
274
+ }, (err) => {
275
+ if (err && err.error && err.error.params && err.error.params.err === 'ERR_DIALCODE_LINK') {
276
+ this.toasterService.error(err.error.params.errmsg);
277
+ }
278
+ else {
279
+ this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.012'));
280
+ }
281
+ });
282
+ }
283
+ else if (!_.isEmpty(this.invaliddialCodeMap)) {
284
+ this.toasterService.warning(_.get(this.configService, 'labelConfig.messages.warning.002'));
285
+ }
286
+ }
287
+ clearDialCodeMaps() {
288
+ this.dialCodeMap = {};
289
+ this.invaliddialCodeMap = {};
290
+ }
291
+ readExistingQrCode() {
292
+ const rootNode = this.treeService.getTreeObject();
293
+ this.dialcodeList = [];
294
+ rootNode.visit((node) => {
295
+ if (!_.isEmpty(node.data.metadata.dialcodes)) {
296
+ this.dialcodeList.push(node.data.metadata.dialcodes[0]);
297
+ }
298
+ });
299
+ }
300
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialcodeService, deps: [{ token: i1.ConfigService }, { token: i2.PublicDataService }, { token: i3.TreeService }, { token: i4.ToasterService }], target: i0.ɵɵFactoryTarget.Injectable }); }
301
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialcodeService, providedIn: 'root' }); }
302
+ }
303
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialcodeService, decorators: [{
304
+ type: Injectable,
305
+ args: [{
306
+ providedIn: 'root'
307
+ }]
308
+ }], ctorParameters: function () { return [{ type: i1.ConfigService }, { type: i2.PublicDataService }, { type: i3.TreeService }, { type: i4.ToasterService }]; } });
309
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGNvZGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbGxlY3Rpb24tZWRpdG9yLWxpYnJhcnkvc3JjL2xpYi9zZXJ2aWNlcy9kaWFsY29kZS9kaWFsY29kZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEtBQUssQ0FBQyxNQUFNLFdBQVcsQ0FBQztBQU0vQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQUtyQyxNQUFNLE9BQU8sZUFBZTtJQU0xQixZQUFtQixhQUE0QixFQUFVLGlCQUFvQyxFQUN6RSxXQUF3QixFQUFVLGNBQThCO1FBRGpFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUN6RSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUw3RSx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDakIsWUFBTyxHQUFHLENBQUMsQ0FBQztJQUVvRSxDQUFDO0lBRXpGLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWTtRQUN0QyxNQUFNLEdBQUcsR0FBRztZQUNWLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxVQUFVO1lBQ3BFLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFO3dCQUNULEtBQUssRUFBRSxZQUFZO3dCQUNuQixVQUFVLEVBQUU7NEJBQ1Ysb0JBQW9CLEVBQUUs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QUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFFO1FBQ3hCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBRSxJQUFJLEVBQUcsRUFBRTtZQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0Q7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBalJVLGVBQWU7bUhBQWYsZUFBZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IERpYWxjb2RlQ3Vyc29yIH0gZnJvbSAnQHByb2plY3Qtc3VuYmlyZC9jb21tb24tZm9ybS1lbGVtZW50cy1mdWxsJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHVibGljRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9wdWJsaWMtZGF0YS9wdWJsaWMtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJlZS90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b2FzdGVyL3RvYXN0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERpYWxjb2RlU2VydmljZSBpbXBsZW1lbnRzIERpYWxjb2RlQ3Vyc29yIHtcblxuICBwdWJsaWMgaW52YWxpZGRpYWxDb2RlTWFwID0ge307XG4gIHB1YmxpYyBkaWFsQ29kZU1hcCA9IHt9O1xuICBwdWJsaWMgZGlhbGNvZGVMaXN0ID0gW107XG4gIHByaXZhdGUgbWF4Q2hhciA9IDY7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLCBwcml2YXRlIHB1YmxpY0RhdGFTZXJ2aWNlOiBQdWJsaWNEYXRhU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogVHJlZVNlcnZpY2UsIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlKSB7IH1cblxuICByZXNlcnZlRGlhbENvZGUoaW5kZXRpZmllciwgcmVxdWVzdENvdW50KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCByZXEgPSB7XG4gICAgICB1cmw6IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMUy5ESUFMQ09ERS5SRVNFUlZFICsgaW5kZXRpZmllcixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIGRpYWxjb2Rlczoge1xuICAgICAgICAgICAgY291bnQ6IHJlcXVlc3RDb3VudCxcbiAgICAgICAgICAgIHFyQ29kZVNwZWM6IHtcbiAgICAgICAgICAgICAgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6ICdIJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChyZXEpO1xuICB9XG5cbiAgbGlua0RpYWxjb2RlKGluZGV0aWZpZXIsIGRpYWxjb2Rlcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgdXJsOiB0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLlVSTFMuRElBTENPREUuTElOSyArIGluZGV0aWZpZXIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBjb250ZW50OiBkaWFsY29kZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UucG9zdChyZXEpO1xuICB9XG5cbiAgZG93bmxvYWRRUkNvZGUocHJvY2Vzc0lkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCByZXEgPSB7XG4gICAgICB1cmw6IHRoaXMuY29uZmlnU2VydmljZS51cmxDb25GaWcuVVJMUy5ESUFMQ09ERS5QUk9DRVNTICsgcHJvY2Vzc0lkLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucHVibGljRGF0YVNlcnZpY2UuZ2V0KHJlcSk7XG4gIH1cblxuICBzZWFyY2hEaWFsQ29kZShkaWFsY29kZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgdXJsOiB0aGlzLmNvbmZpZ1NlcnZpY2UudXJsQ29uRmlnLlVSTFMuRElBTENPREUuU0VBUkNILFxuICAgICAgZGF0YToge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgc2VhcmNoOiB7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiBkaWFsY29kZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnB1YmxpY0RhdGFTZXJ2aWNlLnBvc3QocmVxKTtcbiAgfVxuXG4gIHVwZGF0ZURpYWxDb2RlKGRpYWxjb2RlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoIV8uaXNFbXB0eShkaWFsY29kZSkpIHtcbiAgICAgIGRpYWxjb2RlID0gXy5pc0FycmF5KGRpYWxjb2RlKSA/IGRpYWxjb2RlWzBdIDogZGlhbGNvZGU7XG4gICAgICBjb25zdCBlZGl0RmxhZyA9IChkaWFsY29kZSAmJiAoZGlhbGNvZGUubGVuZ3RoID09PSB0aGlzLm1heENoYXIpKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGlmIChfLmluZGV4T2YodGhpcy5kaWFsY29kZUxpc3QsIGRpYWxjb2RlKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIG9mKHsgaXNFZGl0YWJsZTogZWRpdEZsYWcsIGlzVmFsaWQ6IHRydWUgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hEaWFsQ29kZShkaWFsY29kZSkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHQuY291bnQpIHtcbiAgICAgICAgICAgIF8udW5pcSh0aGlzLmRpYWxjb2RlTGlzdC5wdXNoKHJlc3BvbnNlLnJlc3VsdC5kaWFsY29kZXNbMF0uaWRlbnRpZmllcikpO1xuICAgICAgICAgICAgcmV0dXJuIHsgaXNFZGl0YWJsZTogZWRpdEZsYWcsIGlzVmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgaXNFZGl0YWJsZTogZWRpdEZsYWcsIGlzVmFsaWQ6IGZhbHNlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZih7IGlzRWRpdGFibGU6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRGlhbENvZGUoKSB7XG4gICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldEFjdGl2ZU5vZGUoKS5kYXRhO1xuICAgIGlmIChfLmhhcyh0aGlzLmludmFsaWRkaWFsQ29kZU1hcCwgY3VycmVudE5vZGUuaWQpKSB7IF8udW5zZXQodGhpcy5pbnZhbGlkZGlhbENvZGVNYXAsIGN1cnJlbnROb2RlLmlkKTsgfVxuICAgIGlmIChfLmhhcyh0aGlzLmRpYWxDb2RlTWFwLCBjdXJyZW50Tm9kZS5pZCkpIHsgXy51bnNldCh0aGlzLmRpYWxDb2RlTWFwLCBjdXJyZW50Tm9kZS5pZCk7IH1cbiAgICBpZiAoY3VycmVudE5vZGUubWV0YWRhdGEgJiYgY3VycmVudE5vZGUubWV0YWRhdGEuZGlhbGNvZGVzID09PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50cmVlU2VydmljZS50cmVlQ2FjaGUubm9kZXNNb2RpZmllZCAmJiB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDYWNoZS5ub2Rlc01vZGlmaWVkW2N1cnJlbnROb2RlLmlkXSkge1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDYWNoZS5ub2Rlc01vZGlmaWVkW2N1cnJlbnROb2RlLmlkXS5tZXRhZGF0YS5kaWFsY29kZXMgPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbENvZGVNYXBbY3VycmVudE5vZGUuaWRdID0gJyc7XG4gICAgICBjdXJyZW50Tm9kZS5tZXRhZGF0YS5kaWFsY29kZXMgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnRyZWVTZXJ2aWNlLm5leHRUcmVlU3RhdHVzKCdtb2RpZmllZCcpO1xuICB9XG5cbiAgY2hhbmdlRGlhbENvZGUoZGlhbGNvZGUpIHtcbiAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0QWN0aXZlTm9kZSgpLmRhdGE7XG4gICAgaWYgKF8uaXNFbXB0eShkaWFsY29kZSkpIHtcbiAgICAgIGlmIChfLmhhcyh0aGlzLmludmFsaWRkaWFsQ29kZU1hcCwgY3VycmVudE5vZGUuaWQpKSB7IF8udW5zZXQodGhpcy5pbnZhbGlkZGlhbENvZGVNYXAsIGN1cnJlbnROb2RlLmlkKTsgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMuZGlhbENvZGVNYXAsIGN1cnJlbnROb2RlLmlkKSkgeyBfLnVuc2V0KHRoaXMuZGlhbENvZGVNYXAsIGN1cnJlbnROb2RlLmlkKTsgfVxuICAgICAgaWYgKGN1cnJlbnROb2RlLm1ldGFkYXRhICYmIGN1cnJlbnROb2RlLm1ldGFkYXRhLmRpYWxjb2RlcyAmJiBjdXJyZW50Tm9kZS5tZXRhZGF0YS5kaWFsY29kZXMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDYWNoZS5ub2Rlc01vZGlmaWVkICYmIHRoaXMudHJlZVNlcnZpY2UudHJlZUNhY2hlLm5vZGVzTW9kaWZpZWRbY3VycmVudE5vZGUuaWRdKSB7XG4gICAgICAgICAgdGhpcy50cmVlU2VydmljZS50cmVlQ2FjaGUubm9kZXNNb2RpZmllZFtjdXJyZW50Tm9kZS5pZF0ubWV0YWRhdGEuZGlhbGNvZGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaWFsQ29kZU1hcFtjdXJyZW50Tm9kZS5pZF0gPSAnJztcbiAgICAgICAgY3VycmVudE5vZGUubWV0YWRhdGEuZGlhbGNvZGVzID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJlZVNlcnZpY2UubmV4dFRyZWVTdGF0dXMoJ21vZGlmaWVkJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVEaWFsQ29kZShkaWFsY29kZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRoaXMuY2hlY2tEdXBsaWNhdGVEaWFsQ29kZShkaWFsY29kZSkpIHtcbiAgICAgIHJldHVybiBvZih7IGlzRWRpdGFibGU6IHRydWUsIGlzVmFsaWQ6IGZhbHNlLCBzdGF0dXNNc2c6ICdEdXBsaWNhdGUgUVIgY29kZScgfSk7XG4gICAgfSBlbHNlIGlmIChTdHJpbmcoZGlhbGNvZGUpLm1hdGNoKC9eW0EtWjAtOV17Mix9JC8pKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlU2VydmljZS5nZXRBY3RpdmVOb2RlKCk7XG4gICAgICBpZiAodGhpcy50cmVlU2VydmljZS50cmVlQ2FjaGUubm9kZXNNb2RpZmllZCAmJiB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDYWNoZS5ub2Rlc01vZGlmaWVkW25vZGUuZGF0YS5pZF0pIHtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS50cmVlQ2FjaGUubm9kZXNNb2RpZmllZFtub2RlLmRhdGEuaWRdLm1ldGFkYXRhLmRpYWxjb2RlcyA9IF8uY2FzdEFycmF5KGRpYWxjb2RlKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmluZGV4T2YodGhpcy5kaWFsY29kZUxpc3QsIGRpYWxjb2RlKSAhPT0gLTEpIHtcbiAgICAgICAgaWYgKF8uaGFzKHRoaXMuaW52YWxpZGRpYWxDb2RlTWFwLCBub2RlLmRhdGEuaWQpKSB7IF8udW5zZXQodGhpcy5pbnZhbGlkZGlhbENvZGVNYXAsIG5vZGUuZGF0YS5pZCk7IH1cbiAgICAgICAgdGhpcy5kaWFsQ29kZU1hcFtub2RlLmRhdGEuaWRdID0gZGlhbGNvZGU7XG4gICAgICAgIG5vZGUuZGF0YS5tZXRhZGF0YS5kaWFsY29kZXMgPSBkaWFsY29kZTtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5uZXh0VHJlZVN0YXR1cygnbW9kaWZpZWQnKTtcbiAgICAgICAgcmV0dXJuIG9mKHsgaXNFZGl0YWJsZTogdHJ1ZSwgaXNWYWxpZDogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaERpYWxDb2RlKGRpYWxjb2RlKS5waXBlKG1hcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdC5jb3VudCkge1xuICAgICAgICAgICAgXy51bmlxKHRoaXMuZGlhbGNvZGVMaXN0LnB1c2goZGlhbGNvZGUpKTtcbiAgICAgICAgICAgIGlmIChfLmhhcyh0aGlzLmludmFsaWRkaWFsQ29kZU1hcCwgbm9kZS5kYXRhLmlkKSkgeyBfLnVuc2V0KHRoaXMuaW52YWxpZGRpYWxDb2RlTWFwLCBub2RlLmRhdGEuaWQpOyB9XG4gICAgICAgICAgICB0aGlzLmRpYWxDb2RlTWFwW25vZGUuZGF0YS5pZF0gPSBkaWFsY29kZTtcbiAgICAgICAgICAgIG5vZGUuZGF0YS5tZXRhZGF0YS5kaWFsY29kZXMgPSBkaWFsY29kZTtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UubmV4dFRyZWVTdGF0dXMoJ21vZGlmaWVkJyk7XG4gICAgICAgICAgICByZXR1cm4geyBpc0VkaXRhYmxlOiB0cnVlLCBpc1ZhbGlkOiB0cnVlIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChfLmhhcyh0aGlzLmRpYWxDb2RlTWFwLCBub2RlLmRhdGEuaWQpKSB7IF8udW5zZXQodGhpcy5kaWFsQ29kZU1hcCwgbm9kZS5kYXRhLmlkKTsgfVxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkZGlhbENvZGVNYXBbbm9kZS5kYXRhLmlkXSA9IGRpYWxjb2RlO1xuICAgICAgICAgICAgbm9kZS5kYXRhLm1ldGFkYXRhLmRpYWxjb2RlcyA9IGRpYWxjb2RlO1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5uZXh0VHJlZVN0YXR1cygnbW9kaWZpZWQnKTtcbiAgICAgICAgICAgIHJldHVybiB7IGlzRWRpdGFibGU6IHRydWUsIGlzVmFsaWQ6IGZhbHNlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZih7IGlzRWRpdGFibGU6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRHVwbGljYXRlRGlhbENvZGUoYWN0aXZlUVJDb2RlKSB7XG4gICAgY29uc3QgZ2V0QWxsTm9kZXMgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldFRyZWVPYmplY3QoKTtcbiAgICBjb25zdCBmaW5kVmFsdWVzRGVlcEJ5S2V5ID0gKG9iaiwga2V5LCByZXMgPSBbXSkgPT4gKFxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVudXNlZC1leHByZXNzaW9uXG4gICAgICBfLmNsb25lRGVlcFdpdGgob2JqLCAodiwgaykgPT4geyBrID09PSBrZXkgJiYgcmVzLnB1c2godik7IH0pICYmIHJlc1xuICAgICk7XG4gICAgY29uc3QgZGlhbGNvZGVBcnJheSA9IF8uZmxhdHRlbkRlZXAoZmluZFZhbHVlc0RlZXBCeUtleShnZXRBbGxOb2RlcywgJ2RpYWxjb2RlcycpKTtcbiAgICBpZiAoXy5pbmNsdWRlcyhkaWFsY29kZUFycmF5LCBhY3RpdmVRUkNvZGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFsaWRhdGVVbml0c0RpYWxjb2RlcygpIHtcbiAgICBsZXQgZGlhbENvZGVNaXNzc2luZyA9IGZhbHNlO1xuICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy50cmVlU2VydmljZS5nZXRUcmVlT2JqZWN0KCk7XG4gICAgbGV0IGRpYWxjb2RlcztcbiAgICByb290Tm9kZS52aXNpdCgobm9kZSkgPT4ge1xuICAgICAgZGlhbGNvZGVzID0gbm9kZS5kYXRhLm1ldGFkYXRhLmRpYWxjb2RlcztcbiAgICAgIGNvbnN0IHVuaXREaWFsQ29kZSA9IF8uaXNBcnJheShkaWFsY29kZXMpID8gZGlhbGNvZGVzWzBdIDogZGlhbGNvZGVzO1xuICAgICAgaWYgKG5vZGUuZGF0YS5tZXRhZGF0YS52aXNpYmlsaXR5ID09PSAnUGFyZW50JyB8fCBub2RlLmRhdGEucm9vdCkge1xuICAgICAgICBpZiAobm9kZS5kYXRhLm1ldGFkYXRhLmRpYWxjb2RlUmVxdWlyZWQgPT09ICdZZXMnICYmICFfLmluY2x1ZGVzKHRoaXMuZGlhbGNvZGVMaXN0LCB1bml0RGlhbENvZGUpKSB7XG4gICAgICAgICAgZGlhbENvZGVNaXNzc2luZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy50cmVlU2VydmljZS5oaWdobGlnaHROb2RlKG5vZGUuZGF0YS5pZCwgJ2FkZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuZGF0YS5tZXRhZGF0YS5kaWFsY29kZVJlcXVpcmVkID09PSAnWWVzJyAmJiBfLmlzRW1wdHkoZGlhbGNvZGVzKSkge1xuICAgICAgICAgIGRpYWxDb2RlTWlzc3NpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuaGlnaGxpZ2h0Tm9kZShub2RlLmRhdGEuaWQsICdhZGQnKTtcbiAgICAgICAgfSBcbiAgICAgICAgLy8gZWxzZSBpZiAobm9kZS5kYXRhLm1ldGFkYXRhLmRpYWxjb2RlUmVxdWlyZWQgPT09ICdObycgJiYgIV8uaXNFbXB0eShkaWFsY29kZXMpKSB7XG4gICAgICAgIC8vICAgZGlhbENvZGVNaXNzc2luZyA9IHRydWU7XG4gICAgICAgIC8vICAgdGhpcy50cmVlU2VydmljZS5oaWdobGlnaHROb2RlKG5vZGUuZGF0YS5pZCwgJ2FkZCcpO1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGRpYWxDb2RlTWlzc3NpbmcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaGlnaGxpZ2h0Tm9kZUZvckludmFsaWREaWFsQ29kZShyZXMsIG5vZGVzTW9kaWZpZWQsIGluZGV0aWZpZXIpIHtcbiAgICBjb25zdCBtYXBBcnIgPSBbXTtcbiAgICBfLmZvckVhY2godGhpcy5pbnZhbGlkZGlhbENvZGVNYXAsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAoXy5oYXMocmVzLmlkZW50aWZpZXJzLCBrZXkpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmludmFsaWRkaWFsQ29kZU1hcFtrZXldO1xuICAgICAgICB0aGlzLmludmFsaWRkaWFsQ29kZU1hcFtyZXMuaWRlbnRpZmllcnNba2V5XV0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5oaWdobGlnaHROb2RlKHJlcy5pZGVudGlmaWVyc1trZXldLCAnYWRkJyk7XG4gICAgICAgIHRoaXMuc3RvcmVEaWFsQ29kZXMocmVzLmlkZW50aWZpZXJzW2tleV0sIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RvcmVEaWFsQ29kZXMoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2UuaGlnaGxpZ2h0Tm9kZShrZXksICdhZGQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfLmZvckVhY2godGhpcy5kaWFsQ29kZU1hcCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmIChfLmhhcyhyZXMuaWRlbnRpZmllcnMsIGtleSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZGlhbENvZGVNYXBba2V5XTtcbiAgICAgICAgdGhpcy5kaWFsQ29kZU1hcFtyZXMuaWRlbnRpZmllcnNba2V5XV0gPSB2YWx1ZTtcbiAgICAgICAgbWFwQXJyLnB1c2goeyBpZGVudGlmaWVyOiByZXMuaWRlbnRpZmllcnNba2V5XSwgZGlhbGNvZGU6IHZhbHVlIH0pO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmhpZ2hsaWdodE5vZGUocmVzLmlkZW50aWZpZXJzW2tleV0sICdyZW1vdmUnKTtcbiAgICAgICAgdGhpcy5zdG9yZURpYWxDb2RlcyhyZXMuaWRlbnRpZmllcnNba2V5XSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFwQXJyLnB1c2goeyBpZGVudGlmaWVyOiBrZXksIGRpYWxjb2RlOiB2YWx1ZSB9KTtcbiAgICAgICAgdGhpcy5zdG9yZURpYWxDb2RlcyhrZXksIHZhbHVlKTtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5oaWdobGlnaHROb2RlKGtleSwgJ3JlbW92ZScpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBkaWFsY29kZXNVcGRhdGVkID0gZmFsc2U7XG4gICAgXy5mb3JJbihub2Rlc01vZGlmaWVkLCAobm9kZSkgPT4ge1xuICAgICAgaWYgKChub2RlLm1ldGFkYXRhLmRpYWxjb2RlcyB8fCBub2RlLm1ldGFkYXRhLmRpYWxjb2RlcyA9PT0gbnVsbCkgJiYgIWRpYWxjb2Rlc1VwZGF0ZWQpIHtcbiAgICAgICAgZGlhbGNvZGVzVXBkYXRlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkaWFsT2JqID0gXy5maW5kKG1hcEFyciwgKE9iaikgPT4geyAgLy8gY2hlY2sgdGhpczogbm90IHJlcXVpcmVkXG4gICAgICAgICAgcmV0dXJuIE9iai5pZGVudGlmaWVyID09PSByZXMuY29udGVudF9pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkaWFsT2JqKSkge1xuICAgICAgICAgIGRpYWxjb2Rlc1VwZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGRpYWxjb2Rlc1VwZGF0ZWQpIHtcbiAgICAgIHRoaXMuZGlhbGNvZGVMaW5rKG1hcEFyciwgaW5kZXRpZmllcik7XG4gICAgfVxuICB9XG5cbiAgc3RvcmVEaWFsQ29kZXMobm9kZUlkLCBkaWFsQ29kZSkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgaWYgKG5vZGUgJiYgbm9kZS5kYXRhKSB7XG4gICAgICBub2RlLmRhdGEubWV0YWRhdGEuZGlhbGNvZGVzID0gZGlhbENvZGU7XG4gICAgfVxuICB9XG5cbiAgZGlhbGNvZGVMaW5rKGRpYWxjb2RlTWFwLCBpbmRldGlmaWVyKSB7XG4gICAgaWYgKCFfLmlzRW1wdHkoZGlhbGNvZGVNYXApKSB7XG4gICAgICB0aGlzLmxpbmtEaWFsY29kZShpbmRldGlmaWVyLCBkaWFsY29kZU1hcCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgaWYgKCAhXy5pc0VtcHR5KHRoaXMuZGlhbENvZGVNYXApICYmICFfLmlzRW1wdHkodGhpcy5pbnZhbGlkZGlhbENvZGVNYXApKSB7XG4gICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuaW5nKF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLndhcm5pbmcuMDAyJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcyhfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5zdWNjZXNzLjAwOScpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyRGlhbENvZGVNYXBzKCk7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyICYmIGVyci5lcnJvciAmJiBlcnIuZXJyb3IucGFyYW1zICYmIGVyci5lcnJvci5wYXJhbXMuZXJyID09PSAnRVJSX0RJQUxDT0RFX0xJTksnKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKGVyci5lcnJvci5wYXJhbXMuZXJybXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDEyJykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFfLmlzRW1wdHkodGhpcy5pbnZhbGlkZGlhbENvZGVNYXApKSB7XG4gICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm5pbmcoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMud2FybmluZy4wMDInKSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJEaWFsQ29kZU1hcHMoKSB7XG4gICAgdGhpcy5kaWFsQ29kZU1hcCA9IHt9O1xuICAgIHRoaXMuaW52YWxpZGRpYWxDb2RlTWFwID0ge307XG4gIH1cblxuICByZWFkRXhpc3RpbmdRckNvZGUoKSB7XG4gICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldFRyZWVPYmplY3QoKTtcbiAgICB0aGlzLmRpYWxjb2RlTGlzdCA9IFtdIDtcbiAgICByb290Tm9kZS52aXNpdCgoIG5vZGUgKSA9PiB7XG4gICAgICAgIGlmICghXy5pc0VtcHR5KG5vZGUuZGF0YS5tZXRhZGF0YS5kaWFsY29kZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxjb2RlTGlzdC5wdXNoKG5vZGUuZGF0YS5tZXRhZGF0YS5kaWFsY29kZXNbMF0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIl19