@nlabs/reaktor 1.6.2 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/LICENSE +74 -201
  2. package/README.md +62 -15
  3. package/lib/actions/analytics.d.ts +10 -0
  4. package/lib/actions/analytics.js +539 -0
  5. package/lib/actions/apps.js +2 -2
  6. package/lib/actions/connections.js +1 -1
  7. package/lib/actions/content.js +2 -2
  8. package/lib/actions/conversations.js +2 -2
  9. package/lib/actions/crm.d.ts +5 -1
  10. package/lib/actions/crm.js +226 -3
  11. package/lib/actions/crud.js +2 -2
  12. package/lib/actions/dynamodb.d.ts +1 -1
  13. package/lib/actions/dynamodb.js +2 -2
  14. package/lib/actions/email.d.ts +1 -1
  15. package/lib/actions/email.js +2 -2
  16. package/lib/actions/files.js +2 -2
  17. package/lib/actions/flags.d.ts +6 -0
  18. package/lib/actions/flags.js +147 -0
  19. package/lib/actions/groups.js +2 -2
  20. package/lib/actions/images.d.ts +1 -1
  21. package/lib/actions/images.js +2 -2
  22. package/lib/actions/index.d.ts +3 -2
  23. package/lib/actions/index.js +4 -3
  24. package/lib/actions/ios.js +1 -1
  25. package/lib/actions/locations.js +2 -2
  26. package/lib/actions/messages.js +2 -2
  27. package/lib/actions/notifications.d.ts +1 -1
  28. package/lib/actions/notifications.js +2 -2
  29. package/lib/actions/payments.d.ts +3 -3
  30. package/lib/actions/payments.js +144 -189
  31. package/lib/actions/personas.js +1 -1
  32. package/lib/actions/posts.d.ts +0 -4
  33. package/lib/actions/posts.js +2 -4
  34. package/lib/actions/query.js +2 -2
  35. package/lib/actions/reactions.js +2 -2
  36. package/lib/actions/rum.js +303 -25
  37. package/lib/actions/s3.d.ts +1 -1
  38. package/lib/actions/s3.js +2 -2
  39. package/lib/actions/search.js +2 -2
  40. package/lib/actions/sms.js +2 -2
  41. package/lib/actions/statistics.js +2 -2
  42. package/lib/actions/subscriptions.js +2 -2
  43. package/lib/actions/tags.js +2 -2
  44. package/lib/actions/users.js +59 -6
  45. package/lib/actions/videos.js +2 -2
  46. package/lib/adapters/arangoAdapter.js +1 -1
  47. package/lib/adapters/contentAdapter.js +2 -2
  48. package/lib/adapters/fileAdapter.js +1 -1
  49. package/lib/adapters/imageAdapter.js +1 -1
  50. package/lib/adapters/index.js +1 -1
  51. package/lib/adapters/messageAdapter.js +1 -1
  52. package/lib/adapters/postAdapter.js +1 -1
  53. package/lib/adapters/reaktorAdapter.js +1 -1
  54. package/lib/adapters/tagAdapter.d.ts +0 -1
  55. package/lib/adapters/tagAdapter.js +1 -2
  56. package/lib/adapters/userAdapter.d.ts +0 -1
  57. package/lib/adapters/userAdapter.js +1 -2
  58. package/lib/config.d.ts +10 -0
  59. package/lib/config.js +8 -2
  60. package/lib/constants/collections.d.ts +6 -3
  61. package/lib/constants/collections.js +7 -4
  62. package/lib/handlers/graphqlHandler.d.ts +2 -2
  63. package/lib/handlers/graphqlHandler.js +2 -19
  64. package/lib/index.d.ts +1 -1
  65. package/lib/index.js +2 -2
  66. package/lib/lambdas/actions/websockets.js +2 -2
  67. package/lib/lambdas/authorizer.js +2 -2
  68. package/lib/lambdas/connection.js +2 -2
  69. package/lib/lambdas/utils/message.js +2 -2
  70. package/lib/lambdas/utils/websocket.d.ts +1 -1
  71. package/lib/lambdas/utils/websocket.js +2 -2
  72. package/lib/mocks/conversation.js +1 -1
  73. package/lib/mocks/file.js +1 -1
  74. package/lib/mocks/group.js +1 -1
  75. package/lib/mocks/image.js +1 -1
  76. package/lib/mocks/post.js +1 -1
  77. package/lib/mocks/tag.js +1 -1
  78. package/lib/mocks/user.js +1 -1
  79. package/lib/mocks/video.js +1 -1
  80. package/lib/mutations/analytics/analytics.d.ts +1 -0
  81. package/lib/mutations/analytics/analytics.js +35 -0
  82. package/lib/mutations/content/content.js +2 -2
  83. package/lib/mutations/crm/crm.js +18 -4
  84. package/lib/mutations/events/events.js +2 -2
  85. package/lib/mutations/flags/flags.d.ts +1 -0
  86. package/lib/mutations/flags/flags.js +33 -0
  87. package/lib/mutations/groups/groups.js +2 -2
  88. package/lib/mutations/images/images.js +2 -2
  89. package/lib/mutations/index.d.ts +3 -1
  90. package/lib/mutations/index.js +13 -3
  91. package/lib/mutations/locations/locations.js +2 -2
  92. package/lib/mutations/messages/messages.js +2 -2
  93. package/lib/mutations/personas/personas.js +2 -2
  94. package/lib/mutations/posts/posts.js +2 -2
  95. package/lib/mutations/reactions/reactions.js +2 -2
  96. package/lib/mutations/rum/rum.js +2 -2
  97. package/lib/mutations/statistics/statistics.js +2 -2
  98. package/lib/mutations/subscriptions/subscriptions.js +2 -2
  99. package/lib/mutations/tags/tags.js +2 -2
  100. package/lib/mutations/users/users.js +30 -17
  101. package/lib/mutations/videos/videos.js +2 -2
  102. package/lib/objectTypes/analytics.d.ts +8 -0
  103. package/lib/objectTypes/analytics.js +147 -0
  104. package/lib/objectTypes/app.js +2 -2
  105. package/lib/objectTypes/bankAccount.js +2 -2
  106. package/lib/objectTypes/connection.js +2 -2
  107. package/lib/objectTypes/content.js +2 -2
  108. package/lib/objectTypes/conversation.js +2 -2
  109. package/lib/objectTypes/creditCard.js +2 -2
  110. package/lib/objectTypes/crm.d.ts +5 -0
  111. package/lib/objectTypes/crm.js +64 -2
  112. package/lib/objectTypes/document.js +1 -1
  113. package/lib/objectTypes/error.js +2 -2
  114. package/lib/objectTypes/event.js +2 -2
  115. package/lib/objectTypes/external.js +2 -2
  116. package/lib/objectTypes/file.js +2 -2
  117. package/lib/objectTypes/filter.js +2 -2
  118. package/lib/objectTypes/flag.d.ts +1 -0
  119. package/lib/objectTypes/flag.js +32 -0
  120. package/lib/objectTypes/group.js +2 -2
  121. package/lib/objectTypes/iapSubscription.js +2 -2
  122. package/lib/objectTypes/image.d.ts +1 -1
  123. package/lib/objectTypes/image.js +2 -2
  124. package/lib/objectTypes/index.d.ts +2 -0
  125. package/lib/objectTypes/index.js +3 -1
  126. package/lib/objectTypes/location.js +2 -2
  127. package/lib/objectTypes/message.js +2 -2
  128. package/lib/objectTypes/passcode.js +2 -2
  129. package/lib/objectTypes/persona.js +2 -2
  130. package/lib/objectTypes/plan.js +2 -2
  131. package/lib/objectTypes/post.js +2 -2
  132. package/lib/objectTypes/query.js +2 -2
  133. package/lib/objectTypes/reaction.js +2 -2
  134. package/lib/objectTypes/relation.js +2 -2
  135. package/lib/objectTypes/rum.js +4 -4
  136. package/lib/objectTypes/search.js +2 -2
  137. package/lib/objectTypes/statistics.js +2 -2
  138. package/lib/objectTypes/subscription.js +2 -2
  139. package/lib/objectTypes/tag.js +2 -2
  140. package/lib/objectTypes/user.js +2 -2
  141. package/lib/objectTypes/video.d.ts +1 -1
  142. package/lib/objectTypes/video.js +2 -2
  143. package/lib/queries/analytics/analytics.d.ts +1 -0
  144. package/lib/queries/analytics/analytics.js +41 -0
  145. package/lib/queries/content/content.js +2 -2
  146. package/lib/queries/crm/crm.js +15 -4
  147. package/lib/queries/events/events.js +2 -2
  148. package/lib/queries/flags/flags.d.ts +1 -0
  149. package/lib/queries/flags/flags.js +16 -0
  150. package/lib/queries/groups/groups.js +2 -2
  151. package/lib/queries/images/images.js +2 -2
  152. package/lib/queries/index.d.ts +3 -1
  153. package/lib/queries/index.js +13 -3
  154. package/lib/queries/locations/locations.js +2 -2
  155. package/lib/queries/messages/messages.js +1 -1
  156. package/lib/queries/personas/personas.js +2 -2
  157. package/lib/queries/posts/posts.js +2 -2
  158. package/lib/queries/query/query.js +2 -2
  159. package/lib/queries/reactions/reactions.js +2 -2
  160. package/lib/queries/statistics/statistics.js +2 -2
  161. package/lib/queries/subscriptions/subscriptions.js +1 -1
  162. package/lib/queries/tags/tags.js +2 -2
  163. package/lib/queries/users/users.js +2 -2
  164. package/lib/queries/videos/videos.js +2 -2
  165. package/lib/templates/email/layout.js +1 -1
  166. package/lib/templates/email/passwordForgot.js +1 -1
  167. package/lib/templates/email/passwordRecovery.js +1 -1
  168. package/lib/templates/email/verifyEmail.js +1 -1
  169. package/lib/templates/email/welcome.js +1 -1
  170. package/lib/templates/sms/passwordForgot.js +1 -1
  171. package/lib/templates/sms/passwordRecovery.js +1 -1
  172. package/lib/templates/sms/verifyEmail.js +1 -1
  173. package/lib/templates/sms/verifyPhone.js +1 -1
  174. package/lib/templates/sms/welcome.js +1 -1
  175. package/lib/types/analytics.types.d.ts +92 -0
  176. package/lib/types/analytics.types.js +6 -0
  177. package/lib/types/apps.types.d.ts +1 -1
  178. package/lib/types/apps.types.js +2 -2
  179. package/lib/types/arangodb.types.d.ts +2 -2
  180. package/lib/types/arangodb.types.js +2 -2
  181. package/lib/types/auth.types.d.ts +3 -1
  182. package/lib/types/auth.types.js +2 -2
  183. package/lib/types/connections.types.d.ts +1 -1
  184. package/lib/types/connections.types.js +2 -2
  185. package/lib/types/content.types.d.ts +1 -1
  186. package/lib/types/content.types.js +2 -2
  187. package/lib/types/conversations.types.d.ts +1 -1
  188. package/lib/types/conversations.types.js +2 -2
  189. package/lib/types/crm.types.d.ts +38 -1
  190. package/lib/types/crm.types.js +2 -2
  191. package/lib/types/email.types.d.ts +1 -1
  192. package/lib/types/email.types.js +2 -2
  193. package/lib/types/error.types.js +1 -1
  194. package/lib/types/files.types.d.ts +1 -1
  195. package/lib/types/files.types.js +2 -2
  196. package/lib/types/flags.types.d.ts +28 -0
  197. package/lib/types/flags.types.js +3 -0
  198. package/lib/types/google.types.d.ts +1 -1
  199. package/lib/types/google.types.js +2 -2
  200. package/lib/types/groups.types.d.ts +1 -1
  201. package/lib/types/groups.types.js +2 -2
  202. package/lib/types/images.types.d.ts +1 -1
  203. package/lib/types/images.types.js +2 -2
  204. package/lib/types/index.d.ts +3 -1
  205. package/lib/types/index.js +4 -2
  206. package/lib/types/locations.types.d.ts +1 -1
  207. package/lib/types/locations.types.js +2 -2
  208. package/lib/types/messages.types.d.ts +1 -1
  209. package/lib/types/messages.types.js +2 -2
  210. package/lib/types/notifications.types.d.ts +1 -1
  211. package/lib/types/notifications.types.js +2 -2
  212. package/lib/types/payments.types.d.ts +4 -1
  213. package/lib/types/payments.types.js +2 -2
  214. package/lib/types/personas.types.js +1 -1
  215. package/lib/types/posts.types.d.ts +1 -1
  216. package/lib/types/posts.types.js +2 -2
  217. package/lib/types/rum.types.d.ts +3 -3
  218. package/lib/types/rum.types.js +2 -2
  219. package/lib/types/statistics.types.js +1 -1
  220. package/lib/types/tags.types.d.ts +1 -1
  221. package/lib/types/tags.types.js +2 -2
  222. package/lib/types/users.types.d.ts +1 -1
  223. package/lib/types/users.types.js +2 -2
  224. package/lib/types/videos.types.d.ts +1 -1
  225. package/lib/types/videos.types.js +2 -2
  226. package/lib/types/websockets.types.d.ts +1 -1
  227. package/lib/types/websockets.types.js +2 -2
  228. package/lib/upload.js +4 -9
  229. package/lib/utils/adapterUtils.d.ts +1 -1
  230. package/lib/utils/adapterUtils.js +2 -2
  231. package/lib/utils/analyticsUtils.d.ts +1 -1
  232. package/lib/utils/analyticsUtils.js +2 -2
  233. package/lib/utils/aqlHelpers.d.ts +1 -1
  234. package/lib/utils/aqlHelpers.js +2 -2
  235. package/lib/utils/arangodbUtils.d.ts +9 -1
  236. package/lib/utils/arangodbUtils.js +10 -2
  237. package/lib/utils/authUtils.js +2 -2
  238. package/lib/utils/awsUtils.js +2 -2
  239. package/lib/utils/collectionRegistry.d.ts +1 -1
  240. package/lib/utils/collectionRegistry.js +17 -2
  241. package/lib/utils/contextUtils.d.ts +2 -2
  242. package/lib/utils/contextUtils.js +2 -2
  243. package/lib/utils/dbI18n.example.d.ts +1 -1
  244. package/lib/utils/dbI18n.example.js +2 -2
  245. package/lib/utils/dbI18n.js +2 -2
  246. package/lib/utils/googleTranslate.d.ts +1 -1
  247. package/lib/utils/googleTranslate.js +2 -2
  248. package/lib/utils/graphqlUtils.d.ts +1 -0
  249. package/lib/utils/graphqlUtils.js +1 -1
  250. package/lib/utils/imageUtils.js +1 -1
  251. package/lib/utils/index.d.ts +1 -1
  252. package/lib/utils/index.js +2 -2
  253. package/lib/utils/languageDetection.js +1 -1
  254. package/lib/utils/localeUtils.d.ts +1 -1
  255. package/lib/utils/localeUtils.example.d.ts +1 -1
  256. package/lib/utils/localeUtils.example.js +2 -2
  257. package/lib/utils/localeUtils.js +2 -2
  258. package/lib/utils/middlewareUtils.js +1 -1
  259. package/lib/utils/queryBuilder.d.ts +1 -1
  260. package/lib/utils/queryBuilder.js +2 -2
  261. package/lib/utils/schemaUtils.js +1 -1
  262. package/lib/utils/sessionUtils.js +2 -2
  263. package/lib/utils/stripeUtils.d.ts +1 -1
  264. package/lib/utils/stripeUtils.js +2 -2
  265. package/lib/utils/templateUtils.js +1 -1
  266. package/lib/utils/testUtils.js +2 -2
  267. package/lib/utils/translationQueue.d.ts +1 -1
  268. package/lib/utils/translationQueue.example.d.ts +1 -1
  269. package/lib/utils/translationQueue.example.js +2 -2
  270. package/lib/utils/translationQueue.js +2 -2
  271. package/lib/videoProcessing.js +1 -1
  272. package/package.json +43 -79
  273. package/lib/actions/websockets.d.ts +0 -20
  274. package/lib/actions/websockets.js +0 -164
  275. package/lib/mocks/nlabs.png +0 -0
@@ -1,66 +1,344 @@
1
1
  /**
2
2
  * Copyright (c) 2026-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
- */ import { aql } from 'arangojs';
5
- import { literal } from 'arangojs/aql';
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
+ */ import { PutRumEventsCommand, RUMClient } from '@aws-sdk/client-rum';
5
+ import { createHash, randomUUID } from 'crypto';
6
+ import { Config } from '../config.js';
6
7
  import { COLLECTIONS } from '../constants/collections.js';
7
8
  import { UserError } from '../utils/analyticsUtils.js';
8
9
  import { useDb } from '../utils/arangodbUtils.js';
10
+ import { getAnalyticsById } from './analytics.js';
9
11
  const MAX_BATCH_SIZE = 50;
10
12
  const MAX_PROPERTIES = 20;
