@appweaver/core 1.3.1 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/export/export-service.d.ts +4 -3
  2. package/export/export-service.js +39 -22
  3. package/factory/create-model.js +54 -22
  4. package/factory/create-service.js +5 -3
  5. package/package.json +2 -2
  6. package/prisma/client/commonInputTypes.d.ts +0 -50
  7. package/prisma/client/internal/class.js +3 -3
  8. package/prisma/client/models/File.d.ts +15 -28
  9. package/resource/resource-loader.js +6 -0
  10. package/resource/resource-routes.js +2 -2
  11. package/resource/resource-schema.d.ts +38 -12
  12. package/resource/resource-schema.js +63 -15
  13. package/resource/resource-service.d.ts +25 -16
  14. package/resource/resource-service.js +61 -26
  15. package/resource/schemas/resource-sort-schema.js +2 -2
  16. package/resource/utils/cursor-util.d.ts +60 -0
  17. package/resource/utils/cursor-util.js +117 -0
  18. package/resource/utils/index.d.ts +1 -0
  19. package/resource/utils/index.js +1 -0
  20. package/resource/utils/relation-util.d.ts +3 -3
  21. package/resource/utils/relation-util.js +52 -16
  22. package/resource/utils/sort-util.d.ts +11 -0
  23. package/resource/utils/sort-util.js +18 -0
  24. package/security/api-key/api-key-auth.js +4 -1
  25. package/security/auth-service.d.ts +7 -7
  26. package/security/auth-service.js +43 -5
  27. package/security/create-auth-resources.d.ts +2 -1
  28. package/security/oauth2/create-oauth2-plugin.js +3 -34
  29. package/security/oauth2/oauth2-microsoft.js +1 -1
  30. package/security/oauth2/oauth2-util.d.ts +9 -7
  31. package/security/oauth2/oauth2-util.js +17 -10
  32. package/security/resources/api-key/model.js +2 -0
  33. package/security/resources/connected-account/model.js +2 -0
  34. package/security/store/database-security-store.js +2 -1
  35. package/server/swagger.js +49 -1
  36. package/storage/file-service.d.ts +19 -4
  37. package/storage/file-service.js +199 -146
  38. package/storage/resources/file/model.js +4 -2
  39. package/types/auth.d.ts +8 -8
  40. package/types/generated.d.ts +8 -2
  41. package/types/index.d.ts +1 -0
  42. package/types/index.js +1 -0
  43. package/types/storage.d.ts +16 -0
  44. package/types/storage.js +2 -0
  45. package/utils/index.d.ts +1 -0
  46. package/utils/index.js +1 -0
  47. package/utils/model-util.d.ts +12 -0
  48. package/utils/model-util.js +113 -0
