payload 2.0.15 → 2.1.0

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 (141) hide show
  1. package/README.md +3 -4
  2. package/components/hooks.d.ts +1 -0
  3. package/components/hooks.js +5 -1
  4. package/dist/admin/components/elements/EditUpload/index.js +2 -2
  5. package/dist/admin/components/elements/Localizer/LocalizerLabel/index.d.ts +1 -1
  6. package/dist/admin/components/elements/Localizer/LocalizerLabel/index.d.ts.map +1 -1
  7. package/dist/admin/components/elements/Localizer/LocalizerLabel/index.js +8 -6
  8. package/dist/admin/components/elements/Localizer/index.d.ts.map +1 -1
  9. package/dist/admin/components/elements/Localizer/index.js +8 -3
  10. package/dist/admin/components/elements/WhereBuilder/Condition/Date/index.js +3 -2
  11. package/dist/admin/components/elements/WhereBuilder/Condition/Date/types.d.ts +1 -0
  12. package/dist/admin/components/elements/WhereBuilder/Condition/Date/types.d.ts.map +1 -1
  13. package/dist/admin/components/elements/WhereBuilder/Condition/Number/index.d.ts.map +1 -1
  14. package/dist/admin/components/elements/WhereBuilder/Condition/Number/index.js +3 -2
  15. package/dist/admin/components/elements/WhereBuilder/Condition/Number/types.d.ts +1 -0
  16. package/dist/admin/components/elements/WhereBuilder/Condition/Number/types.d.ts.map +1 -1
  17. package/dist/admin/components/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  18. package/dist/admin/components/elements/WhereBuilder/Condition/Relationship/index.js +3 -2
  19. package/dist/admin/components/elements/WhereBuilder/Condition/Relationship/types.d.ts +1 -0
  20. package/dist/admin/components/elements/WhereBuilder/Condition/Relationship/types.d.ts.map +1 -1
  21. package/dist/admin/components/elements/WhereBuilder/Condition/Select/index.d.ts.map +1 -1
  22. package/dist/admin/components/elements/WhereBuilder/Condition/Select/index.js +3 -2
  23. package/dist/admin/components/elements/WhereBuilder/Condition/Select/types.d.ts +1 -0
  24. package/dist/admin/components/elements/WhereBuilder/Condition/Select/types.d.ts.map +1 -1
  25. package/dist/admin/components/elements/WhereBuilder/Condition/Text/index.d.ts.map +1 -1
  26. package/dist/admin/components/elements/WhereBuilder/Condition/Text/index.js +3 -2
  27. package/dist/admin/components/elements/WhereBuilder/Condition/Text/types.d.ts +1 -0
  28. package/dist/admin/components/elements/WhereBuilder/Condition/Text/types.d.ts.map +1 -1
  29. package/dist/admin/components/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  30. package/dist/admin/components/elements/WhereBuilder/Condition/index.js +27 -17
  31. package/dist/admin/components/elements/WhereBuilder/reducer.js +6 -6
  32. package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.js +2 -2
  33. package/dist/admin/components/forms/field-types/Checkbox/Input.d.ts +4 -0
  34. package/dist/admin/components/forms/field-types/Checkbox/Input.d.ts.map +1 -1
  35. package/dist/admin/components/forms/field-types/Checkbox/Input.js +6 -5
  36. package/dist/admin/components/forms/field-types/Checkbox/index.d.ts.map +1 -1
  37. package/dist/admin/components/forms/field-types/Checkbox/index.js +7 -3
  38. package/dist/admin/components/forms/field-types/Code/index.d.ts.map +1 -1
  39. package/dist/admin/components/forms/field-types/Code/index.js +6 -4
  40. package/dist/admin/components/forms/field-types/DateTime/Input.d.ts +6 -0
  41. package/dist/admin/components/forms/field-types/DateTime/Input.d.ts.map +1 -1
  42. package/dist/admin/components/forms/field-types/DateTime/Input.js +8 -6
  43. package/dist/admin/components/forms/field-types/DateTime/index.d.ts.map +1 -1
  44. package/dist/admin/components/forms/field-types/DateTime/index.js +3 -2
  45. package/dist/admin/components/forms/field-types/Email/index.d.ts.map +1 -1
  46. package/dist/admin/components/forms/field-types/Email/index.js +10 -6
  47. package/dist/admin/components/forms/field-types/JSON/index.d.ts.map +1 -1
  48. package/dist/admin/components/forms/field-types/JSON/index.js +6 -4
  49. package/dist/admin/components/forms/field-types/Number/index.d.ts.map +1 -1
  50. package/dist/admin/components/forms/field-types/Number/index.js +10 -6
  51. package/dist/admin/components/forms/field-types/Point/index.d.ts.map +1 -1
  52. package/dist/admin/components/forms/field-types/Point/index.js +14 -8
  53. package/dist/admin/components/forms/field-types/RadioGroup/Input.d.ts +2 -0
  54. package/dist/admin/components/forms/field-types/RadioGroup/Input.d.ts.map +1 -1
  55. package/dist/admin/components/forms/field-types/RadioGroup/Input.js +6 -4
  56. package/dist/admin/components/forms/field-types/RadioGroup/index.d.ts.map +1 -1
  57. package/dist/admin/components/forms/field-types/RadioGroup/index.js +5 -3
  58. package/dist/admin/components/forms/field-types/Relationship/index.d.ts.map +1 -1
  59. package/dist/admin/components/forms/field-types/Relationship/index.js +7 -5
  60. package/dist/admin/components/forms/field-types/Select/Input.d.ts +2 -0
  61. package/dist/admin/components/forms/field-types/Select/Input.d.ts.map +1 -1
  62. package/dist/admin/components/forms/field-types/Select/Input.js +6 -4
  63. package/dist/admin/components/forms/field-types/Select/index.d.ts.map +1 -1
  64. package/dist/admin/components/forms/field-types/Select/index.js +5 -3
  65. package/dist/admin/components/forms/field-types/Text/Input.d.ts +4 -0
  66. package/dist/admin/components/forms/field-types/Text/Input.d.ts.map +1 -1
  67. package/dist/admin/components/forms/field-types/Text/Input.js +10 -6
  68. package/dist/admin/components/forms/field-types/Text/index.d.ts.map +1 -1
  69. package/dist/admin/components/forms/field-types/Text/index.js +7 -3
  70. package/dist/admin/components/forms/field-types/Textarea/Input.d.ts +4 -0
  71. package/dist/admin/components/forms/field-types/Textarea/Input.d.ts.map +1 -1
  72. package/dist/admin/components/forms/field-types/Textarea/Input.js +8 -6
  73. package/dist/admin/components/forms/field-types/Textarea/index.d.ts.map +1 -1
  74. package/dist/admin/components/forms/field-types/Textarea/index.js +7 -3
  75. package/dist/admin/components/forms/field-types/Upload/Input.d.ts +2 -0
  76. package/dist/admin/components/forms/field-types/Upload/Input.d.ts.map +1 -1
  77. package/dist/admin/components/forms/field-types/Upload/Input.js +6 -4
  78. package/dist/admin/components/forms/field-types/Upload/index.d.ts.map +1 -1
  79. package/dist/admin/components/forms/field-types/Upload/index.js +5 -3
  80. package/dist/admin/components/utilities/Auth/index.d.ts +1 -3
  81. package/dist/admin/components/utilities/Auth/index.d.ts.map +1 -1
  82. package/dist/admin/components/utilities/Auth/index.js +1 -1
  83. package/dist/admin/components/views/API/index.d.ts.map +1 -1
  84. package/dist/admin/components/views/API/index.js +6 -6
  85. package/dist/auth/graphql/resolvers/access.d.ts.map +1 -1
  86. package/dist/auth/graphql/resolvers/access.js +4 -2
  87. package/dist/auth/graphql/resolvers/forgotPassword.d.ts.map +1 -1
  88. package/dist/auth/graphql/resolvers/forgotPassword.js +4 -2
  89. package/dist/auth/graphql/resolvers/init.d.ts.map +1 -1
  90. package/dist/auth/graphql/resolvers/init.js +4 -2
  91. package/dist/auth/graphql/resolvers/login.d.ts.map +1 -1
  92. package/dist/auth/graphql/resolvers/login.js +4 -2
  93. package/dist/auth/graphql/resolvers/logout.d.ts.map +1 -1
  94. package/dist/auth/graphql/resolvers/logout.js +4 -2
  95. package/dist/auth/graphql/resolvers/me.d.ts.map +1 -1
  96. package/dist/auth/graphql/resolvers/me.js +4 -2
  97. package/dist/auth/graphql/resolvers/refresh.d.ts.map +1 -1
  98. package/dist/auth/graphql/resolvers/refresh.js +4 -2
  99. package/dist/auth/graphql/resolvers/resetPassword.d.ts.map +1 -1
  100. package/dist/auth/graphql/resolvers/resetPassword.js +4 -2
  101. package/dist/auth/graphql/resolvers/unlock.d.ts.map +1 -1
  102. package/dist/auth/graphql/resolvers/unlock.js +4 -2
  103. package/dist/auth/graphql/resolvers/verifyEmail.d.ts.map +1 -1
  104. package/dist/auth/graphql/resolvers/verifyEmail.js +4 -2
  105. package/dist/auth/operations/refresh.js +2 -2
  106. package/dist/collections/graphql/resolvers/create.js +4 -2
  107. package/dist/collections/graphql/resolvers/delete.js +4 -2
  108. package/dist/collections/graphql/resolvers/docAccess.js +4 -2
  109. package/dist/collections/graphql/resolvers/find.js +4 -2
  110. package/dist/collections/graphql/resolvers/findVersionByID.js +4 -2
  111. package/dist/collections/graphql/resolvers/findVersions.js +4 -2
  112. package/dist/collections/graphql/resolvers/restoreVersion.js +4 -2
  113. package/dist/collections/graphql/resolvers/update.js +4 -2
  114. package/dist/config/schema.d.ts.map +1 -1
  115. package/dist/config/schema.js +4 -2
  116. package/dist/config/types.d.ts +1 -1
  117. package/dist/config/types.d.ts.map +1 -1
  118. package/dist/config/types.js +1 -1
  119. package/dist/exports/components/hooks.d.ts +1 -0
  120. package/dist/exports/components/hooks.d.ts.map +1 -1
  121. package/dist/exports/components/hooks.js +5 -1
  122. package/dist/fields/config/schema.d.ts.map +1 -1
  123. package/dist/fields/config/schema.js +90 -10
  124. package/dist/fields/config/types.d.ts +66 -0
  125. package/dist/fields/config/types.d.ts.map +1 -1
  126. package/dist/fields/config/types.js +1 -1
  127. package/dist/fields/validations.d.ts +4 -0
  128. package/dist/fields/validations.d.ts.map +1 -1
  129. package/dist/globals/graphql/resolvers/docAccess.js +4 -2
  130. package/dist/globals/graphql/resolvers/findOne.d.ts.map +1 -1
  131. package/dist/globals/graphql/resolvers/findOne.js +4 -2
  132. package/dist/globals/graphql/resolvers/findVersionByID.js +4 -2
  133. package/dist/globals/graphql/resolvers/findVersions.js +4 -2
  134. package/dist/globals/graphql/resolvers/restoreVersion.js +4 -2
  135. package/dist/globals/graphql/resolvers/update.js +4 -2
  136. package/dist/uploads/generateFileData.js +4 -4
  137. package/dist/uploads/imageResizer.d.ts.map +1 -1
  138. package/dist/uploads/imageResizer.js +87 -55
  139. package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -1
  140. package/dist/utilities/fieldSchemaToJSON.js +21 -3
  141. package/package.json +2 -2