13
+ const MAX_SEQUENCE = 1_000_000;
14
+ const MAX_TIMESTAMP_AGE_MS = 24 * 60 * 60 * 1000;
15
+ const MAX_TIMESTAMP_FUTURE_MS = 5 * 60 * 1000;
16
+ const LOG_RETENTION_MS = 90 * 24 * 60 * 60 * 1000;
17
+ const UUID_PATTERN = /^[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}$/i;
18
+ const BLOCKED_PROPERTY_KEYS = new Set([
19
+ 'accountid',
20
+ 'address',
21
+ 'email',
22
+ 'firstname',
23
+ 'fullname',
24
+ 'geolocation',
25
+ 'ip',
26
+ 'ipaddress',
27
+ 'lastname',
28
+ 'latitude',
29
+ 'longitude',
30
+ 'name',
31
+ 'phone',
32
+ 'referrer',
33
+ 'token',
34
+ 'useragent',
35
+ 'userid'
36
+ ]);
37
+ const EMAIL_PATTERN = /\b[^\s@]+@[^\s@]+\.[^\s@]+\b/i;
38
+ const logCollectionInitialization = new Map();
39
+ const RUM_METADATA_PROPERTY_KEYS = {
40
+ browserLanguage: [
41
+ 'browserlanguage'
42
+ ],
43
+ browserName: [
44
+ 'browsername'
45
+ ],
46
+ browserVersion: [
47
+ 'browserversion'
48
+ ],
49
+ deviceType: [
50
+ 'devicetype'
51
+ ],
52
+ interaction: [
53
+ 'interaction'
54
+ ],
55
+ osName: [
56
+ 'osname'
57
+ ],
58
+ osVersion: [
59
+ 'osversion'
60
+ ],
61
+ pageId: [
62
+ 'pageid'
63
+ ],
64
+ parentPageId: [
65
+ 'parentpageid',
66
+ 'parentpage'
67
+ ]
68
+ };
11
69
  const normalizeText = (value, maxLength)=>String(value || '').trim().slice(0, maxLength);
