payload 0.15.3 → 0.15.4

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 (89) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/admin/components/elements/WhereBuilder/field-types.d.ts +2 -2
  3. package/dist/admin/components/elements/WhereBuilder/field-types.js +11 -7
  4. package/dist/admin/components/forms/DraggableSection/index.js +2 -3
  5. package/dist/admin/components/forms/Form/buildStateFromSchema.d.ts +10 -1
  6. package/dist/admin/components/forms/Form/buildStateFromSchema.js +14 -6
  7. package/dist/admin/components/forms/Form/getDataByPath.js +6 -11
  8. package/dist/admin/components/forms/Form/getSiblingData.js +12 -14
  9. package/dist/admin/components/forms/Form/index.js +23 -6
  10. package/dist/admin/components/forms/Form/reduceFieldsToValues.d.ts +1 -1
  11. package/dist/admin/components/forms/Form/reduceFieldsToValues.js +1 -2
  12. package/dist/admin/components/forms/Form/types.d.ts +3 -2
  13. package/dist/admin/components/forms/RenderFields/index.d.ts +1 -2
  14. package/dist/admin/components/forms/RenderFields/index.js +6 -16
  15. package/dist/admin/components/forms/RenderFields/types.d.ts +0 -5
  16. package/dist/admin/components/forms/field-types/Array/Array.js +18 -9
  17. package/dist/admin/components/forms/field-types/Blocks/Blocks.js +21 -15
  18. package/dist/admin/components/forms/field-types/Checkbox/index.js +3 -4
  19. package/dist/admin/components/forms/field-types/Code/Code.js +4 -5
  20. package/dist/admin/components/forms/field-types/DateTime/index.js +2 -3
  21. package/dist/admin/components/forms/field-types/Email/index.js +2 -3
  22. package/dist/admin/components/forms/field-types/Number/index.js +3 -4
  23. package/dist/admin/components/forms/field-types/Password/index.js +2 -2
  24. package/dist/admin/components/forms/field-types/Point/index.js +2 -3
  25. package/dist/admin/components/forms/field-types/RadioGroup/index.js +3 -4
  26. package/dist/admin/components/forms/field-types/Relationship/index.js +49 -17
  27. package/dist/admin/components/forms/field-types/RichText/RichText.js +3 -4
  28. package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/EditModal/index.js +4 -2
  29. package/dist/admin/components/forms/field-types/Row/index.js +7 -2
  30. package/dist/admin/components/forms/field-types/Select/index.js +4 -5
  31. package/dist/admin/components/forms/field-types/Text/index.js +6 -3
  32. package/dist/admin/components/forms/field-types/Textarea/index.js +4 -5
  33. package/dist/admin/components/forms/field-types/Upload/Add/index.js +1 -1
  34. package/dist/admin/components/forms/field-types/Upload/Input.d.ts +2 -1
  35. package/dist/admin/components/forms/field-types/Upload/Input.js +3 -1
  36. package/dist/admin/components/forms/field-types/Upload/SelectExisting/index.js +27 -4
  37. package/dist/admin/components/forms/field-types/Upload/SelectExisting/types.d.ts +3 -0
  38. package/dist/admin/components/forms/field-types/Upload/index.js +4 -5
  39. package/dist/admin/components/forms/field-types/getFilterOptionsQuery.d.ts +5 -0
  40. package/dist/admin/components/forms/field-types/getFilterOptionsQuery.js +11 -0
  41. package/dist/admin/components/forms/useField/index.js +39 -8
  42. package/dist/admin/components/utilities/OperationProvider/index.d.ts +4 -0
  43. package/dist/admin/components/utilities/OperationProvider/index.js +3 -0
  44. package/dist/admin/components/views/Account/Default.js +41 -39
  45. package/dist/admin/components/views/Account/index.js +4 -2
  46. package/dist/admin/components/views/CreateFirstUser/index.js +1 -1
  47. package/dist/admin/components/views/Global/Default.js +45 -43
  48. package/dist/admin/components/views/Global/index.js +5 -5
  49. package/dist/admin/components/views/collections/Edit/Auth/APIKey.js +1 -1
  50. package/dist/admin/components/views/collections/Edit/Default.js +55 -53
  51. package/dist/admin/components/views/collections/Edit/index.js +5 -5
  52. package/dist/collections/tests/pointField.spec.js +26 -15
  53. package/dist/collections/tests/relationships.spec.js +21 -1
  54. package/dist/config/load.d.ts +3 -1
  55. package/dist/config/load.js +5 -3
  56. package/dist/config/types.d.ts +3 -0
  57. package/dist/config/types.js +1 -1
  58. package/dist/config/validate.d.ts +2 -1
  59. package/dist/config/validate.js +2 -4
  60. package/dist/email/build.d.ts +2 -1
  61. package/dist/email/build.js +7 -9
  62. package/dist/express/middleware/errorHandler.spec.js +2 -2
  63. package/dist/fields/config/sanitize.js +2 -2
  64. package/dist/fields/config/schema.js +3 -1
  65. package/dist/fields/config/types.d.ts +25 -1
  66. package/dist/fields/config/types.js +1 -1
  67. package/dist/fields/performFieldOperations.js +3 -3
  68. package/dist/fields/traverseFields.js +15 -5
  69. package/dist/fields/validationPromise.d.ts +10 -3
  70. package/dist/fields/validationPromise.js +16 -5
  71. package/dist/fields/validations.d.ts +33 -35
  72. package/dist/fields/validations.js +130 -76
  73. package/dist/fields/validations.spec.js +115 -43
  74. package/dist/graphql/schema/fieldToSchemaMap.js +7 -7
  75. package/dist/index.d.ts +2 -2
  76. package/dist/index.js +5 -5
  77. package/dist/mongoose/buildQuery.js +2 -2
  78. package/dist/mongoose/connect.d.ts +2 -1
  79. package/dist/mongoose/connect.js +2 -4
  80. package/dist/mongoose/sanitizeFormattedValue.js +12 -3
  81. package/dist/utilities/logger.d.ts +1 -1
  82. package/dist/utilities/logger.js +10 -6
  83. package/dist/webpack/getBaseConfig.js +2 -1
  84. package/docs/fields/overview.mdx +39 -3
  85. package/docs/fields/relationship.mdx +45 -0
  86. package/docs/fields/upload.mdx +1 -0
  87. package/docs/getting-started/installation.mdx +14 -10
  88. package/docs/queries/overview.mdx +2 -1
  89. package/package.json +1 -1
