atr-components 0.2.417 → 2.0.1

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 (136) hide show
  1. package/atr-components.module.d.ts +9 -9
  2. package/atr-public-api.d.ts +53 -53
  3. package/core/animations/animations.d.ts +1 -1
  4. package/core/animations/fly-in.d.ts +1 -1
  5. package/core/animations/scroll-screen.d.ts +1 -1
  6. package/core/auth/auth.guard.d.ts +11 -11
  7. package/core/base/atr-common.d.ts +347 -347
  8. package/core/directive/error-img.directive.d.ts +10 -10
  9. package/core/directive/hq-spin.directive.d.ts +13 -13
  10. package/core/directive/role.directive.d.ts +16 -16
  11. package/core/interceptor/base.interceptor.d.ts +17 -17
  12. package/core/ngz-module/cus-zorro-antd.module.d.ts +75 -75
  13. package/core/pipe/china-num.pipe.d.ts +7 -7
  14. package/core/pipe/count.pipe.d.ts +7 -7
  15. package/core/pipe/day.pipe.d.ts +8 -8
  16. package/core/pipe/defaultVal.pipe.d.ts +7 -7
  17. package/core/pipe/dicts.pipe.d.ts +10 -10
  18. package/core/pipe/image-pipe.pipe.d.ts +8 -8
  19. package/core/pipe/is-empty.pipe.d.ts +7 -7
  20. package/core/pipe/is-not-empty.pipe.d.ts +7 -7
  21. package/core/pipe/oss.pipe.d.ts +7 -7
  22. package/core/pipe/ossStatic.pipe.d.ts +7 -7
  23. package/core/pipe/pipe-module.module.d.ts +21 -21
  24. package/core/pipe/remove-html.pipe.d.ts +10 -10
  25. package/core/pipe/safe-compute.pipe.d.ts +7 -7
  26. package/core/pipe/safe-html.pipe.d.ts +10 -10
  27. package/core/pipe/safe-url.pipe.d.ts +10 -10
  28. package/core/routereuse/atr-reuse-strategy.d.ts +19 -19
  29. package/core/services/dict/dict.service.d.ts +20 -20
  30. package/core/services/http.service.d.ts +31 -31
  31. package/core/services/menu.service.d.ts +29 -29
  32. package/core/services/upload-oss.service.d.ts +14 -14
  33. package/core/utils/ToolsUtil.d.ts +180 -180
  34. package/core/utils/localstorage.util.d.ts +15 -15
  35. package/core/utils/sessionstorage.util.d.ts +15 -15
  36. package/{esm2020 → esm2022}/atr-components.mjs +4 -4
  37. package/esm2022/atr-components.module.mjs +36 -0
  38. package/{esm2020 → esm2022}/atr-public-api.mjs +54 -54
  39. package/{esm2020 → esm2022}/core/animations/animations.mjs +9 -9
  40. package/{esm2020 → esm2022}/core/animations/fly-in.mjs +18 -18
  41. package/{esm2020 → esm2022}/core/animations/scroll-screen.mjs +22 -22
  42. package/{esm2020 → esm2022}/core/auth/auth.guard.mjs +37 -37
  43. package/esm2022/core/base/atr-common.mjs +47 -0
  44. package/{esm2020 → esm2022}/core/directive/error-img.directive.mjs +31 -31
  45. package/{esm2020 → esm2022}/core/directive/hq-spin.directive.mjs +48 -48
  46. package/esm2022/core/directive/role.directive.mjs +69 -0
  47. package/{esm2020 → esm2022}/core/interceptor/base.interceptor.mjs +165 -165
  48. package/{esm2020 → esm2022}/core/ngz-module/cus-zorro-antd.module.mjs +292 -292
  49. package/{esm2020 → esm2022}/core/pipe/china-num.pipe.mjs +36 -36
  50. package/{esm2020 → esm2022}/core/pipe/count.pipe.mjs +34 -34
  51. package/{esm2020 → esm2022}/core/pipe/day.pipe.mjs +24 -24
  52. package/{esm2020 → esm2022}/core/pipe/defaultVal.pipe.mjs +23 -23
  53. package/{esm2020 → esm2022}/core/pipe/dicts.pipe.mjs +28 -28
  54. package/{esm2020 → esm2022}/core/pipe/image-pipe.pipe.mjs +17 -17
  55. package/{esm2020 → esm2022}/core/pipe/is-empty.pipe.mjs +20 -20
  56. package/{esm2020 → esm2022}/core/pipe/is-not-empty.pipe.mjs +17 -17
  57. package/{esm2020 → esm2022}/core/pipe/oss.pipe.mjs +17 -17
  58. package/{esm2020 → esm2022}/core/pipe/ossStatic.pipe.mjs +17 -17
  59. package/esm2022/core/pipe/pipe-module.module.mjs +38 -0
  60. package/{esm2020 → esm2022}/core/pipe/remove-html.pipe.mjs +21 -21
  61. package/{esm2020 → esm2022}/core/pipe/safe-compute.pipe.mjs +23 -23
  62. package/{esm2020 → esm2022}/core/pipe/safe-html.pipe.mjs +20 -20
  63. package/{esm2020 → esm2022}/core/pipe/safe-url.pipe.mjs +20 -20
  64. package/esm2022/core/routereuse/atr-reuse-strategy.mjs +79 -0
  65. package/esm2022/core/services/dict/dict.service.mjs +152 -0
  66. package/{esm2020 → esm2022}/core/services/http.service.mjs +306 -306
  67. package/{esm2020 → esm2022}/core/services/menu.service.mjs +130 -130
  68. package/{esm2020 → esm2022}/core/services/upload-oss.service.mjs +74 -74
  69. package/esm2022/core/utils/ToolsUtil.mjs +622 -0
  70. package/{esm2020 → esm2022}/core/utils/localstorage.util.mjs +94 -94
  71. package/{esm2020 → esm2022}/core/utils/sessionstorage.util.mjs +72 -72
  72. package/{esm2020 → esm2022}/lib/hello/hello.component.mjs +15 -15
  73. package/esm2022/lib/hello/hello.module.mjs +20 -0
  74. package/esm2022/lib/shared/atr-shared.module.mjs +204 -0
  75. package/esm2022/lib/shared/echarts/echarts.component.mjs +77 -0
  76. package/esm2022/lib/shared/form/form.component.mjs +574 -0
  77. package/esm2022/lib/shared/img-canvas/img-canvas.component.mjs +132 -0
  78. package/esm2022/lib/shared/local-upload/local-upload.component.mjs +68 -0
  79. package/esm2022/lib/shared/quill-editor/quill-editor.component.mjs +248 -0
  80. package/esm2022/lib/shared/select-icons/select-icons.component.mjs +90 -0
  81. package/{esm2020 → esm2022}/lib/shared/select-tree/select-tree.component.mjs +55 -55
  82. package/{esm2020 → esm2022}/lib/shared/service/busi.service.mjs +69 -69
  83. package/{esm2020 → esm2022}/lib/shared/share.service.mjs +107 -107
  84. package/esm2022/lib/shared/table/table-form-item/table-form-item.component.mjs +96 -0
  85. package/esm2022/lib/shared/table/table-td/table-td.component.mjs +165 -0
  86. package/esm2022/lib/shared/table/table.component.mjs +749 -0
  87. package/{esm2020 → esm2022}/lib/shared/upload/upload.component.mjs +274 -274
  88. package/{esm2020 → esm2022}/lib/shared/validators/atr-validtors.mjs +8 -8
  89. package/esm2022/lib/shared/video/video.component.mjs +16 -0
  90. package/esm2022/lib/shared/view-form/view-form.component.mjs +181 -0
  91. package/{fesm2020 → fesm2022}/atr-components.mjs +5311 -5312
  92. package/fesm2022/atr-components.mjs.map +1 -0
  93. package/{atr-components.d.ts → index.d.ts} +5 -5
  94. package/lib/hello/hello.component.d.ts +8 -8
  95. package/lib/hello/hello.module.d.ts +8 -8
  96. package/lib/shared/atr-shared.module.d.ts +36 -33
  97. package/lib/shared/echarts/echarts.component.d.ts +34 -34
  98. package/lib/shared/form/form.component.d.ts +45 -45
  99. package/lib/shared/img-canvas/img-canvas.component.d.ts +28 -28
  100. package/lib/shared/local-upload/local-upload.component.d.ts +22 -22
  101. package/lib/shared/quill-editor/quill-editor.component.d.ts +45 -45
  102. package/lib/shared/select-icons/select-icons.component.d.ts +24 -24
  103. package/lib/shared/select-tree/select-tree.component.d.ts +23 -23
  104. package/lib/shared/service/busi.service.d.ts +20 -20
  105. package/lib/shared/share.service.d.ts +14 -14
  106. package/lib/shared/table/table-form-item/table-form-item.component.d.ts +25 -25
  107. package/lib/shared/table/table-td/table-td.component.d.ts +26 -26
  108. package/lib/shared/table/table.component.d.ts +94 -94
  109. package/lib/shared/upload/upload.component.d.ts +53 -53
  110. package/lib/shared/validators/atr-validtors.d.ts +2 -2
  111. package/lib/shared/video/video.component.d.ts +7 -7
  112. package/lib/shared/view-form/view-form.component.d.ts +28 -28
  113. package/package.json +14 -22
  114. package/esm2020/atr-components.module.mjs +0 -38
  115. package/esm2020/core/base/atr-common.mjs +0 -47
  116. package/esm2020/core/directive/role.directive.mjs +0 -69
  117. package/esm2020/core/pipe/pipe-module.module.mjs +0 -40
  118. package/esm2020/core/routereuse/atr-reuse-strategy.mjs +0 -79
  119. package/esm2020/core/services/dict/dict.service.mjs +0 -152
  120. package/esm2020/core/utils/ToolsUtil.mjs +0 -622
  121. package/esm2020/lib/hello/hello.module.mjs +0 -22
  122. package/esm2020/lib/shared/atr-shared.module.mjs +0 -199
  123. package/esm2020/lib/shared/echarts/echarts.component.mjs +0 -77
  124. package/esm2020/lib/shared/form/form.component.mjs +0 -574
  125. package/esm2020/lib/shared/img-canvas/img-canvas.component.mjs +0 -132
  126. package/esm2020/lib/shared/local-upload/local-upload.component.mjs +0 -68
  127. package/esm2020/lib/shared/quill-editor/quill-editor.component.mjs +0 -248
  128. package/esm2020/lib/shared/select-icons/select-icons.component.mjs +0 -90
  129. package/esm2020/lib/shared/table/table-form-item/table-form-item.component.mjs +0 -96
  130. package/esm2020/lib/shared/table/table-td/table-td.component.mjs +0 -165
  131. package/esm2020/lib/shared/table/table.component.mjs +0 -749
  132. package/esm2020/lib/shared/video/video.component.mjs +0 -15
  133. package/esm2020/lib/shared/view-form/view-form.component.mjs +0 -181
  134. package/fesm2015/atr-components.mjs +0 -5522
  135. package/fesm2015/atr-components.mjs.map +0 -1
  136. package/fesm2020/atr-components.mjs.map +0 -1