70
+ const normalizePropertyKey = (value)=>value.toLowerCase().replace(/[^a-z0-9]/g, '');
71
+ const normalizeDomain = (value)=>normalizeText(value, 253).replace(/^https?:\/\//i, '').split('/')[0].split(':')[0];
72
+ const getAwsUuid = (value)=>{
73
+ if (UUID_PATTERN.test(value)) {
74
+ return value;
75
+ }
76
+ const hash = createHash('sha256').update(value).digest('hex');
77
+ return `${hash.slice(0, 8)}-${hash.slice(8, 12)}-${hash.slice(12, 16)}-${hash.slice(16, 20)}-${hash.slice(20, 32)}`;
78
+ };
79
+ const parseEnvironmentAppMonitors = ()=>{
80
+ const value = process.env.AWS_RUM_APP_MONITORS;
81
+ if (!value) {
82
+ return {};
83
+ }
84
+ try {
85
+ const parsed = JSON.parse(value);
86
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};
87
+ } catch {
88
+ throw new UserError('invalid_rum_config');
89
+ }
90
+ };
91
+ const getAppMonitor = async (context, analyticsId)=>{
92
+ const configuredMonitors = context.config?.aws?.rum?.appMonitors || Config.get('aws.rum.appMonitors', {});
93
+ const environmentMonitors = parseEnvironmentAppMonitors();
94
+ const configuredMonitor = environmentMonitors[analyticsId] || configuredMonitors[analyticsId];
95
+ if (!configuredMonitor) {
96
+ const analytics = await getAnalyticsById(context, analyticsId);
97
+ if (!analytics) {
98
+ throw new UserError('invalid_rum_app');
99
+ }
100
+ return {
101
+ appId: analytics.appId,
102
+ monitor: {
103
+ domain: analytics.domain,
104
+ id: analytics.monitorId,
105
+ name: analytics.monitorName,
106
+ version: normalizeText(context.config?.details?.version || Config.get('details.version') || '1.0.0', 255)
107
+ }
108
+ };
109
+ }
110
+ const monitor = typeof configuredMonitor === 'string' ? {
111
+ id: configuredMonitor
112
+ } : configuredMonitor;
113
+ const monitorId = normalizeText(monitor?.id, 36);
114
+ if (!monitorId || !UUID_PATTERN.test(monitorId)) {
115
+ throw new UserError('invalid_rum_app');
116
+ }
117
+ return {
118
+ appId: analyticsId,
119
+ monitor: {
120
+ ...monitor,
121
+ domain: normalizeDomain(monitor.domain || context.config?.details?.url || Config.get('details.url') || analyticsId),
122
+ id: monitorId,
123
+ name: normalizeText(monitor.name || analyticsId, 255),
124
+ version: normalizeText(monitor.version || context.config?.details?.version || Config.get('details.version') || '1.0.0', 255)
125
+ }
126
+ };
127
+ };
128
+ const getRumClient = (context)=>{
129
+ const awsConfig = context.config?.aws || Config.get('aws', {});
130
+ const { accessKeyId, secretAccessKey, sessionToken } = awsConfig.credentials || {};
131
+ const usesRuntimeCredentials = Boolean(process.env.AWS_SESSION_TOKEN && accessKeyId === process.env.AWS_ACCESS_KEY_ID && secretAccessKey === process.env.AWS_SECRET_ACCESS_KEY);
132
+ const credentials = accessKeyId && secretAccessKey && !usesRuntimeCredentials ? {
133
+ accessKeyId,
134
+ secretAccessKey,
135
+ ...sessionToken ? {
136
+ sessionToken
137
+ } : {}
138
+ } : undefined;
139
+ return new RUMClient({
140
+ ...credentials ? {
141
+ credentials
142
+ } : {},
143
+ ...awsConfig.region ? {
144
+ region: awsConfig.region
145
+ } : {}
146
+ });
147
+ };
148
+ const sanitizeTimestamp = (value, now)=>{
149
+ const timestamp = Number(value);
150
+ if (!Number.isFinite(timestamp) || timestamp < now - MAX_TIMESTAMP_AGE_MS || timestamp > now + MAX_TIMESTAMP_FUTURE_MS) {
151
+ return now;
152
+ }
153
+ return Math.floor(timestamp);
154
+ };
12
155
  const sanitizeProperties = (properties = {})=>Object.entries(properties).slice(0, MAX_PROPERTIES).reduce((result, [key, value])=>{
13
156
  const propertyKey = normalizeText(key, 64);
14
- if (propertyKey && [
157
+ const normalizedPropertyKey = normalizePropertyKey(propertyKey);
158
+ if (propertyKey && !BLOCKED_PROPERTY_KEYS.has(normalizedPropertyKey) && [
15
159
  'boolean',
16
160
  'number',
17
161
  'string'
18
162
  ].includes(typeof value)) {
19
- result[propertyKey] = typeof value === 'string' ? normalizeText(value, 256) : value;
163
+ if (typeof value === 'string') {
164
+ const textValue = normalizeText(value, 256);
165
+ if (textValue && !EMAIL_PATTERN.test(textValue)) {
166
+ result[propertyKey] = textValue;
167
+ }
168
+ } else if (typeof value === 'boolean' || Number.isFinite(value)) {
169
+ result[propertyKey] = value;
170
+ }
20
171
  }
21
172
  return result;
22
173
  }, {});
23
- const sanitizeEvent = (event)=>{
24
- const eventId = normalizeText(event.eventId, 128);
174
+ const getRumMetadata = (appId, domain, properties)=>{
175
+ const normalizedProperties = Object.entries(properties).reduce((result, [key, value])=>({
176
+ ...result,
177
+ [normalizePropertyKey(key)]: value
178
+ }), {});
179
+ return Object.entries(RUM_METADATA_PROPERTY_KEYS).reduce((metadata, [key, aliases])=>{
180
+ const alias = aliases.find((candidate)=>normalizedProperties[candidate] !== undefined);
181
+ if (alias) {
182
+ metadata[key] = normalizedProperties[alias];
183
+ }
184
+ return metadata;
185
+ }, {
186
+ applicationId: appId,
187
+ ...domain ? {
188
+ domain
189
+ } : {},
190
+ platformType: 'web',
191
+ version: '1.0.0'
192
+ });
193
+ };
194
+ const sanitizeEvent = (event, now)=>{
195
+ const inputEventId = normalizeText(event.eventId, 128);
25
196
  const journeyId = normalizeText(event.journeyId, 128);
26
197
  const name = normalizeText(event.name, 128);
27
198
  const path = normalizeText(event.path, 256).split('?')[0].split('#')[0];
28
- const type = normalizeText(event.type, 64);
29
- if (!eventId || !journeyId || !name || !type) {
199
+ const type = normalizeText(event.type, 256).replace(/[^a-zA-Z0-9_.-]/g, '_');
200
+ if (!inputEventId || !journeyId || !name || !type) {
30
201
  throw new UserError('invalid_rum_event');
31
202
  }
32
203
  return {
33
- eventId,
34
- journeyId,
204
+ eventId: getAwsUuid(inputEventId),
205
+ journeyId: getAwsUuid(journeyId),
35
206
  name,
36
207
  ...path ? {
37
208
  path
38
209
  } : {},
39
210
  properties: sanitizeProperties(event.properties),
40
- sequence: Math.max(1, Math.floor(Number(event.sequence) || 1)),
41
- timestamp: Math.max(0, Number(event.timestamp) || Date.now()),
211
+ sequence: Math.min(MAX_SEQUENCE, Math.max(1, Math.floor(Number(event.sequence) || 1))),
212
+ timestamp: sanitizeTimestamp(event.timestamp, now),
42
213
  type
43
214
  };
44
215
  };
216
+ const groupEventsByJourney = (events)=>events.reduce((groups, event)=>{
217
+ const journeyEvents = groups.get(event.journeyId) || [];
218
+ journeyEvents.push(event);
219
+ groups.set(event.journeyId, journeyEvents);
220
+ return groups;
221
+ }, new Map());
222
+ const initializeLogCollection = async (databaseName)=>{
223
+ const cacheKey = databaseName || 'reaktor';
224
+ const existingInitialization = logCollectionInitialization.get(cacheKey);
225
+ if (existingInitialization) {
226
+ return existingInitialization;
227
+ }
228
+ const initialization = (async ()=>{
229
+ const database = useDb(databaseName);
230
+ const collection = database.collection(COLLECTIONS.LOGS);
231
+ if (!await collection.exists()) {
232
+ try {
233
+ await database.createCollection(COLLECTIONS.LOGS);
234
+ } catch (error) {
235
+ if (!await collection.exists()) {
236
+ throw error;
237
+ }
238
+ }
239
+ }
240
+ await Promise.all([
241
+ collection.ensureIndex({
242
+ fields: [
243
+ 'appId',
244
+ 'eventId'
245
+ ],
246
+ name: 'logs_app_event',
247
+ type: 'persistent',
248
+ unique: true
249
+ }),
250
+ collection.ensureIndex({
251
+ expireAfter: 0,
252
+ fields: [
253
+ 'expiresAt'
254
+ ],
255
+ name: 'logs_expiry',
256
+ type: 'ttl'
257
+ })
258
+ ]);
259
+ })();
260
+ logCollectionInitialization.set(cacheKey, initialization);
261
+ try {
262
+ await initialization;
263
+ } catch (error) {
264
+ logCollectionInitialization.delete(cacheKey);
265
+ throw error;
266
+ }
267
+ };
268
+ const persistRumEvents = async (context, analyticsId, appId, events, now)=>{
269
+ await initializeLogCollection(context.databaseName);
270
+ const collection = useDb(context.databaseName).collection(COLLECTIONS.LOGS);
271
+ const expiresAt = Math.floor((now + LOG_RETENTION_MS) / 1000);
272
+ await Promise.all(events.map((event)=>collection.save({
273
+ _key: createHash('sha256').update(`${appId}:${event.eventId}`).digest('hex'),
274
+ added: now,
275
+ analyticsId,
276
+ appId,
277
+ eventId: event.eventId,
278
+ expiresAt,
279
+ journeyId: event.journeyId,
280
+ name: event.name,
281
+ ...event.path ? {
282
+ path: event.path
283
+ } : {},
284
+ properties: event.properties,
285
+ sequence: event.sequence,
286
+ timestamp: event.timestamp,
287
+ type: event.type
288
+ }, {
289
+ overwriteMode: 'ignore',
290
+ silent: true
291
+ })));
292
+ };
45
293
  export const trackRum = async (context, batch)=>{
46
- const appId = normalizeText(batch?.appId, 128);
294
+ const analyticsId = normalizeText(batch?.analyticsId, 128);
47
295
  const inputEvents = Array.isArray(batch?.events) ? batch.events : [];
48
- if (!appId || inputEvents.length === 0 || inputEvents.length > MAX_BATCH_SIZE) {
296
+ if (!analyticsId || inputEvents.length === 0 || inputEvents.length > MAX_BATCH_SIZE) {
49
297
  throw new UserError('invalid_rum_batch');
50
298
  }
51
- const events = inputEvents.map(sanitizeEvent);
52
299
  const now = Date.now();
53
- await useDb(context.databaseName).query(aql`
54
- FOR event IN ${events}
55
- UPSERT {appId: ${appId}, eventId: event.eventId}
56
- INSERT MERGE(event, {added: ${now}, appId: ${appId}, modified: ${now}})
57
- UPDATE {modified: ${now}}
58
- IN ${literal(COLLECTIONS.RUM_LOGS)}
59
- `);
300
+ const { appId, monitor } = await getAppMonitor(context, analyticsId);
301
+ const events = inputEvents.map((event)=>sanitizeEvent(event, now));
302
+ const eventsByJourney = groupEventsByJourney(events);
303
+ const client = getRumClient(context);
304
+ await Promise.all([
305
+ persistRumEvents(context, analyticsId, appId, events, now),
306
+ ...Array.from(eventsByJourney.entries()).map(([journeyId, journeyEvents])=>client.send(new PutRumEventsCommand({
307
+ ...monitor.alias ? {
308
+ Alias: monitor.alias
309
+ } : {},
310
+ AppMonitorDetails: {
311
+ id: monitor.id,
312
+ name: monitor.name,
313
+ version: monitor.version
314
+ },
315
+ BatchId: randomUUID(),
316
+ Id: monitor.id,
317
+ RumEvents: journeyEvents.map((event)=>({
318
+ details: JSON.stringify({
319
+ appId,
320
+ name: event.name,
321
+ ...event.path ? {
322
+ path: event.path
323
+ } : {},
324
+ properties: event.properties,
325
+ sequence: event.sequence
326
+ }),
327
+ id: event.eventId,
328
+ metadata: JSON.stringify(getRumMetadata(appId, monitor.domain, event.properties)),
329
+ timestamp: new Date(event.timestamp),
330
+ type: event.type
331
+ })),
332
+ UserDetails: {
333
+ sessionId: journeyId,
334
+ userId: journeyId
335
+ }
336
+ })))
337
+ ]);
60
338
  return {
61
339
  accepted: events.length,
62
- appId
340
+ analyticsId
63
341
  };
64
342
  };
65
343
 
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvcnVtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI2LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NPTExFQ1RJT05TfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtVc2VyRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7UnVtQmF0Y2hJbnB1dFR5cGUsIFJ1bUV2ZW50SW5wdXRUeXBlLCBSdW1Qcm9wZXJ0eSwgUnVtVHJhY2tSZXN1bHRUeXBlfSBmcm9tICcuLi90eXBlcy9ydW0udHlwZXMuanMnO1xuXG5jb25zdCBNQVhfQkFUQ0hfU0laRSA9IDUwO1xuY29uc3QgTUFYX1BST1BFUlRJRVMgPSAyMDtcblxuY29uc3Qgbm9ybWFsaXplVGV4dCA9ICh2YWx1ZTogdW5rbm93biwgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcgPT5cbiAgU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKCkuc2xpY2UoMCwgbWF4TGVuZ3RoKTtcblxuY29uc3Qgc2FuaXRpemVQcm9wZXJ0aWVzID0gKFxuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBSdW1Qcm9wZXJ0eT4gPSB7fVxuKTogUmVjb3JkPHN0cmluZywgUnVtUHJvcGVydHk+ID0+IE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpXG4gIC5zbGljZSgwLCBNQVhfUFJPUEVSVElFUylcbiAgLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBSdW1Qcm9wZXJ0eT4+KChyZXN1bHQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5S2V5ID0gbm9ybWFsaXplVGV4dChrZXksIDY0KTtcblxuICAgIGlmKHByb3BlcnR5S2V5ICYmIFsnYm9vbGVhbicsICdudW1iZXInLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSkge1xuICAgICAgcmVzdWx0W3Byb3BlcnR5S2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBub3JtYWxpemVUZXh0KHZhbHVlLCAyNTYpIDogdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuXG5jb25zdCBzYW5pdGl6ZUV2ZW50ID0gKGV2ZW50OiBSdW1FdmVudElucHV0VHlwZSk6IFJ1bUV2ZW50SW5wdXRUeXBlID0+IHtcbiAgY29uc3QgZXZlbnRJZCA9IG5vcm1hbGl6ZVRleHQoZXZlbnQuZXZlbnRJZCwgMTI4KTtcbiAgY29uc3Qgam91cm5leUlkID0gbm9ybWFsaXplVGV4dChldmVudC5qb3VybmV5SWQsIDEyOCk7XG4gIGNvbnN0IG5hbWUgPSBub3JtYWxpemVUZXh0KGV2ZW50Lm5hbWUsIDEyOCk7XG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVUZXh0KGV2ZW50LnBhdGgsIDI1Nikuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdO1xuICBjb25zdCB0eXBlID0gbm9ybWFsaXplVGV4dChldmVudC50eXBlLCA2NCk7XG5cbiAgaWYoIWV2ZW50SWQgfHwgIWpvdXJuZXlJZCB8fCAhbmFtZSB8fCAhdHlwZSkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfcnVtX2V2ZW50Jyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV2ZW50SWQsXG4gICAgam91cm5leUlkLFxuICAgIG5hbWUsXG4gICAgLi4uKHBhdGggPyB7cGF0aH0gOiB7fSksXG4gICAgcHJvcGVydGllczogc2FuaXRpemVQcm9wZXJ0aWVzKGV2ZW50LnByb3BlcnRpZXMpLFxuICAgIHNlcXVlbmNlOiBNYXRoLm1heCgxLCBNYXRoLmZsb29yKE51bWJlcihldmVudC5zZXF1ZW5jZSkgfHwgMSkpLFxuICAgIHRpbWVzdGFtcDogTWF0aC5tYXgoMCwgTnVtYmVyKGV2ZW50LnRpbWVzdGFtcCkgfHwgRGF0ZS5ub3coKSksXG4gICAgdHlwZVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYWNrUnVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBiYXRjaDogUnVtQmF0Y2hJbnB1dFR5cGVcbik6IFByb21pc2U8UnVtVHJhY2tSZXN1bHRUeXBlPiA9PiB7XG4gIGNvbnN0IGFwcElkID0gbm9ybWFsaXplVGV4dChiYXRjaD8uYXBwSWQsIDEyOCk7XG4gIGNvbnN0IGlucHV0RXZlbnRzID0gQXJyYXkuaXNBcnJheShiYXRjaD8uZXZlbnRzKSA/IGJhdGNoLmV2ZW50cyA6IFtdO1xuXG4gIGlmKCFhcHBJZCB8fCBpbnB1dEV2ZW50cy5sZW5ndGggPT09IDAgfHwgaW5wdXRFdmVudHMubGVuZ3RoID4gTUFYX0JBVENIX1NJWkUpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX3J1bV9iYXRjaCcpO1xuICB9XG5cbiAgY29uc3QgZXZlbnRzID0gaW5wdXRFdmVudHMubWFwKHNhbml0aXplRXZlbnQpO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgRk9SIGV2ZW50IElOICR7ZXZlbnRzfVxuICAgICAgVVBTRVJUIHthcHBJZDogJHthcHBJZH0sIGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWR9XG4gICAgICBJTlNFUlQgTUVSR0UoZXZlbnQsIHthZGRlZDogJHtub3d9LCBhcHBJZDogJHthcHBJZH0sIG1vZGlmaWVkOiAke25vd319KVxuICAgICAgVVBEQVRFIHttb2RpZmllZDogJHtub3d9fVxuICAgICAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlJVTV9MT0dTKX1cbiAgYCk7XG5cbiAgcmV0dXJuIHthY2NlcHRlZDogZXZlbnRzLmxlbmd0aCwgYXBwSWR9O1xufTtcbiJdLCJuYW1lcyI6WyJhcWwiLCJsaXRlcmFsIiwiQ09MTEVDVElPTlMiLCJVc2VyRXJyb3IiLCJ1c2VEYiIsIk1BWF9CQVRDSF9TSVpFIiwiTUFYX1BST1BFUlRJRVMiLCJub3JtYWxpemVUZXh0IiwidmFsdWUiLCJtYXhMZW5ndGgiLCJTdHJpbmciLCJ0cmltIiwic2xpY2UiLCJzYW5pdGl6ZVByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsInByb3BlcnR5S2V5IiwiaW5jbHVkZXMiLCJzYW5pdGl6ZUV2ZW50IiwiZXZlbnQiLCJldmVudElkIiwiam91cm5leUlkIiwibmFtZSIsInBhdGgiLCJzcGxpdCIsInR5cGUiLCJzZXF1ZW5jZSIsIk1hdGgiLCJtYXgiLCJmbG9vciIsIk51bWJlciIsInRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJ0cmFja1J1bSIsImNvbnRleHQiLCJiYXRjaCIsImFwcElkIiwiaW5wdXRFdmVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJldmVudHMiLCJsZW5ndGgiLCJtYXAiLCJkYXRhYmFzZU5hbWUiLCJxdWVyeSIsIlJVTV9MT0dTIiwiYWNjZXB0ZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQVFDLE9BQU8sUUFBTyxlQUFlO0FBRXJDLFNBQVFDLFdBQVcsUUFBTyw4QkFBOEI7QUFDeEQsU0FBUUMsU0FBUyxRQUFPLDZCQUE2QjtBQUNyRCxTQUFR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
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvcnVtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI2LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge1B1dFJ1bUV2ZW50c0NvbW1hbmQsIFJVTUNsaWVudH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJ1bSc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHJhbmRvbVVVSUR9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7VXNlckVycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0QW5hbHl0aWNzQnlJZH0gZnJvbSAnLi9hbmFseXRpY3MuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXdzQ29uZmlnLCBBd3NSdW1BcHBNb25pdG9yQ29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1J1bUJhdGNoSW5wdXRUeXBlLCBSdW1FdmVudElucHV0VHlwZSwgUnVtUHJvcGVydHksIFJ1bVRyYWNrUmVzdWx0VHlwZX0gZnJvbSAnLi4vdHlwZXMvcnVtLnR5cGVzLmpzJztcblxuY29uc3QgTUFYX0JBVENIX1NJWkUgPSA1MDtcbmNvbnN0IE1BWF9QUk9QRVJUSUVTID0gMjA7XG5jb25zdCBNQVhfU0VRVUVOQ0UgPSAxXzAwMF8wMDA7XG5jb25zdCBNQVhfVElNRVNUQU1QX0FHRV9NUyA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XG5jb25zdCBNQVhfVElNRVNUQU1QX0ZVVFVSRV9NUyA9IDUgKiA2MCAqIDEwMDA7XG5jb25zdCBMT0dfUkVURU5USU9OX01TID0gOTAgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuY29uc3QgVVVJRF9QQVRURVJOID0gL15bYS1mXFxkXXs4fS1bYS1mXFxkXXs0fS1bYS1mXFxkXXs0fS1bYS1mXFxkXXs0fS1bYS1mXFxkXXsxMn0kL2k7XG5jb25zdCBCTE9DS0VEX1BST1BFUlRZX0tFWVMgPSBuZXcgU2V0KFtcbiAgJ2FjY291bnRpZCcsXG4gICdhZGRyZXNzJyxcbiAgJ2VtYWlsJyxcbiAgJ2ZpcnN0bmFtZScsXG4gICdmdWxsbmFtZScsXG4gICdnZW9sb2NhdGlvbicsXG4gICdpcCcsXG4gICdpcGFkZHJlc3MnLFxuICAnbGFzdG5hbWUnLFxuICAnbGF0aXR1ZGUnLFxuICAnbG9uZ2l0dWRlJyxcbiAgJ25hbWUnLFxuICAncGhvbmUnLFxuICAncmVmZXJyZXInLFxuICAndG9rZW4nLFxuICAndXNlcmFnZW50JyxcbiAgJ3VzZXJpZCdcbl0pO1xuY29uc3QgRU1BSUxfUEFUVEVSTiA9IC9cXGJbXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rXFxiL2k7XG5jb25zdCBsb2dDb2xsZWN0aW9uSW5pdGlhbGl6YXRpb24gPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4oKTtcblxudHlwZSBSdW1BcHBNb25pdG9yTWFwID0gUmVjb3JkPHN0cmluZywgQXdzUnVtQXBwTW9uaXRvckNvbmZpZyB8IHN0cmluZz47XG50eXBlIFJ1bU1ldGFkYXRhID0gUmVjb3JkPHN0cmluZywgUnVtUHJvcGVydHk+O1xudHlwZSBSZXNvbHZlZFJ1bU1vbml0b3IgPSB7XG4gIHJlYWRvbmx5IGFwcElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vbml0b3I6IEF3c1J1bUFwcE1vbml0b3JDb25maWc7XG59O1xuXG5jb25zdCBSVU1fTUVUQURBVEFfUFJPUEVSVFlfS0VZUzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICBicm93c2VyTGFuZ3VhZ2U6IFsnYnJvd3Nlcmxhbmd1YWdlJ10sXG4gIGJyb3dzZXJOYW1lOiBbJ2Jyb3dzZXJuYW1lJ10sXG4gIGJyb3dzZXJWZXJzaW9uOiBbJ2Jyb3dzZXJ2ZXJzaW9uJ10sXG4gIGRldmljZVR5cGU6IFsnZGV2aWNldHlwZSddLFxuICBpbnRlcmFjdGlvbjogWydpbnRlcmFjdGlvbiddLFxuICBvc05hbWU6IFsnb3NuYW1lJ10sXG4gIG9zVmVyc2lvbjogWydvc3ZlcnNpb24nXSxcbiAgcGFnZUlkOiBbJ3BhZ2VpZCddLFxuICBwYXJlbnRQYWdlSWQ6IFsncGFyZW50cGFnZWlkJywgJ3BhcmVudHBhZ2UnXVxufTtcblxuY29uc3Qgbm9ybWFsaXplVGV4dCA9ICh2YWx1ZTogdW5rbm93biwgbWF4TGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcgPT5cbiAgU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKCkuc2xpY2UoMCwgbWF4TGVuZ3RoKTtcblxuY29uc3Qgbm9ybWFsaXplUHJvcGVydHlLZXkgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PlxuICB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XS9nLCAnJyk7XG5cbmNvbnN0IG5vcm1hbGl6ZURvbWFpbiA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiBub3JtYWxpemVUZXh0KHZhbHVlLCAyNTMpXG4gIC5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcLy9pLCAnJylcbiAgLnNwbGl0KCcvJylbMF1cbiAgLnNwbGl0KCc6JylbMF07XG5cbmNvbnN0IGdldEF3c1V1aWQgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmKFVVSURfUEFUVEVSTi50ZXN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUodmFsdWUpLmRpZ2VzdCgnaGV4Jyk7XG4gIHJldHVybiBgJHtoYXNoLnNsaWNlKDAsIDgpfS0ke2hhc2guc2xpY2UoOCwgMTIpfS0ke2hhc2guc2xpY2UoMTIsIDE2KX0tJHtoYXNoLnNsaWNlKDE2LCAyMCl9LSR7aGFzaC5zbGljZSgyMCwgMzIpfWA7XG59O1xuXG5jb25zdCBwYXJzZUVudmlyb25tZW50QXBwTW9uaXRvcnMgPSAoKTogUnVtQXBwTW9uaXRvck1hcCA9PiB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuQVdTX1JVTV9BUFBfTU9OSVRPUlM7XG5cbiAgaWYoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICByZXR1cm4gcGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHBhcnNlZCkgPyBwYXJzZWQgOiB7fTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9ydW1fY29uZmlnJyk7XG4gIH1cbn07XG5cbmNvbnN0IGdldEFwcE1vbml0b3IgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGFuYWx5dGljc0lkOiBzdHJpbmdcbik6IFByb21pc2U8UmVzb2x2ZWRSdW1Nb25pdG9yPiA9PiB7XG4gIGNvbnN0IGNvbmZpZ3VyZWRNb25pdG9ycyA9IGNvbnRleHQuY29uZmlnPy5hd3M/LnJ1bT8uYXBwTW9uaXRvcnMgfHxcbiAgICBDb25maWcuZ2V0PFJ1bUFwcE1vbml0b3JNYXA+KCdhd3MucnVtLmFwcE1vbml0b3JzJywge30pO1xuICBjb25zdCBlbnZpcm9ubWVudE1vbml0b3JzID0gcGFyc2VFbnZpcm9ubWVudEFwcE1vbml0b3JzKCk7XG4gIGNvbnN0IGNvbmZpZ3VyZWRNb25pdG9yID0gZW52aXJvbm1lbnRNb25pdG9yc1thbmFseXRpY3NJZF0gfHwgY29uZmlndXJlZE1vbml0b3JzW2FuYWx5dGljc0lkXTtcblxuICBpZighY29uZmlndXJlZE1vbml0b3IpIHtcbiAgICBjb25zdCBhbmFseXRpY3MgPSBhd2FpdCBnZXRBbmFseXRpY3NCeUlkKGNvbnRleHQsIGFuYWx5dGljc0lkKTtcblxuICAgIGlmKCFhbmFseXRpY3MpIHtcbiAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfcnVtX2FwcCcpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhcHBJZDogYW5hbHl0aWNzLmFwcElkLFxuICAgICAgbW9uaXRvcjoge1xuICAgICAgICBkb21haW46IGFuYWx5dGljcy5kb21haW4sXG4gICAgICAgIGlkOiBhbmFseXRpY3MubW9uaXRvcklkLFxuICAgICAgICBuYW1lOiBhbmFseXRpY3MubW9uaXRvck5hbWUsXG4gICAgICAgIHZlcnNpb246IG5vcm1hbGl6ZVRleHQoXG4gICAgICAgICAgY29udGV4dC5jb25maWc/LmRldGFpbHM/LnZlcnNpb24gfHwgQ29uZmlnLmdldCgnZGV0YWlscy52ZXJzaW9uJykgfHwgJzEuMC4wJyxcbiAgICAgICAgICAyNTVcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb25zdCBtb25pdG9yID0gdHlwZW9mIGNvbmZpZ3VyZWRNb25pdG9yID09PSAnc3RyaW5nJyA/IHtpZDogY29uZmlndXJlZE1vbml0b3J9IDogY29uZmlndXJlZE1vbml0b3I7XG4gIGNvbnN0IG1vbml0b3JJZCA9IG5vcm1hbGl6ZVRleHQobW9uaXRvcj8uaWQsIDM2KTtcblxuICBpZighbW9uaXRvcklkIHx8ICFVVUlEX1BBVFRFUk4udGVzdChtb25pdG9ySWQpKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcignaW52YWxpZF9ydW1fYXBwJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFwcElkOiBhbmFseXRpY3NJZCxcbiAgICBtb25pdG9yOiB7XG4gICAgICAuLi5tb25pdG9yLFxuICAgICAgZG9tYWluOiBub3JtYWxpemVEb21haW4oXG4gICAgICAgIG1vbml0b3IuZG9tYWluIHx8IGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy51cmwgfHwgQ29uZmlnLmdldCgnZGV0YWlscy51cmwnKSB8fCBhbmFseXRpY3NJZFxuICAgICAgKSxcbiAgICAgIGlkOiBtb25pdG9ySWQsXG4gICAgICBuYW1lOiBub3JtYWxpemVUZXh0KG1vbml0b3IubmFtZSB8fCBhbmFseXRpY3NJZCwgMjU1KSxcbiAgICAgIHZlcnNpb246IG5vcm1hbGl6ZVRleHQoXG4gICAgICAgIG1vbml0b3IudmVyc2lvbiB8fCBjb250ZXh0LmNvbmZpZz8uZGV0YWlscz8udmVyc2lvbiB8fCBDb25maWcuZ2V0KCdkZXRhaWxzLnZlcnNpb24nKSB8fCAnMS4wLjAnLFxuICAgICAgICAyNTVcbiAgICAgIClcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBnZXRSdW1DbGllbnQgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFJVTUNsaWVudCA9PiB7XG4gIGNvbnN0IGF3c0NvbmZpZzogQXdzQ29uZmlnID0gY29udGV4dC5jb25maWc/LmF3cyB8fCBDb25maWcuZ2V0PEF3c0NvbmZpZz4oJ2F3cycsIHt9KTtcbiAgY29uc3Qge2FjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIHNlc3Npb25Ub2tlbn0gPSBhd3NDb25maWcuY3JlZGVudGlhbHMgfHwge307XG4gIGNvbnN0IHVzZXNSdW50aW1lQ3JlZGVudGlhbHMgPSBCb29sZWFuKFxuICAgIHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOICYmXG4gICAgYWNjZXNzS2V5SWQgPT09IHByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEICYmXG4gICAgc2VjcmV0QWNjZXNzS2V5ID09PSBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVlcbiAgKTtcbiAgY29uc3QgY3JlZGVudGlhbHMgPSBhY2Nlc3NLZXlJZCAmJiBzZWNyZXRBY2Nlc3NLZXkgJiYgIXVzZXNSdW50aW1lQ3JlZGVudGlhbHMgPyB7XG4gICAgYWNjZXNzS2V5SWQsXG4gICAgc2VjcmV0QWNjZXNzS2V5LFxuICAgIC4uLihzZXNzaW9uVG9rZW4gPyB7c2Vzc2lvblRva2VufSA6IHt9KVxuICB9IDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBuZXcgUlVNQ2xpZW50KHtcbiAgICAuLi4oY3JlZGVudGlhbHMgPyB7Y3JlZGVudGlhbHN9IDoge30pLFxuICAgIC4uLihhd3NDb25maWcucmVnaW9uID8ge3JlZ2lvbjogYXdzQ29uZmlnLnJlZ2lvbn0gOiB7fSlcbiAgfSk7XG59O1xuXG5jb25zdCBzYW5pdGl6ZVRpbWVzdGFtcCA9ICh2YWx1ZTogdW5rbm93biwgbm93OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBOdW1iZXIodmFsdWUpO1xuXG4gIGlmKFxuICAgICFOdW1iZXIuaXNGaW5pdGUodGltZXN0YW1wKSB8fFxuICAgIHRpbWVzdGFtcCA8IG5vdyAtIE1BWF9USU1FU1RBTVBfQUdFX01TIHx8XG4gICAgdGltZXN0YW1wID4gbm93ICsgTUFYX1RJTUVTVEFNUF9GVVRVUkVfTVNcbiAgKSB7XG4gICAgcmV0dXJuIG5vdztcbiAgfVxuXG4gIHJldHVybiBNYXRoLmZsb29yKHRpbWVzdGFtcCk7XG59O1xuXG5jb25zdCBzYW5pdGl6ZVByb3BlcnRpZXMgPSAoXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFJ1bVByb3BlcnR5PiA9IHt9XG4pOiBSZWNvcmQ8c3RyaW5nLCBSdW1Qcm9wZXJ0eT4gPT4gT2JqZWN0LmVudHJpZXMocHJvcGVydGllcylcbiAgLnNsaWNlKDAsIE1BWF9QUk9QRVJUSUVTKVxuICAucmVkdWNlPFJlY29yZDxzdHJpbmcsIFJ1bVByb3BlcnR5Pj4oKHJlc3VsdCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlLZXkgPSBub3JtYWxpemVUZXh0KGtleSwgNjQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9wZXJ0eUtleSA9IG5vcm1hbGl6ZVByb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcblxuICAgIGlmKFxuICAgICAgcHJvcGVydHlLZXkgJiZcbiAgICAgICFCTE9DS0VEX1BST1BFUlRZX0tFWVMuaGFzKG5vcm1hbGl6ZWRQcm9wZXJ0eUtleSkgJiZcbiAgICAgIFsnYm9vbGVhbicsICdudW1iZXInLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKVxuICAgICkge1xuICAgICAgaWYodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB0ZXh0VmFsdWUgPSBub3JtYWxpemVUZXh0KHZhbHVlLCAyNTYpO1xuXG4gICAgICAgIGlmKHRleHRWYWx1ZSAmJiAhRU1BSUxfUEFUVEVSTi50ZXN0KHRleHRWYWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHRbcHJvcGVydHlLZXldID0gdGV4dFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICByZXN1bHRbcHJvcGVydHlLZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuXG5jb25zdCBnZXRSdW1NZXRhZGF0YSA9IChcbiAgYXBwSWQ6IHN0cmluZyxcbiAgZG9tYWluOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFJ1bVByb3BlcnR5PlxuKTogUnVtTWV0YWRhdGEgPT4ge1xuICBjb25zdCBub3JtYWxpemVkUHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBSdW1Qcm9wZXJ0eT4+KFxuICAgIChyZXN1bHQsIFtrZXksIHZhbHVlXSkgPT4gKHsuLi5yZXN1bHQsIFtub3JtYWxpemVQcm9wZXJ0eUtleShrZXkpXTogdmFsdWV9KSxcbiAgICB7fVxuICApO1xuXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhSVU1fTUVUQURBVEFfUFJPUEVSVFlfS0VZUykucmVkdWNlPFJ1bU1ldGFkYXRhPigobWV0YWRhdGEsIFtrZXksIGFsaWFzZXNdKSA9PiB7XG4gICAgY29uc3QgYWxpYXMgPSBhbGlhc2VzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gbm9ybWFsaXplZFByb3BlcnRpZXNbY2FuZGlkYXRlXSAhPT0gdW5kZWZpbmVkKTtcblxuICAgIGlmKGFsaWFzKSB7XG4gICAgICBtZXRhZGF0YVtrZXldID0gbm9ybWFsaXplZFByb3BlcnRpZXNbYWxpYXNdO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfSwge1xuICAgIGFwcGxpY2F0aW9uSWQ6IGFwcElkLFxuICAgIC4uLihkb21haW4gPyB7ZG9tYWlufSA6IHt9KSxcbiAgICBwbGF0Zm9ybVR5cGU6ICd3ZWInLFxuICAgIHZlcnNpb246ICcxLjAuMCdcbiAgfSk7XG59O1xuXG5jb25zdCBzYW5pdGl6ZUV2ZW50ID0gKGV2ZW50OiBSdW1FdmVudElucHV0VHlwZSwgbm93OiBudW1iZXIpOiBSdW1FdmVudElucHV0VHlwZSA9PiB7XG4gIGNvbnN0IGlucHV0RXZlbnRJZCA9IG5vcm1hbGl6ZVRleHQoZXZlbnQuZXZlbnRJZCwgMTI4KTtcbiAgY29uc3Qgam91cm5leUlkID0gbm9ybWFsaXplVGV4dChldmVudC5qb3VybmV5SWQsIDEyOCk7XG4gIGNvbnN0IG5hbWUgPSBub3JtYWxpemVUZXh0KGV2ZW50Lm5hbWUsIDEyOCk7XG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVUZXh0KGV2ZW50LnBhdGgsIDI1Nikuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdO1xuICBjb25zdCB0eXBlID0gbm9ybWFsaXplVGV4dChldmVudC50eXBlLCAyNTYpLnJlcGxhY2UoL1teYS16QS1aMC05Xy4tXS9nLCAnXycpO1xuXG4gIGlmKCFpbnB1dEV2ZW50SWQgfHwgIWpvdXJuZXlJZCB8fCAhbmFtZSB8fCAhdHlwZSkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ2ludmFsaWRfcnVtX2V2ZW50Jyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV2ZW50SWQ6IGdldEF3c1V1aWQoaW5wdXRFdmVudElkKSxcbiAgICBqb3VybmV5SWQ6IGdldEF3c1V1aWQoam91cm5leUlkKSxcbiAgICBuYW1lLFxuICAgIC4uLihwYXRoID8ge3BhdGh9IDoge30pLFxuICAgIHByb3BlcnRpZXM6IHNhbml0aXplUHJvcGVydGllcyhldmVudC5wcm9wZXJ0aWVzKSxcbiAgICBzZXF1ZW5jZTogTWF0aC5taW4oTUFYX1NFUVVFTkNFLCBNYXRoLm1heCgxLCBNYXRoLmZsb29yKE51bWJlcihldmVudC5zZXF1ZW5jZSkgfHwgMSkpKSxcbiAgICB0aW1lc3RhbXA6IHNhbml0aXplVGltZXN0YW1wKGV2ZW50LnRpbWVzdGFtcCwgbm93KSxcbiAgICB0eXBlXG4gIH07XG59O1xuXG5jb25zdCBncm91cEV2ZW50c0J5Sm91cm5leSA9IChldmVudHM6IFJ1bUV2ZW50SW5wdXRUeXBlW10pOiBNYXA8c3RyaW5nLCBSdW1FdmVudElucHV0VHlwZVtdPiA9PlxuICBldmVudHMucmVkdWNlPE1hcDxzdHJpbmcsIFJ1bUV2ZW50SW5wdXRUeXBlW10+PigoZ3JvdXBzLCBldmVudCkgPT4ge1xuICAgIGNvbnN0IGpvdXJuZXlFdmVudHMgPSBncm91cHMuZ2V0KGV2ZW50LmpvdXJuZXlJZCkgfHwgW107XG4gICAgam91cm5leUV2ZW50cy5wdXNoKGV2ZW50KTtcbiAgICBncm91cHMuc2V0KGV2ZW50LmpvdXJuZXlJZCwgam91cm5leUV2ZW50cyk7XG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfSwgbmV3IE1hcCgpKTtcblxuY29uc3QgaW5pdGlhbGl6ZUxvZ0NvbGxlY3Rpb24gPSBhc3luYyAoZGF0YWJhc2VOYW1lPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGNhY2hlS2V5ID0gZGF0YWJhc2VOYW1lIHx8ICdyZWFrdG9yJztcbiAgY29uc3QgZXhpc3RpbmdJbml0aWFsaXphdGlvbiA9IGxvZ0NvbGxlY3Rpb25Jbml0aWFsaXphdGlvbi5nZXQoY2FjaGVLZXkpO1xuXG4gIGlmKGV4aXN0aW5nSW5pdGlhbGl6YXRpb24pIHtcbiAgICByZXR1cm4gZXhpc3RpbmdJbml0aWFsaXphdGlvbjtcbiAgfVxuXG4gIGNvbnN0IGluaXRpYWxpemF0aW9uID0gKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oQ09MTEVDVElPTlMuTE9HUyk7XG5cbiAgICBpZighYXdhaXQgY29sbGVjdGlvbi5leGlzdHMoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZGF0YWJhc2UuY3JlYXRlQ29sbGVjdGlvbihDT0xMRUNUSU9OUy5MT0dTKTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgaWYoIWF3YWl0IGNvbGxlY3Rpb24uZXhpc3RzKCkpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGNvbGxlY3Rpb24uZW5zdXJlSW5kZXgoe1xuICAgICAgICBmaWVsZHM6IFsnYXBwSWQnLCAnZXZlbnRJZCddLFxuICAgICAgICBuYW1lOiAnbG9nc19hcHBfZXZlbnQnLFxuICAgICAgICB0eXBlOiAncGVyc2lzdGVudCcsXG4gICAgICAgIHVuaXF1ZTogdHJ1ZVxuICAgICAgfSksXG4gICAgICBjb2xsZWN0aW9uLmVuc3VyZUluZGV4KHtcbiAgICAgICAgZXhwaXJlQWZ0ZXI6IDAsXG4gICAgICAgIGZpZWxkczogWydleHBpcmVzQXQnXSxcbiAgICAgICAgbmFtZTogJ2xvZ3NfZXhwaXJ5JyxcbiAgICAgICAgdHlwZTogJ3R0bCdcbiAgICAgIH0pXG4gICAgXSk7XG4gIH0pKCk7XG5cbiAgbG9nQ29sbGVjdGlvbkluaXRpYWxpemF0aW9uLnNldChjYWNoZUtleSwgaW5pdGlhbGl6YXRpb24pO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgaW5pdGlhbGl6YXRpb247XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dDb2xsZWN0aW9uSW5pdGlhbGl6YXRpb24uZGVsZXRlKGNhY2hlS2V5KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgcGVyc2lzdFJ1bUV2ZW50cyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgYW5hbHl0aWNzSWQ6IHN0cmluZyxcbiAgYXBwSWQ6IHN0cmluZyxcbiAgZXZlbnRzOiBSdW1FdmVudElucHV0VHlwZVtdLFxuICBub3c6IG51bWJlclxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGF3YWl0IGluaXRpYWxpemVMb2dDb2xsZWN0aW9uKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgY29sbGVjdGlvbiA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKENPTExFQ1RJT05TLkxPR1MpO1xuICBjb25zdCBleHBpcmVzQXQgPSBNYXRoLmZsb29yKChub3cgKyBMT0dfUkVURU5USU9OX01TKSAvIDEwMDApO1xuXG4gIGF3YWl0IFByb21pc2UuYWxsKGV2ZW50cy5tYXAoKGV2ZW50KSA9PiBjb2xsZWN0aW9uLnNhdmUoe1xuICAgIF9rZXk6IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShgJHthcHBJZH06JHtldmVudC5ldmVudElkfWApLmRpZ2VzdCgnaGV4JyksXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBhbmFseXRpY3NJZCxcbiAgICBhcHBJZCxcbiAgICBldmVudElkOiBldmVudC5ldmVudElkLFxuICAgIGV4cGlyZXNBdCxcbiAgICBqb3VybmV5SWQ6IGV2ZW50LmpvdXJuZXlJZCxcbiAgICBuYW1lOiBldmVudC5uYW1lLFxuICAgIC4uLihldmVudC5wYXRoID8ge3BhdGg6IGV2ZW50LnBhdGh9IDoge30pLFxuICAgIHByb3BlcnRpZXM6IGV2ZW50LnByb3BlcnRpZXMsXG4gICAgc2VxdWVuY2U6IGV2ZW50LnNlcXVlbmNlLFxuICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgIHR5cGU6IGV2ZW50LnR5cGVcbiAgfSwge292ZXJ3cml0ZU1vZGU6ICdpZ25vcmUnLCBzaWxlbnQ6IHRydWV9KSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYWNrUnVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBiYXRjaDogUnVtQmF0Y2hJbnB1dFR5cGVcbik6IFByb21pc2U8UnVtVHJhY2tSZXN1bHRUeXBlPiA9PiB7XG4gIGNvbnN0IGFuYWx5dGljc0lkID0gbm9ybWFsaXplVGV4dChiYXRjaD8uYW5hbHl0aWNzSWQsIDEyOCk7XG4gIGNvbnN0IGlucHV0RXZlbnRzID0gQXJyYXkuaXNBcnJheShiYXRjaD8uZXZlbnRzKSA/IGJhdGNoLmV2ZW50cyA6IFtdO1xuXG4gIGlmKCFhbmFseXRpY3NJZCB8fCBpbnB1dEV2ZW50cy5sZW5ndGggPT09IDAgfHwgaW5wdXRFdmVudHMubGVuZ3RoID4gTUFYX0JBVENIX1NJWkUpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdpbnZhbGlkX3J1bV9iYXRjaCcpO1xuICB9XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qge2FwcElkLCBtb25pdG9yfSA9IGF3YWl0IGdldEFwcE1vbml0b3IoY29udGV4dCwgYW5hbHl0aWNzSWQpO1xuICBjb25zdCBldmVudHMgPSBpbnB1dEV2ZW50cy5tYXAoKGV2ZW50KSA9PiBzYW5pdGl6ZUV2ZW50KGV2ZW50LCBub3cpKTtcbiAgY29uc3QgZXZlbnRzQnlKb3VybmV5ID0gZ3JvdXBFdmVudHNCeUpvdXJuZXkoZXZlbnRzKTtcbiAgY29uc3QgY2xpZW50ID0gZ2V0UnVtQ2xpZW50KGNvbnRleHQpO1xuXG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBwZXJzaXN0UnVtRXZlbnRzKGNvbnRleHQsIGFuYWx5dGljc0lkLCBhcHBJZCwgZXZlbnRzLCBub3cpLFxuICAgIC4uLkFycmF5LmZyb20oZXZlbnRzQnlKb3VybmV5LmVudHJpZXMoKSkubWFwKChbam91cm5leUlkLCBqb3VybmV5RXZlbnRzXSkgPT5cbiAgICAgIGNsaWVudC5zZW5kKG5ldyBQdXRSdW1FdmVudHNDb21tYW5kKHtcbiAgICAgIC4uLihtb25pdG9yLmFsaWFzID8ge0FsaWFzOiBtb25pdG9yLmFsaWFzfSA6IHt9KSxcbiAgICAgIEFwcE1vbml0b3JEZXRhaWxzOiB7XG4gICAgICAgIGlkOiBtb25pdG9yLmlkLFxuICAgICAgICBuYW1lOiBtb25pdG9yLm5hbWUsXG4gICAgICAgIHZlcnNpb246IG1vbml0b3IudmVyc2lvblxuICAgICAgfSxcbiAgICAgIEJhdGNoSWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIElkOiBtb25pdG9yLmlkLFxuICAgICAgUnVtRXZlbnRzOiBqb3VybmV5RXZlbnRzLm1hcCgoZXZlbnQpID0+ICh7XG4gICAgICAgIGRldGFpbHM6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBhcHBJZCxcbiAgICAgICAgICBuYW1lOiBldmVudC5uYW1lLFxuICAgICAgICAgIC4uLihldmVudC5wYXRoID8ge3BhdGg6IGV2ZW50LnBhdGh9IDoge30pLFxuICAgICAgICAgIHByb3BlcnRpZXM6IGV2ZW50LnByb3BlcnRpZXMsXG4gICAgICAgICAgc2VxdWVuY2U6IGV2ZW50LnNlcXVlbmNlXG4gICAgICAgIH0pLFxuICAgICAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KGdldFJ1bU1ldGFkYXRhKFxuICAgICAgICAgIGFwcElkLFxuICAgICAgICAgIG1vbml0b3IuZG9tYWluLFxuICAgICAgICAgIGV2ZW50LnByb3BlcnRpZXMgYXMgUmVjb3JkPHN0cmluZywgUnVtUHJvcGVydHk+XG4gICAgICAgICkpLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKGV2ZW50LnRpbWVzdGFtcCksXG4gICAgICAgIHR5cGU6IGV2ZW50LnR5cGVcbiAgICAgIH0pKSxcbiAgICAgIFVzZXJEZXRhaWxzOiB7XG4gICAgICAgIHNlc3Npb25JZDogam91cm5leUlkLFxuICAgICAgICB1c2VySWQ6IGpvdXJuZXlJZFxuICAgICAgfVxuICAgICAgfSkpXG4gICAgKVxuICBdKTtcblxuICByZXR1cm4ge2FjY2VwdGVkOiBldmVudHMubGVuZ3RoLCBhbmFseXRpY3NJZH07XG59O1xuIl0sIm5hbWVzIjpbIlB1dFJ1bUV2ZW50c0NvbW1hbmQiLCJSVU1DbGllbnQiLCJjcmVhdGVIYXNoIiwicmFuZG9tVVVJRCIsIkNvbmZpZyIsIkNPTExFQ1RJT05TIiwiVXNlckVycm9yIiwidXNlRGIiLCJnZXRBbmFseXRpY3NCeUlkIiwiTUFYX0JBVENIX1NJWkUiLCJNQVhfUFJPUEVSVElFUyIsIk1BWF9TRVFVRU5DRSIsIk1BWF9USU1FU1RBTVBfQUdFX01TIiwiTUFYX1RJTUVTVEFNUF9GVVRVUkVfTVMiLCJMT0dfUkVURU5USU9OX01TIiwiVVVJRF9QQVRURVJOIiwiQkxPQ0tFRF9QUk9QRVJUWV9LRVlTIiwiU2V0IiwiRU1BSUxfUEFUVEVSTiIsImxvZ0NvbGxlY3Rpb25Jbml0aWFsaXphdGlvbiIsIk1hcCIsIlJVTV9NRVRBREFUQV9QUk9QRVJUWV9LRVlTIiwiYnJvd3Nlckxhbmd1YWdlIiwiYnJvd3Nlck5hbWUiLCJicm93c2VyVmVyc2lvbiIsImRldmljZVR5cGUiLCJpbnRlcmFjdGlvbiIsIm9zTmFtZSIsIm9zVmVyc2lvbiIsInBhZ2VJZCIsInBhcmVudFBhZ2VJZCIsIm5vcm1hbGl6ZVRleHQiLCJ2YWx1ZSIsIm1heExlbmd0aCIsIlN0cmluZyIsInRyaW0iLCJzbGljZSIsIm5vcm1hbGl6ZVByb3BlcnR5S2V5IiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwibm9ybWFsaXplRG9tYWluIiwic3BsaXQiLCJnZXRBd3NVdWlkIiwidGVzdCIsImhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJwYXJzZUVudmlyb25tZW50QXBwTW9uaXRvcnMiLCJwcm9jZXNzIiwiZW52IiwiQVdTX1JVTV9BUFBfTU9OSVRPUlMiLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRBcHBNb25pdG9yIiwiY29udGV4dCIsImFuYWx5dGljc0lkIiwiY29uZmlndXJlZE1vbml0b3JzIiwiY29uZmlnIiwiYXdzIiwicnVtIiwiYXBwTW9uaXRvcnMiLCJnZXQiLCJlbnZpcm9ubWVudE1vbml0b3JzIiwiY29uZmlndXJlZE1vbml0b3IiLCJhbmFseXRpY3MiLCJhcHBJZCIsIm1vbml0b3IiLCJkb21haW4iLCJpZCIsIm1vbml0b3JJZCIsIm5hbWUiLCJtb25pdG9yTmFtZSIsInZlcnNpb24iLCJkZXRhaWxzIiwidXJsIiwiZ2V0UnVtQ2xpZW50IiwiYXdzQ29uZmlnIiwiYWNjZXNzS2V5SWQiLCJzZWNyZXRBY2Nlc3NLZXkiLCJzZXNzaW9uVG9rZW4iLCJjcmVkZW50aWFscyIsInVzZXNSdW50aW1lQ3JlZGVudGlhbHMiLCJCb29sZWFuIiwiQVdTX1NFU1NJT05fVE9LRU4iLCJBV1NfQUNDRVNTX0tFWV9JRCIsIkFXU19TRUNSRVRfQUNDRVNTX0tFWSIsInVuZGVmaW5lZCIsInJlZ2lvbiIsInNhbml0aXplVGltZXN0YW1wIiwibm93IiwidGltZXN0YW1wIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJNYXRoIiwiZmxvb3IiLCJzYW5pdGl6ZVByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsInByb3BlcnR5S2V5Iiwibm9ybWFsaXplZFByb3BlcnR5S2V5IiwiaGFzIiwiaW5jbHVkZXMiLCJ0ZXh0VmFsdWUiLCJnZXRSdW1NZXRhZGF0YSIsIm5vcm1hbGl6ZWRQcm9wZXJ0aWVzIiwibWV0YWRhdGEiLCJhbGlhc2VzIiwiYWxpYXMiLCJmaW5kIiwiY2FuZGlkYXRlIiwiYXBwbGljYXRpb25JZCIsInBsYXRmb3JtVHlwZSIsInNhbml0aXplRXZlbnQiLCJldmVudCIsImlucHV0RXZlbnRJZCIsImV2ZW50SWQiLCJqb3VybmV5SWQiLCJwYXRoIiwidHlwZSIsInNlcXVlbmNlIiwibWluIiwibWF4IiwiZ3JvdXBFdmVudHNCeUpvdXJuZXkiLCJldmVudHMiLCJncm91cHMiLCJqb3VybmV5RXZlbnRzIiwicHVzaCIsInNldCIsImluaXRpYWxpemVMb2dDb2xsZWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwiY2FjaGVLZXkiLCJleGlzdGluZ0luaXRpYWxpemF0aW9uIiwiaW5pdGlhbGl6YXRpb24iLCJkYXRhYmFzZSIsImNvbGxlY3Rpb24iLCJMT0dTIiwiZXhpc3RzIiwiY3JlYXRlQ29sbGVjdGlvbiIsImVycm9yIiwiUHJvbWlzZSIsImFsbCIsImVuc3VyZUluZGV4IiwiZmllbGRzIiwidW5pcXVlIiwiZXhwaXJlQWZ0ZXIiLCJkZWxldGUiLCJwZXJzaXN0UnVtRXZlbnRzIiwiZXhwaXJlc0F0IiwibWFwIiwic2F2ZSIsIl9rZXkiLCJhZGRlZCIsIm92ZXJ3cml0ZU1vZGUiLCJzaWxlbnQiLCJ0cmFja1J1bSIsImJhdGNoIiwiaW5wdXRFdmVudHMiLCJsZW5ndGgiLCJEYXRlIiwiZXZlbnRzQnlKb3VybmV5IiwiY2xpZW50IiwiZnJvbSIsInNlbmQiLCJBbGlhcyIsIkFwcE1vbml0b3JEZXRhaWxzIiwiQmF0Y2hJZCIsIklkIiwiUnVtRXZlbnRzIiwic3RyaW5naWZ5IiwiVXNlckRldGFpbHMiLCJzZXNzaW9uSWQiLCJ1c2VySWQiLCJhY2NlcHRlZCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsbUJBQW1CLEVBQUVDLFNBQVMsUUFBTyxzQkFBc0I7QUFDbkUsU0FBUUMsVUFBVSxFQUFFQyxVQUFVLFFBQU8sU0FBUztBQUU5QyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxT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
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */
5
5
  import { AbortMultipartUploadCommandInput, AbortMultipartUploadCommandOutput, CompleteMultipartUploadCommandInput, CompleteMultipartUploadCommandOutput, CreateMultipartUploadCommandInput, CreateMultipartUploadCommandOutput, DeleteObjectCommandInput, DeleteObjectCommandOutput, DeleteObjectsCommandInput, DeleteObjectsCommandOutput, GetObjectCommandInput, GetObjectCommandOutput, HeadObjectCommandInput, HeadObjectCommandOutput, PutObjectCommandInput, PutObjectCommandOutput, UploadPartCommandInput } from '@aws-sdk/client-s3';
6
6
  export declare const s3GetBucket: () => string | undefined;
package/lib/actions/s3.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { AbortMultipartUploadCommand, CompleteMultipartUploadCommand, CreateMultipartUploadCommand, GetObjectCommand, S3, UploadPartCommand } from '@aws-sdk/client-s3';
5
5
  import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
6
6
  import { Config } from '../config.js';
@@ -120,4 +120,4 @@ export const s3AbortMultipartUpload = async (params)=>{
120
120
  return await s3.send(new AbortMultipartUploadCommand(params));
121
121
  };
122
122
 
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvczMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7XG4gIEFib3J0TXVsdGlwYXJ0VXBsb2FkQ29tbWFuZCxcbiAgQWJvcnRNdWx0aXBhcnRVcGxvYWRDb21tYW5kSW5wdXQsXG4gIEFib3J0TXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dCxcbiAgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kLFxuICBDb21wbGV0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRJbnB1dCxcbiAgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kLFxuICBDcmVhdGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kSW5wdXQsXG4gIENyZWF0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRPdXRwdXQsXG4gIERlbGV0ZU9iamVjdENvbW1hbmRJbnB1dCxcbiAgRGVsZXRlT2JqZWN0Q29tbWFuZE91dHB1dCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQsXG4gIEdldE9iamVjdENvbW1hbmQsXG4gIEdldE9iamVjdENvbW1hbmRJbnB1dCxcbiAgR2V0T2JqZWN0Q29tbWFuZE91dHB1dCxcbiAgSGVhZE9iamVjdENvbW1hbmRJbnB1dCxcbiAgSGVhZE9iamVjdENvbW1hbmRPdXRwdXQsXG4gIFB1dE9iamVjdENvbW1hbmRJbnB1dCxcbiAgUHV0T2JqZWN0Q29tbWFuZE91dHB1dCxcbiAgUzMsXG4gIFVwbG9hZFBhcnRDb21tYW5kLFxuICBVcGxvYWRQYXJ0Q29tbWFuZElucHV0XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge2dldFNpZ25lZFVybH0gZnJvbSAnQGF3cy1zZGsvczMtcmVxdWVzdC1wcmVzaWduZXInO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Z2V0QXdzQ3JlZGVudGlhbHN9IGZyb20gJy4uL3V0aWxzL2F3c1V0aWxzLmpzJztcblxuY29uc3QgZ2V0UzNCdWNrZXQgPSAoKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+XG4gIENvbmZpZy5nZXQoJ2F3cy5zMy5CdWNrZXQnKSB8fCBDb25maWcuZ2V0KCdhd3MuczMuYnVja2V0Jyk7XG5cbmNvbnN0IGNyZWF0ZVMzQ2xpZW50ID0gKCk6IFMzID0+IG5ldyBTMyh7XG4gIGNyZWRlbnRpYWxzOiBnZXRBd3NDcmVkZW50aWFscygpLFxuICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxufSk7XG5cbmV4cG9ydCBjb25zdCBzM0dldEJ1Y2tldCA9ICgpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4gZ2V0UzNCdWNrZXQoKTtcblxuLy8gY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdzMyc7XG5leHBvcnQgY29uc3QgczNHZXQgPSAocGFyYW1zOiBHZXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdENvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzMzogUzMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gICAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICAgIHBhcmFtcy5CdWNrZXQgPSBnZXRTM0J1Y2tldCgpO1xuICAgIH1cblxuICAgIHMzLmdldE9iamVjdChwYXJhbXMsIChlcnJvcjogRXJyb3IsIG91dHB1dD86IEdldE9iamVjdENvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQgYXMgR2V0T2JqZWN0Q29tbWFuZE91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgczNIZWFkID0gKHBhcmFtczogSGVhZE9iamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8SGVhZE9iamVjdENvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzMzogUzMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gICAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICAgIHBhcmFtcy5CdWNrZXQgPSBnZXRTM0J1Y2tldCgpO1xuICAgIH1cblxuICAgIHMzLmhlYWRPYmplY3QocGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ/OiBIZWFkT2JqZWN0Q29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQgYXMgSGVhZE9iamVjdENvbW1hbmRPdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IHMzUHV0ID0gKHBhcmFtczogUHV0T2JqZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRPYmplY3RDb21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgczMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gICAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICAgIHBhcmFtcy5CdWNrZXQgPSBnZXRTM0J1Y2tldCgpO1xuICAgIH1cblxuICAgIGlmKCFwYXJhbXMuU3RvcmFnZUNsYXNzKSB7XG4gICAgICBwYXJhbXMuU3RvcmFnZUNsYXNzID0gJ1JFRFVDRURfUkVEVU5EQU5DWSc7XG4gICAgfVxuXG4gICAgczMucHV0T2JqZWN0KHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0PzogUHV0T2JqZWN0Q29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCBhcyBQdXRPYmplY3RDb21tYW5kT3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBzM0RlbGV0ZSA9IChwYXJhbXM6IERlbGV0ZU9iamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlT2JqZWN0Q29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHMzOiBTMyA9IGNyZWF0ZVMzQ2xpZW50KCk7XG5cbiAgICBpZighcGFyYW1zLkJ1Y2tldCkge1xuICAgICAgcGFyYW1zLkJ1Y2tldCA9IGdldFMzQnVja2V0KCk7XG4gICAgfVxuXG4gICAgczMuZGVsZXRlT2JqZWN0KHBhcmFtcywgKGVycm9yLCBvdXRwdXQ/OiBEZWxldGVPYmplY3RDb21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0IGFzIERlbGV0ZU9iamVjdENvbW1hbmRPdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IHMzRGVsZXRlTGlzdCA9IChwYXJhbXM6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZU9iamVjdHNDb21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgczM6IFMzID0gY3JlYXRlUzNDbGllbnQoKTtcblxuICAgIGlmKCFwYXJhbXMuQnVja2V0KSB7XG4gICAgICBwYXJhbXMuQnVja2V0ID0gZ2V0UzNCdWNrZXQoKTtcbiAgICB9XG5cbiAgICBzMy5kZWxldGVPYmplY3RzKHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0PzogRGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQgYXMgRGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IHMzR2V0U2lnbmVkVXJsID0gYXN5bmMgKHBhcmFtczogYW55ID0ge30pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzMzogUzMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gIGlmKCFwYXJhbXMuRXhwaXJlcykge1xuICAgIHBhcmFtcy5FeHBpcmVzID0gMTIgKiA2MCAqIDYwO1xuICB9XG5cbiAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICBwYXJhbXMuQnVja2V0ID0gZ2V0UzNCdWNrZXQoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBnZXRTaWduZWRVcmwoczMsIG5ldyBHZXRPYmplY3RDb21tYW5kKHBhcmFtcyksIHtcbiAgICBleHBpcmVzSW46IHBhcmFtcy5FeHBpcmVzXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBwYXJhbXM6IENyZWF0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxDcmVhdGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0PiA9PiB7XG4gIGNvbnN0IHMzOiBTMyA9IGNyZWF0ZVMzQ2xpZW50KCk7XG5cbiAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICBwYXJhbXMuQnVja2V0ID0gZ2V0UzNCdWNrZXQoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBzMy5zZW5kKG5ldyBDcmVhdGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kKHBhcmFtcykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHMzR2V0VXBsb2FkUGFydFNpZ25lZFVybCA9IGFzeW5jIChwYXJhbXM6IFVwbG9hZFBhcnRDb21tYW5kSW5wdXQgJiB7RXhwaXJlcz86IG51bWJlcn0pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzMzogUzMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gIGlmKCFwYXJhbXMuQnVja2V0KSB7XG4gICAgcGFyYW1zLkJ1Y2tldCA9IGdldFMzQnVja2V0KCk7XG4gIH1cblxuICBjb25zdCBleHBpcmVzSW4gPSBwYXJhbXMuRXhwaXJlcyB8fCA2MCAqIDYwO1xuICBkZWxldGUgcGFyYW1zLkV4cGlyZXM7XG5cbiAgcmV0dXJuIGF3YWl0IGdldFNpZ25lZFVybChzMywgbmV3IFVwbG9hZFBhcnRDb21tYW5kKHBhcmFtcyksIHtleHBpcmVzSW59KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBwYXJhbXM6IENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZElucHV0XG4pOiBQcm9taXNlPENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dD4gPT4ge1xuICBjb25zdCBzMzogUzMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gIGlmKCFwYXJhbXMuQnVja2V0KSB7XG4gICAgcGFyYW1zLkJ1Y2tldCA9IGdldFMzQnVja2V0KCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgczMuc2VuZChuZXcgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kKHBhcmFtcykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHMzQWJvcnRNdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIHBhcmFtczogQWJvcnRNdWx0aXBhcnRVcGxvYWRDb21tYW5kSW5wdXRcbik6IFByb21pc2U8QWJvcnRNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0PiA9PiB7XG4gIGNvbnN0IHMzOiBTMyA9IGNyZWF0ZVMzQ2xpZW50KCk7XG5cbiAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICBwYXJhbXMuQnVja2V0ID0gZ2V0UzNCdWNrZXQoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBzMy5zZW5kKG5ldyBBYm9ydE11bHRpcGFydFVwbG9hZENvbW1hbmQocGFyYW1zKSk7XG59O1xuIl0sIm5hbWVzIjpbIkFib3J0TXVsdGlwYXJ0VXBsb2FkQ29tbWFuZCIsIkNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZCIsIkNyZWF0ZU11bHRpcGFydFVwbG9hZENvbW1hbmQiLCJHZXRPYmplY3RDb21tYW5kIiwiUzMiLCJVcGxvYWRQYXJ0Q29tbWFuZCIsImdldFNpZ25lZFVybCIsIkNvbmZpZyIsImdldEF3c0NyZWRlbnRpYWxzIiwiZ2V0UzNCdWNrZXQiLCJnZXQiLCJjcmVhdGVTM0NsaWVudCIsImNyZWRlbnRpYWxzIiwicmVnaW9uIiwiczNHZXRCdWNrZXQiLCJzM0dldCIsInBhcmFtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiczMiLCJCdWNrZXQiLCJnZXRPYmplY3QiLCJlcnJvciIsIm91dHB1dCIsInMzSGVhZCIsImhlYWRPYmplY3QiLCJzM1B1dCIsIlN0b3JhZ2VDbGFzcyIsInB1dE9iamVjdCIsInMzRGVsZXRlIiwiZGVsZXRlT2JqZWN0IiwiczNEZWxldGVMaXN0IiwiZGVsZXRlT2JqZWN0cyIsInMzR2V0U2lnbmVkVXJsIiwiRXhwaXJlcyIsImV4cGlyZXNJbiIsInMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkIiwic2VuZCIsInMzR2V0VXBsb2FkUGFydFNpZ25lZFVybCIsInMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQiLCJzM0Fib3J0TXVsdGlwYXJ0VXBsb2FkIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUNFQSwyQkFBMkIsRUFHM0JDLDhCQUE4QixFQUc5QkMs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
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvczMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7XG4gIEFib3J0TXVsdGlwYXJ0VXBsb2FkQ29tbWFuZCxcbiAgQWJvcnRNdWx0aXBhcnRVcGxvYWRDb21tYW5kSW5wdXQsXG4gIEFib3J0TXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dCxcbiAgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kLFxuICBDb21wbGV0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRJbnB1dCxcbiAgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kLFxuICBDcmVhdGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kSW5wdXQsXG4gIENyZWF0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRPdXRwdXQsXG4gIERlbGV0ZU9iamVjdENvbW1hbmRJbnB1dCxcbiAgRGVsZXRlT2JqZWN0Q29tbWFuZE91dHB1dCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQsXG4gIEdldE9iamVjdENvbW1hbmQsXG4gIEdldE9iamVjdENvbW1hbmRJbnB1dCxcbiAgR2V0T2JqZWN0Q29tbWFuZE91dHB1dCxcbiAgSGVhZE9iamVjdENvbW1hbmRJbnB1dCxcbiAgSGVhZE9iamVjdENvbW1hbmRPdXRwdXQsXG4gIFB1dE9iamVjdENvbW1hbmRJbnB1dCxcbiAgUHV0T2JqZWN0Q29tbWFuZE91dHB1dCxcbiAgUzMsXG4gIFVwbG9hZFBhcnRDb21tYW5kLFxuICBVcGxvYWRQYXJ0Q29tbWFuZElucHV0XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge2dldFNpZ25lZFVybH0gZnJvbSAnQGF3cy1zZGsvczMtcmVxdWVzdC1wcmVzaWduZXInO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Z2V0QXdzQ3JlZGVudGlhbHN9IGZyb20gJy4uL3V0aWxzL2F3c1V0aWxzLmpzJztcblxuY29uc3QgZ2V0UzNCdWNrZXQgPSAoKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+XG4gIENvbmZpZy5nZXQoJ2F3cy5zMy5CdWNrZXQnKSB8fCBDb25maWcuZ2V0KCdhd3MuczMuYnVja2V0Jyk7XG5cbmNvbnN0IGNyZWF0ZVMzQ2xpZW50ID0gKCk6IFMzID0+IG5ldyBTMyh7XG4gIGNyZWRlbnRpYWxzOiBnZXRBd3NDcmVkZW50aWFscygpLFxuICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxufSk7XG5cbmV4cG9ydCBjb25zdCBzM0dldEJ1Y2tldCA9ICgpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4gZ2V0UzNCdWNrZXQoKTtcblxuLy8gY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdzMyc7XG5leHBvcnQgY29uc3QgczNHZXQgPSAocGFyYW1zOiBHZXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdENvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzMzogUzMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gICAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICAgIHBhcmFtcy5CdWNrZXQgPSBnZXRTM0J1Y2tldCgpO1xuICAgIH1cblxuICAgIHMzLmdldE9iamVjdChwYXJhbXMsIChlcnJvcjogRXJyb3IsIG91dHB1dD86IEdldE9iamVjdENvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQgYXMgR2V0T2JqZWN0Q29tbWFuZE91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgczNIZWFkID0gKHBhcmFtczogSGVhZE9iamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8SGVhZE9iamVjdENvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzMzogUzMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gICAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICAgIHBhcmFtcy5CdWNrZXQgPSBnZXRTM0J1Y2tldCgpO1xuICAgIH1cblxuICAgIHMzLmhlYWRPYmplY3QocGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ/OiBIZWFkT2JqZWN0Q29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQgYXMgSGVhZE9iamVjdENvbW1hbmRPdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IHMzUHV0ID0gKHBhcmFtczogUHV0T2JqZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRPYmplY3RDb21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgczMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gICAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICAgIHBhcmFtcy5CdWNrZXQgPSBnZXRTM0J1Y2tldCgpO1xuICAgIH1cblxuICAgIGlmKCFwYXJhbXMuU3RvcmFnZUNsYXNzKSB7XG4gICAgICBwYXJhbXMuU3RvcmFnZUNsYXNzID0gJ1JFRFVDRURfUkVEVU5EQU5DWSc7XG4gICAgfVxuXG4gICAgczMucHV0T2JqZWN0KHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0PzogUHV0T2JqZWN0Q29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCBhcyBQdXRPYmplY3RDb21tYW5kT3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBzM0RlbGV0ZSA9IChwYXJhbXM6IERlbGV0ZU9iamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlT2JqZWN0Q29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHMzOiBTMyA9IGNyZWF0ZVMzQ2xpZW50KCk7XG5cbiAgICBpZighcGFyYW1zLkJ1Y2tldCkge1xuICAgICAgcGFyYW1zLkJ1Y2tldCA9IGdldFMzQnVja2V0KCk7XG4gICAgfVxuXG4gICAgczMuZGVsZXRlT2JqZWN0KHBhcmFtcywgKGVycm9yLCBvdXRwdXQ/OiBEZWxldGVPYmplY3RDb21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0IGFzIERlbGV0ZU9iamVjdENvbW1hbmRPdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IHMzRGVsZXRlTGlzdCA9IChwYXJhbXM6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZU9iamVjdHNDb21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgczM6IFMzID0gY3JlYXRlUzNDbGllbnQoKTtcblxuICAgIGlmKCFwYXJhbXMuQnVja2V0KSB7XG4gICAgICBwYXJhbXMuQnVja2V0ID0gZ2V0UzNCdWNrZXQoKTtcbiAgICB9XG5cbiAgICBzMy5kZWxldGVPYmplY3RzKHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0PzogRGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQgYXMgRGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IHMzR2V0U2lnbmVkVXJsID0gYXN5bmMgKHBhcmFtczogYW55ID0ge30pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzMzogUzMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gIGlmKCFwYXJhbXMuRXhwaXJlcykge1xuICAgIHBhcmFtcy5FeHBpcmVzID0gMTIgKiA2MCAqIDYwO1xuICB9XG5cbiAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICBwYXJhbXMuQnVja2V0ID0gZ2V0UzNCdWNrZXQoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBnZXRTaWduZWRVcmwoczMsIG5ldyBHZXRPYmplY3RDb21tYW5kKHBhcmFtcyksIHtcbiAgICBleHBpcmVzSW46IHBhcmFtcy5FeHBpcmVzXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBwYXJhbXM6IENyZWF0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxDcmVhdGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0PiA9PiB7XG4gIGNvbnN0IHMzOiBTMyA9IGNyZWF0ZVMzQ2xpZW50KCk7XG5cbiAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICBwYXJhbXMuQnVja2V0ID0gZ2V0UzNCdWNrZXQoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBzMy5zZW5kKG5ldyBDcmVhdGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kKHBhcmFtcykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHMzR2V0VXBsb2FkUGFydFNpZ25lZFVybCA9IGFzeW5jIChwYXJhbXM6IFVwbG9hZFBhcnRDb21tYW5kSW5wdXQgJiB7RXhwaXJlcz86IG51bWJlcn0pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzMzogUzMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gIGlmKCFwYXJhbXMuQnVja2V0KSB7XG4gICAgcGFyYW1zLkJ1Y2tldCA9IGdldFMzQnVja2V0KCk7XG4gIH1cblxuICBjb25zdCBleHBpcmVzSW4gPSBwYXJhbXMuRXhwaXJlcyB8fCA2MCAqIDYwO1xuICBkZWxldGUgcGFyYW1zLkV4cGlyZXM7XG5cbiAgcmV0dXJuIGF3YWl0IGdldFNpZ25lZFVybChzMywgbmV3IFVwbG9hZFBhcnRDb21tYW5kKHBhcmFtcyksIHtleHBpcmVzSW59KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBwYXJhbXM6IENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZElucHV0XG4pOiBQcm9taXNlPENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dD4gPT4ge1xuICBjb25zdCBzMzogUzMgPSBjcmVhdGVTM0NsaWVudCgpO1xuXG4gIGlmKCFwYXJhbXMuQnVja2V0KSB7XG4gICAgcGFyYW1zLkJ1Y2tldCA9IGdldFMzQnVja2V0KCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgczMuc2VuZChuZXcgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kKHBhcmFtcykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHMzQWJvcnRNdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIHBhcmFtczogQWJvcnRNdWx0aXBhcnRVcGxvYWRDb21tYW5kSW5wdXRcbik6IFByb21pc2U8QWJvcnRNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0PiA9PiB7XG4gIGNvbnN0IHMzOiBTMyA9IGNyZWF0ZVMzQ2xpZW50KCk7XG5cbiAgaWYoIXBhcmFtcy5CdWNrZXQpIHtcbiAgICBwYXJhbXMuQnVja2V0ID0gZ2V0UzNCdWNrZXQoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBzMy5zZW5kKG5ldyBBYm9ydE11bHRpcGFydFVwbG9hZENvbW1hbmQocGFyYW1zKSk7XG59O1xuIl0sIm5hbWVzIjpbIkFib3J0TXVsdGlwYXJ0VXBsb2FkQ29tbWFuZCIsIkNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZCIsIkNyZWF0ZU11bHRpcGFydFVwbG9hZENvbW1hbmQiLCJHZXRPYmplY3RDb21tYW5kIiwiUzMiLCJVcGxvYWRQYXJ0Q29tbWFuZCIsImdldFNpZ25lZFVybCIsIkNvbmZpZyIsImdldEF3c0NyZWRlbnRpYWxzIiwiZ2V0UzNCdWNrZXQiLCJnZXQiLCJjcmVhdGVTM0NsaWVudCIsImNyZWRlbnRpYWxzIiwicmVnaW9uIiwiczNHZXRCdWNrZXQiLCJzM0dldCIsInBhcmFtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiczMiLCJCdWNrZXQiLCJnZXRPYmplY3QiLCJlcnJvciIsIm91dHB1dCIsInMzSGVhZCIsImhlYWRPYmplY3QiLCJzM1B1dCIsIlN0b3JhZ2VDbGFzcyIsInB1dE9iamVjdCIsInMzRGVsZXRlIiwiZGVsZXRlT2JqZWN0IiwiczNEZWxldGVMaXN0IiwiZGVsZXRlT2JqZWN0cyIsInMzR2V0U2lnbmVkVXJsIiwiRXhwaXJlcyIsImV4cGlyZXNJbiIsInMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkIiwic2VuZCIsInMzR2V0VXBsb2FkUGFydFNpZ25lZFVybCIsInMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQiLCJzM0Fib3J0TXVsdGlwYXJ0VXBsb2FkIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUNFQSwyQkFBMkIs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
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { flatten } from '@nlabs/utils/arrays/flatten';
5
5
  import { uniqBy } from '@nlabs/utils/arrays/uniq';
6
6
  import { aql } from 'arangojs';
@@ -71,4 +71,4 @@ export const getSearchList = async (context, query, from, to)=>{
71
71
  }
72
72
  };
73
73
 
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvc2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2ZsYXR0ZW59IGZyb20gJ0BubGFicy91dGlscy9hcnJheXMvZmxhdHRlbic7XG5pbXBvcnQge3VuaXFCeX0gZnJvbSAnQG5sYWJzL3V0aWxzL2FycmF5cy91bmlxJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5cbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtleGVjdXRlU2VhcmNofSBmcm9tICcuL3F1ZXJ5LmpzJztcbmltcG9ydCB7Z2V0VXNlckRpc3BsYXlOYW1lfSBmcm9tICcuL3VzZXJzLmpzJztcblxuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge1NlYXJjaE9wdGlvbnN9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3NlYXJjaCc7XG5cbi8qKlxuICogRW5oYW5jZWQgc2VhcmNoIGZ1bmN0aW9uIHVzaW5nIHRoZSBuZXcgcXVlcnkgYnVpbGRlclxuICogUHJvdmlkZXMgbW9yZSBmbGV4aWJsZSBzZWFyY2ggY2FwYWJpbGl0aWVzXG4gKiBAcGFyYW0gY29udGV4dCAtIEFQSSBjb250ZXh0XG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNlYXJjaCBvcHRpb25zXG4gKiBAcmV0dXJucyBTZWFyY2ggcmVzdWx0c1xuICovXG5leHBvcnQgY29uc3Qgc2VhcmNoRmxleGlibGUgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnNcbik6IFByb21pc2U8YW55W10+ID0+IHtcbiAgcmV0dXJuIGV4ZWN1dGVTZWFyY2goY29udGV4dCwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoTGlzdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBxdWVyeTogc3RyaW5nLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWVsZHM6IHtjb2xsZWN0aW9uOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmd9W10gPSBbXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICdmaXJzdE5hbWUnfSxcbiAgICAgIHtjb2xsZWN0aW9uOiAndXNlcnMnLCBmaWVsZDogJ2xhc3ROYW1lJ30sXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICdlbWFpbCd9LFxuICAgICAge2NvbGxlY3Rpb246ICd1c2VycycsIGZpZWxkOiAndXNlcm5hbWUnfSxcbiAgICAgIHtjb2xsZWN0aW9uOiAndXNlcnMnLCBmaWVsZDogJ25hbWUnfVxuICAgIF07XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZmllbGRzLm1hcCgob2JqKSA9PiB7XG4gICAgICBjb25zdCBxcnkgPSBgcHJlZml4OiR7cXVlcnl9YDtcbiAgICAgIGNvbnN0IHVzZXJRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1IElOIEZVTExURVhUKCR7b2JqLmNvbGxlY3Rpb259LCAke29iai5maWVsZH0sICR7cXJ5fSwgNTApIFJFVFVSTiB1YDtcbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHVzZXJRcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgICB9KSk7XG5cbiAgICBjb25zdCBsaXN0ID0gdW5pcUJ5KGZsYXR0ZW4ocmVzdWx0cyksIChpdGVtOiBhbnkpID0+IGl0ZW0/Ll9rZXkpO1xuXG4gICAgcmV0dXJuIGxpc3QubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHtfaWQ6IGl0ZW1JZCwgbmFtZTogaXRlbU5hbWV9ID0gaXRlbSB8fCB7fTtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25JZExpc3Q6IHN0cmluZ1tdID0gaXRlbUlkPy5zcGxpdCgnLycpIHx8IFtdO1xuICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25JZExpc3RbMF0gfHwgJyc7XG4gICAgICBjb25zdCBuYW1lID0gY29sbGVjdGlvbiA9PT0gJ3VzZXJzJyA/IGdldFVzZXJEaXNwbGF5TmFtZShpdGVtKSA6IGl0ZW1OYW1lIHx8ICcnO1xuXG4gICAgICByZXR1cm4gey4uLml0ZW0sIG5hbWV9O1xuICAgIH0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICB2YWx1ZTogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlXG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiZmxhdHRlbiIsInVuaXFCeSIsImFxbCIsIkVycm9yVHlwZXMiLCJsb2dFeGNlcHRpb24iLCJ1c2VEYiIsImV4ZWN1dGVTZWFyY2giLCJnZXRVc2VyRGlzcGxheU5hbWUiLCJldmVudENhdGVnb3J5Iiwic2VhcmNoRmxleGlibGUiLCJjb250ZXh0Iiwib3B0aW9ucyIsImdldFNlYXJjaExpc3QiLCJxdWVyeSIsImZyb20iLCJ0byIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsImZpZWxkcyIsImNvbGxlY3Rpb24iLCJmaWVsZCIsInJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwib2JqIiwicXJ5IiwidXNlclFyeSIsInRoZW4iLCJjdXJzb3IiLCJsaXN0IiwiaXRlbSIsIl9rZXkiLCJfaWQiLCJpdGVtSWQiLCJuYW1lIiwiaXRlbU5hbWUiLCJjb2xsZWN0aW9uSWRMaXN0Iiwic3BsaXQiLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsInZhbHVlIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsT0FBTyxRQUFPLDhCQUE4QjtBQUNwRCxTQUFRQyxNQUFNLFFBQU8sMkJBQTJCO0FBQ2hELFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBRTdCLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsWUFBWSxRQUFPLDZCQUE2QjtBQUN4RCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLGFBQWEsUUFBTyxhQUFhO0FBQ3pDLFNBQVFDLGtCQUFrQixRQUFPLGFBQWE7QUFPOUMsTUFBTUMsZ0JBQWdCO0FBRXRCOzs7Ozs7Q0FNQyxHQUNELE9BQU8sTUFBTUMsaUJBQWlCLE9BQzVCQyxTQUNBQztJQUVBLE9BQU9MLGNBQWNJLFNBQVNDO0FBQ2hDLEVBQUU7QUFFRixPQUFPLE1BQU1DLGdCQUFnQixPQUFPRixTQUFxQkcsT0FBZUMsTUFBY0M7SUFDcEYsTUFBTUMsU0FBUztJQUNmLE1BQU0sRUFBQ0MsWUFBWSxFQUFDLEdBQUdQO0lBRXZCLElBQUk7UUFDRixNQUFNUSxTQUFnRDtZQUNwRDtnQkFBQ0MsWUFBWTtnQkFBU0MsT0FBTztZQUFXO1lBQ3hDO2dCQUFDRCxZQUFZO2dCQUFTQyxPQUFPO1lBQVU7WUFDdkM7Z0JBQUNELFlBQVk7Z0JBQVNDLE9BQU87WUFBTztZQUNwQztnQkFBQ0QsWUFBWTtnQkFBU0MsT0FBTztZQUFVO1lBQ3ZDO2dCQUFDRCxZQUFZO2dCQUFTQyxPQUFPO1lBQU07U0FDcEM7UUFFRCxNQUFNQyxVQUFVLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQ0wsT0FBT00sR0FBRyxDQUFDLENBQUNDO1lBQzVDLE1BQU1DLE1BQU0sQ0FBQyxPQUFPLEVBQUViLE9BQU87WUFDN0IsTUFBTWMsVUFBb0J6QixHQUFHLENBQUMsa0JBQWtCLEVBQUV1QixJQUFJTixVQUFVLENBQUMsRUFBRSxFQUFFTSxJQUFJTCxLQUFLLENBQUMsRUFBRSxFQUFFTSxJQUFJLGNBQWMsQ0FBQztZQUN0RyxPQUFPckIsTUFBTVksY0FBY0osS0FBSyxDQUFDYyxTQUFTQyxJQUFJLENBQUMsQ0FBQ0MsU0FBV0EsT0FBT04sR0FBRztRQUN2RTtRQUVBLE1BQU1PLE9BQU83QixPQUFPRCxRQUFRcUIsVUFBVSxDQUFDVSxPQUFjQSxNQUFNQztRQUUzRCxPQUFPRixLQUFLTixHQUFHLENBQUMsQ0FBQ087WUFDZixNQUFNLEVBQUNFLEtBQUtDLE1BQU0sRUFBRUMsTUFBTUMsUUFBUSxFQUFDLEdBQUdMLFFBQVEsQ0FBQztZQUMvQyxNQUFNTSxtQkFBNkJILFFBQVFJLE1BQU0sUUFBUSxFQUFFO1lBQzNELE1BQU1uQixhQUFha0IsZ0JBQWdCLENBQUMsRUFBRSxJQUFJO1lBQzFDLE1BQU1GLE9BQU9oQixlQUFlLFVBQVVaLG1CQUFtQndCLFFBQVFLLFlBQVk7WUFFN0UsT0FBTztnQkFBQyxHQUFHTCxJQUFJO2dCQUFFSTtZQUFJO1FBQ3ZCO0lBQ0YsRUFBRSxPQUFNSSxPQUFPO1FBQ2IsTUFBTW5DLGFBQWE7WUFDakJZO1lBQ0F3QixVQUFVaEM7WUFDVmlDLE9BQU90QyxXQUFXdUMsY0FBYztZQUNoQ0MsT0FBTyxBQUFDSixNQUFnQkssT0FBTztRQUNqQyxHQUFHbEM7SUFDTDtBQUNGLEVBQUUifQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvc2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge2ZsYXR0ZW59IGZyb20gJ0BubGFicy91dGlscy9hcnJheXMvZmxhdHRlbic7XG5pbXBvcnQge3VuaXFCeX0gZnJvbSAnQG5sYWJzL3V0aWxzL2FycmF5cy91bmlxJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5cbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtleGVjdXRlU2VhcmNofSBmcm9tICcuL3F1ZXJ5LmpzJztcbmltcG9ydCB7Z2V0VXNlckRpc3BsYXlOYW1lfSBmcm9tICcuL3VzZXJzLmpzJztcblxuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge1NlYXJjaE9wdGlvbnN9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3NlYXJjaCc7XG5cbi8qKlxuICogRW5oYW5jZWQgc2VhcmNoIGZ1bmN0aW9uIHVzaW5nIHRoZSBuZXcgcXVlcnkgYnVpbGRlclxuICogUHJvdmlkZXMgbW9yZSBmbGV4aWJsZSBzZWFyY2ggY2FwYWJpbGl0aWVzXG4gKiBAcGFyYW0gY29udGV4dCAtIEFQSSBjb250ZXh0XG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNlYXJjaCBvcHRpb25zXG4gKiBAcmV0dXJucyBTZWFyY2ggcmVzdWx0c1xuICovXG5leHBvcnQgY29uc3Qgc2VhcmNoRmxleGlibGUgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnNcbik6IFByb21pc2U8YW55W10+ID0+IHtcbiAgcmV0dXJuIGV4ZWN1dGVTZWFyY2goY29udGV4dCwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoTGlzdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBxdWVyeTogc3RyaW5nLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWVsZHM6IHtjb2xsZWN0aW9uOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmd9W10gPSBbXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICdmaXJzdE5hbWUnfSxcbiAgICAgIHtjb2xsZWN0aW9uOiAndXNlcnMnLCBmaWVsZDogJ2xhc3ROYW1lJ30sXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICdlbWFpbCd9LFxuICAgICAge2NvbGxlY3Rpb246ICd1c2VycycsIGZpZWxkOiAndXNlcm5hbWUnfSxcbiAgICAgIHtjb2xsZWN0aW9uOiAndXNlcnMnLCBmaWVsZDogJ25hbWUnfVxuICAgIF07XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZmllbGRzLm1hcCgob2JqKSA9PiB7XG4gICAgICBjb25zdCBxcnkgPSBgcHJlZml4OiR7cXVlcnl9YDtcbiAgICAgIGNvbnN0IHVzZXJRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1IElOIEZVTExURVhUKCR7b2JqLmNvbGxlY3Rpb259LCAke29iai5maWVsZH0sICR7cXJ5fSwgNTApIFJFVFVSTiB1YDtcbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHVzZXJRcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgICB9KSk7XG5cbiAgICBjb25zdCBsaXN0ID0gdW5pcUJ5KGZsYXR0ZW4ocmVzdWx0cyksIChpdGVtOiBhbnkpID0+IGl0ZW0/Ll9rZXkpO1xuXG4gICAgcmV0dXJuIGxpc3QubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHtfaWQ6IGl0ZW1JZCwgbmFtZTogaXRlbU5hbWV9ID0gaXRlbSB8fCB7fTtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25JZExpc3Q6IHN0cmluZ1tdID0gaXRlbUlkPy5zcGxpdCgnLycpIHx8IFtdO1xuICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25JZExpc3RbMF0gfHwgJyc7XG4gICAgICBjb25zdCBuYW1lID0gY29sbGVjdGlvbiA9PT0gJ3VzZXJzJyA/IGdldFVzZXJEaXNwbGF5TmFtZShpdGVtKSA6IGl0ZW1OYW1lIHx8ICcnO1xuXG4gICAgICByZXR1cm4gey4uLml0ZW0sIG5hbWV9O1xuICAgIH0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICB2YWx1ZTogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlXG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiZmxhdHRlbiIsInVuaXFCeSIsImFxbCIsIkVycm9yVHlwZXMiLCJsb2dFeGNlcHRpb24iLCJ1c2VEYiIsImV4ZWN1dGVTZWFyY2giLCJnZXRVc2VyRGlzcGxheU5hbWUiLCJldmVudENhdGVnb3J5Iiwic2VhcmNoRmxleGlibGUiLCJjb250ZXh0Iiwib3B0aW9ucyIsImdldFNlYXJjaExpc3QiLCJxdWVyeSIsImZyb20iLCJ0byIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsImZpZWxkcyIsImNvbGxlY3Rpb24iLCJmaWVsZCIsInJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwib2JqIiwicXJ5IiwidXNlclFyeSIsInRoZW4iLCJjdXJzb3IiLCJsaXN0IiwiaXRlbSIsIl9rZXkiLCJfaWQiLCJpdGVtSWQiLCJuYW1lIiwiaXRlbU5hbWUiLCJjb2xsZWN0aW9uSWRMaXN0Iiwic3BsaXQiLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsInZhbHVlIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsT0FBTyxRQUFPLDhCQUE4QjtBQUNwRCxTQUFRQyxNQUFNLFFBQU8sMkJBQTJCO0FBQ2hELFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBRTdCLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsWUFBWSxRQUFPLDZCQUE2QjtBQUN4RCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLGFBQWEsUUFBTyxhQUFhO0FBQ3pDLFNBQVFDLGtCQUFrQixRQUFPLGFBQWE7QUFPOUMsTUFBTUMsZ0JBQWdCO0FBRXRCOzs7Ozs7Q0FNQyxHQUNELE9BQU8sTUFBTUMsaUJBQWlCLE9BQzVCQyxTQUNBQztJQUVBLE9BQU9MLGNBQWNJLFNBQVNDO0FBQ2hDLEVBQUU7QUFFRixPQUFPLE1BQU1DLGdCQUFnQixPQUFPRixTQUFxQkcsT0FBZUMsTUFBY0M7SUFDcEYsTUFBTUMsU0FBUztJQUNmLE1BQU0sRUFBQ0MsWUFBWSxFQUFDLEdBQUdQO0lBRXZCLElBQUk7UUFDRixNQUFNUSxTQUFnRDtZQUNwRDtnQkFBQ0MsWUFBWTtnQkFBU0MsT0FBTztZQUFXO1lBQ3hDO2dCQUFDRCxZQUFZO2dCQUFTQyxPQUFPO1lBQVU7WUFDdkM7Z0JBQUNELFlBQVk7Z0JBQVNDLE9BQU87WUFBTztZQUNwQztnQkFBQ0QsWUFBWTtnQkFBU0MsT0FBTztZQUFVO1lBQ3ZDO2dCQUFDRCxZQUFZO2dCQUFTQyxPQUFPO1lBQU07U0FDcEM7UUFFRCxNQUFNQyxVQUFVLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQ0wsT0FBT00sR0FBRyxDQUFDLENBQUNDO1lBQzVDLE1BQU1DLE1BQU0sQ0FBQyxPQUFPLEVBQUViLE9BQU87WUFDN0IsTUFBTWMsVUFBb0J6QixHQUFHLENBQUMsa0JBQWtCLEVBQUV1QixJQUFJTixVQUFVLENBQUMsRUFBRSxFQUFFTSxJQUFJTCxLQUFLLENBQUMsRUFBRSxFQUFFTSxJQUFJLGNBQWMsQ0FBQztZQUN0RyxPQUFPckIsTUFBTVksY0FBY0osS0FBSyxDQUFDYyxTQUFTQyxJQUFJLENBQUMsQ0FBQ0MsU0FBV0EsT0FBT04sR0FBRztRQUN2RTtRQUVBLE1BQU1PLE9BQU83QixPQUFPRCxRQUFRcUIsVUFBVSxDQUFDVSxPQUFjQSxNQUFNQztRQUUzRCxPQUFPRixLQUFLTixHQUFHLENBQUMsQ0FBQ087WUFDZixNQUFNLEVBQUNFLEtBQUtDLE1BQU0sRUFBRUMsTUFBTUMsUUFBUSxFQUFDLEdBQUdMLFFBQVEsQ0FBQztZQUMvQyxNQUFNTSxtQkFBNkJILFFBQVFJLE1BQU0sUUFBUSxFQUFFO1lBQzNELE1BQU1uQixhQUFha0IsZ0JBQWdCLENBQUMsRUFBRSxJQUFJO1lBQzFDLE1BQU1GLE9BQU9oQixlQUFlLFVBQVVaLG1CQUFtQndCLFFBQVFLLFlBQVk7WUFFN0UsT0FBTztnQkFBQyxHQUFHTCxJQUFJO2dCQUFFSTtZQUFJO1FBQ3ZCO0lBQ0YsRUFBRSxPQUFNSSxPQUFPO1FBQ2IsTUFBTW5DLGFBQWE7WUFDakJZO1lBQ0F3QixVQUFVaEM7WUFDVmlDLE9BQU90QyxXQUFXdUMsY0FBYztZQUNoQ0MsT0FBTyxBQUFDSixNQUFnQkssT0FBTztRQUNqQyxHQUFHbEM7SUFDTDtBQUNGLEVBQUUifQ==
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { PublishCommand, SNSClient } from '@aws-sdk/client-sns';
5
5
  import { parsePhone, parseTemplate } from '@nlabs/utils/parsers/strings';
6
6
  import { Config } from '../config.js';
@@ -49,4 +49,4 @@ export const sendSms = async ({ context, text, user, variables = {} })=>{
49
49
  });
50
50
  };
51
51
 
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvc21zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1B1Ymxpc2hDb21tYW5kLCBTTlNDbGllbnR9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zbnMnO1xuaW1wb3J0IHtwYXJzZVBob25lLCBwYXJzZVRlbXBsYXRlfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7U01TUGFyYW1zVHlwZX0gZnJvbSAnLi4vdHlwZXMvbm90aWZpY2F0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge1Nlc3Npb259IGZyb20gJy4uL3V0aWxzL3Nlc3Npb25VdGlscy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnc21zJztcblxuZXhwb3J0IGNvbnN0IHNlbmRTbXMgPSBhc3luYyAoe1xuICBjb250ZXh0LFxuICB0ZXh0LFxuICB1c2VyLFxuICB2YXJpYWJsZXMgPSB7fVxufTogU01TUGFyYW1zVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnc2VuZFNtcyc7XG4gIGNvbnN0IHNuc0NsaWVudCA9IG5ldyBTTlNDbGllbnQoe1xuICAgIGNyZWRlbnRpYWxzOiBDb25maWcuZ2V0KCdhd3MuY3JlZGVudGlhbHMnKSxcbiAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICB9KTtcbiAgY29uc3Qge2NvdW50cnkgPSAnVVMnLCBwaG9uZSA9ICcnfSA9IHVzZXIgfHwge307XG4gIGNvbnN0IHBob25lTnVtYmVyID0gcGFyc2VQaG9uZShwaG9uZSwgY291bnRyeSk7XG4gIGNvbnN0IHRlbXBsYXRlQ29udGVudCA9IHBhcnNlVGVtcGxhdGUodGV4dCB8fCAnJywgdmFyaWFibGVzKTtcblxuICByZXR1cm4gYXdhaXQgc25zQ2xpZW50XG4gICAgLnNlbmQoXG4gICAgICBuZXcgUHVibGlzaENvbW1hbmQoe1xuICAgICAgICBNZXNzYWdlOiB0ZW1wbGF0ZUNvbnRlbnQsXG4gICAgICAgIE1lc3NhZ2VBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgJ0FXUy5TTlMuU01TLlNNU1R5cGUnOiB7XG4gICAgICAgICAgICBEYXRhVHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBTdHJpbmdWYWx1ZTogJ1RyYW5zYWN0aW9uYWwnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnQVdTLlNOUy5TTVMuU2VuZGVySUQnOiB7XG4gICAgICAgICAgICBEYXRhVHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBTdHJpbmdWYWx1ZTogY29udGV4dC5jb25maWc/LmRldGFpbHM/LmlkPy50cmltKCkucmVwbGFjZSgvIC9nLCAnJykuc3Vic3RyaW5nKDAsIDExKSB8fCAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUGhvbmVOdW1iZXI6IHBob25lTnVtYmVyXG4gICAgICB9KVxuICAgIClcbiAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyh7cmVzfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHtlcnJvcn0pO1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5TTVNfRVJST1JcbiAgICAgIH0sIGVycm9yLCB7c2Vzc2lvbjogdXNlciBhcyBTZXNzaW9ufSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG4iXSwibmFtZXMiOlsiUHVibGlzaENvbW1hbmQiLCJTTlNDbGllbnQiLCJwYXJzZVBob25lIiwicGFyc2VUZW1wbGF0ZSIsIkNvbmZpZyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImV2ZW50Q2F0ZWdvcnkiLCJzZW5kU21zIiwiY29udGV4dCIsInRleHQiLCJ1c2VyIiwidmFyaWFibGVzIiwiYWN0aW9uIiwic25zQ2xpZW50IiwiY3JlZGVudGlhbHMiLCJnZXQiLCJyZWdpb24iLCJjb3VudHJ5IiwicGhvbmUiLCJwaG9uZU51bWJlciIsInRlbXBsYXRlQ29udGVudCIsInNlbmQiLCJNZXNzYWdlIiwiTWVzc2FnZUF0dHJpYnV0ZXMiLCJEYXRhVHlwZSIsIlN0cmluZ1ZhbHVlIiwiY29uZmlnIiwiZGV0YWlscyIsImlkIiwidHJpbSIsInJlcGxhY2UiLCJzdWJzdHJpbmciLCJQaG9uZU51bWJlciIsInRoZW4iLCJyZXMiLCJjb25zb2xlIiwibG9nIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJTTVNfRVJST1IiLCJzZXNzaW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxjQUFjLEVBQUVDLFNBQVMsUUFBTyxzQkFBc0I7QUFDOUQsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLFFBQU8sK0JBQStCO0FBRXZFLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFFbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUdwRCxNQUFNQyxnQkFBZ0I7QUFFdEIsT0FBTyxNQUFNQyxVQUFVLE9BQU8sRUFDNUJDLE9BQU8sRUFDUEMsSUFBSSxFQUNKQyxJQUFJLEVBQ0pDLFlBQVksQ0FBQyxDQUFDLEVBQ0E7SUFDZCxNQUFNQyxTQUFTO0lBQ2YsTUFBTUMsWUFBWSxJQUFJYixVQUFVO1FBQzlCYyxhQUFhWCxPQUFPWSxHQUFHLENBQUM7UUFDeEJDLFFBQVFiLE9BQU9ZLEdBQUcsQ0FBQztJQUNyQjtJQUNBLE1BQU0sRUFBQ0UsVUFBVSxJQUFJLEVBQUVDLFFBQVEsRUFBRSxFQUFDLEdBQUdSLFFBQVEsQ0FBQztJQUM5QyxNQUFNUyxjQUFjbEIsV0FBV2lCLE9BQU9EO0lBQ3RDLE1BQU1HLGtCQUFrQmxCLGNBQWNPLFFBQVEsSUFBSUU7SUFFbEQsT0FBTyxNQUFNRSxVQUNWUSxJQUFJLENBQ0gsSUFBSXRCLGVBQWU7UUFDakJ1QixTQUFTRjtRQUNURyxtQkFBbUI7WUFDakIsdUJBQXVCO2dCQUNyQkMsVUFBVTtnQkFDVkMsYUFBYTtZQUNmO1lBQ0Esd0JBQXdCO2dCQUN0QkQsVUFBVTtnQkFDVkMsYUFBYWpCLFFBQVFrQixNQUFNLEVBQUVDLFNBQVNDLElBQUlDLE9BQU9DLFFBQVEsTUFBTSxJQUFJQyxVQUFVLEdBQUcsT0FBTztZQUN6RjtRQUNGO1FBQ0FDLGFBQWFiO0lBQ2YsSUFFRGMsSUFBSSxDQUFDLENBQUNDO1FBQ0xDLFFBQVFDLEdBQUcsQ0FBQztZQUFDRjtRQUFHO1FBQ2hCLE9BQU87SUFDVCxHQUNDRyxLQUFLLENBQUMsQ0FBQ0M7UUFDTkgsUUFBUUMsR0FBRyxDQUFDO1lBQUNFO1FBQUs7UUFDbEJqQyxTQUFTO1lBQ1BPO1lBQ0EyQixVQUFVakM7WUFDVmtDLE9BQU9wQyxXQUFXcUMsU0FBUztRQUM3QixHQUFHSCxPQUFPO1lBQUNJLFNBQVNoQztRQUFlO1FBRW5DLE9BQU87SUFDVDtBQUNKLEVBQUUifQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvc21zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge1B1Ymxpc2hDb21tYW5kLCBTTlNDbGllbnR9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zbnMnO1xuaW1wb3J0IHtwYXJzZVBob25lLCBwYXJzZVRlbXBsYXRlfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7U01TUGFyYW1zVHlwZX0gZnJvbSAnLi4vdHlwZXMvbm90aWZpY2F0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge1Nlc3Npb259IGZyb20gJy4uL3V0aWxzL3Nlc3Npb25VdGlscy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnc21zJztcblxuZXhwb3J0IGNvbnN0IHNlbmRTbXMgPSBhc3luYyAoe1xuICBjb250ZXh0LFxuICB0ZXh0LFxuICB1c2VyLFxuICB2YXJpYWJsZXMgPSB7fVxufTogU01TUGFyYW1zVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnc2VuZFNtcyc7XG4gIGNvbnN0IHNuc0NsaWVudCA9IG5ldyBTTlNDbGllbnQoe1xuICAgIGNyZWRlbnRpYWxzOiBDb25maWcuZ2V0KCdhd3MuY3JlZGVudGlhbHMnKSxcbiAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICB9KTtcbiAgY29uc3Qge2NvdW50cnkgPSAnVVMnLCBwaG9uZSA9ICcnfSA9IHVzZXIgfHwge307XG4gIGNvbnN0IHBob25lTnVtYmVyID0gcGFyc2VQaG9uZShwaG9uZSwgY291bnRyeSk7XG4gIGNvbnN0IHRlbXBsYXRlQ29udGVudCA9IHBhcnNlVGVtcGxhdGUodGV4dCB8fCAnJywgdmFyaWFibGVzKTtcblxuICByZXR1cm4gYXdhaXQgc25zQ2xpZW50XG4gICAgLnNlbmQoXG4gICAgICBuZXcgUHVibGlzaENvbW1hbmQoe1xuICAgICAgICBNZXNzYWdlOiB0ZW1wbGF0ZUNvbnRlbnQsXG4gICAgICAgIE1lc3NhZ2VBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgJ0FXUy5TTlMuU01TLlNNU1R5cGUnOiB7XG4gICAgICAgICAgICBEYXRhVHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBTdHJpbmdWYWx1ZTogJ1RyYW5zYWN0aW9uYWwnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnQVdTLlNOUy5TTVMuU2VuZGVySUQnOiB7XG4gICAgICAgICAgICBEYXRhVHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBTdHJpbmdWYWx1ZTogY29udGV4dC5jb25maWc/LmRldGFpbHM/LmlkPy50cmltKCkucmVwbGFjZSgvIC9nLCAnJykuc3Vic3RyaW5nKDAsIDExKSB8fCAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUGhvbmVOdW1iZXI6IHBob25lTnVtYmVyXG4gICAgICB9KVxuICAgIClcbiAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyh7cmVzfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHtlcnJvcn0pO1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5TTVNfRVJST1JcbiAgICAgIH0sIGVycm9yLCB7c2Vzc2lvbjogdXNlciBhcyBTZXNzaW9ufSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG4iXSwibmFtZXMiOlsiUHVibGlzaENvbW1hbmQiLCJTTlNDbGllbnQiLCJwYXJzZVBob25lIiwicGFyc2VUZW1wbGF0ZSIsIkNvbmZpZyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImV2ZW50Q2F0ZWdvcnkiLCJzZW5kU21zIiwiY29udGV4dCIsInRleHQiLCJ1c2VyIiwidmFyaWFibGVzIiwiYWN0aW9uIiwic25zQ2xpZW50IiwiY3JlZGVudGlhbHMiLCJnZXQiLCJyZWdpb24iLCJjb3VudHJ5IiwicGhvbmUiLCJwaG9uZU51bWJlciIsInRlbXBsYXRlQ29udGVudCIsInNlbmQiLCJNZXNzYWdlIiwiTWVzc2FnZUF0dHJpYnV0ZXMiLCJEYXRhVHlwZSIsIlN0cmluZ1ZhbHVlIiwiY29uZmlnIiwiZGV0YWlscyIsImlkIiwidHJpbSIsInJlcGxhY2UiLCJzdWJzdHJpbmciLCJQaG9uZU51bWJlciIsInRoZW4iLCJyZXMiLCJjb25zb2xlIiwibG9nIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJTTVNfRVJST1IiLCJzZXNzaW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxjQUFjLEVBQUVDLFNBQVMsUUFBTyxzQkFBc0I7QUFDOUQsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLFFBQU8sK0JBQStCO0FBRXZFLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFFbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUdwRCxNQUFNQyxnQkFBZ0I7QUFFdEIsT0FBTyxNQUFNQyxVQUFVLE9BQU8sRUFDNUJDLE9BQU8sRUFDUEMsSUFBSSxFQUNKQyxJQUFJLEVBQ0pDLFlBQVksQ0FBQyxDQUFDLEVBQ0E7SUFDZCxNQUFNQyxTQUFTO0lBQ2YsTUFBTUMsWUFBWSxJQUFJYixVQUFVO1FBQzlCYyxhQUFhWCxPQUFPWSxHQUFHLENBQUM7UUFDeEJDLFFBQVFiLE9BQU9ZLEdBQUcsQ0FBQztJQUNyQjtJQUNBLE1BQU0sRUFBQ0UsVUFBVSxJQUFJLEVBQUVDLFFBQVEsRUFBRSxFQUFDLEdBQUdSLFFBQVEsQ0FBQztJQUM5QyxNQUFNUyxjQUFjbEIsV0FBV2lCLE9BQU9EO0lBQ3RDLE1BQU1HLGtCQUFrQmxCLGNBQWNPLFFBQVEsSUFBSUU7SUFFbEQsT0FBTyxNQUFNRSxVQUNWUSxJQUFJLENBQ0gsSUFBSXRCLGVBQWU7UUFDakJ1QixTQUFTRjtRQUNURyxtQkFBbUI7WUFDakIsdUJBQXVCO2dCQUNyQkMsVUFBVTtnQkFDVkMsYUFBYTtZQUNmO1lBQ0Esd0JBQXdCO2dCQUN0QkQsVUFBVTtnQkFDVkMsYUFBYWpCLFFBQVFrQixNQUFNLEVBQUVDLFNBQVNDLElBQUlDLE9BQU9DLFFBQVEsTUFBTSxJQUFJQyxVQUFVLEdBQUcsT0FBTztZQUN6RjtRQUNGO1FBQ0FDLGFBQWFiO0lBQ2YsSUFFRGMsSUFBSSxDQUFDLENBQUNDO1FBQ0xDLFFBQVFDLEdBQUcsQ0FBQztZQUFDRjtRQUFHO1FBQ2hCLE9BQU87SUFDVCxHQUNDRyxLQUFLLENBQUMsQ0FBQ0M7UUFDTkgsUUFBUUMsR0FBRyxDQUFDO1lBQUNFO1FBQUs7UUFDbEJqQyxTQUFTO1lBQ1BPO1lBQ0EyQixVQUFVakM7WUFDVmtDLE9BQU9wQyxXQUFXcUMsU0FBUztRQUM3QixHQUFHSCxPQUFPO1lBQUNJLFNBQVNoQztRQUFlO1FBRW5DLE9BQU87SUFDVDtBQUNKLEVBQUUifQ==
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { aql } from 'arangojs';
5
5
  import { ErrorTypes } from '../types/error.types.js';
6
6
  import { logError } from '../utils/analyticsUtils.js';
@@ -31,4 +31,4 @@ export const updateGlobalStatistics = (context)=>{
31
31
  }, error, context));
