payload 2.0.13 → 2.0.14

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 (107) hide show
  1. package/components/forms.d.ts +2 -0
  2. package/components/forms.js +13 -5
  3. package/dist/admin/components/elements/DatePicker/DatePicker.d.ts.map +1 -1
  4. package/dist/admin/components/elements/DatePicker/DatePicker.js +14 -3
  5. package/dist/admin/components/elements/DocumentFields/index.d.ts +1 -0
  6. package/dist/admin/components/elements/DocumentFields/index.d.ts.map +1 -1
  7. package/dist/admin/components/elements/DocumentFields/index.js +6 -5
  8. package/dist/admin/components/elements/DocumentFields/index.scss +29 -0
  9. package/dist/admin/components/elements/DuplicateDocument/index.d.ts.map +1 -1
  10. package/dist/admin/components/elements/DuplicateDocument/index.js +27 -42
  11. package/dist/admin/components/forms/field-types/DateTime/Input.d.ts +21 -0
  12. package/dist/admin/components/forms/field-types/DateTime/Input.d.ts.map +1 -0
  13. package/dist/admin/components/forms/field-types/DateTime/Input.js +65 -0
  14. package/dist/admin/components/forms/field-types/DateTime/index.d.ts.map +1 -1
  15. package/dist/admin/components/forms/field-types/DateTime/index.js +15 -41
  16. package/dist/admin/components/forms/field-types/RichText/types.d.ts +7 -7
  17. package/dist/admin/components/forms/field-types/RichText/types.d.ts.map +1 -1
  18. package/dist/admin/components/forms/field-types/Tabs/index.js +2 -2
  19. package/dist/admin/components/views/LivePreview/index.d.ts.map +1 -1
  20. package/dist/admin/components/views/LivePreview/index.js +12 -22
  21. package/dist/admin/components/views/LivePreview/index.scss +0 -24
  22. package/dist/admin/components/views/Version/Compare/index.d.ts.map +1 -1
  23. package/dist/admin/components/views/Version/Compare/index.js +7 -6
  24. package/dist/admin/components/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts.map +1 -1
  25. package/dist/admin/components/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +4 -2
  26. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  27. package/dist/auth/operations/forgotPassword.js +3 -2
  28. package/dist/auth/operations/login.d.ts.map +1 -1
  29. package/dist/auth/operations/login.js +3 -2
  30. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  31. package/dist/auth/operations/registerFirstUser.js +3 -2
  32. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  33. package/dist/auth/operations/resetPassword.js +3 -2
  34. package/dist/auth/operations/unlock.d.ts.map +1 -1
  35. package/dist/auth/operations/unlock.js +3 -2
  36. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  37. package/dist/auth/operations/verifyEmail.js +3 -2
  38. package/dist/collections/config/sanitize.d.ts.map +1 -1
  39. package/dist/collections/config/sanitize.js +3 -1
  40. package/dist/collections/operations/create.d.ts.map +1 -1
  41. package/dist/collections/operations/create.js +8 -18
  42. package/dist/collections/operations/delete.d.ts.map +1 -1
  43. package/dist/collections/operations/delete.js +3 -2
  44. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  45. package/dist/collections/operations/deleteByID.js +3 -2
  46. package/dist/collections/operations/find.d.ts.map +1 -1
  47. package/dist/collections/operations/find.js +3 -2
  48. package/dist/collections/operations/findByID.d.ts.map +1 -1
  49. package/dist/collections/operations/findByID.js +11 -6
  50. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  51. package/dist/collections/operations/findVersionByID.js +3 -2
  52. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  53. package/dist/collections/operations/findVersions.js +3 -2
  54. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  55. package/dist/collections/operations/restoreVersion.js +3 -2
  56. package/dist/collections/operations/update.d.ts.map +1 -1
  57. package/dist/collections/operations/update.js +3 -2
  58. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  59. package/dist/collections/operations/updateByID.js +3 -2
  60. package/dist/collections/requestHandlers/findVersions.js +1 -1
  61. package/dist/config/sanitize.js +4 -4
  62. package/dist/config/types.d.ts +1 -1
  63. package/dist/config/types.d.ts.map +1 -1
  64. package/dist/config/types.js +1 -1
  65. package/dist/exports/components/forms.d.ts +2 -0
  66. package/dist/exports/components/forms.d.ts.map +1 -1
  67. package/dist/exports/components/forms.js +13 -5
  68. package/dist/exports/types.d.ts +1 -1
  69. package/dist/exports/types.d.ts.map +1 -1
  70. package/dist/exports/types.js +7 -1
  71. package/dist/fields/baseFields/baseIDField.d.ts.map +1 -1
  72. package/dist/fields/baseFields/baseIDField.js +2 -2
  73. package/dist/fields/config/types.d.ts +3 -4
  74. package/dist/fields/config/types.d.ts.map +1 -1
  75. package/dist/fields/config/types.js +1 -1
  76. package/dist/globals/operations/findOne.d.ts.map +1 -1
  77. package/dist/globals/operations/findOne.js +3 -2
  78. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  79. package/dist/globals/operations/findVersionByID.js +3 -2
  80. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  81. package/dist/globals/operations/findVersions.js +3 -2
  82. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  83. package/dist/globals/operations/restoreVersion.js +3 -2
  84. package/dist/globals/operations/update.d.ts.map +1 -1
  85. package/dist/globals/operations/update.js +3 -2
  86. package/dist/graphql/schema/buildMutationInputType.d.ts.map +1 -1
  87. package/dist/graphql/schema/buildMutationInputType.js +8 -11
  88. package/dist/graphql/schema/buildObjectType.d.ts.map +1 -1
  89. package/dist/graphql/schema/buildObjectType.js +1 -2
  90. package/dist/graphql/schema/buildWhereInputType.d.ts.map +1 -1
  91. package/dist/graphql/schema/buildWhereInputType.js +22 -13
  92. package/dist/graphql/schema/withOperators.d.ts.map +1 -1
  93. package/dist/graphql/schema/withOperators.js +8 -11
  94. package/dist/preferences/operations/update.js +4 -4
  95. package/dist/uploads/generateFileData.d.ts.map +1 -1
  96. package/dist/uploads/generateFileData.js +13 -1
  97. package/dist/uploads/imageResizer.d.ts.map +1 -1
  98. package/dist/uploads/imageResizer.js +19 -16
  99. package/dist/utilities/commitTransaction.d.ts +6 -0
  100. package/dist/utilities/commitTransaction.d.ts.map +1 -0
  101. package/dist/utilities/commitTransaction.js +17 -0
  102. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  103. package/dist/utilities/configToJSONSchema.js +95 -107
  104. package/dist/utilities/configToJSONSchema.spec.js +12 -6
  105. package/package.json +1 -1
  106. package/types.d.ts +1 -1
  107. package/types.js +7 -1
@@ -20,18 +20,27 @@ const _pluralize = require("pluralize");
20
20
  const _types = require("../fields/config/types");
21
21
  const _deepCopyObject = require("./deepCopyObject");
22
22
  const _formatLabels = require("./formatLabels");