@@ -3,34 +3,36 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.point = exports.blocks = exports.radio = exports.select = exports.array = exports.relationship = exports.upload = exports.date = exports.checkbox = exports.richText = exports.code = exports.wysiwyg = exports.textarea = exports.email = exports.password = exports.text = exports.number = void 0;
6
+ exports.point = exports.blocks = exports.radio = exports.select = exports.array = exports.relationship = exports.upload = exports.date = exports.checkbox = exports.richText = exports.code = exports.textarea = exports.email = exports.password = exports.text = exports.number = void 0;
7
7
  const defaultValue_1 = __importDefault(require("./richText/defaultValue"));
8
+ const canUseDOM_1 = __importDefault(require("../utilities/canUseDOM"));
9
+ const index_1 = __importDefault(require("../index"));
8
10
  const defaultMessage = 'This field is required.';
9
- const number = (value, options = {}) => {
11
+ const number = (value, { required, min, max }) => {
10
12
  const parsedValue = parseInt(value, 10);
11
- if ((value && typeof parsedValue !== 'number') || (options.required && Number.isNaN(parsedValue))) {
13
+ if ((value && typeof parsedValue !== 'number') || (required && Number.isNaN(parsedValue))) {
12
14
  return 'Please enter a valid number.';
13
15
  }
14
- if (options.max && parsedValue > options.max) {
15
- return `"${value}" is greater than the max allowed value of ${options.max}.`;
16
+ if (max && parsedValue > max) {
17
+ return `"${value}" is greater than the max allowed value of ${max}.`;
16
18
  }
17
- if (options.min && parsedValue < options.min) {
18
- return `"${value}" is less than the min allowed value of ${options.min}.`;
19
+ if (min && parsedValue < min) {
20
+ return `"${value}" is less than the min allowed value of ${min}.`;
19
21
  }
20
- if (options.required && typeof parsedValue !== 'number') {
22
+ if (required && typeof parsedValue !== 'number') {
21
23
  return defaultMessage;
22
24
  }
23
25
  return true;
24
26
  };
25
27
  exports.number = number;
26
- const text = (value, options = {}) => {
27
- if (value && options.maxLength && value.length > options.maxLength) {
28
- return `This value must be shorter than the max length of ${options.maxLength} characters.`;
28
+ const text = (value, { minLength, maxLength, required }) => {
29
+ if (value && maxLength && value.length > maxLength) {
30
+ return `This value must be shorter than the max length of ${maxLength} characters.`;
29
31
  }
30
- if (value && options.minLength && (value === null || value === void 0 ? void 0 : value.length) < options.minLength) {
31
- return `This value must be longer than the minimum length of ${options.minLength} characters.`;
32
+ if (value && minLength && (value === null || value === void 0 ? void 0 : value.length) < minLength) {
33
+ return `This value must be longer than the minimum length of ${minLength} characters.`;
32
34
  }
33
- if (options.required) {
35
+ if (required) {
34
36
  if (typeof value !== 'string' || (value === null || value === void 0 ? void 0 : value.length) === 0) {
35
37
  return defaultMessage;
36
38
  }
@@ -38,56 +40,49 @@ const text = (value, options = {}) => {
38
40
  return true;
39
41
  };
40
42
  exports.text = text;
41
- const password = (value, options = {}) => {
42
- if (value && options.maxLength && value.length > options.maxLength) {
43
- return `This value must be shorter than the max length of ${options.maxLength} characters.`;
43
+ const password = (value, { required, maxLength, minLength }) => {
44
+ if (value && maxLength && value.length > maxLength) {
45
+ return `This value must be shorter than the max length of ${maxLength} characters.`;
44
46
  }
45
- if (value && options.minLength && value.length < options.minLength) {
46
- return `This value must be longer than the minimum length of ${options.minLength} characters.`;
47
+ if (value && minLength && value.length < minLength) {
48
+ return `This value must be longer than the minimum length of ${minLength} characters.`;
47
49
  }
48
- if (options.required && !value) {
50
+ if (required && !value) {
49
51
  return defaultMessage;
50
52
  }
51
53
  return true;
52
54
  };
53
55
  exports.password = password;
54
- const email = (value, options = {}) => {
56
+ const email = (value, { required }) => {
55
57
  if ((value && !/\S+@\S+\.\S+/.test(value))
56
- || (!value && options.required)) {
58
+ || (!value && required)) {
57
59
  return 'Please enter a valid email address.';
58
60
  }
59
61
  return true;
60
62
  };
61
63
  exports.email = email;
62
- const textarea = (value, options = {}) => {
63
- if (value && options.maxLength && value.length > options.maxLength) {
64
- return `This value must be shorter than the max length of ${options.maxLength} characters.`;
64
+ const textarea = (value, { required, maxLength, minLength, }) => {
65
+ if (value && maxLength && value.length > maxLength) {
66
+ return `This value must be shorter than the max length of ${maxLength} characters.`;
65
67
  }
66
- if (value && options.minLength && value.length < options.minLength) {
67
- return `This value must be longer than the minimum length of ${options.minLength} characters.`;
68
+ if (value && minLength && value.length < minLength) {
69
+ return `This value must be longer than the minimum length of ${minLength} characters.`;
68
70
  }
69
- if (options.required && !value) {
71
+ if (required && !value) {
70
72
  return defaultMessage;
71
73
  }
72
74
  return true;
73
75
  };
74
76
  exports.textarea = textarea;
75
- const wysiwyg = (value, options = {}) => {
76
- if (options.required && !value) {
77
- return defaultMessage;
78
- }
79
- return true;
80
- };
81
- exports.wysiwyg = wysiwyg;
82
- const code = (value, options = {}) => {
83
- if (options.required && value === undefined) {
77
+ const code = (value, { required }) => {
78
+ if (required && value === undefined) {
84
79
  return defaultMessage;
85
80
  }
86
81
  return true;
87
82
  };
88
83
  exports.code = code;
89
- const richText = (value, options = {}) => {
90
- if (options.required) {
84
+ const richText = (value, { required }) => {
85
+ if (required) {
91
86
  const stringifiedDefaultValue = JSON.stringify(defaultValue_1.default);
92
87
  if (value && JSON.stringify(value) !== stringifiedDefaultValue)
93
88
  return true;
@@ -96,96 +91,156 @@ const richText = (value, options = {}) => {
96
91
  return true;
97
92
  };
98
93
  exports.richText = richText;
99
- const checkbox = (value, options = {}) => {
94
+ const checkbox = (value, { required }) => {
100
95
  if ((value && typeof value !== 'boolean')
101
- || (options.required && typeof value !== 'boolean')) {
96
+ || (required && typeof value !== 'boolean')) {
102
97
  return 'This field can only be equal to true or false.';
103
98
  }
104
99
  return true;
105
100
  };
106
101
  exports.checkbox = checkbox;
107
- const date = (value, options = {}) => {
102
+ const date = (value, { required }) => {
108
103
  if (value && !isNaN(Date.parse(value.toString()))) { /* eslint-disable-line */
109
104
  return true;
110
105
  }
111
106
  if (value) {
112
107
  return `"${value}" is not a valid date.`;
113
108
  }
114
- if (options.required) {
109
+ if (required) {
115
110
  return defaultMessage;
116
111
  }
117
112
  return true;
118
113
  };
119
114
  exports.date = date;
120
- const upload = (value, options = {}) => {
121
- if (value || !options.required)
115
+ const validateFilterOptions = async (value, { filterOptions, id, user, data, siblingData, relationTo }) => {
116
+ if (!canUseDOM_1.default && typeof filterOptions !== 'undefined' && value) {
117
+ const options = {};
118
+ const collections = typeof relationTo === 'string' ? [relationTo] : relationTo;
119
+ const values = Array.isArray(value) ? value : [value];
120
+ await Promise.all(collections.map(async (collection) => {
121
+ const optionFilter = typeof filterOptions === 'function' ? filterOptions({
122
+ id,
123
+ data,
124
+ siblingData,
125
+ user,
126
+ relationTo: collection,
127
+ }) : filterOptions;
128
+ const valueIDs = [];
129
+ values.forEach((val) => {
130
+ if (typeof val === 'object' && (val === null || val === void 0 ? void 0 : val.value)) {
131
+ valueIDs.push(val.value);
132
+ }
133
+ if (typeof val === 'string' || typeof val === 'number') {
134
+ valueIDs.push(val);
135
+ }
136
+ });
137
+ const result = await index_1.default.find({
138
+ collection,
139
+ depth: 0,
140
+ where: {
141
+ and: [
142
+ { id: { in: valueIDs } },
143
+ optionFilter,
144
+ ],
145
+ },
146
+ });
147
+ options[collection] = result.docs.map((doc) => doc.id);
148
+ }));
149
+ const invalidRelationships = values.filter((val) => {
150
+ let collection;
151
+ let requestedID;
152
+ if (typeof relationTo === 'string') {
153
+ collection = relationTo;
154
+ if (typeof val === 'string' || typeof val === 'number') {
155
+ requestedID = val;
156
+ }
157
+ }
158
+ if (Array.isArray(relationTo) && typeof val === 'object' && (val === null || val === void 0 ? void 0 : val.relationTo)) {
159
+ collection = val.relationTo;
160
+ requestedID = val.value;
161
+ }
162
+ return options[collection].indexOf(requestedID) === -1;
163
+ });
164
+ if (invalidRelationships.length > 0) {
165
+ return invalidRelationships.reduce((err, invalid, i) => {
166
+ return `${err} ${JSON.stringify(invalid)}${invalidRelationships.length === i + 1 ? ',' : ''} `;
167
+ }, 'This field has the following invalid selections:');
168
+ }
122
169
  return true;
123
- return defaultMessage;
170
+ }
171
+ return true;
172
+ };
173
+ const upload = (value, options) => {
174
+ if (!value && options.required) {
175
+ return defaultMessage;
176
+ }
177
+ return validateFilterOptions(value, options);
124
178
  };
125
179
  exports.upload = upload;
126
- const relationship = (value, options = {}) => {
127
- if (value || !options.required)
128
- return true;
129
- return defaultMessage;
180
+ const relationship = async (value, options) => {
181
+ if ((!value || (Array.isArray(value) && value.length === 0)) && options.required) {
182
+ return defaultMessage;
183
+ }
184
+ return validateFilterOptions(value, options);
130
185
  };
131
186
  exports.relationship = relationship;
132
- const array = (value, options = {}) => {
133
- if (options.minRows && value < options.minRows) {
134
- return `This field requires at least ${options.minRows} row(s).`;
187
+ const array = (value, { minRows, maxRows, required }) => {
188
+ if (minRows && value < minRows) {
189
+ return `This field requires at least ${minRows} row(s).`;
135
190
  }
136
- if (options.maxRows && value > options.maxRows) {
137
- return `This field requires no more than ${options.maxRows} row(s).`;
191
+ if (maxRows && value > maxRows) {
192
+ return `This field requires no more than ${maxRows} row(s).`;
138
193
  }
139
- if (!value && options.required) {
194
+ if (!value && required) {
140
195
  return 'This field requires at least one row.';
141
196
  }
142
197
  return true;
143
198
  };
144
199
  exports.array = array;
145
- const select = (value, options = {}) => {
200
+ const select = (value, { options, hasMany, required }) => {
146
201
  var _a;
147
- if (Array.isArray(value) && value.some((input) => !options.options.some((option) => (option === input || option.value === input)))) {
202
+ if (Array.isArray(value) && value.some((input) => !options.some((option) => (option === input || (typeof option !== 'string' && (option === null || option === void 0 ? void 0 : option.value) === input))))) {
148
203
  return 'This field has an invalid selection';
149
204
  }
150
- if (typeof value === 'string' && !options.options.some((option) => (option === value || option.value === value))) {
205
+ if (typeof value === 'string' && !options.some((option) => (option === value || (typeof option !== 'string' && option.value === value)))) {
151
206
  return 'This field has an invalid selection';
152
207
  }
153
- if (options.required && ((typeof value === 'undefined' || value === null) || (options.hasMany && Array.isArray(value) && ((_a = value) === null || _a === void 0 ? void 0 : _a.length) === 0))) {
208
+ if (required && ((typeof value === 'undefined' || value === null) || (hasMany && Array.isArray(value) && ((_a = value) === null || _a === void 0 ? void 0 : _a.length) === 0))) {
154
209
  return defaultMessage;
155
210
  }
156
211
  return true;
157
212
  };
158
213
  exports.select = select;
159
- const radio = (value, options = {}) => {
214
+ const radio = (value, { options, required }) => {
160
215
  const stringValue = String(value);
161
- if ((typeof value !== 'undefined' || !options.required) && (options.options.find((option) => String(option.value) === stringValue)))
216
+ if ((typeof value !== 'undefined' || !required) && (options.find((option) => String(typeof option !== 'string' && (option === null || option === void 0 ? void 0 : option.value)) === stringValue)))
162
217
  return true;
163
218
  return defaultMessage;
164
219
  };
165
220
  exports.radio = radio;
166
- const blocks = (value, options = {}) => {
167
- if (options.minRows && value < options.minRows) {
168
- return `This field requires at least ${options.minRows} row(s).`;
221
+ const blocks = (value, { maxRows, minRows, required }) => {
222
+ if (minRows && value < minRows) {
223
+ return `This field requires at least ${minRows} row(s).`;
169
224
  }
170
- if (options.maxRows && value > options.maxRows) {
171
- return `This field requires no more than ${options.maxRows} row(s).`;
225
+ if (maxRows && value > maxRows) {
226
+ return `This field requires no more than ${maxRows} row(s).`;
172
227
  }
173
- if (!value && options.required) {
228
+ if (!value && required) {
174
229
  return 'This field requires at least one row.';
175
230
  }
176
231
  return true;
177
232
  };
178
233
  exports.blocks = blocks;
179
- const point = (value = ['', ''], options = {}) => {
234
+ const point = (value = ['', ''], { required }) => {
180
235
  const lng = parseFloat(String(value[0]));
181
236
  const lat = parseFloat(String(value[1]));
182
- if ((value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number')
183
- || (options.required && (Number.isNaN(lng) || Number.isNaN(lat)))
184
- || (Array.isArray(value) && value.length !== 2)) {
237
+ if (required && ((value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number')
238
+ || (Number.isNaN(lng) || Number.isNaN(lat))
239
+ || (Array.isArray(value) && value.length !== 2))) {
185
240
  return 'This field requires two numbers';
186
241
  }
187
- if (!options.required && typeof value[0] !== typeof value[1]) {
188
- return 'This field requires two numbers or both can be empty';
242
+ if ((value[1] && Number.isNaN(lng)) || (value[0] && Number.isNaN(lat))) {
243
+ return 'This field has an invalid input';
189
244
  }
190
245
  return true;
191
246
  };
@@ -197,7 +252,6 @@ exports.default = {
197
252
  email: exports.email,
198
253
  textarea: exports.textarea,
199
254
  code: exports.code,
200
- wysiwyg: exports.wysiwyg,
201
255
  richText: exports.richText,
202
256
  checkbox: exports.checkbox,
203
257
  date: exports.date,
@@ -209,4 +263,4 @@ exports.default = {
209
263
  blocks: exports.blocks,
210
264
  point: exports.point,
211
265
  };
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmllbGRzL3ZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJFQUEyRDtBQUczRCxNQUFNLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQztBQUUxQyxNQUFNLE1BQU0sR0FBYSxDQUFDLEtBQWEsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDOUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV4QyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7UUFDakcsT0FBTyw4QkFBOEIsQ0FBQztLQUN2QztJQUVELElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUM1QyxPQUFPLElBQUksS0FBSyw4Q0FBOEMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQzlFO0lBRUQsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQzVDLE9BQU8sSUFBSSxLQUFLLDJDQUEyQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDM0U7SUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO1FBQ3ZELE9BQU8sY0FBYyxDQUFDO0tBQ3ZCO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFwQlcsUUFBQSxNQUFNLFVBb0JqQjtBQUVLLE1BQU0sSUFBSSxHQUFhLENBQUMsS0FBYSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRTtJQUM1RCxJQUFJLEtBQUssSUFBSSxP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
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmllbGRzL3ZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJFQUEyRDtBQXFCM0QsdUVBQStDO0FBQy9DLHFEQUErQjtBQUUvQixNQUFNLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQztBQUUxQyxNQUFNLE1BQU0sR0FBNEMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDdkcsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV4QyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtRQUN6RixPQUFPLDhCQUE4QixDQUFDO0tBQ3ZDO0lBRUQsSUFBSSxHQUFHLElBQUksV0FBVyxHQUFHLEdBQUcsRUFBRTtRQUM1QixPQUFPLElBQUksS0FBSyw4Q0FBOEMsR0FBRyxHQUFHLENBQUM7S0FDdEU7SUFFRCxJQUFJLEdBQUcsSUFBSSxXQUFXLEdBQUcsR0FBRyxFQUFFO1FBQzVCLE9BQU8sSUFBSSxLQUFLLDJDQUEyQyxHQUFHLEdBQUcsQ0FBQztLQUNuRTtJQUVELElBQUksUUFBUSxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRTtRQUMvQyxPQUFPLGNBQWMsQ0FBQztLQUN2QjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBcEJXLFFBQUEsTUFBTSxVQW9CakI7QUFFSyxNQUFNLElBQUksR0FBMEMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7SUFDL0csSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFO1FBQ2xELE9BQU8scURBQXFELFNBQVMsY0FBYyxDQUFDO0tBQ3JGO0lBRUQsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE1BQU0sSUFBRyxTQUFTLEVBQUU7UUFDbkQsT0FBTyx3REFBd0QsU0FBUyxjQUFjLENBQUM7S0FDeEY7SUFFRCxJQUFJLFFBQVEsRUFBRTtRQUNaLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE1BQU0sTUFBSyxDQUFDLEVBQUU7WUFDcEQsT0FBTyxjQUFjLENBQUM7U0FDdkI7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBaEJXLFFBQUEsSUFBSSxRQWdCZjtBQUVLLE1BQU0sUUFBUSxHQUEwQyxDQUFDLEtBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNuSCxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUU7UUFDbEQsT0FBTyxxREFBcUQsU0FBUyxjQUFjLENBQUM7S0FDckY7SUFFRCxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUU7UUFDbEQsT0FBTyx3REFBd0QsU0FBUyxjQUFjLENBQUM7S0FDeEY7SUFFRCxJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUN0QixPQUFPLGNBQWMsQ0FBQztLQUN2QjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBZFcsUUFBQSxRQUFRLFlBY25CO0FBRUssTUFBTSxLQUFLLEdBQTJDLENBQUMsS0FBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtJQUMzRixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztXQUNyQyxDQUFDLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxFQUFFO1FBQ3pCLE9BQU8scUNBQXFDLENBQUM7S0FDOUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQVBXLFFBQUEsS0FBSyxTQU9oQjtBQUVLLE1BQU0sUUFBUSxHQUE4QyxDQUFDLEtBQWEsRUFBRSxFQUNqRixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsR0FDVixFQUFFLEVBQUU7SUFDSCxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUU7UUFDbEQsT0FBTyxxREFBcUQsU0FBUyxjQUFjLENBQUM7S0FDckY7SUFFRCxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUU7UUFDbEQsT0FBTyx3REFBd0QsU0FBUyxjQUFjLENBQUM7S0FDeEY7SUFFRCxJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUN0QixPQUFPLGNBQWMsQ0FBQztLQUN2QjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBbEJXLFFBQUEsUUFBUSxZQWtCbkI7QUFFSyxNQUFNLElBQUksR0FBMEMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO0lBQ3pGLElBQUksUUFBUSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDbkMsT0FBTyxjQUFjLENBQUM7S0FDdkI7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQU5XLFFBQUEsSUFBSSxRQU1mO0FBRUssTUFBTSxRQUFRLEdBQThDLENBQUMsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtJQUN6RixJQUFJLFFBQVEsRUFBRTtRQUNaLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBb0IsQ0FBQyxDQUFDO1FBQ3JFLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssdUJBQXVCO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDNUUsT0FBTyx5QkFBeUIsQ0FBQztLQUNsQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBUlcsUUFBQSxRQUFRLFlBUW5CO0FBRUssTUFBTSxRQUFRLEdBQThDLENBQUMsS0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtJQUNsRyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQztXQUNwQyxDQUFDLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsRUFBRTtRQUM3QyxPQUFPLGdEQUFnRCxDQUFDO0tBQ3pEO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFQVyxRQUFBLFFBQVEsWUFPbkI7QUFFSyxNQUFNLElBQUksR0FBMEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO0lBQ2pGLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLHlCQUF5QjtRQUM1RSxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsSUFBSSxLQUFLLEVBQUU7UUFDVCxPQUFPLElBQUksS0FBSyx3QkFBd0IsQ0FBQztLQUMxQztJQUVELElBQUksUUFBUSxFQUFFO1FBQ1osT0FBTyxjQUFjLENBQUM7S0FDdkI7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQWRXLFFBQUEsSUFBSSxRQWNmO0FBRUYsTUFBTSxxQkFBcUIsR0FBYSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO0lBQ2xILElBQUksQ0FBQyxtQkFBUyxJQUFJLE9BQU8sYUFBYSxLQUFLLFdBQVcsSUFBSSxLQUFLLEVBQUU7UUFDL0QsTUFBTSxPQUFPLEdBRVQsRUFBRSxDQUFDO1FBRVAsTUFBTSxXQUFXLEdBQUcsT0FBTyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDL0UsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRTtZQUNyRCxNQUFNLFlBQVksR0FBRyxPQUFPLGFBQWEsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztnQkFDdkUsRUFBRTtnQkFDRixJQUFJO2dCQUNKLFdBQVc7Z0JBQ1gsSUFBSTtnQkFDSixVQUFVLEVBQUUsVUFBVTthQUN2QixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUVuQixNQUFNLFFBQVEsR0FBd0IsRUFBRSxDQUFDO1lBRXpDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEtBQUksR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEtBQUssQ0FBQSxFQUFFO29CQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDMUI7Z0JBRUQsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO29CQUN0RCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFPLENBQUMsSUFBSSxDQUFhO2dCQUM1QyxVQUFVO2dCQUNWLEtBQUssRUFBRSxDQUFDO2dCQUNSLEtBQUssRUFBRTtvQkFDTCxHQUFHLEVBQUU7d0JBQ0gsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUU7d0JBQ3hCLFlBQVk7cUJBQ2I7aUJBQ0Y7YUFDRixDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRUosTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakQsSUFBSSxVQUFrQixDQUFDO1lBQ3ZCLElBQUksV0FBNEIsQ0FBQztZQUVqQyxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsVUFBVSxHQUFHLFVBQVUsQ0FBQztnQkFFeEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO29CQUN0RCxXQUFXLEdBQUcsR0FBRyxDQUFDO2lCQUNuQjthQUNGO1lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsS0FBSSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsVUFBVSxDQUFBLEVBQUU7Z0JBQzNFLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUM1QixXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzthQUN6QjtZQUVELE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQyxPQUFPLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JELE9BQU8sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUNqRyxDQUFDLEVBQUUsa0RBQWtELENBQVcsQ0FBQztTQUNsRTtRQUVELE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVLLE1BQU0sTUFBTSxHQUE0QyxDQUFDLEtBQWEsRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUN4RixJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7UUFDOUIsT0FBTyxjQUFjLENBQUM7S0FDdkI7SUFFRCxPQUFPLHFCQUFxQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFOVyxRQUFBLE1BQU0sVUFNakI7QUFFSyxNQUFNLFlBQVksR0FBa0QsS0FBSyxFQUFFLEtBQXdCLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDckgsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtRQUNoRixPQUFPLGNBQWMsQ0FBQztLQUN2QjtJQUVELE9BQU8scUJBQXFCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQztBQU5XLFFBQUEsWUFBWSxnQkFNdkI7QUFFSyxNQUFNLEtBQUssR0FBMkMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7SUFDckcsSUFBSSxPQUFPLElBQUksS0FBSyxHQUFHLE9BQU8sRUFBRTtRQUM5QixPQUFPLGdDQUFnQyxPQUFPLFVBQVUsQ0FBQztLQUMxRDtJQUVELElBQUksT0FBTyxJQUFJLEtBQUssR0FBRyxPQUFPLEVBQUU7UUFDOUIsT0FBTyxvQ0FBb0MsT0FBTyxVQUFVLENBQUM7S0FDOUQ7SUFFRCxJQUFJLENBQUMsS0FBSyxJQUFJLFFBQVEsRUFBRTtRQUN0QixPQUFPLHVDQUF1QyxDQUFDO0tBQ2hEO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFkVyxRQUFBLEtBQUssU0FjaEI7QUFFSyxNQUFNLE1BQU0sR0FBNEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7O0lBQ3ZHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxLQUFLLE1BQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDM0osT0FBTyxxQ0FBcUMsQ0FBQztLQUM5QztJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3hJLE9BQU8scUNBQXFDLENBQUM7S0FDOUM7SUFFRCxJQUFJLFFBQVEsSUFBSSxDQUNkLENBQUMsT0FBTyxLQUFLLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUEsTUFBQyxLQUFZLDBDQUFFLE1BQU0sTUFBSyxDQUFDLENBQUMsQ0FBQyxFQUNySDtRQUNBLE9BQU8sY0FBYyxDQUFDO0tBQ3ZCO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFoQlcsUUFBQSxNQUFNLFVBZ0JqQjtBQUVLLE1BQU0sS0FBSyxHQUEyQyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO0lBQzVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxLQUFJLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxLQUFLLENBQUEsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDaEssT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBSlcsUUFBQSxLQUFLLFNBSWhCO0FBRUssTUFBTSxNQUFNLEdBQTJDLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO0lBQ3RHLElBQUksT0FBTyxJQUFJLEtBQUssR0FBRyxPQUFPLEVBQUU7UUFDOUIsT0FBTyxnQ0FBZ0MsT0FBTyxVQUFVLENBQUM7S0FDMUQ7SUFFRCxJQUFJLE9BQU8sSUFBSSxLQUFLLEdBQUcsT0FBTyxFQUFFO1FBQzlCLE9BQU8sb0NBQW9DLE9BQU8sVUFBVSxDQUFDO0tBQzlEO0lBRUQsSUFBSSxDQUFDLEtBQUssSUFBSSxRQUFRLEVBQUU7UUFDdEIsT0FBTyx1Q0FBdUMsQ0FBQztLQUNoRDtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBZFcsUUFBQSxNQUFNLFVBY2pCO0FBRUssTUFBTSxLQUFLLEdBQTJDLENBQUMsUUFBNEMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO0lBQ2xJLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsSUFBSSxRQUFRLElBQUksQ0FDZCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQztXQUN6RSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztXQUN4QyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FDaEQsRUFBRTtRQUNELE9BQU8saUNBQWlDLENBQUM7S0FDMUM7SUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDdEUsT0FBTyxpQ0FBaUMsQ0FBQztLQUMxQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBaEJXLFFBQUEsS0FBSyxTQWdCaEI7QUFFRixrQkFBZTtJQUNiLE1BQU0sRUFBTixjQUFNO0lBQ04sSUFBSSxFQUFKLFlBQUk7SUFDSixRQUFRLEVBQVIsZ0JBQVE7SUFDUixLQUFLLEVBQUwsYUFBSztJQUNMLFFBQVEsRUFBUixnQkFBUTtJQUNSLElBQUksRUFBSixZQUFJO0lBQ0osUUFBUSxFQUFSLGdCQUFRO0lBQ1IsUUFBUSxFQUFSLGdCQUFRO0lBQ1IsSUFBSSxFQUFKLFlBQUk7SUFDSixNQUFNLEVBQU4sY0FBTTtJQUNOLFlBQVksRUFBWixvQkFBWTtJQUNaLEtBQUssRUFBTCxhQUFLO0lBQ0wsTUFBTSxFQUFOLGNBQU07SUFDTixLQUFLLEVBQUwsYUFBSztJQUNMLE1BQU0sRUFBTixjQUFNO0lBQ04sS0FBSyxFQUFMLGFBQUs7Q0FDTixDQUFDIn0=