@super-protocol/sdk-js 2.1.4-beta.8 → 2.1.5

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 (147) hide show
  1. package/dist/cjs/TIIGenerator.js +193 -210
  2. package/dist/cjs/analytics/Analytics.d.ts +2 -2
  3. package/dist/cjs/analytics/Analytics.js +15 -22
  4. package/dist/cjs/analytics/AnalyticsError.js +2 -1
  5. package/dist/cjs/analytics/eventProviders/BrowserEventProvider.js +14 -8
  6. package/dist/cjs/analytics/eventProviders/EventProvider.js +13 -2
  7. package/dist/cjs/analytics/eventProviders/NodeEventProvider.js +9 -1
  8. package/dist/cjs/analytics/transports/AxiosTransport.js +24 -36
  9. package/dist/cjs/analytics/transports/FetchTransport.js +23 -34
  10. package/dist/cjs/analytics/types.d.ts +1 -1
  11. package/dist/cjs/connectors/BaseConnector.js +5 -17
  12. package/dist/cjs/connectors/BlockchainConnector.js +164 -181
  13. package/dist/cjs/connectors/BlockchainEventsListener.js +42 -53
  14. package/dist/cjs/contracts/abi.d.ts +33 -107
  15. package/dist/cjs/contracts/abi.js +34 -131
  16. package/dist/cjs/crypto/Crypto.js +54 -73
  17. package/dist/cjs/crypto/nodejs/AES.js +40 -55
  18. package/dist/cjs/crypto/nodejs/ARIA.js +39 -54
  19. package/dist/cjs/crypto/nodejs/ECIES.js +44 -57
  20. package/dist/cjs/crypto/nodejs/NativeCrypto.js +29 -42
  21. package/dist/cjs/crypto/nodejs/RSA-Hybrid.js +26 -27
  22. package/dist/cjs/index.d.ts +1 -0
  23. package/dist/cjs/index.js +2 -1
  24. package/dist/cjs/models/EtlModel.js +34 -46
  25. package/dist/cjs/models/Offer.js +110 -156
  26. package/dist/cjs/models/Order.js +166 -200
  27. package/dist/cjs/models/Provider.js +47 -65
  28. package/dist/cjs/models/TCB.js +32 -55
  29. package/dist/cjs/models/TeeOffer.js +188 -250
  30. package/dist/cjs/polyfills.js +1 -1
  31. package/dist/cjs/proto/Compression.js +4 -5
  32. package/dist/cjs/proto/TRI.js +14 -17
  33. package/dist/cjs/proto/TeeProperties.js +19 -23
  34. package/dist/cjs/providers/storage/ChunksDownloadDecorator.js +38 -70
  35. package/dist/cjs/providers/storage/S3StorageProvider.js +118 -166
  36. package/dist/cjs/providers/storage/StorageAdapter.js +155 -177
  37. package/dist/cjs/providers/storage/StorageContentWriter.js +103 -118
  38. package/dist/cjs/providers/storage/StorageKeyValueAdapter.js +84 -117
  39. package/dist/cjs/providers/storage/StorageMetadataReader.js +38 -49
  40. package/dist/cjs/providers/storage/StorjAdapter.js +28 -48
  41. package/dist/cjs/providers/storage/StorjStorageProvider.d.ts +0 -1
  42. package/dist/cjs/providers/storage/StorjStorageProvider.js +101 -163
  43. package/dist/cjs/providers/storage/getStorageProvider.js +1 -1
  44. package/dist/cjs/staticModels/ActiveOffers.js +14 -29
  45. package/dist/cjs/staticModels/ActiveOrders.js +20 -35
  46. package/dist/cjs/staticModels/Consensus.js +71 -93
  47. package/dist/cjs/staticModels/Deposits.js +20 -39
  48. package/dist/cjs/staticModels/Marks.js +7 -20
  49. package/dist/cjs/staticModels/ModelPackager.js +26 -39
  50. package/dist/cjs/staticModels/Offers.js +33 -51
  51. package/dist/cjs/staticModels/Orders.js +108 -106
  52. package/dist/cjs/staticModels/ProviderRegistry.js +23 -41
  53. package/dist/cjs/staticModels/StaticModel.js +22 -33
  54. package/dist/cjs/staticModels/Superpro.js +2 -1
  55. package/dist/cjs/staticModels/SuperproToken.js +27 -40
  56. package/dist/cjs/staticModels/TeeOffers.js +64 -94
  57. package/dist/cjs/tee/QuoteParser.js +20 -20
  58. package/dist/cjs/tee/QuoteValidator.js +176 -201
  59. package/dist/cjs/tee/helpers.js +2 -1
  60. package/dist/cjs/tee/statuses.js +4 -4
  61. package/dist/cjs/tee/types.d.ts +5 -0
  62. package/dist/cjs/types/Consensus.js +2 -2
  63. package/dist/cjs/types/Marks.js +2 -2
  64. package/dist/cjs/types/Offer.js +3 -3
  65. package/dist/cjs/types/Order.d.ts +2 -14
  66. package/dist/cjs/types/Order.js +3 -46
  67. package/dist/cjs/types/SlotUsage.js +2 -2
  68. package/dist/cjs/types/Superpro.js +2 -2
  69. package/dist/cjs/utils/Monitoring.js +6 -5
  70. package/dist/cjs/utils/NonceTracker.js +31 -43
  71. package/dist/cjs/utils/PubSub.js +2 -4
  72. package/dist/cjs/utils/TxManager.js +110 -120
  73. package/dist/cjs/utils/compressors/GzipCompressor.js +5 -16
  74. package/dist/cjs/utils/compressors/UncompressedCompressor.js +2 -2
  75. package/dist/cjs/utils/helper.js +26 -23
  76. package/dist/cjs/utils/helpers/getStreamChunks.js +29 -68
  77. package/dist/cjs/utils/helpers/tryWithInterval.js +7 -16
  78. package/dist/cjs/utils/resourceLoaders/BaseResourceLoader.js +7 -44
  79. package/dist/cjs/utils/resourceLoaders/StorageProviderLoader.js +18 -27
  80. package/dist/cjs/utils/resourceLoaders/UrlResourceLoader.js +8 -21
  81. package/dist/cjs/utils/resourceLoaders/getResourceLoader.js +1 -1
  82. package/dist/mjs/TIIGenerator.js +1 -1
  83. package/dist/mjs/analytics/Analytics.d.ts +2 -2
  84. package/dist/mjs/analytics/Analytics.js +1 -1
  85. package/dist/mjs/analytics/eventProviders/NodeEventProvider.js +1 -1
  86. package/dist/mjs/analytics/transports/AxiosTransport.js +1 -1
  87. package/dist/mjs/analytics/transports/FetchTransport.js +1 -1
  88. package/dist/mjs/analytics/types.d.ts +1 -1
  89. package/dist/mjs/connectors/BaseConnector.js +1 -1
  90. package/dist/mjs/connectors/BlockchainConnector.js +1 -1
  91. package/dist/mjs/connectors/BlockchainEventsListener.js +1 -1
  92. package/dist/mjs/contracts/abi.d.ts +33 -107
  93. package/dist/mjs/contracts/abi.js +34 -131
  94. package/dist/mjs/crypto/Crypto.js +1 -1
  95. package/dist/mjs/crypto/nodejs/AES.js +1 -1
  96. package/dist/mjs/crypto/nodejs/ARIA.js +1 -1
  97. package/dist/mjs/crypto/nodejs/ECIES.js +1 -1
  98. package/dist/mjs/crypto/nodejs/NativeCrypto.js +1 -1
  99. package/dist/mjs/index.d.ts +1 -0
  100. package/dist/mjs/index.js +2 -1
  101. package/dist/mjs/models/EtlModel.js +1 -1
  102. package/dist/mjs/models/Offer.js +1 -1
  103. package/dist/mjs/models/Order.js +38 -20
  104. package/dist/mjs/models/Provider.js +1 -1
  105. package/dist/mjs/models/TCB.js +1 -1
  106. package/dist/mjs/models/TeeOffer.js +1 -1
  107. package/dist/mjs/polyfills.js +1 -1
  108. package/dist/mjs/proto/Compression.js +1 -1
  109. package/dist/mjs/proto/TRI.js +1 -1
  110. package/dist/mjs/proto/TeeProperties.js +1 -1
  111. package/dist/mjs/providers/storage/ChunksDownloadDecorator.js +4 -4
  112. package/dist/mjs/providers/storage/S3StorageProvider.js +1 -1
  113. package/dist/mjs/providers/storage/StorageAdapter.js +1 -1
  114. package/dist/mjs/providers/storage/StorageContentWriter.js +1 -1
  115. package/dist/mjs/providers/storage/StorageKeyValueAdapter.js +1 -1
  116. package/dist/mjs/providers/storage/StorageMetadataReader.js +1 -1
  117. package/dist/mjs/providers/storage/StorjAdapter.js +1 -1
  118. package/dist/mjs/providers/storage/StorjStorageProvider.d.ts +0 -1
  119. package/dist/mjs/providers/storage/StorjStorageProvider.js +1 -3
  120. package/dist/mjs/providers/storage/getStorageProvider.js +1 -1
  121. package/dist/mjs/staticModels/ActiveOrders.js +1 -1
  122. package/dist/mjs/staticModels/Consensus.js +1 -1
  123. package/dist/mjs/staticModels/Deposits.js +1 -1
  124. package/dist/mjs/staticModels/ModelPackager.js +1 -1
  125. package/dist/mjs/staticModels/Offers.js +1 -1
  126. package/dist/mjs/staticModels/Orders.js +39 -12
  127. package/dist/mjs/staticModels/StaticModel.js +1 -1
  128. package/dist/mjs/staticModels/SuperproToken.js +1 -1
  129. package/dist/mjs/staticModels/TeeOffers.js +1 -1
  130. package/dist/mjs/tee/QuoteParser.js +1 -1
  131. package/dist/mjs/tee/QuoteValidator.js +1 -1
  132. package/dist/mjs/tee/helpers.js +1 -1
  133. package/dist/mjs/tee/types.d.ts +5 -0
  134. package/dist/mjs/types/Order.d.ts +2 -14
  135. package/dist/mjs/types/Order.js +1 -40
  136. package/dist/mjs/utils/Monitoring.js +1 -1
  137. package/dist/mjs/utils/NonceTracker.js +1 -1
  138. package/dist/mjs/utils/PubSub.js +1 -1
  139. package/dist/mjs/utils/TxManager.js +1 -1
  140. package/dist/mjs/utils/helper.js +1 -1
  141. package/dist/mjs/utils/helpers/getStreamChunks.js +1 -1
  142. package/dist/mjs/utils/helpers/tryWithInterval.js +1 -1
  143. package/dist/mjs/utils/resourceLoaders/BaseResourceLoader.js +1 -1
  144. package/dist/mjs/utils/resourceLoaders/StorageProviderLoader.js +1 -1
  145. package/dist/mjs/utils/resourceLoaders/UrlResourceLoader.js +1 -1
  146. package/dist/mjs/utils/resourceLoaders/getResourceLoader.js +1 -1
  147. package/package.json +6 -16
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
@@ -19,13 +10,21 @@ var ContentWriterType;
19
10
  (function (ContentWriterType) {
20
11
  ContentWriterType["NEEDS_UPLOAD"] = "NEEDS_UPLOAD";
21
12
  ContentWriterType["NEEDS_DELETE"] = "NEEDS_DELETE";
22
- })(ContentWriterType = exports.ContentWriterType || (exports.ContentWriterType = {}));
13
+ })(ContentWriterType || (exports.ContentWriterType = ContentWriterType = {}));
23
14
  const DEFAULT_WRITE_CONTENT_CONCURRENCY = 16;