23
- const propertyIsRequired = (field)=>{
24
- if ((0, _types.fieldAffectsData)(field) && 'required' in field && field.required === true) return true;
23
+ const fieldIsRequired = (field)=>{
24
+ const isConditional = Boolean(field?.admin && field?.admin?.condition);
25
+ if (isConditional) return false;
26
+ const isMarkedRequired = 'required' in field && field.required === true;
27
+ if ((0, _types.fieldAffectsData)(field) && isMarkedRequired) return true;
28
+ // if any subfields are required, this field is required
25
29
  if ('fields' in field && field.type !== 'array') {
26
- if (field.admin?.condition || field.access?.read) return false;
27
- return field.fields.find((subField)=>propertyIsRequired(subField));
30
+ return field.fields.some((subField)=>fieldIsRequired(subField));
28
31
  }
32
+ // if any tab subfields have required fields, this field is required
29
33
  if (field.type === 'tabs') {
30
- return field.tabs.some((tab)=>'name' in tab && tab.fields.find((subField)=>propertyIsRequired(subField)));
34
+ return field.tabs.some((tab)=>{
35
+ if ('name' in tab) {
36
+ return tab.fields.some((subField)=>fieldIsRequired(subField));
37
+ }
38
+ return false;
39
+ });
31
40
  }
32
41
  return false;
33
42
  };
34
- function returnOptionEnums(options) {
43
+ function buildOptionEnums(options) {
35
44
  return options.map((option)=>{
36
45
  if (typeof option === 'object' && 'value' in option) {
37
46
  return option.value;
@@ -57,11 +66,20 @@ function returnOptionEnums(options) {
57
66
  type: 'object'
58
67
  };
59
68
  }
69
+ function withNullableType(fieldType, isRequired) {
70
+ const fieldTypes = [
71
+ fieldType
72
+ ];
73
+ if (isRequired) return fieldType;
74
+ fieldTypes.push('null');
75
+ return fieldTypes;
76
+ }
60
77
  function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinitions) {
61
- // required fields for a schema (could be for a nested schema)
62
- const requiredFields = new Set(fields.filter(propertyIsRequired).map((field)=>(0, _types.fieldAffectsData)(field) ? field.name : ''));
78
+ const requiredFieldNames = new Set();
63
79
  return {
64
80
  properties: Object.fromEntries(fields.reduce((fieldSchemas, field)=>{
81
+ const isRequired = (0, _types.fieldAffectsData)(field) && fieldIsRequired(field);
82
+ if (isRequired) requiredFieldNames.add(field.name);
65
83
  let fieldSchema;
66
84
  switch(field.type){
67
85
  case 'text':
@@ -71,7 +89,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
71
89
  case 'date':
72
90
  {
73
91
  fieldSchema = {
74
- type: 'string'
92
+ type: withNullableType('string', isRequired)
75
93
  };
76
94
  break;
77
95
  }
@@ -82,11 +100,11 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
82
100
  items: {
83
101
  type: 'number'
84
102
  },
85
- type: 'array'
103
+ type: withNullableType('array', isRequired)
86
104
  };
87
105
  } else {
88
106
  fieldSchema = {
89
- type: 'number'
107
+ type: withNullableType('number', isRequired)
90
108
  };
91
109
  }
92
110
  break;
@@ -94,33 +112,20 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
94
112
  case 'checkbox':
95
113
  {
96
114
  fieldSchema = {
97
- type: 'boolean'
115
+ type: withNullableType('boolean', isRequired)
98
116
  };
99
117
  break;
100
118
  }
101
119
  case 'json':
102
120
  {
103
- // https://www.rfc-editor.org/rfc/rfc7159#section-3
104
121
  fieldSchema = {
105
- oneOf: [
106
- {
107
- type: 'object'
108
- },
109
- {
110
- type: 'array'
111
- },
112
- {
113
- type: 'string'
114
- },
115
- {
116
- type: 'number'
117
- },
118
- {
119
- type: 'boolean'
120
- },
121
- {
122
- type: 'null'
123
- }
122
+ type: [
123
+ 'object',
124
+ 'array',
125
+ 'string',
126
+ 'number',
127
+ 'boolean',
128
+ 'null'
124
129
  ]
125
130
  };
126
131
  break;
@@ -131,31 +136,34 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
131
136
  items: {
132
137
  type: 'object'
133
138
  },
134
- type: 'array'
139
+ type: withNullableType('array', isRequired)
135
140
  };
136
141
  break;
137
142
  }
138
143
  case 'radio':
139
144
  {
140
145
  fieldSchema = {
141
- enum: returnOptionEnums(field.options),
142
- type: 'string'
146
+ enum: buildOptionEnums(field.options),
147
+ type: withNullableType('string', isRequired)
143
148
  };
144
149
  break;
145
150
  }
146
151
  case 'select':
147
152
  {
148
- const selectType = {
149
- enum: returnOptionEnums(field.options),
150
- type: 'string'
151
- };
153
+ const optionEnums = buildOptionEnums(field.options);
152
154
  if (field.hasMany) {
153
155
  fieldSchema = {
154
- items: selectType,
155
- type: 'array'
156
+ items: {
157
+ enum: optionEnums,
158
+ type: 'string'
159
+ },
160
+ type: withNullableType('array', isRequired)
156
161
  };
157
162
  } else {
158
- fieldSchema = selectType;
163
+ fieldSchema = {
164
+ enum: optionEnums,
165
+ type: withNullableType('string', isRequired)
166
+ };
159
167
  }
160
168
  break;
161
169
  }
@@ -172,7 +180,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
172
180
  ],
173
181
  maxItems: 2,
174
182
  minItems: 2,
175
- type: 'array'
183
+ type: withNullableType('array', isRequired)
176
184
  };
177
185
  break;
178
186
  }
@@ -181,54 +189,34 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
181
189
  if (Array.isArray(field.relationTo)) {
182
190
  if (field.hasMany) {
183
191
  fieldSchema = {
184
- oneOf: [
185
- {
186
- items: {
187
- oneOf: field.relationTo.map((relation)=>{
188
- return {
189
- additionalProperties: false,
190
- properties: {
191
- relationTo: {
192
- const: relation
193
- },
194
- value: {
192
+ items: {
193
+ oneOf: field.relationTo.map((relation)=>{
194
+ return {
195
+ additionalProperties: false,
196
+ properties: {
197
+ relationTo: {
198
+ const: relation
199
+ },
200
+ value: {
201
+ oneOf: [
202
+ {
195
203
  type: collectionIDFieldTypes[relation]
196
- }
197
- },
198
- required: [
199
- 'value',
200
- 'relationTo'
201
- ],
202
- type: 'object'
203
- };
204
- })
205
- },
206
- type: 'array'
207
- },
208
- {
209
- items: {
210
- oneOf: field.relationTo.map((relation)=>{
211
- return {
212
- additionalProperties: false,
213
- properties: {
214
- relationTo: {
215
- const: relation
216
204
  },
217
- value: {
205
+ {
218
206
  $ref: `#/definitions/${relation}`
219
207
  }
220
- },
221
- required: [
222
- 'value',
223
- 'relationTo'
224
- ],
225
- type: 'object'
226
- };
227
- })
228
- },
229
- type: 'array'
230
- }
231
- ]
208
+ ]
209
+ }
210
+ },
211
+ required: [
212
+ 'value',
213
+ 'relationTo'
214
+ ],
215
+ type: 'object'
216
+ };
217
+ })
218
+ },
219
+ type: withNullableType('array', isRequired)
232
220
  };
233
221
  } else {
234
222
  fieldSchema = {
@@ -254,33 +242,30 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
254
242
  'value',
255
243
  'relationTo'
256
244
  ],
257
- type: 'object'
245
+ type: withNullableType('object', isRequired)
258
246
  };
259
247
  })
260
248
  };
261
249
  }
262
250
  } else if (field.hasMany) {
263
251
  fieldSchema = {
264
- oneOf: [
265
- {
266
- items: {
252
+ items: {
253
+ oneOf: [
254
+ {
267
255
  type: collectionIDFieldTypes[field.relationTo]
268
256
  },
269
- type: 'array'
270
- },
271
- {
272
- items: {
257
+ {
273
258
  $ref: `#/definitions/${field.relationTo}`
274
- },
275
- type: 'array'
276
- }
277
- ]
259
+ }
260
+ ]
261
+ },
262
+ type: withNullableType('array', isRequired)
278
263
  };
279
264
  } else {
280
265
  fieldSchema = {
281
266
  oneOf: [
282
267
  {
283
- type: collectionIDFieldTypes[field.relationTo]
268
+ type: withNullableType(collectionIDFieldTypes[field.relationTo], isRequired)
284
269
  },
285
270
  {
286
271
  $ref: `#/definitions/${field.relationTo}`
@@ -302,6 +287,9 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
302
287
  }
303
288
  ]
304
289
  };
290
+ if (!isRequired) fieldSchema.oneOf.push({
291
+ type: 'null'
292
+ });
305
293
  break;
306
294
  }
307
295
  case 'blocks':
@@ -333,7 +321,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
333
321
  return blockSchema;
334
322
  })
335
323
  },
336
- type: 'array'
324
+ type: withNullableType('array', isRequired)
337
325
  };
338
326
  break;
339
327
  }
@@ -345,7 +333,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
345
333
  type: 'object',
346
334
  ...fieldsToJSONSchema(collectionIDFieldTypes, field.fields, interfaceNameDefinitions)
347
335
  },
348
- type: 'array'
336
+ type: withNullableType('array', isRequired)
349
337
  };
350
338
  if (field.interfaceName) {
351
339
  interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
@@ -363,7 +351,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
363
351
  fieldSchemas.set(propName, propSchema);
364
352
  });
365
353
  childSchema.required.forEach((propName)=>{
366
- requiredFields.add(propName);
354
+ requiredFieldNames.add(propName);
367
355
  });
368
356
  break;
369
357
  }
@@ -378,13 +366,13 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
378
366
  type: 'object',
379
367
  ...childSchema
380
368
  });
381
- requiredFields.add(tab.name);
369
+ requiredFieldNames.add(tab.name);
382
370
  } else {
383
371
  Object.entries(childSchema.properties).forEach(([propName, propSchema])=>{
384
372
  fieldSchemas.set(propName, propSchema);
385
373
  });
386
374
  childSchema.required.forEach((propName)=>{
387
- requiredFields.add(propName);
375
+ requiredFieldNames.add(propName);
388
376
  });
389
377
  }
390
378
  });
@@ -415,7 +403,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
415
403
  }
416
404
  return fieldSchemas;
417
405
  }, new Map())),
418
- required: Array.from(requiredFields)
406
+ required: Array.from(requiredFieldNames)
419
407
  };
420
408
  }
421
409
  function entityToJSONSchema(config, incomingEntity, interfaceNameDefinitions, defaultIDType) {
@@ -495,4 +483,4 @@ function configToJSONSchema(config, defaultIDType) {
495
483
  };
496
484
  }
497
485
 
