@vgip/meta-ui 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +2 -0
  2. package/bundles/vgip-meta-ui.umd.js +6323 -0
  3. package/bundles/vgip-meta-ui.umd.js.map +1 -0
  4. package/esm2015/lib/common/fieldNormalizer/boolean.js +12 -0
  5. package/esm2015/lib/common/fieldNormalizer/datetime.js +9 -0
  6. package/esm2015/lib/common/fieldNormalizer/index.js +168 -0
  7. package/esm2015/lib/common/fieldNormalizer/number.js +9 -0
  8. package/esm2015/lib/common/fieldNormalizer/options.js +50 -0
  9. package/esm2015/lib/common/fieldNormalizer/radio.js +10 -0
  10. package/esm2015/lib/common/fieldNormalizer/reference.js +36 -0
  11. package/esm2015/lib/common/fieldNormalizer/richtext.js +15 -0
  12. package/esm2015/lib/common/fieldNormalizer/string.js +24 -0
  13. package/esm2015/lib/common/fieldNormalizer/text.js +15 -0
  14. package/esm2015/lib/common/fieldNormalizer/uniqueNameFilter.js +23 -0
  15. package/esm2015/lib/common/metaAutofocus.directive.js +35 -0
  16. package/esm2015/lib/common/metaIcons.pipe.js +28 -0
  17. package/esm2015/lib/common/metaModel.pipe.js +22 -0
  18. package/esm2015/lib/common/metaNormalizer.js +311 -0
  19. package/esm2015/lib/common/metaStripHtml.pipe.js +18 -0
  20. package/esm2015/lib/common/utils/colorThemes.js +77 -0
  21. package/esm2015/lib/common/utils/indexedDbStore/index.js +218 -0
  22. package/esm2015/lib/common/utils/relativeTimeBuilder.js +51 -0
  23. package/esm2015/lib/common/utils/templateBuilder.js +92 -0
  24. package/esm2015/lib/field.js +157 -0
  25. package/esm2015/lib/fieldAbstract.js +195 -0
  26. package/esm2015/lib/fieldBoolean/index.js +50 -0
  27. package/esm2015/lib/fieldComposite/index.js +41 -0
  28. package/esm2015/lib/fieldDatetime/index.js +334 -0
  29. package/esm2015/lib/fieldInput/index.js +421 -0
  30. package/esm2015/lib/fieldList/index.js +68 -0
  31. package/esm2015/lib/fieldRadio/index.js +85 -0
  32. package/esm2015/lib/fieldReference/index.js +797 -0
  33. package/esm2015/lib/fieldRichtext/index.js +82 -0
  34. package/esm2015/lib/fieldSelect/index.js +448 -0
  35. package/esm2015/lib/fieldText/index.js +66 -0
  36. package/esm2015/lib/fieldUnknown/index.js +16 -0
  37. package/esm2015/lib/index.js +105 -0
  38. package/esm2015/lib/layout/index.js +155 -0
  39. package/esm2015/lib/refDialog/index.js +134 -0
  40. package/esm2015/lib/resource/index.js +424 -0
  41. package/esm2015/lib/resourceCard/index.js +56 -0
  42. package/esm2015/lib/services/metaContext/index.js +34 -0
  43. package/esm2015/lib/services/metaMsg/index.js +86 -0
  44. package/esm2015/lib/services/metaReference/index.js +98 -0
  45. package/esm2015/lib/services/metaResource/index.js +141 -0
  46. package/esm2015/lib/services/metaResource/metaHttpClient.js +65 -0
  47. package/esm2015/lib/services/metaTracker/index.js +30 -0
  48. package/esm2015/lib/services/resourceDrafts/index.js +70 -0
  49. package/esm2015/public-api.js +5 -0
  50. package/esm2015/vgip-meta-ui.js +5 -0
  51. package/fesm2015/vgip-meta-ui.js +5226 -0
  52. package/fesm2015/vgip-meta-ui.js.map +1 -0
  53. package/lib/common/fieldNormalizer/boolean.d.ts +1 -0
  54. package/lib/common/fieldNormalizer/datetime.d.ts +1 -0
  55. package/lib/common/fieldNormalizer/index.d.ts +1 -0
  56. package/lib/common/fieldNormalizer/number.d.ts +1 -0
  57. package/lib/common/fieldNormalizer/options.d.ts +1 -0
  58. package/lib/common/fieldNormalizer/radio.d.ts +1 -0
  59. package/lib/common/fieldNormalizer/reference.d.ts +1 -0
  60. package/lib/common/fieldNormalizer/richtext.d.ts +1 -0
  61. package/lib/common/fieldNormalizer/string.d.ts +1 -0
  62. package/lib/common/fieldNormalizer/text.d.ts +1 -0
  63. package/lib/common/fieldNormalizer/uniqueNameFilter.d.ts +1 -0
  64. package/lib/common/metaAutofocus.directive.d.ts +7 -0
  65. package/lib/common/metaIcons.pipe.d.ts +7 -0
  66. package/lib/common/metaModel.pipe.d.ts +5 -0
  67. package/lib/common/metaNormalizer.d.ts +1 -0
  68. package/lib/common/metaStripHtml.pipe.d.ts +4 -0
  69. package/lib/common/utils/colorThemes.d.ts +8 -0
  70. package/lib/common/utils/indexedDbStore/index.d.ts +24 -0
  71. package/lib/common/utils/relativeTimeBuilder.d.ts +1 -0
  72. package/lib/common/utils/templateBuilder.d.ts +1 -0
  73. package/lib/field.d.ts +22 -0
  74. package/lib/fieldAbstract.d.ts +58 -0
  75. package/lib/fieldBoolean/index.d.ts +7 -0
  76. package/lib/fieldComposite/index.d.ts +8 -0
  77. package/lib/fieldDatetime/index.d.ts +23 -0
  78. package/lib/fieldInput/index.d.ts +28 -0
  79. package/lib/fieldList/index.d.ts +10 -0
  80. package/lib/fieldRadio/index.d.ts +12 -0
  81. package/lib/fieldReference/index.d.ts +68 -0
  82. package/lib/fieldRichtext/index.d.ts +27 -0
  83. package/lib/fieldSelect/index.d.ts +38 -0
  84. package/lib/fieldText/index.d.ts +12 -0
  85. package/lib/fieldUnknown/index.d.ts +3 -0
  86. package/lib/index.d.ts +35 -0
  87. package/lib/layout/index.d.ts +35 -0
  88. package/lib/refDialog/index.d.ts +30 -0
  89. package/lib/resource/index.d.ts +54 -0
  90. package/lib/resourceCard/index.d.ts +15 -0
  91. package/lib/services/metaContext/index.d.ts +23 -0
  92. package/lib/services/metaMsg/index.d.ts +11 -0
  93. package/lib/services/metaReference/index.d.ts +11 -0
  94. package/lib/services/metaResource/index.d.ts +28 -0
  95. package/lib/services/metaResource/metaHttpClient.d.ts +12 -0
  96. package/lib/services/metaTracker/index.d.ts +16 -0
  97. package/lib/services/resourceDrafts/index.d.ts +23 -0
  98. package/package.json +23 -0
  99. package/public-api.d.ts +1 -0
  100. package/vgip-meta-ui.d.ts +4 -0
  101. package/vgip-meta-ui.metadata.json +1 -0