@@ -91,32 +91,71 @@ function _interop_require_default(obj) {
91
91
  *
92
92
  * @param resizeConfig - object containing the requested dimensions and resize options
93
93
  * @param original - the original image size
94
- * @returns true if the image needs to be resized, false otherwise
95
- */ const needsResize = ({ height: desiredHeight, width: desiredWidth, withoutEnlargement, withoutReduction }, original)=>{
96
- // allow enlargement or prevent reduction (our default is to prevent
97
- // enlargement and allow reduction)
98
- if (withoutEnlargement !== undefined || withoutReduction !== undefined) {
99
- return true // needs resize
94
+ * @returns true if resizing is not needed, false otherwise
95
+ */ const preventResize = ({ height: desiredHeight, width: desiredWidth, withoutEnlargement, withoutReduction }, original)=>{
96
+ // default is to allow reduction
97
+ if (withoutReduction !== undefined) {
98
+ return false // needs resize
99
+ ;
100
+ }
101
+ // default is to prevent enlargement
102
+ if (withoutEnlargement !== undefined) {
103
+ return false // needs resize
100
104
  ;
101
105
  }
102
106
  const isWidthOrHeightNotDefined = !desiredHeight || !desiredWidth;
103
107
  if (isWidthOrHeightNotDefined) {
104
108
  // If with and height are not defined, it means there is a format conversion
105
109
  // and the image needs to be "resized" (transformed).
106
- return true // needs resize
110
+ return false // needs resize
107
111
  ;
108
112
  }
109
- const hasInsufficientWidth = original.width < desiredWidth;
110
- const hasInsufficientHeight = original.height < desiredHeight;
113
+ const hasInsufficientWidth = desiredWidth > original.width;
114
+ const hasInsufficientHeight = desiredHeight > original.height;
111
115
  if (hasInsufficientWidth && hasInsufficientHeight) {
112
116
  // doesn't need resize - prevent enlargement. This should only happen if both width and height are insufficient.
113
117
  // if only one dimension is insufficient and the other is sufficient, resizing needs to happen, as the image
114
118
  // should be resized to the sufficient dimension.
115
- return false;
119
+ return true // do not create a new size
120
+ ;
116
121
  }
117
- return true // needs resize
122
+ return false // needs resize
118
123
  ;
119
124
  };
125
+ /**
126
+ * Check if the image should be passed directly to sharp without payload adjusting properties.
127
+ *
128
+ * @param resizeConfig - object containing the requested dimensions and resize options
129
+ * @param original - the original image size
130
+ * @returns true if the image should passed directly to sharp
131
+ */ const applyPayloadAdjustments = ({ height, width, withoutEnlargement, withoutReduction }, original)=>{
132
+ if (!(0, _isNumber.isNumber)(height) && !(0, _isNumber.isNumber)(width)) return false;
133
+ const targetAspectRatio = width / height;
134
+ const originalAspectRatio = original.width / original.height;
135
+ if (originalAspectRatio === targetAspectRatio) return false;
136
+ const skipEnlargement = withoutEnlargement && (original.height < height || original.width < width);
137
+ const skipReduction = withoutReduction && (original.height > height || original.width > width);
138
+ if (skipEnlargement || skipReduction) return false;
139
+ return true;
140
+ };
141
+ /**
142
+ * Sanitize the resize config. If the resize config has the `withoutReduction`
143
+ * property set to true, the `fit` and `position` properties will be set to `contain`
144
+ * and `top left` respectively.
145
+ *
146
+ * @param resizeConfig - the resize config
147
+ * @returns a sanitized resize config
148
+ */ const sanitizeResizeConfig = (resizeConfig)=>{
149
+ if (resizeConfig.withoutReduction) {
150
+ return {
151
+ ...resizeConfig,
152
+ // Why fit `contain` should also be set to https://github.com/lovell/sharp/issues/3595
153
+ fit: resizeConfig?.fit || 'contain',
154
+ position: resizeConfig?.position || 'left top'
155
+ };
156
+ }
157
+ return resizeConfig;
158
+ };
120
159
  async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, staticPath }) {
121
160
  const { imageSizes } = config.upload;
122
161
  // Noting to resize here so return as early as possible
@@ -127,55 +166,48 @@ async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType
127
166
  const sharpBase = (0, _sharp.default)(file.tempFilePath || file.data).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
128
167
  ;
129
168
  const results = await Promise.all(imageSizes.map(async (imageResizeConfig)=>{
169
+ imageResizeConfig = sanitizeResizeConfig(imageResizeConfig);
130
170
  // This checks if a resize should happen. If not, the resized image will be
131
171
  // skipped COMPLETELY and thus will not be included in the resulting images.
132
172
  // All further format/trim options will thus be skipped as well.
133
- if (!needsResize(imageResizeConfig, dimensions)) {
173
+ if (preventResize(imageResizeConfig, dimensions)) {
134
174
  return createResult(imageResizeConfig.name);
135
175
  }
136
- let resized = sharpBase.clone();
137
- const hasEdits = req.query?.uploadEdits;
138
- if (hasEdits && imageResizeConfig.width && imageResizeConfig.height) {
139
- const { height, width } = imageResizeConfig;
140
- const targetAspectRatio = width / height;
176
+ const imageToResize = sharpBase.clone();
177
+ let resized = imageToResize.resize(imageResizeConfig);
178
+ if (req.query?.uploadEdits?.focalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {
179
+ const { height: resizeHeight, width: resizeWidth } = imageResizeConfig;
180
+ const resizeAspectRatio = resizeWidth / resizeHeight;
141
181
  const originalAspectRatio = dimensions.width / dimensions.height;
142
- if (originalAspectRatio === targetAspectRatio) {
143
- resized = resized.resize(imageResizeConfig);
144
- } else {
145
- const focalPoint = {
146
- x: 0.5,
147
- y: 0.5
148
- };
149
- if (req.query.uploadEdits?.focalPoint) {
150
- if ((0, _isNumber.isNumber)(req.query.uploadEdits.focalPoint?.x)) {
151
- focalPoint.x = req.query.uploadEdits.focalPoint.x;
152
- }
153
- if ((0, _isNumber.isNumber)(req.query.uploadEdits.focalPoint?.y)) {
154
- focalPoint.y = req.query.uploadEdits.focalPoint.y;
155
- }
156
- }
157
- const prioritizeHeight = originalAspectRatio > targetAspectRatio;
158
- const { info } = await resized.resize({
159
- height: prioritizeHeight ? height : null,
160
- width: prioritizeHeight ? null : width
161
- }).toBuffer({
162
- resolveWithObject: true
163
- });
164
- const maxOffsetX = Math.max(info.width - width, 0);
165
- const maxOffsetY = Math.max(info.height - height, 0);
166
- const focalPointX = Math.floor(info.width / 100 * focalPoint.x);
167
- const focalPointY = Math.floor(info.height / 100 * focalPoint.y);
168
- const offsetX = Math.min(Math.max(focalPointX - width / 2, 0), maxOffsetX);
169
- const offsetY = Math.min(Math.max(focalPointY - height / 2, 0), maxOffsetY);
170
- resized = resized.extract({
171
- height,
172
- left: offsetX,
173
- top: offsetY,
174
- width
175
- });
176
- }
177
- } else {
178
- resized = resized.resize(imageResizeConfig);
182
+ const prioritizeHeight = resizeAspectRatio < originalAspectRatio;
183
+ // Scale the image up or down to fit the resize dimensions
184
+ const scaledImage = imageToResize.resize({
185
+ height: prioritizeHeight ? resizeHeight : null,
186
+ width: prioritizeHeight ? null : resizeWidth
187
+ });
188
+ const { info: scaledImageInfo } = await scaledImage.toBuffer({
189
+ resolveWithObject: true
190
+ });
191
+ // Focal point adjustments
192
+ const focalPoint = {
193
+ x: (0, _isNumber.isNumber)(req.query.uploadEdits.focalPoint?.x) ? req.query.uploadEdits.focalPoint.x : 50,
194
+ y: (0, _isNumber.isNumber)(req.query.uploadEdits.focalPoint?.y) ? req.query.uploadEdits.focalPoint.y : 50
195
+ };
196
+ const safeResizeWidth = resizeWidth ?? scaledImageInfo.width;
197
+ const maxOffsetX = scaledImageInfo.width - safeResizeWidth;
198
+ const leftFocalEdge = Math.round(scaledImageInfo.width * (focalPoint.x / 100) - safeResizeWidth / 2);
199
+ const safeOffsetX = Math.min(Math.max(0, leftFocalEdge), maxOffsetX);
200
+ const safeResizeHeight = resizeHeight ?? scaledImageInfo.height;
201
+ const maxOffsetY = scaledImageInfo.height - safeResizeHeight;
202
+ const topFocalEdge = Math.round(scaledImageInfo.height * (focalPoint.y / 100) - safeResizeHeight / 2);
203
+ const safeOffsetY = Math.min(Math.max(0, topFocalEdge), maxOffsetY);
204
+ // extract the focal area from the scaled image
205
+ resized = scaledImage.extract({
206
+ height: safeResizeHeight,
207
+ left: safeOffsetX,
208
+ top: safeOffsetY,
209
+ width: safeResizeWidth
210
+ });
179
211
  }
180
212
  if (imageResizeConfig.formatOptions) {
181
213
  resized = resized.toFormat(imageResizeConfig.formatOptions.format, imageResizeConfig.formatOptions.options);
@@ -218,4 +250,4 @@ async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType
218
250
  });
219
251
  }
220
252
 
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2ltYWdlUmVzaXplci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFVwbG9hZGVkRmlsZSB9IGZyb20gJ2V4cHJlc3MtZmlsZXVwbG9hZCdcbmltcG9ydCB0eXBlIHsgT3V0cHV0SW5mbyB9IGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgeyBmcm9tQnVmZmVyIH0gZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHNhbml0aXplIGZyb20gJ3Nhbml0aXplLWZpbGVuYW1lJ1xuaW1wb3J0IHNoYXJwIGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgdHlwZSB7IFVwbG9hZEVkaXRzIH0gZnJvbSAnLi4vYWRtaW4vY29tcG9uZW50cy92aWV3cy9jb2xsZWN0aW9ucy9FZGl0L3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uL2V4cHJlc3MvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEZpbGVTaXplLCBGaWxlU2l6ZXMsIEZpbGVUb1NhdmUsIEltYWdlU2l6ZSwgUHJvYmVkSW1hZ2VTaXplIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICcuLi91dGlsaXRpZXMvaXNOdW1iZXInXG5pbXBvcnQgZmlsZUV4aXN0cyBmcm9tICcuL2ZpbGVFeGlzdHMnXG5cbnR5cGUgUmVzaXplQXJncyA9IHtcbiAgY29uZmlnOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnXG4gIGRpbWVuc2lvbnM6IFByb2JlZEltYWdlU2l6ZVxuICBmaWxlOiBVcGxvYWRlZEZpbGVcbiAgbWltZVR5cGU6IHN0cmluZ1xuICByZXE6IFBheWxvYWRSZXF1ZXN0ICYge1xuICAgIHF1ZXJ5Pzoge1xuICAgICAgdXBsb2FkRWRpdHM/OiBVcGxvYWRFZGl0c1xuICAgIH1cbiAgfVxuICBzYXZlZEZpbGVuYW1lOiBzdHJpbmdcbiAgc3RhdGljUGF0aDogc3RyaW5nXG59XG5cbi8qKiBSZXN1bHQgZnJvbSByZXNpemluZyBhbmQgdHJhbnNmb3JtaW5nIHRoZSByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZXMgKi9cbnR5cGUgSW1hZ2VTaXplc1Jlc3VsdCA9IHtcbiAgc2l6ZURhdGE6IEZpbGVTaXplc1xuICBzaXplc1RvU2F2ZTogRmlsZVRvU2F2ZVtdXG59XG5cbnR5cGUgU2FuaXRpemVkSW1hZ2VEYXRhID0ge1xuICBleHQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSB0aGUgaW1hZ2UgbmFtZSBhbmQgZXh0cmFjdCB0aGUgZXh0ZW5zaW9uIGZyb20gdGhlIHNvdXJjZSBpbWFnZVxuICpcbiAqIEBwYXJhbSBzb3VyY2VJbWFnZSAtIHRoZSBzb3VyY2UgaW1hZ2VcbiAqIEByZXR1cm5zIHRoZSBzYW5pdGl6ZWQgbmFtZSBhbmQgZXh0ZW5zaW9uXG4gKi9cbmNvbnN0IGdldFNhbml0aXplZEltYWdlRGF0YSA9IChzb3VyY2VJbWFnZTogc3RyaW5nKTogU2FuaXRpemVkSW1hZ2VEYXRhID0+IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gc291cmNlSW1hZ2Uuc3BsaXQoJy4nKS5wb3AoKVxuICBjb25zdCBuYW1lID0gc2FuaXRpemUoc291cmNlSW1hZ2Uuc3Vic3RyaW5nKDAsIHNvdXJjZUltYWdlLmxhc3RJbmRleE9mKCcuJykpIHx8IHNvdXJjZUltYWdlKVxuICByZXR1cm4geyBuYW1lLCBleHQ6IGV4dGVuc2lvbiB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGltYWdlIG5hbWUgYmFzZWQgb24gdGhlIG91dHB1dCBpbWFnZSBuYW1lLCB0aGUgZGltZW5zaW9ucyBhbmRcbiAqIHRoZSBleHRlbnNpb24uXG4gKlxuICogSWdub3JlIHRoZSBmYWN0IHRoYXQgZHVwbGljYXRlIG5hbWVzIGNvdWxkIGhhcHBlbiBpZiB0aGUgdGhlcmUgaXMgb25lXG4gKiBzaXplIHdpdGggYHdpZHRoIEFORCBoZWlnaHRgIGFuZCBvbmUgd2l0aCBvbmx5IGBoZWlnaHQgT1Igd2lkdGhgLiBCZWNhdXNlXG4gKiBzcGFjZSBpcyBleHBlbnNpdmUsIHdlIHdpbGwgcmV1c2UgdGhlIHNhbWUgaW1hZ2UgZm9yIGJvdGggc2l6ZXMuXG4gKlxuICogQHBhcmFtIG91dHB1dEltYWdlTmFtZSAtIHRoZSBzYW5pdGl6ZWQgaW1hZ2UgbmFtZVxuICogQHBhcmFtIGJ1ZmZlckluZm8gLSB0aGUgYnVmZmVyIGluZm9cbiAqIEBwYXJhbSBleHRlbnNpb24gLSB0aGUgZXh0ZW5zaW9uIHRvIHVzZVxuICogQHJldHVybnMgdGhlIG5ldyBpbWFnZSBuYW1lIHRoYXQgaXMgbm90IHRha2VuXG4gKi9cbmNvbnN0IGNyZWF0ZUltYWdlTmFtZSA9IChcbiAgb3V0cHV0SW1hZ2VOYW1lOiBzdHJpbmcsXG4gIHsgaGVpZ2h0LCB3aWR0aCB9OiBPdXRwdXRJbmZvLFxuICBleHRlbnNpb246IHN0cmluZyxcbikgPT4gYCR7b3V0cHV0SW1hZ2VOYW1lfS0ke3dpZHRofXgke2hlaWdodH0uJHtleHRlbnNpb259YFxuXG4vKipcbiAqIENyZWF0ZSB0aGUgcmVzdWx0IG9iamVjdCBmb3IgdGhlIGltYWdlIHJlc2l6ZSBvcGVyYXRpb24gYmFzZWQgb24gdGhlXG4gKiBwcm92aWRlZCBwYXJhbWV0ZXJzLiBJZiB0aGUgbmFtZSBpcyBub3QgcHJvdmlkZWQsIGFuIGVtcHR5IHJlc3VsdCBvYmplY3RcbiAqIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSB0aGUgZmlsZW5hbWUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gd2lkdGggLSB0aGUgd2lkdGggb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gaGVpZ2h0IC0gdGhlIGhlaWdodCBvZiB0aGUgaW1hZ2VcbiAqIEBwYXJhbSBmaWxlc2l6ZSAtIHRoZSBmaWxlc2l6ZSBvZiB0aGUgaW1hZ2VcbiAqIEBwYXJhbSBtaW1lVHlwZSAtIHRoZSBtaW1lIHR5cGUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gc2l6ZXNUb1NhdmUgLSB0aGUgc2l6ZXMgdG8gc2F2ZVxuICogQHJldHVybnMgdGhlIHJlc3VsdCBvYmplY3RcbiAqL1xuY29uc3QgY3JlYXRlUmVzdWx0ID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGZpbGVuYW1lOiBGaWxlU2l6ZVsnZmlsZW5hbWUnXSA9IG51bGwsXG4gIHdpZHRoOiBGaWxlU2l6ZVsnd2lkdGgnXSA9IG51bGwsXG4gIGhlaWdodDogRmlsZVNpemVbJ2hlaWdodCddID0gbnVsbCxcbiAgZmlsZXNpemU6IEZpbGVTaXplWydmaWxlc2l6ZSddID0gbnVsbCxcbiAgbWltZVR5cGU6IEZpbGVTaXplWydtaW1lVHlwZSddID0gbnVsbCxcbiAgc2l6ZXNUb1NhdmU6IEZpbGVUb1NhdmVbXSA9IFtdLFxuKTogSW1hZ2VTaXplc1Jlc3VsdCA9PiAoe1xuICBzaXplRGF0YToge1xuICAgIFtuYW1lXToge1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBmaWxlc2l6ZSxcbiAgICAgIGhlaWdodCxcbiAgICAgIG1pbWVUeXBlLFxuICAgICAgd2lkdGgsXG4gICAgfSxcbiAgfSxcbiAgc2l6ZXNUb1NhdmUsXG59KVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBpbWFnZSBuZWVkcyB0byBiZSByZXNpemVkIGFjY29yZGluZyB0byB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnNcbiAqIGFuZCB0aGUgb3JpZ2luYWwgaW1hZ2Ugc2l6ZS4gSWYgdGhlIHJlc2l6ZSBvcHRpb25zIHdpdGhvdXRFbmxhcmdlbWVudCBvciB3aXRob3V0UmVkdWN0aW9uIGFyZSBwcm92aWRlZCxcbiAqIHRoZSBpbWFnZSB3aWxsIGJlIHJlc2l6ZWQgcmVnYXJkbGVzcyBvZiB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnMsIGdpdmVuIHRoYXQgdGhlXG4gKiB3aWR0aCBvciBoZWlnaHQgdG8gYmUgcmVzaXplZCBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gcmVzaXplQ29uZmlnIC0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBkaW1lbnNpb25zIGFuZCByZXNpemUgb3B0aW9uc1xuICogQHBhcmFtIG9yaWdpbmFsIC0gdGhlIG9yaWdpbmFsIGltYWdlIHNpemVcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGltYWdlIG5lZWRzIHRvIGJlIHJlc2l6ZWQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5jb25zdCBuZWVkc1Jlc2l6ZSA9IChcbiAgeyBoZWlnaHQ6IGRlc2lyZWRIZWlnaHQsIHdpZHRoOiBkZXNpcmVkV2lkdGgsIHdpdGhvdXRFbmxhcmdlbWVudCwgd2l0aG91dFJlZHVjdGlvbiB9OiBJbWFnZVNpemUsXG4gIG9yaWdpbmFsOiBQcm9iZWRJbWFnZVNpemUsXG4pOiBib29sZWFuID0+IHtcbiAgLy8gYWxsb3cgZW5sYXJnZW1lbnQgb3IgcHJldmVudCByZWR1Y3Rpb24gKG91ciBkZWZhdWx0IGlzIHRvIHByZXZlbnRcbiAgLy8gZW5sYXJnZW1lbnQgYW5kIGFsbG93IHJlZHVjdGlvbilcbiAgaWYgKHdpdGhvdXRFbmxhcmdlbWVudCAhPT0gdW5kZWZpbmVkIHx8IHdpdGhvdXRSZWR1Y3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlIC8vIG5lZWRzIHJlc2l6ZVxuICB9XG5cbiAgY29uc3QgaXNXaWR0aE9ySGVpZ2h0Tm90RGVmaW5lZCA9ICFkZXNpcmVkSGVpZ2h0IHx8ICFkZXNpcmVkV2lkdGhcblxuICBpZiAoaXNXaWR0aE9ySGVpZ2h0Tm90RGVmaW5lZCkge1xuICAgIC8vIElmIHdpdGggYW5kIGhlaWdodCBhcmUgbm90IGRlZmluZWQsIGl0IG1lYW5zIHRoZXJlIGlzIGEgZm9ybWF0IGNvbnZlcnNpb25cbiAgICAvLyBhbmQgdGhlIGltYWdlIG5lZWRzIHRvIGJlIFwicmVzaXplZFwiICh0cmFuc2Zvcm1lZCkuXG4gICAgcmV0dXJuIHRydWUgLy8gbmVlZHMgcmVzaXplXG4gIH1cblxuICBjb25zdCBoYXNJbnN1ZmZpY2llbnRXaWR0aCA9IG9yaWdpbmFsLndpZHRoIDwgZGVzaXJlZFdpZHRoXG4gIGNvbnN0IGhhc0luc3VmZmljaWVudEhlaWdodCA9IG9yaWdpbmFsLmhlaWdodCA8IGRlc2lyZWRIZWlnaHRcbiAgaWYgKGhhc0luc3VmZmljaWVudFdpZHRoICYmIGhhc0luc3VmZmljaWVudEhlaWdodCkge1xuICAgIC8vIGRvZXNuJ3QgbmVlZCByZXNpemUgLSBwcmV2ZW50IGVubGFyZ2VtZW50LiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBib3RoIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGluc3VmZmljaWVudC5cbiAgICAvLyBpZiBvbmx5IG9uZSBkaW1lbnNpb24gaXMgaW5zdWZmaWNpZW50IGFuZCB0aGUgb3RoZXIgaXMgc3VmZmljaWVudCwgcmVzaXppbmcgbmVlZHMgdG8gaGFwcGVuLCBhcyB0aGUgaW1hZ2VcbiAgICAvLyBzaG91bGQgYmUgcmVzaXplZCB0byB0aGUgc3VmZmljaWVudCBkaW1lbnNpb24uXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZSAvLyBuZWVkcyByZXNpemVcbn1cblxuLyoqXG4gKiBGb3IgdGhlIHByb3ZpZGVkIGltYWdlIHNpemVzLCBoYW5kbGUgdGhlIHJlc2l6aW5nIGFuZCB0aGUgdHJhbnNmb3Jtc1xuICogKGZvcm1hdCwgdHJpbSwgZXRjLikgb2YgZWFjaCByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2JqZWN0LlxuICogVGhpcyBvbmx5IGhhbmRsZXMgdGhlIGltYWdlIHNpemVzLiBUaGUgdHJhbnNmb3JtcyBvZiB0aGUgb3JpZ2luYWwgaW1hZ2VcbiAqIGFyZSBoYW5kbGVkIGluIHtAbGluayAuL2dlbmVyYXRlRmlsZURhdGEudHN9LlxuICpcbiAqIFRoZSBpbWFnZSB3aWxsIGJlIHJlc2l6ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZFxuICogcmVzaXplIGNvbmZpZy4gSWYgbm8gaW1hZ2Ugc2l6ZXMgYXJlIHJlcXVlc3RlZCwgdGhlIHJlc29sdmVkIGRhdGEgd2lsbCBiZSBlbXB0eS5cbiAqIEZvciBldmVyeSBpbWFnZSB0aGF0IGRvcyBub3QgbmVlZCB0byBiZSByZXNpemVkLCBhbiByZXN1bHQgb2JqZWN0IHdpdGggYG51bGxgXG4gKiBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIHRoZSByZXNpemUgY29uZmlnXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSByZXNpemUgb3BlcmF0aW9uKHMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZUFuZFRyYW5zZm9ybUltYWdlU2l6ZXMoe1xuICBjb25maWcsXG4gIGRpbWVuc2lvbnMsXG4gIGZpbGUsXG4gIG1pbWVUeXBlLFxuICByZXEsXG4gIHNhdmVkRmlsZW5hbWUsXG4gIHN0YXRpY1BhdGgsXG59OiBSZXNpemVBcmdzKTogUHJvbWlzZTxJbWFnZVNpemVzUmVzdWx0PiB7XG4gIGNvbnN0IHsgaW1hZ2VTaXplcyB9ID0gY29uZmlnLnVwbG9hZFxuICAvLyBOb3RpbmcgdG8gcmVzaXplIGhlcmUgc28gcmV0dXJuIGFzIGVhcmx5IGFzIHBvc3NpYmxlXG4gIGlmICghaW1hZ2VTaXplcykgcmV0dXJuIHsgc2l6ZURhdGE6IHt9LCBzaXplc1RvU2F2ZTogW10gfVxuXG4gIGNvbnN0IHNoYXJwQmFzZSA9IHNoYXJwKGZpbGUudGVtcEZpbGVQYXRoIHx8IGZpbGUuZGF0YSkucm90YXRlKCkgLy8gcGFzcyByb3RhdGUoKSB0byBhdXRvLXJvdGF0ZSBiYXNlZCBvbiBFWElGIGRhdGEuIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvcHVsbC8zMDgxXG5cbiAgY29uc3QgcmVzdWx0czogSW1hZ2VTaXplc1Jlc3VsdFtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgaW1hZ2VTaXplcy5tYXAoYXN5bmMgKGltYWdlUmVzaXplQ29uZmlnKTogUHJvbWlzZTxJbWFnZVNpemVzUmVzdWx0PiA9PiB7XG4gICAgICAvLyBUaGlzIGNoZWNrcyBpZiBhIHJlc2l6ZSBzaG91bGQgaGFwcGVuLiBJZiBub3QsIHRoZSByZXNpemVkIGltYWdlIHdpbGwgYmVcbiAgICAgIC8vIHNraXBwZWQgQ09NUExFVEVMWSBhbmQgdGh1cyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGltYWdlcy5cbiAgICAgIC8vIEFsbCBmdXJ0aGVyIGZvcm1hdC90cmltIG9wdGlvbnMgd2lsbCB0aHVzIGJlIHNraXBwZWQgYXMgd2VsbC5cbiAgICAgIGlmICghbmVlZHNSZXNpemUoaW1hZ2VSZXNpemVDb25maWcsIGRpbWVuc2lvbnMpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSZXN1bHQoaW1hZ2VSZXNpemVDb25maWcubmFtZSlcbiAgICAgIH1cbiAgICAgIGxldCByZXNpemVkID0gc2hhcnBCYXNlLmNsb25lKClcblxuICAgICAgY29uc3QgaGFzRWRpdHMgPSByZXEucXVlcnk/LnVwbG9hZEVkaXRzXG5cbiAgICAgIGlmIChoYXNFZGl0cyAmJiBpbWFnZVJlc2l6ZUNvbmZpZy53aWR0aCAmJiBpbWFnZVJlc2l6ZUNvbmZpZy5oZWlnaHQpIHtcbiAgICAgICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSBpbWFnZVJlc2l6ZUNvbmZpZ1xuXG4gICAgICAgIGNvbnN0IHRhcmdldEFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHRcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxBc3BlY3RSYXRpbyA9IGRpbWVuc2lvbnMud2lkdGggLyBkaW1lbnNpb25zLmhlaWdodFxuXG4gICAgICAgIGlmIChvcmlnaW5hbEFzcGVjdFJhdGlvID09PSB0YXJnZXRBc3BlY3RSYXRpbykge1xuICAgICAgICAgIHJlc2l6ZWQgPSByZXNpemVkLnJlc2l6ZShpbWFnZVJlc2l6ZUNvbmZpZylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmb2NhbFBvaW50ID0ge1xuICAgICAgICAgICAgeDogMC41LFxuICAgICAgICAgICAgeTogMC41LFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZXEucXVlcnkudXBsb2FkRWRpdHM/LmZvY2FsUG9pbnQpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihyZXEucXVlcnkudXBsb2FkRWRpdHMuZm9jYWxQb2ludD8ueCkpIHtcbiAgICAgICAgICAgICAgZm9jYWxQb2ludC54ID0gcmVxLnF1ZXJ5LnVwbG9hZEVkaXRzLmZvY2FsUG9pbnQueFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKHJlcS5xdWVyeS51cGxvYWRFZGl0cy5mb2NhbFBvaW50Py55KSkge1xuICAgICAgICAgICAgICBmb2NhbFBvaW50LnkgPSByZXEucXVlcnkudXBsb2FkRWRpdHMuZm9jYWxQb2ludC55XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcHJpb3JpdGl6ZUhlaWdodCA9IG9yaWdpbmFsQXNwZWN0UmF0aW8gPiB0YXJnZXRBc3BlY3RSYXRpb1xuXG4gICAgICAgICAgY29uc3QgeyBpbmZvIH0gPSBhd2FpdCByZXNpemVkXG4gICAgICAgICAgICAucmVzaXplKHtcbiAgICAgICAgICAgICAgaGVpZ2h0OiBwcmlvcml0aXplSGVpZ2h0ID8gaGVpZ2h0IDogbnVsbCxcbiAgICAgICAgICAgICAgd2lkdGg6IHByaW9yaXRpemVIZWlnaHQgPyBudWxsIDogd2lkdGgsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRvQnVmZmVyKHsgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUgfSlcblxuICAgICAgICAgIGNvbnN0IG1heE9mZnNldFggPSBNYXRoLm1heChpbmZvLndpZHRoIC0gd2lkdGgsIDApXG4gICAgICAgICAgY29uc3QgbWF4T2Zmc2V0WSA9IE1hdGgubWF4KGluZm8uaGVpZ2h0IC0gaGVpZ2h0LCAwKVxuXG4gICAgICAgICAgY29uc3QgZm9jYWxQb2ludFggPSBNYXRoLmZsb29yKChpbmZvLndpZHRoIC8gMTAwKSAqIGZvY2FsUG9pbnQueClcbiAgICAgICAgICBjb25zdCBmb2NhbFBvaW50WSA9IE1hdGguZmxvb3IoKGluZm8uaGVpZ2h0IC8gMTAwKSAqIGZvY2FsUG9pbnQueSlcblxuICAgICAgICAgIGNvbnN0IG9mZnNldFggPSBNYXRoLm1pbihNYXRoLm1heChmb2NhbFBvaW50WCAtIHdpZHRoIC8gMiwgMCksIG1heE9mZnNldFgpXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IE1hdGgubWluKE1hdGgubWF4KGZvY2FsUG9pbnRZIC0gaGVpZ2h0IC8gMiwgMCksIG1heE9mZnNldFkpXG5cbiAgICAgICAgICByZXNpemVkID0gcmVzaXplZC5leHRyYWN0KHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IG9mZnNldFgsXG4gICAgICAgICAgICB0b3A6IG9mZnNldFksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNpemVkID0gcmVzaXplZC5yZXNpemUoaW1hZ2VSZXNpemVDb25maWcpXG4gICAgICB9XG5cbiAgICAgIGlmIChpbWFnZVJlc2l6ZUNvbmZpZy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIHJlc2l6ZWQgPSByZXNpemVkLnRvRm9ybWF0KFxuICAgICAgICAgIGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgIGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMub3B0aW9ucyxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1hZ2VSZXNpemVDb25maWcudHJpbU9wdGlvbnMpIHtcbiAgICAgICAgcmVzaXplZCA9IHJlc2l6ZWQudHJpbShpbWFnZVJlc2l6ZUNvbmZpZy50cmltT3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiBidWZmZXJEYXRhLCBpbmZvOiBidWZmZXJJbmZvIH0gPSBhd2FpdCByZXNpemVkLnRvQnVmZmVyKHtcbiAgICAgICAgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbWFnZSA9IGdldFNhbml0aXplZEltYWdlRGF0YShzYXZlZEZpbGVuYW1lKVxuXG4gICAgICBpZiAocmVxLnBheWxvYWRVcGxvYWRTaXplcykge1xuICAgICAgICByZXEucGF5bG9hZFVwbG9hZFNpemVzW2ltYWdlUmVzaXplQ29uZmlnLm5hbWVdID0gYnVmZmVyRGF0YVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lSW5mbyA9IGF3YWl0IGZyb21CdWZmZXIoYnVmZmVyRGF0YSlcblxuICAgICAgY29uc3QgaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMgPSBjcmVhdGVJbWFnZU5hbWUoXG4gICAgICAgIHNhbml0aXplZEltYWdlLm5hbWUsXG4gICAgICAgIGJ1ZmZlckluZm8sXG4gICAgICAgIG1pbWVJbmZvPy5leHQgfHwgc2FuaXRpemVkSW1hZ2UuZXh0LFxuICAgICAgKVxuXG4gICAgICBjb25zdCBpbWFnZVBhdGggPSBgJHtzdGF0aWNQYXRofS8ke2ltYWdlTmFtZVdpdGhEaW1lbnNpb25zfWBcblxuICAgICAgaWYgKGF3YWl0IGZpbGVFeGlzdHMoaW1hZ2VQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZzLnVubGlua1N5bmMoaW1hZ2VQYXRoKVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUgdW5saW5rIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaGVpZ2h0LCBzaXplLCB3aWR0aCB9ID0gYnVmZmVySW5mb1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlc3VsdChcbiAgICAgICAgaW1hZ2VSZXNpemVDb25maWcubmFtZSxcbiAgICAgICAgaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIG1pbWVJbmZvPy5taW1lIHx8IG1pbWVUeXBlLFxuICAgICAgICBbeyBidWZmZXI6IGJ1ZmZlckRhdGEsIHBhdGg6IGltYWdlUGF0aCB9XSxcbiAgICAgIClcbiAgICB9KSxcbiAgKVxuXG4gIHJldHVybiByZXN1bHRzLnJlZHVjZShcbiAgICAoYWNjLCByZXN1bHQpID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24oYWNjLnNpemVEYXRhLCByZXN1bHQuc2l6ZURhdGEpXG4gICAgICBhY2Muc2l6ZXNUb1NhdmUucHVzaCguLi5yZXN1bHQuc2l6ZXNUb1NhdmUpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSxcbiAgICB7IHNpemVEYXRhOiB7fSwgc2l6ZXNUb1NhdmU6IFtdIH0sXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJyZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzIiwiZ2V0U2FuaXRpemVkSW1hZ2VEYXRhIiwic291cmNlSW1hZ2UiLCJleHRlbnNpb24iLCJzcGxpdCIsInBvcCIsIm5hbWUiLCJzYW5pdGl6ZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZXh0IiwiY3JlYXRlSW1hZ2VOYW1lIiwib3V0cHV0SW1hZ2VOYW1lIiwiaGVpZ2h0Iiwid2lkdGgiLCJjcmVhdGVSZXN1bHQiLCJmaWxlbmFtZSIsImZpbGVzaXplIiwibWltZVR5cGUiLCJzaXplc1RvU2F2ZSIsInNpemVEYXRhIiwibmVlZHNSZXNpemUiLCJkZXNpcmVkSGVpZ2h0IiwiZGVzaXJlZFdpZHRoIiwid2l0aG91dEVubGFyZ2VtZW50Iiwid2l0aG91dFJlZHVjdGlvbiIsIm9yaWdpbmFsIiwidW5kZWZpbmVkIiwiaXNXaWR0aE9ySGVpZ2h0Tm90RGVmaW5lZCIsImhhc0luc3VmZmljaWVudFdpZHRoIiwiaGFzSW5zdWZmaWNpZW50SGVpZ2h0IiwiY29uZmlnIiwiZGltZW5zaW9ucyIsImZpbGUiLCJyZXEiLCJzYXZlZEZpbGVuYW1lIiwic3RhdGljUGF0aCIsImltYWdlU2l6ZXMiLCJ1cGxvYWQiLCJzaGFycEJhc2UiLCJzaGFycCIsInRlbXBGaWxlUGF0aCIsImRhdGEiLCJyb3RhdGUiLCJyZXN1bHRzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImltYWdlUmVzaXplQ29uZmlnIiwicmVzaXplZCIsImNsb25lIiwiaGFzRWRpdHMiLCJxdWVyeSIsInVwbG9hZEVkaXRzIiwidGFyZ2V0QXNwZWN0UmF0aW8iLCJvcmlnaW5hbEFzcGVjdFJhdGlvIiwicmVzaXplIiwiZm9jYWxQb2ludCIsIngiLCJ5IiwiaXNOdW1iZXIiLCJwcmlvcml0aXplSGVpZ2h0IiwiaW5mbyIsInRvQnVmZmVyIiwicmVzb2x2ZVdpdGhPYmplY3QiLCJtYXhPZmZzZXRYIiwiTWF0aCIsIm1heCIsIm1heE9mZnNldFkiLCJmb2NhbFBvaW50WCIsImZsb29yIiwiZm9jYWxQb2ludFkiLCJvZmZzZXRYIiwibWluIiwib2Zmc2V0WSIsImV4dHJhY3QiLCJsZWZ0IiwidG9wIiwiZm9ybWF0T3B0aW9ucyIsInRvRm9ybWF0IiwiZm9ybWF0Iiwib3B0aW9ucyIsInRyaW1PcHRpb25zIiwidHJpbSIsImJ1ZmZlckRhdGEiLCJidWZmZXJJbmZvIiwic2FuaXRpemVkSW1hZ2UiLCJwYXlsb2FkVXBsb2FkU2l6ZXMiLCJtaW1lSW5mbyIsImZyb21CdWZmZXIiLCJpbWFnZU5hbWVXaXRoRGltZW5zaW9ucyIsImltYWdlUGF0aCIsImZpbGVFeGlzdHMiLCJmcyIsInVubGlua1N5bmMiLCJzaXplIiwibWltZSIsImJ1ZmZlciIsInBhdGgiLCJyZWR1Y2UiLCJhY2MiLCJyZXN1bHQiLCJPYmplY3QiLCJhc3NpZ24iLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7OytCQW1KQTs7Ozs7Ozs7Ozs7OztDQWFDLEdBQ0Q7OztlQUE4QkE7OzswQkE5Skg7MkRBQ1o7eUVBQ007OERBQ0g7MEJBT087bUVBQ0Y7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
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2ltYWdlUmVzaXplci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFVwbG9hZGVkRmlsZSB9IGZyb20gJ2V4cHJlc3MtZmlsZXVwbG9hZCdcbmltcG9ydCB0eXBlIHsgT3V0cHV0SW5mbyB9IGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgeyBmcm9tQnVmZmVyIH0gZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHNhbml0aXplIGZyb20gJ3Nhbml0aXplLWZpbGVuYW1lJ1xuaW1wb3J0IHNoYXJwIGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgdHlwZSB7IFVwbG9hZEVkaXRzIH0gZnJvbSAnLi4vYWRtaW4vY29tcG9uZW50cy92aWV3cy9jb2xsZWN0aW9ucy9FZGl0L3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uL2V4cHJlc3MvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEZpbGVTaXplLCBGaWxlU2l6ZXMsIEZpbGVUb1NhdmUsIEltYWdlU2l6ZSwgUHJvYmVkSW1hZ2VTaXplIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICcuLi91dGlsaXRpZXMvaXNOdW1iZXInXG5pbXBvcnQgZmlsZUV4aXN0cyBmcm9tICcuL2ZpbGVFeGlzdHMnXG5cbnR5cGUgUmVzaXplQXJncyA9IHtcbiAgY29uZmlnOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnXG4gIGRpbWVuc2lvbnM6IFByb2JlZEltYWdlU2l6ZVxuICBmaWxlOiBVcGxvYWRlZEZpbGVcbiAgbWltZVR5cGU6IHN0cmluZ1xuICByZXE6IFBheWxvYWRSZXF1ZXN0ICYge1xuICAgIHF1ZXJ5Pzoge1xuICAgICAgdXBsb2FkRWRpdHM/OiBVcGxvYWRFZGl0c1xuICAgIH1cbiAgfVxuICBzYXZlZEZpbGVuYW1lOiBzdHJpbmdcbiAgc3RhdGljUGF0aDogc3RyaW5nXG59XG5cbi8qKiBSZXN1bHQgZnJvbSByZXNpemluZyBhbmQgdHJhbnNmb3JtaW5nIHRoZSByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZXMgKi9cbnR5cGUgSW1hZ2VTaXplc1Jlc3VsdCA9IHtcbiAgc2l6ZURhdGE6IEZpbGVTaXplc1xuICBzaXplc1RvU2F2ZTogRmlsZVRvU2F2ZVtdXG59XG5cbnR5cGUgU2FuaXRpemVkSW1hZ2VEYXRhID0ge1xuICBleHQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSB0aGUgaW1hZ2UgbmFtZSBhbmQgZXh0cmFjdCB0aGUgZXh0ZW5zaW9uIGZyb20gdGhlIHNvdXJjZSBpbWFnZVxuICpcbiAqIEBwYXJhbSBzb3VyY2VJbWFnZSAtIHRoZSBzb3VyY2UgaW1hZ2VcbiAqIEByZXR1cm5zIHRoZSBzYW5pdGl6ZWQgbmFtZSBhbmQgZXh0ZW5zaW9uXG4gKi9cbmNvbnN0IGdldFNhbml0aXplZEltYWdlRGF0YSA9IChzb3VyY2VJbWFnZTogc3RyaW5nKTogU2FuaXRpemVkSW1hZ2VEYXRhID0+IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gc291cmNlSW1hZ2Uuc3BsaXQoJy4nKS5wb3AoKVxuICBjb25zdCBuYW1lID0gc2FuaXRpemUoc291cmNlSW1hZ2Uuc3Vic3RyaW5nKDAsIHNvdXJjZUltYWdlLmxhc3RJbmRleE9mKCcuJykpIHx8IHNvdXJjZUltYWdlKVxuICByZXR1cm4geyBuYW1lLCBleHQ6IGV4dGVuc2lvbiB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGltYWdlIG5hbWUgYmFzZWQgb24gdGhlIG91dHB1dCBpbWFnZSBuYW1lLCB0aGUgZGltZW5zaW9ucyBhbmRcbiAqIHRoZSBleHRlbnNpb24uXG4gKlxuICogSWdub3JlIHRoZSBmYWN0IHRoYXQgZHVwbGljYXRlIG5hbWVzIGNvdWxkIGhhcHBlbiBpZiB0aGUgdGhlcmUgaXMgb25lXG4gKiBzaXplIHdpdGggYHdpZHRoIEFORCBoZWlnaHRgIGFuZCBvbmUgd2l0aCBvbmx5IGBoZWlnaHQgT1Igd2lkdGhgLiBCZWNhdXNlXG4gKiBzcGFjZSBpcyBleHBlbnNpdmUsIHdlIHdpbGwgcmV1c2UgdGhlIHNhbWUgaW1hZ2UgZm9yIGJvdGggc2l6ZXMuXG4gKlxuICogQHBhcmFtIG91dHB1dEltYWdlTmFtZSAtIHRoZSBzYW5pdGl6ZWQgaW1hZ2UgbmFtZVxuICogQHBhcmFtIGJ1ZmZlckluZm8gLSB0aGUgYnVmZmVyIGluZm9cbiAqIEBwYXJhbSBleHRlbnNpb24gLSB0aGUgZXh0ZW5zaW9uIHRvIHVzZVxuICogQHJldHVybnMgdGhlIG5ldyBpbWFnZSBuYW1lIHRoYXQgaXMgbm90IHRha2VuXG4gKi9cbmNvbnN0IGNyZWF0ZUltYWdlTmFtZSA9IChcbiAgb3V0cHV0SW1hZ2VOYW1lOiBzdHJpbmcsXG4gIHsgaGVpZ2h0LCB3aWR0aCB9OiBPdXRwdXRJbmZvLFxuICBleHRlbnNpb246IHN0cmluZyxcbikgPT4gYCR7b3V0cHV0SW1hZ2VOYW1lfS0ke3dpZHRofXgke2hlaWdodH0uJHtleHRlbnNpb259YFxuXG4vKipcbiAqIENyZWF0ZSB0aGUgcmVzdWx0IG9iamVjdCBmb3IgdGhlIGltYWdlIHJlc2l6ZSBvcGVyYXRpb24gYmFzZWQgb24gdGhlXG4gKiBwcm92aWRlZCBwYXJhbWV0ZXJzLiBJZiB0aGUgbmFtZSBpcyBub3QgcHJvdmlkZWQsIGFuIGVtcHR5IHJlc3VsdCBvYmplY3RcbiAqIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSB0aGUgZmlsZW5hbWUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gd2lkdGggLSB0aGUgd2lkdGggb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gaGVpZ2h0IC0gdGhlIGhlaWdodCBvZiB0aGUgaW1hZ2VcbiAqIEBwYXJhbSBmaWxlc2l6ZSAtIHRoZSBmaWxlc2l6ZSBvZiB0aGUgaW1hZ2VcbiAqIEBwYXJhbSBtaW1lVHlwZSAtIHRoZSBtaW1lIHR5cGUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gc2l6ZXNUb1NhdmUgLSB0aGUgc2l6ZXMgdG8gc2F2ZVxuICogQHJldHVybnMgdGhlIHJlc3VsdCBvYmplY3RcbiAqL1xuY29uc3QgY3JlYXRlUmVzdWx0ID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGZpbGVuYW1lOiBGaWxlU2l6ZVsnZmlsZW5hbWUnXSA9IG51bGwsXG4gIHdpZHRoOiBGaWxlU2l6ZVsnd2lkdGgnXSA9IG51bGwsXG4gIGhlaWdodDogRmlsZVNpemVbJ2hlaWdodCddID0gbnVsbCxcbiAgZmlsZXNpemU6IEZpbGVTaXplWydmaWxlc2l6ZSddID0gbnVsbCxcbiAgbWltZVR5cGU6IEZpbGVTaXplWydtaW1lVHlwZSddID0gbnVsbCxcbiAgc2l6ZXNUb1NhdmU6IEZpbGVUb1NhdmVbXSA9IFtdLFxuKTogSW1hZ2VTaXplc1Jlc3VsdCA9PiAoe1xuICBzaXplRGF0YToge1xuICAgIFtuYW1lXToge1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBmaWxlc2l6ZSxcbiAgICAgIGhlaWdodCxcbiAgICAgIG1pbWVUeXBlLFxuICAgICAgd2lkdGgsXG4gICAgfSxcbiAgfSxcbiAgc2l6ZXNUb1NhdmUsXG59KVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBpbWFnZSBuZWVkcyB0byBiZSByZXNpemVkIGFjY29yZGluZyB0byB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnNcbiAqIGFuZCB0aGUgb3JpZ2luYWwgaW1hZ2Ugc2l6ZS4gSWYgdGhlIHJlc2l6ZSBvcHRpb25zIHdpdGhvdXRFbmxhcmdlbWVudCBvciB3aXRob3V0UmVkdWN0aW9uIGFyZSBwcm92aWRlZCxcbiAqIHRoZSBpbWFnZSB3aWxsIGJlIHJlc2l6ZWQgcmVnYXJkbGVzcyBvZiB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnMsIGdpdmVuIHRoYXQgdGhlXG4gKiB3aWR0aCBvciBoZWlnaHQgdG8gYmUgcmVzaXplZCBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gcmVzaXplQ29uZmlnIC0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBkaW1lbnNpb25zIGFuZCByZXNpemUgb3B0aW9uc1xuICogQHBhcmFtIG9yaWdpbmFsIC0gdGhlIG9yaWdpbmFsIGltYWdlIHNpemVcbiAqIEByZXR1cm5zIHRydWUgaWYgcmVzaXppbmcgaXMgbm90IG5lZWRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmNvbnN0IHByZXZlbnRSZXNpemUgPSAoXG4gIHsgaGVpZ2h0OiBkZXNpcmVkSGVpZ2h0LCB3aWR0aDogZGVzaXJlZFdpZHRoLCB3aXRob3V0RW5sYXJnZW1lbnQsIHdpdGhvdXRSZWR1Y3Rpb24gfTogSW1hZ2VTaXplLFxuICBvcmlnaW5hbDogUHJvYmVkSW1hZ2VTaXplLFxuKTogYm9vbGVhbiA9PiB7XG4gIC8vIGRlZmF1bHQgaXMgdG8gYWxsb3cgcmVkdWN0aW9uXG4gIGlmICh3aXRob3V0UmVkdWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2UgLy8gbmVlZHMgcmVzaXplXG4gIH1cblxuICAvLyBkZWZhdWx0IGlzIHRvIHByZXZlbnQgZW5sYXJnZW1lbnRcbiAgaWYgKHdpdGhvdXRFbmxhcmdlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlIC8vIG5lZWRzIHJlc2l6ZVxuICB9XG5cbiAgY29uc3QgaXNXaWR0aE9ySGVpZ2h0Tm90RGVmaW5lZCA9ICFkZXNpcmVkSGVpZ2h0IHx8ICFkZXNpcmVkV2lkdGhcbiAgaWYgKGlzV2lkdGhPckhlaWdodE5vdERlZmluZWQpIHtcbiAgICAvLyBJZiB3aXRoIGFuZCBoZWlnaHQgYXJlIG5vdCBkZWZpbmVkLCBpdCBtZWFucyB0aGVyZSBpcyBhIGZvcm1hdCBjb252ZXJzaW9uXG4gICAgLy8gYW5kIHRoZSBpbWFnZSBuZWVkcyB0byBiZSBcInJlc2l6ZWRcIiAodHJhbnNmb3JtZWQpLlxuICAgIHJldHVybiBmYWxzZSAvLyBuZWVkcyByZXNpemVcbiAgfVxuXG4gIGNvbnN0IGhhc0luc3VmZmljaWVudFdpZHRoID0gZGVzaXJlZFdpZHRoID4gb3JpZ2luYWwud2lkdGhcbiAgY29uc3QgaGFzSW5zdWZmaWNpZW50SGVpZ2h0ID0gZGVzaXJlZEhlaWdodCA+IG9yaWdpbmFsLmhlaWdodFxuICBpZiAoaGFzSW5zdWZmaWNpZW50V2lkdGggJiYgaGFzSW5zdWZmaWNpZW50SGVpZ2h0KSB7XG4gICAgLy8gZG9lc24ndCBuZWVkIHJlc2l6ZSAtIHByZXZlbnQgZW5sYXJnZW1lbnQuIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIGJvdGggd2lkdGggYW5kIGhlaWdodCBhcmUgaW5zdWZmaWNpZW50LlxuICAgIC8vIGlmIG9ubHkgb25lIGRpbWVuc2lvbiBpcyBpbnN1ZmZpY2llbnQgYW5kIHRoZSBvdGhlciBpcyBzdWZmaWNpZW50LCByZXNpemluZyBuZWVkcyB0byBoYXBwZW4sIGFzIHRoZSBpbWFnZVxuICAgIC8vIHNob3VsZCBiZSByZXNpemVkIHRvIHRoZSBzdWZmaWNpZW50IGRpbWVuc2lvbi5cbiAgICByZXR1cm4gdHJ1ZSAvLyBkbyBub3QgY3JlYXRlIGEgbmV3IHNpemVcbiAgfVxuXG4gIHJldHVybiBmYWxzZSAvLyBuZWVkcyByZXNpemVcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHBhc3NlZCBkaXJlY3RseSB0byBzaGFycCB3aXRob3V0IHBheWxvYWQgYWRqdXN0aW5nIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIG9iamVjdCBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgZGltZW5zaW9ucyBhbmQgcmVzaXplIG9wdGlvbnNcbiAqIEBwYXJhbSBvcmlnaW5hbCAtIHRoZSBvcmlnaW5hbCBpbWFnZSBzaXplXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbWFnZSBzaG91bGQgcGFzc2VkIGRpcmVjdGx5IHRvIHNoYXJwXG4gKi9cbmNvbnN0IGFwcGx5UGF5bG9hZEFkanVzdG1lbnRzID0gKFxuICB7IGhlaWdodCwgd2lkdGgsIHdpdGhvdXRFbmxhcmdlbWVudCwgd2l0aG91dFJlZHVjdGlvbiB9OiBJbWFnZVNpemUsXG4gIG9yaWdpbmFsOiBQcm9iZWRJbWFnZVNpemUsXG4pID0+IHtcbiAgaWYgKCFpc051bWJlcihoZWlnaHQpICYmICFpc051bWJlcih3aWR0aCkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHRhcmdldEFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHRcbiAgY29uc3Qgb3JpZ2luYWxBc3BlY3RSYXRpbyA9IG9yaWdpbmFsLndpZHRoIC8gb3JpZ2luYWwuaGVpZ2h0XG4gIGlmIChvcmlnaW5hbEFzcGVjdFJhdGlvID09PSB0YXJnZXRBc3BlY3RSYXRpbykgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qgc2tpcEVubGFyZ2VtZW50ID0gd2l0aG91dEVubGFyZ2VtZW50ICYmIChvcmlnaW5hbC5oZWlnaHQgPCBoZWlnaHQgfHwgb3JpZ2luYWwud2lkdGggPCB3aWR0aClcbiAgY29uc3Qgc2tpcFJlZHVjdGlvbiA9IHdpdGhvdXRSZWR1Y3Rpb24gJiYgKG9yaWdpbmFsLmhlaWdodCA+IGhlaWdodCB8fCBvcmlnaW5hbC53aWR0aCA+IHdpZHRoKVxuICBpZiAoc2tpcEVubGFyZ2VtZW50IHx8IHNraXBSZWR1Y3Rpb24pIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogU2FuaXRpemUgdGhlIHJlc2l6ZSBjb25maWcuIElmIHRoZSByZXNpemUgY29uZmlnIGhhcyB0aGUgYHdpdGhvdXRSZWR1Y3Rpb25gXG4gKiBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSwgdGhlIGBmaXRgIGFuZCBgcG9zaXRpb25gIHByb3BlcnRpZXMgd2lsbCBiZSBzZXQgdG8gYGNvbnRhaW5gXG4gKiBhbmQgYHRvcCBsZWZ0YCByZXNwZWN0aXZlbHkuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIHRoZSByZXNpemUgY29uZmlnXG4gKiBAcmV0dXJucyBhIHNhbml0aXplZCByZXNpemUgY29uZmlnXG4gKi9cbmNvbnN0IHNhbml0aXplUmVzaXplQ29uZmlnID0gKHJlc2l6ZUNvbmZpZzogSW1hZ2VTaXplKTogSW1hZ2VTaXplID0+IHtcbiAgaWYgKHJlc2l6ZUNvbmZpZy53aXRob3V0UmVkdWN0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc2l6ZUNvbmZpZyxcbiAgICAgIC8vIFdoeSBmaXQgYGNvbnRhaW5gIHNob3VsZCBhbHNvIGJlIHNldCB0byBodHRwczovL2dpdGh1Yi5jb20vbG92ZWxsL3NoYXJwL2lzc3Vlcy8zNTk1XG4gICAgICBmaXQ6IHJlc2l6ZUNvbmZpZz8uZml0IHx8ICdjb250YWluJyxcbiAgICAgIHBvc2l0aW9uOiByZXNpemVDb25maWc/LnBvc2l0aW9uIHx8ICdsZWZ0IHRvcCcsXG4gICAgfVxuICB9XG4gIHJldHVybiByZXNpemVDb25maWdcbn1cblxuLyoqXG4gKiBGb3IgdGhlIHByb3ZpZGVkIGltYWdlIHNpemVzLCBoYW5kbGUgdGhlIHJlc2l6aW5nIGFuZCB0aGUgdHJhbnNmb3Jtc1xuICogKGZvcm1hdCwgdHJpbSwgZXRjLikgb2YgZWFjaCByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2JqZWN0LlxuICogVGhpcyBvbmx5IGhhbmRsZXMgdGhlIGltYWdlIHNpemVzLiBUaGUgdHJhbnNmb3JtcyBvZiB0aGUgb3JpZ2luYWwgaW1hZ2VcbiAqIGFyZSBoYW5kbGVkIGluIHtAbGluayAuL2dlbmVyYXRlRmlsZURhdGEudHN9LlxuICpcbiAqIFRoZSBpbWFnZSB3aWxsIGJlIHJlc2l6ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZFxuICogcmVzaXplIGNvbmZpZy4gSWYgbm8gaW1hZ2Ugc2l6ZXMgYXJlIHJlcXVlc3RlZCwgdGhlIHJlc29sdmVkIGRhdGEgd2lsbCBiZSBlbXB0eS5cbiAqIEZvciBldmVyeSBpbWFnZSB0aGF0IGRvcyBub3QgbmVlZCB0byBiZSByZXNpemVkLCBhbiByZXN1bHQgb2JqZWN0IHdpdGggYG51bGxgXG4gKiBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIHRoZSByZXNpemUgY29uZmlnXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSByZXNpemUgb3BlcmF0aW9uKHMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZUFuZFRyYW5zZm9ybUltYWdlU2l6ZXMoe1xuICBjb25maWcsXG4gIGRpbWVuc2lvbnMsXG4gIGZpbGUsXG4gIG1pbWVUeXBlLFxuICByZXEsXG4gIHNhdmVkRmlsZW5hbWUsXG4gIHN0YXRpY1BhdGgsXG59OiBSZXNpemVBcmdzKTogUHJvbWlzZTxJbWFnZVNpemVzUmVzdWx0PiB7XG4gIGNvbnN0IHsgaW1hZ2VTaXplcyB9ID0gY29uZmlnLnVwbG9hZFxuICAvLyBOb3RpbmcgdG8gcmVzaXplIGhlcmUgc28gcmV0dXJuIGFzIGVhcmx5IGFzIHBvc3NpYmxlXG4gIGlmICghaW1hZ2VTaXplcykgcmV0dXJuIHsgc2l6ZURhdGE6IHt9LCBzaXplc1RvU2F2ZTogW10gfVxuXG4gIGNvbnN0IHNoYXJwQmFzZSA9IHNoYXJwKGZpbGUudGVtcEZpbGVQYXRoIHx8IGZpbGUuZGF0YSkucm90YXRlKCkgLy8gcGFzcyByb3RhdGUoKSB0byBhdXRvLXJvdGF0ZSBiYXNlZCBvbiBFWElGIGRhdGEuIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvcHVsbC8zMDgxXG5cbiAgY29uc3QgcmVzdWx0czogSW1hZ2VTaXplc1Jlc3VsdFtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgaW1hZ2VTaXplcy5tYXAoYXN5bmMgKGltYWdlUmVzaXplQ29uZmlnKTogUHJvbWlzZTxJbWFnZVNpemVzUmVzdWx0PiA9PiB7XG4gICAgICBpbWFnZVJlc2l6ZUNvbmZpZyA9IHNhbml0aXplUmVzaXplQ29uZmlnKGltYWdlUmVzaXplQ29uZmlnKVxuXG4gICAgICAvLyBUaGlzIGNoZWNrcyBpZiBhIHJlc2l6ZSBzaG91bGQgaGFwcGVuLiBJZiBub3QsIHRoZSByZXNpemVkIGltYWdlIHdpbGwgYmVcbiAgICAgIC8vIHNraXBwZWQgQ09NUExFVEVMWSBhbmQgdGh1cyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGltYWdlcy5cbiAgICAgIC8vIEFsbCBmdXJ0aGVyIGZvcm1hdC90cmltIG9wdGlvbnMgd2lsbCB0aHVzIGJlIHNraXBwZWQgYXMgd2VsbC5cbiAgICAgIGlmIChwcmV2ZW50UmVzaXplKGltYWdlUmVzaXplQ29uZmlnLCBkaW1lbnNpb25zKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmVzdWx0KGltYWdlUmVzaXplQ29uZmlnLm5hbWUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGltYWdlVG9SZXNpemUgPSBzaGFycEJhc2UuY2xvbmUoKVxuICAgICAgbGV0IHJlc2l6ZWQgPSBpbWFnZVRvUmVzaXplLnJlc2l6ZShpbWFnZVJlc2l6ZUNvbmZpZylcblxuICAgICAgaWYgKFxuICAgICAgICByZXEucXVlcnk/LnVwbG9hZEVkaXRzPy5mb2NhbFBvaW50ICYmXG4gICAgICAgIGFwcGx5UGF5bG9hZEFkanVzdG1lbnRzKGltYWdlUmVzaXplQ29uZmlnLCBkaW1lbnNpb25zKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHsgaGVpZ2h0OiByZXNpemVIZWlnaHQsIHdpZHRoOiByZXNpemVXaWR0aCB9ID0gaW1hZ2VSZXNpemVDb25maWdcbiAgICAgICAgY29uc3QgcmVzaXplQXNwZWN0UmF0aW8gPSByZXNpemVXaWR0aCAvIHJlc2l6ZUhlaWdodFxuICAgICAgICBjb25zdCBvcmlnaW5hbEFzcGVjdFJhdGlvID0gZGltZW5zaW9ucy53aWR0aCAvIGRpbWVuc2lvbnMuaGVpZ2h0XG4gICAgICAgIGNvbnN0IHByaW9yaXRpemVIZWlnaHQgPSByZXNpemVBc3BlY3RSYXRpbyA8IG9yaWdpbmFsQXNwZWN0UmF0aW9cblxuICAgICAgICAvLyBTY2FsZSB0aGUgaW1hZ2UgdXAgb3IgZG93biB0byBmaXQgdGhlIHJlc2l6ZSBkaW1lbnNpb25zXG4gICAgICAgIGNvbnN0IHNjYWxlZEltYWdlID0gaW1hZ2VUb1Jlc2l6ZS5yZXNpemUoe1xuICAgICAgICAgIGhlaWdodDogcHJpb3JpdGl6ZUhlaWdodCA/IHJlc2l6ZUhlaWdodCA6IG51bGwsXG4gICAgICAgICAgd2lkdGg6IHByaW9yaXRpemVIZWlnaHQgPyBudWxsIDogcmVzaXplV2lkdGgsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHsgaW5mbzogc2NhbGVkSW1hZ2VJbmZvIH0gPSBhd2FpdCBzY2FsZWRJbWFnZS50b0J1ZmZlcih7IHJlc29sdmVXaXRoT2JqZWN0OiB0cnVlIH0pXG5cbiAgICAgICAgLy8gRm9jYWwgcG9pbnQgYWRqdXN0bWVudHNcbiAgICAgICAgY29uc3QgZm9jYWxQb2ludCA9IHtcbiAgICAgICAgICB4OiBpc051bWJlcihyZXEucXVlcnkudXBsb2FkRWRpdHMuZm9jYWxQb2ludD8ueClcbiAgICAgICAgICAgID8gcmVxLnF1ZXJ5LnVwbG9hZEVkaXRzLmZvY2FsUG9pbnQueFxuICAgICAgICAgICAgOiA1MCxcbiAgICAgICAgICB5OiBpc051bWJlcihyZXEucXVlcnkudXBsb2FkRWRpdHMuZm9jYWxQb2ludD8ueSlcbiAgICAgICAgICAgID8gcmVxLnF1ZXJ5LnVwbG9hZEVkaXRzLmZvY2FsUG9pbnQueVxuICAgICAgICAgICAgOiA1MCxcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNhZmVSZXNpemVXaWR0aCA9IHJlc2l6ZVdpZHRoID8/IHNjYWxlZEltYWdlSW5mby53aWR0aFxuICAgICAgICBjb25zdCBtYXhPZmZzZXRYID0gc2NhbGVkSW1hZ2VJbmZvLndpZHRoIC0gc2FmZVJlc2l6ZVdpZHRoXG4gICAgICAgIGNvbnN0IGxlZnRGb2NhbEVkZ2UgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIHNjYWxlZEltYWdlSW5mby53aWR0aCAqIChmb2NhbFBvaW50LnggLyAxMDApIC0gc2FmZVJlc2l6ZVdpZHRoIC8gMixcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzYWZlT2Zmc2V0WCA9IE1hdGgubWluKE1hdGgubWF4KDAsIGxlZnRGb2NhbEVkZ2UpLCBtYXhPZmZzZXRYKVxuXG4gICAgICAgIGNvbnN0IHNhZmVSZXNpemVIZWlnaHQgPSByZXNpemVIZWlnaHQgPz8gc2NhbGVkSW1hZ2VJbmZvLmhlaWdodFxuICAgICAgICBjb25zdCBtYXhPZmZzZXRZID0gc2NhbGVkSW1hZ2VJbmZvLmhlaWdodCAtIHNhZmVSZXNpemVIZWlnaHRcbiAgICAgICAgY29uc3QgdG9wRm9jYWxFZGdlID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBzY2FsZWRJbWFnZUluZm8uaGVpZ2h0ICogKGZvY2FsUG9pbnQueSAvIDEwMCkgLSBzYWZlUmVzaXplSGVpZ2h0IC8gMixcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzYWZlT2Zmc2V0WSA9IE1hdGgubWluKE1hdGgubWF4KDAsIHRvcEZvY2FsRWRnZSksIG1heE9mZnNldFkpXG5cbiAgICAgICAgLy8gZXh0cmFjdCB0aGUgZm9jYWwgYXJlYSBmcm9tIHRoZSBzY2FsZWQgaW1hZ2VcbiAgICAgICAgcmVzaXplZCA9IHNjYWxlZEltYWdlLmV4dHJhY3Qoe1xuICAgICAgICAgIGhlaWdodDogc2FmZVJlc2l6ZUhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBzYWZlT2Zmc2V0WCxcbiAgICAgICAgICB0b3A6IHNhZmVPZmZzZXRZLFxuICAgICAgICAgIHdpZHRoOiBzYWZlUmVzaXplV2lkdGgsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChpbWFnZVJlc2l6ZUNvbmZpZy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIHJlc2l6ZWQgPSByZXNpemVkLnRvRm9ybWF0KFxuICAgICAgICAgIGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgIGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMub3B0aW9ucyxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1hZ2VSZXNpemVDb25maWcudHJpbU9wdGlvbnMpIHtcbiAgICAgICAgcmVzaXplZCA9IHJlc2l6ZWQudHJpbShpbWFnZVJlc2l6ZUNvbmZpZy50cmltT3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiBidWZmZXJEYXRhLCBpbmZvOiBidWZmZXJJbmZvIH0gPSBhd2FpdCByZXNpemVkLnRvQnVmZmVyKHtcbiAgICAgICAgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbWFnZSA9IGdldFNhbml0aXplZEltYWdlRGF0YShzYXZlZEZpbGVuYW1lKVxuXG4gICAgICBpZiAocmVxLnBheWxvYWRVcGxvYWRTaXplcykge1xuICAgICAgICByZXEucGF5bG9hZFVwbG9hZFNpemVzW2ltYWdlUmVzaXplQ29uZmlnLm5hbWVdID0gYnVmZmVyRGF0YVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lSW5mbyA9IGF3YWl0IGZyb21CdWZmZXIoYnVmZmVyRGF0YSlcblxuICAgICAgY29uc3QgaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMgPSBjcmVhdGVJbWFnZU5hbWUoXG4gICAgICAgIHNhbml0aXplZEltYWdlLm5hbWUsXG4gICAgICAgIGJ1ZmZlckluZm8sXG4gICAgICAgIG1pbWVJbmZvPy5leHQgfHwgc2FuaXRpemVkSW1hZ2UuZXh0LFxuICAgICAgKVxuXG4gICAgICBjb25zdCBpbWFnZVBhdGggPSBgJHtzdGF0aWNQYXRofS8ke2ltYWdlTmFtZVdpdGhEaW1lbnNpb25zfWBcblxuICAgICAgaWYgKGF3YWl0IGZpbGVFeGlzdHMoaW1hZ2VQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZzLnVubGlua1N5bmMoaW1hZ2VQYXRoKVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUgdW5saW5rIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaGVpZ2h0LCBzaXplLCB3aWR0aCB9ID0gYnVmZmVySW5mb1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlc3VsdChcbiAgICAgICAgaW1hZ2VSZXNpemVDb25maWcubmFtZSxcbiAgICAgICAgaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIG1pbWVJbmZvPy5taW1lIHx8IG1pbWVUeXBlLFxuICAgICAgICBbeyBidWZmZXI6IGJ1ZmZlckRhdGEsIHBhdGg6IGltYWdlUGF0aCB9XSxcbiAgICAgIClcbiAgICB9KSxcbiAgKVxuXG4gIHJldHVybiByZXN1bHRzLnJlZHVjZShcbiAgICAoYWNjLCByZXN1bHQpID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24oYWNjLnNpemVEYXRhLCByZXN1bHQuc2l6ZURhdGEpXG4gICAgICBhY2Muc2l6ZXNUb1NhdmUucHVzaCguLi5yZXN1bHQuc2l6ZXNUb1NhdmUpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSxcbiAgICB7IHNpemVEYXRhOiB7fSwgc2l6ZXNUb1NhdmU6IFtdIH0sXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJyZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzIiwiZ2V0U2FuaXRpemVkSW1hZ2VEYXRhIiwic291cmNlSW1hZ2UiLCJleHRlbnNpb24iLCJzcGxpdCIsInBvcCIsIm5hbWUiLCJzYW5pdGl6ZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZXh0IiwiY3JlYXRlSW1hZ2VOYW1lIiwib3V0cHV0SW1hZ2VOYW1lIiwiaGVpZ2h0Iiwid2lkdGgiLCJjcmVhdGVSZXN1bHQiLCJmaWxlbmFtZSIsImZpbGVzaXplIiwibWltZVR5cGUiLCJzaXplc1RvU2F2ZSIsInNpemVEYXRhIiwicHJldmVudFJlc2l6ZSIsImRlc2lyZWRIZWlnaHQiLCJkZXNpcmVkV2lkdGgiLCJ3aXRob3V0RW5sYXJnZW1lbnQiLCJ3aXRob3V0UmVkdWN0aW9uIiwib3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJpc1dpZHRoT3JIZWlnaHROb3REZWZpbmVkIiwiaGFzSW5zdWZmaWNpZW50V2lkdGgiLCJoYXNJbnN1ZmZpY2llbnRIZWlnaHQiLCJhcHBseVBheWxvYWRBZGp1c3RtZW50cyIsImlzTnVtYmVyIiwidGFyZ2V0QXNwZWN0UmF0aW8iLCJvcmlnaW5hbEFzcGVjdFJhdGlvIiwic2tpcEVubGFyZ2VtZW50Iiwic2tpcFJlZHVjdGlvbiIsInNhbml0aXplUmVzaXplQ29uZmlnIiwicmVzaXplQ29uZmlnIiwiZml0IiwicG9zaXRpb24iLCJjb25maWciLCJkaW1lbnNpb25zIiwiZmlsZSIsInJlcSIsInNhdmVkRmlsZW5hbWUiLCJzdGF0aWNQYXRoIiwiaW1hZ2VTaXplcyIsInVwbG9hZCIsInNoYXJwQmFzZSIsInNoYXJwIiwidGVtcEZpbGVQYXRoIiwiZGF0YSIsInJvdGF0ZSIsInJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiaW1hZ2VSZXNpemVDb25maWciLCJpbWFnZVRvUmVzaXplIiwiY2xvbmUiLCJyZXNpemVkIiwicmVzaXplIiwicXVlcnkiLCJ1cGxvYWRFZGl0cyIsImZvY2FsUG9pbnQiLCJyZXNpemVIZWlnaHQiLCJyZXNpemVXaWR0aCIsInJlc2l6ZUFzcGVjdFJhdGlvIiwicHJpb3JpdGl6ZUhlaWdodCIsInNjYWxlZEltYWdlIiwiaW5mbyIsInNjYWxlZEltYWdlSW5mbyIsInRvQnVmZmVyIiwicmVzb2x2ZVdpdGhPYmplY3QiLCJ4IiwieSIsInNhZmVSZXNpemVXaWR0aCIsIm1heE9mZnNldFgiLCJsZWZ0Rm9jYWxFZGdlIiwiTWF0aCIsInJvdW5kIiwic2FmZU9mZnNldFgiLCJtaW4iLCJtYXgiLCJzYWZlUmVzaXplSGVpZ2h0IiwibWF4T2Zmc2V0WSIsInRvcEZvY2FsRWRnZSIsInNhZmVPZmZzZXRZIiwiZXh0cmFjdCIsImxlZnQiLCJ0b3AiLCJmb3JtYXRPcHRpb25zIiwidG9Gb3JtYXQiLCJmb3JtYXQiLCJvcHRpb25zIiwidHJpbU9wdGlvbnMiLCJ0cmltIiwiYnVmZmVyRGF0YSIsImJ1ZmZlckluZm8iLCJzYW5pdGl6ZWRJbWFnZSIsInBheWxvYWRVcGxvYWRTaXplcyIsIm1pbWVJbmZvIiwiZnJvbUJ1ZmZlciIsImltYWdlTmFtZVdpdGhEaW1lbnNpb25zIiwiaW1hZ2VQYXRoIiwiZmlsZUV4aXN0cyIsImZzIiwidW5saW5rU3luYyIsInNpemUiLCJtaW1lIiwiYnVmZmVyIiwicGF0aCIsInJlZHVjZSIsImFjYyIsInJlc3VsdCIsIk9iamVjdCIsImFzc2lnbiIsInB1c2giXSwibWFwcGluZ3MiOiI7Ozs7K0JBa01BOzs7Ozs7Ozs7Ozs7O0NBYUMsR0FDRDs7O2VBQThCQTs7OzBCQTdNSDsyREFDWjt5RUFDTTs4REFDSDswQkFPTzttRUFDRjs7Ozs7O0FBMkJ2Qjs7Ozs7Q0FLQyxHQUNELE1BQU1DLHdCQUF3QixDQUFDQztJQUM3QixNQUFNQyxZQUFZRCxZQUFZRSxLQUFLLENBQUMsS0FBS0MsR0FBRztJQUM1QyxNQUFNQyxPQUFPQyxJQUFBQSx5QkFBUSxFQUFDTCxZQUFZTSxTQUFTLENBQUMsR0FBR04sWUFBWU8sV0FBVyxDQUFDLFNBQVNQO0lBQ2hGLE9BQU87UUFBRUk7UUFBTUksS0FBS1A7SUFBVTtBQUNoQztBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE1BQU1RLGtCQUFrQixDQUN0QkMsaUJBQ0EsRUFBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQWMsRUFDN0JYLFlBQ0csQ0FBQyxFQUFFUyxnQkFBZ0IsQ0FBQyxFQUFFRSxNQUFNLENBQUMsRUFBRUQsT0FBTyxDQUFDLEVBQUVWLFVBQVUsQ0FBQztBQUV6RDs7Ozs7Ozs7Ozs7OztDQWFDLEdBQ0QsTUFBTVksZUFBZSxDQUNuQlQsTUFDQVUsV0FBaUMsSUFBSSxFQUNyQ0YsUUFBMkIsSUFBSSxFQUMvQkQsU0FBNkIsSUFBSSxF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
@@ -1 +1 @@
1
- {"version":3,"file":"fieldSchemaToJSON.d.ts","sourceRoot":"","sources":["../../src/utilities/fieldSchemaToJSON.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,UAAU,CAAA;CACvB,EAAE,CAAA;AAEH,eAAO,MAAM,iBAAiB,WAAY,KAAK,EAAE,oBA6EhD,CAAA"}
1
+ {"version":3,"file":"fieldSchemaToJSON.d.ts","sourceRoot":"","sources":["../../src/utilities/fieldSchemaToJSON.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,UAAU,CAAA;CACvB,EAAE,CAAA;AAEH,eAAO,MAAM,iBAAiB,WAAY,KAAK,EAAE,oBAkGhD,CAAA"}
@@ -13,19 +13,37 @@ const fieldSchemaToJSON = (fields)=>{
13
13
  let result = acc;
14
14
  switch(field.type){
15
15
  case 'group':
16
- case 'array':
17
16
  acc.push({
18
17
  name: field.name,
19
18
  fields: fieldSchemaToJSON(field.fields),
20
19
  type: field.type
21
20
  });
22
21
  break;
22
+ case 'array':
23
+ acc.push({
24
+ name: field.name,
25
+ fields: fieldSchemaToJSON([
26
+ ...field.fields,
27
+ {
28
+ name: 'id',
29
+ type: 'text'
30
+ }
31
+ ]),
32
+ type: field.type
33
+ });
34
+ break;
23
35
  case 'blocks':
24
36
  acc.push({
25
37
  name: field.name,
26
38
  blocks: field.blocks.reduce((acc, block)=>{
27
39
  acc[block.slug] = {
28
- fields: fieldSchemaToJSON(block.fields)
40
+ fields: fieldSchemaToJSON([
41
+ ...block.fields,
42
+ {
43
+ name: 'id',
44
+ type: 'text'
45
+ }
46
+ ])
29
47
  };
30
48
  return acc;
31
49
  }, {}),
@@ -74,4 +92,4 @@ const fieldSchemaToJSON = (fields)=>{
74
92
  }, []);
75
93
  };
76
94
 
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmllbGRTY2hlbWFUb0pTT04udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaWVsZFR5cGVzIH0gZnJvbSAnLi4vZXhwb3J0cy9jb25maWcnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcblxuZXhwb3J0IHR5cGUgRmllbGRTY2hlbWFKU09OID0ge1xuICBibG9ja3M/OiBGaWVsZFNjaGVtYUpTT04gLy8gVE9ETzogY29uZGl0aW9uYWxseSBhZGQgYmFzZWQgb24gYHR5cGVgXG4gIGZpZWxkcz86IEZpZWxkU2NoZW1hSlNPTiAvLyBUT0RPOiBjb25kaXRpb25hbGx5IGFkZCBiYXNlZCBvbiBgdHlwZWBcbiAgaGFzTWFueT86IGJvb2xlYW4gLy8gVE9ETzogY29uZGl0aW9uYWxseSBhZGQgYmFzZWQgb24gYHR5cGVgXG4gIG5hbWU6IHN0cmluZ1xuICByZWxhdGlvblRvPzogc3RyaW5nIC8vIFRPRE86IGNvbmRpdGlvbmFsbHkgYWRkIGJhc2VkIG9uIGB0eXBlYFxuICBzbHVnPzogc3RyaW5nIC8vIFRPRE86IGNvbmRpdGlvbmFsbHkgYWRkIGJhc2VkIG9uIGB0eXBlYFxuICB0eXBlOiBrZXlvZiBGaWVsZFR5cGVzXG59W11cblxuZXhwb3J0IGNvbnN0IGZpZWxkU2NoZW1hVG9KU09OID0gKGZpZWxkczogRmllbGRbXSk6IEZpZWxkU2NoZW1hSlNPTiA9PiB7XG4gIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGZpZWxkKSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9IGFjY1xuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICdncm91cCc6XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgICAgIGZpZWxkczogZmllbGRTY2hlbWFUb0pTT04oZmllbGQuZmllbGRzKSxcbiAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdibG9ja3MnOlxuICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgICAgICBibG9ja3M6IGZpZWxkLmJsb2Nrcy5yZWR1Y2UoKGFjYywgYmxvY2spID0+IHtcbiAgICAgICAgICAgIGFjY1tibG9jay5zbHVnXSA9IHtcbiAgICAgICAgICAgICAgZmllbGRzOiBmaWVsZFNjaGVtYVRvSlNPTihibG9jay5maWVsZHMpLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgfSwge30pLFxuICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ3Jvdyc6XG4gICAgICBjYXNlICdjb2xsYXBzaWJsZSc6XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZmllbGRTY2hlbWFUb0pTT04oZmllbGQuZmllbGRzKSlcblxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICBsZXQgdGFiRmllbGRzID0gW11cblxuICAgICAgICBmaWVsZC50YWJzLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgICAgIGlmICgnbmFtZScgaW4gdGFiKSB7XG4gICAgICAgICAgICB0YWJGaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgIG5hbWU6IHRhYi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZHM6IGZpZWxkU2NoZW1hVG9KU09OKHRhYi5maWVsZHMpLFxuICAgICAgICAgICAgICB0eXBlOiAndGFiJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWJGaWVsZHMgPSB0YWJGaWVsZHMuY29uY2F0KGZpZWxkU2NoZW1hVG9KU09OKHRhYi5maWVsZHMpKVxuICAgICAgICB9KVxuXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQodGFiRmllbGRzKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3JlbGF0aW9uc2hpcCc6XG4gICAgICBjYXNlICd1cGxvYWQnOlxuICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgICAgICBoYXNNYW55OiAnaGFzTWFueScgaW4gZmllbGQgPyBCb29sZWFuKGZpZWxkLmhhc01hbnkpIDogZmFsc2UsIC8vIFRPRE86IHR5cGUgdGhpc1xuICAgICAgICAgIHJlbGF0aW9uVG86IGZpZWxkLnJlbGF0aW9uVG8sXG4gICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoJ25hbWUnIGluIGZpZWxkKSB7XG4gICAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfSwgW10pXG59XG4iXSwibmFtZXMiOlsiZmllbGRTY2hlbWFUb0pTT04iLCJmaWVsZHMiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZCIsInJlc3VsdCIsInR5cGUiLCJwdXNoIiwibmFtZSIsImJsb2NrcyIsImJsb2NrIiwic2x1ZyIsImNvbmNhdCIsInRhYkZpZWxkcyIsInRhYnMiLCJmb3JFYWNoIiwidGFiIiwiaGFzTWFueSIsIkJvb2xlYW4iLCJyZWxhdGlvblRvIl0sIm1hcHBpbmdzIjoiOzs7OytCQWFhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSxvQkFBb0IsQ0FBQ0M7SUFDaEMsT0FBT0EsT0FBT0MsTUFBTSxDQUFDLENBQUNDLEtBQUtDO1FBQ3pCLElBQUlDLFNBQVNGO1FBRWIsT0FBUUMsTUFBTUUsSUFBSTtZQUNoQixLQUFLO1lBQ0wsS0FBSztnQkFDSEgsSUFBSUksSUFBSSxDQUFDO29CQUNQQyxNQUFNSixNQUFNSSxJQUFJO29CQUNoQlAsUUFBUUQsa0JBQWtCSSxNQUFNSCxNQUFNO29CQUN0Q0ssTUFBTUYsTUFBTUUsSUFBSTtnQkFDbEI7Z0JBQ0E7WUFFRixLQUFLO2dCQUNISCxJQUFJSSxJQUFJLENBQUM7b0JBQ1BDLE1BQU1KLE1BQU1JLElBQUk7b0JBQ2hCQyxRQUFRTCxNQUFNSyxNQUFNLENBQUNQLE1BQU0sQ0FBQyxDQUFDQyxLQUFLTzt3QkFDaENQLEdBQUcsQ0FBQ08sTUFBTUMsSUFBSSxDQUFDLEdBQUc7NEJBQ2hCVixRQUFRRCxrQkFBa0JVLE1BQU1ULE1BQU07d0JBQ3hDO3dCQUVBLE9BQU9FO29CQUNULEdBQUcsQ0FBQztvQkFDSkcsTUFBTUYsTUFBTUUsSUFBSTtnQkFDbEI7Z0JBQ0E7WUFFRixLQUFLO1lBQ0wsS0FBSztnQkFDSEQsU0FBU0EsT0FBT08sTUFBTSxDQUFDWixrQkFBa0JJLE1BQU1ILE1BQU07Z0JBRXJEO1lBRUYsS0FBSztnQkFBUTtvQkFDWCxJQUFJWSxZQUFZLEVBQUU7b0JBRWxCVCxNQUFNVSxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDQzt3QkFDbEIsSUFBSSxVQUFVQSxLQUFLOzRCQUNqQkgsVUFBVU4sSUFBSSxDQUFDO2dDQUNiQyxNQUFNUSxJQUFJUixJQUFJO2dDQUNkUCxRQUFRRCxrQkFBa0JnQixJQUFJZixNQUFNO2dDQUNwQ0ssTUFBTTs0QkFDUjs0QkFDQTt3QkFDRjt3QkFFQU8sWUFBWUEsVUFBVUQsTUFBTSxDQUFDWixrQkFBa0JnQixJQUFJZixNQUFNO29CQUMzRDtvQkFFQUksU0FBU0EsT0FBT08sTUFBTSxDQUFDQztvQkFFdkI7Z0JBQ0Y7WUFFQSxLQUFLO1lBQ0wsS0FBSztnQkFDSFYsSUFBSUksSUFBSSxDQUFDO29CQUNQQyxNQUFNSixNQUFNSSxJQUFJO29CQUNoQlMsU0FBUyxhQUFhYixRQUFRYyxRQUFRZCxNQUFNYSxPQUFPLElBQUk7b0JBQ3ZERSxZQUFZZixNQUFNZSxVQUFVO29CQUM1QmIsTUFBTUYsTUFBTUUsSUFBSTtnQkFDbEI7Z0JBRUE7WUFFRjtnQkFDRSxJQUFJLFVBQVVGLE9BQU87b0JBQ25CRCxJQUFJSSxJQUFJLENBQUM7d0JBQ1BDLE1BQU1KLE1BQU1JLElBQUk7d0JBQ2hCRixNQUFNRixNQUFNRSxJQUFJO29CQUNsQjtnQkFDRjtRQUNKO1FBRUEsT0FBT0Q7SUFDVCxHQUFHLEVBQUU7QUFDUCJ9
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmllbGRTY2hlbWFUb0pTT04udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaWVsZFR5cGVzIH0gZnJvbSAnLi4vZXhwb3J0cy9jb25maWcnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcblxuZXhwb3J0IHR5cGUgRmllbGRTY2hlbWFKU09OID0ge1xuICBibG9ja3M/OiBGaWVsZFNjaGVtYUpTT04gLy8gVE9ETzogY29uZGl0aW9uYWxseSBhZGQgYmFzZWQgb24gYHR5cGVgXG4gIGZpZWxkcz86IEZpZWxkU2NoZW1hSlNPTiAvLyBUT0RPOiBjb25kaXRpb25hbGx5IGFkZCBiYXNlZCBvbiBgdHlwZWBcbiAgaGFzTWFueT86IGJvb2xlYW4gLy8gVE9ETzogY29uZGl0aW9uYWxseSBhZGQgYmFzZWQgb24gYHR5cGVgXG4gIG5hbWU6IHN0cmluZ1xuICByZWxhdGlvblRvPzogc3RyaW5nIC8vIFRPRE86IGNvbmRpdGlvbmFsbHkgYWRkIGJhc2VkIG9uIGB0eXBlYFxuICBzbHVnPzogc3RyaW5nIC8vIFRPRE86IGNvbmRpdGlvbmFsbHkgYWRkIGJhc2VkIG9uIGB0eXBlYFxuICB0eXBlOiBrZXlvZiBGaWVsZFR5cGVzXG59W11cblxuZXhwb3J0IGNvbnN0IGZpZWxkU2NoZW1hVG9KU09OID0gKGZpZWxkczogRmllbGRbXSk6IEZpZWxkU2NoZW1hSlNPTiA9PiB7XG4gIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGZpZWxkKSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9IGFjY1xuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICdncm91cCc6XG4gICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgICAgIGZpZWxkczogZmllbGRTY2hlbWFUb0pTT04oZmllbGQuZmllbGRzKSxcbiAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZFNjaGVtYVRvSlNPTihbXG4gICAgICAgICAgICAuLi5maWVsZC5maWVsZHMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSksXG4gICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdibG9ja3MnOlxuICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgICAgICBibG9ja3M6IGZpZWxkLmJsb2Nrcy5yZWR1Y2UoKGFjYywgYmxvY2spID0+IHtcbiAgICAgICAgICAgIGFjY1tibG9jay5zbHVnXSA9IHtcbiAgICAgICAgICAgICAgZmllbGRzOiBmaWVsZFNjaGVtYVRvSlNPTihbXG4gICAgICAgICAgICAgICAgLi4uYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgY2FzZSAnY29sbGFwc2libGUnOlxuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGZpZWxkU2NoZW1hVG9KU09OKGZpZWxkLmZpZWxkcykpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ3RhYnMnOiB7XG4gICAgICAgIGxldCB0YWJGaWVsZHMgPSBbXVxuXG4gICAgICAgIGZpZWxkLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgaWYgKCduYW1lJyBpbiB0YWIpIHtcbiAgICAgICAgICAgIHRhYkZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogdGFiLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkczogZmllbGRTY2hlbWFUb0pTT04odGFiLmZpZWxkcyksXG4gICAgICAgICAgICAgIHR5cGU6ICd0YWInLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhYkZpZWxkcyA9IHRhYkZpZWxkcy5jb25jYXQoZmllbGRTY2hlbWFUb0pTT04odGFiLmZpZWxkcykpXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh0YWJGaWVsZHMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgICAgIGhhc01hbnk6ICdoYXNNYW55JyBpbiBmaWVsZCA/IEJvb2xlYW4oZmllbGQuaGFzTWFueSkgOiBmYWxzZSwgLy8gVE9ETzogdHlwZSB0aGlzXG4gICAgICAgICAgcmVsYXRpb25UbzogZmllbGQucmVsYXRpb25UbyxcbiAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICgnbmFtZScgaW4gZmllbGQpIHtcbiAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LCBbXSlcbn1cbiJdLCJuYW1lcyI6WyJmaWVsZFNjaGVtYVRvSlNPTiIsImZpZWxkcyIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwicmVzdWx0IiwidHlwZSIsInB1c2giLCJuYW1lIiwiYmxvY2tzIiwiYmxvY2siLCJzbHVnIiwiY29uY2F0IiwidGFiRmllbGRzIiwidGFicyIsImZvckVhY2giLCJ0YWIiLCJoYXNNYW55IiwiQm9vbGVhbiIsInJlbGF0aW9uVG8iXSwibWFwcGluZ3MiOiI7Ozs7K0JBYWFBOzs7ZUFBQUE7OztBQUFOLE1BQU1BLG9CQUFvQixDQUFDQztJQUNoQyxPQUFPQSxPQUFPQyxNQUFNLENBQUMsQ0FBQ0MsS0FBS0M7UUFDekIsSUFBSUMsU0FBU0Y7UUFFYixPQUFRQyxNQUFNRSxJQUFJO1lBQ2hCLEtBQUs7Z0JBQ0hILElBQUlJLElBQUksQ0FBQztvQkFDUEMsTUFBTUosTUFBTUksSUFBSTtvQkFDaEJQLFFBQVFELGtCQUFrQkksTUFBTUgsTUFBTTtvQkFDdENLLE1BQU1GLE1BQU1FLElBQUk7Z0JBQ2xCO2dCQUVBO1lBRUYsS0FBSztnQkFDSEgsSUFBSUksSUFBSSxDQUFDO29CQUNQQyxNQUFNSixNQUFNSSxJQUFJO29CQUNoQlAsUUFBUUQsa0JBQWtCOzJCQUNyQkksTUFBTUgsTUFBTTt3QkFDZjs0QkFDRU8sTUFBTTs0QkFDTkYsTUFBTTt3QkFDUjtxQkFDRDtvQkFDREEsTUFBTUYsTUFBTUUsSUFBSTtnQkFDbEI7Z0JBRUE7WUFFRixLQUFLO2dCQUNISCxJQUFJSSxJQUFJLENBQUM7b0JBQ1BDLE1BQU1KLE1BQU1JLElBQUk7b0JBQ2hCQyxRQUFRTCxNQUFNSyxNQUFNLENBQUNQLE1BQU0sQ0FBQyxDQUFDQyxLQUFLTzt3QkFDaENQLEdBQUcsQ0FBQ08sTUFBTUMsSUFBSSxDQUFDLEdBQUc7NEJBQ2hCVixRQUFRRCxrQkFBa0I7bUNBQ3JCVSxNQUFNVCxNQUFNO2dDQUNmO29DQUNFTyxNQUFNO29DQUNORixNQUFNO2dDQUNSOzZCQUNEO3dCQUNIO3dCQUVBLE9BQU9IO29CQUNULEdBQUcsQ0FBQztvQkFDSkcsTUFBTUYsTUFBTUUsSUFBSTtnQkFDbEI7Z0JBRUE7WUFFRixLQUFLO1lBQ0wsS0FBSztnQkFDSEQsU0FBU0EsT0FBT08sTUFBTSxDQUFDWixrQkFBa0JJLE1BQU1ILE1BQU07Z0JBQ3JEO1lBRUYsS0FBSztnQkFBUTtvQkFDWCxJQUFJWSxZQUFZLEVBQUU7b0JBRWxCVCxNQUFNVSxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDQzt3QkFDbEIsSUFBSSxVQUFVQSxLQUFLOzRCQUNqQkgsVUFBVU4sSUFBSSxDQUFDO2dDQUNiQyxNQUFNUSxJQUFJUixJQUFJO2dDQUNkUCxRQUFRRCxrQkFBa0JnQixJQUFJZixNQUFNO2dDQUNwQ0ssTUFBTTs0QkFDUjs0QkFDQTt3QkFDRjt3QkFFQU8sWUFBWUEsVUFBVUQsTUFBTSxDQUFDWixrQkFBa0JnQixJQUFJZixNQUFNO29CQUMzRDtvQkFFQUksU0FBU0EsT0FBT08sTUFBTSxDQUFDQztvQkFFdkI7Z0JBQ0Y7WUFFQSxLQUFLO1lBQ0wsS0FBSztnQkFDSFYsSUFBSUksSUFBSSxDQUFDO29CQUNQQyxNQUFNSixNQUFNSSxJQUFJO29CQUNoQlMsU0FBUyxhQUFhYixRQUFRYyxRQUFRZCxNQUFNYSxPQUFPLElBQUk7b0JBQ3ZERSxZQUFZZixNQUFNZSxVQUFVO29CQUM1QmIsTUFBTUYsTUFBTUUsSUFBSTtnQkFDbEI7Z0JBRUE7WUFFRjtnQkFDRSxJQUFJLFVBQVVGLE9BQU87b0JBQ25CRCxJQUFJSSxJQUFJLENBQUM7d0JBQ1BDLE1BQU1KLE1BQU1JLElBQUk7d0JBQ2hCRixNQUFNRixNQUFNRSxJQUFJO29CQUNsQjtnQkFDRjtRQUNKO1FBRUEsT0FBT0Q7SUFDVCxHQUFHLEVBQUU7QUFDUCJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "2.0.15",
3
+ "version": "2.1.0",
4
4
  "description": "Node, React and MongoDB Headless CMS and Application Framework",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
@@ -98,7 +98,7 @@
98
98
  "terser-webpack-plugin": "5.3.9",
99
99
  "ts-essentials": "7.0.3",
100
100
  "use-context-selector": "1.4.1",
101
- "uuid": "8.3.2"
101
+ "uuid": "9.0.1"
102
102
  },
103
103
  "devDependencies": {
104
104
  "@release-it/conventional-changelog": "7.0.0",