24
15
  const DEFAULT_CACHE_EXPIRATION_TS = 5 * 60 * 1000;
25
16
  class StorageContentWriter {
17
+ timeout = null;
18
+ INTERVAL;
19
+ storageKeyValueAdapter;
20
+ logger;
21
+ instanceId;
22
+ cacheExpirationTs;
23
+ objectDeletedFlag;
24
+ queueWriteContent;
25
+ performance;
26
+ storageWrites = new Map();
26
27
  constructor(config) {
27
- this.timeout = null;
28
- this.storageWrites = new Map();
29
28
  const { writeContentConcurrency, interval, storageKeyValueAdapter, instanceId, objectDeletedFlag, cacheExpirationTs, performance, showLogs = true, } = config || {};
30
29
  this.logger = showLogs ? logger_js_1.default.child({ class: StorageContentWriter.name }) : null;
31
30
  this.performance = performance;
@@ -38,118 +37,107 @@ class StorageContentWriter {
38
37
  concurrency: writeContentConcurrency || DEFAULT_WRITE_CONTENT_CONCURRENCY,
39
38
  });
40
39
  }
41
- actualizeCacheDelete(key, encryptionKey) {
42
- return __awaiter(this, void 0, void 0, function* () {
43
- const objects = yield this.storageKeyValueAdapter.listFiles(key);
44
- const objectsToDelete = objects.filter((object) => !object.name.endsWith(this.objectDeletedFlag));
45
- yield Promise.all(objectsToDelete.map((object) => this.storageKeyValueAdapter.delete(object.name)));
46
- if (objectsToDelete.length === objects.length) {
47
- yield this.storageKeyValueAdapter.set(`${key}/${this.objectDeletedFlag}`, null, encryptionKey);
48
- }
49
- });
40
+ async actualizeCacheDelete(key, encryptionKey) {
41
+ const objects = await this.storageKeyValueAdapter.listFiles(key);
42
+ const objectsToDelete = objects.filter((object) => !object.name.endsWith(this.objectDeletedFlag));
43
+ await Promise.all(objectsToDelete.map((object) => this.storageKeyValueAdapter.delete(object.name)));
44
+ if (objectsToDelete.length === objects.length) {
45
+ await this.storageKeyValueAdapter.set(`${key}/${this.objectDeletedFlag}`, null, encryptionKey);
46
+ }
50
47
  }
51
- actualizeCacheUpload(key, encryptionKey, cache) {
52
- var _a, _b, _c;
53
- return __awaiter(this, void 0, void 0, function* () {
54
- const instances = cache.get(key);
55
- const instance = instances === null || instances === void 0 ? void 0 : instances.get(this.instanceId);
56
- if (!instances || !instance) {
57
- (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error({
58
- key,
59
- instancesSize: instances === null || instances === void 0 ? void 0 : instances.size,
60
- value: instance,
61
- }, 'Attempted to upload non-existing value');
62
- return;
63
- }
64
- if (instance.value) {
65
- const startUpload = (_b = this.performance) === null || _b === void 0 ? void 0 : _b.now();
66
- yield this.storageKeyValueAdapter.set(`${key}/${this.instanceId}`, instance.value, encryptionKey);
67
- if (this.performance && startUpload !== undefined) {
68
- const finishUpload = this.performance.now();
69
- (_c = this.logger) === null || _c === void 0 ? void 0 : _c.info(`Uploading took ${(finishUpload - startUpload).toFixed(1)} ms`);
70
- }
48
+ async actualizeCacheUpload(key, encryptionKey, cache) {
49
+ const instances = cache.get(key);
50
+ const instance = instances?.get(this.instanceId);
51
+ if (!instances || !instance) {
52
+ this.logger?.error({
53
+ key,
54
+ instancesSize: instances?.size,
55
+ value: instance,
56
+ }, 'Attempted to upload non-existing value');
57
+ return;
58
+ }
59
+ if (instance.value) {
60
+ const startUpload = this.performance?.now();
61
+ await this.storageKeyValueAdapter.set(`${key}/${this.instanceId}`, instance.value, encryptionKey);
62
+ if (this.performance && startUpload !== undefined) {
63
+ const finishUpload = this.performance.now();
64
+ this.logger?.info(`Uploading took ${(finishUpload - startUpload).toFixed(1)} ms`);
71
65
  }
72
- yield this.deleteOutdatedInstances(key, instances);
73
- });
66
+ }
67
+ await this.deleteOutdatedInstances(key, instances);
74
68
  }
75
- actualizeCache(cache) {
76
- var _a;
77
- return __awaiter(this, void 0, void 0, function* () {
78
- const logger = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.child({ method: this.actualizeCache.name });
79
- if (this.storageWrites.size) {
80
- Array.from(this.storageWrites.entries()).forEach(([key, { type, index, encryptionKey }]) => {
81
- this.queueWriteContent.add(() => __awaiter(this, void 0, void 0, function* () {
82
- var _a;
83
- try {
84
- switch (type) {
85
- case ContentWriterType.NEEDS_DELETE:
86
- yield this.actualizeCacheDelete(key, encryptionKey);
87
- break;
88
- case ContentWriterType.NEEDS_UPLOAD:
89
- yield this.actualizeCacheUpload(key, encryptionKey, cache);
90
- break;
91
- default:
92
- break;
93
- }
94
- // delete only if the current index is up to date
95
- if (index === ((_a = this.storageWrites.get(key)) === null || _a === void 0 ? void 0 : _a.index)) {
96
- this.storageWrites.delete(key);
97
- }
69
+ async actualizeCache(cache) {
70
+ const logger = this.logger?.child({ method: this.actualizeCache.name });
71
+ if (this.storageWrites.size) {
72
+ Array.from(this.storageWrites.entries()).forEach(([key, { type, index, encryptionKey }]) => {
73
+ this.queueWriteContent.add(async () => {
74
+ try {
75
+ switch (type) {
76
+ case ContentWriterType.NEEDS_DELETE:
77
+ await this.actualizeCacheDelete(key, encryptionKey);
78
+ break;
79
+ case ContentWriterType.NEEDS_UPLOAD:
80
+ await this.actualizeCacheUpload(key, encryptionKey, cache);
81
+ break;
82
+ default:
83
+ break;
98
84
  }
99
- catch (err) {
100
- logger === null || logger === void 0 ? void 0 : logger.error({
101
- err,
102
- size: this.storageWrites.size,
103
- }, `Error storage writing ${key}`);
85
+ // delete only if the current index is up to date
86
+ if (index === this.storageWrites.get(key)?.index) {
87
+ this.storageWrites.delete(key);
104
88
  }
105
- }));
89
+ }
90
+ catch (err) {
91
+ logger?.error({
92
+ err,
93
+ size: this.storageWrites.size,
94
+ }, `Error storage writing ${key}`);
95
+ }
106
96
  });
107
- yield this.queueWriteContent.onIdle();
108
- logger === null || logger === void 0 ? void 0 : logger.info({ size: this.storageWrites.size }, 'Success storage writing');
109
- }
110
- });
111
- }
112
- deleteOutdatedInstances(key, instances) {
113
- return __awaiter(this, void 0, void 0, function* () {
114
- const expiredTs = Date.now() - this.cacheExpirationTs;
115
- const instancesToDelete = [];
116
- instances === null || instances === void 0 ? void 0 : instances.forEach((instance, instanceId) => {
117
- const isOutdated = instance.modifiedTs < expiredTs;
118
- const isNotNull = Boolean(instance.value);
119
- if (instanceId !== this.instanceId && isNotNull && isOutdated) {
120
- instancesToDelete.push([instanceId, instance]);
121
- }
122
97
  });
123
- // For safety, always preserve one additional copy in storage
124
- if (instancesToDelete.length <= 1) {
125
- return;
98
+ await this.queueWriteContent.onIdle();
99
+ logger?.info({ size: this.storageWrites.size }, 'Success storage writing');
100
+ }
101
+ }
102
+ async deleteOutdatedInstances(key, instances) {
103
+ const expiredTs = Date.now() - this.cacheExpirationTs;
104
+ const instancesToDelete = [];
105
+ instances?.forEach((instance, instanceId) => {
106
+ const isOutdated = instance.modifiedTs < expiredTs;
107
+ const isNotNull = Boolean(instance.value);
108
+ if (instanceId !== this.instanceId && isNotNull && isOutdated) {
109
+ instancesToDelete.push([instanceId, instance]);
126
110
  }
127
- // Finding the most up-to-date instance to preserve
128
- instancesToDelete
129
- .sort((a, b) => {
130
- const diff = a[1].modifiedTs - b[1].modifiedTs;
131
- if (diff === 0) {
132
- return a[0] >= b[0] ? 1 : -1;
133
- }
134
- return diff;
135
- })
136
- .pop();
137
- yield Promise.allSettled(instancesToDelete.map(([instanceId]) => this.storageKeyValueAdapter
138
- .delete(`${key}/${instanceId}`)
139
- .then(() => {
140
- instances.delete(instanceId);
141
- })
142
- .catch((err) => { var _a; return (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error({ err }, 'Error deleting outdated instance'); })));
143
111
  });
112
+ // For safety, always preserve one additional copy in storage
113
+ if (instancesToDelete.length <= 1) {
114
+ return;
115
+ }
116
+ // Finding the most up-to-date instance to preserve
117
+ instancesToDelete
118
+ .sort((a, b) => {
119
+ const diff = a[1].modifiedTs - b[1].modifiedTs;
120
+ if (diff === 0) {
121
+ return a[0] >= b[0] ? 1 : -1;
122
+ }
123
+ return diff;
124
+ })
125
+ .pop();
126
+ await Promise.allSettled(instancesToDelete.map(([instanceId]) => this.storageKeyValueAdapter
127
+ .delete(`${key}/${instanceId}`)
128
+ .then(() => {
129
+ instances.delete(instanceId);
130
+ })
131
+ .catch((err) => this.logger?.error({ err }, 'Error deleting outdated instance'))));
144
132
  }
145
133
  startActualizeCacheTimer(cache) {
146
134
  if (this.INTERVAL) {
147
135
  if (this.timeout)
148
136
  clearTimeout(this.timeout);
149
- this.timeout = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
150
- yield this.actualizeCache(cache);
137
+ this.timeout = setTimeout(async () => {
138
+ await this.actualizeCache(cache);
151
139
  this.startActualizeCacheTimer(cache);
152
- }), this.INTERVAL);
140
+ }, this.INTERVAL);
153
141
  }
154
142
  }
155
143
  stop() {
@@ -161,23 +149,20 @@ class StorageContentWriter {
161
149
  const oldValue = this.storageWrites.get(key);
162
150
  this.storageWrites.set(key, {
163
151
  type,
164
- index: (oldValue === null || oldValue === void 0 ? void 0 : oldValue.index) ? oldValue.index + 1 : 1,
152
+ index: oldValue?.index ? oldValue.index + 1 : 1,
165
153
  encryptionKey,
166
154
  });
167
155
  }
168
156
  get(key) {
169
- var _a;
170
- return ((_a = this.storageWrites.get(key)) === null || _a === void 0 ? void 0 : _a.type) || null;
157
+ return this.storageWrites.get(key)?.type || null;
171
158
  }
172
159
  clear() {
173
160
  this.storageWrites.clear();
174
161
  }
175
- shutdown(cache) {
176
- return __awaiter(this, void 0, void 0, function* () {
177
- this.stop();
178
- yield this.actualizeCache(cache);
179
- });
162
+ async shutdown(cache) {
163
+ this.stop();
164
+ await this.actualizeCache(cache);
180
165
  }
181
166
  }
182
167
  exports.default = StorageContentWriter;
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZUNvbnRlbnRXcml0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3N0b3JhZ2UvU3RvcmFnZUNvbnRlbnRXcml0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQ0Esc0RBQTRCO0FBQzVCLGdFQUFpRDtBQWVqRCxJQUFZLGlCQUdYO0FBSEQsV0FBWSxpQkFBaUI7SUFDM0Isa0RBQTZCLENBQUE7SUFDN0Isa0RBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQUhXLGlCQUFpQixHQUFqQix5QkFBaUIsS0FBakIseUJBQWlCLFFBRzVCO0FBRUQsTUFBTSxpQ0FBaUMsR0FBRyxFQUFFLENBQUM7QUFDN0MsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQVFsRCxNQUFxQixvQkFBb0I7SUFZdkMsWUFBWSxNQUFxQztRQVh6QyxZQUFPLEdBQXlDLElBQUksQ0FBQztRQVM3QyxrQkFBYSxHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBR3BFLE1BQU0sRUFDSix1QkFBdUIsRUFDdkIsUUFBUSxFQUNSLHNCQUFzQixFQUN0QixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsUUFBUSxHQUFHLElBQUksR0FDaEIsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkYsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixJQUFJLDJCQUEyQixDQUFDO1FBQzFFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFFM0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksaUJBQUssQ0FBQztZQUNqQyxXQUFXLEVBQUUsdUJBQXVCLElBQUksaUNBQWlDO1NBQzFFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFYSxvQkFBb0IsQ0FBQyxHQUFNLEVBQUUsYUFBcUI7O1lBQzlELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUNwQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FDMUQsQ0FBQztZQUVGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUNqRixDQUFDO1lBRUYsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQzdDLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FDbkMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQ2xDLElBQUksRUFDSixhQUFhLENBQ2QsQ0FBQzthQUNIO1FBQ0gsQ0FBQztLQUFBO0lBRWEsb0JBQW9CLENBQ2hDLEdBQU0sRUFDTixhQUFxQixFQUNyQixLQUErQzs7O1lBRS9DLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsTUFBTSxRQUFRLEdBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDM0IsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxLQUFLLENBQ2hCO29CQUNFLEdBQUc7b0JBQ0gsYUFBYSxFQUFFLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxJQUFJO29CQUM5QixLQUFLLEVBQUUsUUFBUTtpQkFDaEIsRUFDRCx3Q0FBd0MsQ0FDekMsQ0FBQztnQkFFRixPQUFPO2FBQ1I7WUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xCLE1BQU0sV0FBVyxHQUF1QixNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoRSxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQ25DLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFDM0IsUUFBUSxDQUFDLEtBQUssRUFDZCxhQUFhLENBQ2QsQ0FBQztnQkFDRixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtvQkFDakQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDNUMsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ25GO2FBQ0Y7WUFDRCxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7O0tBQ3BEO0lBRWEsY0FBYyxDQUFDLEtBQStDOzs7WUFDMUUsTUFBTSxNQUFNLEdBQUcsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXhFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7Z0JBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3pGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBUyxFQUFFOzt3QkFDcEMsSUFBSTs0QkFDRixRQUFRLElBQUksRUFBRTtnQ0FDWixLQUFLLGlCQUFpQixDQUFDLFlBQVk7b0NBQ2pDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztvQ0FDcEQsTUFBTTtnQ0FDUixLQUFLLGlCQUFpQixDQUFDLFlBQVk7b0NBQ2pDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7b0NBQzNELE1BQU07Z0NBQ1I7b0NBQ0UsTUFBTTs2QkFDVDs0QkFDRCxpREFBaUQ7NEJBQ2pELElBQUksS0FBSyxNQUFLLE1BQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLDBDQUFFLEtBQUssQ0FBQSxFQUFFO2dDQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzs2QkFDaEM7eUJBQ0Y7d0JBQUMsT0FBTyxHQUFHLEVBQUU7NEJBQ1osTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssQ0FDWDtnQ0FDRSxHQUFHO2dDQUNILElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUk7NkJBQzlCLEVBQ0QseUJBQXlCLEdBQUcsRUFBRSxDQUMvQixDQUFDO3lCQUNIO29CQUNILENBQUMsQ0FBQSxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO2FBQzVFOztLQUNGO0lBRWEsdUJBQXVCLENBQ25DLEdBQVcsRUFDWCxTQUFzQzs7WUFFdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUV0RCxNQUFNLGlCQUFpQixHQUErQixFQUFFLENBQUM7WUFFekQsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRTtnQkFDMUMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7Z0JBQ25ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTFDLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxJQUFJLFVBQVUsRUFBRTtvQkFDN0QsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUJBQ2hEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCw2REFBNkQ7WUFDN0QsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUNqQyxPQUFPO2FBQ1I7WUFFRCxtREFBbUQ7WUFDbkQsaUJBQWlCO2lCQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDYixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQy9DLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtvQkFDZCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlCO2dCQUVELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDO2lCQUNELEdBQUcsRUFBRSxDQUFDO1lBRVQsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUN0QixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FDckMsSUFBSSxDQUFDLHNCQUFzQjtpQkFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2lCQUM5QixJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNULFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQUMsT0FBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLGtDQUFrQyxDQUFDLENBQUEsRUFBQSxDQUFDLENBQ25GLENBQ0YsQ0FBQztRQUNKLENBQUM7S0FBQTtJQUVNLHdCQUF3QixDQUFDLEtBQStDO1FBQzdFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPO2dCQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBUyxFQUFFO2dCQUNuQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxHQUFHLENBQUMsR0FBTSxFQUFFLElBQXVCLEVBQUUsYUFBcUI7UUFDL0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQzFCLElBQUk7WUFDSixLQUFLLEVBQUUsQ0FBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFNOztRQUNmLE9BQU8sQ0FBQSxNQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQywwQ0FBRSxJQUFJLEtBQUksSUFBSSxDQUFDO0lBQ25ELENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVksUUFBUSxDQUFDLEtBQStDOztZQUNuRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztLQUFBO0NBQ0Y7QUFqTkQsdUNBaU5DIn0=
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZUNvbnRlbnRXcml0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3N0b3JhZ2UvU3RvcmFnZUNvbnRlbnRXcml0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0Esc0RBQTRCO0FBQzVCLGdFQUFpRDtBQWVqRCxJQUFZLGlCQUdYO0FBSEQsV0FBWSxpQkFBaUI7SUFDM0Isa0RBQTZCLENBQUE7SUFDN0Isa0RBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQUhXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBRzVCO0FBRUQsTUFBTSxpQ0FBaUMsR0FBRyxFQUFFLENBQUM7QUFDN0MsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQVFsRCxNQUFxQixvQkFBb0I7SUFDL0IsT0FBTyxHQUF5QyxJQUFJLENBQUM7SUFDNUMsUUFBUSxDQUFTO0lBQ2pCLHNCQUFzQixDQUE0QjtJQUNsRCxNQUFNLENBQWlCO0lBQ3ZCLFVBQVUsQ0FBUztJQUNuQixpQkFBaUIsQ0FBUztJQUMxQixpQkFBaUIsQ0FBUztJQUMxQixpQkFBaUIsQ0FBUTtJQUN6QixXQUFXLENBQWU7SUFDM0IsYUFBYSxHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXRFLFlBQVksTUFBcUM7UUFDL0MsTUFBTSxFQUNKLHVCQUF1QixFQUN2QixRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxRQUFRLEdBQUcsSUFBSSxHQUNoQixHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLG1CQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuRixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLElBQUksMkJBQTJCLENBQUM7UUFDMUUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO1FBQ3JELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUUzQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxpQkFBSyxDQUFDO1lBQ2pDLFdBQVcsRUFBRSx1QkFBdUIsSUFBSSxpQ0FBaUM7U0FDMUUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxHQUFNLEVBQUUsYUFBcUI7UUFDOUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQ3BDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUMxRCxDQUFDO1FBRUYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ2pGLENBQUM7UUFFRixJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlDLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FDbkMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQ2xDLElBQUksRUFDSixhQUFhLENBQ2QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUNoQyxHQUFNLEVBQ04sYUFBcUIsRUFDckIsS0FBK0M7UUFFL0MsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxTQUFTLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQ2hCO2dCQUNFLEdBQUc7Z0JBQ0gsYUFBYSxFQUFFLFNBQVMsRUFBRSxJQUFJO2dCQUM5QixLQUFLLEVBQUUsUUFBUTthQUNoQixFQUNELHdDQUF3QyxDQUN6QyxDQUFDO1lBRUYsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixNQUFNLFdBQVcsR0FBdUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoRSxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQ25DLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFDM0IsUUFBUSxDQUFDLEtBQUssRUFDZCxhQUFhLENBQ2QsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BGLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQStDO1FBQzFFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV4RSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDcEMsSUFBSSxDQUFDO3dCQUNILFFBQVEsSUFBSSxFQUFFLENBQUM7NEJBQ2IsS0FBSyxpQkFBaUIsQ0FBQyxZQUFZO2dDQUNqQyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0NBQ3BELE1BQU07NEJBQ1IsS0FBSyxpQkFBaUIsQ0FBQyxZQUFZO2dDQUNqQyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dDQUMzRCxNQUFNOzRCQUNSO2dDQUNFLE1BQU07d0JBQ1YsQ0FBQzt3QkFDRCxpREFBaUQ7d0JBQ2pELElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDOzRCQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDakMsQ0FBQztvQkFDSCxDQUFDO29CQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7d0JBQ2IsTUFBTSxFQUFFLEtBQUssQ0FDWDs0QkFDRSxHQUFHOzRCQUNILElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUk7eUJBQzlCLEVBQ0QseUJBQXlCLEdBQUcsRUFBRSxDQUMvQixDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdFLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QixDQUNuQyxHQUFXLEVBQ1gsU0FBc0M7UUFFdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUV0RCxNQUFNLGlCQUFpQixHQUErQixFQUFFLENBQUM7UUFFekQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRTtZQUMxQyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUNuRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTFDLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM5RCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCw2REFBNkQ7UUFDN0QsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTztRQUNULENBQUM7UUFFRCxtREFBbUQ7UUFDbkQsaUJBQWlCO2FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2IsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQy9DLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7YUFDRCxHQUFHLEVBQUUsQ0FBQztRQUVULE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FDdEIsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQ3JDLElBQUksQ0FBQyxzQkFBc0I7YUFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2FBQzlCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDLENBQ25GLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSx3QkFBd0IsQ0FBQyxLQUErQztRQUM3RSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPO2dCQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFFTSxJQUFJO1FBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFNLEVBQUUsSUFBdUIsRUFBRSxhQUFxQjtRQUMvRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDMUIsSUFBSTtZQUNKLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO0lBQ25ELENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUErQztRQUNuRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBak5ELHVDQWlOQyJ9
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
@@ -18,42 +9,38 @@ const getStorageProvider_js_1 = __importDefault(require("./getStorageProvider.js
18
9
  const logger_js_1 = __importDefault(require("../../logger.js"));
19
10
  const Crypto_js_1 = __importDefault(require("../../crypto/Crypto.js"));
20
11
  class StorageKeyValueAdapter {
12
+ storageProvider;
13
+ logger;
21
14
  constructor(storageAccess, config) {
22
- if (!(storageAccess === null || storageAccess === void 0 ? void 0 : storageAccess.credentials))
15
+ if (!storageAccess?.credentials)
23
16
  throw new Error('Credentials is empty');
24
17
  const { showLogs = true } = config || {};
25
18
  this.logger = showLogs ? logger_js_1.default.child({ class: StorageKeyValueAdapter.name }) : null;
26
19
  this.storageProvider = (0, getStorageProvider_js_1.default)(storageAccess);
27
20
  }
28
- decrypt(encryption, key) {
29
- return __awaiter(this, void 0, void 0, function* () {
30
- if (!encryption)
31
- return null;
32
- if (!key)
33
- throw new Error('Key cannot be empty!');
34
- encryption.key = key;
35
- return JSON.parse(yield Crypto_js_1.default.decrypt(encryption));
36
- });
21
+ async decrypt(encryption, key) {
22
+ if (!encryption)
23
+ return null;
24
+ if (!key)
25
+ throw new Error('Key cannot be empty!');
26
+ encryption.key = key;
27
+ return JSON.parse(await Crypto_js_1.default.decrypt(encryption));
37
28
  }
38
- encrypt(data, key) {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- if (data === undefined)
41
- throw new Error('Data cannot be empty!');
42
- if (!key)
43
- throw new Error('Private cannot be empty!');
44
- return Crypto_js_1.default.encrypt(JSON.stringify(data), {
45
- algo: dto_js_1.CryptoAlgorithm.AES,
46
- encoding: dto_js_1.Encoding.base64,
47
- key,
48
- cipher: dto_js_1.Cipher.AES_256_GCM,
49
- });
29
+ async encrypt(data, key) {
30
+ if (data === undefined)
31
+ throw new Error('Data cannot be empty!');
32
+ if (!key)
33
+ throw new Error('Private cannot be empty!');
34
+ return Crypto_js_1.default.encrypt(JSON.stringify(data), {
35
+ algo: dto_js_1.CryptoAlgorithm.AES,
36
+ encoding: dto_js_1.Encoding.base64,
37
+ key,
38
+ cipher: dto_js_1.Cipher.AES_256_GCM,
50
39
  });
51
40
  }
52
- downloadFromStorage(filepath) {
53
- return __awaiter(this, void 0, void 0, function* () {
54
- const downloadStream = yield this.storageProvider.downloadFile(filepath, {});
55
- return this.streamToString(downloadStream);
56
- });
41
+ async downloadFromStorage(filepath) {
42
+ const downloadStream = await this.storageProvider.downloadFile(filepath, {});
43
+ return this.streamToString(downloadStream);
57
44
  }
58
45
  streamToString(stream) {
59
46
  const chunks = [];
@@ -65,94 +52,74 @@ class StorageKeyValueAdapter {
65
52
  stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
66
53
  });
67
54
  }
68
- storageUpload(key, value, privateKey) {
69
- var _a, _b;
70
- return __awaiter(this, void 0, void 0, function* () {
71
- try {
72
- const encryptedValue = yield this.encrypt(value, privateKey);
73
- const buffer = Buffer.from(JSON.stringify(encryptedValue));
74
- yield this.storageProvider.uploadFile(stream_1.Readable.from(buffer), key, buffer.byteLength);
75
- (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info({ data: key }, 'Success uploading to storage');
76
- }
77
- catch (err) {
78
- (_b = this.logger) === null || _b === void 0 ? void 0 : _b.error({ err }, 'Error uploading to storage');
79
- throw err;
80
- }
81
- });
55
+ async storageUpload(key, value, privateKey) {
56
+ try {
57
+ const encryptedValue = await this.encrypt(value, privateKey);
58
+ const buffer = Buffer.from(JSON.stringify(encryptedValue));
59
+ await this.storageProvider.uploadFile(stream_1.Readable.from(buffer), key, buffer.byteLength);
60
+ this.logger?.info({ data: key }, 'Success uploading to storage');
61
+ }
62
+ catch (err) {
63
+ this.logger?.error({ err }, 'Error uploading to storage');
64
+ throw err;
65
+ }
82
66
  }
83
- storageDelete(key) {
84
- var _a, _b;
85
- return __awaiter(this, void 0, void 0, function* () {
86
- try {
87
- yield this.storageProvider.deleteObject(key);
88
- (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info({ data: key }, 'Success deleting from storage');
89
- }
90
- catch (err) {
91
- (_b = this.logger) === null || _b === void 0 ? void 0 : _b.info({ err }, 'Error deleting from storage');
92
- throw err;
93
- }
94
- });
67
+ async storageDelete(key) {
68
+ try {
69
+ await this.storageProvider.deleteObject(key);
70
+ this.logger?.info({ data: key }, 'Success deleting from storage');
71
+ }
72
+ catch (err) {
73
+ this.logger?.info({ err }, 'Error deleting from storage');
74
+ throw err;
75
+ }
95
76
  }
96
- storageDownload(key, privateKey) {
97
- var _a, _b;
98
- return __awaiter(this, void 0, void 0, function* () {
99
- try {
100
- const downloaded = yield this.downloadFromStorage(key);
101
- (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info({ key }, 'Success download data from storage');
102
- if (!downloaded)
103
- return null;
104
- const decryptedValue = yield this.decrypt(JSON.parse(downloaded), privateKey);
105
- return decryptedValue;
106
- }
107
- catch (err) {
108
- (_b = this.logger) === null || _b === void 0 ? void 0 : _b.info({
109
- err,
110
- key,
111
- }, 'Error download data from storage');
112
- throw err;
113
- }
114
- });
77
+ async storageDownload(key, privateKey) {
78
+ try {
79
+ const downloaded = await this.downloadFromStorage(key);
80
+ this.logger?.info({ key }, 'Success download data from storage');
81
+ if (!downloaded)
82
+ return null;
83
+ const decryptedValue = await this.decrypt(JSON.parse(downloaded), privateKey);
84
+ return decryptedValue;
85
+ }
86
+ catch (err) {
87
+ this.logger?.info({
88
+ err,
89
+ key,
90
+ }, 'Error download data from storage');
91
+ throw err;
92
+ }
115
93
  }
116
- storageListFiles(key) {
117
- var _a, _b;
118
- return __awaiter(this, void 0, void 0, function* () {
119
- try {
120
- const listObjects = yield this.storageProvider.listObjects(key);
121
- (_a = this.logger) === null || _a === void 0 ? void 0 : _a.trace({
122
- data: listObjects,
123
- key,
124
- }, 'Success list objects from storage');
125
- return listObjects.filter((obj) => !obj.isFolder);
126
- }
127
- catch (err) {
128
- (_b = this.logger) === null || _b === void 0 ? void 0 : _b.info({
129
- err,
130
- key,
131
- }, 'Error list objects from storage');
132
- throw err;
133
- }
134
- });
94
+ async storageListFiles(key) {
95
+ try {
96
+ const listObjects = await this.storageProvider.listObjects(key);
97
+ this.logger?.trace({
98
+ data: listObjects,
99
+ key,
100
+ }, 'Success list objects from storage');
101
+ return listObjects.filter((obj) => !obj.isFolder);
102
+ }
103
+ catch (err) {
104
+ this.logger?.info({
105
+ err,
106
+ key,
107
+ }, 'Error list objects from storage');
108
+ throw err;
109
+ }
135
110
  }
136
- set(key, value, privateKey) {
137
- return __awaiter(this, void 0, void 0, function* () {
138
- return this.storageUpload(key, value, privateKey);
139
- });
111
+ async set(key, value, privateKey) {
112
+ return this.storageUpload(key, value, privateKey);
140
113
  }
141
- delete(key) {
142
- return __awaiter(this, void 0, void 0, function* () {
143
- return this.storageDelete(key);
144
- });
114
+ async delete(key) {
115
+ return this.storageDelete(key);
145
116
  }
146
- get(key, privateKey) {
147
- return __awaiter(this, void 0, void 0, function* () {
148
- return this.storageDownload(key, privateKey);
149
- });
117
+ async get(key, privateKey) {
118
+ return this.storageDownload(key, privateKey);
150
119
  }
151
- listFiles(key) {
152
- return __awaiter(this, void 0, void 0, function* () {
153
- return this.storageListFiles(key);
154
- });
120
+ async listFiles(key) {
121
+ return this.storageListFiles(key);
155
122
  }
156
123
  }
157
124
  exports.default = StorageKeyValueAdapter;
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZUtleVZhbHVlQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvc3RvcmFnZS9TdG9yYWdlS2V5VmFsdWVBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQWtDO0FBQ2xDLG1EQUF1RjtBQUd2RixvRkFBeUQ7QUFFekQsZ0VBQWlEO0FBQ2pELHVFQUE0QztBQU01QyxNQUFxQixzQkFBc0I7SUFJekMsWUFBWSxhQUE0QixFQUFFLE1BQXFDO1FBQzdFLElBQUksQ0FBQyxDQUFBLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxXQUFXLENBQUE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDekUsTUFBTSxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckYsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFBLCtCQUFrQixFQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFWSxPQUFPLENBQUMsVUFBc0IsRUFBRSxHQUFXOztZQUN0RCxJQUFJLENBQUMsVUFBVTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFFbEQsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFFckIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sbUJBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMs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
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZUtleVZhbHVlQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvc3RvcmFnZS9TdG9yYWdlS2V5VmFsdWVBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQWtDO0FBQ2xDLG1EQUF1RjtBQUd2RixvRkFBeUQ7QUFFekQsZ0VBQWlEO0FBQ2pELHVFQUE0QztBQU01QyxNQUFxQixzQkFBc0I7SUFDeEIsZUFBZSxDQUFtQjtJQUNsQyxNQUFNLENBQWlCO0lBRXhDLFlBQVksYUFBNEIsRUFBRSxNQUFxQztRQUM3RSxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDekUsTUFBTSxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckYsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFBLCtCQUFrQixFQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQXNCLEVBQUUsR0FBVztRQUN0RCxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRWxELFVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBRXJCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLG1CQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFD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