@@ -0,0 +1,22 @@
1
+ /*
2
+ * @Author: Alexander.Vangelov@vonage.com
3
+ * @Date: 2019-09-19 17:35:19
4
+ * @Last Modified by: Alexander.Vangelov@vonage.com
5
+ * @Last Modified time: 2019-11-05 13:46:26
6
+ */
7
+ import { Pipe } from '@angular/core';
8
+ export class MetaModelPipe {
9
+ constructor() {
10
+ }
11
+ transform(value, args) {
12
+ return value;
13
+ }
14
+ }
15
+ MetaModelPipe.decorators = [
16
+ { type: Pipe, args: [{
17
+ name: 'metaModel',
18
+ pure: true
19
+ },] }
20
+ ];
21
+ MetaModelPipe.ctorParameters = () => [];
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YU1vZGVsLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvY29tbW9uL21ldGFNb2RlbC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFNcEQsTUFBTSxPQUFPLGFBQWE7SUFFeEI7SUFDQSxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVUsRUFBRSxJQUFVO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7O1lBWEYsSUFBSSxTQUFDO2dCQUNKLElBQUksRUFBRSxXQUFXO2dCQUNqQixJQUFJLEVBQUUsSUFBSTthQUNYIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEBBdXRob3I6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tIFxuICogQERhdGU6IDIwMTktMDktMTkgMTc6MzU6MTkgXG4gKiBATGFzdCBNb2RpZmllZCBieTogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTktMTEtMDUgMTM6NDY6MjZcbiAqL1xuXG5pbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ21ldGFNb2RlbCcsXG4gIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTWV0YU1vZGVsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGFyZ3M/OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,311 @@
1
+ /*
2
+ * @Author: Alexander.Vangelov@vonage.com
3
+ * @Date: 2019-09-19 17:34:49
4
+ * @Last Modified by: Alexander.Vangelov@vonage.com
5
+ * @Last Modified time: 2020-09-03 09:42:12
6
+ */
7
+ import { fieldNormalizer } from './fieldNormalizer';
8
+ import { uniqueNameFilter } from './fieldNormalizer/uniqueNameFilter';
9
+ const sortObj = (obj) => {
10
+ if (typeof (obj) !== 'object' || obj === null) {
11
+ return obj;
12
+ }
13
+ if (Array.isArray(obj)) {
14
+ return obj.map((e) => sortObj(e)).sort();
15
+ }
16
+ return Object.keys(obj).sort().reduce((sorted, k) => {
17
+ sorted[k] = sortObj(obj[k]);
18
+ return sorted;
19
+ }, {});
20
+ };
21
+ const ɵ0 = sortObj;
22
+ export const metaNormalizer = (meta, integration, resourceType) => {
23
+ const uniqFieldNames = [];
24
+ const integrationCode = (integration || '').toUpperCase();
25
+ const metaV3 = {
26
+ integration,
27
+ resourceType,
28
+ availableLayouts: meta.availableLayouts,
29
+ layout: {
30
+ id: meta.layout.id,
31
+ name: meta.layout.name,
32
+ label: meta.layout.label,
33
+ version: '3.0.0',
34
+ sections: (meta.layout.sections || []).map((s) => {
35
+ const section = {
36
+ label: s.label,
37
+ fields: uniqueNameFilter(s.fields || [], uniqFieldNames).map((v) => fieldNormalizer(v, uniqFieldNames)) // VIST-424
38
+ };
39
+ if (s.visible || s.alwaysVisible) {
40
+ section.visible = s.visible || s.alwaysVisible;
41
+ }
42
+ return section;
43
+ })
44
+ }
45
+ };
46
+ if (meta.layout.origLayoutId) {
47
+ metaV3.layout.origLayoutId = meta.layout.origLayoutId;
48
+ }
49
+ if (meta.drafts) {
50
+ metaV3.drafts = meta.drafts;
51
+ }
52
+ const fieldFixesByIntegration = (f) => {
53
+ if (f.type === 'boolean' && ((typeof (f.default) !== 'boolean') && f.default && !f.default.value)) {
54
+ delete f.default;
55
+ }
56
+ else if (f.type === 'reference') {
57
+ const references = (f.reference instanceof Array) ? f.reference : [f.reference];
58
+ for (const r of references) {
59
+ if (r.creatable === false && typeof (r.updatable) === 'undefined') {
60
+ r.updatable = false; // User missing updatable, may be other too
61
+ }
62
+ }
63
+ }
64
+ switch (integrationCode) {
65
+ case 'BULLHORN': {
66
+ if (resourceType === 'Appointment') {
67
+ if (['dateBegin', 'dateEnd'].indexOf(f.name) !== -1) {
68
+ if (!f.validations) {
69
+ f.validations = { step: 1800 };
70
+ }
71
+ else {
72
+ f.validations.step = 1800;
73
+ }
74
+ f.default = f.name === 'dateBegin' ? 'now' : '30.minutes';
75
+ if (!f.auto) {
76
+ f.auto = {};
77
+ }
78
+ f.auto[f.name === 'dateBegin' ? 'lt' : 'gt'] = {
79
+ against: f.name === 'dateBegin' ? 'dateEnd' : 'dateBegin',
80
+ offset: `${f.name === 'dateBegin' ? '-30' : '30'}.minutes`
81
+ };
82
+ }
83
+ }
84
+ if (f.name === 'comments') {
85
+ if (!f.validations) {
86
+ f.valudations = { required: true };
87
+ }
88
+ else {
89
+ f.validations.required = true;
90
+ }
91
+ if (resourceType === 'Note') {
92
+ f.type = 'richtext';
93
+ }
94
+ }
95
+ if (f.name === 'address.state') {
96
+ f.creatable = false;
97
+ f.updatable = false;
98
+ }
99
+ break;
100
+ }
101
+ case 'GOOGLE': {
102
+ if (f.name === 'contactId') {
103
+ f.label = 'Contact';
104
+ }
105
+ else if (['start', 'end'].indexOf(f.name) !== -1) {
106
+ if (!f.auto) {
107
+ f.auto = {};
108
+ }
109
+ f.auto[f.name === 'start' ? 'lt' : 'gt'] = {
110
+ against: f.name === 'start' ? 'end' : 'start',
111
+ offset: `${f.name === 'start' ? '-30' : '30'}.minutes`
112
+ };
113
+ }
114
+ break;
115
+ }
116
+ case 'OFFICE365': {
117
+ if (resourceType === 'Events') {
118
+ if (['start', 'end'].indexOf(f.name) !== -1) {
119
+ if (!f.validations) {
120
+ f.validations = { step: 1800 };
121
+ }
122
+ else {
123
+ f.validations.step = 1800;
124
+ }
125
+ f.default = f.name === 'start' ? 'now' : '30.minutes';
126
+ }
127
+ }
128
+ if (resourceType === 'Tasks' && f.name === 'checklist') {
129
+ f.creatable = false;
130
+ }
131
+ if (f.name === 'description' && resourceType !== 'Tasks') {
132
+ f.type = 'richtext';
133
+ }
134
+ else if (f.name === 'content') {
135
+ f.type = 'text';
136
+ }
137
+ break;
138
+ }
139
+ case 'SALESFORCE': {
140
+ if (resourceType === 'Task' && f.name === 'WhatId') {
141
+ f.disabled = {
142
+ 'WhoId.type': 'Lead' // eslint-disable-line @typescript-eslint/naming-convention
143
+ };
144
+ }
145
+ if (['Description', 'ParentId'].indexOf(f.name) !== -1) {
146
+ if (!f.visible) {
147
+ f.visible = true;
148
+ }
149
+ }
150
+ if (f.type === 'reference') {
151
+ const references = (f.reference instanceof Array) ? f.reference : [f.reference];
152
+ for (const r of references) {
153
+ if (r && ['Account'].indexOf(r.name) !== -1) { // force creatable
154
+ r.creatable = true;
155
+ r.updatable = true;
156
+ }
157
+ }
158
+ }
159
+ break;
160
+ }
161
+ case 'SUGAR': {
162
+ if (['description', 'parent_id', 'contact_id', 'contacts'].indexOf(f.name) !== -1) {
163
+ if (!f.visible) {
164
+ f.visible = true;
165
+ }
166
+ }
167
+ if (f.type === 'reference') {
168
+ const references = (f.reference instanceof Array) ? f.reference : [f.reference];
169
+ for (const r of references) {
170
+ if (r && ['Accounts', 'Contacts', 'Leads'].indexOf(r.name) !== -1) {
171
+ r.label = r.name.slice(0, -1); // Use singular labels
172
+ r.creatable = true;
173
+ r.updatable = true;
174
+ }
175
+ }
176
+ }
177
+ break;
178
+ }
179
+ case 'ZENDESK': {
180
+ if (resourceType === 'Ticket' && f.name === 'assignee') {
181
+ f.reference.updatable = false;
182
+ }
183
+ break;
184
+ }
185
+ case 'HUBSPOT': {
186
+ if (resourceType === 'LogCall' && f.name === 'body') {
187
+ f.type = 'richtext';
188
+ }
189
+ break;
190
+ }
191
+ case 'NETSUITE': {
192
+ if (f.name === 'company' && !f.search) {
193
+ f.search = {
194
+ params: {
195
+ contactId: 'contact#id'
196
+ },
197
+ url: '../Contact/${contactId}?expand=company',
198
+ extract: 'company'
199
+ };
200
+ }
201
+ }
202
+ }
203
+ if (f.type === 'composite' && f.fields) {
204
+ for (const ff of f.fields) {
205
+ fieldFixesByIntegration(ff);
206
+ }
207
+ }
208
+ };
209
+ // common fixes for all integrations
210
+ if (metaV3.layout.sections.length) {
211
+ for (const s of (metaV3.layout.sections)) {
212
+ if (!s || !s.fields) {
213
+ break;
214
+ }
215
+ for (const f of s.fields) {
216
+ fieldFixesByIntegration(f);
217
+ }
218
+ }
219
+ }
220
+ // Google Gmail children enhancement
221
+ if (integrationCode === 'GOOGLE') {
222
+ if (resourceType === 'Mail') {
223
+ metaV3.layout.editable = false;
224
+ metaV3.layout.children = [{
225
+ label: 'Comments',
226
+ name: 'comments',
227
+ reference: {
228
+ resourceType: 'Comment',
229
+ label: 'Comment',
230
+ editable: false
231
+ }
232
+ }];
233
+ }
234
+ else if (resourceType === 'Task') {
235
+ metaV3.layout.children = [{
236
+ label: 'Subtasks',
237
+ name: 'subTasks',
238
+ reference: {
239
+ resourceType: 'Subtask',
240
+ label: 'Subtask'
241
+ }
242
+ }];
243
+ }
244
+ else if (resourceType === 'Comment') {
245
+ metaV3.layout.editable = false;
246
+ }
247
+ }
248
+ else if (integrationCode === 'ZENDESK') {
249
+ if (resourceType === 'Ticket') {
250
+ metaV3.layout.children = [{
251
+ label: 'Comments',
252
+ name: 'comments',
253
+ reference: {
254
+ resourceType: 'Comment',
255
+ label: 'Comment',
256
+ editable: false
257
+ }
258
+ }];
259
+ }
260
+ else if (resourceType === 'Comment') {
261
+ metaV3.layout.editable = false;
262
+ }
263
+ }
264
+ else if (integrationCode === 'MSDYNAMICS' && !metaV3.fieldsMap) {
265
+ if (resourceType === 'phonecall') {
266
+ metaV3.fieldsMap = {
267
+ contactables: ['from', 'to'],
268
+ subject: 'subject',
269
+ phoneNumber: 'phonenumber',
270
+ };
271
+ }
272
+ else if (resourceType === 'contact') {
273
+ metaV3.fieldsMap = {
274
+ phoneNumber: 'telephone1',
275
+ firstName: 'firstname',
276
+ lastName: 'lastname'
277
+ };
278
+ }
279
+ else if (resourceType === 'account') {
280
+ metaV3.fieldsMap = {
281
+ phoneNumber: 'telephone1',
282
+ displayName: 'name'
283
+ };
284
+ }
285
+ }
286
+ else if (integrationCode === 'OFFICE365') {
287
+ if (resourceType === 'Conversations') {
288
+ metaV3.layout.editable = false;
289
+ metaV3.layout.children = [{
290
+ label: 'Comments',
291
+ name: 'comments',
292
+ reference: {
293
+ resourceType: 'Comment',
294
+ label: 'Comment',
295
+ editable: false
296
+ }
297
+ }];
298
+ }
299
+ else if (resourceType === 'Comment') {
300
+ metaV3.layout.editable = false;
301
+ }
302
+ }
303
+ else if (integrationCode === 'JOBDIVA') {
304
+ if (resourceType === 'CandidateNote' || resourceType === 'ContactNote') {
305
+ metaV3.layout.editable = false;
306
+ }
307
+ }
308
+ return sortObj(metaV3);
309
+ };
310
+ export { ɵ0 };
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YU5vcm1hbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvY29tbW9uL21ldGFOb3JtYWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXRFLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUU7SUFDdEIsSUFBSSxPQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDNUMsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQzFDO0lBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQzs7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxFQUFFO0lBQ2hFLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUMxQixNQUFNLGVBQWUs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RUFBRTtZQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQztvQkFDeEIsS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLElBQUksRUFBRSxVQUFVO29CQUNoQixTQUFTLEVBQUU7d0JBQ1QsWUFBWSxFQUFFLFNBQVM7d0JBQ3ZCLEtBQUssRUFBRSxTQUFTO3dCQUNoQixRQUFRLEVBQUUsS0FBSztxQkFDaEI7aUJBQ0YsQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ2hDO0tBQ0Y7U0FBTSxJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUU7UUFDeEMsSUFBSSxZQUFZLEtBQUssZUFBZSxJQUFJLFlBQVksS0FBSyxhQUFhLEVBQUU7WUFDdEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ2hDO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQEF1dGhvcjogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBEYXRlOiAyMDE5LTA5LTE5IDE3OjM0OjQ5XG4gKiBATGFzdCBNb2RpZmllZCBieTogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMDMgMDk6NDI6MTJcbiAqL1xuXG5pbXBvcnQgeyBmaWVsZE5vcm1hbGl6ZXIgfSBmcm9tICcuL2ZpZWxkTm9ybWFsaXplcic7XG5pbXBvcnQgeyB1bmlxdWVOYW1lRmlsdGVyIH0gZnJvbSAnLi9maWVsZE5vcm1hbGl6ZXIvdW5pcXVlTmFtZUZpbHRlcic7XG5cbmNvbnN0IHNvcnRPYmogPSAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Yob2JqKSAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcCgoZSkgPT4gc29ydE9iaihlKSkuc29ydCgpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuc29ydCgpLnJlZHVjZSgoc29ydGVkLCBrKSA9PiB7XG4gICAgc29ydGVkW2tdID0gc29ydE9iaihvYmpba10pO1xuICAgIHJldHVybiBzb3J0ZWQ7XG4gIH0sIHt9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBtZXRhTm9ybWFsaXplciA9IChtZXRhLCBpbnRlZ3JhdGlvbiwgcmVzb3VyY2VUeXBlKSA9PiB7XG4gIGNvbnN0IHVuaXFGaWVsZE5hbWVzID0gW107XG4gIGNvbnN0IGludGVncmF0aW9uQ29kZSA9IChpbnRlZ3JhdGlvbiB8fCAnJykudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgbWV0YVYzOiBhbnkgPSB7XG4gICAgaW50ZWdyYXRpb24sXG4gICAgcmVzb3VyY2VUeXBlLFxuICAgIGF2YWlsYWJsZUxheW91dHM6IG1ldGEuYXZhaWxhYmxlTGF5b3V0cyxcbiAgICBsYXlvdXQ6IHtcbiAgICAgIGlkOiBtZXRhLmxheW91dC5pZCxcbiAgICAgIG5hbWU6IG1ldGEubGF5b3V0Lm5hbWUsXG4gICAgICBsYWJlbDogbWV0YS5sYXlvdXQubGFiZWwsXG4gICAgICB2ZXJzaW9uOiAnMy4wLjAnLFxuICAgICAgc2VjdGlvbnM6IChtZXRhLmxheW91dC5zZWN0aW9ucyB8fCBbXSkubWFwKChzKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb246IGFueSA9IHtcbiAgICAgICAgICBsYWJlbDogcy5sYWJlbCxcbiAgICAgICAgICBmaWVsZHM6IHVuaXF1ZU5hbWVGaWx0ZXIocy5maWVsZHMgfHwgW10sIHVuaXFGaWVsZE5hbWVzKS5tYXAoKHYpID0+IGZpZWxkTm9ybWFsaXplcih2LCB1bmlxRmllbGROYW1lcykpIC8vIFZJU1QtNDI0XG4gICAgICAgIH07XG4gICAgICAgIGlmIChzLnZpc2libGUgfHwgcy5hbHdheXNWaXNpYmxlKSB7XG4gICAgICAgICAgc2VjdGlvbi52aXNpYmxlID0gcy52aXNpYmxlIHx8IHMuYWx3YXlzVmlzaWJsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VjdGlvbjtcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuICBpZiAobWV0YS5sYXlvdXQub3JpZ0xheW91dElkKSB7XG4gICAgbWV0YVYzLmxheW91dC5vcmlnTGF5b3V0SWQgPSBtZXRhLmxheW91dC5vcmlnTGF5b3V0SWQ7XG4gIH1cbiAgaWYgKG1ldGEuZHJhZnRzKSB7XG4gICAgbWV0YVYzLmRyYWZ0cyA9IG1ldGEuZHJhZnRzO1xuICB9XG5cbiAgY29uc3QgZmllbGRGaXhlc0J5SW50ZWdyYXRpb24gPSAoZikgPT4ge1xuICAgIGlmIChmLnR5cGUgPT09ICdib29sZWFuJyAmJiAoKHR5cGVvZihmLmRlZmF1bHQpICE9PSAnYm9vbGVhbicpICYmIGYuZGVmYXVsdCAmJiAhZi5kZWZhdWx0LnZhbHVlKSApIHtcbiAgICAgIGRlbGV0ZSBmLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmIChmLnR5cGUgPT09ICdyZWZlcmVuY2UnKSB7XG4gICAgICBjb25zdCByZWZlcmVuY2VzID0gKGYucmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpID8gZi5yZWZlcmVuY2UgOiBbZi5yZWZlcmVuY2VdO1xuICAgICAgZm9yIChjb25zdCByIG9mIHJlZmVyZW5jZXMpIHtcbiAgICAgICAgaWYgKHIuY3JlYXRhYmxlID09PSBmYWxzZSAmJiB0eXBlb2Yoci51cGRhdGFibGUpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHIudXBkYXRhYmxlID0gZmFsc2U7IC8vIFVzZXIgbWlzc2luZyB1cGRhdGFibGUsIG1heSBiZSBvdGhlciB0b29cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKGludGVncmF0aW9uQ29kZSkge1xuICAgICAgY2FzZSAnQlVMTEhPUk4nOiB7XG4gICAgICAgIGlmIChyZXNvdXJjZVR5cGUgPT09ICdBcHBvaW50bWVudCcpIHtcbiAgICAgICAgICBpZiAoWydkYXRlQmVnaW4nLCAnZGF0ZUVuZCddLmluZGV4T2YoZi5uYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmICghZi52YWxpZGF0aW9ucykge1xuICAgICAgICAgICAgICBmLnZhbGlkYXRpb25zID0geyBzdGVwOiAxODAwIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmLnZhbGlkYXRpb25zLnN0ZXAgPSAxODAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZi5kZWZhdWx0ID0gZi5uYW1lID09PSAnZGF0ZUJlZ2luJyA/ICdub3cnIDogJzMwLm1pbnV0ZXMnO1xuICAgICAgICAgICAgaWYgKCFmLmF1dG8pIHtcbiAgICAgICAgICAgICAgZi5hdXRvID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmLmF1dG9bZi5uYW1lID09PSAnZGF0ZUJlZ2luJyA/ICdsdCcgOiAnZ3QnXSA9IHtcbiAgICAgICAgICAgICAgYWdhaW5zdDogZi5uYW1lID09PSAnZGF0ZUJlZ2luJyA/ICdkYXRlRW5kJyA6ICdkYXRlQmVnaW4nLFxuICAgICAgICAgICAgICBvZmZzZXQ6IGAke2YubmFtZSA9PT0gJ2RhdGVCZWdpbicgPyAnLTMwJyA6ICczMCd9Lm1pbnV0ZXNgXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZi5uYW1lID09PSAnY29tbWVudHMnKSB7XG4gICAgICAgICAgaWYgKCFmLnZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICBmLnZhbHVkYXRpb25zID0geyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmLnZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc291cmNlVHlwZSA9PT0gJ05vdGUnKSB7XG4gICAgICAgICAgICBmLnR5cGUgPSAncmljaHRleHQnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZi5uYW1lID09PSAnYWRkcmVzcy5zdGF0ZScpIHtcbiAgICAgICAgICBmLmNyZWF0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgIGYudXBkYXRhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdHT09HTEUnOiB7XG4gICAgICAgIGlmIChmLm5hbWUgPT09ICdjb250YWN0SWQnKSB7XG4gICAgICAgICAgZi5sYWJlbCA9ICdDb250YWN0JztcbiAgICAgICAgfSBlbHNlIGlmIChbJ3N0YXJ0JywgJ2VuZCddLmluZGV4T2YoZi5uYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAoIWYuYXV0bykge1xuICAgICAgICAgICAgZi5hdXRvID0ge307XG4gICAgICAgICAgfVxuICAgICAgICAgIGYuYXV0b1tmLm5hbWUgPT09ICdzdGFydCcgPyAnbHQnIDogJ2d0J10gPSB7XG4gICAgICAgICAgICBhZ2FpbnN0OiBmLm5hbWUgPT09ICdzdGFydCcgPyAnZW5kJyA6ICdzdGFydCcsXG4gICAgICAgICAgICBvZmZzZXQ6IGAke2YubmFtZSA9PT0gJ3N0YXJ0JyA/ICctMzAnIDogJzMwJ30ubWludXRlc2BcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnT0ZGSUNFMzY1Jzoge1xuICAgICAgICBpZiAocmVzb3VyY2VUeXBlID09PSAnRXZlbnRzJykge1xuICAgICAgICAgIGlmIChbJ3N0YXJ0JywgJ2VuZCddLmluZGV4T2YoZi5uYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmICghZi52YWxpZGF0aW9ucykge1xuICAgICAgICAgICAgICBmLnZhbGlkYXRpb25zID0geyBzdGVwOiAxODAwIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmLnZhbGlkYXRpb25zLnN0ZXAgPSAxODAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZi5kZWZhdWx0ID0gZi5uYW1lID09PSAnc3RhcnQnID8gJ25vdycgOiAnMzAubWludXRlcyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNvdXJjZVR5cGUgPT09ICdUYXNrcycgJiYgZi5uYW1lID09PSAnY2hlY2tsaXN0Jykge1xuICAgICAgICAgIGYuY3JlYXRhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYubmFtZSA9PT0gJ2Rlc2NyaXB0aW9uJyAmJiByZXNvdXJjZVR5cGUgIT09ICdUYXNrcycpIHtcbiAgICAgICAgICBmLnR5cGUgPSAncmljaHRleHQnO1xuICAgICAgICB9IGVsc2UgaWYgKGYubmFtZSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICAgICAgZi50eXBlID0gJ3RleHQnO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnU0FMRVNGT1JDRSc6IHtcbiAgICAgICAgaWYgKHJlc291cmNlVHlwZSA9PT0gJ1Rhc2snICYmIGYubmFtZSA9PT0gJ1doYXRJZCcpIHtcbiAgICAgICAgICBmLmRpc2FibGVkID0ge1xuICAgICAgICAgICAgJ1dob0lkLnR5cGUnOiAnTGVhZCcgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChbJ0Rlc2NyaXB0aW9uJywgJ1BhcmVudElkJ10uaW5kZXhPZihmLm5hbWUpICE9PSAtMSkge1xuICAgICAgICAgIGlmICghZi52aXNpYmxlKSB7XG4gICAgICAgICAgICBmLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZi50eXBlID09PSAncmVmZXJlbmNlJykge1xuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZXMgPSAoZi5yZWZlcmVuY2UgaW5zdGFuY2VvZiBBcnJheSkgPyBmLnJlZmVyZW5jZSA6IFtmLnJlZmVyZW5jZV07XG4gICAgICAgICAgZm9yIChjb25zdCByIG9mIHJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIGlmIChyICYmIFsnQWNjb3VudCddLmluZGV4T2Yoci5uYW1lKSAhPT0gLTEpIHsgLy8gZm9yY2UgY3JlYXRhYmxlXG4gICAgICAgICAgICAgIHIuY3JlYXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgci51cGRhdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1NVR0FSJzoge1xuICAgICAgICBpZiAoWydkZXNjcmlwdGlvbicsICdwYXJlbnRfaWQnLCAnY29udGFjdF9pZCcsICdjb250YWN0cyddLmluZGV4T2YoZi5uYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAoIWYudmlzaWJsZSkge1xuICAgICAgICAgICAgZi52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYudHlwZSA9PT0gJ3JlZmVyZW5jZScpIHtcbiAgICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gKGYucmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpID8gZi5yZWZlcmVuY2UgOiBbZi5yZWZlcmVuY2VdO1xuICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICBpZiAociAmJiBbJ0FjY291bnRzJywgJ0NvbnRhY3RzJywgJ0xlYWRzJ10uaW5kZXhPZihyLm5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICByLmxhYmVsID0gci5uYW1lLnNsaWNlKDAsIC0xKTsgLy8gVXNlIHNpbmd1bGFyIGxhYmVsc1xuICAgICAgICAgICAgICByLmNyZWF0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgIHIudXBkYXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdaRU5ERVNLJzoge1xuICAgICAgICBpZiAocmVzb3VyY2VUeXBlID09PSAnVGlja2V0JyAmJiBmLm5hbWUgPT09ICdhc3NpZ25lZScpIHtcbiAgICAgICAgICBmLnJlZmVyZW5jZS51cGRhdGFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0hVQlNQT1QnOiB7XG4gICAgICAgIGlmIChyZXNvdXJjZVR5cGUgPT09ICdMb2dDYWxsJyAmJiBmLm5hbWUgPT09ICdib2R5Jykge1xuICAgICAgICAgIGYudHlwZSA9ICdyaWNodGV4dCc7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdORVRTVUlURSc6IHtcbiAgICAgICAgaWYgKGYubmFtZSA9PT0gJ2NvbXBhbnknICYmICFmLnNlYXJjaCkge1xuICAgICAgICAgIGYuc2VhcmNoID0ge1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIGNvbnRhY3RJZDogJ2NvbnRhY3QjaWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXJsOiAnLi4vQ29udGFjdC8ke2NvbnRhY3RJZH0/ZXhwYW5kPWNvbXBhbnknLFxuICAgICAgICAgICAgZXh0cmFjdDogJ2NvbXBhbnknXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZi50eXBlID09PSAnY29tcG9zaXRlJyAmJiBmLmZpZWxkcykge1xuICAgICAgZm9yIChjb25zdCBmZiBvZiBmLmZpZWxkcykge1xuICAgICAgICBmaWVsZEZpeGVzQnlJbnRlZ3JhdGlvbihmZik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIGNvbW1vbiBmaXhlcyBmb3IgYWxsIGludGVncmF0aW9uc1xuICBpZiAobWV0YVYzLmxheW91dC5zZWN0aW9ucy5sZW5ndGgpIHtcbiAgICBmb3IgKGNvbnN0IHMgb2YgKG1ldGFWMy5sYXlvdXQuc2VjdGlvbnMpKSB7XG4gICAgICBpZiAoIXMgfHwgIXMuZmllbGRzKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBmIG9mIHMuZmllbGRzKSB7XG4gICAgICAgIGZpZWxkRml4ZXNCeUludGVncmF0aW9uKGYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEdvb2dsZSBHbWFpbCBjaGlsZHJlbiBlbmhhbmNlbWVudFxuICBpZiAoaW50ZWdyYXRpb25Db2RlID09PSAnR09PR0xFJykge1xuICAgIGlmIChyZXNvdXJjZVR5cGUgPT09ICdNYWlsJykge1xuICAgICAgbWV0YVYzLmxheW91dC5lZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgbWV0YVYzLmxheW91dC5jaGlsZHJlbiA9IFt7IC8vIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB2MyBhcGlcbiAgICAgICAgbGFiZWw6ICdDb21tZW50cycsXG4gICAgICAgIG5hbWU6ICdjb21tZW50cycsXG4gICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgIHJlc291cmNlVHlwZTogJ0NvbW1lbnQnLFxuICAgICAgICAgIGxhYmVsOiAnQ29tbWVudCcsXG4gICAgICAgICAgZWRpdGFibGU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgIH0gZWxzZSBpZiAocmVzb3VyY2VUeXBlID09PSAnVGFzaycpIHtcbiAgICAgIG1ldGFWMy5sYXlvdXQuY2hpbGRyZW4gPSBbe1xuICAgICAgICBsYWJlbDogJ1N1YnRhc2tzJyxcbiAgICAgICAgbmFtZTogJ3N1YlRhc2tzJyxcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiAnU3VidGFzaycsXG4gICAgICAgICAgbGFiZWw6ICdTdWJ0YXNrJ1xuICAgICAgICB9XG4gICAgICB9XTtcbiAgICB9IGVsc2UgaWYgKHJlc291cmNlVHlwZSA9PT0gJ0NvbW1lbnQnKSB7XG4gICAgICBtZXRhVjMubGF5b3V0LmVkaXRhYmxlID0gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKGludGVncmF0aW9uQ29kZSA9PT0gJ1pFTkRFU0snKSB7XG4gICAgaWYgKHJlc291cmNlVHlwZSA9PT0gJ1RpY2tldCcpIHtcbiAgICAgIG1ldGFWMy5sYXlvdXQuY2hpbGRyZW4gPSBbeyAvLyBaZW5kZXNrIFRpY2tldCBjaGlsZHJlbiBlbmhhbmNlbWVudFxuICAgICAgICBsYWJlbDogJ0NvbW1lbnRzJyxcbiAgICAgICAgbmFtZTogJ2NvbW1lbnRzJyxcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiAnQ29tbWVudCcsXG4gICAgICAgICAgbGFiZWw6ICdDb21tZW50JyxcbiAgICAgICAgICBlZGl0YWJsZTogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfV07XG4gICAgfSBlbHNlIGlmIChyZXNvdXJjZVR5cGUgPT09ICdDb21tZW50Jykge1xuICAgICAgbWV0YVYzLmxheW91dC5lZGl0YWJsZSA9IGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpbnRlZ3JhdGlvbkNvZGUgPT09ICdNU0RZTkFNSUNTJyAmJiAhbWV0YVYzLmZpZWxkc01hcCkge1xuICAgIGlmIChyZXNvdXJjZVR5cGUgPT09ICdwaG9uZWNhbGwnKSB7XG4gICAgICBtZXRhVjMuZmllbGRzTWFwID0ge1xuICAgICAgICBjb250YWN0YWJsZXM6IFsnZnJvbScsICd0byddLFxuICAgICAgICBzdWJqZWN0OiAnc3ViamVjdCcsXG4gICAgICAgIHBob25lTnVtYmVyOiAncGhvbmVudW1iZXInLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHJlc291cmNlVHlwZSA9PT0gJ2NvbnRhY3QnKSB7XG4gICAgICBtZXRhVjMuZmllbGRzTWFwID0ge1xuICAgICAgICBwaG9uZU51bWJlcjogJ3RlbGVwaG9uZTEnLFxuICAgICAgICBmaXJzdE5hbWU6ICdmaXJzdG5hbWUnLFxuICAgICAgICBsYXN0TmFtZTogJ2xhc3RuYW1lJ1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHJlc291cmNlVHlwZSA9PT0gJ2FjY291bnQnKSB7XG4gICAgICBtZXRhVjMuZmllbGRzTWFwID0ge1xuICAgICAgICBwaG9uZU51bWJlcjogJ3RlbGVwaG9uZTEnLFxuICAgICAgICBkaXNwbGF5TmFtZTogJ25hbWUnXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpbnRlZ3JhdGlvbkNvZGUgPT09ICdPRkZJQ0UzNjUnKSB7XG4gICAgaWYgKHJlc291cmNlVHlwZSA9PT0gJ0NvbnZlcnNhdGlvbnMnKSB7XG4gICAgICBtZXRhVjMubGF5b3V0LmVkaXRhYmxlID0gZmFsc2U7XG4gICAgICBtZXRhVjMubGF5b3V0LmNoaWxkcmVuID0gW3sgLy8gY2hpbGRyZW4gZW5oYW5jZW1lbnRcbiAgICAgICAgbGFiZWw6ICdDb21tZW50cycsXG4gICAgICAgIG5hbWU6ICdjb21tZW50cycsXG4gICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgIHJlc291cmNlVHlwZTogJ0NvbW1lbnQnLFxuICAgICAgICAgIGxhYmVsOiAnQ29tbWVudCcsXG4gICAgICAgICAgZWRpdGFibGU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgIH0gZWxzZSBpZiAocmVzb3VyY2VUeXBlID09PSAnQ29tbWVudCcpIHtcbiAgICAgIG1ldGFWMy5sYXlvdXQuZWRpdGFibGUgPSBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaW50ZWdyYXRpb25Db2RlID09PSAnSk9CRElWQScpIHtcbiAgICBpZiAocmVzb3VyY2VUeXBlID09PSAnQ2FuZGlkYXRlTm90ZScgfHwgcmVzb3VyY2VUeXBlID09PSAnQ29udGFjdE5vdGUnKSB7XG4gICAgICBtZXRhVjMubGF5b3V0LmVkaXRhYmxlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvcnRPYmoobWV0YVYzKTtcbn07XG4iXX0=
@@ -0,0 +1,18 @@
1
+ /*
2
+ * @Author: Alexander.Vangelov@vonage.com
3
+ * @Date: 2020-04-14 12:15:36
4
+ * @Last Modified by: Alexander.Vangelov@vonage.com
5
+ * @Last Modified time: 2020-04-14 12:21:57
6
+ */
7
+ import { Pipe } from '@angular/core';
8
+ export class MetaStripHtmlPipe {
9
+ transform(value) {
10
+ return value.replace(/<[^>]*>/g, '');
11
+ }
12
+ }
13
+ MetaStripHtmlPipe.decorators = [
14
+ { type: Pipe, args: [{
15
+ name: 'metaStripHtml'
16
+ },] }
17
+ ];
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YVN0cmlwSHRtbC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL2NvbW1vbi9tZXRhU3RyaXBIdG1sLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0VBS0U7QUFFRixPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUtwRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7O1lBTkYsSUFBSSxTQUFDO2dCQUNKLElBQUksRUFBRSxlQUFlO2FBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiogQEF1dGhvcjogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiogQERhdGU6IDIwMjAtMDQtMTQgMTI6MTU6MzZcbiAqIEBMYXN0IE1vZGlmaWVkIGJ5OiBBbGV4YW5kZXIuVmFuZ2Vsb3ZAdm9uYWdlLmNvbVxuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAyMC0wNC0xNCAxMjoyMTo1N1xuKi9cblxuaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdtZXRhU3RyaXBIdG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBNZXRhU3RyaXBIdG1sUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLzxbXj5dKj4vZywgJycpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,77 @@
1
+ export const metaLight = {
2
+ name: 'light',
3
+ properties: {
4
+ '--vgip-meta-resource-bg-color': '#f3f3f5',
5
+ '--vgip-meta-resource-color': '#131415',
6
+ '--vgip-meta-resource-bar-color': '#ffffff',
7
+ '--vgip-meta-separator-color': '#e1e2e6',
8
+ '--vgip-meta-scrollbar-color': '#131415',
9
+ '--vgip-meta-overlay-background': 'rgba(19, 20, 21, 0.5)',
10
+ '--vgip-meta-link-color': '#871fff',
11
+ '--vgip-meta-link-hover-color': '#441080',
12
+ '--vgip-meta-input-color': '#131415',
13
+ '--vgip-meta-input-bg-color': '#ffffff',
14
+ '--vgip-meta-input-label-color': '#616266',
15
+ '--vgip-meta-input-border-color': '#c2c4cc',
16
+ '--vgip-meta-input-active-border-color': '#2c2d30',
17
+ '--vgip-meta-input-action-hover-bg-color': '#e1e2e6',
18
+ '--vgip-meta-input-accent-bg-color': '#e1e2e6',
19
+ '--vgip-meta-input-accent-color': '#131415',
20
+ '--vgip-meta-input-placeholder-color': '#c2c4cc',
21
+ '--vgip-meta-input-disabled-bg-color': '#f3f3f5',
22
+ '--vgip-meta-input-disabled-border-color': '#e1e2e6',
23
+ '--vgip-meta-input-hint-color': '#616266',
24
+ // eslint-disable-next-line max-len
25
+ '--vgip-meta-dropdown-icon': 'url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAyMCAyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjAgMjA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIHN0eWxlPSJmaWxsOiMxMzE0MTU7IiBkPSJNNyw3LjhDNi43LDcuNSw2LjIsNy42LDUuOSw3LjlTNS43LDguNyw2LDlsNCwzLjRsNC0zLjRjMC4zLTAuMywwLjMtMC44LDAtMS4xDQoJYy0wLjMtMC4zLTAuNy0wLjMtMS0wLjFsLTMsMi42TDcsNy44TDcsNy44eiIvPg0KPC9zdmc+)',
26
+ '--vgip-meta-suggestions-bg-color': '#f3e9ff',
27
+ // eslint-disable-next-line max-len
28
+ '--vgip-meta-dropdown-check-icon': 'url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMTMxNDE1IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0yLjkwNCAxMi4xMUwxLjUgMTMuNTIgNy45NTggMjAgMjIuNSA1LjQwOSAyMS4wOTYgNCA3Ljk1OCAxNy4xODJ6Ii8+PC9zdmc+)',
29
+ '--vgip-meta-dropdown-bg-color': '#ffffff',
30
+ '--vgip-meta-dropdown-shadow': 'inset 0 0 0 1px #e1e2e6, 0 2px 5px rgba(19, 20, 21, 0.15)',
31
+ '--vgip-meta-submit-hover-bg-color': '#43474b',
32
+ '--vgip-meta-button-border-color': '#131415',
33
+ // eslint-disable-next-line max-len
34
+ '--vgip-meta-date-icon': 'url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgdmlld0JveD0iMCAwIDE2IDE2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNiAxNjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8cGF0aCBmaWxsPSIjMTMxNDE1IiBkPSJNMTQuNSwySDEyVjAuNUMxMiwwLjIsMTEuOCwwLDExLjUsMFMxMSwwLjIsMTEsMC41VjJINVYwLjVDNSwwLjIsNC44LDAsNC41LDBTNCwwLjIsNCwwLjVWMkgxLjUKCUMwLjcsMiwwLDIuNywwLDMuNXYydjlDMCwxNS4zLDAuNywxNiwxLjUsMTZoMTNjMC44LDAsMS41LTAuNywxLjUtMS41di05di0yQzE2LDIuNywxNS4zLDIsMTQuNSwyeiBNMTUsMTQuNWMwLDAuMy0wLjIsMC41LTAuNSwwLjUKCWgtMTNDMS4yLDE1LDEsMTQuOCwxLDE0LjVWNmgxNFYxNC41eiBNMTUsNUgxVjMuNUMxLDMuMiwxLjIsMywxLjUsM2gzaDdoM0MxNC44LDMsMTUsMy4yLDE1LDMuNVY1eiIvPgo8L3N2Zz4K)',
35
+ // eslint-disable-next-line max-len
36
+ '--vgip-meta-time-icon': 'url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbD0iIzEzMTQxNSIgZD0iTTEuNiAxMkMxLjYgNi4yNTYyNCA2LjI1NjI0IDEuNiAxMiAxLjZDMTcuNzQzOCAxLjYgMjIuNCA2LjI1NjI0IDIyLjQgMTJDMjIuNCAxNy43NDM4IDE3Ljc0MzggMjIuNCAxMiAyMi40QzYuMjU2MjQgMjIuNCAxLjYgMTcuNzQzOCAxLjYgMTJaTTEyIDBDNS4zNzI1OCAwIDAgNS4zNzI1OCAwIDEyQzAgMTguNjI3NCA1LjM3MjU4IDI0IDEyIDI0QzE4LjYyNzQgMjQgMjQgMTguNjI3NCAyNCAxMkMyNCA1LjM3MjU4IDE4LjYyNzQgMCAxMiAwWk0xMi44IDUuNkMxMi44IDUuMTU4MTggMTIuNDQxOCA0LjggMTIgNC44QzExLjU1ODIgNC44IDExLjIgNS4xNTgxOCAxMS4yIDUuNlYxMkMxMS4yIDEyLjQ0MTggMTEuNTU4MiAxMi44IDEyIDEyLjhIMTguNEMxOC44NDE4IDEyLjggMTkuMiAxMi40NDE4IDE5LjIgMTJDMTkuMiAxMS41NTgyIDE4Ljg0MTggMTEuMiAxOC40IDExLjJIMTIuOFY1LjZaIi8+Cjwvc3ZnPgo=)'
37
+ }
38
+ };
39
+ export const metaDark = {
40
+ name: 'dark',
41
+ properties: {
42
+ '--vgip-meta-resource-bg-color': '#131415',
43
+ '--vgip-meta-resource-color': '#ffffff',
44
+ '--vgip-meta-resource-bar-color': '#242426',
45
+ '--vgip-meta-separator-color': '#616266',
46
+ '--vgip-meta-scrollbar-color': '#636366',
47
+ '--vgip-meta-overlay-background': 'rgba(200,201,204,.32)',
48
+ '--vgip-meta-link-color': '#B779FF',
49
+ '--vgip-meta-link-hover-color': '#c798ff',
50
+ '--vgip-meta-input-color': '#ffffff',
51
+ '--vgip-meta-input-bg-color': '#242426',
52
+ '--vgip-meta-input-label-color': '#959596',
53
+ '--vgip-meta-input-border-color': '#616266',
54
+ '--vgip-meta-input-active-border-color': '#c2c4cc',
55
+ '--vgip-meta-input-action-hover-bg-color': '#313133',
56
+ '--vgip-meta-input-accent-bg-color': '#313133',
57
+ '--vgip-meta-input-accent-color': '#ffffff',
58
+ '--vgip-meta-input-placeholder-color': '#48484A',
59
+ '--vgip-meta-input-disabled-bg-color': '#131415',
60
+ '--vgip-meta-input-disabled-border-color': '#313133',
61
+ '--vgip-meta-input-hint-color': '#898a90',
62
+ // eslint-disable-next-line max-len
63
+ '--vgip-meta-dropdown-icon': 'url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAyMCAyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjAgMjA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiBkPSJNNyw3LjhDNi43LDcuNSw2LjIsNy42LDUuOSw3LjlTNS43LDguNyw2LDlsNCwzLjRsNC0zLjRjMC4zLTAuMywwLjMtMC44LDAtMS4xDQoJYy0wLjMtMC4zLTAuNy0wLjMtMS0wLjFsLTMsMi42TDcsNy44TDcsNy44eiIvPg0KPC9zdmc+)',
64
+ '--vgip-meta-suggestions-bg-color': '#871fff',
65
+ // eslint-disable-next-line max-len
66
+ '--vgip-meta-dropdown-check-icon': 'url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmZmZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0yLjkwNCAxMi4xMUwxLjUgMTMuNTIgNy45NTggMjAgMjIuNSA1LjQwOSAyMS4wOTYgNCA3Ljk1OCAxNy4xODJ6Ii8+PC9zdmc+)',
67
+ '--vgip-meta-dropdown-bg-color': '#48484A',
68
+ '--vgip-meta-dropdown-shadow': 'none',
69
+ '--vgip-meta-submit-hover-bg-color': '#131415',
70
+ '--vgip-meta-button-border-color': '#616266',
71
+ // eslint-disable-next-line max-len
72
+ '--vgip-meta-date-icon': 'url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgdmlld0JveD0iMCAwIDE2IDE2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNiAxNjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJNMTQuNSwySDEyVjAuNUMxMiwwLjIsMTEuOCwwLDExLjUsMFMxMSwwLjIsMTEsMC41VjJINVYwLjVDNSwwLjIsNC44LDAsNC41LDBTNCwwLjIsNCwwLjVWMkgxLjUKCUMwLjcsMiwwLDIuNywwLDMuNXYydjlDMCwxNS4zLDAuNywxNiwxLjUsMTZoMTNjMC44LDAsMS41LTAuNywxLjUtMS41di05di0yQzE2LDIuNywxNS4zLDIsMTQuNSwyeiBNMTUsMTQuNWMwLDAuMy0wLjIsMC41LTAuNSwwLjUKCWgtMTNDMS4yLDE1LDEsMTQuOCwxLDE0LjVWNmgxNFYxNC41eiBNMTUsNUgxVjMuNUMxLDMuMiwxLjIsMywxLjUsM2gzaDdoM0MxNC44LDMsMTUsMy4yLDE1LDMuNVY1eiIvPgo8L3N2Zz4K)',
73
+ // eslint-disable-next-line max-len
74
+ '--vgip-meta-time-icon': 'url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0iTTEuNiAxMkMxLjYgNi4yNTYyNCA2LjI1NjI0IDEuNiAxMiAxLjZDMTcuNzQzOCAxLjYgMjIuNCA2LjI1NjI0IDIyLjQgMTJDMjIuNCAxNy43NDM4IDE3Ljc0MzggMjIuNCAxMiAyMi40QzYuMjU2MjQgMjIuNCAxLjYgMTcuNzQzOCAxLjYgMTJaTTEyIDBDNS4zNzI1OCAwIDAgNS4zNzI1OCAwIDEyQzAgMTguNjI3NCA1LjM3MjU4IDI0IDEyIDI0QzE4LjYyNzQgMjQgMjQgMTguNjI3NCAyNCAxMkMyNCA1LjM3MjU4IDE4LjYyNzQgMCAxMiAwWk0xMi44IDUuNkMxMi44IDUuMTU4MTggMTIuNDQxOCA0LjggMTIgNC44QzExLjU1ODIgNC44IDExLjIgNS4xNTgxOCAxMS4yIDUuNlYxMkMxMS4yIDEyLjQ0MTggMTEuNTU4MiAxMi44IDEyIDEyLjhIMTguNEMxOC44NDE4IDEyLjggMTkuMiAxMi40NDE4IDE5LjIgMTJDMTkuMiAxMS41NTgyIDE4Ljg0MTggMTEuMiAxOC40IDExLjJIMTIuOFY1LjZaIi8+Cjwvc3ZnPgo=)'
75
+ }
76
+ };
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JUaGVtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvY29tbW9uL3V0aWxzL2NvbG9yVGhlbWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBYztJQUNsQyxJQUFJLEVBQUUsT0FBTztJQUNiLFVBQVUsRUFBRTtRQUNWLCtCQUErQixFQUFFLFNBQVM7UUFDMUMsNEJBQTRCLEVBQUUsU0FBUztRQUN2QyxnQ0FBZ0MsRUFBRSxTQUFTO1FBQzNDLDZCQUE2QixFQUFFLFNBQVM7UUFDeEMsNkJBQTZCLEVBQUUsU0FBUztRQUN4QyxnQ0FBZ0MsRUFBRSx1QkFBdUI7UUFFekQsd0JBQXdCLEVBQUUsU0FBUztRQUNuQyw4QkFBOEIsRUFBRSxTQUFTO1FBRXpDLHlCQUF5QixFQUFFLFNBQVM7UUFDcEMsNEJBQTRCLEVBQUUsU0FBUztRQUN2QywrQkFBK0IsRUFBRSxTQUFTO1FBQzFDLGdDQUFnQyxFQUFFLFNBQVM7UUFDM0MsdUNBQXVDLEVBQUUsU0FBUztRQUNsRCx5Q0FBeUMsRUFBRSxTQUFTO1FBQ3BELG1DQUFtQyxFQUFFLFNBQVM7UUFDOUMsZ0NBQWdDLEVBQUUsU0FBUztRQUMzQyxxQ0FBcUMsRUFBRSxTQUFTO1FBQ2hELHFDQUFxQyxFQUFFLFNBQVM7UUFDaEQseUNBQXlDLEVBQUUsU0FBUztRQUNwRCw4QkFBOEIsRUFBRSxTQUFTO1FBQ3pDLG1DQUFtQztRQUNuQywyQkFBMkIsRUFBRSw2a0JBQTZrQjtRQUMxbUIsa0NBQWtDLEVBQUUsU0FBUztRQUM3QyxtQ0FBbUM7UUFDbkMsaUNBQWlDLEVBQUUsNlNBQTZTO1FBQ2hWLCtCQUErQixFQUFFLFNBQVM7UUFDMUMsNkJBQTZCLEVBQUUsMkRBQTJEO1FBQzFGLG1DQUFtQyxFQUFFLFNBQVM7UUFDOUMsaUNBQWlDLEVBQUUsU0FBUztRQUM1QyxtQ0FBbUM7UUFDbkMsdUJBQXVCLEVBQUUscStCQUFxK0I7UUFDOS9CLG1DQUFtQztRQUNuQyx1QkFBdUIsRUFBRSxxeEJBQXF4QjtLQUMveUI7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFjO0lBQ2pDLElBQUksRUFBRSxNQUFNO0lBQ1osVUFBVSxFQUFFO1FBQ1YsK0JBQStCLEVBQUUsU0FBUztRQUMxQyw0QkFBNEIsRUFBRSxTQUFTO1FBQ3ZDLGdDQUFnQyxFQUFFLFNBQVM7UUFDM0MsNkJBQTZCLEVBQUUsU0FBUztRQUN4Qyw2QkFBNkIsRUFBRSxTQUFTO1FBQ3hDLGdDQUFnQyxFQUFFLHVCQUF1QjtRQUV6RCx3QkFBd0IsRUFBRSxTQUFTO1FBQ25DLDhCQUE4QixFQUFFLFNBQVM7UUFFekMseUJBQXlCLEVBQUUsU0FBUztRQUNwQyw0QkFBNEIsRUFBRSxTQUFTO1FBQ3ZDLCtCQUErQixFQUFFLFNBQVM7UUFDMUMsZ0NBQWdDLEVBQUUsU0FBUztRQUMzQyx1Q0FBdUMsRUFBRSxTQUFTO1FBQ2xELHlDQUF5QyxFQUFFLFNBQVM7UUFDcEQsbUNBQW1DLEVBQUUsU0FBUztRQUM5QyxnQ0FBZ0MsRUFBRSxTQUFTO1FBQzNDLHFDQUFxQyxFQUFFLFNBQVM7UUFDaEQscUNBQXFDLEVBQUUsU0FBUztRQUNoRCx5Q0FBeUMsRUFBRSxTQUFTO1FBQ3BELDhCQUE4QixFQUFFLFNBQVM7UUFDekMsbUNBQW1DO1FBQ25DLDJCQUEyQixFQUFFLDZrQkFBNmtCO1FBQzFtQixrQ0FBa0MsRUFBRSxTQUFTO1FBQzdDLG1DQUFtQztRQUNuQyxpQ0FBaUMsRUFBRSw2U0FBNlM7UUFDaFYsK0JBQStCLEVBQUUsU0FBUztRQUMxQyw2QkFBNkIsRUFBRSxNQUFNO1FBQ3JDLG1DQUFtQyxFQUFFLFNBQVM7UUFDOUMsaUNBQWlDLEVBQUUsU0FBUztRQUM1QyxtQ0FBbUM7UUFDbkMsdUJBQXVCLEVBQUUscStCQUFxK0I7UUFDOS9CLG1DQUFtQztRQUNuQyx1QkFBdUIsRUFBRSxxeEJBQXF4QjtLQUMveUI7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBNZXRhVGhlbWUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBjb25zdCBtZXRhTGlnaHQ6IE1ldGFUaGVtZSA9IHtcbiAgbmFtZTogJ2xpZ2h0JyxcbiAgcHJvcGVydGllczoge1xuICAgICctLXZnaXAtbWV0YS1yZXNvdXJjZS1iZy1jb2xvcic6ICcjZjNmM2Y1JyxcbiAgICAnLS12Z2lwLW1ldGEtcmVzb3VyY2UtY29sb3InOiAnIzEzMTQxNScsXG4gICAgJy0tdmdpcC1tZXRhLXJlc291cmNlLWJhci1jb2xvcic6ICcjZmZmZmZmJyxcbiAgICAnLS12Z2lwLW1ldGEtc2VwYXJhdG9yLWNvbG9yJzogJyNlMWUyZTYnLFxuICAgICctLXZnaXAtbWV0YS1zY3JvbGxiYXItY29sb3InOiAnIzEzMTQxNScsXG4gICAgJy0tdmdpcC1tZXRhLW92ZXJsYXktYmFja2dyb3VuZCc6ICdyZ2JhKDE5LCAyMCwgMjEsIDAuNSknLFxuXG4gICAgJy0tdmdpcC1tZXRhLWxpbmstY29sb3InOiAnIzg3MWZmZicsXG4gICAgJy0tdmdpcC1tZXRhLWxpbmstaG92ZXItY29sb3InOiAnIzQ0MTA4MCcsXG5cbiAgICAnLS12Z2lwLW1ldGEtaW5wdXQtY29sb3InOiAnIzEzMTQxNScsXG4gICAgJy0tdmdpcC1tZXRhLWlucHV0LWJnLWNvbG9yJzogJyNmZmZmZmYnLFxuICAgICctLXZnaXAtbWV0YS1pbnB1dC1sYWJlbC1jb2xvcic6ICcjNjE2MjY2JyxcbiAgICAnLS12Z2lwLW1ldGEtaW5wdXQtYm9yZGVyLWNvbG9yJzogJyNjMmM0Y2MnLFxuICAgICctLXZnaXAtbWV0YS1pbnB1dC1hY3RpdmUtYm9yZGVyLWNvbG9yJzogJyMyYzJkMzAnLFxuICAgICctLXZnaXAtbWV0YS1pbnB1dC1hY3Rpb24taG92ZXItYmctY29sb3InOiAnI2UxZTJlNicsXG4gICAgJy0tdmdpcC1tZXRhLWlucHV0LWFjY2VudC1iZy1jb2xvcic6ICcjZTFlMmU2JyxcbiAgICAnLS12Z2lwLW1ldGEtaW5wdXQtYWNjZW50LWNvbG9yJzogJyMxMzE0MTUnLFxuICAgICctLXZnaXAtbWV0YS1pbnB1dC1wbGFjZWhvbGRlci1jb2xvcic6ICcjYzJjNGNjJyxcbiAgICAnLS12Z2lwLW1ldGEtaW5wdXQtZGlzYWJsZWQtYmctY29sb3InOiAnI2YzZjNmNScsXG4gICAgJy0tdmdpcC1tZXRhLWlucHV0LWRpc2FibGVkLWJvcmRlci1jb2xvcic6ICcjZTFlMmU2JyxcbiAgICAnLS12Z2lwLW1ldGEtaW5wdXQtaGludC1jb2xvcic6ICcjNjE2MjY2JyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICctLXZnaXAtbWV0YS1kcm9wZG93bi1pY29uJzogJ3VybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NE5Danh6ZG1jZ2RtVnljMmx2YmowaU1TNHhJaUJwWkQwaVRHRjVaWEpmTVNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWlCNGJXeHVjenA0YkdsdWF6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M5NGJHbHVheUlnZUQwaU1IQjRJaUI1UFNJd2NIZ2lEUW9KSUhacFpYZENiM2c5SWpBZ01DQXlNQ0F5TUNJZ2MzUjViR1U5SW1WdVlXSnNaUzFpWVdOclozSnZkVzVrT201bGR5QXdJREFnTWpBZ01qQTdJaUI0Yld3NmMzQmhZMlU5SW5CeVpYTmxjblpsSWo0TkNqeHdZWFJvSUhOMGVXeGxQU0ptYVd4c09pTXhNekUwTVRVN0lpQmtQU0pOTnl3M0xqaEROaTQzTERjdU5TdzJMaklzTnk0MkxEVXVPU3czTGpsVE5TNDNMRGd1Tnl3MkxEbHNOQ3d6TGpSc05DMHpMalJqTUM0ekxUQXVNeXd3TGpNdE1DNDRMREF0TVM0eERRb0pZeTB3TGpNdE1DNHpMVEF1Tnkwd0xqTXRNUzB3TGpGc0xUTXNNaTQyVERjc055NDRURGNzTnk0NGVpSXZQZzBLUEM5emRtYyspJyxcbiAgICAnLS12Z2lwLW1ldGEtc3VnZ2VzdGlvbnMtYmctY29sb3InOiAnI2YzZTlmZicsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAnLS12Z2lwLW1ldGEtZHJvcGRvd24tY2hlY2staWNvbic6ICd1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0l5TkNJZ2FHVnBaMmgwUFNJeU5DSWdkbWxsZDBKdmVEMGlNQ0F3SURJMElESTBJajQ4Y0dGMGFDQm1hV3hzUFNJak1UTXhOREUxSWlCbWFXeHNMWEoxYkdVOUltNXZibnBsY204aUlHUTlJazB5TGprd05DQXhNaTR4TVV3eExqVWdNVE11TlRJZ055NDVOVGdnTWpBZ01qSXVOU0ExTGpRd09TQXlNUzR3T1RZZ05DQTNMamsxT0NBeE55NHhPREo2SWk4K1BDOXpkbWMrKScsXG4gICAgJy0tdmdpcC1tZXRhLWRyb3Bkb3duLWJnLWNvbG9yJzogJyNmZmZmZmYnLFxuICAgICctLXZnaXAtbWV0YS1kcm9wZG93bi1zaGFkb3cnOiAnaW5zZXQgMCAwIDAgMXB4ICNlMWUyZTYsIDAgMnB4IDVweCByZ2JhKDE5LCAyMCwgMjEsIDAuMTUpJyxcbiAgICAnLS12Z2lwLW1ldGEtc3VibWl0LWhvdmVyLWJnLWNvbG9yJzogJyM0MzQ3NGInLFxuICAgICctLXZnaXAtbWV0YS1idXR0b24tYm9yZGVyLWNvbG9yJzogJyMxMzE0MTUnLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgJy0tdmdpcC1tZXRhLWRhdGUtaWNvbic6ICd1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejRLUENFdExTQkhaVzVsY21GMGIzSTZJRUZrYjJKbElFbHNiSFZ6ZEhKaGRHOXlJREl4TGpFdU1Dd2dVMVpISUVWNGNHOXlkQ0JRYkhWbkxVbHVJQzRnVTFaSElGWmxjbk5wYjI0NklEWXVNREFnUW5WcGJHUWdNQ2tnSUMwdFBnbzhjM1puSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeU1DSWdkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpQ2drZ2RtbGxkMEp2ZUQwaU1DQXdJREUySURFMklpQnpkSGxzWlQwaVpXNWhZbXhsTFdKaFkydG5jbTkxYm1RNmJtVjNJREFnTUNBeE5pQXhOanNpSUhodGJEcHpjR0ZqWlQwaWNISmxjMlZ5ZG1VaVBnbzhjR0YwYUNCbWFXeHNQU0lqTVRNeE5ERTFJaUJrUFNKTk1UUXVOU3d5U0RFeVZqQXVOVU14TWl3d0xqSXNNVEV1T0N3d0xERXhMalVzTUZNeE1Td3dMaklzTVRFc01DNDFWakpJTlZZd0xqVkROU3d3TGpJc05DNDRMREFzTkM0MUxEQlROQ3d3TGpJc05Dd3dMalZXTWtneExqVUtDVU13TGpjc01pd3dMREl1Tnl3d0xETXVOWFl5ZGpsRE1Dd3hOUzR6TERBdU55d3hOaXd4TGpVc01UWm9NVE5qTUM0NExEQXNNUzQxTFRBdU55d3hMalV0TVM0MWRpMDVkaTB5UXpFMkxESXVOeXd4TlM0ekxESXNNVFF1TlN3eWVpQk5NVFVzTVRRdU5XTXdMREF1TXkwd0xqSXNNQzQxTFRBdU5Td3dMalVLQ1dndE1UTkRNUzR5TERFMUxERXNNVFF1T0N3eExERTBMalZXTm1neE5GWXhOQzQxZWlCTk1UVXNOVWd4VmpNdU5VTXhMRE11TWl3eExqSXNNeXd4TGpVc00yZ3phRGRvTTBNeE5DNDRMRE1zTVRVc015NHlMREUxTERNdU5WWTFlaUl2UGdvOEwzTjJaejRLKScsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAnLS12Z2lwLW1ldGEtdGltZS1pY29uJzogJ3VybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNakFpSUdobGFXZG9kRDBpTWpBaUlIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEJoZEdnZ1ptbHNiRDBpSXpFek1UUXhOU0lnWkQwaVRURXVOaUF4TWtNeExqWWdOaTR5TlRZeU5DQTJMakkxTmpJMElERXVOaUF4TWlBeExqWkRNVGN1TnpRek9DQXhMallnTWpJdU5DQTJMakkxTmpJMElESXlMalFnTVRKRE1qSXVOQ0F4Tnk0M05ETTRJREUzTGpjME16Z2dNakl1TkNBeE1pQXlNaTQwUXpZdU1qVTJNalFnTWpJdU5DQXhMallnTVRjdU56UXpPQ0F4TGpZZ01USmFUVEV5SURCRE5TNHpOekkxT0NBd0lEQWdOUzR6TnpJMU9DQXdJREV5UXpBZ01UZ3VOakkzTkNBMUxqTTNNalU0SURJMElERXlJREkwUXpFNExqWXlOelFnTWpRZ01qUWdNVGd1TmpJM05DQXlOQ0F4TWtNeU5DQTFMak0zTWpVNElERTRMall5TnpRZ01DQXhNaUF3V2sweE1pNDRJRFV1TmtNeE1pNDRJRFV1TVRVNE1UZ2dNVEl1TkRReE9DQTBMamdnTVRJZ05DNDRRekV4TGpVMU9ESWdOQzQ0SURFeExqSWdOUzR4TlRneE9DQXhNUzR5SURVdU5sWXhNa014TVM0eUlERXlMalEwTVRnZ01URXVOVFU0TWlBeE1pNDRJREV5SURFeUxqaElNVGd1TkVNeE9DNDROREU0SURFeUxqZ2dNVGt1TWlBeE1pNDBOREU0SURFNUxqSWdNVEpETVRrdU1pQXhNUzQxTlRneUlERTRMamcwTVRnZ01URXVNaUF4T0M0MElERXhMakpJTVRJdU9GWTFMalphSWk4K0Nqd3ZjM1puUGdvPSknXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBtZXRhRGFyazogTWV0YVRoZW1lID0ge1xuICBuYW1lOiAnZGFyaycsXG4gIHByb3BlcnRpZXM6IHtcbiAgICAnLS12Z2lwLW1ldGEtcmVzb3VyY2UtYmctY29sb3InOiAnIzEzMTQxNScsXG4gICAgJy0tdmdpcC1tZXRhLXJlc291cmNlLWNvbG9yJzogJyNmZmZmZmYnLFxuICAgICctLXZnaXAtbWV0YS1yZXNvdXJjZS1iYXItY29sb3InOiAnIzI0MjQyNicsXG4gICAgJy0tdmdpcC1tZXRhLXNlcGFyYXRvci1jb2xvcic6ICcjNjE2MjY2JyxcbiAgICAnLS12Z2lwLW1ldGEtc2Nyb2xsYmFyLWNvbG9yJzogJyM2MzYzNjYnLFxuICAgICctLXZnaXAtbWV0YS1vdmVybGF5LWJhY2tncm91bmQnOiAncmdiYSgyMDAsMjAxLDIwNCwuMzIpJyxcblxuICAgICctLXZnaXAtbWV0YS1saW5rLWNvbG9yJzogJyNCNzc5RkYnLFxuICAgICctLXZnaXAtbWV0YS1saW5rLWhvdmVyLWNvbG9yJzogJyNjNzk4ZmYnLFxuXG4gICAgJy0tdmdpcC1tZXRhLWlucHV0LWNvbG9yJzogJyNmZmZmZmYnLFxuICAgICctLXZnaXAtbWV0YS1pbnB1dC1iZy1jb2xvcic6ICcjMjQyNDI2JyxcbiAgICAnLS12Z2lwLW1ldGEtaW5wdXQtbGFiZWwtY29sb3InOiAnIzk1OTU5NicsXG4gICAgJy0tdmdpcC1tZXRhLWlucHV0LWJvcmRlci1jb2xvcic6ICcjNjE2MjY2JyxcbiAgICAnLS12Z2lwLW1ldGEtaW5wdXQtYWN0aXZlLWJvcmRlci1jb2xvcic6ICcjYzJjNGNjJyxcbiAgICAnLS12Z2lwLW1ldGEtaW5wdXQtYWN0aW9uLWhvdmVyLWJnLWNvbG9yJzogJyMzMTMxMzMnLFxuICAgICctLXZnaXAtbWV0YS1pbnB1dC1hY2NlbnQtYmctY29sb3InOiAnIzMxMzEzMycsXG4gICAgJy0tdmdpcC1tZXRhLWlucHV0LWFjY2VudC1jb2xvcic6ICcjZmZmZmZmJyxcbiAgICAnLS12Z2lwLW1ldGEtaW5wdXQtcGxhY2Vob2xkZXItY29sb3InOiAnIzQ4NDg0QScsXG4gICAgJy0tdmdpcC1tZXRhLWlucHV0LWRpc2FibGVkLWJnLWNvbG9yJzogJyMxMzE0MTUnLFxuICAgICctLXZnaXAtbWV0YS1pbnB1dC1kaXNhYmxlZC1ib3JkZXItY29sb3InOiAnIzMxMzEzMycsXG4gICAgJy0tdmdpcC1tZXRhLWlucHV0LWhpbnQtY29sb3InOiAnIzg5OGE5MCcsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAnLS12Z2lwLW1ldGEtZHJvcGRvd24taWNvbic6ICd1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F5TUNBeU1DSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01qQWdNakE3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh3WVhSb0lITjBlV3hsUFNKbWFXeHNPaU5tWm1abVptWTdJaUJrUFNKTk55dzNMamhETmk0M0xEY3VOU3cyTGpJc055NDJMRFV1T1N3M0xqbFROUzQzTERndU55dzJMRGxzTkN3ekxqUnNOQzB6TGpSak1DNHpMVEF1TXl3d0xqTXRNQzQ0TERBdE1TNHhEUW9KWXkwd0xqTXRNQzR6TFRBdU55MHdMak10TVMwd0xqRnNMVE1zTWk0MlREY3NOeTQ0VERjc055NDRlaUl2UGcwS1BDOXpkbWMrKScsXG4gICAgJy0tdmdpcC1tZXRhLXN1Z2dlc3Rpb25zLWJnLWNvbG9yJzogJyM4NzFmZmYnLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgJy0tdmdpcC1tZXRhLWRyb3Bkb3duLWNoZWNrLWljb24nOiAndXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJeU5DSWdhR1ZwWjJoMFBTSXlOQ0lnZG1sbGQwSnZlRDBpTUNBd0lESTBJREkwSWo0OGNHRjBhQ0JtYVd4c1BTSWpabVptWm1abUlpQm1hV3hzTFhKMWJHVTlJbTV2Ym5wbGNtOGlJR1E5SWsweUxqa3dOQ0F4TWk0eE1Vd3hMalVnTVRNdU5USWdOeTQ1TlRnZ01qQWdNakl1TlNBMUxqUXdPU0F5TVM0d09UWWdOQ0EzTGprMU9DQXhOeTR4T0RKNklpOCtQQzl6ZG1jKyknLFxuICAgICctLXZnaXAtbWV0YS1kcm9wZG93bi1iZy1jb2xvcic6ICcjNDg0ODRBJyxcbiAgICAnLS12Z2lwLW1ldGEtZHJvcGRvd24tc2hhZG93JzogJ25vbmUnLFxuICAgICctLXZnaXAtbWV0YS1zdWJtaXQtaG92ZXItYmctY29sb3InOiAnIzEzMTQxNScsXG4gICAgJy0tdmdpcC1tZXRhLWJ1dHRvbi1ib3JkZXItY29sb3InOiAnIzYxNjI2NicsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAnLS12Z2lwLW1ldGEtZGF0ZS1pY29uJzogJ3VybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NEtQQ0V0TFNCSFpXNWxjbUYwYjNJNklFRmtiMkpsSUVsc2JIVnpkSEpoZEc5eUlESXhMakV1TUN3Z1UxWkhJRVY0Y0c5eWRDQlFiSFZuTFVsdUlDNGdVMVpISUZabGNuTnBiMjQ2SURZdU1EQWdRblZwYkdRZ01Da2dJQzB0UGdvOGMzWm5JSGRwWkhSb1BTSXlNQ0lnYUdWcFoyaDBQU0l5TUNJZ2RtVnljMmx2YmowaU1TNHhJaUJwWkQwaVRHRjVaWEpmTVNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWlCNGJXeHVjenA0YkdsdWF6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M5NGJHbHVheUlnZUQwaU1IQjRJaUI1UFNJd2NIZ2lDZ2tnZG1sbGQwSnZlRDBpTUNBd0lERTJJREUySWlCemRIbHNaVDBpWlc1aFlteGxMV0poWTJ0bmNtOTFibVE2Ym1WM0lEQWdNQ0F4TmlBeE5qc2lJSGh0YkRwemNHRmpaVDBpY0hKbGMyVnlkbVVpUGdvOGNHRjBhQ0JtYVd4c1BTSWpabVptWm1abUlpQmtQU0pOTVRRdU5Td3lTREV5VmpBdU5VTXhNaXd3TGpJc01URXVPQ3d3TERFeExqVXNNRk14TVN3d0xqSXNNVEVzTUM0MVZqSklOVll3TGpWRE5Td3dMaklzTkM0NExEQXNOQzQxTERCVE5Dd3dMaklzTkN3d0xqVldNa2d4TGpVS0NVTXdMamNzTWl3d0xESXVOeXd3TERNdU5YWXlkamxETUN3eE5TNHpMREF1Tnl3eE5pd3hMalVzTVRab01UTmpNQzQ0TERBc01TNDFMVEF1Tnl3eExqVXRNUzQxZGkwNWRpMHlRekUyTERJdU55d3hOUzR6TERJc01UUXVOU3d5ZWlCTk1UVXNNVFF1TldNd0xEQXVNeTB3TGpJc01DNDFMVEF1TlN3d0xqVUtDV2d0TVRORE1TNHlMREUxTERFc01UUXVPQ3d4TERFMExqVldObWd4TkZZeE5DNDFlaUJOTVRVc05VZ3hWak11TlVNeExETXVNaXd4TGpJc015d3hMalVzTTJnemFEZG9NME14TkM0NExETXNNVFVzTXk0eUxERTFMRE11TlZZMWVpSXZQZ284TDNOMlp6NEspJyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICctLXZnaXAtbWV0YS10aW1lLWljb24nOiAndXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1qQWlJR2hsYVdkb2REMGlNakFpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnWm1sc2JEMGlJMlptWm1abVppSWdaRDBpVFRFdU5pQXhNa014TGpZZ05pNHlOVFl5TkNBMkxqSTFOakkwSURFdU5pQXhNaUF4TGpaRE1UY3VOelF6T0NBeExqWWdNakl1TkNBMkxqSTFOakkwSURJeUxqUWdNVEpETWpJdU5DQXhOeTQzTkRNNElERTNMamMwTXpnZ01qSXVOQ0F4TWlBeU1pNDBRell1TWpVMk1qUWdNakl1TkNBeExqWWdNVGN1TnpRek9DQXhMallnTVRKYVRURXlJREJETlM0ek56STFPQ0F3SURBZ05TNHpOekkxT0NBd0lERXlRekFnTVRndU5qSTNOQ0ExTGpNM01qVTRJREkwSURFeUlESTBRekU0TGpZeU56UWdNalFnTWpRZ01UZ3VOakkzTkNBeU5DQXhNa015TkNBMUxqTTNNalU0SURFNExqWXlOelFnTUNBeE1pQXdXazB4TWk0NElEVXVOa014TWk0NElEVXVNVFU0TVRnZ01USXVORFF4T0NBMExqZ2dNVElnTkM0NFF6RXhMalUxT0RJZ05DNDRJREV4TGpJZ05TNHhOVGd4T0NBeE1TNHlJRFV1TmxZeE1rTXhNUzR5SURFeUxqUTBNVGdnTVRFdU5UVTRNaUF4TWk0NElERXlJREV5TGpoSU1UZ3VORU14T0M0NE5ERTRJREV5TGpnZ01Ua3VNaUF4TWk0ME5ERTRJREU1TGpJZ01USkRNVGt1TWlBeE1TNDFOVGd5SURFNExqZzBNVGdnTVRFdU1pQXhPQzQwSURFeExqSklNVEl1T0ZZMUxqWmFJaTgrQ2p3dmMzWm5QZ289KSdcbiAgfVxufTtcbiJdfQ==
@@ -0,0 +1,218 @@
1
+ /*
2
+ * @Author: Alexander.Vangelov@vonage.com
3
+ * @Date: 2020-02-10 18:47:45
4
+ * @Last Modified by: Alexander.Vangelov@vonage.com
5
+ * @Last Modified time: 2020-02-28 13:29:23
6
+ */
7
+ export class IndexedDbStore {
8
+ constructor(dbName = 'vgip') {
9
+ this.dbName = dbName;
10
+ this.indxDb = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
11
+ }
12
+ _getDb(callback) {
13
+ const self = this;
14
+ if (this.db) {
15
+ return callback(null, this.db);
16
+ }
17
+ const req = this.indxDb.open(this.dbName);
18
+ req.onupgradeneeded = (ev) => {
19
+ self.db = ev.target.result;
20
+ const objectStore = self.db.createObjectStore('Draft', { keyPath: 'id', autoIncrement: true });
21
+ objectStore.createIndex('contextIndex', 'context', { unique: false });
22
+ objectStore.createIndex('contextintegrationIndex', ['context', 'integration'], { unique: false });
23
+ objectStore.createIndex('contextintegrationresourceIndex', ['context', 'integration', 'resource'], { unique: true });
24
+ };
25
+ if (callback) {
26
+ req.onsuccess = (ev) => {
27
+ self.db = ev.target.result;
28
+ callback(null, self.db);
29
+ };
30
+ }
31
+ req.onerror = (ev) => {
32
+ if (callback) {
33
+ callback(ev.error);
34
+ }
35
+ };
36
+ }
37
+ initCollection(collectionName, items = [], callback) {
38
+ const self = this;
39
+ this._getDb((err) => {
40
+ if (err && callback) {
41
+ return callback(err);
42
+ }
43
+ if (callback) {
44
+ callback(null, self.db);
45
+ }
46
+ });
47
+ }
48
+ reset(callback) {
49
+ this._getDb((err) => {
50
+ if (err) {
51
+ return callback(err);
52
+ }
53
+ this.db.close();
54
+ this.indxDb.deleteDatabase(this.dbName);
55
+ delete this.db;
56
+ this._getDb(callback); // eslint-disable-line no-underscore-dangle
57
+ });
58
+ }
59
+ findById(collectionName, id, callback) {
60
+ const tx = this.db.transaction([collectionName]);
61
+ const store = tx.objectStore(collectionName);
62
+ const request = store.get(parseInt(`${id}`, 10));
63
+ if (callback) {
64
+ request.onerror = () => {
65
+ callback(request.error);
66
+ };
67
+ }
68
+ request.onsuccess = () => {
69
+ if (!request.result) {
70
+ callback({ message: 'Not Found' });
71
+ }
72
+ else if (callback) {
73
+ callback(null, request.result);
74
+ }
75
+ };
76
+ }
77
+ destroyById(collectionName, id, callback) {
78
+ const tx = this.db.transaction([collectionName], 'readwrite');
79
+ const store = tx.objectStore(collectionName);
80
+ const request = store.delete(parseInt(`${id}`, 10));
81
+ if (callback) {
82
+ request.onerror = () => {
83
+ callback(request.error);
84
+ };
85
+ }
86
+ request.onsuccess = () => {
87
+ if (callback) {
88
+ callback(null, request.result);
89
+ }
90
+ };
91
+ }
92
+ findOne(collectionName, conditions, options, callback) {
93
+ const tx = this.db.transaction([collectionName]);
94
+ const store = tx.objectStore(collectionName);
95
+ const conditionsKeys = Object.keys(conditions);
96
+ let idx;
97
+ let req;
98
+ if (conditionsKeys.length > 1) {
99
+ const vals = [];
100
+ conditionsKeys.forEach((key) => vals.push(conditions[key]));
101
+ idx = store.index(`${conditionsKeys.join('')}Index`);
102
+ req = idx.get(vals);
103
+ }
104
+ else {
105
+ idx = store.index(`${conditionsKeys[0]}Index`);
106
+ req = idx.get(conditions[conditionsKeys[0]]);
107
+ }
108
+ if (callback) {
109
+ req.onerror = () => {
110
+ callback(req.error);
111
+ };
112
+ }
113
+ req.onsuccess = (ev) => {
114
+ if (!ev.target.result) {
115
+ callback({ message: 'Not Found' });
116
+ }
117
+ else if (callback) {
118
+ callback(null, ev.target.result);
119
+ }
120
+ };
121
+ }
122
+ find(collectionName, conditions, options, callback) {
123
+ const tx = this.db.transaction([collectionName]);
124
+ const store = tx.objectStore(collectionName);
125
+ const conditionsKeys = Object.keys(conditions);
126
+ let idx;
127
+ let req;
128
+ if (conditionsKeys.length > 1) {
129
+ const vals = [];
130
+ conditionsKeys.forEach((key) => vals.push(conditions[key]));
131
+ idx = store.index(`${conditionsKeys.join('')}Index`);
132
+ req = idx.openCursor(vals);
133
+ }
134
+ else {
135
+ idx = store.index(`${conditionsKeys[0]}Index`);
136
+ req = idx.openCursor(conditions[conditionsKeys[0]]);
137
+ }
138
+ req.onerror = () => {
139
+ if (callback) {
140
+ callback(req.error);
141
+ }
142
+ };
143
+ const items = [];
144
+ req.onsuccess = (ev) => {
145
+ const cursor = ev.target.result;
146
+ if (cursor) {
147
+ items.push(cursor.value);
148
+ cursor.continue();
149
+ }
150
+ else if (callback) {
151
+ callback(null, items);
152
+ }
153
+ };
154
+ }
155
+ save(collectionName, model, callback) {
156
+ const record = model; // model.toJson(true, false);
157
+ const createNew = () => {
158
+ const txN = this.db.transaction([collectionName], 'readwrite');
159
+ const request = txN.objectStore(collectionName).add(record);
160
+ if (callback) {
161
+ request.onerror = () => callback(request.error);
162
+ }
163
+ request.onsuccess = () => {
164
+ record.id = request.result;
165
+ if (callback) {
166
+ callback(null, record);
167
+ }
168
+ };
169
+ };
170
+ const updateOldById = (id) => {
171
+ const txO = this.db.transaction([collectionName], 'readwrite');
172
+ const storeW = txO.objectStore(collectionName);
173
+ const getRequest = storeW.get(id);
174
+ if (callback) {
175
+ getRequest.onerror = () => callback(getRequest.error);
176
+ }
177
+ getRequest.onsuccess = () => {
178
+ const existing = getRequest.result;
179
+ if (!existing) {
180
+ callback({ message: 'Not Found' });
181
+ }
182
+ else {
183
+ for (const p of Object.keys(record)) {
184
+ existing[p] = record[p];
185
+ }
186
+ const updateRequest = storeW.put(existing);
187
+ updateRequest.onerror = () => callback(updateRequest.error);
188
+ updateRequest.onsuccess = (ev) => {
189
+ if (typeof (callback) === 'function') {
190
+ callback(null, existing);
191
+ }
192
+ };
193
+ }
194
+ };
195
+ };
196
+ if (record.id) {
197
+ updateOldById(record.id);
198
+ }
199
+ else if (record.integration && record.resource) {
200
+ this.findOne(collectionName, {
201
+ context: record.context || '',
202
+ integration: record.integration || '',
203
+ resource: record.resource || ''
204
+ }, null, (err, existing) => {
205
+ if (!existing) {
206
+ createNew();
207
+ }
208
+ else {
209
+ updateOldById(existing.id);
210
+ }
211
+ });
212
+ }
213
+ else {
214
+ createNew();
215
+ }
216
+ }
217
+ }
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvY29tbW9uL3V0aWxzL2luZGV4ZWREYlN0b3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBY0gsTUFBTSxPQUFPLGNBQWM7SUFLekIsWUFBWSxTQUFpQixNQUFNO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSyxNQUFjLENBQUMsWUFBWSxJQUFLLE1BQWMsQ0FBQyxlQUFlLElBQUssTUFBYyxDQUFDLFdBQVcsQ0FBQztJQUNuSSxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQWdDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzNCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMvRixXQUFXLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN0RSxXQUFXLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbEcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2SCxDQUFDLENBQUM7UUFDRixJQUFJLFFBQVEsRUFBRTtZQUNaLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDM0IsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDO1NBQ0g7UUFDRCxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBTyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwQjtRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsY0FBc0IsRUFBRSxRQUE2QixFQUFFLEVBQUUsUUFBZ0M7UUFDdEcsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNsQixJQUFJLEdBQUcsSUFBSSxRQUFRLEVBQUU7Z0JBQ25CLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDekI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBZ0M7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2xCLElBQUksR0FBRyxFQUFFO2dCQUNQLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDJDQUEyQztRQUNwRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsY0FBc0IsRUFBRSxFQUFtQixFQUFFLFFBQWdDO1FBQ3BGLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLFFBQVEsRUFBRTtZQUNaLE9BQU8sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNyQixRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQztTQUNIO1FBQ0QsT0FBTyxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQ25CLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNLElBQUksUUFBUSxFQUFFO2dCQUNuQixRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNoQztRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsY0FBc0IsRUFBRSxFQUFtQixFQUFFLFFBQWdDO1FBQ3ZGLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDOUQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxRQUFRLEVBQUU7WUFDWixPQUFPLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDckIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUM7U0FDSDtRQUNELE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLElBQUksUUFBUSxFQUFFO2dCQUNaLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FBQyxjQUFzQixFQUFFLFVBQWUsRUFBRSxPQUFZLEVBQUUsUUFBaUM7UUFDOUYsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxJQUFJLEdBQWEsQ0FBQztRQUNsQixJQUFJLEdBQWUsQ0FBQztRQUNwQixJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNoQixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQjthQUFNO1lBQ0wsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxRQUFRLEVBQUU7WUFDWixHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDakIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUM7U0FDSDtRQUNELEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JCLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNLElBQUksUUFBUSxFQUFFO2dCQUNuQixRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbEM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLGNBQXNCLEVBQUUsVUFBZSxFQUFFLE9BQVksRUFBRSxRQUFpQztRQUMzRixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDakQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3QyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksR0FBYSxDQUFDO1FBQ2xCLElBQUksR0FBZSxDQUFDO1FBQ3BCLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELEdBQUcsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO2FBQU07WUFDTCxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0MsR0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNqQixJQUFJLFFBQVEsRUFBRTtnQkFDWixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBRTtZQUMxQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNoQyxJQUFJLE1BQU0sRUFBRTtnQkFDVixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekIsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ25CO2lCQUFNLElBQUksUUFBUSxFQUFFO2dCQUNuQixRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3ZCO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxjQUFzQixFQUFFLEtBQVUsRUFBRSxRQUFpQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyw2QkFBNkI7UUFDbkQsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDL0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsT0FBTyxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7Z0JBQ3ZCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDM0IsSUFBSSxRQUFRLEVBQUU7b0JBQ1osUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDeEI7WUFDSCxDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQzNCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDL0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksUUFBUSxFQUFFO2dCQUNaLFVBQVUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2RDtZQUNELFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO2dCQUMxQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNiLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2lCQUNwQztxQkFBTTtvQkFDTCxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3pCO29CQUNELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzNDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUQsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQU8sRUFBRSxFQUFFO3dCQUNwQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxVQUFVLEVBQUU7NEJBQ3BDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7eUJBQzFCO29CQUNILENBQUMsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUNiLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUI7YUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtnQkFDM0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRTtnQkFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRTtnQkFDckMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRTthQUNoQyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDYixTQUFTLEVBQUUsQ0FBQztpQkFDYjtxQkFBTTtvQkFDTCxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM1QjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLFNBQVMsRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQEF1dGhvcjogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBEYXRlOiAyMDIwLTAyLTEwIDE4OjQ3OjQ1XG4gKiBATGFzdCBNb2RpZmllZCBieTogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDItMjggMTM6Mjk6MjNcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdG9yZVJlY29yZCB7XG4gIGlkPzogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdG9yZSB7XG4gIGluaXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcsIGl0ZW1zPzogQXJyYXk8SVN0b3JlUmVjb3JkPiwgY2FsbGJhY2s/OiAoZXJyLCByZXN1bHQ/KSA9PiB2b2lkKTogYW55O1xuICBmaW5kQnlJZChjb2xsZWN0aW9uTmFtZSwgaWQ6IG51bWJlciB8IHN0cmluZywgY2FsbGJhY2s/OiAoZXJyLCByZXN1bHQ/KSA9PiB2b2lkKTogYW55O1xuICBzYXZlKGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcsIHJlY29yZDogYW55LCBjYWxsYmFjaz86IChlcnIsIHJlc3VsdD8pID0+IHZvaWQpOiBhbnk7XG4gIGZpbmQoY29sbGVjdGlvbk5hbWU6IHN0cmluZywgY29uZGl0aW9uczogYW55LCBvcHRpb25zOiBhbnksIGNhbGxiYWNrOiAoZXJyLCByZXN1bHQ/KSA9PiB2b2lkKTtcbiAgZmluZE9uZShjb2xsZWN0aW9uTmFtZTogc3RyaW5nLCBjb25kaXRpb25zOiBhbnksIG9wdGlvbnM6IGFueSwgY2FsbGJhY2s/OiAoZXJyLCByZXN1bHQ/KSA9PiB2b2lkKTtcbn1cblxuZXhwb3J0IGNsYXNzIEluZGV4ZWREYlN0b3JlIGltcGxlbWVudHMgSVN0b3JlIHtcbiAgaW5keERiOiBJREJGYWN0b3J5O1xuICBkYjogSURCRGF0YWJhc2U7XG4gIGRiTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGRiTmFtZTogc3RyaW5nID0gJ3ZnaXAnKSB7XG4gICAgdGhpcy5kYk5hbWUgPSBkYk5hbWU7XG4gICAgdGhpcy5pbmR4RGIgPSB3aW5kb3cuaW5kZXhlZERCIHx8ICh3aW5kb3cgYXMgYW55KS5tb3pJbmRleGVkREIgfHwgKHdpbmRvdyBhcyBhbnkpLndlYmtpdEluZGV4ZWREQiB8fCAod2luZG93IGFzIGFueSkubXNJbmRleGVkREI7XG4gIH1cblxuICBfZ2V0RGIoY2FsbGJhY2s6IChlcnIsIHJlc3VsdD8pID0+IHZvaWQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAodGhpcy5kYikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHRoaXMuZGIpO1xuICAgIH1cbiAgICBjb25zdCByZXEgPSB0aGlzLmluZHhEYi5vcGVuKHRoaXMuZGJOYW1lKTtcbiAgICByZXEub251cGdyYWRlbmVlZGVkID0gKGV2OiBhbnkpID0+IHtcbiAgICAgIHNlbGYuZGIgPSBldi50YXJnZXQucmVzdWx0O1xuICAgICAgY29uc3Qgb2JqZWN0U3RvcmUgPSBzZWxmLmRiLmNyZWF0ZU9iamVjdFN0b3JlKCdEcmFmdCcsIHsga2V5UGF0aDogJ2lkJywgYXV0b0luY3JlbWVudDogdHJ1ZSB9KTtcbiAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdjb250ZXh0SW5kZXgnLCAnY29udGV4dCcsIHsgdW5pcXVlOiBmYWxzZSB9KTtcbiAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdjb250ZXh0aW50ZWdyYXRpb25JbmRleCcsIFsnY29udGV4dCcsICdpbnRlZ3JhdGlvbiddLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG4gICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgnY29udGV4dGludGVncmF0aW9ucmVzb3VyY2VJbmRleCcsIFsnY29udGV4dCcsICdpbnRlZ3JhdGlvbicsICdyZXNvdXJjZSddLCB7IHVuaXF1ZTogdHJ1ZSB9KTtcbiAgICB9O1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgcmVxLm9uc3VjY2VzcyA9IChldjogYW55KSA9PiB7XG4gICAgICAgIHNlbGYuZGIgPSBldi50YXJnZXQucmVzdWx0O1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzZWxmLmRiKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJlcS5vbmVycm9yID0gKGV2OiBhbnkpID0+IHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayhldi5lcnJvcik7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGluaXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcsIGl0ZW1zOiBBcnJheTxJU3RvcmVSZWNvcmQ+ID0gW10sIGNhbGxiYWNrOiAoZXJyLCByZXN1bHQ/KSA9PiB2b2lkKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5fZ2V0RGIoKGVycikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgICBpZiAoZXJyICYmIGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgfVxuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHNlbGYuZGIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVzZXQoY2FsbGJhY2s6IChlcnIsIHJlc3VsdD8pID0+IHZvaWQpIHtcbiAgICB0aGlzLl9nZXREYigoZXJyKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG4gICAgICB0aGlzLmRiLmNsb3NlKCk7XG4gICAgICB0aGlzLmluZHhEYi5kZWxldGVEYXRhYmFzZSh0aGlzLmRiTmFtZSk7XG4gICAgICBkZWxldGUgdGhpcy5kYjtcbiAgICAgIHRoaXMuX2dldERiKGNhbGxiYWNrKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIH0pO1xuICB9XG5cbiAgZmluZEJ5SWQoY29sbGVjdGlvbk5hbWU6IHN0cmluZywgaWQ6IG51bWJlciB8IHN0cmluZywgY2FsbGJhY2s6IChlcnIsIHJlc3VsdD8pID0+IHZvaWQpOiBhbnkge1xuICAgIGNvbnN0IHR4ID0gdGhpcy5kYi50cmFuc2FjdGlvbihbY29sbGVjdGlvbk5hbWVdKTtcbiAgICBjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKGNvbGxlY3Rpb25OYW1lKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gc3RvcmUuZ2V0KHBhcnNlSW50KGAke2lkfWAsIDEwKSk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKHJlcXVlc3QuZXJyb3IpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICBpZiAoIXJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgIGNhbGxiYWNrKHsgbWVzc2FnZTogJ05vdCBGb3VuZCcgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlcXVlc3QucmVzdWx0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZGVzdHJveUJ5SWQoY29sbGVjdGlvbk5hbWU6IHN0cmluZywgaWQ6IG51bWJlciB8IHN0cmluZywgY2FsbGJhY2s6IChlcnIsIHJlc3VsdD8pID0+IHZvaWQpOiBhbnkge1xuICAgIGNvbnN0IHR4ID0gdGhpcy5kYi50cmFuc2FjdGlvbihbY29sbGVjdGlvbk5hbWVdLCAncmVhZHdyaXRlJyk7XG4gICAgY29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZShjb2xsZWN0aW9uTmFtZSk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHN0b3JlLmRlbGV0ZShwYXJzZUludChgJHtpZH1gLCAxMCkpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhyZXF1ZXN0LmVycm9yKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlcXVlc3QucmVzdWx0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZmluZE9uZShjb2xsZWN0aW9uTmFtZTogc3RyaW5nLCBjb25kaXRpb25zOiBhbnksIG9wdGlvbnM6IGFueSwgY2FsbGJhY2s/OiAoZXJyLCByZXN1bHQ/KSA9PiB2b2lkKTogYW55IHtcbiAgICBjb25zdCB0eCA9IHRoaXMuZGIudHJhbnNhY3Rpb24oW2NvbGxlY3Rpb25OYW1lXSk7XG4gICAgY29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZShjb2xsZWN0aW9uTmFtZSk7XG4gICAgY29uc3QgY29uZGl0aW9uc0tleXMgPSBPYmplY3Qua2V5cyhjb25kaXRpb25zKTtcbiAgICBsZXQgaWR4OiBJREJJbmRleDtcbiAgICBsZXQgcmVxOiBJREJSZXF1ZXN0O1xuICAgIGlmIChjb25kaXRpb25zS2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCB2YWxzID0gW107XG4gICAgICBjb25kaXRpb25zS2V5cy5mb3JFYWNoKChrZXkpID0+IHZhbHMucHVzaChjb25kaXRpb25zW2tleV0pKTtcbiAgICAgIGlkeCA9IHN0b3JlLmluZGV4KGAke2NvbmRpdGlvbnNLZXlzLmpvaW4oJycpfUluZGV4YCk7XG4gICAgICByZXEgPSBpZHguZ2V0KHZhbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZHggPSBzdG9yZS5pbmRleChgJHtjb25kaXRpb25zS2V5c1swXX1JbmRleGApO1xuICAgICAgcmVxID0gaWR4LmdldChjb25kaXRpb25zW2NvbmRpdGlvbnNLZXlzWzBdXSk7XG4gICAgfVxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgcmVxLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKHJlcS5lcnJvcik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXEub25zdWNjZXNzID0gKGV2OiBhbnkpID0+IHtcbiAgICAgIGlmICghZXYudGFyZ2V0LnJlc3VsdCkge1xuICAgICAgICBjYWxsYmFjayh7IG1lc3NhZ2U6ICdOb3QgRm91bmQnIH0pO1xuICAgICAgfSBlbHNlIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBldi50YXJnZXQucmVzdWx0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZmluZChjb2xsZWN0aW9uTmFtZTogc3RyaW5nLCBjb25kaXRpb25zOiBhbnksIG9wdGlvbnM6IGFueSwgY2FsbGJhY2s/OiAoZXJyLCByZXN1bHQ/KSA9PiB2b2lkKTogQXJyYXk8SVN0b3JlUmVjb3JkPiB8IGFueSB7XG4gICAgY29uc3QgdHggPSB0aGlzLmRiLnRyYW5zYWN0aW9uKFtjb2xsZWN0aW9uTmFtZV0pO1xuICAgIGNvbnN0IHN0b3JlID0gdHgub2JqZWN0U3RvcmUoY29sbGVjdGlvbk5hbWUpO1xuICAgIGNvbnN0IGNvbmRpdGlvbnNLZXlzID0gT2JqZWN0LmtleXMoY29uZGl0aW9ucyk7XG4gICAgbGV0IGlkeDogSURCSW5kZXg7XG4gICAgbGV0IHJlcTogSURCUmVxdWVzdDtcbiAgICBpZiAoY29uZGl0aW9uc0tleXMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgdmFscyA9IFtdO1xuICAgICAgY29uZGl0aW9uc0tleXMuZm9yRWFjaCgoa2V5KSA9PiB2YWxzLnB1c2goY29uZGl0aW9uc1trZXldKSk7XG4gICAgICBpZHggPSBzdG9yZS5pbmRleChgJHtjb25kaXRpb25zS2V5cy5qb2luKCcnKX1JbmRleGApO1xuICAgICAgcmVxID0gaWR4Lm9wZW5DdXJzb3IodmFscyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkeCA9IHN0b3JlLmluZGV4KGAke2NvbmRpdGlvbnNLZXlzWzBdfUluZGV4YCk7XG4gICAgICByZXEgPSBpZHgub3BlbkN1cnNvcihjb25kaXRpb25zW2NvbmRpdGlvbnNLZXlzWzBdXSk7XG4gICAgfVxuICAgIHJlcS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKHJlcS5lcnJvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIHJlcS5vbnN1Y2Nlc3MgPSAoZXY6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY3Vyc29yID0gZXYudGFyZ2V0LnJlc3VsdDtcbiAgICAgIGlmIChjdXJzb3IpIHtcbiAgICAgICAgaXRlbXMucHVzaChjdXJzb3IudmFsdWUpO1xuICAgICAgICBjdXJzb3IuY29udGludWUoKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgaXRlbXMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzYXZlKGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcsIG1vZGVsOiBhbnksIGNhbGxiYWNrPzogKGVyciwgcmVzdWx0PykgPT4gdm9pZCkge1xuICAgIGNvbnN0IHJlY29yZCA9IG1vZGVsOyAvLyBtb2RlbC50b0pzb24odHJ1ZSwgZmFsc2UpO1xuICAgIGNvbnN0IGNyZWF0ZU5ldyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHR4TiA9IHRoaXMuZGIudHJhbnNhY3Rpb24oW2NvbGxlY3Rpb25OYW1lXSwgJ3JlYWR3cml0ZScpO1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHR4Ti5vYmplY3RTdG9yZShjb2xsZWN0aW9uTmFtZSkuYWRkKHJlY29yZCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gY2FsbGJhY2socmVxdWVzdC5lcnJvcik7XG4gICAgICB9XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgcmVjb3JkLmlkID0gcmVxdWVzdC5yZXN1bHQ7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlY29yZCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZU9sZEJ5SWQgPSAoaWQpID0+IHtcbiAgICAgIGNvbnN0IHR4TyA9IHRoaXMuZGIudHJhbnNhY3Rpb24oW2NvbGxlY3Rpb25OYW1lXSwgJ3JlYWR3cml0ZScpO1xuICAgICAgY29uc3Qgc3RvcmVXID0gdHhPLm9iamVjdFN0b3JlKGNvbGxlY3Rpb25OYW1lKTtcbiAgICAgIGNvbnN0IGdldFJlcXVlc3QgPSBzdG9yZVcuZ2V0KGlkKTtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBnZXRSZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiBjYWxsYmFjayhnZXRSZXF1ZXN0LmVycm9yKTtcbiAgICAgIH1cbiAgICAgIGdldFJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGdldFJlcXVlc3QucmVzdWx0O1xuICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgY2FsbGJhY2soeyBtZXNzYWdlOiAnTm90IEZvdW5kJyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgT2JqZWN0LmtleXMocmVjb3JkKSkge1xuICAgICAgICAgICAgZXhpc3RpbmdbcF0gPSByZWNvcmRbcF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHVwZGF0ZVJlcXVlc3QgPSBzdG9yZVcucHV0KGV4aXN0aW5nKTtcbiAgICAgICAgICB1cGRhdGVSZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiBjYWxsYmFjayh1cGRhdGVSZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgICB1cGRhdGVSZXF1ZXN0Lm9uc3VjY2VzcyA9IChldjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIChjYWxsYmFjaykgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZXhpc3RpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGlmIChyZWNvcmQuaWQpIHtcbiAgICAgIHVwZGF0ZU9sZEJ5SWQocmVjb3JkLmlkKTtcbiAgICB9IGVsc2UgaWYgKHJlY29yZC5pbnRlZ3JhdGlvbiAmJiByZWNvcmQucmVzb3VyY2UpIHtcbiAgICAgIHRoaXMuZmluZE9uZShjb2xsZWN0aW9uTmFtZSwge1xuICAgICAgICBjb250ZXh0OiByZWNvcmQuY29udGV4dCB8fCAnJyxcbiAgICAgICAgaW50ZWdyYXRpb246IHJlY29yZC5pbnRlZ3JhdGlvbiB8fCAnJyxcbiAgICAgICAgcmVzb3VyY2U6IHJlY29yZC5yZXNvdXJjZSB8fCAnJ1xuICAgICAgfSwgbnVsbCwgKGVyciwgZXhpc3RpbmcpID0+IHtcbiAgICAgICAgaWYgKCFleGlzdGluZykge1xuICAgICAgICAgIGNyZWF0ZU5ldygpOyAgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlT2xkQnlJZChleGlzdGluZy5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVOZXcoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==