@@ -8,12 +8,13 @@ export type ExportStream = {
8
8
  export declare class ExportService {
9
9
  /**
10
10
  * Exports data as a CSV stream based on the provided filter and sort parameters.
11
- * The method retrieves the data in batches and streams it in CSV format.
11
+ * The records are read batch by batch, each following the cursor of the
12
+ * previous one, so the export never counts the records up front.
12
13
  *
13
14
  * @param {string} modelName - The resource name for which to export data.
14
15
  * @param {Object} [filter={}] - The filter conditions to apply when retrieving the data. Default is an empty object.
15
- * @param {QuerySort} [sort='-createdAt,id'] - The sorting criteria for the data, given either as a comma-separated
16
- * field list or as an object of field directions. Default is `-createdAt, id`.
16
+ * @param {QuerySort} [sort='-createdAt'] - The sorting criteria for the data, given either as a comma-separated
17
+ * field list or as an object of field directions.
17
18
  * @return {Promise<ExportStream>} A promise resolving to the export stream object, which includes the readable
18
19
  * stream, MIME type, and file name for the CSV.
19
20
  */
@@ -9,48 +9,59 @@ const utils_1 = require("../utils");
9
9
  class ExportService {
10
10
  /**
11
11
  * Exports data as a CSV stream based on the provided filter and sort parameters.
12
- * The method retrieves the data in batches and streams it in CSV format.
12
+ * The records are read batch by batch, each following the cursor of the
13
+ * previous one, so the export never counts the records up front.
13
14
  *
14
15
  * @param {string} modelName - The resource name for which to export data.
15
16
  * @param {Object} [filter={}] - The filter conditions to apply when retrieving the data. Default is an empty object.
16
- * @param {QuerySort} [sort='-createdAt,id'] - The sorting criteria for the data, given either as a comma-separated
17
- * field list or as an object of field directions. Default is `-createdAt, id`.
17
+ * @param {QuerySort} [sort='-createdAt'] - The sorting criteria for the data, given either as a comma-separated
18
+ * field list or as an object of field directions.
18
19
  * @return {Promise<ExportStream>} A promise resolving to the export stream object, which includes the readable
19
20
  * stream, MIME type, and file name for the CSV.
20
21
  */
21
- async exportCsv(modelName, filter = {}, sort = '-createdAt,id') {
22
+ async exportCsv(modelName, filter = {}, sort = '-createdAt') {
22
23
  const service = (0, context_1.injectService)(modelName);
23
24
  let exportStream;
24
25
  try {
25
- // Initial query is also useful to expose any errors before stream start.
26
- const checkResult = await service.query(filter, 1, 0, sort);
27
- const totalCount = checkResult.totalCount;
28
26
  const batchSize = common_1.config.EXPORT_BATCH_SIZE;
29
- let page = 0;
30
27
  const mapValues = (items) => this.mapProperties(modelName, items);
31
- exportStream = new node_stream_1.Readable({
32
- async read() {
33
- page++;
28
+ const readBatch = (cursor) => service.query(filter, 1, batchSize, sort, cursor, false);
29
+ // Read before the stream is handed out, so a failing query becomes an
30
+ // error response instead of a truncated download
31
+ const firstBatch = await readBatch();
32
+ // A generator rather than a `read` callback, which the stream may re-enter
33
+ // while an awaited batch is pending and would then write it twice
34
+ async function* rows() {
35
+ if (common_1.config.EXPORT_CSV_ADD_SEP_ROW) {
36
+ yield `SEP=${common_1.config.EXPORT_CSV_DELIMITER}\n`;
37
+ }
38
+ let batch = firstBatch;
39
+ let addHeaders = common_1.config.EXPORT_CSV_ADD_HEADERS;
40
+ while (batch) {
41
+ let chunk;
42
+ let next;
34
43
  try {
35
- const result = await service.query(filter, page, batchSize, sort);
36
- if (result.resultCount > 0) {
37
- const data = mapValues(result.items);
38
- this.push((0, utils_1.toCsv)(data, common_1.config.EXPORT_CSV_ADD_HEADERS ? page === 1 : false));
44
+ if (batch.resultCount > 0) {
45
+ chunk = (0, utils_1.toCsv)(mapValues(batch.items), addHeaders);
46
+ addHeaders = false;
39
47
  }
48
+ // A next cursor is returned only while further records match
49
+ next = batch.nextCursor
50
+ ? await readBatch(batch.nextCursor)
51
+ : undefined;
40
52
  }
41
53
  catch (e) {
54
+ // End early rather than fail a download already in flight
42
55
  common_1.logger.error(e, `${modelName} export error`);
43
- this.push(null);
44
- return;
56
+ next = undefined;
45
57
  }
46
- if (page * batchSize >= totalCount) {
47
- this.push(null);
58
+ if (chunk !== undefined) {
59
+ yield chunk;
48
60
  }
61
+ batch = next;
49
62
  }
50
- });
51
- if (common_1.config.EXPORT_CSV_ADD_SEP_ROW) {
52
- exportStream.push(`SEP=${common_1.config.EXPORT_CSV_DELIMITER}\n`);
53
63
  }
64
+ exportStream = node_stream_1.Readable.from(rows(), { objectMode: false });
54
65
  }
55
66
  catch (e) {
56
67
  throw new errors_1.HttpError(`${modelName} export error`, 500, e);
@@ -88,6 +99,12 @@ class ExportService {
88
99
  // Skip mapping for non-exposed fields.
89
100
  continue;
90
101
  }
102
+ // The records are read from the database rather than through a response
103
+ // schema, so the fields no response carries are dropped here instead.
104
+ if (modelSchema?.['hidden'] === true ||
105
+ resourceModel.config.virtual?.[key]?.output?.type === 'none') {
106
+ continue;
107
+ }
91
108
  let header = parentKey ? `${parentKey}.${key}` : key;
92
109
  const isArrayValue = (0, common_1.isArray)(value);
93
110
  const exportField = exportConfig?.[key];
@@ -10,8 +10,20 @@ const common_1 = require("@appweaver/common");
10
10
  const context_1 = require("../context");
11
11
  const resource_1 = require("../resource");
12
12
  function createModel(config, override = false) {
13
+ const resourceModel = buildModel(config);
14
+ common_1.logger.debug({ modelName: resourceModel.name }, 'Created resource model');
15
+ (0, context_1.define)(resourceModel, undefined, override ? 'override' : undefined);
16
+ // The relation inputs and audit fields reference the primary key of another
17
+ // model, which may not be loaded yet. Loaders call this hook once every model
18
+ // is registered, so those references resolve against their final id type.
19
+ resourceModel[common_1.RESOURCE_MODEL_RELINK] = () => {
20
+ Object.assign(resourceModel, buildModel(config));
21
+ };
22
+ return resourceModel;
23
+ }
24
+ function buildModel(config) {
13
25
  const name = (0, common_1.capitalize)(config.name || node_path_1.default.basename(node_path_1.default.dirname(__dirname)));
14
- const idSchema = buildIdSchema(config?.id);
26
+ const idSchema = (0, resource_1.idSchema)(config?.id);
15
27
  const auditSchema = buildAuditSchema(config?.audit);
16
28
  const scalarsSchema = buildScalarsSchema(config?.scalars);
17
29
  const virtualSchema = buildScalarsSchema(config?.virtual);
@@ -38,11 +50,13 @@ function createModel(config, override = false) {
38
50
  const createModel = omitOrPickScalars(resolveDefaultScalars(typebox_1.Type.Composite([scalarsSchema, virtualSchema]), config), config.create);
39
51
  const updateModel = omitOrPickScalars(resolveDefaultScalars(typebox_1.Type.Partial(typebox_1.Type.Composite([scalarsSchema, virtualSchema])), config), config.update);
40
52
  const { readOneModel, readManyModel } = buildOutputModels(baseReadModel, relationsModel, filesModel, config);
53
+ const readOneNullableModel = buildNullableOutputModel(name);
41
54
  const { createOneModel, updateOneModel, relationCreateModel, relationUpdateModel, relationInputModel } = buildInputModels(createModel, updateModel, relationsModel, idSchema, config);
42
55
  const { fileUploadModel, fileDeleteModel } = buildFileInputModels(config);
43
56
  const resourceModel = {
44
57
  name,
45
58
  config: config,
59
+ idModel: idSchema,
46
60
  readModel,
47
61
  createModel,
48
62
  updateModel,
@@ -51,6 +65,7 @@ function createModel(config, override = false) {
51
65
  virtualModel,
52
66
  readOneModel,
53
67
  readManyModel,
68
+ readOneNullableModel,
54
69
  createOneModel,
55
70
  updateOneModel,
56
71
  relationCreateModel,
@@ -66,22 +81,20 @@ function createModel(config, override = false) {
66
81
  }
67
82
  resourceModel[common_1.RESOURCE_NAME] = name;
68
83
  resourceModel[common_1.RESOURCE_TYPE] = common_1.RESOURCE_MODEL_TYPE;
69
- common_1.logger.debug({ modelName: name }, 'Created resource model');
70
- (0, context_1.define)(resourceModel, undefined, override ? 'override' : undefined);
71
84
  return resourceModel;
72
85
  }
73
- function buildIdSchema(idField = { type: 'int' }) {
74
- let idType;
75
- switch (idField.type) {
76
- case 'string':
77
- idType = resource_1.IdString;
78
- break;
79
- case 'int':
80
- case 'bigInt':
81
- default:
82
- idType = resource_1.Id;
86
+ function referencedIdField(modelName) {
87
+ if (!modelName) {
88
+ return undefined;
89
+ }
90
+ return context_1.context.resource.models.get((0, common_1.capitalize)(modelName))?.config?.id;
91
+ }
92
+ function authIdField() {
93
+ for (const model of context_1.context.resource.models.values()) {
94
+ if ((0, common_1.isResourceAuthModel)(model)) {
95
+ return model.config?.id;
96
+ }
83
97
  }
84
- return idType;
85
98
  }
86
99
  function buildAuditSchema(audit = {}) {
87
100
  const defaultAudit = {
@@ -96,7 +109,7 @@ function buildAuditSchema(audit = {}) {
96
109
  fields.push(name);
97
110
  }
98
111
  }
99
- return typebox_1.Type.Pick(resource_1.AuditData, fields);
112
+ return typebox_1.Type.Pick((0, resource_1.auditSchema)(authIdField()), fields);
100
113
  }
101
114
  function buildScalarsSchema(fields = {}) {
102
115
  const properties = {};
@@ -212,6 +225,17 @@ function buildOutputModels(readModel, relationsModel, filesModel, config) {
212
225
  ], { $id: `${config.name}Multiple` });
213
226
  return { readOneModel, readManyModel };
214
227
  }
228
+ function buildNullableOutputModel(name) {
229
+ // Builds the nullable variant of the single read model, registered under its own
230
+ // name so a nullable relation can reference it instead of inlining the union.
231
+ // The response serializer cannot compile an inline `anyOf` union that cycles
232
+ // back to a model it is already writing, since it expands every union branch
233
+ // into a fresh schema. A union behind a name is expanded once and reused, which
234
+ // keeps a self-referencing relation (a category and its parent) serializable.
235
+ return typebox_1.Type.Union([typebox_1.Type.Ref(`${name}Single`), typebox_1.Type.Null()], {
236
+ $id: `${name}SingleNullable`
237
+ });
238
+ }
215
239
  function buildInputModels(createModel, updateModel, relationsModel, idSchema, config) {
216
240
  const virtualConfig = config.virtual;
217
241
  const relationsConfig = config.relations;
@@ -294,13 +318,17 @@ function relationInputProperties(object, relationConfig, inputType) {
294
318
  // requests accept them
295
319
  const acceptsInlineWrite = config?.input?.allowCreate ||
296
320
  (config?.input?.allowUpdate && inputType === 'update');
297
- // Existing records are connected by an id object or a bare id value.
298
- // Relations accepting inline writes take the permissive input model
299
- // instead, which also covers a lone id. Only one object schema may join
300
- // the union, since the server strips undeclared properties.
321
+ // Existing records are connected by an id object or a bare id value, both
322
+ // typed after the primary key of the related model. Relations accepting
323
+ // inline writes take the permissive input model instead, which also covers
324
+ // a lone id. Only one object schema may join the union, since the server
325
+ // strips undeclared properties.
326
+ const relatedIdField = referencedIdField(config?.model);
301
327
  const itemSchemas = [
302
- acceptsInlineWrite ? typebox_1.Type.Ref(`${config.model}RelationInput`) : resource_1.Id,
303
- resource_1.Id.properties.id
328
+ acceptsInlineWrite
329
+ ? typebox_1.Type.Ref(`${config.model}RelationInput`)
330
+ : (0, resource_1.idSchema)(relatedIdField),
331
+ (0, resource_1.idValueSchema)(relatedIdField)
304
332
  ];
305
333
  const isArrayType = type === 'array';
306
334
  const isOptional = config?.required === false;
@@ -334,7 +362,7 @@ function relationOutputProperties(object, relationConfig, outputType) {
334
362
  return undefined;
335
363
  }
336
364
  if (config.required === false && schema.type !== 'array') {
337
- schema = (0, common_1.Nullable)(schema);
365
+ schema = nullableOutputSchema(schema);
338
366
  }
339
367
  }
340
368
  return schema;
@@ -363,6 +391,10 @@ function relationOutputProperties(object, relationConfig, outputType) {
363
391
  }, {})
364
392
  });
365
393
  }
394
+ function nullableOutputSchema(schema) {
395
+ const modelRef = schema.$ref;
396
+ return modelRef ? typebox_1.Type.Ref(`${modelRef}Nullable`) : (0, common_1.Nullable)(schema);
397
+ }
366
398
  function removeHiddenFields(schema) {
367
399
  const properties = {};
368
400
  for (const [name, field] of Object.entries(schema.properties)) {
@@ -24,15 +24,17 @@ function createService(config, override = false) {
24
24
  await config.afterFind?.(result);
25
25
  return result;
26
26
  }
27
- async query(filter = {}, page = 1, size = 50, sort = '-createdAt,id') {
28
- await config.beforeQuery?.(filter, page, size, sort);
29
- const result = await super.query(filter, page, size, sort);
27
+ async query(filter = {}, page = 1, size = 50, sort = '-createdAt', cursor, totalCount = true) {
28
+ await config.beforeQuery?.(filter, page, size, sort, cursor, totalCount);
29
+ const result = await super.query(filter, page, size, sort, cursor, totalCount);
30
30
  await config.afterQuery?.(result);
31
31
  return result;
32
32
  }
33
33
  async aggregate(filter = {}, select, dateField = 'createdAt', from, to, step, safeIncrement = true) {
34
34
  await config.beforeAggregate?.(filter, select, dateField, from, to, step, safeIncrement);
35
35
  const result = await super.aggregate(filter, select, dateField, from, to, step, safeIncrement);
36
+ // The hook is declared once for the model, so it takes the response of
37
+ // every selection, of which this one holds a subset of the fields
36
38
  await config.afterAggregate?.(result);
37
39
  return result;
38
40
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appweaver/core",
3
- "version": "1.3.1",
3
+ "version": "1.4.1",
4
4
  "description": "Appweaver - the backend framework for AI-first development (@core)",
5
5
  "author": "Luka Matosevic",
6
6
  "license": "MIT",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "scripts": {
28
28
  "generate": "weaver generate --modelPattern ./**/model.ts --typesPath ./types/generated.ts --schemaPath ./prisma/schema.prisma --clientPath ./prisma/client",
29
- "db:recreate": "rimraf dev.db && rimraf prisma/migrations --glob \"*_init\" && weaver migration new init"
29
+ "db:recreate": "rimraf dev.db && rimraf prisma/migrations && weaver migration new init"
30
30
  },
31
31
  "dependencies": {
32
32
  "@fastify/auth": "5.0.4",
@@ -171,31 +171,6 @@ export type JsonWithAggregatesFilterBase<$PrismaModel = never> = {
171
171
  _min?: Prisma.NestedJsonFilter<$PrismaModel>;
172
172
  _max?: Prisma.NestedJsonFilter<$PrismaModel>;
173
173
  };
174
- export type IntNullableFilter<$PrismaModel = never> = {
175
- equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null;
176
- in?: number[] | null;
177
- notIn?: number[] | null;
178
- lt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
179
- lte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
180
- gt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
181
- gte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
182
- not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null;
183
- };
184
- export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {
185
- equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null;
186
- in?: number[] | null;
187
- notIn?: number[] | null;
188
- lt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
189
- lte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
190
- gt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
191
- gte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
192
- not?: Prisma.NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null;
193
- _count?: Prisma.NestedIntNullableFilter<$PrismaModel>;
194
- _avg?: Prisma.NestedFloatNullableFilter<$PrismaModel>;
195
- _sum?: Prisma.NestedIntNullableFilter<$PrismaModel>;
196
- _min?: Prisma.NestedIntNullableFilter<$PrismaModel>;
197
- _max?: Prisma.NestedIntNullableFilter<$PrismaModel>;
198
- };
199
174
  export type NestedIntFilter<$PrismaModel = never> = {
200
175
  equals?: number | Prisma.IntFieldRefInput<$PrismaModel>;
201
176
  in?: number[];
@@ -368,28 +343,3 @@ export type NestedJsonFilterBase<$PrismaModel = never> = {
368
343
  array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null;
369
344
  not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter;
370
345
  };
371
- export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = {
372
- equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null;
373
- in?: number[] | null;
374
- notIn?: number[] | null;
375
- lt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
376
- lte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
377
- gt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
378
- gte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
379
- not?: Prisma.NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null;
380
- _count?: Prisma.NestedIntNullableFilter<$PrismaModel>;
381
- _avg?: Prisma.NestedFloatNullableFilter<$PrismaModel>;
382
- _sum?: Prisma.NestedIntNullableFilter<$PrismaModel>;
383
- _min?: Prisma.NestedIntNullableFilter<$PrismaModel>;
384
- _max?: Prisma.NestedIntNullableFilter<$PrismaModel>;
385
- };
386
- export type NestedFloatNullableFilter<$PrismaModel = never> = {
387
- equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null;
388
- in?: number[] | null;
389
- notIn?: number[] | null;
390
- lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>;
391
- lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>;
392
- gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>;
393
- gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>;
394
- not?: Prisma.NestedFloatNullableFilter<$PrismaModel> | number | null;
395
- };
@@ -51,7 +51,7 @@ const config = {
51
51
  "clientVersion": "7.9.1",
52
52
  "engineVersion": "e922089b7d7502aff4249d5da3420f6fa55fc6ad",
53
53
  "activeProvider": "sqlite",
54
- "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Generated by Appweaver. Please do not edit this file manually.\n\ndatasource db {\n provider = \"sqlite\"\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./client\"\n}\n\nmodel ApiKey {\n id Int @id @default(autoincrement())\n key String\n keyHash String @unique\n name String?\n description String?\n enabled Boolean @default(true)\n expiresAt DateTime?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel ConnectedAccount {\n id Int @id @default(autoincrement())\n provider String\n providerAccountId String\n scope String?\n lastLoginAt DateTime\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([provider, providerAccountId])\n}\n\nmodel OneTimeToken {\n id Int @id @default(autoincrement())\n tokenHash String\n purpose String\n expiresAt DateTime\n data Json\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([tokenHash, purpose])\n}\n\nmodel Permission {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n roles Role[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Role {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n permissions Permission[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Seeder {\n id String @id @default(uuid())\n checksum String\n seederName String @unique\n startedAt DateTime\n finishedAt DateTime\n logs String?\n\n @@map(\"_seeders\")\n}\n\nmodel File {\n id Int @id @default(autoincrement())\n name String @unique\n originalName String\n mimeType String\n sizeBytes Int\n checksum String\n title String?\n description String?\n resourceField String?\n resourceName String?\n resourceId Int?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([resourceField, resourceName, resourceId])\n}\n",
54
+ "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Generated by Appweaver. Please do not edit this file manually.\n\ndatasource db {\n provider = \"sqlite\"\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./client\"\n}\n\nmodel ApiKey {\n id Int @id @default(autoincrement())\n key String\n keyHash String @unique\n name String?\n description String?\n enabled Boolean @default(true)\n expiresAt DateTime?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel ConnectedAccount {\n id Int @id @default(autoincrement())\n provider String\n providerAccountId String\n scope String?\n lastLoginAt DateTime\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([provider, providerAccountId])\n}\n\nmodel OneTimeToken {\n id Int @id @default(autoincrement())\n tokenHash String\n purpose String\n expiresAt DateTime\n data Json\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([tokenHash, purpose])\n}\n\nmodel Permission {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n roles Role[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Role {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n permissions Permission[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Seeder {\n id String @id @default(uuid())\n checksum String\n seederName String @unique\n startedAt DateTime\n finishedAt DateTime\n logs String?\n\n @@map(\"_seeders\")\n}\n\nmodel File {\n id Int @id @default(autoincrement())\n name String @unique\n originalName String\n mimeType String\n sizeBytes Int\n checksum String\n title String?\n description String?\n resourceField String?\n resourceName String?\n resourceId String?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([resourceField, resourceName, resourceId])\n}\n",
55
55
  "runtimeDataModel": {
56
56
  "models": {},
57
57
  "enums": {},
@@ -62,10 +62,10 @@ const config = {
62
62
  "graph": ""
63
63
  }
64
64
  };
65
- config.runtimeDataModel = JSON.parse("{\"models\":{\"ApiKey\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"keyHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"enabled\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ConnectedAccount\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastLoginAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"OneTimeToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"purpose\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Permission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roles\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Role\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"Permission\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Seeder\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"seederName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"finishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"logs\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":\"_seeders\"},\"File\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"originalName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceField\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}");
65
+ config.runtimeDataModel = JSON.parse("{\"models\":{\"ApiKey\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"keyHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"enabled\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ConnectedAccount\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastLoginAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"OneTimeToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"purpose\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Permission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roles\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Role\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"Permission\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Seeder\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"seederName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"finishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"logs\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":\"_seeders\"},\"File\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"originalName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceField\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}");
66
66
  config.parameterizationSchema = {
67
67
  strings: JSON.parse("[\"where\",\"ApiKey.findUnique\",\"ApiKey.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"ApiKey.findFirst\",\"ApiKey.findFirstOrThrow\",\"ApiKey.findMany\",\"data\",\"ApiKey.createOne\",\"ApiKey.createMany\",\"ApiKey.createManyAndReturn\",\"ApiKey.updateOne\",\"ApiKey.updateMany\",\"ApiKey.updateManyAndReturn\",\"create\",\"update\",\"ApiKey.upsertOne\",\"ApiKey.deleteOne\",\"ApiKey.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"ApiKey.groupBy\",\"ApiKey.aggregate\",\"ConnectedAccount.findUnique\",\"ConnectedAccount.findUniqueOrThrow\",\"ConnectedAccount.findFirst\",\"ConnectedAccount.findFirstOrThrow\",\"ConnectedAccount.findMany\",\"ConnectedAccount.createOne\",\"ConnectedAccount.createMany\",\"ConnectedAccount.createManyAndReturn\",\"ConnectedAccount.updateOne\",\"ConnectedAccount.updateMany\",\"ConnectedAccount.updateManyAndReturn\",\"ConnectedAccount.upsertOne\",\"ConnectedAccount.deleteOne\",\"ConnectedAccount.deleteMany\",\"ConnectedAccount.groupBy\",\"ConnectedAccount.aggregate\",\"OneTimeToken.findUnique\",\"OneTimeToken.findUniqueOrThrow\",\"OneTimeToken.findFirst\",\"OneTimeToken.findFirstOrThrow\",\"OneTimeToken.findMany\",\"OneTimeToken.createOne\",\"OneTimeToken.createMany\",\"OneTimeToken.createManyAndReturn\",\"OneTimeToken.updateOne\",\"OneTimeToken.updateMany\",\"OneTimeToken.updateManyAndReturn\",\"OneTimeToken.upsertOne\",\"OneTimeToken.deleteOne\",\"OneTimeToken.deleteMany\",\"OneTimeToken.groupBy\",\"OneTimeToken.aggregate\",\"permissions\",\"roles\",\"Permission.findUnique\",\"Permission.findUniqueOrThrow\",\"Permission.findFirst\",\"Permission.findFirstOrThrow\",\"Permission.findMany\",\"Permission.createOne\",\"Permission.createMany\",\"Permission.createManyAndReturn\",\"Permission.updateOne\",\"Permission.updateMany\",\"Permission.updateManyAndReturn\",\"Permission.upsertOne\",\"Permission.deleteOne\",\"Permission.deleteMany\",\"Permission.groupBy\",\"Permission.aggregate\",\"Role.findUnique\",\"Role.findUniqueOrThrow\",\"Role.findFirst\",\"Role.findFirstOrThrow\",\"Role.findMany\",\"Role.createOne\",\"Role.createMany\",\"Role.createManyAndReturn\",\"Role.updateOne\",\"Role.updateMany\",\"Role.updateManyAndReturn\",\"Role.upsertOne\",\"Role.deleteOne\",\"Role.deleteMany\",\"Role.groupBy\",\"Role.aggregate\",\"Seeder.findUnique\",\"Seeder.findUniqueOrThrow\",\"Seeder.findFirst\",\"Seeder.findFirstOrThrow\",\"Seeder.findMany\",\"Seeder.createOne\",\"Seeder.createMany\",\"Seeder.createManyAndReturn\",\"Seeder.updateOne\",\"Seeder.updateMany\",\"Seeder.updateManyAndReturn\",\"Seeder.upsertOne\",\"Seeder.deleteOne\",\"Seeder.deleteMany\",\"Seeder.groupBy\",\"Seeder.aggregate\",\"File.findUnique\",\"File.findUniqueOrThrow\",\"File.findFirst\",\"File.findFirstOrThrow\",\"File.findMany\",\"File.createOne\",\"File.createMany\",\"File.createManyAndReturn\",\"File.updateOne\",\"File.updateMany\",\"File.updateManyAndReturn\",\"File.upsertOne\",\"File.deleteOne\",\"File.deleteMany\",\"File.groupBy\",\"File.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"name\",\"originalName\",\"mimeType\",\"sizeBytes\",\"checksum\",\"title\",\"description\",\"resourceField\",\"resourceName\",\"resourceId\",\"updatedAt\",\"createdAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"seederName\",\"startedAt\",\"finishedAt\",\"logs\",\"every\",\"some\",\"none\",\"tokenHash\",\"purpose\",\"expiresAt\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"provider\",\"providerAccountId\",\"scope\",\"lastLoginAt\",\"key\",\"keyHash\",\"enabled\",\"connectOrCreate\",\"upsert\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
68
- graph: "qQJHcAx-AADiAQAwfwAABAAQgAEAAOIBADCBAQIAAAABggEBAMkBACGIAQEAyQEAIYwBQADLAQAhjQFAAMsBACGiAUAA5AEAIawBAQDIAQAhrQEBAAAAAa4BIADjAQAhAQAAAAEAIAEAAAABACAMfgAA4gEAMH8AAAQAEIABAADiAQAwgQECAMcBACGCAQEAyQEAIYgBAQDJAQAhjAFAAMsBACGNAUAAywEAIaIBQADkAQAhrAEBAMgBACGtAQEAyAEAIa4BIADjAQAhA4IBAADlAQAgiAEAAOUBACCiAQAA5QEAIAMAAAAEACADAAAFADAEAAABACADAAAABAAgAwAABQAwBAAAAQAgAwAAAAQAIAMAAAUAMAQAAAEAIAmBAQIAAAABggEBAAAAAYgBAQAAAAGMAUAAAAABjQFAAAAAAaIBQAAAAAGsAQEAAAABrQEBAAAAAa4BIAAAAAEBCAAACQAgCYEBAgAAAAGCAQEAAAABiAEBAAAAAYwBQAAAAAGNAUAAAAABogFAAAAAAawBAQAAAAGtAQEAAAABrgEgAAAAAQEIAAALADABCAAACwAwCYEBAgDsAQAhggEBAO0BACGIAQEA7QEAIYwBQADvAQAhjQFAAO8BACGiAUAAqQIAIawBAQDrAQAhrQEBAOsBACGuASAAqAIAIQIAAAABACAIAAAOACAJgQECAOwBACGCAQEA7QEAIYgBAQDtAQAhjAFAAO8BACGNAUAA7wEAIaIBQACpAgAhrAEBAOsBACGtAQEA6wEAIa4BIACoAgAhAgAAAAQAIAgAABAAIAIAAAAEACAIAAAQACADAAAAAQAgDwAACQAgEAAADgAgAQAAAAEAIAEAAAAEACAIFQAAowIAIBYAAKQCACAXAACnAgAgGAAApgIAIBkAAKUCACCCAQAA5QEAIIgBAADlAQAgogEAAOUBACAMfgAA2wEAMH8AABcAEIABAADbAQAwgQECALUBACGCAQEAtwEAIYgBAQC3AQAhjAFAALkBACGNAUAAuQEAIaIBQADdAQAhrAEBALYBACGtAQEAtgEAIa4BIADcAQAhAwAAAAQAIAMAABYAMBQAABcAIAMAAAAEACADAAAFADAEAAABACAKfgAA2gEAMH8AAB0AEIABAADaAQAwgQECAAAAAYwBQADLAQAhjQFAAMsBACGoAQEAyAEAIakBAQDIAQAhqgEBAMkBACGrAUAAywEAIQEAAAAaACABAAAAGgAgCn4AANoBADB_AAAdABCAAQAA2gEAMIEBAgDHAQAhjAFAAMsBACGNAUAAywEAIagBAQDIAQAhqQEBAMgBACGqAQEAyQEAIasBQADLAQAhAaoBAADlAQAgAwAAAB0AIAMAAB4AMAQAABoAIAMAAAAdACADAAAeADAEAAAaACADAAAAHQAgAwAAHgAwBAAAGgAgB4EBAgAAAAGMAUAAAAABjQFAAAAAAagBAQAAAAGpAQEAAAABqgEBAAAAAasBQAAAAAEBCAAAIgAgB4EBAgAAAAGMAUAAAAABjQFAAAAAAagBAQAAAAGpAQEAAAABqgEBAAAAAasBQAAAAAEBCAAAJAAwAQgAACQAMAeBAQIA7AEAIYwBQADvAQAhjQFAAO8BACGoAQEA6wEAIakBAQDrAQAhqgEBAO0BACGrAUAA7wEAIQIAAAAaACAIAAAnACAHgQECAOwBACGMAUAA7wEAIY0BQADvAQAhqAEBAOsBACGpAQEA6wEAIaoBAQDtAQAhqwFAAO8BACECAAAAHQAgCAAAKQAgAgAAAB0AIAgAACkAIAMAAAAaACAPAAAiACAQAAAnACABAAAAGgAgAQAAAB0AIAYVAACeAgAgFgAAnwIAIBcAAKICACAYAAChAgAgGQAAoAIAIKoBAADlAQAgCn4AANkBADB_AAAwABCAAQAA2QEAMIEBAgC1AQAhjAFAALkBACGNAUAAuQEAIagBAQC2AQAhqQEBALYBACGqAQEAtwEAIasBQAC5AQAhAwAAAB0AIAMAAC8AMBQAADAAIAMAAAAdACADAAAeADAEAAAaACAKCAAA2AEAIH4AANcBADB_AAA2ABCAAQAA1wEAMIEBAgAAAAGMAUAAywEAIY0BQADLAQAhoAEBAMgBACGhAQEAyAEAIaIBQADLAQAhAQAAADMAIAEAAAAzACAKCAAA2AEAIH4AANcBADB_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_AAB_ABCAAQAAzgEAMIEBAgC1AQAhggEBALYBACGMAUAAuQEAIY0BQAC5AQAhAwAAAE4AIAMAAH4AMBQAAH8AIAMAAABOACADAABPADAEAABQACAJfgAAzQEAMH8AAIUBABCAAQAAzQEAMIEBAQAAAAGGAQEAyAEAIZkBAQAAAAGaAUAAywEAIZsBQADLAQAhnAEBAMkBACEBAAAAggEAIAEAAACCAQAgCX4AAM0BADB_AACFAQAQgAEAAM0BADCBAQEAyAEAIYYBAQDIAQAhmQEBAMgBACGaAUAAywEAIZsBQADLAQAhnAEBAMkBACEBnAEAAOUBACADAAAAhQEAIAMAAIYBADAEAACCAQAgAwAAAIUBACADAACGAQAwBAAAggEAIAMAAACFAQAgAwAAhgEAMAQAAIIBACAGgQEBAAAAAYYBAQAAAAGZAQEAAAABmgFAAAAAAZsBQAAAAAGcAQEAAAABAQgAAIoBACAGgQEBAAAAAYYBAQAAAAGZAQEAAAABmgFAAAAAAZsBQAAAAAGcAQEAAAABAQgAAIwBADABCAAAjAEAMAaBAQEA6wEAIYYBAQDrAQAhmQEBAOsBACGaAUAA7wEAIZsBQADvAQAhnAEBAO0BACECAAAAggEAIAgAAI8BACAGgQEBAOsBACGGAQEA6wEAIZkBAQDrAQAhmgFAAO8BACGbAUAA7wEAIZwBAQDtAQAhAgAAAIUBACAIAACRAQAgAgAAAIUBACAIAACRAQAgAwAAAIIBACAPAACKAQAgEAAAjwEAIAEAAACCAQAgAQAAAIUBACAEFQAA8AEAIBgAAPIBACAZAADxAQAgnAEAAOUBACAJfgAAzAEAMH8AAJgBABCAAQAAzAEAMIEBAQC2AQAhhgEBALYBACGZAQEAtgEAIZoBQAC5AQAhmwFAALkBACGcAQEAtwEAIQMAAACFAQAgAwAAlwEAMBQAAJgBACADAAAAhQEAIAMAAIYBADAEAACCAQAgEH4AAMYBADB_AACeAQAQgAEAAMYBADCBAQIAAAABggEBAAAAAYMBAQDIAQAhhAEBAMgBACGFAQIAxwEAIYYBAQDIAQAhhwEBAMkBACGIAQEAyQEAIYkBAQDJAQAhigEBAMkBACGLAQIAygEAIYwBQADLAQAhjQFAAMsBACEBAAAAmwEAIAEAAACbAQAgEH4AAMYBADB_AACeAQAQgAEAAMYBADCBAQIAxwEAIYIBAQDIAQAhgwEBAMgBACGEAQEAyAEAIYUBAgDHAQAhhgEBAMgBACGHAQEAyQEAIYgBAQDJAQAhiQEBAMkBACGKAQEAyQEAIYsBAgDKAQAhjAFAAMsBACGNAUAAywEAIQWHAQAA5QEAIIgBAADlAQAgiQEAAOUBACCKAQAA5QEAIIsBAADlAQAgAwAAAJ4BACADAACfAQAwBAAAmwEAIAMAAACeAQAgAwAAnwEAMAQAAJsBACADAAAAngEAIAMAAJ8BADAEAACbAQAgDYEBAgAAAAGCAQEAAAABgwEBAAAAAYQBAQAAAAGFAQIAAAABhgEBAAAAAYcBAQAAAAGIAQEAAAABiQEBAAAAAYoBAQAAAAGLAQIAAAABjAFAAAAAAY0BQAAAAAEBCAAAowEAIA2BAQIAAAABggEBAAAAAYMBAQAAAAGEAQEAAAABhQECAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAGKAQEAAAABiwECAAAAAYwBQAAAAAGNAUAAAAABAQgAAKUBADABCAAApQEAMA2BAQIA7AEAIYIBAQDrAQAhgwEBAOsBACGEAQEA6wEAIYUBAgDsAQAhhgEBAOsBACGHAQEA7QEAIYgBAQDtAQAhiQEBAO0BACGKAQEA7QEAIYsBAgDuAQAhjAFAAO8BACGNAUAA7wEAIQIAAACbAQAgCAAAqAEAIA2BAQIA7AEAIYIBAQDrAQAhgwEBAOsBACGEAQEA6wEAIYUBAgDsAQAhhgEBAOsBACGHAQEA7QEAIYgBAQDtAQAhiQEBAO0BACGKAQEA7QEAIYsBAgDuAQAhjAFAAO8BACGNAUAA7wEAIQIAAACeAQAgCAAAqgEAIAIAAACeAQAgCAAAqgEAIAMAAACbAQAgDwAAowEAIBAAAKgBACABAAAAmwEAIAEAAACeAQAgChUAAOYBACAWAADnAQAgFwAA6gEAIBgAAOkBACAZAADoAQAghwEAAOUBACCIAQAA5QEAIIkBAADlAQAgigEAAOUBACCLAQAA5QEAIBB-AAC0AQAwfwAAsQEAEIABAAC0AQAwgQECALUBACGCAQEAtgEAIYMBAQC2AQAhhAEBALYBACGFAQIAtQEAIYYBAQC2AQAhhwEBALcBACGIAQEAtwEAIYkBAQC3AQAhigEBALcBACGLAQIAuAEAIYwBQAC5AQAhjQFAALkBACEDAAAAngEAIAMAALABADAUAACxAQAgAwAAAJ4BACADAACfAQAwBAAAmwEAIBB-AAC0AQAwfwAAsQEAEIABAAC0AQAwgQECALUBACGCAQEAtgEAIYMBAQC2AQAhhAEBALYBACGFAQIAtQEAIYYBAQC2AQAhhwEBALcBACGIAQEAtwEAIYkBAQC3AQAhigEBALcBACGLAQIAuAEAIYwBQAC5AQAhjQFAALkBACENFQAAuwEAIBYAAMUBACAXAAC7AQAgGAAAuwEAIBkAALsBACCOAQIAAAABjwECAAAABJABAgAAAASRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAMQBACEOFQAAuwEAIBgAAMMBACAZAADDAQAgjgEBAAAAAY8BAQAAAASQAQEAAAAEkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQDCAQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABDhUAAL4BACAYAADBAQAgGQAAwQEAII4BAQAAAAGPAQEAAAAFkAEBAAAABZEBAQAAAAGSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAwAEAIZYBAQAAAAGXAQEAAAABmAEBAAAAAQ0VAAC-AQAgFgAAvwEAIBcAAL4BACAYAAC-AQAgGQAAvgEAII4BAgAAAAGPAQIAAAAFkAECAAAABZEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAvQEAIQsVAAC7AQAgGAAAvAEAIBkAALwBACCOAUAAAAABjwFAAAAABJABQAAAAASRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAALoBACELFQAAuwEAIBgAALwBACAZAAC8AQAgjgFAAAAAAY8BQAAAAASQAUAAAAAEkQFAAAAAAZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAC6AQAhCI4BAgAAAAGPAQIAAAAEkAECAAAABJEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAuwEAIQiOAUAAAAABjwFAAAAABJABQAAAAASRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAALwBACENFQAAvgEAIBYAAL8BACAXAAC-AQAgGAAAvgEAIBkAAL4BACCOAQIAAAABjwECAAAABZABAgAAAAWRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAL0BACEIjgECAAAAAY8BAgAAAAWQAQIAAAAFkQECAAAAAZIBAgAAAAGTAQIAAAABlAECAAAAAZUBAgC-AQAhCI4BCAAAAAGPAQgAAAAFkAEIAAAABZEBCAAAAAGSAQgAAAABkwEIAAAAAZQBCAAAAAGVAQgAvwEAIQ4VAAC-AQAgGAAAwQEAIBkAAMEBACCOAQEAAAABjwEBAAAABZABAQAAAAWRAQEAAAABkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAMABACGWAQEAAAABlwEBAAAAAZgBAQAAAAELjgEBAAAAAY8BAQAAAAWQAQEAAAAFkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQDBAQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABDhUAALsBACAYAADDAQAgGQAAwwEAII4BAQAAAAGPAQEAAAAEkAEBAAAABJEBAQAAAAGSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAwgEAIZYBAQAAAAGXAQEAAAABmAEBAAAAAQuOAQEAAAABjwEBAAAABJABAQAAAASRAQEAAAABkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAMMBACGWAQEAAAABlwEBAAAAAZgBAQAAAAENFQAAuwEAIBYAAMUBACAXAAC7AQAgGAAAuwEAIBkAALsBACCOAQIAAAABjwECAAAABJABAgAAAASRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAMQBACEIjgEIAAAAAY8BCAAAAASQAQgAAAAEkQEIAAAAAZIBCAAAAAGTAQgAAAABlAEIAAAAAZUBCADFAQAhEH4AAMYBADB_AACeAQAQgAEAAMYBADCBAQIAxwEAIYIBAQDIAQAhgwEBAMgBACGEAQEAyAEAIYUBAgDHAQAhhgEBAMgBACGHAQEAyQEAIYgBAQDJAQAhiQEBAMkBACGKAQEAyQEAIYsBAgDKAQAhjAFAAMsBACGNAUAAywEAIQiOAQIAAAABjwECAAAABJABAgAAAASRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECALsBACELjgEBAAAAAY8BAQAAAASQAQEAAAAEkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQDDAQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABC44BAQAAAAGPAQEAAAAFkAEBAAAABZEBAQAAAAGSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAwQEAIZYBAQAAAAGXAQEAAAABmAEBAAAAAQiOAQIAAAABjwECAAAABZABAgAAAAWRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAL4BACEIjgFAAAAAAY8BQAAAAASQAUAAAAAEkQFAAAAAAZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAC8AQAhCX4AAMwBADB_AACYAQAQgAEAAMwBADCBAQEAtgEAIYYBAQC2AQAhmQEBALYBACGaAUAAuQEAIZsBQAC5AQAhnAEBALcBACEJfgAAzQEAMH8AAIUBABCAAQAAzQEAMIEBAQDIAQAhhgEBAMgBACGZAQEAyAEAIZoBQADLAQAhmwFAAMsBACGcAQEAyQEAIQd-AADOAQAwfwAAfwAQgAEAAM4BADCBAQIAtQEAIYIBAQC2AQAhjAFAALkBACGNAUAAuQEAIQd-AADPAQAwfwAAaQAQgAEAAM8BADCBAQIAtQEAIYIBAQC2AQAhjAFAALkBACGNAUAAuQEAIQg9AADRAQAgfgAA0AEAMH8AAFIAEIABAADQAQAwgQECAMcBACGCAQEAyAEAIYwBQADLAQAhjQFAAMsBACEDnQEAAE4AIJ4BAABOACCfAQAATgAgCDwAANMBACB-AADSAQAwfwAATgAQgAEAANIBADCBAQIAxwEAIYIBAQDIAQAhjAFAAMsBACGNAUAAywEAIQOdAQAAUgAgngEAAFIAIJ8BAABSACAKCAAA1QEAIH4AANQBADB_AABJABCAAQAA1AEAMIEBAgC1AQAhjAFAALkBACGNAUAAuQEAIaABAQC2AQAhoQEBALYBACGiAUAAuQEAIQoVAAC7AQAgGAAA1gEAIBkAANYBACCOAYAAAAABlQGAAAAAAaMBAQAAAAGkAQEAAAABpQEBAAAAAaYBgAAAAAGnAYAAAAABB44BgAAAAAGVAYAAAAABowEBAAAAAaQBAQAAAAGlAQEAAAABpgGAAAAAAacBgAAAAAEKCAAA2AEAIH4AANcBADB_AAA2ABCAAQAA1wEAMIEBAgDHAQAhjAFAAMsBACGNAUAAywEAIaABAQDIAQAhoQEBAMgBACGiAUAAywEAIQeOAYAAAAABlQGAAAAAAaMBAQAAAAGkAQEAAAABpQEBAAAAAaYBgAAAAAGnAYAAAAABCn4AANkBADB_AAAwABCAAQAA2QEAMIEBAgC1AQAhjAFAALkBACGNAUAAuQEAIagBAQC2AQAhqQEBALYBACGqAQEAtwEAIasBQAC5AQAhCn4AANoBADB_AAAdABCAAQAA2gEAMIEBAgDHAQAhjAFAAMsBACGNAUAAywEAIagBAQDIAQAhqQEBAMgBACGqAQEAyQEAIasBQADLAQAhDH4AANsBADB_AAAXABCAAQAA2wEAMIEBAgC1AQAhggEBALcBACGIAQEAtwEAIYwBQAC5AQAhjQFAALkBACGiAUAA3QEAIawBAQC2AQAhrQEBALYBACGuASAA3AEAIQUVAAC7AQAgGAAA4QEAIBkAAOEBACCOASAAAAABlQEgAOABACELFQAAvgEAIBgAAN8BACAZAADfAQAgjgFAAAAAAY8BQAAAAAWQAUAAAAAFkQFAAAAAAZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQADeAQAhCxUAAL4BACAYAADfAQAgGQAA3wEAII4BQAAAAAGPAUAAAAAFkAFAAAAABZEBQAAAAAGSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAA3gEAIQiOAUAAAAABjwFAAAAABZABQAAAAAWRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAAN8BACEFFQAAuwEAIBgAAOEBACAZAADhAQAgjgEgAAAAAZUBIADgAQAhAo4BIAAAAAGVASAA4QEAIQx-AADiAQAwfwAABAAQgAEAAOIBADCBAQIAxwEAIYIBAQDJAQAhiAEBAMkBACGMAUAAywEAIY0BQADLAQAhogFAAOQBACGsAQEAyAEAIa0BAQDIAQAhrgEgAOMBACECjgEgAAAAAZUBIADhAQAhCI4BQAAAAAGPAUAAAAAFkAFAAAAABZEBQAAAAAGSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAA3wEAIQAAAAAAAAGxAQEAAAABBbEBAgAAAAG3AQIAAAABuAECAAAAAbkBAgAAAAG6AQIAAAABAbEBAQAAAAEFsQECAAAAAbcBAgAAAAG4AQIAAAABuQECAAAAAboBAgAAAAEBsQFAAAAAAQAAAAAAAAAACg8AAPkBADAQAAD9AQAwrwEAAPoBADCwAQAA-wEAMLEBAAD8AQAwsgEAAPwBADCzAQAA_AEAMLQBAAD8AQAwtQEAAP4BADC2AQAA_wEAMASBAQIAAAABggEBAAAAAYwBQAAAAAGNAUAAAAABAgAAAEwAIA8AAIMCACADAAAATAAgDwAAgwIAIBAAAIICACAIPQAA0QEAIH4AANABADB_AABSABCAAQAA0AEAMIEBAgAAAAGCAQEAAAABjAFAAMsBACGNAUAAywEAIQIAAABMACAIAACCAgAgAgAAAIACACAIAACBAgAgB34AAP8BADB_AACAAgAQgAEAAP8BADCBAQIAxwEAIYIBAQDIAQAhjAFAAMsBACGNAUAAywEAIQd-AAD_AQAwfwAAgAIAEIABAAD_AQAwgQECAMcBACGCAQEAyAEAIYwBQADLAQAhjQFAAMsBACEEgQECAOwBACGCAQEA6wEAIYwBQADvAQAhjQFAAO8BACEEgQECAOwBACGCAQEA6wEAIYwBQADvAQAhjQFAAO8BACEEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQMPAAD5AQAwrwEAAPoBADC0AQAA_AEAMAAAAAAACg8AAIsCADAQAACPAgAwrwEAAIwCADCwAQAAjQIAMLEBAACOAgAwsgEAAI4CADCzAQAAjgIAMLQBAACOAgAwtQEAAJACADC2AQAAkQIAMASBAQIAAAABggEBAAAAAYwBQAAAAAGNAUAAAAABAgAAAFAAIA8AAJUCACADAAAAUAAgDwAAlQIAIBAAAJQCACAIPAAA0wEAIH4AANIBADB_AABOABCAAQAA0gEAMIEBAgAAAAGCAQEAAAABjAFAAMsBACGNAUAAywEAIQIAAABQACAIAACUAgAgAgAAAJICACAIAACTAgAgB34AAJECADB_AACSAgAQgAEAAJECADCBAQIAxwEAIYIBAQDIAQAhjAFAAMsBACGNAUAAywEAIQd-AACRAgAwfwAAkgIAEIABAACRAgAwgQECAMcBACGCAQEAyAEAIYwBQADLAQAhjQFAAMsBACEEgQECAOwBACGCAQEA6wEAIYwBQADvAQAhjQFAAO8BACEEgQECAOwBACGCAQEA6wEAIYwBQADvAQAhjQFAAO8BACEEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQMPAACLAgAwrwEAAIwCADC0AQAAjgIAMAAAAAAAAAAAAAAAAAAAAAAAAbEBIAAAAAEBsQFAAAAAAQAAAAAFFQAGFgAHFwAIGAAJGQAKAAAAAAAFFQAGFgAHFwAIGAAJGQAKAAAABRUAEBYAERcAEhgAExkAFAAAAAAABRUAEBYAERcAEhgAExkAFAAAAAUVABoWABsXABwYAB0ZAB4AAAAAAAUVABoWABsXABwYAB0ZAB4CFQAjPVEhAhUAIjxUIAE8VQABPVYAAAAFFQAnFgAoFwApGAAqGQArAAAAAAAFFQAnFgAoFwApGAAqGQArAAAFFQAwFgAxFwAyGAAzGQA0AAAAAAAFFQAwFgAxFwAyGAAzGQA0AAAAAxUAOhgAOxkAPAAAAAMVADoYADsZADwAAAAFFQBCFgBDFwBEGABFGQBGAAAAAAAFFQBCFgBDFwBEGABFGQBGAQIBAgMBBQYBBgcBBwgBCQoBCgwCCw0DDA8BDRECDhIEERMBEhQBExUCGhgFGxkLHBsMHRwMHh8MHyAMICEMISMMIiUCIyYNJCgMJSoCJisOJywMKC0MKS4CKjEPKzIVLDQWLTUWLjgWLzkWMDoWMTwWMj4CMz8XNEEWNUMCNkQYN0UWOEYWOUcCOkoZO0sfPk0gP1cgQFggQVkgQlogQ1wgRF4CRV8kRmEgR2MCSGQlSWUgSmYgS2cCTGomTWssTmwhT20hUG4hUW8hUnAhU3IhVHQCVXUtVnchV3kCWHouWXshWnwhW30CXIABL12BATVegwE2X4QBNmCHATZhiAE2YokBNmOLATZkjQECZY4BN2aQATZnkgECaJMBOGmUATZqlQE2a5YBAmyZATltmgE9bpwBPm-dAT5woAE-caEBPnKiAT5zpAE-dKYBAnWnAT92qQE-d6sBAnisAUB5rQE-eq4BPnuvAQJ8sgFBfbMBRw"
68
+ graph: "pAJHcAx-AADeAQAwfwAABAAQgAEAAN4BADCBAQIAAAABggEBAMYBACGIAQEAxgEAIYwBQADHAQAhjQFAAMcBACGiAUAA4AEAIawBAQDFAQAhrQEBAAAAAa4BIADfAQAhAQAAAAEAIAEAAAABACAMfgAA3gEAMH8AAAQAEIABAADeAQAwgQECAMQBACGCAQEAxgEAIYgBAQDGAQAhjAFAAMcBACGNAUAAxwEAIaIBQADgAQAhrAEBAMUBACGtAQEAxQEAIa4BIADfAQAhA4IBAADhAQAgiAEAAOEBACCiAQAA4QEAIAMAAAAEACADAAAFADAEAAABACADAAAABAAgAwAABQAwBAAAAQAgAwAAAAQAIAMAAAUAMAQAAAEAIAmBAQIAAAABggEBAAAAAYgBAQAAAAGMAUAAAAABjQFAAAAAAaIBQAAAAAGsAQEAAAABrQEBAAAAAa4BIAAAAAEBCAAACQAgCYEBAgAAAAGCAQEAAAABiAEBAAAAAYwBQAAAAAGNAUAAAAABogFAAAAAAawBAQAAAAGtAQEAAAABrgEgAAAAAQEIAAALADABCAAACwAwCYEBAgDoAQAhggEBAOkBACGIAQEA6QEAIYwBQADqAQAhjQFAAOoBACGiAUAApAIAIawBAQDnAQAhrQEBAOcBACGuASAAowIAIQIAAAABACAIAAAOACAJgQECAOgBACGCAQEA6QEAIYgBAQDpAQAhjAFAAOoBACGNAUAA6gEAIaIBQACkAgAhrAEBAOcBACGtAQEA5wEAIa4BIACjAgAhAgAAAAQAIAgAABAAIAIAAAAEACAIAAAQACADAAAAAQAgDwAACQAgEAAADgAgAQAAAAEAIAEAAAAEACAIFQAAngIAIBYAAJ8CACAXAACiAgAgGAAAoQIAIBkAAKACACCCAQAA4QEAIIgBAADhAQAgogEAAOEBACAMfgAA1wEAMH8AABcAEIABAADXAQAwgQECALUBACGCAQEAtwEAIYgBAQC3AQAhjAFAALgBACGNAUAAuAEAIaIBQADZAQAhrAEBALYBACGtAQEAtgEAIa4BIADYAQAhAwAAAAQAIAMAABYAMBQAABcAIAMAAAAEACADAAAFADAEAAABACAKfgAA1gEAMH8AAB0AEIABAADWAQAwgQECAAAAAYwBQADHAQAhjQFAAMcBACGoAQEAxQEAIakBAQDFAQAhqgEBAMYBACGrAUAAxwEAIQEAAAAaACABAAAAGgAgCn4AANYBADB_AAAdABCAAQAA1gEAMIEBAgDEAQAhjAFAAMcBACGNAUAAxwEAIagBAQDFAQAhqQEBAMUBACGqAQEAxgEAIasBQADHAQAhAaoBAADhAQAgAwAAAB0AIAMAAB4AMAQAABoAIAMAAAAdACADAAAeADAEAAAaACADAAAAHQAgAwAAHgAwBAAAGgAgB4EBAgAAAAGMAUAAAAABjQFAAAAAAagBAQAAAAGpAQEAAAABqgEBAAAAAasBQAAAAAEBCAAAIgAgB4EBAgAAAAGMAUAAAAABjQFAAAAAAagBAQAAAAGpAQEAAAABqgEBAAAAAasBQAAAAAEBCAAAJAAwAQgAACQAMAeBAQIA6AEAIYwBQADqAQAhjQFAAOoBACGoAQEA5wEAIakBAQDnAQAhqgEBAOkBACGrAUAA6gEAIQIAAAAaACAIAAAnACAHgQECAOgBACGMAUAA6gEAIY0BQADqAQAhqAEBAOcBACGpAQEA5wEAIaoBAQDpAQAhqwFAAOoBACECAAAAHQAgCAAAKQAgAgAAAB0AIAgAACkAIAMAAAAaACAPAAAiACAQAAAnACABAAAAGgAgAQAAAB0AIAYVAACZAgAgFgAAmgIAIBcAAJ0CACAYAACcAgAgGQAAmwIAIKoBAADhAQAgCn4AANUBADB_AAAwABCAAQAA1QEAMIEBAgC1AQAhjAFAALgBACGNAUAAuAEAIagBAQC2AQAhqQEBALYBACGqAQEAtwEAIasBQAC4AQAhAwAAAB0AIAMAAC8AMBQAADAAIAMAAAAdACADAAAeADAEAAAaACAKCAAA1AEAIH4AANMBADB_AAA2ABCAAQAA0wEAMIEBAgAAAAGMAUAAxwEAIY0BQADHAQAhoAEBAMUBACGhAQEAxQEAIaIBQADHAQAhAQAAADMAIAEAAAAzACAKCAAA1AEAIH4AANMBADB_AAA2ABCAAQAA0wEAMIEBAgDEAQAhjAFAAMcBACGNAUAAxwEAIaABAQDFAQAhoQEBAMUBACGiAUAAxwEAIQADAAAANgAgAwAANwAwBAAAMwAgAwAAADYAIAMAADcAMAQAADMAIAMAAAA2ACADAAA3ADAEAAAzACAHCIAAAAABgQECAAAAAYwBQAAAAAGNAUAAAAABoAEBAAAAAaEBAQAAAAGiAUAAAAABAQgAADsAIAcIgAAAAAGBAQIAAAABjAFAAAAAAY0BQAAAAAGgAQEAAAABoQEBAAAAAaIBQAAAAAEBCAAAPQAwAQgAAD0AMAcIgAAAAAGBAQIA6AEAIYwBQADqAQAhjQFAAOoBACGgAQEA5wEAIaEBAQDnAQAhogFAAOoBACECAAAAMwAgCAAAQAAgBwiAAAAAAYEBAgDoAQAhjAFAAOoBACGNAUAA6gEAIaABAQDnAQAhoQEBAOcBACGiAUAA6gEAIQIAAAA2ACAIAABCACACAAAANgAgCAAAQgAgAwAAADMAIA8AADsAIBAAAEAAIAEAAAAzACABAAAANgAgBRUAAJQCACAWAACVAgAgFwAAmAIAIBgAAJcCACAZAACWAgAgCggAANEBACB-AADQAQAwfwAASQAQgAEAANABADCBAQIAtQEAIYwBQAC4AQAhjQFAALgBACGgAQEAtgEAIaEBAQC2AQAhogFAALgBACEDAAAANgAgAwAASAAwFAAASQAgAwAAADYAIAMAADcAMAQAADMAIAg9AADNAQAgfgAAzAEAMH8AAFIAEIABAADMAQAwgQECAAAAAYIBAQAAAAGMAUAAxwEAIY0BQADHAQAhAQAAAEwAIAg8AADPAQAgfgAAzgEAMH8AAE4AEIABAADOAQAwgQECAMQBACGCAQEAxQEAIYwBQADHAQAhjQFAAMcBACEBPAAAkwIAIAg8AADPAQAgfgAAzgEAMH8AAE4AEIABAADOAQAwgQECAAAAAYIBAQAAAAGMAUAAxwEAIY0BQADHAQAhAwAAAE4AIAMAAE8AMAQAAFAAIAg9AADNAQAgfgAAzAEAMH8AAFIAEIABAADMAQAwgQECAMQBACGCAQEAxQEAIYwBQADHAQAhjQFAAMcBACEBPQAAkgIAIAMAAABSACADAABTADAEAABMACABAAAAUgAgAQAAAE4AIAEAAABMACADAAAAUgAgAwAAUwAwBAAATAAgAwAAAFIAIAMAAFMAMAQAAEwAIAMAAABSACADAABTADAEAABMACAFPQAAkQIAIIEBAgAAAAGCAQEAAAABjAFAAAAAAY0BQAAAAAEBCAAAWwAgBIEBAgAAAAGCAQEAAAABjAFAAAAAAY0BQAAAAAEBCAAAXQAwAQgAAF0AMAU9AACFAgAggQECAOgBACGCAQEA5wEAIYwBQADqAQAhjQFAAOoBACECAAAATAAgCAAAYAAgBIEBAgDoAQAhggEBAOcBACGMAUAA6gEAIY0BQADqAQAhAgAAAFIAIAgAAGIAIAIAAABSACAIAABiACADAAAATAAgDwAAWwAgEAAAYAAgAQAAAEwAIAEAAABSACAFFQAAgAIAIBYAAIECACAXAACEAgAgGAAAgwIAIBkAAIICACAHfgAAywEAMH8AAGkAEIABAADLAQAwgQECALUBACGCAQEAtgEAIYwBQAC4AQAhjQFAALgBACEDAAAAUgAgAwAAaAAwFAAAaQAgAwAAAFIAIAMAAFMAMAQAAEwAIAEAAABQACABAAAAUAAgAwAAAE4AIAMAAE8AMAQAAFAAIAMAAABOACADAABPADAEAABQACADAAAATgAgAwAATwAwBAAAUAAgBTwAAP8BACCBAQIAAAABggEBAAAAAYwBQAAAAAGNAUAAAAABAQgAAHEAIASBAQIAAAABggEBAAAAAYwBQAAAAAGNAUAAAAABAQgAAHMAMAEIAABzADAFPAAA8wEAIIEBAgDoAQAhggEBAOcBACGMAUAA6gEAIY0BQADqAQAhAgAAAFAAIAgAAHYAIASBAQIA6AEAIYIBAQDnAQAhjAFAAOoBACGNAUAA6gEAIQIAAABOACAIAAB4ACACAAAATgAgCAAAeAAgAwAAAFAAIA8AAHEAIBAAAHYAIAEAAABQACABAAAATgAgBRUAAO4BACAWAADvAQAgFwAA8gEAIBgAAPEBACAZAADwAQAgB34AAMoBADB_AAB_ABCAAQAAygEAMIEBAgC1AQAhggEBALYBACGMAUAAuAEAIY0BQAC4AQAhAwAAAE4AIAMAAH4AMBQAAH8AIAMAAABOACADAABPADAEAABQACAJfgAAyQEAMH8AAIUBABCAAQAAyQEAMIEBAQAAAAGGAQEAxQEAIZkBAQAAAAGaAUAAxwEAIZsBQADHAQAhnAEBAMYBACEBAAAAggEAIAEAAACCAQAgCX4AAMkBADB_AACFAQAQgAEAAMkBADCBAQEAxQEAIYYBAQDFAQAhmQEBAMUBACGaAUAAxwEAIZsBQADHAQAhnAEBAMYBACEBnAEAAOEBACADAAAAhQEAIAMAAIYBADAEAACCAQAgAwAAAIUBACADAACGAQAwBAAAggEAIAMAAACFAQAgAwAAhgEAMAQAAIIBACAGgQEBAAAAAYYBAQAAAAGZAQEAAAABmgFAAAAAAZsBQAAAAAGcAQEAAAABAQgAAIoBACAGgQEBAAAAAYYBAQAAAAGZAQEAAAABmgFAAAAAAZsBQAAAAAGcAQEAAAABAQgAAIwBADABCAAAjAEAMAaBAQEA5wEAIYYBAQDnAQAhmQEBAOcBACGaAUAA6gEAIZsBQADqAQAhnAEBAOkBACECAAAAggEAIAgAAI8BACAGgQEBAOcBACGGAQEA5wEAIZkBAQDnAQAhmgFAAOoBACGbAUAA6gEAIZwBAQDpAQAhAgAAAIUBACAIAACRAQAgAgAAAIUBACAIAACRAQAgAwAAAIIBACAPAACKAQAgEAAAjwEAIAEAAACCAQAgAQAAAIUBACAEFQAA6wEAIBgAAO0BACAZAADsAQAgnAEAAOEBACAJfgAAyAEAMH8AAJgBABCAAQAAyAEAMIEBAQC2AQAhhgEBALYBACGZAQEAtgEAIZoBQAC4AQAhmwFAALgBACGcAQEAtwEAIQMAAACFAQAgAwAAlwEAMBQAAJgBACADAAAAhQEAIAMAAIYBADAEAACCAQAgEH4AAMMBADB_AACeAQAQgAEAAMMBADCBAQIAAAABggEBAAAAAYMBAQDFAQAhhAEBAMUBACGFAQIAxAEAIYYBAQDFAQAhhwEBAMYBACGIAQEAxgEAIYkBAQDGAQAhigEBAMYBACGLAQEAxgEAIYwBQADHAQAhjQFAAMcBACEBAAAAmwEAIAEAAACbAQAgEH4AAMMBADB_AACeAQAQgAEAAMMBADCBAQIAxAEAIYIBAQDFAQAhgwEBAMUBACGEAQEAxQEAIYUBAgDEAQAhhgEBAMUBACGHAQEAxgEAIYgBAQDGAQAhiQEBAMYBACGKAQEAxgEAIYsBAQDGAQAhjAFAAMcBACGNAUAAxwEAIQWHAQAA4QEAIIgBAADhAQAgiQEAAOEBACCKAQAA4QEAIIsBAADhAQAgAwAAAJ4BACADAACfAQAwBAAAmwEAIAMAAACeAQAgAwAAnwEAMAQAAJsBACADAAAAngEAIAMAAJ8BADAEAACbAQAgDYEBAgAAAAGCAQEAAAABgwEBAAAAAYQBAQAAAAGFAQIAAAABhgEBAAAAAYcBAQAAAAGIAQEAAAABiQEBAAAAAYoBAQAAAAGLAQEAAAABjAFAAAAAAY0BQAAAAAEBCAAAowEAIA2BAQIAAAABggEBAAAAAYMBAQAAAAGEAQEAAAABhQECAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAGKAQEAAAABiwEBAAAAAYwBQAAAAAGNAUAAAAABAQgAAKUBADABCAAApQEAMA2BAQIA6AEAIYIBAQDnAQAhgwEBAOcBACGEAQEA5wEAIYUBAgDoAQAhhgEBAOcBACGHAQEA6QEAIYgBAQDpAQAhiQEBAOkBACGKAQEA6QEAIYsBAQDpAQAhjAFAAOoBACGNAUAA6gEAIQIAAACbAQAgCAAAqAEAIA2BAQIA6AEAIYIBAQDnAQAhgwEBAOcBACGEAQEA5wEAIYUBAgDoAQAhhgEBAOcBACGHAQEA6QEAIYgBAQDpAQAhiQEBAOkBACGKAQEA6QEAIYsBAQDpAQAhjAFAAOoBACGNAUAA6gEAIQIAAACeAQAgCAAAqgEAIAIAAACeAQAgCAAAqgEAIAMAAACbAQAgDwAAowEAIBAAAKgBACABAAAAmwEAIAEAAACeAQAgChUAAOIBACAWAADjAQAgFwAA5gEAIBgAAOUBACAZAADkAQAghwEAAOEBACCIAQAA4QEAIIkBAADhAQAgigEAAOEBACCLAQAA4QEAIBB-AAC0AQAwfwAAsQEAEIABAAC0AQAwgQECALUBACGCAQEAtgEAIYMBAQC2AQAhhAEBALYBACGFAQIAtQEAIYYBAQC2AQAhhwEBALcBACGIAQEAtwEAIYkBAQC3AQAhigEBALcBACGLAQEAtwEAIYwBQAC4AQAhjQFAALgBACEDAAAAngEAIAMAALABADAUAACxAQAgAwAAAJ4BACADAACfAQAwBAAAmwEAIBB-AAC0AQAwfwAAsQEAEIABAAC0AQAwgQECALUBACGCAQEAtgEAIYMBAQC2AQAhhAEBALYBACGFAQIAtQEAIYYBAQC2AQAhhwEBALcBACGIAQEAtwEAIYkBAQC3AQAhigEBALcBACGLAQEAtwEAIYwBQAC4AQAhjQFAALgBACENFQAAugEAIBYAAMIBACAXAAC6AQAgGAAAugEAIBkAALoBACCOAQIAAAABjwECAAAABJABAgAAAASRAQIAAAABkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAMEBACEOFQAAugEAIBgAAMABACAZAADAAQAgjgEBAAAAAY8BAQAAAASQAQEAAAAEkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQC_AQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABDhUAAL0BACAYAAC-AQAgGQAAvgEAII4BAQAAAAGPAQEAAAAFkAEBAAAABZEBAQAAAAGSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAvAEAIZYBAQAAAAGXAQEAAAABmAEBAAAAAQsVAAC6AQAgGAAAuwEAIBkAALsBACCOAUAAAAABjwFAAAAABJABQAAAAASRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAALkBACELFQAAugEAIBgAALsBACAZAAC7AQAgjgFAAAAAAY8BQAAAAASQAUAAAAAEkQFAAAAAAZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAC5AQAhCI4BAgAAAAGPAQIAAAAEkAECAAAABJEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAugEAIQiOAUAAAAABjwFAAAAABJABQAAAAASRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAALsBACEOFQAAvQEAIBgAAL4BACAZAAC-AQAgjgEBAAAAAY8BAQAAAAWQAQEAAAAFkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQC8AQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABCI4BAgAAAAGPAQIAAAAFkAECAAAABZEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAvQEAIQuOAQEAAAABjwEBAAAABZABAQAAAAWRAQEAAAABkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAL4BACGWAQEAAAABlwEBAAAAAZgBAQAAAAEOFQAAugEAIBgAAMABACAZAADAAQAgjgEBAAAAAY8BAQAAAASQAQEAAAAEkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQC_AQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABC44BAQAAAAGPAQEAAAAEkAEBAAAABJEBAQAAAAGSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAwAEAIZYBAQAAAAGXAQEAAAABmAEBAAAAAQ0VAAC6AQAgFgAAwgEAIBcAALoBACAYAAC6AQAgGQAAugEAII4BAgAAAAGPAQIAAAAEkAECAAAABJEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAwQEAIQiOAQgAAAABjwEIAAAABJABCAAAAASRAQgAAAABkgEIAAAAAZMBCAAAAAGUAQgAAAABlQEIAMIBACEQfgAAwwEAMH8AAJ4BABCAAQAAwwEAMIEBAgDEAQAhggEBAMUBACGDAQEAxQEAIYQBAQDFAQAhhQECAMQBACGGAQEAxQEAIYcBAQDGAQAhiAEBAMYBACGJAQEAxgEAIYoBAQDGAQAhiwEBAMYBACGMAUAAxwEAIY0BQADHAQAhCI4BAgAAAAGPAQIAAAAEkAECAAAABJEBAgAAAAGSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAugEAIQuOAQEAAAABjwEBAAAABJABAQAAAASRAQEAAAABkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAMABACGWAQEAAAABlwEBAAAAAZgBAQAAAAELjgEBAAAAAY8BAQAAAAWQAQEAAAAFkQEBAAAAAZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQC-AQAhlgEBAAAAAZcBAQAAAAGYAQEAAAABCI4BQAAAAAGPAUAAAAAEkAFAAAAABJEBQAAAAAGSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAAuwEAIQl-AADIAQAwfwAAmAEAEIABAADIAQAwgQEBALYBACGGAQEAtgEAIZkBAQC2AQAhmgFAALgBACGbAUAAuAEAIZwBAQC3AQAhCX4AAMkBADB_AACFAQAQgAEAAMkBADCBAQEAxQEAIYYBAQDFAQAhmQEBAMUBACGaAUAAxwEAIZsBQADHAQAhnAEBAMYBACEHfgAAygEAMH8AAH8AEIABAADKAQAwgQECALUBACGCAQEAtgEAIYwBQAC4AQAhjQFAALgBACEHfgAAywEAMH8AAGkAEIABAADLAQAwgQECALUBACGCAQEAtgEAIYwBQAC4AQAhjQFAALgBACEIPQAAzQEAIH4AAMwBADB_AABSABCAAQAAzAEAMIEBAgDEAQAhggEBAMUBACGMAUAAxwEAIY0BQADHAQAhA50BAABOACCeAQAATgAgnwEAAE4AIAg8AADPAQAgfgAAzgEAMH8AAE4AEIABAADOAQAwgQECAMQBACGCAQEAxQEAIYwBQADHAQAhjQFAAMcBACEDnQEAAFIAIJ4BAABSACCfAQAAUgAgCggAANEBACB-AADQAQAwfwAASQAQgAEAANABADCBAQIAtQEAIYwBQAC4AQAhjQFAALgBACGgAQEAtgEAIaEBAQC2AQAhogFAALgBACEKFQAAugEAIBgAANIBACAZAADSAQAgjgGAAAAAAZUBgAAAAAGjAQEAAAABpAEBAAAAAaUBAQAAAAGmAYAAAAABpwGAAAAAAQeOAYAAAAABlQGAAAAAAaMBAQAAAAGkAQEAAAABpQEBAAAAAaYBgAAAAAGnAYAAAAABCggAANQBACB-AADTAQAwfwAANgAQgAEAANMBADCBAQIAxAEAIYwBQADHAQAhjQFAAMcBACGgAQEAxQEAIaEBAQDFAQAhogFAAMcBACEHjgGAAAAAAZUBgAAAAAGjAQEAAAABpAEBAAAAAaUBAQAAAAGmAYAAAAABpwGAAAAAAQp-AADVAQAwfwAAMAAQgAEAANUBADCBAQIAtQEAIYwBQAC4AQAhjQFAALgBACGoAQEAtgEAIakBAQC2AQAhqgEBALcBACGrAUAAuAEAIQp-AADWAQAwfwAAHQAQgAEAANYBADCBAQIAxAEAIYwBQADHAQAhjQFAAMcBACGoAQEAxQEAIakBAQDFAQAhqgEBAMYBACGrAUAAxwEAIQx-AADXAQAwfwAAFwAQgAEAANcBADCBAQIAtQEAIYIBAQC3AQAhiAEBALcBACGMAUAAuAEAIY0BQAC4AQAhogFAANkBACGsAQEAtgEAIa0BAQC2AQAhrgEgANgBACEFFQAAugEAIBgAAN0BACAZAADdAQAgjgEgAAAAAZUBIADcAQAhCxUAAL0BACAYAADbAQAgGQAA2wEAII4BQAAAAAGPAUAAAAAFkAFAAAAABZEBQAAAAAGSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAA2gEAIQsVAAC9AQAgGAAA2wEAIBkAANsBACCOAUAAAAABjwFAAAAABZABQAAAAAWRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAANoBACEIjgFAAAAAAY8BQAAAAAWQAUAAAAAFkQFAAAAAAZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQADbAQAhBRUAALoBACAYAADdAQAgGQAA3QEAII4BIAAAAAGVASAA3AEAIQKOASAAAAABlQEgAN0BACEMfgAA3gEAMH8AAAQAEIABAADeAQAwgQECAMQBACGCAQEAxgEAIYgBAQDGAQAhjAFAAMcBACGNAUAAxwEAIaIBQADgAQAhrAEBAMUBACGtAQEAxQEAIa4BIADfAQAhAo4BIAAAAAGVASAA3QEAIQiOAUAAAAABjwFAAAAABZABQAAAAAWRAUAAAAABkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAANsBACEAAAAAAAABsQEBAAAAAQWxAQIAAAABtwECAAAAAbgBAgAAAAG5AQIAAAABugECAAAAAQGxAQEAAAABAbEBQAAAAAEAAAAAAAAAAAoPAAD0AQAwEAAA-AEAMK8BAAD1AQAwsAEAAPYBADCxAQAA9wEAMLIBAAD3AQAwswEAAPcBADC0AQAA9wEAMLUBAAD5AQAwtgEAAPoBADAEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQIAAABMACAPAAD-AQAgAwAAAEwAIA8AAP4BACAQAAD9AQAgCD0AAM0BACB-AADMAQAwfwAAUgAQgAEAAMwBADCBAQIAAAABggEBAAAAAYwBQADHAQAhjQFAAMcBACECAAAATAAgCAAA_QEAIAIAAAD7AQAgCAAA_AEAIAd-AAD6AQAwfwAA-wEAEIABAAD6AQAwgQECAMQBACGCAQEAxQEAIYwBQADHAQAhjQFAAMcBACEHfgAA-gEAMH8AAPsBABCAAQAA-gEAMIEBAgDEAQAhggEBAMUBACGMAUAAxwEAIY0BQADHAQAhBIEBAgDoAQAhggEBAOcBACGMAUAA6gEAIY0BQADqAQAhBIEBAgDoAQAhggEBAOcBACGMAUAA6gEAIY0BQADqAQAhBIEBAgAAAAGCAQEAAAABjAFAAAAAAY0BQAAAAAEDDwAA9AEAMK8BAAD1AQAwtAEAAPcBADAAAAAAAAoPAACGAgAwEAAAigIAMK8BAACHAgAwsAEAAIgCADCxAQAAiQIAMLIBAACJAgAwswEAAIkCADC0AQAAiQIAMLUBAACLAgAwtgEAAIwCADAEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQIAAABQACAPAACQAgAgAwAAAFAAIA8AAJACACAQAACPAgAgCDwAAM8BACB-AADOAQAwfwAATgAQgAEAAM4BADCBAQIAAAABggEBAAAAAYwBQADHAQAhjQFAAMcBACECAAAAUAAgCAAAjwIAIAIAAACNAgAgCAAAjgIAIAd-AACMAgAwfwAAjQIAEIABAACMAgAwgQECAMQBACGCAQEAxQEAIYwBQADHAQAhjQFAAMcBACEHfgAAjAIAMH8AAI0CABCAAQAAjAIAMIEBAgDEAQAhggEBAMUBACGMAUAAxwEAIY0BQADHAQAhBIEBAgDoAQAhggEBAOcBACGMAUAA6gEAIY0BQADqAQAhBIEBAgDoAQAhggEBAOcBACGMAUAA6gEAIY0BQADqAQAhBIEBAgAAAAGCAQEAAAABjAFAAAAAAY0BQAAAAAEDDwAAhgIAMK8BAACHAgAwtAEAAIkCADAAAAAAAAAAAAAAAAAAAAAAAAGxASAAAAABAbEBQAAAAAEAAAAABRUABhYABxcACBgACRkACgAAAAAABRUABhYABxcACBgACRkACgAAAAUVABAWABEXABIYABMZABQAAAAAAAUVABAWABEXABIYABMZABQAAAAFFQAaFgAbFwAcGAAdGQAeAAAAAAAFFQAaFgAbFwAcGAAdGQAeAhUAIz1RIQIVACI8VCABPFUAAT1WAAAABRUAJxYAKBcAKRgAKhkAKwAAAAAABRUAJxYAKBcAKRgAKhkAKwAABRUAMBYAMRcAMhgAMxkANAAAAAAABRUAMBYAMRcAMhgAMxkANAAAAAMVADoYADsZADwAAAADFQA6GAA7GQA8AAAABRUAQhYAQxcARBgARRkARgAAAAAABRUAQhYAQxcARBgARRkARgECAQIDAQUGAQYHAQcIAQkKAQoMAgsNAwwPAQ0RAg4SBBETARIUARMVAhoYBRsZCxwbDB0cDB4fDB8gDCAhDCEjDCIlAiMmDSQoDCUqAiYrDicsDCgtDCkuAioxDysyFSw0Fi01Fi44Fi85FjA6FjE8FjI-AjM_FzRBFjVDAjZEGDdFFjhGFjlHAjpKGTtLHz5NID9XIEBYIEFZIEJaIENcIEReAkVfJEZhIEdjAkhkJUllIEpmIEtnAkxqJk1rLE5sIU9tIVBuIVFvIVJwIVNyIVR0AlV1LVZ3IVd5Alh6Lll7IVp8IVt9AlyAAS9dgQE1XoMBNl-EATZghwE2YYgBNmKJATZjiwE2ZI0BAmWOATdmkAE2Z5IBAmiTAThplAE2apUBNmuWAQJsmQE5bZoBPW6cAT5vnQE-cKABPnGhAT5yogE-c6QBPnSmAQJ1pwE_dqkBPnerAQJ4rAFAea0BPnquAT57rwECfLIBQX2zAUc"
69
69
  };
70
70
  async function decodeBase64AsWasm(wasmBase64) {
71
71
  const { Buffer } = await Promise.resolve().then(() => __importStar(require('node:buffer')));