498
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29uZmlnVG9KU09OU2NoZW1hLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTQgfSBmcm9tICdqc29uLXNjaGVtYSdcblxuaW1wb3J0IHsgc2luZ3VsYXIgfSBmcm9tICdwbHVyYWxpemUnXG5cbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB9IGZyb20gJy4uL2NvbGxlY3Rpb25zL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29uZmlnIH0gZnJvbSAnLi4vZXhwb3J0cy9jb25maWcnXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIE9wdGlvbiB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZEdsb2JhbENvbmZpZyB9IGZyb20gJy4uL2dsb2JhbHMvY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB7IGRlZXBDb3B5T2JqZWN0IH0gZnJvbSAnLi9kZWVwQ29weU9iamVjdCdcbmltcG9ydCB7IHRvV29yZHMgfSBmcm9tICcuL2Zvcm1hdExhYmVscydcblxuY29uc3QgcHJvcGVydHlJc1JlcXVpcmVkID0gKGZpZWxkOiBGaWVsZCkgPT4ge1xuICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJiBmaWVsZC5yZXF1aXJlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWVcblxuICBpZiAoJ2ZpZWxkcycgaW4gZmllbGQgJiYgZmllbGQudHlwZSAhPT0gJ2FycmF5Jykge1xuICAgIGlmIChmaWVsZC5hZG1pbj8uY29uZGl0aW9uIHx8IGZpZWxkLmFjY2Vzcz8ucmVhZCkgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIGZpZWxkLmZpZWxkcy5maW5kKChzdWJGaWVsZCkgPT4gcHJvcGVydHlJc1JlcXVpcmVkKHN1YkZpZWxkKSlcbiAgfVxuXG4gIGlmIChmaWVsZC50eXBlID09PSAndGFicycpIHtcbiAgICByZXR1cm4gZmllbGQudGFicy5zb21lKFxuICAgICAgKHRhYikgPT4gJ25hbWUnIGluIHRhYiAmJiB0YWIuZmllbGRzLmZpbmQoKHN1YkZpZWxkKSA9PiBwcm9wZXJ0eUlzUmVxdWlyZWQoc3ViRmllbGQpKSxcbiAgICApXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gcmV0dXJuT3B0aW9uRW51bXMob3B0aW9uczogT3B0aW9uW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gb3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLnZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvblxuICB9KVxufVxuXG4vKipcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgVHlwZVNjcmlwdCB0eXBlcyAocGF5bG9hZC10eXBlcy50cykgd2l0aCB0aGUgcGF5bG9hZCBnZW5lcmF0ZTp0eXBlcyBjb21tYW5kLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUVudGl0eVNjaGVtYXMoXG4gIGVudGl0aWVzOiAoU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB8IFNhbml0aXplZEdsb2JhbENvbmZpZylbXSxcbik6IEpTT05TY2hlbWE0IHtcbiAgY29uc3QgcHJvcGVydGllcyA9IFsuLi5lbnRpdGllc10ucmVkdWNlKChhY2MsIHsgc2x1ZyB9KSA9PiB7XG4gICAgYWNjW3NsdWddID0ge1xuICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtzbHVnfWAsXG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSlcblxuICByZXR1cm4ge1xuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICBwcm9wZXJ0aWVzLFxuICAgIHJlcXVpcmVkOiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKSxcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWVsZHNUb0pTT05TY2hlbWEoXG4gIGNvbGxlY3Rpb25JREZpZWxkVHlwZXM6IHsgW2tleTogc3RyaW5nXTogJ251bWJlcicgfCAnc3RyaW5nJyB9LFxuICBmaWVsZHM6IEZpZWxkW10sXG4gIGludGVyZmFjZU5hbWVEZWZpbml0aW9uczogTWFwPHN0cmluZywgSlNPTlNjaGVtYTQ+LFxuKToge1xuICBwcm9wZXJ0aWVzOiB7XG4gICAgW2s6IHN0cmluZ106IEpTT05TY2hlbWE0XG4gIH1cbiAgcmVxdWlyZWQ6IHN0cmluZ1tdXG59IHtcbiAgLy8gcmVxdWlyZWQgZmllbGRzIGZvciBhIHNjaGVtYSAoY291bGQgYmUgZm9yIGEgbmVzdGVkIHNjaGVtYSlcbiAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBuZXcgU2V0PHN0cmluZz4oXG4gICAgZmllbGRzLmZpbHRlcihwcm9wZXJ0eUlzUmVxdWlyZWQpLm1hcCgoZmllbGQpID0+IChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSA/IGZpZWxkLm5hbWUgOiAnJykpLFxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBmaWVsZHMucmVkdWNlKChmaWVsZFNjaGVtYXMsIGZpZWxkKSA9PiB7XG4gICAgICAgIGxldCBmaWVsZFNjaGVtYTogSlNPTlNjaGVtYTRcbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICAgIGNhc2UgJ2NvZGUnOlxuICAgICAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgICBjYXNlICdkYXRlJzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7IHR5cGU6ICdzdHJpbmcnIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnbnVtYmVyJzoge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmhhc01hbnkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7IGl0ZW1zOiB7IHR5cGU6ICdudW1iZXInIH0sIHR5cGU6ICdhcnJheScgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7IHR5cGU6ICdudW1iZXInIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnY2hlY2tib3gnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHsgdHlwZTogJ2Jvb2xlYW4nIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MTU5I3NlY3Rpb24tM1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnb2JqZWN0JyB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ2FycmF5JyB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnYm9vbGVhbicgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICdudWxsJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdyaWNoVGV4dCc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ3JhZGlvJzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgIGVudW06IHJldHVybk9wdGlvbkVudW1zKGZpZWxkLm9wdGlvbnMpLFxuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdzZWxlY3QnOiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RUeXBlOiBKU09OU2NoZW1hNCA9IHtcbiAgICAgICAgICAgICAgZW51bTogcmV0dXJuT3B0aW9uRW51bXMoZmllbGQub3B0aW9ucyksXG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBpdGVtczogc2VsZWN0VHlwZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHNlbGVjdFR5cGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdwb2ludCc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgbWF4SXRlbXM6IDIsXG4gICAgICAgICAgICAgIG1pbkl0ZW1zOiAyLFxuICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdyZWxhdGlvbnNoaXAnOiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbmVPZjogZmllbGQucmVsYXRpb25Uby5tYXAoKHJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Q6IHJlbGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbGxlY3Rpb25JREZpZWxkVHlwZXNbcmVsYXRpb25dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3ZhbHVlJywgJ3JlbGF0aW9uVG8nXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZU9mOiBmaWVsZC5yZWxhdGlvblRvLm1hcCgocmVsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25Ubzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdDogcmVsYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtyZWxhdGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3ZhbHVlJywgJ3JlbGF0aW9uVG8nXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgICBvbmVPZjogZmllbGQucmVsYXRpb25Uby5tYXAoKHJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Q6IHJlbGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbklERmllbGRUeXBlc1tyZWxhdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke3JlbGF0aW9ufWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogWyd2YWx1ZScsICdyZWxhdGlvblRvJ10sXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbklERmllbGRUeXBlc1tmaWVsZC5yZWxhdGlvblRvXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5yZWxhdGlvblRvfWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbGxlY3Rpb25JREZpZWxkVHlwZXNbZmllbGQucmVsYXRpb25Ub10sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke2ZpZWxkLnJlbGF0aW9uVG99YCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ3VwbG9hZCc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbGxlY3Rpb25JREZpZWxkVHlwZXNbZmllbGQucmVsYXRpb25Ub10sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke2ZpZWxkLnJlbGF0aW9uVG99YCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogZmllbGQuYmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrRmllbGRTY2hlbWFzID0gZmllbGRzVG9KU09OU2NoZW1hKFxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzLFxuICAgICAgICAgICAgICAgICAgICBibG9jay5maWVsZHMsXG4gICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tTY2hlbWE6IEpTT05TY2hlbWE0ID0ge1xuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5ibG9ja0ZpZWxkU2NoZW1hcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICAgICAgIGJsb2NrVHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Q6IGJsb2NrLnNsdWcsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsnYmxvY2tUeXBlJywgLi4uYmxvY2tGaWVsZFNjaGVtYXMucmVxdWlyZWRdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLmludGVyZmFjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLnNldChibG9jay5pbnRlcmZhY2VOYW1lLCBibG9ja1NjaGVtYSlcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICRyZWY6IGAjL2RlZmluaXRpb25zLyR7YmxvY2suaW50ZXJmYWNlTmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBibG9ja1NjaGVtYVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAuLi5maWVsZHNUb0pTT05TY2hlbWEoXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzLFxuICAgICAgICAgICAgICAgICAgZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5pbnRlcmZhY2VOYW1lKSB7XG4gICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucy5zZXQoZmllbGQuaW50ZXJmYWNlTmFtZSwgZmllbGRTY2hlbWEpXG5cbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5pbnRlcmZhY2VOYW1lfWAsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAncm93JzpcbiAgICAgICAgICBjYXNlICdjb2xsYXBzaWJsZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkU2NoZW1hID0gZmllbGRzVG9KU09OU2NoZW1hKFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzLFxuICAgICAgICAgICAgICBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoaWxkU2NoZW1hLnByb3BlcnRpZXMpLmZvckVhY2goKFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgICAgZmllbGRTY2hlbWFzLnNldChwcm9wTmFtZSwgcHJvcFNjaGVtYSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjaGlsZFNjaGVtYS5yZXF1aXJlZC5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgICAgICByZXF1aXJlZEZpZWxkcy5hZGQocHJvcE5hbWUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICAgICAgZmllbGQudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRTY2hlbWEgPSBmaWVsZHNUb0pTT05TY2hlbWEoXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbklERmllbGRUeXBlcyxcbiAgICAgICAgICAgICAgICB0YWIuZmllbGRzLFxuICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAodGFiSGFzTmFtZSh0YWIpKSB7XG4gICAgICAgICAgICAgICAgLy8gY291bGQgaGF2ZSBpbnRlcmZhY2VcbiAgICAgICAgICAgICAgICBmaWVsZFNjaGVtYXMuc2V0KHRhYi5uYW1lLCB7XG4gICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgIC4uLmNoaWxkU2NoZW1hLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRGaWVsZHMuYWRkKHRhYi5uYW1lKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoaWxkU2NoZW1hLnByb3BlcnRpZXMpLmZvckVhY2goKFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkU2NoZW1hcy5zZXQocHJvcE5hbWUsIHByb3BTY2hlbWEpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjaGlsZFNjaGVtYS5yZXF1aXJlZC5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRGaWVsZHMuYWRkKHByb3BOYW1lKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2dyb3VwJzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIC4uLmZpZWxkc1RvSlNPTlNjaGVtYShjb2xsZWN0aW9uSURGaWVsZFR5cGVzLCBmaWVsZC5maWVsZHMsIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5pbnRlcmZhY2VOYW1lKSB7XG4gICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucy5zZXQoZmllbGQuaW50ZXJmYWNlTmFtZSwgZmllbGRTY2hlbWEpXG5cbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5pbnRlcmZhY2VOYW1lfWAsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGRTY2hlbWEgJiYgZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgICAgICBmaWVsZFNjaGVtYXMuc2V0KGZpZWxkLm5hbWUsIGZpZWxkU2NoZW1hKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkU2NoZW1hc1xuICAgICAgfSwgbmV3IE1hcDxzdHJpbmcsIEpTT05TY2hlbWE0PigpKSxcbiAgICApLFxuICAgIHJlcXVpcmVkOiBBcnJheS5mcm9tKHJlcXVpcmVkRmllbGRzKSxcbiAgfVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgYW5kIGlzIGV4cG9ydGVkIHRocm91Z2ggcGF5bG9hZC91dGlsaXRpZXNcbmV4cG9ydCBmdW5jdGlvbiBlbnRpdHlUb0pTT05TY2hlbWEoXG4gIGNvbmZpZzogU2FuaXRpemVkQ29uZmlnLFxuICBpbmNvbWluZ0VudGl0eTogU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB8IFNhbml0aXplZEdsb2JhbENvbmZpZyxcbiAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zOiBNYXA8c3RyaW5nLCBKU09OU2NoZW1hND4sXG4gIGRlZmF1bHRJRFR5cGU6ICdudW1iZXInIHwgJ3RleHQnLFxuKTogSlNPTlNjaGVtYTQge1xuICBjb25zdCBlbnRpdHk6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfCBTYW5pdGl6ZWRHbG9iYWxDb25maWcgPSBkZWVwQ29weU9iamVjdChpbmNvbWluZ0VudGl0eSlcbiAgY29uc3QgdGl0bGUgPSBlbnRpdHkudHlwZXNjcmlwdD8uaW50ZXJmYWNlXG4gICAgPyBlbnRpdHkudHlwZXNjcmlwdC5pbnRlcmZhY2VcbiAgICA6IHNpbmd1bGFyKHRvV29yZHMoZW50aXR5LnNsdWcsIHRydWUpKVxuXG4gIGNvbnN0IGlkRmllbGQ6IEZpZWxkQWZmZWN0aW5nRGF0YSA9IHsgbmFtZTogJ2lkJywgcmVxdWlyZWQ6IHRydWUsIHR5cGU6IGRlZmF1bHRJRFR5cGUgYXMgJ3RleHQnIH1cbiAgY29uc3QgY3VzdG9tSWRGaWVsZCA9IGVudGl0eS5maWVsZHMuZmluZChcbiAgICAoZmllbGQpID0+IGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcsXG4gICkgYXMgRmllbGRBZmZlY3RpbmdEYXRhXG5cbiAgaWYgKGN1c3RvbUlkRmllbGQgJiYgY3VzdG9tSWRGaWVsZC50eXBlICE9PSAnZ3JvdXAnICYmIGN1c3RvbUlkRmllbGQudHlwZSAhPT0gJ3RhYicpIHtcbiAgICBjdXN0b21JZEZpZWxkLnJlcXVpcmVkID0gdHJ1ZVxuICB9IGVsc2Uge1xuICAgIGVudGl0eS5maWVsZHMudW5zaGlmdChpZEZpZWxkKVxuICB9XG5cbiAgLy8gbWFyayB0aW1lc3RhbXAgZmllbGRzIHJlcXVpcmVkXG4gIGlmICgndGltZXN0YW1wcycgaW4gZW50aXR5ICYmIGVudGl0eS50aW1lc3RhbXBzICE9PSBmYWxzZSkge1xuICAgIGVudGl0eS5maWVsZHMgPSBlbnRpdHkuZmllbGRzLm1hcCgoZmllbGQpID0+IHtcbiAgICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiAoZmllbGQubmFtZSA9PT0gJ2NyZWF0ZWRBdCcgfHwgZmllbGQubmFtZSA9PT0gJ3VwZGF0ZWRBdCcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZmllbGQsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWVsZFxuICAgIH0pXG4gIH1cblxuICBpZiAoJ2F1dGgnIGluIGVudGl0eSAmJiBlbnRpdHkuYXV0aCAmJiAhZW50aXR5LmF1dGg/LmRpc2FibGVMb2NhbFN0cmF0ZWd5KSB7XG4gICAgZW50aXR5LmZpZWxkcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgfSlcbiAgfVxuXG4gIC8vIHVzZWQgZm9yIHJlbGF0aW9uc2hpcCBmaWVsZHMsIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHVzZSBhIHN0cmluZyBvciBudW1iZXIgdHlwZSBmb3IgdGhlIElEXG4gIGNvbnN0IGNvbGxlY3Rpb25JREZpZWxkVHlwZXM6IHsgW2tleTogc3RyaW5nXTogJ251bWJlcicgfCAnc3RyaW5nJyB9ID0gY29uZmlnLmNvbGxlY3Rpb25zLnJlZHVjZShcbiAgICAoYWNjLCBjb2xsZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21Db2xsZWN0aW9uSWRGaWVsZCA9IGNvbGxlY3Rpb24uZmllbGRzLmZpbmQoXG4gICAgICAgIChmaWVsZCkgPT4gJ25hbWUnIGluIGZpZWxkICYmIGZpZWxkLm5hbWUgPT09ICdpZCcsXG4gICAgICApXG5cbiAgICAgIGFjY1tjb2xsZWN0aW9uLnNsdWddID0gZGVmYXVsdElEVHlwZSA9PT0gJ3RleHQnID8gJ3N0cmluZycgOiAnbnVtYmVyJ1xuXG4gICAgICBpZiAoY3VzdG9tQ29sbGVjdGlvbklkRmllbGQpIHtcbiAgICAgICAgYWNjW2NvbGxlY3Rpb24uc2x1Z10gPSBjdXN0b21Db2xsZWN0aW9uSWRGaWVsZC50eXBlID09PSAnbnVtYmVyJyA/ICdudW1iZXInIDogJ3N0cmluZydcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sXG4gICAge30sXG4gIClcblxuICByZXR1cm4ge1xuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICB0aXRsZSxcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAuLi5maWVsZHNUb0pTT05TY2hlbWEoY29sbGVjdGlvbklERmllbGRUeXBlcywgZW50aXR5LmZpZWxkcywgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zKSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlnVG9KU09OU2NoZW1hKFxuICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgZGVmYXVsdElEVHlwZT86ICdudW1iZXInIHwgJ3RleHQnLFxuKTogSlNPTlNjaGVtYTQge1xuICAvLyBhIG11dGFibGUgTWFwIHRvIHN0b3JlIGN1c3RvbSB0b3AtbGV2ZWwgYGludGVyZmFjZU5hbWVgIHR5cGVzXG4gIGNvbnN0IGludGVyZmFjZU5hbWVEZWZpbml0aW9uczogTWFwPHN0cmluZywgSlNPTlNjaGVtYTQ+ID0gbmV3IE1hcCgpXG4gIGNvbnN0IGVudGl0eURlZmluaXRpb25zOiB7IFtrOiBzdHJpbmddOiBKU09OU2NoZW1hNCB9ID0gW1xuICAgIC4uLmNvbmZpZy5nbG9iYWxzLFxuICAgIC4uLmNvbmZpZy5jb2xsZWN0aW9ucyxcbiAgXS5yZWR1Y2UoKGFjYywgZW50aXR5KSA9PiB7XG4gICAgYWNjW2VudGl0eS5zbHVnXSA9IGVudGl0eVRvSlNPTlNjaGVtYShjb25maWcsIGVudGl0eSwgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLCBkZWZhdWx0SURUeXBlKVxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG5cbiAgcmV0dXJuIHtcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgZGVmaW5pdGlvbnM6IHsgLi4uZW50aXR5RGVmaW5pdGlvbnMsIC4uLk9iamVjdC5mcm9tRW50cmllcyhpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnMpIH0sXG4gICAgcHJvcGVydGllczoge1xuICAgICAgY29sbGVjdGlvbnM6IGdlbmVyYXRlRW50aXR5U2NoZW1hcyhjb25maWcuY29sbGVjdGlvbnMgfHwgW10pLFxuICAgICAgZ2xvYmFsczogZ2VuZXJhdGVFbnRpdHlTY2hlbWFzKGNvbmZpZy5nbG9iYWxzIHx8IFtdKSxcbiAgICB9LFxuICAgIHJlcXVpcmVkOiBbJ2NvbGxlY3Rpb25zJywgJ2dsb2JhbHMnXSxcbiAgICB0aXRsZTogJ0NvbmZpZycsXG4gICAgdHlwZTogJ29iamVjdCcsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJlbnRpdHlUb0pTT05TY2hlbWEiLCJjb25maWdUb0pTT05TY2hlbWEiLCJwcm9wZXJ0eUlzUmVxdWlyZWQiLCJmaWVsZCIsImZpZWxkQWZmZWN0c0RhdGEiLCJyZXF1aXJlZCIsInR5cGUiLCJhZG1pbiIsImNvbmRpdGlvbiIsImFjY2VzcyIsInJlYWQiLCJmaWVsZHMiLCJmaW5kIiwic3ViRmllbGQiLCJ0YWJzIiwic29tZSIsInRhYiIsInJldHVybk9wdGlvbkVudW1zIiwib3B0aW9ucyIsIm1hcCIsIm9wdGlvbiIsInZhbHVlIiwiZ2VuZXJhdGVFbnRpdHlTY2hlbWFzIiwiZW50aXRpZXMiLCJwcm9wZXJ0aWVzIiwicmVkdWNlIiwiYWNjIiwic2x1ZyIsIiRyZWYiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsIk9iamVjdCIsImtleXMiLCJmaWVsZHNUb0pTT05TY2hlbWEiLCJjb2xsZWN0aW9uSURGaWVsZFR5cGVzIiwiaW50ZXJmYWNlTmFtZURlZmluaXRpb25zIiwicmVxdWlyZWRGaWVsZHMiLCJTZXQiLCJmaWx0ZXIiLCJuYW1lIiwiZnJvbUVudHJpZXMiLCJmaWVsZFNjaGVtYXMiLCJmaWVsZFNjaGVtYSIsImhhc01hbnkiLCJpdGVtcyIsIm9uZU9mIiwiZW51bSIsInNlbGVjdFR5cGUiLCJtYXhJdGVtcyIsIm1pbkl0ZW1zIiwiQXJyYXkiLCJpc0FycmF5IiwicmVsYXRpb25UbyIsInJlbGF0aW9uIiwiY29uc3QiLCJibG9ja3MiLCJibG9jayIsImJsb2NrRmllbGRTY2hlbWFzIiwiYmxvY2tTY2hlbWEiLCJibG9ja1R5cGUiLCJpbnRlcmZhY2VOYW1lIiwic2V0IiwiY2hpbGRTY2hlbWEiLCJlbnRyaWVzIiwiZm9yRWFjaCIsInByb3BOYW1lIiwicHJvcFNjaGVtYSIsImFkZCIsInRhYkhhc05hbWUiLCJNYXAiLCJmcm9tIiwiY29uZmlnIiwiaW5jb21pbmdFbnRpdHkiLCJkZWZhdWx0SURUeXBlIiwiZW50aXR5IiwiZGVlcENvcHlPYmplY3QiLCJ0aXRsZSIsInR5cGVzY3JpcHQiLCJpbnRlcmZhY2UiLCJzaW5ndWxhciIsInRvV29yZHMiLCJpZEZpZWxkIiwiY3VzdG9tSWRGaWVsZCIsInVuc2hpZnQiLCJ0aW1lc3RhbXBzIiwiYXV0aCIsImRpc2FibGVMb2NhbFN0cmF0ZWd5IiwicHVzaCIsImNvbGxlY3Rpb25zIiwiY29sbGVjdGlvbiIsImN1c3RvbUNvbGxlY3Rpb25JZEZpZWxkIiwiZW50aXR5RGVmaW5pdGlvbnMiLCJnbG9iYWxzIiwiZGVmaW5pdGlvbnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBa2JnQkEsa0JBQWtCO2VBQWxCQTs7SUFvRUFDLGtCQUFrQjtlQUFsQkE7OzsyQkFwZlM7dUJBT29CO2dDQUNkOzhCQUNQO0FBRXhCLE1BQU1DLHFCQUFxQixDQUFDQztJQUMxQixJQUFJQyxJQUFBQSx1QkFBZ0IsRUFBQ0QsVUFBVSxjQUFjQSxTQUFTQSxNQUFNRSxRQUFRLEtBQUssTUFBTSxPQUFPO0lBRXRGLElBQUksWUFBWUYsU0FBU0EsTUFBTUcsSUFBSSxLQUFLLFNBQVM7UUFDL0MsSUFBSUgsTUFBTUksS0FBSyxFQUFFQyxhQUFhTCxNQUFNTSxNQUFNLEVBQUVDLE1BQU0sT0FBTztRQUN6RCxPQUFPUCxNQUFNUSxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDQyxXQUFhWCxtQkFBbUJXO0lBQzVEO0lBRUEsSUFBSVYsTUFBTUcsSUFBSSxLQUFLLFFBQVE7UUFDekIsT0FBT0gsTUFBTVcsSUFBSSxDQUFDQyxJQUFJLENBQ3BCLENBQUND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
486
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29uZmlnVG9KU09OU2NoZW1hLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTQsIEpTT05TY2hlbWE0VHlwZU5hbWUgfSBmcm9tICdqc29uLXNjaGVtYSdcblxuaW1wb3J0IHsgc2luZ3VsYXIgfSBmcm9tICdwbHVyYWxpemUnXG5cbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB9IGZyb20gJy4uL2NvbGxlY3Rpb25zL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29uZmlnIH0gZnJvbSAnLi4vZXhwb3J0cy9jb25maWcnXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIE9wdGlvbiB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZEdsb2JhbENvbmZpZyB9IGZyb20gJy4uL2dsb2JhbHMvY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB7IGRlZXBDb3B5T2JqZWN0IH0gZnJvbSAnLi9kZWVwQ29weU9iamVjdCdcbmltcG9ydCB7IHRvV29yZHMgfSBmcm9tICcuL2Zvcm1hdExhYmVscydcblxuY29uc3QgZmllbGRJc1JlcXVpcmVkID0gKGZpZWxkOiBGaWVsZCkgPT4ge1xuICBjb25zdCBpc0NvbmRpdGlvbmFsID0gQm9vbGVhbihmaWVsZD8uYWRtaW4gJiYgZmllbGQ/LmFkbWluPy5jb25kaXRpb24pXG4gIGlmIChpc0NvbmRpdGlvbmFsKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBpc01hcmtlZFJlcXVpcmVkID0gJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJiBmaWVsZC5yZXF1aXJlZCA9PT0gdHJ1ZVxuICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgaXNNYXJrZWRSZXF1aXJlZCkgcmV0dXJuIHRydWVcblxuICAvLyBpZiBhbnkgc3ViZmllbGRzIGFyZSByZXF1aXJlZCwgdGhpcyBmaWVsZCBpcyByZXF1aXJlZFxuICBpZiAoJ2ZpZWxkcycgaW4gZmllbGQgJiYgZmllbGQudHlwZSAhPT0gJ2FycmF5Jykge1xuICAgIHJldHVybiBmaWVsZC5maWVsZHMuc29tZSgoc3ViRmllbGQpID0+IGZpZWxkSXNSZXF1aXJlZChzdWJGaWVsZCkpXG4gIH1cblxuICAvLyBpZiBhbnkgdGFiIHN1YmZpZWxkcyBoYXZlIHJlcXVpcmVkIGZpZWxkcywgdGhpcyBmaWVsZCBpcyByZXF1aXJlZFxuICBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYnMnKSB7XG4gICAgcmV0dXJuIGZpZWxkLnRhYnMuc29tZSgodGFiKSA9PiB7XG4gICAgICBpZiAoJ25hbWUnIGluIHRhYikge1xuICAgICAgICByZXR1cm4gdGFiLmZpZWxkcy5zb21lKChzdWJGaWVsZCkgPT4gZmllbGRJc1JlcXVpcmVkKHN1YkZpZWxkKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRPcHRpb25FbnVtcyhvcHRpb25zOiBPcHRpb25bXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIG9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb24udmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uXG4gIH0pXG59XG5cbi8qKlxuICogVGhpcyBpcyB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBUeXBlU2NyaXB0IHR5cGVzIChwYXlsb2FkLXR5cGVzLnRzKSB3aXRoIHRoZSBwYXlsb2FkIGdlbmVyYXRlOnR5cGVzIGNvbW1hbmQuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlRW50aXR5U2NoZW1hcyhcbiAgZW50aXRpZXM6IChTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIHwgU2FuaXRpemVkR2xvYmFsQ29uZmlnKVtdLFxuKTogSlNPTlNjaGVtYTQge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gWy4uLmVudGl0aWVzXS5yZWR1Y2UoKGFjYywgeyBzbHVnIH0pID0+IHtcbiAgICBhY2Nbc2x1Z10gPSB7XG4gICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke3NsdWd9YCxcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9KVxuXG4gIHJldHVybiB7XG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgIHByb3BlcnRpZXMsXG4gICAgcmVxdWlyZWQ6IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLFxuICAgIHR5cGU6ICdvYmplY3QnLFxuICB9XG59XG5cbmZ1bmN0aW9uIHdpdGhOdWxsYWJsZVR5cGUoXG4gIGZpZWxkVHlwZTogSlNPTlNjaGVtYTRUeXBlTmFtZSxcbiAgaXNSZXF1aXJlZDogYm9vbGVhbixcbik6IEpTT05TY2hlbWE0VHlwZU5hbWUgfCBKU09OU2NoZW1hNFR5cGVOYW1lW10ge1xuICBjb25zdCBmaWVsZFR5cGVzID0gW2ZpZWxkVHlwZV1cbiAgaWYgKGlzUmVxdWlyZWQpIHJldHVybiBmaWVsZFR5cGVcbiAgZmllbGRUeXBlcy5wdXNoKCdudWxsJylcbiAgcmV0dXJuIGZpZWxkVHlwZXNcbn1cblxuZnVuY3Rpb24gZmllbGRzVG9KU09OU2NoZW1hKFxuICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzOiB7IFtrZXk6IHN0cmluZ106ICdudW1iZXInIHwgJ3N0cmluZycgfSxcbiAgZmllbGRzOiBGaWVsZFtdLFxuICBpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnM6IE1hcDxzdHJpbmcsIEpTT05TY2hlbWE0Pixcbik6IHtcbiAgcHJvcGVydGllczoge1xuICAgIFtrOiBzdHJpbmddOiBKU09OU2NoZW1hNFxuICB9XG4gIHJlcXVpcmVkOiBzdHJpbmdbXVxufSB7XG4gIGNvbnN0IHJlcXVpcmVkRmllbGROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBmaWVsZHMucmVkdWNlKChmaWVsZFNjaGVtYXMsIGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBmaWVsZElzUmVxdWlyZWQoZmllbGQpXG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSByZXF1aXJlZEZpZWxkTmFtZXMuYWRkKGZpZWxkLm5hbWUpXG5cbiAgICAgICAgbGV0IGZpZWxkU2NoZW1hOiBKU09OU2NoZW1hNFxuICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgY2FzZSAnY29kZSc6XG4gICAgICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZSgnc3RyaW5nJywgaXNSZXF1aXJlZCkgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgICAgICBpZiAoZmllbGQuaGFzTWFueSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBpdGVtczogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ2FycmF5JywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0geyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdudW1iZXInLCBpc1JlcXVpcmVkKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2NoZWNrYm94Jzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ2Jvb2xlYW4nLCBpc1JlcXVpcmVkKSB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2pzb24nOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogWydvYmplY3QnLCAnYXJyYXknLCAnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJywgJ251bGwnXSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAncmljaFRleHQnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZSgnYXJyYXknLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdyYWRpbyc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICBlbnVtOiBidWlsZE9wdGlvbkVudW1zKGZpZWxkLm9wdGlvbnMpLFxuICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdzdHJpbmcnLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdzZWxlY3QnOiB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25FbnVtcyA9IGJ1aWxkT3B0aW9uRW51bXMoZmllbGQub3B0aW9ucylcblxuICAgICAgICAgICAgaWYgKGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgIGVudW06IG9wdGlvbkVudW1zLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdhcnJheScsIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBvcHRpb25FbnVtcyxcbiAgICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdzdHJpbmcnLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ3BvaW50Jzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBtYXhJdGVtczogMixcbiAgICAgICAgICAgICAgbWluSXRlbXM6IDIsXG4gICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ2FycmF5JywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ3JlbGF0aW9uc2hpcCc6IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgICBvbmVPZjogZmllbGQucmVsYXRpb25Uby5tYXAoKHJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25Ubzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0OiByZWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjb2xsZWN0aW9uSURGaWVsZFR5cGVzW3JlbGF0aW9uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWY6IGAjL2RlZmluaXRpb25zLyR7cmVsYXRpb259YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogWyd2YWx1ZScsICdyZWxhdGlvblRvJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ2FycmF5JywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICAgICAgb25lT2Y6IGZpZWxkLnJlbGF0aW9uVG8ubWFwKChyZWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0OiByZWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbGxlY3Rpb25JREZpZWxkVHlwZXNbcmVsYXRpb25dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtyZWxhdGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsndmFsdWUnLCAncmVsYXRpb25UbyddLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ29iamVjdCcsIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbGxlY3Rpb25JREZpZWxkVHlwZXNbZmllbGQucmVsYXRpb25Ub10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke2ZpZWxkLnJlbGF0aW9uVG99YCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdhcnJheScsIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGNvbGxlY3Rpb25JREZpZWxkVHlwZXNbZmllbGQucmVsYXRpb25Ub10sIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5yZWxhdGlvblRvfWAsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICd1cGxvYWQnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBjb2xsZWN0aW9uSURGaWVsZFR5cGVzW2ZpZWxkLnJlbGF0aW9uVG9dLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5yZWxhdGlvblRvfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNSZXF1aXJlZCkgZmllbGRTY2hlbWEub25lT2YucHVzaCh7IHR5cGU6ICdudWxsJyB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogZmllbGQuYmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrRmllbGRTY2hlbWFzID0gZmllbGRzVG9KU09OU2NoZW1hKFxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzLFxuICAgICAgICAgICAgICAgICAgICBibG9jay5maWVsZHMsXG4gICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tTY2hlbWE6IEpTT05TY2hlbWE0ID0ge1xuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5ibG9ja0ZpZWxkU2NoZW1hcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICAgICAgIGJsb2NrVHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Q6IGJsb2NrLnNsdWcsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsnYmxvY2tUeXBlJywgLi4uYmxvY2tGaWVsZFNjaGVtYXMucmVxdWlyZWRdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLmludGVyZmFjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLnNldChibG9jay5pbnRlcmZhY2VOYW1lLCBibG9ja1NjaGVtYSlcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICRyZWY6IGAjL2RlZmluaXRpb25zLyR7YmxvY2suaW50ZXJmYWNlTmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBibG9ja1NjaGVtYVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdhcnJheScsIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAuLi5maWVsZHNUb0pTT05TY2hlbWEoXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzLFxuICAgICAgICAgICAgICAgICAgZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ2FycmF5JywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5pbnRlcmZhY2VOYW1lKSB7XG4gICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucy5zZXQoZmllbGQuaW50ZXJmYWNlTmFtZSwgZmllbGRTY2hlbWEpXG5cbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5pbnRlcmZhY2VOYW1lfWAsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAncm93JzpcbiAgICAgICAgICBjYXNlICdjb2xsYXBzaWJsZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkU2NoZW1hID0gZmllbGRzVG9KU09OU2NoZW1hKFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzLFxuICAgICAgICAgICAgICBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoaWxkU2NoZW1hLnByb3BlcnRpZXMpLmZvckVhY2goKFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgICAgZmllbGRTY2hlbWFzLnNldChwcm9wTmFtZSwgcHJvcFNjaGVtYSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjaGlsZFNjaGVtYS5yZXF1aXJlZC5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgICAgICByZXF1aXJlZEZpZWxkTmFtZXMuYWRkKHByb3BOYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAndGFicyc6IHtcbiAgICAgICAgICAgIGZpZWxkLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkU2NoZW1hID0gZmllbGRzVG9KU09OU2NoZW1hKFxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25JREZpZWxkVHlwZXMsXG4gICAgICAgICAgICAgICAgdGFiLmZpZWxkcyxcbiAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnMsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKHRhYkhhc05hbWUodGFiKSkge1xuICAgICAgICAgICAgICAgIC8vIGNvdWxkIGhhdmUgaW50ZXJmYWNlXG4gICAgICAgICAgICAgICAgZmllbGRTY2hlbWFzLnNldCh0YWIubmFtZSwge1xuICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgICAuLi5jaGlsZFNjaGVtYSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJlcXVpcmVkRmllbGROYW1lcy5hZGQodGFiLm5hbWUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hpbGRTY2hlbWEucHJvcGVydGllcykuZm9yRWFjaCgoW3Byb3BOYW1lLCBwcm9wU2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZmllbGRTY2hlbWFzLnNldChwcm9wTmFtZSwgcHJvcFNjaGVtYSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGNoaWxkU2NoZW1hLnJlcXVpcmVkLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXF1aXJlZEZpZWxkTmFtZXMuYWRkKHByb3BOYW1lKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2dyb3VwJzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIC4uLmZpZWxkc1RvSlNPTlNjaGVtYShjb2xsZWN0aW9uSURGaWVsZFR5cGVzLCBmaWVsZC5maWVsZHMsIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5pbnRlcmZhY2VOYW1lKSB7XG4gICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucy5zZXQoZmllbGQuaW50ZXJmYWNlTmFtZSwgZmllbGRTY2hlbWEpXG5cbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5pbnRlcmZhY2VOYW1lfWAsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGRTY2hlbWEgJiYgZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgICAgICBmaWVsZFNjaGVtYXMuc2V0KGZpZWxkLm5hbWUsIGZpZWxkU2NoZW1hKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkU2NoZW1hc1xuICAgICAgfSwgbmV3IE1hcDxzdHJpbmcsIEpTT05TY2hlbWE0PigpKSxcbiAgICApLFxuICAgIHJlcXVpcmVkOiBBcnJheS5mcm9tKHJlcXVpcmVkRmllbGROYW1lcyksXG4gIH1cbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIGFuZCBpcyBleHBvcnRlZCB0aHJvdWdoIHBheWxvYWQvdXRpbGl0aWVzXG5leHBvcnQgZnVuY3Rpb24gZW50aXR5VG9KU09OU2NoZW1hKFxuICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgaW5jb21pbmdFbnRpdHk6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfCBTYW5pdGl6ZWRHbG9iYWxDb25maWcsXG4gIGludGVyZmFjZU5hbWVEZWZpbml0aW9uczogTWFwPHN0cmluZywgSlNPTlNjaGVtYTQ+LFxuICBkZWZhdWx0SURUeXBlOiAnbnVtYmVyJyB8ICd0ZXh0Jyxcbik6IEpTT05TY2hlbWE0IHtcbiAgY29uc3QgZW50aXR5OiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIHwgU2FuaXRpemVkR2xvYmFsQ29uZmlnID0gZGVlcENvcHlPYmplY3QoaW5jb21pbmdFbnRpdHkpXG4gIGNvbnN0IHRpdGxlID0gZW50aXR5LnR5cGVzY3JpcHQ/LmludGVyZmFjZVxuICAgID8gZW50aXR5LnR5cGVzY3JpcHQuaW50ZXJmYWNlXG4gICAgOiBzaW5ndWxhcih0b1dvcmRzKGVudGl0eS5zbHVnLCB0cnVlKSlcblxuICBjb25zdCBpZEZpZWxkOiBGaWVsZEFmZmVjdGluZ0RhdGEgPSB7IG5hbWU6ICdpZCcsIHJlcXVpcmVkOiB0cnVlLCB0eXBlOiBkZWZhdWx0SURUeXBlIGFzICd0ZXh0JyB9XG4gIGNvbnN0IGN1c3RvbUlkRmllbGQgPSBlbnRpdHkuZmllbGRzLmZpbmQoXG4gICAgKGZpZWxkKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBmaWVsZC5uYW1lID09PSAnaWQnLFxuICApIGFzIEZpZWxkQWZmZWN0aW5nRGF0YVxuXG4gIGlmIChjdXN0b21JZEZpZWxkICYmIGN1c3RvbUlkRmllbGQudHlwZSAhPT0gJ2dyb3VwJyAmJiBjdXN0b21JZEZpZWxkLnR5cGUgIT09ICd0YWInKSB7XG4gICAgY3VzdG9tSWRGaWVsZC5yZXF1aXJlZCA9IHRydWVcbiAgfSBlbHNlIHtcbiAgICBlbnRpdHkuZmllbGRzLnVuc2hpZnQoaWRGaWVsZClcbiAgfVxuXG4gIC8vIG1hcmsgdGltZXN0YW1wIGZpZWxkcyByZXF1aXJlZFxuICBpZiAoJ3RpbWVzdGFtcHMnIGluIGVudGl0eSAmJiBlbnRpdHkudGltZXN0YW1wcyAhPT0gZmFsc2UpIHtcbiAgICBlbnRpdHkuZmllbGRzID0gZW50aXR5LmZpZWxkcy5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgKGZpZWxkLm5hbWUgPT09ICdjcmVhdGVkQXQnIHx8IGZpZWxkLm5hbWUgPT09ICd1cGRhdGVkQXQnKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmZpZWxkLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmllbGRcbiAgICB9KVxuICB9XG5cbiAgaWYgKCdhdXRoJyBpbiBlbnRpdHkgJiYgZW50aXR5LmF1dGggJiYgIWVudGl0eS5hdXRoPy5kaXNhYmxlTG9jYWxTdHJhdGVneSkge1xuICAgIGVudGl0eS5maWVsZHMucHVzaCh7XG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgdHlwZTogJ3RleHQnLFxuICAgIH0pXG4gIH1cblxuICAvLyB1c2VkIGZvciByZWxhdGlvbnNoaXAgZmllbGRzLCB0byBkZXRlcm1pbmUgd2hldGhlciB0byB1c2UgYSBzdHJpbmcgb3IgbnVtYmVyIHR5cGUgZm9yIHRoZSBJRFxuICBjb25zdCBjb2xsZWN0aW9uSURGaWVsZFR5cGVzOiB7IFtrZXk6IHN0cmluZ106ICdudW1iZXInIHwgJ3N0cmluZycgfSA9IGNvbmZpZy5jb2xsZWN0aW9ucy5yZWR1Y2UoXG4gICAgKGFjYywgY29sbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tQ29sbGVjdGlvbklkRmllbGQgPSBjb2xsZWN0aW9uLmZpZWxkcy5maW5kKFxuICAgICAgICAoZmllbGQpID0+ICduYW1lJyBpbiBmaWVsZCAmJiBmaWVsZC5uYW1lID09PSAnaWQnLFxuICAgICAgKVxuXG4gICAgICBhY2NbY29sbGVjdGlvbi5zbHVnXSA9IGRlZmF1bHRJRFR5cGUgPT09ICd0ZXh0JyA/ICdzdHJpbmcnIDogJ251bWJlcidcblxuICAgICAgaWYgKGN1c3RvbUNvbGxlY3Rpb25JZEZpZWxkKSB7XG4gICAgICAgIGFjY1tjb2xsZWN0aW9uLnNsdWddID0gY3VzdG9tQ29sbGVjdGlvbklkRmllbGQudHlwZSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6ICdzdHJpbmcnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LFxuICAgIHt9LFxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgdGl0bGUsXG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgLi4uZmllbGRzVG9KU09OU2NoZW1hKGNvbGxlY3Rpb25JREZpZWxkVHlwZXMsIGVudGl0eS5maWVsZHMsIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyksXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ1RvSlNPTlNjaGVtYShcbiAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWcsXG4gIGRlZmF1bHRJRFR5cGU/OiAnbnVtYmVyJyB8ICd0ZXh0Jyxcbik6IEpTT05TY2hlbWE0IHtcbiAgLy8gYSBtdXRhYmxlIE1hcCB0byBzdG9yZSBjdXN0b20gdG9wLWxldmVsIGBpbnRlcmZhY2VOYW1lYCB0eXBlc1xuICBjb25zdCBpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnM6IE1hcDxzdHJpbmcsIEpTT05TY2hlbWE0PiA9IG5ldyBNYXAoKVxuICBjb25zdCBlbnRpdHlEZWZpbml0aW9uczogeyBbazogc3RyaW5nXTogSlNPTlNjaGVtYTQgfSA9IFtcbiAgICAuLi5jb25maWcuZ2xvYmFscyxcbiAgICAuLi5jb25maWcuY29sbGVjdGlvbnMsXG4gIF0ucmVkdWNlKChhY2MsIGVudGl0eSkgPT4ge1xuICAgIGFjY1tlbnRpdHkuc2x1Z10gPSBlbnRpdHlUb0pTT05TY2hlbWEoY29uZmlnLCBlbnRpdHksIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucywgZGVmYXVsdElEVHlwZSlcbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9KVxuXG4gIHJldHVybiB7XG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgIGRlZmluaXRpb25zOiB7IC4uLmVudGl0eURlZmluaXRpb25zLCAuLi5PYmplY3QuZnJvbUVudHJpZXMoaW50ZXJmYWNlTmFtZURlZmluaXRpb25zKSB9LFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGNvbGxlY3Rpb25zOiBnZW5lcmF0ZUVudGl0eVNjaGVtYXMoY29uZmlnLmNvbGxlY3Rpb25zIHx8IFtdKSxcbiAgICAgIGdsb2JhbHM6IGdlbmVyYXRlRW50aXR5U2NoZW1hcyhjb25maWcuZ2xvYmFscyB8fCBbXSksXG4gICAgfSxcbiAgICByZXF1aXJlZDogWydjb2xsZWN0aW9ucycsICdnbG9iYWxzJ10sXG4gICAgdGl0bGU6ICdDb25maWcnLFxuICAgIHR5cGU6ICdvYmplY3QnLFxuICB9XG59XG4iXSwibmFtZXMiOlsiZW50aXR5VG9KU09OU2NoZW1hIiwiY29uZmlnVG9KU09OU2NoZW1hIiwiZmllbGRJc1JlcXVpcmVkIiwiZmllbGQiLCJpc0NvbmRpdGlvbmFsIiwiQm9vbGVhbiIsImFkbWluIiwiY29uZGl0aW9uIiwiaXNNYXJrZWRSZXF1aXJlZCIsInJlcXVpcmVkIiwiZmllbGRBZmZlY3RzRGF0YSIsInR5cGUiLCJmaWVsZHMiLCJzb21lIiwic3ViRmllbGQiLCJ0YWJzIiwidGFiIiwiYnVpbGRPcHRpb25FbnVtcyIsIm9wdGlvbnMiLCJtYXAiLCJvcHRpb24iLCJ2YWx1ZSIsImdlbmVyYXRlRW50aXR5U2NoZW1hcyIsImVudGl0aWVzIiwicHJvcGVydGllcyIsInJlZHVjZSIsImFjYyIsInNsdWciLCIkcmVmIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJPYmplY3QiLCJrZXlzIiwid2l0aE51bGxhYmxlVHlwZSIsImZpZWxkVHlwZSIsImlzUmVxdWlyZWQiLCJmaWVsZFR5cGVzIiwicHVzaCIsImZpZWxkc1RvSlNPTlNjaGVtYSIsImNvbGxlY3Rpb25JREZpZWxkVHlwZXMiLCJpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnMiLCJyZXF1aXJlZEZpZWxkTmFtZXMiLCJTZXQiLCJmcm9tRW50cmllcyIsImZpZWxkU2NoZW1hcyIsImFkZCIsIm5hbWUiLCJmaWVsZFNjaGVtYSIsImhhc01hbnkiLCJpdGVtcyIsImVudW0iLCJvcHRpb25FbnVtcyIsIm1heEl0ZW1zIiwibWluSXRlbXMiLCJBcnJheSIsImlzQXJyYXkiLCJyZWxhdGlvblRvIiwib25lT2YiLCJyZWxhdGlvbiIsImNvbnN0IiwiYmxvY2tzIiwiYmxvY2siLCJibG9ja0ZpZWxkU2NoZW1hcyIsImJsb2NrU2NoZW1hIiwiYmxvY2tUeXBlIiwiaW50ZXJmYWNlTmFtZSIsInNldCIsImNoaWxkU2NoZW1hIiwiZW50cmllcyIsImZvckVhY2giLCJwcm9wTmFtZSIsInByb3BTY2hlbWEiLCJ0YWJIYXNOYW1lIiwiTWFwIiwiZnJvbSIsImNvbmZpZyIsImluY29taW5nRW50aXR5IiwiZGVmYXVsdElEVHlwZSIsImVudGl0eSIsImRlZXBDb3B5T2JqZWN0IiwidGl0bGUiLCJ0eXBlc2NyaXB0IiwiaW50ZXJmYWNlIiwic2luZ3VsYXIiLCJ0b1dvcmRzIiwiaWRGaWVsZCIsImN1c3RvbUlkRmllbGQiLCJmaW5kIiwidW5zaGlmdCIsInRpbWVzdGFtcHMiLCJhdXRoIiwiZGlzYWJsZUxvY2FsU3RyYXRlZ3kiLCJjb2xsZWN0aW9ucyIsImNvbGxlY3Rpb24iLCJjdXN0b21Db2xsZWN0aW9uSWRGaWVsZCIsImVudGl0eURlZmluaXRpb25zIiwiZ2xvYmFscyIsImRlZmluaXRpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQSthZ0JBLGtCQUFrQjtlQUFsQkE7O0lBb0VBQyxrQkFBa0I7ZUFBbEJBOzs7MkJBamZTO3VCQU9vQjtnQ0FDZDs4QkFDUDtBQUV4QixNQUFNQyxrQkFBa0IsQ0FBQ0M7SUFDdkIsTUFBTUMsZ0JBQWdCQyxRQUFRRixPQUFPRyxTQUFTSCxPQUFPRyxPQUFPQztJQUM1RCxJQUFJSCxlQUFlLE9BQU87SUFFMUIsTUFBTUksbUJBQW1CLGNBQWNMLFNBQVNBLE1BQU1NLFFBQVEs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
@@ -11,15 +11,15 @@ describe('configToJSONSchema', ()=>{
11
11
  {
12
12
  fields: [
13
13
  {
14
+ name: 'someRequiredField',
15
+ type: 'array',
14
16
  fields: [
15
17
  {
16
18
  name: 'someRequiredField',
17
19
  required: true,
18
20
  type: 'text'
19
21
  }
20
- ],
21
- name: 'someRequiredField',
22
- type: 'array'
22
+ ]
23
23
  }
24
24
  ],
25
25
  slug: 'test',
@@ -40,7 +40,10 @@ describe('configToJSONSchema', ()=>{
40
40
  additionalProperties: false,
41
41
  properties: {
42
42
  id: {
43
- type: 'string'
43
+ type: [
44
+ 'string',
45
+ 'null'
46
+ ]
44
47
  },
45
48
  someRequiredField: {
46
49
  type: 'string'
@@ -51,7 +54,10 @@ describe('configToJSONSchema', ()=>{
51
54
  ],
52
55
  type: 'object'
53
56
  },
54
- type: 'array'
57
+ type: [
58
+ 'array',
59
+ 'null'
60
+ ]
55
61
  }
56
62
  },
57
63
  required: [
@@ -63,4 +69,4 @@ describe('configToJSONSchema', ()=>{
63
69
  });
64
70
  });
65
71
 
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29uZmlnVG9KU09OU2NoZW1hLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuLi9jb25maWcvdHlwZXMnXG5cbmltcG9ydCB7IHNhbml0aXplQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL3Nhbml0aXplJ1xuaW1wb3J0IHsgY29uZmlnVG9KU09OU2NoZW1hIH0gZnJvbSAnLi9jb25maWdUb0pTT05TY2hlbWEnXG5cbmRlc2NyaWJlKCdjb25maWdUb0pTT05TY2hlbWEnLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgaGFuZGxlIG9wdGlvbmFsIGFycmF5cyB3aXRoIHJlcXVpcmVkIGZpZWxkcycsICgpID0+IHtcbiAgICBjb25zdCBjb25maWc6IENvbmZpZyA9IHtcbiAgICAgIGNvbGxlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogJ3NvbWVSZXF1aXJlZEZpZWxkJyxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIG5hbWU6ICdzb21lUmVxdWlyZWRGaWVsZCcsXG4gICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2x1ZzogJ3Rlc3QnLFxuICAgICAgICAgIHRpbWVzdGFtcHM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCBzYW5pdGl6ZWRDb25maWcgPSBzYW5pdGl6ZUNvbmZpZyhjb25maWcpXG4gICAgY29uc3Qgc2NoZW1hID0gY29uZmlnVG9KU09OU2NoZW1hKHNhbml0aXplZENvbmZpZywgJ3RleHQnKVxuICAgIGV4cGVjdChzY2hlbWE/LmRlZmluaXRpb25zPy50ZXN0KS50b1N0cmljdEVxdWFsKHtcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSxcbiAgICAgICAgc29tZVJlcXVpcmVkRmllbGQ6IHtcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzb21lUmVxdWlyZWRGaWVsZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3NvbWVSZXF1aXJlZEZpZWxkJ10sXG4gICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFsnaWQnXSxcbiAgICAgIHRpdGxlOiAnVGVzdCcsXG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICB9KVxuICB9KVxufSlcbiJdLCJuYW1lcyI6WyJkZXNjcmliZSIsIml0IiwiY29uZmlnIiwiY29sbGVjdGlvbnMiLCJmaWVsZHMiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwic2x1ZyIsInRpbWVzdGFtcHMiLCJzYW5pdGl6ZWRDb25maWciLCJzYW5pdGl6ZUNvbmZpZyIsInNjaGVtYSIsImNvbmZpZ1RvSlNPTlNjaGVtYSIsImV4cGVjdCIsImRlZmluaXRpb25zIiwidGVzdCIsInRvU3RyaWN0RXF1YWwiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJpZCIsInNvbWVSZXF1aXJlZEZpZWxkIiwiaXRlbXMiLCJ0aXRsZSJdLCJtYXBwaW5ncyI6Ijs7OzswQkFFK0I7b0NBQ0k7QUFFbkNBLFNBQVMsc0JBQXNCO0lBQzdCQyxHQUFHLHNEQUFzRDtRQUN2RCxNQUFNQyxTQUFpQjtZQUNyQkMsYUFBYTtnQkFDWDtvQkFDRUMsUUFBUTt3QkFDTjs0QkFDRUEsUUFBUTtnQ0FDTjtvQ0FDRUMsTUFBTTtvQ0FDTkMsVUFBVTtvQ0FDVkMsTUFBTTtnQ0FDUjs2QkFDRDs0QkFDREYsTUFBTTs0QkFDTkUsTUFBTTt3QkFDUjtxQkFDRDtvQkFDREMsTUFBTTtvQkFDTkMsWUFBWTtnQkFDZDthQUNEO1FBQ0g7UUFFQSxNQUFNQyxrQkFBa0JDLElBQUFBLHdCQUFjLEVBQUNUO1FBQ3ZDLE1BQU1VLFNBQVNDLElBQUFBLHNDQUFrQixFQUFDSCxpQkFBaUI7UUFDbkRJLE9BQU9GLFFBQVFHLGFBQWFDLE1BQU1DLGFBQWEsQ0FBQztZQUM5Q0Msc0JBQXNCO1lBQ3RCQyxZQUFZO2dCQUNWQyxJQUFJO29CQUNGYixNQUFNO2dCQUNSO2dCQUNBYyxtQkFBbUI7b0JBQ2pCQyxPQUFPO3dCQUNMSixzQkFBc0I7d0JBQ3RCQyxZQUFZOzRCQUNWQyxJQUFJO2dDQUNGYixNQUFNOzRCQUNSOzRCQUNBYyxtQkFBbUI7Z0NBQ2pCZCxNQUFNOzRCQUNSO3dCQUNGO3dCQUNBRCxVQUFVOzRCQUFDO3lCQUFvQjt3QkFDL0JDLE1BQU07b0JBQ1I7b0JBQ0FBLE1BQU07Z0JBQ1I7WUFDRjtZQUNBRCxVQUFVO2dCQUFDO2FBQUs7WUFDaEJpQixPQUFPO1lBQ1BoQixNQUFNO1FBQ1I7SUFDRjtBQUNGIn0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29uZmlnVG9KU09OU2NoZW1hLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuLi9jb25maWcvdHlwZXMnXG5cbmltcG9ydCB7IHNhbml0aXplQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL3Nhbml0aXplJ1xuaW1wb3J0IHsgY29uZmlnVG9KU09OU2NoZW1hIH0gZnJvbSAnLi9jb25maWdUb0pTT05TY2hlbWEnXG5cbmRlc2NyaWJlKCdjb25maWdUb0pTT05TY2hlbWEnLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgaGFuZGxlIG9wdGlvbmFsIGFycmF5cyB3aXRoIHJlcXVpcmVkIGZpZWxkcycsICgpID0+IHtcbiAgICBjb25zdCBjb25maWc6IENvbmZpZyA9IHtcbiAgICAgIGNvbGxlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ3NvbWVSZXF1aXJlZEZpZWxkJyxcbiAgICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogJ3NvbWVSZXF1aXJlZEZpZWxkJyxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2x1ZzogJ3Rlc3QnLFxuICAgICAgICAgIHRpbWVzdGFtcHM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCBzYW5pdGl6ZWRDb25maWcgPSBzYW5pdGl6ZUNvbmZpZyhjb25maWcpXG4gICAgY29uc3Qgc2NoZW1hID0gY29uZmlnVG9KU09OU2NoZW1hKHNhbml0aXplZENvbmZpZywgJ3RleHQnKVxuXG4gICAgZXhwZWN0KHNjaGVtYT8uZGVmaW5pdGlvbnM/LnRlc3QpLnRvU3RyaWN0RXF1YWwoe1xuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDoge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9LFxuICAgICAgICBzb21lUmVxdWlyZWRGaWVsZDoge1xuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogWydzdHJpbmcnLCAnbnVsbCddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzb21lUmVxdWlyZWRGaWVsZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3NvbWVSZXF1aXJlZEZpZWxkJ10sXG4gICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGU6IFsnYXJyYXknLCAnbnVsbCddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBbJ2lkJ10sXG4gICAgICB0aXRsZTogJ1Rlc3QnLFxuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgfSlcbiAgfSlcbn0pXG4iXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJpdCIsImNvbmZpZyIsImNvbGxlY3Rpb25zIiwiZmllbGRzIiwibmFtZSIsInR5cGUiLCJyZXF1aXJlZCIsInNsdWciLCJ0aW1lc3RhbXBzIiwic2FuaXRpemVkQ29uZmlnIiwic2FuaXRpemVDb25maWciLCJzY2hlbWEiLCJjb25maWdUb0pTT05TY2hlbWEiLCJleHBlY3QiLCJkZWZpbml0aW9ucyIsInRlc3QiLCJ0b1N0cmljdEVxdWFsIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiaWQiLCJzb21lUmVxdWlyZWRGaWVsZCIsIml0ZW1zIiwidGl0bGUiXSwibWFwcGluZ3MiOiI7Ozs7MEJBRStCO29DQUNJO0FBRW5DQSxTQUFTLHNCQUFzQjtJQUM3QkMsR0FBRyxzREFBc0Q7UUFDdkQsTUFBTUMsU0FBaUI7WUFDckJDLGFBQWE7Z0JBQ1g7b0JBQ0VDLFFBQVE7d0JBQ047NEJBQ0VDLE1BQU07NEJBQ05DLE1BQU07NEJBQ05GLFFBQVE7Z0NBQ047b0NBQ0VDLE1BQU07b0NBQ05FLFVBQVU7b0NBQ1ZELE1BQU07Z0NBQ1I7NkJBQ0Q7d0JBQ0g7cUJBQ0Q7b0JBQ0RFLE1BQU07b0JBQ05DLFlBQVk7Z0JBQ2Q7YUFDRDtRQUNIO1FBRUEsTUFBTUMsa0JBQWtCQyxJQUFBQSx3QkFBYyxFQUFDVDtRQUN2QyxNQUFNVSxTQUFTQyxJQUFBQSxzQ0FBa0IsRUFBQ0gsaUJBQWlCO1FBRW5ESSxPQUFPRixRQUFRRyxhQUFhQyxNQUFNQyxhQUFhLENBQUM7WUFDOUNDLHNCQUFzQjtZQUN0QkMsWUFBWTtnQkFDVkMsSUFBSTtvQkFDRmQsTUFBTTtnQkFDUjtnQkFDQWUsbUJBQW1CO29CQUNqQkMsT0FBTzt3QkFDTEosc0JBQXNCO3dCQUN0QkMsWUFBWTs0QkFDVkMsSUFBSTtnQ0FDRmQsTUFBTTtvQ0FBQztvQ0FBVTtpQ0FBTzs0QkFDMUI7NEJBQ0FlLG1CQUFtQjtnQ0FDakJmLE1BQU07NEJBQ1I7d0JBQ0Y7d0JBQ0FDLFVBQVU7NEJBQUM7eUJBQW9CO3dCQUMvQkQsTUFBTTtvQkFDUjtvQkFDQUEsTUFBTTt3QkFBQzt3QkFBUztxQkFBTztnQkFDekI7WUFDRjtZQUNBQyxVQUFVO2dCQUFDO2FBQUs7WUFDaEJnQixPQUFPO1lBQ1BqQixNQUFNO1FBQ1I7SUFDRjtBQUNGIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "2.0.13",
3
+ "version": "2.0.14",
4
4
  "description": "Node, React and MongoDB Headless CMS and Application Framework",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
package/types.d.ts CHANGED
@@ -2,7 +2,7 @@ export * from './dist/types';
2
2
  export type { CreateFormData, Data, Fields, FormField, FormFieldsContext, } from './dist/admin/components/forms/Form/types';
3
3
  export type { RichTextAdapter, RichTextFieldProps, } from './dist/admin/components/forms/field-types/RichText/types';
4
4
  export type { CellComponentProps } from './dist/admin/components/views/collections/List/Cell/types';
5
- export { FileData } from './dist/uploads/types';
5
+ export { FileData, ImageSize, IncomingUploadType } from './dist/uploads/types';
6
6
  export type { CustomPublishButtonProps, CustomSaveButtonProps, CustomSaveDraftButtonProps, } from './dist/admin/components/elements/types';
7
7
  export type { RowLabel } from './dist/admin/components/forms/RowLabel/types';
8
8
  export type { AfterChangeHook as CollectionAfterChangeHook, AfterDeleteHook as CollectionAfterDeleteHook, AfterForgotPasswordHook as CollectionAfterForgotPasswordHook, AfterLoginHook as CollectionAfterLoginHook, AfterOperationHook as CollectionAfterOperationHook, AfterReadHook as CollectionAfterReadHook, BeforeChangeHook as CollectionBeforeChangeHook, BeforeDeleteHook as CollectionBeforeDeleteHook, BeforeDuplicate, BeforeLoginHook as CollectionBeforeLoginHook, BeforeOperationHook as CollectionBeforeOperationHook, BeforeReadHook as CollectionBeforeReadHook, BeforeValidateHook as CollectionBeforeValidateHook, Collection, CollectionConfig, SanitizedCollectionConfig, TypeWithID, } from './dist/collections/config/types';