@@ -1,306 +1,306 @@
1
- import { Injectable } from '@angular/core';
2
- import { HttpRequest, HttpEventType, HttpHeaders } from "@angular/common/http";
3
- import { Observable } from 'rxjs';
4
- import { atr_static_datas } from '../base/atr-common';
5
- import { LocalStorageUtil } from '../utils/localstorage.util';
6
- import { ToolsUtil } from "../utils/ToolsUtil";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common/http";
9
- export class HttpService {
10
- constructor(httpClient) {
11
- this.httpClient = httpClient;
12
- /**
13
- *
14
- * @param url
15
- * @param params
16
- */
17
- this.post = (url, params, options, headers, noTip = false) => {
18
- return new Observable(observe => {
19
- // console.log("aaa");
20
- let _headers = new HttpHeaders();
21
- if (options && options.hasOwnProperty('isCommonHttpHeader')) {
22
- _headers = this.getDefaultHeader(_headers);
23
- }
24
- _headers = this.getNormalHeader(_headers);
25
- if (headers) {
26
- _headers = headers;
27
- }
28
- _headers = _headers.set("noTip", noTip ? "1" : "0");
29
- let withCredentials = true;
30
- if (options && options.hasOwnProperty('isWithCredentials')) {
31
- withCredentials = options.isWithCredentials;
32
- }
33
- // console.log(_headers);
34
- for (const key of Object.keys(params)) {
35
- if (params.hasOwnProperty(key) && typeof params[key] === 'object') {
36
- params[key] = JSON.stringify(params[key]);
37
- }
38
- }
39
- this.httpClient.post(url, null, { headers: _headers, params: params, withCredentials: withCredentials })
40
- .subscribe(result => {
41
- observe.next(result);
42
- observe.unsubscribe();
43
- }, error => {
44
- observe.error(error);
45
- observe.unsubscribe();
46
- });
47
- });
48
- };
49
- this.postBody = (url, params, options, headers, noTip = false) => {
50
- return new Observable(observe => {
51
- // console.log("aaa");
52
- let _headers = new HttpHeaders();
53
- if (options && options.hasOwnProperty('isCommonHttpHeader')) {
54
- _headers = this.getDefaultHeader(_headers);
55
- }
56
- _headers = this.getNormalHeader(_headers);
57
- _headers = _headers.set("noTip", noTip ? "1" : "0");
58
- let withCredentials = true;
59
- if (options && options.hasOwnProperty('isWithCredentials')) {
60
- withCredentials = options.isWithCredentials;
61
- }
62
- // console.log(_headers);
63
- /*for(const key of Object.keys(params)) {
64
- if(params.hasOwnProperty(key) && typeof params[key] === 'object') {
65
- params[key] = JSON.stringify(params[key])
66
- }
67
- }*/
68
- this.httpClient.post(url, params, { headers: _headers, params: {}, withCredentials: withCredentials })
69
- .subscribe(result => {
70
- observe.next(result);
71
- observe.unsubscribe();
72
- }, error => {
73
- observe.error(error);
74
- observe.unsubscribe();
75
- });
76
- });
77
- };
78
- this.get = (url, params, options, noTip = false) => {
79
- return new Observable(observe => {
80
- let _headers = new HttpHeaders();
81
- if (options && options.hasOwnProperty('isCommonHttpHeader')) {
82
- _headers = this.getDefaultHeader(_headers);
83
- }
84
- _headers = this.getNormalHeader(_headers);
85
- _headers = _headers.set("noTip", noTip ? "1" : "0");
86
- let withCredentials = false;
87
- if (options && options.hasOwnProperty('isWithCredentials')) {
88
- withCredentials = options.isWithCredentials;
89
- }
90
- // console.log(options)
91
- // console.log(_headers)
92
- this.httpClient.get(url, {
93
- headers: _headers,
94
- params: params,
95
- withCredentials: withCredentials
96
- }).subscribe(result => {
97
- observe.next(result);
98
- observe.unsubscribe();
99
- }, error => {
100
- observe.error(error);
101
- observe.unsubscribe();
102
- });
103
- });
104
- };
105
- this.upload = (method, url, formData, progress) => {
106
- let req = new HttpRequest(method, url, formData, { reportProgress: true });
107
- return new Observable(observe => {
108
- this.httpClient.request(req).subscribe((event) => {
109
- if (event.type === HttpEventType.UploadProgress) {
110
- if (typeof progress == 'function') {
111
- event['progress'] = parseInt(event.loaded / event.total * 100 + '');
112
- progress(event);
113
- }
114
- }
115
- if (event.type === HttpEventType.Response) {
116
- observe.next(event.body);
117
- }
118
- }, error => {
119
- observe.error(error);
120
- observe.unsubscribe();
121
- });
122
- });
123
- };
124
- this.transformString = (objItem) => {
125
- var list = [];
126
- for (const key in objItem) {
127
- var str = '';
128
- let item = objItem[key];
129
- if (item instanceof Array) {
130
- //数组
131
- var arr = [];
132
- item.forEach((v, k) => {
133
- var s = encodeURIComponent(key) + '[' + k + ']';
134
- arr.push(this.parseObj(v, s));
135
- });
136
- str = arr.join('&');
137
- }
138
- else if (item instanceof Object) {
139
- //json
140
- var arr = [];
141
- for (const k in item) {
142
- let v = item[k];
143
- var s = encodeURIComponent(key) + '.' + encodeURIComponent(k);
144
- arr.push(this.parseObj(v, s));
145
- }
146
- str = arr.join('&');
147
- }
148
- else {
149
- //普通类型
150
- str = encodeURIComponent(key) + '=' + encodeURIComponent(item);
151
- }
152
- list.push(str);
153
- }
154
- return list.join('&');
155
- };
156
- this.parseObj = (obj, str) => {
157
- if (obj instanceof Array) {
158
- //数组
159
- var arr = [];
160
- obj.forEach((v, k) => {
161
- var s = str + '[' + k + ']' + '=' + encodeURIComponent(v);
162
- arr.push(this.parseObj(v, s));
163
- });
164
- str = arr.join('&');
165
- }
166
- else if (obj instanceof Object) {
167
- //json
168
- var arr = [];
169
- for (const k in obj) {
170
- let v = obj[k];
171
- var s = str + '.' + encodeURIComponent(k);
172
- arr.push(this.parseObj(v, s));
173
- }
174
- str = arr.join('&');
175
- }
176
- else {
177
- //普通类型
178
- str = str + '=' + encodeURIComponent(obj);
179
- }
180
- return str;
181
- };
182
- this.getOss = (url, params, responseType, noError = false) => {
183
- return new Observable(observe => {
184
- if (url == undefined) {
185
- observe.next();
186
- observe.unsubscribe();
187
- return;
188
- }
189
- console.log("url", url);
190
- if (!url.startsWith("http")) {
191
- url = atr_static_datas.OSS_URL + url;
192
- }
193
- let _headers = new HttpHeaders();
194
- let withCredentials = false;
195
- // //console.log(_headers)
196
- if (url.endsWith(".o") && !params) {
197
- url += "?v=" + new Date().getTime();
198
- }
199
- if (noError) {
200
- if (url.indexOf('?') > 0) {
201
- url += "&noError";
202
- }
203
- else {
204
- url += "?noError";
205
- }
206
- }
207
- this.httpClient.get(url, {
208
- headers: _headers,
209
- params: params,
210
- withCredentials: withCredentials,
211
- responseType: responseType || 'text'
212
- }).subscribe(result => {
213
- observe.next(result);
214
- observe.unsubscribe();
215
- }, error => {
216
- observe.error(error);
217
- observe.unsubscribe();
218
- });
219
- });
220
- };
221
- }
222
- getNormalHeader(_headers) {
223
- if (!atr_static_datas.needNormalHeade) {
224
- return _headers;
225
- }
226
- return atr_static_datas.getNormalHeader(_headers);
227
- }
228
- postPromAll(urls, options, headers, noTip = false) {
229
- let param = [];
230
- urls.forEach(item => {
231
- param.push(this.postProm(item.url, item.params, options, headers, noTip = false));
232
- });
233
- return Promise.all(param);
234
- }
235
- getOssPre() {
236
- return new Observable(observe => {
237
- if (!atr_static_datas.OSS_GETHOST) {
238
- observe.error();
239
- observe.unsubscribe();
240
- return;
241
- }
242
- this.post(atr_static_datas.OSS_GETHOST, {}, ToolsUtil.getHttpOptions()).subscribe(res => {
243
- atr_static_datas.OSS_URL = res.data;
244
- ToolsUtil.ossPrefix = res.data;
245
- observe.next();
246
- observe.unsubscribe();
247
- });
248
- });
249
- }
250
- postProm(url, params, options, headers, noTip = false) {
251
- // //console.log("aaa");
252
- let _headers = new HttpHeaders();
253
- if (options && options.hasOwnProperty('isCommonHttpHeader')) {
254
- _headers = this.getDefaultHeader(_headers);
255
- }
256
- _headers = this.getNormalHeader(_headers);
257
- if (headers) {
258
- _headers = headers;
259
- }
260
- _headers = _headers.set("noTip", noTip ? "1" : "0");
261
- let withCredentials = true;
262
- if (options && options.hasOwnProperty('isWithCredentials')) {
263
- withCredentials = options.isWithCredentials;
264
- }
265
- let postParams = {};
266
- for (const key of Object.keys(params)) {
267
- if (params[key] !== null && params[key] !== '' && params[key] !== undefined) {
268
- if (params.hasOwnProperty(key) && typeof params[key] === 'object') {
269
- postParams[key] = JSON.stringify(params[key]);
270
- }
271
- else {
272
- postParams[key] = params[key];
273
- }
274
- }
275
- }
276
- return this.httpClient.post(url, null, {
277
- headers: _headers,
278
- params: postParams,
279
- withCredentials: withCredentials
280
- })
281
- .toPromise();
282
- }
283
- getDefaultHeader(_headers) {
284
- return atr_static_datas.getDefaultHeader(_headers);
285
- }
286
- downloadXls(url, params) {
287
- this.post("third/auth/getAuthToken", {}, ToolsUtil.getHttpOptions()).subscribe(result => {
288
- let thridParma = {
289
- "reqMethod": "auth",
290
- "sign": result.data,
291
- "x-header-atr": "web",
292
- token: LocalStorageUtil.getUserToken(),
293
- userId: LocalStorageUtil.getUserId()
294
- };
295
- params = Object.assign(params, thridParma);
296
- ToolsUtil.downloadXls(atr_static_datas.SERVER_URL + url, params);
297
- }, error => {
298
- });
299
- }
300
- }
301
- HttpServicefac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
302
- HttpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: HttpService });
303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: HttpService, decorators: [{
304
- type: Injectable
305
- }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvY29yZS9zZXJ2aWNlcy9odHRwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWEsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBYyxNQUFNLG9CQUFvQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRzVELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBSTdDLE1BQU0sT0FBTyxXQUFXO0lBRXRCLFlBQ1UsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVdoQzs7OztXQUlHO1FBQ0gsU0FBSSxHQUFHLENBQUMsR0FBVyxFQUFFLE1BQVksRUFBRSxPQUFxQixFQUFFLE9BQXFCLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBbUIsRUFBRTtZQUVqSCxPQUFPLElBQUksVUFBVSxDQUFNLE9BQU8sQ0FBQyxFQUFFO2dCQUNuQyxzQkFBc0I7Z0JBQ3RCLElBQUksUUFBUSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsRUFBRTtvQkFDM0QsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDNUM7Z0JBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFDLElBQUksT0FBTyxFQUFFO29CQUNY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YUFDRjtTQUVGO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO1lBQ3JDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLGVBQWUsRUFBRSxlQUFlO1NBQ2pDLENBQUM7YUFDQyxTQUFTLEVBQUUsQ0FBQztJQUVqQixDQUFDO0lBbUNELGdCQUFnQixDQUFDLFFBQXFCO1FBQ3BDLE9BQU8sZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQXFKRCxXQUFXLENBQUMsR0FBVyxFQUFFLE1BQVc7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUM1RSxNQUFNLENBQUMsRUFBRTtZQUNQLElBQUksVUFBVSxHQUFHO2dCQUNmLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ25CLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsWUFBWSxFQUFFO2dCQUN0QyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFO2FBQ3JDLENBQUE7WUFDRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDM0MsU0FBUyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLENBQUMsRUFDRCxLQUFLLENBQUMsRUFBRTtRQUNSLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs7eUdBalVVLFdBQVc7NkdBQVgsV0FBVzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUmVxdWVzdCwgSHR0cEV2ZW50VHlwZSwgSHR0cEhlYWRlcnN9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2F0cl9zdGF0aWNfZGF0YXMsIEh0dHBPcHRpb25zfSBmcm9tICcuLi9iYXNlL2F0ci1jb21tb24nO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVV0aWx9IGZyb20gJy4uL3V0aWxzL2xvY2Fsc3RvcmFnZS51dGlsJztcclxuaW1wb3J0IHtNZDV9IGZyb20gXCJ0cy1tZDVcIjtcclxuaW1wb3J0IHtlbnZpcm9ubWVudH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvY29yZS9lbnZpcm9ubWVudHNcIjtcclxuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi91dGlscy9Ub29sc1V0aWxcIjtcclxuaW1wb3J0IHtVcGxvYWRPc3NTZXJ2aWNlfSBmcm9tICcuL3VwbG9hZC1vc3Muc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBIdHRwU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBnZXROb3JtYWxIZWFkZXIoX2hlYWRlcnM6IEh0dHBIZWFkZXJzKTogSHR0cEhlYWRlcnMge1xyXG4gICAgaWYgKCFhdHJfc3RhdGljX2RhdGFzLm5lZWROb3JtYWxIZWFkZSkge1xyXG4gICAgICByZXR1cm4gX2hlYWRlcnM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXRyX3N0YXRpY19kYXRhcy5nZXROb3JtYWxIZWFkZXIoX2hlYWRlcnMpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICovXHJcbiAgcG9zdCA9ICh1cmw6IHN0cmluZywgcGFyYW1zPzogYW55LCBvcHRpb25zPzogSHR0cE9wdGlvbnMsIGhlYWRlcnM/OiBIdHRwSGVhZGVycywgbm9UaXAgPSBmYWxzZSk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWFhXCIpO1xyXG4gICAgICBsZXQgX2hlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21tb25IdHRwSGVhZGVyJykpIHtcclxuICAgICAgICBfaGVhZGVycyA9IHRoaXMuZ2V0RGVmYXVsdEhlYWRlcihfaGVhZGVycyk7XHJcbiAgICAgIH1cclxuICAgICAgX2hlYWRlcnMgPSB0aGlzLmdldE5vcm1hbEhlYWRlcihfaGVhZGVycyk7XHJcbiAgICAgIGlmIChoZWFkZXJzKSB7XHJcbiAgICAgICAgX2hlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgICB9XHJcbiAgICAgIF9oZWFkZXJzID0gX2hlYWRlcnMuc2V0KFwibm9UaXBcIiwgbm9UaXAgPyBcIjFcIiA6IFwiMFwiKTtcclxuICAgICAgbGV0IHdpdGhDcmVkZW50aWFsczogYW55ID0gdHJ1ZVxyXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KCdpc1dpdGhDcmVkZW50aWFscycpKSB7XHJcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gb3B0aW9ucy5pc1dpdGhDcmVkZW50aWFsc1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKF9oZWFkZXJzKTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xyXG4gICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgcGFyYW1zW2tleV0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IEpTT04uc3RyaW5naWZ5KHBhcmFtc1trZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5wb3N0KHVybCwgbnVsbCwge2hlYWRlcnM6IF9oZWFkZXJzLCBwYXJhbXM6IHBhcmFtcywgd2l0aENyZWRlbnRpYWxzOiB3aXRoQ3JlZGVudGlhbHN9KVxyXG4gICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgIG9ic2VydmUubmV4dChyZXN1bHQpO1xyXG4gICAgICAgICAgb2JzZXJ2ZS51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgb2JzZXJ2ZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHBvc3RQcm9tQWxsKHVybHM6IHsgdXJsOiBzdHJpbmcsIHBhcmFtcz86IHt9LCB9W10sIG9wdGlvbnM/OiBIdHRwT3B0aW9ucywgaGVhZGVycz86IEh0dHBIZWFkZXJzLCBub1RpcCA9IGZhbHNlKSB7XHJcbiAgICBsZXQgcGFyYW06IGFueVtdID0gW107XHJcbiAgICB1cmxzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIHBhcmFtLnB1c2godGhpcy5wb3N0UHJvbShpdGVtLnVybCwgaXRlbS5wYXJhbXMsIG9wdGlvbnMsIGhlYWRlcnMsIG5vVGlwID0gZmFsc2UpKTtcclxuICAgIH0pXHJcblxyXG5cclxuICAgIHJldHVybiBQcm9taXNlLmFsbChwYXJhbSlcclxuICB9XHJcblxyXG5cclxuICBnZXRPc3NQcmUoKSB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55PihvYnNlcnZlID0+IHtcclxuICAgICAgaWYgKCFhdHJfc3RhdGljX2RhdGFzLk9TU19HRVRIT1NUKSB7XHJcbiAgICAgICAgb2JzZXJ2ZS5lcnJvcigpO1xyXG4gICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucG9zdChhdHJfc3RhdGljX2RhdGFzLk9TU19HRVRIT1NULCB7fSwgVG9vbHNVdGlsLmdldEh0dHBPcHRpb25zKCkpLnN1YnNjcmliZShcclxuICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgYXRyX3N0YXRpY19kYXRhcy5PU1NfVVJMID0gcmVzLmRhdGFcclxuICAgICAgICAgIFRvb2xzVXRpbC5vc3NQcmVmaXggPSByZXMuZGF0YVxyXG4gICAgICAgICAgb2JzZXJ2ZS5uZXh0KCk7XHJcbiAgICAgICAgICBvYnNlcnZlLnVuc3Vic2NyaWJlKClcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwb3N0UHJvbSh1cmw6IHN0cmluZywgcGFyYW1zPzogYW55LCBvcHRpb25zPzogSHR0cE9wdGlvbnMsIGhlYWRlcnM/OiBIdHRwSGVhZGVycywgbm9UaXAgPSBmYWxzZSkge1xyXG5cclxuICAgIC8vIC8vY29uc29sZS5sb2coXCJhYWFcIik7XHJcbiAgICBsZXQgX2hlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzQ29tbW9uSHR0cEhlYWRlcicpKSB7XHJcbiAgICAgIF9oZWFkZXJzID0gdGhpcy5nZXREZWZhdWx0SGVhZGVyKF9oZWFkZXJzKTtcclxuICAgIH1cclxuICAgIF9oZWFkZXJzID0gdGhpcy5nZXROb3JtYWxIZWFkZXIoX2hlYWRlcnMpO1xyXG4gICAgaWYgKGhlYWRlcnMpIHtcclxuICAgICAgX2hlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgfVxyXG4gICAgX2hlYWRlcnMgPSBfaGVhZGVycy5zZXQoXCJub1RpcFwiLCBub1RpcCA/IFwiMVwiIDogXCIwXCIpO1xyXG4gICAgbGV0IHdpdGhDcmVkZW50aWFsczogYW55ID0gdHJ1ZVxyXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNXaXRoQ3JlZGVudGlhbHMnKSkge1xyXG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSBvcHRpb25zLmlzV2l0aENyZWRlbnRpYWxzXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zdFBhcmFtczogYW55ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xyXG4gICAgICBpZiAocGFyYW1zW2tleV0gIT09IG51bGwgJiYgcGFyYW1zW2tleV0gIT09ICcnICYmIHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHBhcmFtc1trZXldID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgcG9zdFBhcmFtc1trZXldID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zW2tleV0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBvc3RQYXJhbXNba2V5XSA9IHBhcmFtc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCBudWxsLCB7XHJcbiAgICAgIGhlYWRlcnM6IF9oZWFkZXJzLFxyXG4gICAgICBwYXJhbXM6IHBvc3RQYXJhbXMsXHJcbiAgICAgIHdpdGhDcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzXHJcbiAgICB9KVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcG9zdEJvZHkgPSAodXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgb3B0aW9ucz86IEh0dHBPcHRpb25zLCBoZWFkZXJzPzoge30sIG5vVGlwID0gZmFsc2UpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG5cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxhbnk+KG9ic2VydmUgPT4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcImFhYVwiKTtcclxuICAgICAgbGV0IF9oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzQ29tbW9uSHR0cEhlYWRlcicpKSB7XHJcbiAgICAgICAgX2hlYWRlcnMgPSB0aGlzLmdldERlZmF1bHRIZWFkZXIoX2hlYWRlcnMpO1xyXG4gICAgICB9XHJcbiAgICAgIF9oZWFkZXJzID0gdGhpcy5nZXROb3JtYWxIZWFkZXIoX2hlYWRlcnMpO1xyXG4gICAgICBfaGVhZGVycyA9IF9oZWFkZXJzLnNldChcIm5vVGlwXCIsIG5vVGlwID8gXCIxXCIgOiBcIjBcIik7XHJcbiAgICAgIGxldCB3aXRoQ3JlZGVudGlhbHM6IGFueSA9IHRydWVcclxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNXaXRoQ3JlZGVudGlhbHMnKSkge1xyXG4gICAgICAgIHdpdGhDcmVkZW50aWFscyA9IG9wdGlvbnMuaXNXaXRoQ3JlZGVudGlhbHNcclxuICAgICAgfVxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhfaGVhZGVycyk7XHJcbiAgICAgIC8qZm9yKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XHJcbiAgICAgICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHBhcmFtc1trZXldICA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIHBhcmFtc1trZXldID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zW2tleV0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9Ki9cclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5wb3N0KHVybCwgcGFyYW1zLCB7aGVhZGVyczogX2hlYWRlcnMsIHBhcmFtczoge30sIHdpdGhDcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzfSlcclxuICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICBvYnNlcnZlLm5leHQocmVzdWx0KTtcclxuICAgICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgIG9ic2VydmUuZXJyb3IoZXJyb3IpXHJcbiAgICAgICAgICBvYnNlcnZlLnVuc3Vic2NyaWJlKClcclxuICAgICAgICB9KVxyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0SGVhZGVyKF9oZWFkZXJzOiBIdHRwSGVhZGVycyk6IEh0dHBIZWFkZXJzIHtcclxuICAgIHJldHVybiBhdHJfc3RhdGljX2RhdGFzLmdldERlZmF1bHRIZWFkZXIoX2hlYWRlcnMpXHJcbiAgfVxyXG5cclxuICBnZXQgPSAodXJsOiBzdHJpbmcsIHBhcmFtcz86IHt9LCBvcHRpb25zPzogSHR0cE9wdGlvbnMsIG5vVGlwID0gZmFsc2UpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG5cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxhbnk+KG9ic2VydmUgPT4ge1xyXG5cclxuICAgICAgbGV0IF9oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzQ29tbW9uSHR0cEhlYWRlcicpKSB7XHJcbiAgICAgICAgX2hlYWRlcnMgPSB0aGlzLmdldERlZmF1bHRIZWFkZXIoX2hlYWRlcnMpO1xyXG4gICAgICB9XHJcbiAgICAgIF9oZWFkZXJzID0gdGhpcy5nZXROb3JtYWxIZWFkZXIoX2hlYWRlcnMpO1xyXG4gICAgICBfaGVhZGVycyA9IF9oZWFkZXJzLnNldChcIm5vVGlwXCIsIG5vVGlwID8gXCIxXCIgOiBcIjBcIik7XHJcbiAgICAgIGxldCB3aXRoQ3JlZGVudGlhbHM6IGFueSA9IGZhbHNlXHJcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzV2l0aENyZWRlbnRpYWxzJykpIHtcclxuICAgICAgICB3aXRoQ3JlZGVudGlhbHMgPSBvcHRpb25zLmlzV2l0aENyZWRlbnRpYWxzXHJcbiAgICAgIH1cclxuICAgICAgLy8gY29uc29sZS5sb2cob3B0aW9ucylcclxuICAgICAgLy8gY29uc29sZS5sb2coX2hlYWRlcnMpXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQodXJsLCB7XHJcbiAgICAgICAgaGVhZGVyczogX2hlYWRlcnMsXHJcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB3aXRoQ3JlZGVudGlhbHNcclxuICAgICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZS5uZXh0KHJlc3VsdCk7XHJcbiAgICAgICAgb2JzZXJ2ZS51bnN1YnNjcmliZSgpXHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBvYnNlcnZlLmVycm9yKGVycm9yKVxyXG4gICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICB9KVxyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1cGxvYWQgPSAobWV0aG9kOiBhbnksIHVybDogYW55LCBmb3JtRGF0YTogRm9ybURhdGEsIHByb2dyZXNzOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgbGV0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdChtZXRob2QsIHVybCwgZm9ybURhdGEsIHtyZXBvcnRQcm9ncmVzczogdHJ1ZX0pXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZSA9PiB7XHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0KHJlcSkuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgcHJvZ3Jlc3MgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBldmVudFsncHJvZ3Jlc3MnXSA9IHBhcnNlSW50KGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsICogMTAwICsgJycpXHJcbiAgICAgICAgICAgIHByb2dyZXNzKGV2ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcclxuICAgICAgICAgIG9ic2VydmUubmV4dChldmVudC5ib2R5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBvYnNlcnZlLmVycm9yKGVycm9yKVxyXG4gICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNmb3JtU3RyaW5nID0gKG9iakl0ZW06IGFueSkgPT4ge1xyXG4gICAgdmFyIGxpc3Q6IGFueSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqSXRlbSkge1xyXG4gICAgICB2YXIgc3RyID0gJyc7XHJcbiAgICAgIGxldCBpdGVtID0gb2JqSXRlbVtrZXldXHJcbiAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAvL+aVsOe7hFxyXG4gICAgICAgIHZhciBhcnI6IGFueSA9IFtdO1xyXG4gICAgICAgIGl0ZW0uZm9yRWFjaCgodiwgaykgPT4ge1xyXG4gICAgICAgICAgdmFyIHMgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICdbJyArIGsgKyAnXSc7XHJcbiAgICAgICAgICBhcnIucHVzaCh0aGlzLnBhcnNlT2JqKHYsIHMpKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHN0ciA9IGFyci5qb2luKCcmJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgIC8vanNvblxyXG4gICAgICAgIHZhciBhcnI6IGFueSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgayBpbiBpdGVtKSB7XHJcbiAgICAgICAgICBsZXQgdiA9IGl0ZW1ba11cclxuICAgICAgICAgIHZhciBzID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnLicgKyBlbmNvZGVVUklDb21wb25lbnQoayk7XHJcbiAgICAgICAgICBhcnIucHVzaCh0aGlzLnBhcnNlT2JqKHYsIHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RyID0gYXJyLmpvaW4oJyYnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvL+aZrumAmuexu+Wei1xyXG4gICAgICAgIHN0ciA9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIGxpc3QucHVzaChzdHIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpc3Quam9pbignJicpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZU9iaiA9IChvYmo6IGFueSwgc3RyOiBhbnkpID0+IHtcclxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAvL+aVsOe7hFxyXG4gICAgICB2YXIgYXJyOiBhbnkgPSBbXTtcclxuICAgICAgb2JqLmZvckVhY2goKHYsIGspID0+IHtcclxuICAgICAgICB2YXIgcyA9IHN0ciArICdbJyArIGsgKyAnXScgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodik7XHJcbiAgICAgICAgYXJyLnB1c2godGhpcy5wYXJzZU9iaih2LCBzKSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIHN0ciA9IGFyci5qb2luKCcmJyk7XHJcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAvL2pzb25cclxuICAgICAgdmFyIGFycjogYW55ID0gW107XHJcbiAgICAgIGZvciAoY29uc3QgayBpbiBvYmopIHtcclxuICAgICAgICBsZXQgdiA9IG9ialtrXVxyXG4gICAgICAgIHZhciBzID0gc3RyICsgJy4nICsgZW5jb2RlVVJJQ29tcG9uZW50KGspO1xyXG4gICAgICAgIGFyci5wdXNoKHRoaXMucGFyc2VPYmoodiwgcykpO1xyXG4gICAgICB9XHJcbiAgICAgIHN0ciA9IGFyci5qb2luKCcmJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL+aZrumAmuexu+Wei1xyXG4gICAgICBzdHIgPSBzdHIgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQob2JqKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICBnZXRPc3MgPSAodXJsOiBzdHJpbmcsIHBhcmFtcz86IHt9LCByZXNwb25zZVR5cGU/OiBhbnksIG5vRXJyb3IgPSBmYWxzZSk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55PihvYnNlcnZlID0+IHtcclxuICAgICAgaWYgKHVybCA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBvYnNlcnZlLm5leHQoKTtcclxuICAgICAgICBvYnNlcnZlLnVuc3Vic2NyaWJlKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhcInVybFwiLCB1cmwpXHJcbiAgICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XHJcbiAgICAgICAgdXJsID0gYXRyX3N0YXRpY19kYXRhcy5PU1NfVVJMICsgdXJsO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBfaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICBsZXQgd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcclxuICAgICAgLy8gLy9jb25zb2xlLmxvZyhfaGVhZGVycylcclxuICAgICAgaWYgKHVybC5lbmRzV2l0aChcIi5vXCIpICYmICFwYXJhbXMpIHtcclxuICAgICAgICB1cmwgKz0gXCI/dj1cIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub0Vycm9yKSB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPiAwKSB7XHJcbiAgICAgICAgICB1cmwgKz0gXCImbm9FcnJvclwiXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHVybCArPSBcIj9ub0Vycm9yXCJcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5odHRwQ2xpZW50LmdldCh1cmwsIHtcclxuICAgICAgICBoZWFkZXJzOiBfaGVhZGVycyxcclxuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyxcclxuICAgICAgICByZXNwb25zZVR5cGU6IHJlc3BvbnNlVHlwZSB8fCAndGV4dCdcclxuICAgICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZS5uZXh0KHJlc3VsdCk7XHJcbiAgICAgICAgb2JzZXJ2ZS51bnN1YnNjcmliZSgpXHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBvYnNlcnZlLmVycm9yKGVycm9yKVxyXG4gICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICB9KVxyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFhscyh1cmw6IHN0cmluZywgcGFyYW1zPzoge30pIHtcclxuICAgIHRoaXMucG9zdChcInRoaXJkL2F1dGgvZ2V0QXV0aFRva2VuXCIsIHt9LCBUb29sc1V0aWwuZ2V0SHR0cE9wdGlvbnMoKSkuc3Vic2NyaWJlKFxyXG4gICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgIGxldCB0aHJpZFBhcm1hID0ge1xyXG4gICAgICAgICAgXCJyZXFNZXRob2RcIjogXCJhdXRoXCIsXHJcbiAgICAgICAgICBcInNpZ25cIjogcmVzdWx0LmRhdGEsXHJcbiAgICAgICAgICBcIngtaGVhZGVyLWF0clwiOiBcIndlYlwiLFxyXG4gICAgICAgICAgdG9rZW46IExvY2FsU3RvcmFnZVV0aWwuZ2V0VXNlclRva2VuKCksXHJcbiAgICAgICAgICB1c2VySWQ6IExvY2FsU3RvcmFnZVV0aWwuZ2V0VXNlcklkKClcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1zID0gT2JqZWN0LmFzc2lnbihwYXJhbXMsIHRocmlkUGFybWEpO1xyXG4gICAgICAgIFRvb2xzVXRpbC5kb3dubG9hZFhscyhhdHJfc3RhdGljX2RhdGFzLlNFUlZFUl9VUkwgKyB1cmwsIHBhcmFtcyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcblxyXG4iXX0=
1
+ import { Injectable } from '@angular/core';
2
+ import { HttpRequest, HttpEventType, HttpHeaders } from "@angular/common/http";
3
+ import { Observable } from 'rxjs';
4
+ import { atr_static_datas } from '../base/atr-common';
5
+ import { LocalStorageUtil } from '../utils/localstorage.util';
6
+ import { ToolsUtil } from "../utils/ToolsUtil";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ export class HttpService {
10
+ constructor(httpClient) {
11
+ this.httpClient = httpClient;
12
+ /**
13
+ *
14
+ * @param url
15
+ * @param params
16
+ */
17
+ this.post = (url, params, options, headers, noTip = false) => {
18
+ return new Observable(observe => {
19
+ // console.log("aaa");
20
+ let _headers = new HttpHeaders();
21
+ if (options && options.hasOwnProperty('isCommonHttpHeader')) {
22
+ _headers = this.getDefaultHeader(_headers);
23
+ }
24
+ _headers = this.getNormalHeader(_headers);
25
+ if (headers) {
26
+ _headers = headers;
27
+ }
28
+ _headers = _headers.set("noTip", noTip ? "1" : "0");
29
+ let withCredentials = true;
30
+ if (options && options.hasOwnProperty('isWithCredentials')) {
31
+ withCredentials = options.isWithCredentials;
32
+ }
33
+ // console.log(_headers);
34
+ for (const key of Object.keys(params)) {
35
+ if (params.hasOwnProperty(key) && typeof params[key] === 'object') {
36
+ params[key] = JSON.stringify(params[key]);
37
+ }
38
+ }
39
+ this.httpClient.post(url, null, { headers: _headers, params: params, withCredentials: withCredentials })
40
+ .subscribe(result => {
41
+ observe.next(result);
42
+ observe.unsubscribe();
43
+ }, error => {
44
+ observe.error(error);
45
+ observe.unsubscribe();
46
+ });
47
+ });
48
+ };
49
+ this.postBody = (url, params, options, headers, noTip = false) => {
50
+ return new Observable(observe => {
51
+ // console.log("aaa");
52
+ let _headers = new HttpHeaders();
53
+ if (options && options.hasOwnProperty('isCommonHttpHeader')) {
54
+ _headers = this.getDefaultHeader(_headers);
55
+ }
56
+ _headers = this.getNormalHeader(_headers);
57
+ _headers = _headers.set("noTip", noTip ? "1" : "0");
58
+ let withCredentials = true;
59
+ if (options && options.hasOwnProperty('isWithCredentials')) {
60
+ withCredentials = options.isWithCredentials;
61
+ }
62
+ // console.log(_headers);
63
+ /*for(const key of Object.keys(params)) {
64
+ if(params.hasOwnProperty(key) && typeof params[key] === 'object') {
65
+ params[key] = JSON.stringify(params[key])
66
+ }
67
+ }*/
68
+ this.httpClient.post(url, params, { headers: _headers, params: {}, withCredentials: withCredentials })
69
+ .subscribe(result => {
70
+ observe.next(result);
71
+ observe.unsubscribe();
72
+ }, error => {
73
+ observe.error(error);
74
+ observe.unsubscribe();
75
+ });
76
+ });
77
+ };
78
+ this.get = (url, params, options, noTip = false) => {
79
+ return new Observable(observe => {
80
+ let _headers = new HttpHeaders();
81
+ if (options && options.hasOwnProperty('isCommonHttpHeader')) {
82
+ _headers = this.getDefaultHeader(_headers);
83
+ }
84
+ _headers = this.getNormalHeader(_headers);
85
+ _headers = _headers.set("noTip", noTip ? "1" : "0");
86
+ let withCredentials = false;
87
+ if (options && options.hasOwnProperty('isWithCredentials')) {
88
+ withCredentials = options.isWithCredentials;
89
+ }
90
+ // console.log(options)
91
+ // console.log(_headers)
92
+ this.httpClient.get(url, {
93
+ headers: _headers,
94
+ params: params,
95
+ withCredentials: withCredentials
96
+ }).subscribe(result => {
97
+ observe.next(result);
98
+ observe.unsubscribe();
99
+ }, error => {
100
+ observe.error(error);
101
+ observe.unsubscribe();
102
+ });
103
+ });
104
+ };
105
+ this.upload = (method, url, formData, progress) => {
106
+ let req = new HttpRequest(method, url, formData, { reportProgress: true });
107
+ return new Observable(observe => {
108
+ this.httpClient.request(req).subscribe((event) => {
109
+ if (event.type === HttpEventType.UploadProgress) {
110
+ if (typeof progress == 'function') {
111
+ event['progress'] = parseInt(event.loaded / event.total * 100 + '');
112
+ progress(event);
113
+ }
114
+ }
115
+ if (event.type === HttpEventType.Response) {
116
+ observe.next(event.body);
117
+ }
118
+ }, error => {
119
+ observe.error(error);
120
+ observe.unsubscribe();
121
+ });
122
+ });
123
+ };
124
+ this.transformString = (objItem) => {
125
+ var list = [];
126
+ for (const key in objItem) {
127
+ var str = '';
128
+ let item = objItem[key];
129
+ if (item instanceof Array) {
130
+ //数组
131
+ var arr = [];
132
+ item.forEach((v, k) => {
133
+ var s = encodeURIComponent(key) + '[' + k + ']';
134
+ arr.push(this.parseObj(v, s));
135
+ });
136
+ str = arr.join('&');
137
+ }
138
+ else if (item instanceof Object) {
139
+ //json
140
+ var arr = [];
141
+ for (const k in item) {
142
+ let v = item[k];
143
+ var s = encodeURIComponent(key) + '.' + encodeURIComponent(k);
144
+ arr.push(this.parseObj(v, s));
145
+ }
146
+ str = arr.join('&');
147
+ }
148
+ else {
149
+ //普通类型
150
+ str = encodeURIComponent(key) + '=' + encodeURIComponent(item);
151
+ }
152
+ list.push(str);
153
+ }
154
+ return list.join('&');
155
+ };
156
+ this.parseObj = (obj, str) => {
157
+ if (obj instanceof Array) {
158
+ //数组
159
+ var arr = [];
160
+ obj.forEach((v, k) => {
161
+ var s = str + '[' + k + ']' + '=' + encodeURIComponent(v);
162
+ arr.push(this.parseObj(v, s));
163
+ });
164
+ str = arr.join('&');
165
+ }
166
+ else if (obj instanceof Object) {
167
+ //json
168
+ var arr = [];
169
+ for (const k in obj) {
170
+ let v = obj[k];
171
+ var s = str + '.' + encodeURIComponent(k);
172
+ arr.push(this.parseObj(v, s));
173
+ }
174
+ str = arr.join('&');
175
+ }
176
+ else {
177
+ //普通类型
178
+ str = str + '=' + encodeURIComponent(obj);
179
+ }
180
+ return str;
181
+ };
182
+ this.getOss = (url, params, responseType, noError = false) => {
183
+ return new Observable(observe => {
184
+ if (url == undefined) {
185
+ observe.next();
186
+ observe.unsubscribe();
187
+ return;
188
+ }
189
+ console.log("url", url);
190
+ if (!url.startsWith("http")) {
191
+ url = atr_static_datas.OSS_URL + url;
192
+ }
193
+ let _headers = new HttpHeaders();
194
+ let withCredentials = false;
195
+ // //console.log(_headers)
196
+ if (url.endsWith(".o") && !params) {
197
+ url += "?v=" + new Date().getTime();
198
+ }
199
+ if (noError) {
200
+ if (url.indexOf('?') > 0) {
201
+ url += "&noError";
202
+ }
203
+ else {
204
+ url += "?noError";
205
+ }
206
+ }
207
+ this.httpClient.get(url, {
208
+ headers: _headers,
209
+ params: params,
210
+ withCredentials: withCredentials,
211
+ responseType: responseType || 'text'
212
+ }).subscribe(result => {
213
+ observe.next(result);
214
+ observe.unsubscribe();
215
+ }, error => {
216
+ observe.error(error);
217
+ observe.unsubscribe();
218
+ });
219
+ });
220
+ };
221
+ }
222
+ getNormalHeader(_headers) {
223
+ if (!atr_static_datas.needNormalHeade) {
224
+ return _headers;
225
+ }
226
+ return atr_static_datas.getNormalHeader(_headers);
227
+ }
228
+ postPromAll(urls, options, headers, noTip = false) {
229
+ let param = [];
230
+ urls.forEach(item => {
231
+ param.push(this.postProm(item.url, item.params, options, headers, noTip = false));
232
+ });
233
+ return Promise.all(param);
234
+ }
235
+ getOssPre() {
236
+ return new Observable(observe => {
237
+ if (!atr_static_datas.OSS_GETHOST) {
238
+ observe.error();
239
+ observe.unsubscribe();
240
+ return;
241
+ }
242
+ this.post(atr_static_datas.OSS_GETHOST, {}, ToolsUtil.getHttpOptions()).subscribe(res => {
243
+ atr_static_datas.OSS_URL = res.data;
244
+ ToolsUtil.ossPrefix = res.data;
245
+ observe.next();
246
+ observe.unsubscribe();
247
+ });
248
+ });
249
+ }
250
+ postProm(url, params, options, headers, noTip = false) {
251
+ // //console.log("aaa");
252
+ let _headers = new HttpHeaders();
253
+ if (options && options.hasOwnProperty('isCommonHttpHeader')) {
254
+ _headers = this.getDefaultHeader(_headers);
255
+ }
256
+ _headers = this.getNormalHeader(_headers);
257
+ if (headers) {
258
+ _headers = headers;
259
+ }
260
+ _headers = _headers.set("noTip", noTip ? "1" : "0");
261
+ let withCredentials = true;
262
+ if (options && options.hasOwnProperty('isWithCredentials')) {
263
+ withCredentials = options.isWithCredentials;
264
+ }
265
+ let postParams = {};
266
+ for (const key of Object.keys(params)) {
267
+ if (params[key] !== null && params[key] !== '' && params[key] !== undefined) {
268
+ if (params.hasOwnProperty(key) && typeof params[key] === 'object') {
269
+ postParams[key] = JSON.stringify(params[key]);
270
+ }
271
+ else {
272
+ postParams[key] = params[key];
273
+ }
274
+ }
275
+ }
276
+ return this.httpClient.post(url, null, {
277
+ headers: _headers,
278
+ params: postParams,
279
+ withCredentials: withCredentials
280
+ })
281
+ .toPromise();
282
+ }
283
+ getDefaultHeader(_headers) {
284
+ return atr_static_datas.getDefaultHeader(_headers);
285
+ }
286
+ downloadXls(url, params) {
287
+ this.post("third/auth/getAuthToken", {}, ToolsUtil.getHttpOptions()).subscribe(result => {
288
+ let thridParma = {
289
+ "reqMethod": "auth",
290
+ "sign": result.data,
291
+ "x-header-atr": "web",
292
+ token: LocalStorageUtil.getUserToken(),
293
+ userId: LocalStorageUtil.getUserId()
294
+ };
295
+ params = Object.assign(params, thridParma);
296
+ ToolsUtil.downloadXls(atr_static_datas.SERVER_URL + url, params);
297
+ }, error => {
298
+ });
299
+ }
300
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
301
+ static { thisprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: HttpService }); }
302
+ }
303
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: HttpService, decorators: [{
304
+ type: Injectable
305
+ }], ctorParameters: () => [{ type: i1.HttpClient }] });
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvY29yZS9zZXJ2aWNlcy9odHRwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWEsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBYyxNQUFNLG9CQUFvQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRzVELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBSTdDLE1BQU0sT0FBTyxXQUFXO0lBRXRCLFlBQ1UsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVdoQzs7OztXQUlHO1FBQ0gsU0FBSSxHQUFHLENBQUMsR0FBVyxFQUFFLE1BQVksRUFBRSxPQUFxQixFQUFFLE9BQXFCLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBbUIsRUFBRTtZQUVqSCxPQUFPLElBQUksVUFBVSxDQUFNLE9BQU8sQ0FBQyxFQUFFO2dCQUNuQyxzQkFBc0I7Z0JBQ3RCLElBQUksUUFBUSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsRUFBRTtvQkFDM0QsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDNUM7Z0JBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFDLElBQUksT0FBTyxFQUFFO29CQUNY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YUFDRjtTQUVGO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO1lBQ3JDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLGVBQWUsRUFBRSxlQUFlO1NBQ2pDLENBQUM7YUFDQyxTQUFTLEVBQUUsQ0FBQztJQUVqQixDQUFDO0lBbUNELGdCQUFnQixDQUFDLFFBQXFCO1FBQ3BDLE9BQU8sZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQXFKRCxXQUFXLENBQUMsR0FBVyxFQUFFLE1BQVk7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUM1RSxNQUFNLENBQUMsRUFBRTtZQUNQLElBQUksVUFBVSxHQUFHO2dCQUNmLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ25CLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsWUFBWSxFQUFFO2dCQUN0QyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFO2FBQ3JDLENBQUE7WUFDRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDM0MsU0FBUyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLENBQUMsRUFDRCxLQUFLLENBQUMsRUFBRTtRQUNSLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs4R0FqVVUsV0FBVztrSEFBWCxXQUFXOzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUmVxdWVzdCwgSHR0cEV2ZW50VHlwZSwgSHR0cEhlYWRlcnN9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2F0cl9zdGF0aWNfZGF0YXMsIEh0dHBPcHRpb25zfSBmcm9tICcuLi9iYXNlL2F0ci1jb21tb24nO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVV0aWx9IGZyb20gJy4uL3V0aWxzL2xvY2Fsc3RvcmFnZS51dGlsJztcclxuaW1wb3J0IHtNZDV9IGZyb20gXCJ0cy1tZDVcIjtcclxuaW1wb3J0IHtlbnZpcm9ubWVudH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvY29yZS9lbnZpcm9ubWVudHNcIjtcclxuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi91dGlscy9Ub29sc1V0aWxcIjtcclxuaW1wb3J0IHtVcGxvYWRPc3NTZXJ2aWNlfSBmcm9tICcuL3VwbG9hZC1vc3Muc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBIdHRwU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBnZXROb3JtYWxIZWFkZXIoX2hlYWRlcnM6IEh0dHBIZWFkZXJzKTogSHR0cEhlYWRlcnMge1xyXG4gICAgaWYgKCFhdHJfc3RhdGljX2RhdGFzLm5lZWROb3JtYWxIZWFkZSkge1xyXG4gICAgICByZXR1cm4gX2hlYWRlcnM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXRyX3N0YXRpY19kYXRhcy5nZXROb3JtYWxIZWFkZXIoX2hlYWRlcnMpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICovXHJcbiAgcG9zdCA9ICh1cmw6IHN0cmluZywgcGFyYW1zPzogYW55LCBvcHRpb25zPzogSHR0cE9wdGlvbnMsIGhlYWRlcnM/OiBIdHRwSGVhZGVycywgbm9UaXAgPSBmYWxzZSk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWFhXCIpO1xyXG4gICAgICBsZXQgX2hlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21tb25IdHRwSGVhZGVyJykpIHtcclxuICAgICAgICBfaGVhZGVycyA9IHRoaXMuZ2V0RGVmYXVsdEhlYWRlcihfaGVhZGVycyk7XHJcbiAgICAgIH1cclxuICAgICAgX2hlYWRlcnMgPSB0aGlzLmdldE5vcm1hbEhlYWRlcihfaGVhZGVycyk7XHJcbiAgICAgIGlmIChoZWFkZXJzKSB7XHJcbiAgICAgICAgX2hlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgICB9XHJcbiAgICAgIF9oZWFkZXJzID0gX2hlYWRlcnMuc2V0KFwibm9UaXBcIiwgbm9UaXAgPyBcIjFcIiA6IFwiMFwiKTtcclxuICAgICAgbGV0IHdpdGhDcmVkZW50aWFsczogYW55ID0gdHJ1ZVxyXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KCdpc1dpdGhDcmVkZW50aWFscycpKSB7XHJcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gb3B0aW9ucy5pc1dpdGhDcmVkZW50aWFsc1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKF9oZWFkZXJzKTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xyXG4gICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgcGFyYW1zW2tleV0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IEpTT04uc3RyaW5naWZ5KHBhcmFtc1trZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5wb3N0KHVybCwgbnVsbCwge2hlYWRlcnM6IF9oZWFkZXJzLCBwYXJhbXM6IHBhcmFtcywgd2l0aENyZWRlbnRpYWxzOiB3aXRoQ3JlZGVudGlhbHN9KVxyXG4gICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgIG9ic2VydmUubmV4dChyZXN1bHQpO1xyXG4gICAgICAgICAgb2JzZXJ2ZS51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgb2JzZXJ2ZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHBvc3RQcm9tQWxsKHVybHM6IHsgdXJsOiBzdHJpbmcsIHBhcmFtcz86IHt9LCB9W10sIG9wdGlvbnM/OiBIdHRwT3B0aW9ucywgaGVhZGVycz86IEh0dHBIZWFkZXJzLCBub1RpcCA9IGZhbHNlKSB7XHJcbiAgICBsZXQgcGFyYW06IGFueVtdID0gW107XHJcbiAgICB1cmxzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIHBhcmFtLnB1c2godGhpcy5wb3N0UHJvbShpdGVtLnVybCwgaXRlbS5wYXJhbXMsIG9wdGlvbnMsIGhlYWRlcnMsIG5vVGlwID0gZmFsc2UpKTtcclxuICAgIH0pXHJcblxyXG5cclxuICAgIHJldHVybiBQcm9taXNlLmFsbChwYXJhbSlcclxuICB9XHJcblxyXG5cclxuICBnZXRPc3NQcmUoKSB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55PihvYnNlcnZlID0+IHtcclxuICAgICAgaWYgKCFhdHJfc3RhdGljX2RhdGFzLk9TU19HRVRIT1NUKSB7XHJcbiAgICAgICAgb2JzZXJ2ZS5lcnJvcigpO1xyXG4gICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucG9zdChhdHJfc3RhdGljX2RhdGFzLk9TU19HRVRIT1NULCB7fSwgVG9vbHNVdGlsLmdldEh0dHBPcHRpb25zKCkpLnN1YnNjcmliZShcclxuICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgYXRyX3N0YXRpY19kYXRhcy5PU1NfVVJMID0gcmVzLmRhdGFcclxuICAgICAgICAgIFRvb2xzVXRpbC5vc3NQcmVmaXggPSByZXMuZGF0YVxyXG4gICAgICAgICAgb2JzZXJ2ZS5uZXh0KCk7XHJcbiAgICAgICAgICBvYnNlcnZlLnVuc3Vic2NyaWJlKClcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwb3N0UHJvbSh1cmw6IHN0cmluZywgcGFyYW1zPzogYW55LCBvcHRpb25zPzogSHR0cE9wdGlvbnMsIGhlYWRlcnM/OiBIdHRwSGVhZGVycywgbm9UaXAgPSBmYWxzZSkge1xyXG5cclxuICAgIC8vIC8vY29uc29sZS5sb2coXCJhYWFcIik7XHJcbiAgICBsZXQgX2hlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzQ29tbW9uSHR0cEhlYWRlcicpKSB7XHJcbiAgICAgIF9oZWFkZXJzID0gdGhpcy5nZXREZWZhdWx0SGVhZGVyKF9oZWFkZXJzKTtcclxuICAgIH1cclxuICAgIF9oZWFkZXJzID0gdGhpcy5nZXROb3JtYWxIZWFkZXIoX2hlYWRlcnMpO1xyXG4gICAgaWYgKGhlYWRlcnMpIHtcclxuICAgICAgX2hlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgfVxyXG4gICAgX2hlYWRlcnMgPSBfaGVhZGVycy5zZXQoXCJub1RpcFwiLCBub1RpcCA/IFwiMVwiIDogXCIwXCIpO1xyXG4gICAgbGV0IHdpdGhDcmVkZW50aWFsczogYW55ID0gdHJ1ZVxyXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNXaXRoQ3JlZGVudGlhbHMnKSkge1xyXG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSBvcHRpb25zLmlzV2l0aENyZWRlbnRpYWxzXHJcbiAgICB9XHJcbiAgICBsZXQgcG9zdFBhcmFtczogYW55ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xyXG4gICAgICBpZiAocGFyYW1zW2tleV0gIT09IG51bGwgJiYgcGFyYW1zW2tleV0gIT09ICcnICYmIHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHBhcmFtc1trZXldID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgcG9zdFBhcmFtc1trZXldID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zW2tleV0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBvc3RQYXJhbXNba2V5XSA9IHBhcmFtc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCBudWxsLCB7XHJcbiAgICAgIGhlYWRlcnM6IF9oZWFkZXJzLFxyXG4gICAgICBwYXJhbXM6IHBvc3RQYXJhbXMsXHJcbiAgICAgIHdpdGhDcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzXHJcbiAgICB9KVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcG9zdEJvZHkgPSAodXJsOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgb3B0aW9ucz86IEh0dHBPcHRpb25zLCBoZWFkZXJzPzoge30sIG5vVGlwID0gZmFsc2UpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG5cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxhbnk+KG9ic2VydmUgPT4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcImFhYVwiKTtcclxuICAgICAgbGV0IF9oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzQ29tbW9uSHR0cEhlYWRlcicpKSB7XHJcbiAgICAgICAgX2hlYWRlcnMgPSB0aGlzLmdldERlZmF1bHRIZWFkZXIoX2hlYWRlcnMpO1xyXG4gICAgICB9XHJcbiAgICAgIF9oZWFkZXJzID0gdGhpcy5nZXROb3JtYWxIZWFkZXIoX2hlYWRlcnMpO1xyXG4gICAgICBfaGVhZGVycyA9IF9oZWFkZXJzLnNldChcIm5vVGlwXCIsIG5vVGlwID8gXCIxXCIgOiBcIjBcIik7XHJcbiAgICAgIGxldCB3aXRoQ3JlZGVudGlhbHM6IGFueSA9IHRydWVcclxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNXaXRoQ3JlZGVudGlhbHMnKSkge1xyXG4gICAgICAgIHdpdGhDcmVkZW50aWFscyA9IG9wdGlvbnMuaXNXaXRoQ3JlZGVudGlhbHNcclxuICAgICAgfVxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhfaGVhZGVycyk7XHJcbiAgICAgIC8qZm9yKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XHJcbiAgICAgICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHBhcmFtc1trZXldICA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIHBhcmFtc1trZXldID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zW2tleV0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9Ki9cclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5wb3N0KHVybCwgcGFyYW1zLCB7aGVhZGVyczogX2hlYWRlcnMsIHBhcmFtczoge30sIHdpdGhDcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzfSlcclxuICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICBvYnNlcnZlLm5leHQocmVzdWx0KTtcclxuICAgICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgIG9ic2VydmUuZXJyb3IoZXJyb3IpXHJcbiAgICAgICAgICBvYnNlcnZlLnVuc3Vic2NyaWJlKClcclxuICAgICAgICB9KVxyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0SGVhZGVyKF9oZWFkZXJzOiBIdHRwSGVhZGVycyk6IEh0dHBIZWFkZXJzIHtcclxuICAgIHJldHVybiBhdHJfc3RhdGljX2RhdGFzLmdldERlZmF1bHRIZWFkZXIoX2hlYWRlcnMpXHJcbiAgfVxyXG5cclxuICBnZXQgPSAodXJsOiBzdHJpbmcsIHBhcmFtcz86IHt9LCBvcHRpb25zPzogSHR0cE9wdGlvbnMsIG5vVGlwID0gZmFsc2UpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG5cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxhbnk+KG9ic2VydmUgPT4ge1xyXG5cclxuICAgICAgbGV0IF9oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzQ29tbW9uSHR0cEhlYWRlcicpKSB7XHJcbiAgICAgICAgX2hlYWRlcnMgPSB0aGlzLmdldERlZmF1bHRIZWFkZXIoX2hlYWRlcnMpO1xyXG4gICAgICB9XHJcbiAgICAgIF9oZWFkZXJzID0gdGhpcy5nZXROb3JtYWxIZWFkZXIoX2hlYWRlcnMpO1xyXG4gICAgICBfaGVhZGVycyA9IF9oZWFkZXJzLnNldChcIm5vVGlwXCIsIG5vVGlwID8gXCIxXCIgOiBcIjBcIik7XHJcbiAgICAgIGxldCB3aXRoQ3JlZGVudGlhbHM6IGFueSA9IGZhbHNlXHJcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzV2l0aENyZWRlbnRpYWxzJykpIHtcclxuICAgICAgICB3aXRoQ3JlZGVudGlhbHMgPSBvcHRpb25zLmlzV2l0aENyZWRlbnRpYWxzXHJcbiAgICAgIH1cclxuICAgICAgLy8gY29uc29sZS5sb2cob3B0aW9ucylcclxuICAgICAgLy8gY29uc29sZS5sb2coX2hlYWRlcnMpXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQodXJsLCB7XHJcbiAgICAgICAgaGVhZGVyczogX2hlYWRlcnMsXHJcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB3aXRoQ3JlZGVudGlhbHNcclxuICAgICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZS5uZXh0KHJlc3VsdCk7XHJcbiAgICAgICAgb2JzZXJ2ZS51bnN1YnNjcmliZSgpXHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBvYnNlcnZlLmVycm9yKGVycm9yKVxyXG4gICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICB9KVxyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1cGxvYWQgPSAobWV0aG9kOiBhbnksIHVybDogYW55LCBmb3JtRGF0YTogRm9ybURhdGEsIHByb2dyZXNzOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgbGV0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdChtZXRob2QsIHVybCwgZm9ybURhdGEsIHtyZXBvcnRQcm9ncmVzczogdHJ1ZX0pXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZSA9PiB7XHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0KHJlcSkuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgcHJvZ3Jlc3MgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBldmVudFsncHJvZ3Jlc3MnXSA9IHBhcnNlSW50KGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsICogMTAwICsgJycpXHJcbiAgICAgICAgICAgIHByb2dyZXNzKGV2ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcclxuICAgICAgICAgIG9ic2VydmUubmV4dChldmVudC5ib2R5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBvYnNlcnZlLmVycm9yKGVycm9yKVxyXG4gICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNmb3JtU3RyaW5nID0gKG9iakl0ZW06IGFueSkgPT4ge1xyXG4gICAgdmFyIGxpc3Q6IGFueSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqSXRlbSkge1xyXG4gICAgICB2YXIgc3RyID0gJyc7XHJcbiAgICAgIGxldCBpdGVtID0gb2JqSXRlbVtrZXldXHJcbiAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAvL+aVsOe7hFxyXG4gICAgICAgIHZhciBhcnI6IGFueSA9IFtdO1xyXG4gICAgICAgIGl0ZW0uZm9yRWFjaCgodiwgaykgPT4ge1xyXG4gICAgICAgICAgdmFyIHMgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICdbJyArIGsgKyAnXSc7XHJcbiAgICAgICAgICBhcnIucHVzaCh0aGlzLnBhcnNlT2JqKHYsIHMpKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHN0ciA9IGFyci5qb2luKCcmJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgIC8vanNvblxyXG4gICAgICAgIHZhciBhcnI6IGFueSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgayBpbiBpdGVtKSB7XHJcbiAgICAgICAgICBsZXQgdiA9IGl0ZW1ba11cclxuICAgICAgICAgIHZhciBzID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnLicgKyBlbmNvZGVVUklDb21wb25lbnQoayk7XHJcbiAgICAgICAgICBhcnIucHVzaCh0aGlzLnBhcnNlT2JqKHYsIHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RyID0gYXJyLmpvaW4oJyYnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvL+aZrumAmuexu+Wei1xyXG4gICAgICAgIHN0ciA9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIGxpc3QucHVzaChzdHIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpc3Quam9pbignJicpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZU9iaiA9IChvYmo6IGFueSwgc3RyOiBhbnkpID0+IHtcclxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAvL+aVsOe7hFxyXG4gICAgICB2YXIgYXJyOiBhbnkgPSBbXTtcclxuICAgICAgb2JqLmZvckVhY2goKHYsIGspID0+IHtcclxuICAgICAgICB2YXIgcyA9IHN0ciArICdbJyArIGsgKyAnXScgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodik7XHJcbiAgICAgICAgYXJyLnB1c2godGhpcy5wYXJzZU9iaih2LCBzKSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIHN0ciA9IGFyci5qb2luKCcmJyk7XHJcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAvL2pzb25cclxuICAgICAgdmFyIGFycjogYW55ID0gW107XHJcbiAgICAgIGZvciAoY29uc3QgayBpbiBvYmopIHtcclxuICAgICAgICBsZXQgdiA9IG9ialtrXVxyXG4gICAgICAgIHZhciBzID0gc3RyICsgJy4nICsgZW5jb2RlVVJJQ29tcG9uZW50KGspO1xyXG4gICAgICAgIGFyci5wdXNoKHRoaXMucGFyc2VPYmoodiwgcykpO1xyXG4gICAgICB9XHJcbiAgICAgIHN0ciA9IGFyci5qb2luKCcmJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL+aZrumAmuexu+Wei1xyXG4gICAgICBzdHIgPSBzdHIgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQob2JqKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICBnZXRPc3MgPSAodXJsOiBzdHJpbmcsIHBhcmFtcz86IHt9LCByZXNwb25zZVR5cGU/OiBhbnksIG5vRXJyb3IgPSBmYWxzZSk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55PihvYnNlcnZlID0+IHtcclxuICAgICAgaWYgKHVybCA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBvYnNlcnZlLm5leHQoKTtcclxuICAgICAgICBvYnNlcnZlLnVuc3Vic2NyaWJlKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhcInVybFwiLCB1cmwpXHJcbiAgICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XHJcbiAgICAgICAgdXJsID0gYXRyX3N0YXRpY19kYXRhcy5PU1NfVVJMICsgdXJsO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBfaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICBsZXQgd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcclxuICAgICAgLy8gLy9jb25zb2xlLmxvZyhfaGVhZGVycylcclxuICAgICAgaWYgKHVybC5lbmRzV2l0aChcIi5vXCIpICYmICFwYXJhbXMpIHtcclxuICAgICAgICB1cmwgKz0gXCI/dj1cIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub0Vycm9yKSB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPiAwKSB7XHJcbiAgICAgICAgICB1cmwgKz0gXCImbm9FcnJvclwiXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHVybCArPSBcIj9ub0Vycm9yXCJcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5odHRwQ2xpZW50LmdldCh1cmwsIHtcclxuICAgICAgICBoZWFkZXJzOiBfaGVhZGVycyxcclxuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyxcclxuICAgICAgICByZXNwb25zZVR5cGU6IHJlc3BvbnNlVHlwZSB8fCAndGV4dCdcclxuICAgICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZS5uZXh0KHJlc3VsdCk7XHJcbiAgICAgICAgb2JzZXJ2ZS51bnN1YnNjcmliZSgpXHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBvYnNlcnZlLmVycm9yKGVycm9yKVxyXG4gICAgICAgIG9ic2VydmUudW5zdWJzY3JpYmUoKVxyXG4gICAgICB9KVxyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFhscyh1cmw6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XHJcbiAgICB0aGlzLnBvc3QoXCJ0aGlyZC9hdXRoL2dldEF1dGhUb2tlblwiLCB7fSwgVG9vbHNVdGlsLmdldEh0dHBPcHRpb25zKCkpLnN1YnNjcmliZShcclxuICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICBsZXQgdGhyaWRQYXJtYSA9IHtcclxuICAgICAgICAgIFwicmVxTWV0aG9kXCI6IFwiYXV0aFwiLFxyXG4gICAgICAgICAgXCJzaWduXCI6IHJlc3VsdC5kYXRhLFxyXG4gICAgICAgICAgXCJ4LWhlYWRlci1hdHJcIjogXCJ3ZWJcIixcclxuICAgICAgICAgIHRva2VuOiBMb2NhbFN0b3JhZ2VVdGlsLmdldFVzZXJUb2tlbigpLFxyXG4gICAgICAgICAgdXNlcklkOiBMb2NhbFN0b3JhZ2VVdGlsLmdldFVzZXJJZCgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhcmFtcyA9IE9iamVjdC5hc3NpZ24ocGFyYW1zLCB0aHJpZFBhcm1hKTtcclxuICAgICAgICBUb29sc1V0aWwuZG93bmxvYWRYbHMoYXRyX3N0YXRpY19kYXRhcy5TRVJWRVJfVVJMICsgdXJsLCBwYXJhbXMpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19