32
32
  };
33
33
 
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvc3RhdGlzdGljcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldEl0ZW1CeX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7Z2V0QWN0aXZlVXNlckNvdW50fSBmcm9tICcuL3VzZXJzLmpzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1N0YXRpc3RpY3NUeXBlfSBmcm9tICcuLi90eXBlcy9zdGF0aXN0aWNzLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdzdGF0aXN0aWNzJztcblxuZXhwb3J0IGNvbnN0IGdldEdsb2JhbFN0YXRpc3RpY3MgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8U3RhdGlzdGljc1R5cGU+ID0+IHtcbiAgcmV0dXJuIGdldEl0ZW1CeTxTdGF0aXN0aWNzVHlwZT4oXG4gICAgY29udGV4dCxcbiAgICAnc3RhdGlzdGljcycsXG4gICAge2lzR2xvYmFsOiB0cnVlfVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUdsb2JhbFN0YXRpc3RpY3MgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8U3RhdGlzdGljc1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZUdsb2JhbFN0YXRpc3RpY3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFjdGl2ZVVzZXJzID0gZ2V0QWN0aXZlVXNlckNvdW50KGNvbnRleHQpO1xuICBjb25zdCB1cGRhdGVkRGF0YSA9IHthY3RpdmVVc2Vyc307XG5cbiAgY29uc3QgdXBkYXRlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7aXNHbG9iYWw6IHRydWV9XG4gIElOU0VSVCAke3VwZGF0ZWREYXRhfVxuICBVUERBVEUgJHt1cGRhdGVkRGF0YX1cbiAgSU4gc3RhdGlzdGljcyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeSh1cGRhdGVRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG4iXSwibmFtZXMiOlsiYXFsIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwidXNlRGIiLCJnZXRJdGVtQnkiLCJnZXRBY3RpdmVVc2VyQ291bnQiLCJldmVudENhdGVnb3J5IiwiZ2V0R2xvYmFsU3RhdGlzdGljcyIsImNvbnRleHQiLCJpc0dsb2JhbCIsInVwZGF0ZUdsb2JhbFN0YXRpc3RpY3MiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJhY3RpdmVVc2VycyIsInVwZGF0ZWREYXRhIiwidXBkYXRlUXVlcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsR0FBRyxRQUFPLFdBQVc7QUFHN0IsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsU0FBUyxRQUFPLFlBQVk7QUFDcEMsU0FBUUMsa0JBQWtCLFFBQU8sYUFBYTtBQUs5QyxNQUFNQyxnQkFBZ0I7QUFFdEIsT0FBTyxNQUFNQyxzQkFBc0IsT0FBT0M7SUFDeEMsT0FBT0osVUFDTEksU0FDQSxjQUNBO1FBQUNDLFVBQVU7SUFBSTtBQUVuQixFQUFFO0FBRUYsT0FBTyxNQUFNQyx5QkFBeUIsQ0FBQ0Y7SUFDckMsTUFBTUcsU0FBUztJQUNmLE1BQU0sRUFBQ0MsWUFBWSxFQUFDLEdBQUdKO0lBQ3ZCLE1BQU1LLGNBQWNSLG1CQUFtQkc7SUFDdkMsTUFBTU0sY0FBYztRQUFDRDtJQUFXO0lBRWhDLE1BQU1FLGNBQXdCZixHQUFHLENBQUM7U0FDM0IsRUFBRWMsWUFBWTtTQUNkLEVBQUVBLFlBQVk7MEJBQ0csQ0FBQztJQUV6QixPQUFPWCxNQUFNUyxjQUFjSSxLQUFLLENBQUNELGFBQzlCRSxJQUFJLENBQUMsQ0FBQ0MsU0FBV0EsT0FBT0MsSUFBSSxJQUM1QkMsS0FBSyxDQUFDLENBQUNDLFFBQWlCbkIsU0FBUztZQUNoQ1M7WUFDQVcsVUFBVWhCO1lBQ1ZpQixPQUFPdEIsV0FBV3VCLGNBQWM7UUFDbEMsR0FBR0gsT0FBT2I7QUFDZCxFQUFFIn0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvc3RhdGlzdGljcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldEl0ZW1CeX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7Z2V0QWN0aXZlVXNlckNvdW50fSBmcm9tICcuL3VzZXJzLmpzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1N0YXRpc3RpY3NUeXBlfSBmcm9tICcuLi90eXBlcy9zdGF0aXN0aWNzLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdzdGF0aXN0aWNzJztcblxuZXhwb3J0IGNvbnN0IGdldEdsb2JhbFN0YXRpc3RpY3MgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8U3RhdGlzdGljc1R5cGU+ID0+IHtcbiAgcmV0dXJuIGdldEl0ZW1CeTxTdGF0aXN0aWNzVHlwZT4oXG4gICAgY29udGV4dCxcbiAgICAnc3RhdGlzdGljcycsXG4gICAge2lzR2xvYmFsOiB0cnVlfVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUdsb2JhbFN0YXRpc3RpY3MgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8U3RhdGlzdGljc1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZUdsb2JhbFN0YXRpc3RpY3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFjdGl2ZVVzZXJzID0gZ2V0QWN0aXZlVXNlckNvdW50KGNvbnRleHQpO1xuICBjb25zdCB1cGRhdGVkRGF0YSA9IHthY3RpdmVVc2Vyc307XG5cbiAgY29uc3QgdXBkYXRlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7aXNHbG9iYWw6IHRydWV9XG4gIElOU0VSVCAke3VwZGF0ZWREYXRhfVxuICBVUERBVEUgJHt1cGRhdGVkRGF0YX1cbiAgSU4gc3RhdGlzdGljcyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeSh1cGRhdGVRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG4iXSwibmFtZXMiOlsiYXFsIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwidXNlRGIiLCJnZXRJdGVtQnkiLCJnZXRBY3RpdmVVc2VyQ291bnQiLCJldmVudENhdGVnb3J5IiwiZ2V0R2xvYmFsU3RhdGlzdGljcyIsImNvbnRleHQiLCJpc0dsb2JhbCIsInVwZGF0ZUdsb2JhbFN0YXRpc3RpY3MiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJhY3RpdmVVc2VycyIsInVwZGF0ZWREYXRhIiwidXBkYXRlUXVlcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsR0FBRyxRQUFPLFdBQVc7QUFHN0IsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsU0FBUyxRQUFPLFlBQVk7QUFDcEMsU0FBUUMsa0JBQWtCLFFBQU8sYUFBYTtBQUs5QyxNQUFNQyxnQkFBZ0I7QUFFdEIsT0FBTyxNQUFNQyxzQkFBc0IsT0FBT0M7SUFDeEMsT0FBT0osVUFDTEksU0FDQSxjQUNBO1FBQUNDLFVBQVU7SUFBSTtBQUVuQixFQUFFO0FBRUYsT0FBTyxNQUFNQyx5QkFBeUIsQ0FBQ0Y7SUFDckMsTUFBTUcsU0FBUztJQUNmLE1BQU0sRUFBQ0MsWUFBWSxFQUFDLEdBQUdKO0lBQ3ZCLE1BQU1LLGNBQWNSLG1CQUFtQkc7SUFDdkMsTUFBTU0sY0FBYztRQUFDRDtJQUFXO0lBRWhDLE1BQU1FLGNBQXdCZixHQUFHLENBQUM7U0FDM0IsRUFBRWMsWUFBWTtTQUNkLEVBQUVBLFlBQVk7MEJBQ0csQ0FBQztJQUV6QixPQUFPWCxNQUFNUyxjQUFjSSxLQUFLLENBQUNELGFBQzlCRSxJQUFJLENBQUMsQ0FBQ0MsU0FBV0EsT0FBT0MsSUFBSSxJQUM1QkMsS0FBSyxDQUFDLENBQUNDLFFBQWlCbkIsU0FBUztZQUNoQ1M7WUFDQVcsVUFBVWhCO1lBQ1ZpQixPQUFPdEIsV0FBV3VCLGNBQWM7UUFDbEMsR0FBR0gsT0FBT2I7QUFDZCxFQUFFIn0=