@nlabs/reaktor 0.1.5 → 0.1.7
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.
- package/lib/config.js +20 -11
- package/lib/data/conversations.js +69 -39
- package/lib/data/dynamodb.js +60 -27
- package/lib/data/email.js +50 -19
- package/lib/data/files.js +103 -46
- package/lib/data/groups.js +114 -67
- package/lib/data/images.js +169 -102
- package/lib/data/index.js +234 -24
- package/lib/data/ios.js +48 -23
- package/lib/data/locations.js +45 -29
- package/lib/data/messages.d.ts +2 -2
- package/lib/data/messages.js +105 -72
- package/lib/data/notifications.js +31 -14
- package/lib/data/payments.js +164 -114
- package/lib/data/posts.js +144 -87
- package/lib/data/reactions.js +58 -33
- package/lib/data/s3.js +54 -24
- package/lib/data/search.js +32 -19
- package/lib/data/sms.js +35 -15
- package/lib/data/subscription.js +78 -51
- package/lib/data/tags.js +90 -51
- package/lib/data/users.js +119 -72
- package/lib/index.js +42 -8
- package/lib/types/apps.js +1 -1
- package/lib/types/arangodb.js +1 -1
- package/lib/types/auth.js +1 -1
- package/lib/types/conversations.js +1 -1
- package/lib/types/email.js +1 -1
- package/lib/types/files.js +1 -1
- package/lib/types/google.js +1 -1
- package/lib/types/groups.js +1 -1
- package/lib/types/images.js +1 -1
- package/lib/types/index.js +210 -22
- package/lib/types/locations.js +1 -1
- package/lib/types/messages.d.ts +12 -7
- package/lib/types/messages.js +1 -1
- package/lib/types/notifications.js +1 -1
- package/lib/types/payments.js +1 -1
- package/lib/types/posts.js +1 -1
- package/lib/types/reactions.js +1 -1
- package/lib/types/tags.js +1 -1
- package/lib/types/users.d.ts +0 -1
- package/lib/types/users.js +1 -1
- package/lib/utils/analytics.js +23 -11
- package/lib/utils/arangodb.js +48 -19
- package/lib/utils/auth.js +31 -15
- package/lib/utils/graphql.js +16 -4
- package/lib/utils/index.js +78 -11
- package/lib/utils/objects.js +30 -10
- package/lib/utils/redis.js +21 -8
- package/package.json +5 -5
- package/index.d.ts +0 -1
package/lib/data/groups.js
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isGrouped = exports.getGroupsByReaction = exports.deleteGroup = exports.updateGroup = exports.addGroup = exports.createGroupEdge = exports.getGroupDetails = exports.getGroup = exports.getGroupListByTags = exports.getGroupListByUser = exports.getGroupList = void 0;
|
|
7
|
+
|
|
8
|
+
var _utils = require("@nlabs/utils");
|
|
9
|
+
|
|
10
|
+
var _arangojs = require("arangojs");
|
|
11
|
+
|
|
12
|
+
var _flatten = _interopRequireDefault(require("lodash/flatten"));
|
|
13
|
+
|
|
14
|
+
var _uniqBy = _interopRequireDefault(require("lodash/uniqBy"));
|
|
15
|
+
|
|
16
|
+
var _utils2 = require("../utils");
|
|
17
|
+
|
|
18
|
+
var _tags = require("./tags");
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
1
22
|
function _templateObject7() {
|
|
2
23
|
var data = _taggedTemplateLiteral(["FOR g IN groups\n FILTER g._key == ", "\n FOR u IN INBOUND g._id isGrouped\n FILTER u._key == ", "\n LIMIT 1\n RETURN u"]);
|
|
3
24
|
|
|
@@ -70,27 +91,21 @@ function _templateObject() {
|
|
|
70
91
|
|
|
71
92
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
72
93
|
|
|
73
|
-
import { createHash, parseChar, parseId } from '@nlabs/utils';
|
|
74
|
-
import { aql } from 'arangojs';
|
|
75
|
-
import flatten from 'lodash/flatten';
|
|
76
|
-
import uniqBy from 'lodash/uniqBy';
|
|
77
|
-
import { getLimit, logError, useDb } from '../utils';
|
|
78
|
-
import { extractTags } from './tags';
|
|
79
94
|
/**
|
|
80
95
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
81
96
|
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
82
97
|
*/
|
|
83
|
-
|
|
84
98
|
var eventCategory = 'groups';
|
|
85
|
-
|
|
99
|
+
|
|
100
|
+
var getGroupList = function getGroupList(context, from, to) {
|
|
86
101
|
var action = 'getListByApp';
|
|
87
102
|
var database = context.database;
|
|
88
|
-
var limit = getLimit(from, to);
|
|
103
|
+
var limit = (0, _utils2.getLimit)(from, to);
|
|
89
104
|
var aqlQry = "FOR g in groups\n LET users = (\n FOR u, l IN OUTBOUND g._id isGrouped\n RETURN MERGE (u, {type:l.type})\n )\n ".concat(limit.aql, "\n SORT g.added\n RETURN DISTINCT MERGE(g, {users:users})");
|
|
90
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
105
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
91
106
|
return cursor.all();
|
|
92
107
|
}).catch(function (error) {
|
|
93
|
-
return logError({
|
|
108
|
+
return (0, _utils2.logError)({
|
|
94
109
|
action: action,
|
|
95
110
|
category: eventCategory,
|
|
96
111
|
label: 'db_error'
|
|
@@ -99,32 +114,38 @@ export var getGroupList = function getGroupList(context, from, to) {
|
|
|
99
114
|
});
|
|
100
115
|
});
|
|
101
116
|
};
|
|
102
|
-
|
|
117
|
+
|
|
118
|
+
exports.getGroupList = getGroupList;
|
|
119
|
+
|
|
120
|
+
var getGroupListByUser = function getGroupListByUser(context, from, to) {
|
|
103
121
|
// const action: string = 'getListByUser';
|
|
104
122
|
var database = context.database,
|
|
105
123
|
sessionId = context.userId;
|
|
106
|
-
var limit = getLimit(from, to);
|
|
124
|
+
var limit = (0, _utils2.getLimit)(from, to);
|
|
107
125
|
var aqlQry = "FOR g, e IN INBOUND \"".concat("users/".concat(sessionId), "\" isGrouped\n LET users = (\n FOR u, l IN OUTBOUND g._id isGrouped\n RETURN MERGE (u, {type:l.type})\n )\n ", limit.aql, "\n SORT g.added\n RETURN DISTINCT MERGE(g, {users:users})");
|
|
108
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
126
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
109
127
|
return cursor.all();
|
|
110
128
|
}).catch(function (error) {
|
|
111
129
|
throw error;
|
|
112
130
|
});
|
|
113
131
|
};
|
|
114
|
-
|
|
132
|
+
|
|
133
|
+
exports.getGroupListByUser = getGroupListByUser;
|
|
134
|
+
|
|
135
|
+
var getGroupListByTags = function getGroupListByTags(context, tags, from, to) {
|
|
115
136
|
var action = 'getListByTags';
|
|
116
137
|
var database = context.database;
|
|
117
138
|
return Promise.all((tags || []).map(function (tagName) {
|
|
118
|
-
var formatTagName = parseId(tagName);
|
|
119
|
-
var limit = getLimit(from, to);
|
|
139
|
+
var formatTagName = (0, _utils.parseId)(tagName);
|
|
140
|
+
var limit = (0, _utils2.getLimit)(from, to);
|
|
120
141
|
var aqlQry = "FOR p, e IN OUTBOUND \"".concat("tags/".concat(formatTagName), "\" isTagged\n FOR u IN users\n LET likes = (\n FOR post, like IN INBOUND p._id likes\n FILTER like.value == 'like'\n RETURN like\n )\n LET dislikes = (\n FOR post, like IN INBOUND p._id likes\n FILTER like.value == 'dislike'\n RETURN like\n )\n FILTER e.type == 'post' && p.userId == u._key\n ", limit.aql, "\n SORT p.added\n RETURN DISTINCT MERGE(p, {user:u, likes:LENGTH(likes), dislikes:LENGTH(dislikes)})");
|
|
121
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
142
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
122
143
|
return cursor.all();
|
|
123
144
|
});
|
|
124
145
|
})).then(function (results) {
|
|
125
|
-
return
|
|
146
|
+
return (0, _uniqBy.default)((0, _flatten.default)(results), '_key');
|
|
126
147
|
}).catch(function (error) {
|
|
127
|
-
return logError({
|
|
148
|
+
return (0, _utils2.logError)({
|
|
128
149
|
action: action,
|
|
129
150
|
category: eventCategory,
|
|
130
151
|
label: 'db_error'
|
|
@@ -133,19 +154,22 @@ export var getGroupListByTags = function getGroupListByTags(context, tags, from,
|
|
|
133
154
|
});
|
|
134
155
|
});
|
|
135
156
|
};
|
|
136
|
-
|
|
157
|
+
|
|
158
|
+
exports.getGroupListByTags = getGroupListByTags;
|
|
159
|
+
|
|
160
|
+
var getGroup = function getGroup(context, itemId) {
|
|
137
161
|
var action = 'getItem';
|
|
138
162
|
var database = context.database,
|
|
139
163
|
sessionId = context.userId;
|
|
140
|
-
var formatItemId = parseId(itemId);
|
|
141
|
-
var aqlQry = aql(_templateObject(), "users/".concat(sessionId), formatItemId);
|
|
142
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
164
|
+
var formatItemId = (0, _utils.parseId)(itemId);
|
|
165
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject(), "users/".concat(sessionId), formatItemId);
|
|
166
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
143
167
|
return cursor.next();
|
|
144
168
|
}).then(function () {
|
|
145
169
|
var group = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
146
170
|
return group;
|
|
147
171
|
}).catch(function (error) {
|
|
148
|
-
return logError({
|
|
172
|
+
return (0, _utils2.logError)({
|
|
149
173
|
action: action,
|
|
150
174
|
category: eventCategory,
|
|
151
175
|
label: 'db_error'
|
|
@@ -154,18 +178,21 @@ export var getGroup = function getGroup(context, itemId) {
|
|
|
154
178
|
});
|
|
155
179
|
});
|
|
156
180
|
};
|
|
157
|
-
|
|
181
|
+
|
|
182
|
+
exports.getGroup = getGroup;
|
|
183
|
+
|
|
184
|
+
var getGroupDetails = function getGroupDetails(context, groupId) {
|
|
158
185
|
var action = 'getDetails';
|
|
159
186
|
var database = context.database;
|
|
160
|
-
var formatGroupId = parseId(groupId);
|
|
161
|
-
var aqlQry = aql(_templateObject2(), formatGroupId);
|
|
162
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
187
|
+
var formatGroupId = (0, _utils.parseId)(groupId);
|
|
188
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject2(), formatGroupId);
|
|
189
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
163
190
|
return cursor.next();
|
|
164
191
|
}).then(function () {
|
|
165
192
|
var group = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
166
193
|
return group;
|
|
167
194
|
}).catch(function (error) {
|
|
168
|
-
return logError({
|
|
195
|
+
return (0, _utils2.logError)({
|
|
169
196
|
action: action,
|
|
170
197
|
category: eventCategory,
|
|
171
198
|
label: 'db_error'
|
|
@@ -174,21 +201,24 @@ export var getGroupDetails = function getGroupDetails(context, groupId) {
|
|
|
174
201
|
});
|
|
175
202
|
});
|
|
176
203
|
};
|
|
177
|
-
|
|
204
|
+
|
|
205
|
+
exports.getGroupDetails = getGroupDetails;
|
|
206
|
+
|
|
207
|
+
var createGroupEdge = function createGroupEdge(database, userId, groupId, type) {
|
|
178
208
|
var action = 'createGroupEdge';
|
|
179
|
-
var formatUserId = parseId(userId);
|
|
180
|
-
var formatGroupId = parseId(groupId);
|
|
181
|
-
var formatType = parseChar(type, 16);
|
|
209
|
+
var formatUserId = (0, _utils.parseId)(userId);
|
|
210
|
+
var formatGroupId = (0, _utils.parseId)(groupId);
|
|
211
|
+
var formatType = (0, _utils.parseChar)(type, 16);
|
|
182
212
|
var now = Date.now();
|
|
183
|
-
var edgeCollection = useDb(database).edgeCollection('isGrouped');
|
|
184
|
-
var edgeId = createHash("group-".concat(formatUserId, "-").concat(formatGroupId));
|
|
213
|
+
var edgeCollection = (0, _utils2.useDb)(database).edgeCollection('isGrouped');
|
|
214
|
+
var edgeId = (0, _utils.createHash)("group-".concat(formatUserId, "-").concat(formatGroupId));
|
|
185
215
|
var edge = {
|
|
186
216
|
_key: edgeId,
|
|
187
217
|
added: now,
|
|
188
218
|
type: formatType
|
|
189
219
|
};
|
|
190
220
|
return edgeCollection.save(edge, "users/".concat(formatUserId), "groups/".concat(formatGroupId)).catch(function (error) {
|
|
191
|
-
return logError({
|
|
221
|
+
return (0, _utils2.logError)({
|
|
192
222
|
action: action,
|
|
193
223
|
category: eventCategory,
|
|
194
224
|
label: 'db_error'
|
|
@@ -199,7 +229,10 @@ export var createGroupEdge = function createGroupEdge(database, userId, groupId,
|
|
|
199
229
|
});
|
|
200
230
|
});
|
|
201
231
|
};
|
|
202
|
-
|
|
232
|
+
|
|
233
|
+
exports.createGroupEdge = createGroupEdge;
|
|
234
|
+
|
|
235
|
+
var addGroup = function addGroup(context) {
|
|
203
236
|
var item = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
204
237
|
var action = 'add';
|
|
205
238
|
var database = context.database,
|
|
@@ -210,9 +243,9 @@ export var addGroup = function addGroup(context) {
|
|
|
210
243
|
_item$name = item.name,
|
|
211
244
|
name = _item$name === void 0 ? 'Untitled' : _item$name,
|
|
212
245
|
type = item.type;
|
|
213
|
-
var id = createHash("group-".concat(sessionId));
|
|
246
|
+
var id = (0, _utils.createHash)("group-".concat(sessionId));
|
|
214
247
|
var formatDesc = description.substr(0, 640);
|
|
215
|
-
var formatType = parseChar(type, 16) || 'private';
|
|
248
|
+
var formatType = (0, _utils.parseChar)(type, 16) || 'private';
|
|
216
249
|
var insert = {
|
|
217
250
|
_key: id,
|
|
218
251
|
added: now,
|
|
@@ -221,8 +254,8 @@ export var addGroup = function addGroup(context) {
|
|
|
221
254
|
name: name,
|
|
222
255
|
type: formatType
|
|
223
256
|
};
|
|
224
|
-
var db = useDb(database);
|
|
225
|
-
var aqlQry = aql(_templateObject3(), insert);
|
|
257
|
+
var db = (0, _utils2.useDb)(database);
|
|
258
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject3(), insert);
|
|
226
259
|
return db.query(aqlQry).then(function (cursor) {
|
|
227
260
|
return cursor.next();
|
|
228
261
|
}).then(function () {
|
|
@@ -230,13 +263,13 @@ export var addGroup = function addGroup(context) {
|
|
|
230
263
|
var itemType = 'groups'; // Update linked tags
|
|
231
264
|
|
|
232
265
|
var groupId = group._key;
|
|
233
|
-
return extractTags(db, itemType, groupId, formatDesc).then(function () {
|
|
266
|
+
return (0, _tags.extractTags)(db, itemType, groupId, formatDesc).then(function () {
|
|
234
267
|
return createGroupEdge(database, sessionId, groupId, 'admin').then(function () {
|
|
235
268
|
return group;
|
|
236
269
|
});
|
|
237
270
|
});
|
|
238
271
|
}).catch(function (error) {
|
|
239
|
-
return logError({
|
|
272
|
+
return (0, _utils2.logError)({
|
|
240
273
|
action: action,
|
|
241
274
|
category: eventCategory,
|
|
242
275
|
label: 'db_error'
|
|
@@ -245,7 +278,10 @@ export var addGroup = function addGroup(context) {
|
|
|
245
278
|
});
|
|
246
279
|
});
|
|
247
280
|
};
|
|
248
|
-
|
|
281
|
+
|
|
282
|
+
exports.addGroup = addGroup;
|
|
283
|
+
|
|
284
|
+
var updateGroup = function updateGroup(context) {
|
|
249
285
|
var item = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
250
286
|
var action = 'update';
|
|
251
287
|
var database = context.database;
|
|
@@ -254,7 +290,7 @@ export var updateGroup = function updateGroup(context) {
|
|
|
254
290
|
id = item.id,
|
|
255
291
|
_item$name2 = item.name,
|
|
256
292
|
name = _item$name2 === void 0 ? 'Untitled' : _item$name2;
|
|
257
|
-
var itemId = parseId(id);
|
|
293
|
+
var itemId = (0, _utils.parseId)(id);
|
|
258
294
|
var now = Date.now();
|
|
259
295
|
var formatDesc = description.substr(0, 640);
|
|
260
296
|
var update = {
|
|
@@ -262,8 +298,8 @@ export var updateGroup = function updateGroup(context) {
|
|
|
262
298
|
modified: now,
|
|
263
299
|
name: name
|
|
264
300
|
};
|
|
265
|
-
var db = useDb(database);
|
|
266
|
-
var aqlQry = aql(_templateObject4(), itemId, update);
|
|
301
|
+
var db = (0, _utils2.useDb)(database);
|
|
302
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject4(), itemId, update);
|
|
267
303
|
return db.query(aqlQry).then(function (cursor) {
|
|
268
304
|
return cursor.next();
|
|
269
305
|
}).then(function () {
|
|
@@ -271,11 +307,11 @@ export var updateGroup = function updateGroup(context) {
|
|
|
271
307
|
var groupKey = group._key;
|
|
272
308
|
var itemType = 'groups'; // Update linked tags
|
|
273
309
|
|
|
274
|
-
return extractTags(db, itemType, groupKey, description).then(function () {
|
|
310
|
+
return (0, _tags.extractTags)(db, itemType, groupKey, description).then(function () {
|
|
275
311
|
return group;
|
|
276
312
|
});
|
|
277
313
|
}).catch(function (error) {
|
|
278
|
-
return logError({
|
|
314
|
+
return (0, _utils2.logError)({
|
|
279
315
|
action: action,
|
|
280
316
|
category: eventCategory,
|
|
281
317
|
label: 'db_error'
|
|
@@ -284,18 +320,21 @@ export var updateGroup = function updateGroup(context) {
|
|
|
284
320
|
});
|
|
285
321
|
});
|
|
286
322
|
};
|
|
287
|
-
|
|
323
|
+
|
|
324
|
+
exports.updateGroup = updateGroup;
|
|
325
|
+
|
|
326
|
+
var deleteGroup = function deleteGroup(context, itemId) {
|
|
288
327
|
var action = 'delete';
|
|
289
328
|
var database = context.database;
|
|
290
|
-
var formatItemId = parseId(itemId);
|
|
291
|
-
var aqlQry = aql(_templateObject5(), formatItemId);
|
|
292
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
329
|
+
var formatItemId = (0, _utils.parseId)(itemId);
|
|
330
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject5(), formatItemId);
|
|
331
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
293
332
|
return cursor.next();
|
|
294
333
|
}).then(function () {
|
|
295
334
|
var group = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
296
335
|
return group;
|
|
297
336
|
}).catch(function (error) {
|
|
298
|
-
return logError({
|
|
337
|
+
return (0, _utils2.logError)({
|
|
299
338
|
action: action,
|
|
300
339
|
category: eventCategory,
|
|
301
340
|
label: 'db_error'
|
|
@@ -304,18 +343,21 @@ export var deleteGroup = function deleteGroup(context, itemId) {
|
|
|
304
343
|
});
|
|
305
344
|
});
|
|
306
345
|
};
|
|
307
|
-
|
|
346
|
+
|
|
347
|
+
exports.deleteGroup = deleteGroup;
|
|
348
|
+
|
|
349
|
+
var getGroupsByReaction = function getGroupsByReaction(context, reaction) {
|
|
308
350
|
var action = 'getGroupsByReaction';
|
|
309
351
|
var database = context.database,
|
|
310
352
|
sessionId = context.userId;
|
|
311
|
-
var formatReaction = parseChar(reaction, 32);
|
|
353
|
+
var formatReaction = (0, _utils.parseChar)(reaction, 32);
|
|
312
354
|
var userDocId = "users/".concat(sessionId); // Query
|
|
313
355
|
|
|
314
|
-
var aqlQry = aql(_templateObject6(), userDocId, formatReaction);
|
|
315
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
356
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject6(), userDocId, formatReaction);
|
|
357
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
316
358
|
return cursor.all();
|
|
317
359
|
}).catch(function (error) {
|
|
318
|
-
return logError({
|
|
360
|
+
return (0, _utils2.logError)({
|
|
319
361
|
action: action,
|
|
320
362
|
category: eventCategory,
|
|
321
363
|
label: 'db_error'
|
|
@@ -324,12 +366,15 @@ export var getGroupsByReaction = function getGroupsByReaction(context, reaction)
|
|
|
324
366
|
});
|
|
325
367
|
});
|
|
326
368
|
};
|
|
327
|
-
|
|
369
|
+
|
|
370
|
+
exports.getGroupsByReaction = getGroupsByReaction;
|
|
371
|
+
|
|
372
|
+
var isGrouped = function isGrouped(database, userId, groupId) {
|
|
328
373
|
var action = 'isGrouped';
|
|
329
|
-
var formatUserId = parseId(userId);
|
|
330
|
-
var formatGroupId = parseId(groupId);
|
|
331
|
-
var aqlQry = aql(_templateObject7(), formatGroupId, formatUserId);
|
|
332
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
374
|
+
var formatUserId = (0, _utils.parseId)(userId);
|
|
375
|
+
var formatGroupId = (0, _utils.parseId)(groupId);
|
|
376
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject7(), formatGroupId, formatUserId);
|
|
377
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
333
378
|
return cursor.all();
|
|
334
379
|
}).then(function () {
|
|
335
380
|
var results = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
@@ -340,7 +385,7 @@ export var isGrouped = function isGrouped(database, userId, groupId) {
|
|
|
340
385
|
userId: userId
|
|
341
386
|
};
|
|
342
387
|
}).catch(function (error) {
|
|
343
|
-
return logError({
|
|
388
|
+
return (0, _utils2.logError)({
|
|
344
389
|
action: action,
|
|
345
390
|
category: eventCategory,
|
|
346
391
|
label: 'db_error'
|
|
@@ -351,4 +396,6 @@ export var isGrouped = function isGrouped(database, userId, groupId) {
|
|
|
351
396
|
});
|
|
352
397
|
});
|
|
353
398
|
};
|
|
354
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2dyb3Vwcy50cyJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsImFxbCIsImZsYXR0ZW4iLCJ1bmlxQnkiLCJnZXRMaW1pdCIsImxvZ0Vycm9yIiwidXNlRGIiLCJleHRyYWN0VGFncyIsImV2ZW50Q2F0ZWdvcnkiLCJnZXRHcm91cExpc3QiLCJjb250ZXh0IiwiZnJvbSIsInRvIiwiYWN0aW9uIiwiZGF0YWJhc2UiLCJsaW1pdCIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImFsbCIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiZ2V0R3JvdXBMaXN0QnlVc2VyIiwic2Vzc2lvbklkIiwidXNlcklkIiwiZ2V0R3JvdXBMaXN0QnlUYWdzIiwidGFncyIsIlByb21pc2UiLCJtYXAiLCJ0YWdOYW1lIiwiZm9ybWF0VGFnTmFtZSIsInJlc3VsdHMiLCJnZXRHcm91cCIsIml0ZW1JZCIsImZvcm1hdEl0ZW1JZCIsIm5leHQiLCJncm91cCIsImdldEdyb3VwRGV0YWlscyIsImdyb3VwSWQiLCJmb3JtYXRHcm91cElkIiwiY3JlYXRlR3JvdXBFZGdlIiwidHlwZSIsImZvcm1hdFVzZXJJZCIsImZvcm1hdFR5cGUiLCJub3ciLCJEYXRlIiwiZWRnZUNvbGxlY3Rpb24iLCJlZGdlSWQiLCJlZGdlIiwiX2tleSIsImFkZGVkIiwic2F2ZSIsImlkIiwiYWRkR3JvdXAiLCJpdGVtIiwiZGVzY3JpcHRpb24iLCJuYW1lIiwiZm9ybWF0RGVzYyIsInN1YnN0ciIsImluc2VydCIsIm1vZGlmaWVkIiwiZGIiLCJpdGVtVHlwZSIsInVwZGF0ZUdyb3VwIiwidXBkYXRlIiwiZ3JvdXBLZXkiLCJkZWxldGVHcm91cCIsImdldEdyb3Vwc0J5UmVhY3Rpb24iLCJyZWFjdGlvbiIsImZvcm1hdFJlYWN0aW9uIiwidXNlckRvY0lkIiwiaXNHcm91cGVkIiwiaXNWYWxpZCIsImxlbmd0aCJd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akIsUUFBUSxDQUFDO0FBQ2hDUSxNQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDVSxNQUFBQSxRQUFRLEVBQUVmLGFBRnNCO0FBR2hDZ0IsTUFBQUEsS0FBSyxFQUFFO0FBSHlCLEtBQUQsRUFJOUJGLEtBSjhCLEVBSXZCO0FBQUNpQyxNQUFBQSxFQUFFLEVBQUU1QjtBQUFMLEtBSnVCLENBQVIsQ0FJRFQsSUFKQyxDQUlJO0FBQUEsYUFBTSxJQUFOO0FBQUEsS0FKSixDQUFsQjtBQUFBLEdBWEYsQ0FBUDtBQWdCRCxDQTNCTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VDaGFyLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWwsIERhdGFiYXNlfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9saWIvY2pzL2FxbC1xdWVyeSc7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9saWIvY2pzL2N1cnNvcic7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICdsb2Rhc2gvZmxhdHRlbic7XG5pbXBvcnQgdW5pcUJ5IGZyb20gJ2xvZGFzaC91bmlxQnknO1xuXG5pbXBvcnQge0FyYW5nb0RCTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aCc7XG5pbXBvcnQge0dyb3VwRWRnZVR5cGUsIEdyb3VwVHlwZSwgR3JvdXBVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvZ3JvdXBzJztcbmltcG9ydCB7Z2V0TGltaXQsIGxvZ0Vycm9yLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtleHRyYWN0VGFnc30gZnJvbSAnLi90YWdzJztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2dyb3Vwcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlBcHAnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBnIGluIGdyb3Vwc1xuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgbCBJTiBPVVRCT1VORCBnLl9pZCBpc0dyb3VwZWRcbiAgICAgICAgUkVUVVJOIE1FUkdFICh1LCB7dHlwZTpsLnR5cGV9KVxuICAgICAgKVxuICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICBTT1JUIGcuYWRkZWRcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGcsIGUgSU4gSU5CT1VORCBcIiR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9XCIgaXNHcm91cGVkXG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkIGlzR3JvdXBlZFxuICAgICAgICBSRVRVUk4gTUVSR0UgKHUsIHt0eXBlOmwudHlwZX0pXG4gICAgICApXG4gICAgICAke2xpbWl0LmFxbH1cbiAgICAgIFNPUlQgZy5hZGRlZFxuICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKGcsIHt1c2Vyczp1c2Vyc30pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeVRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhZ3M6IHN0cmluZ1tdLFxuICBmcm9tOiBudW1iZXIsXG4gIHRvOiBudW1iZXJcbik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5VGFncyc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuXG4gIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAodGFncyB8fCBbXSkubWFwKCh0YWdOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdFRhZ05hbWU6IHN0cmluZyA9IHBhcnNlSWQodGFnTmFtZSk7XG4gICAgICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgICAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwLCBlIElOIE9VVEJPVU5EIFwiJHtgdGFncy8ke2Zvcm1hdFRhZ05hbWV9YH1cIiBpc1RhZ2dlZFxuICAgICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgICAgTEVUIGxpa2VzID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIGxpa2UgSU4gSU5CT1VORCBwLl9pZCBsaWtlc1xuICAgICAgICAgICAgRklMVEVSIGxpa2UudmFsdWUgPT0gJ2xpa2UnXG4gICAgICAgICAgICBSRVRVUk4gbGlrZVxuICAgICAgICAgIClcbiAgICAgICAgICBMRVQgZGlzbGlrZXMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgbGlrZSBJTiBJTkJPVU5EIHAuX2lkIGxpa2VzXG4gICAgICAgICAgICBGSUxURVIgbGlrZS52YWx1ZSA9PSAnZGlzbGlrZSdcbiAgICAgICAgICAgIFJFVFVSTiBsaWtlXG4gICAgICAgICAgKVxuICAgICAgICAgIEZJTFRFUiBlLnR5cGUgPT0gJ3Bvc3QnICYmIHAudXNlcklkID09IHUuX2tleVxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7dXNlcjp1LCBsaWtlczpMRU5HVEgobGlrZXMpLCBkaXNsaWtlczpMRU5HVEgoZGlzbGlrZXMpfSlgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSkudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgICB9KVxuICApXG4gICAgLnRoZW4oKHJlc3VsdHMpID0+IHVuaXFCeShmbGF0dGVuKHJlc3VsdHMpLCAnX2tleScpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxHcm91cFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZywgZSBJTiBJTkJPVU5EICR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9IGlzR3JvdXBlZFxuICAgICAgRklMVEVSIGcuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICAgIExFVCB1c2VycyA9IChcbiAgICAgICAgRk9SIHUsIGwgSU4gT1VUQk9VTkQgZy5faWQgaXNHcm91cGVkXG4gICAgICAgIFJFVFVSTiBNRVJHRSAodSwge3R5cGU6bC50eXBlfSlcbiAgICAgIClcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUgPSB7fSkgPT4gZ3JvdXApXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBEZXRhaWxzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGdyb3VwSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERldGFpbHMnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0R3JvdXBJZDogc3RyaW5nID0gcGFyc2VJZChncm91cElkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZyBJTiBncm91cHNcbiAgICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRHcm91cElkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIGdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlID0ge30pID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwRWRnZSA9IChcbiAgZGF0YWJhc2U6IHN0cmluZyxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGdyb3VwSWQ6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nXG4pOiBQcm9taXNlPEdyb3VwRWRnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnY3JlYXRlR3JvdXBFZGdlJztcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4gIGNvbnN0IGZvcm1hdFR5cGU6IHN0cmluZyA9IHBhcnNlQ2hhcih0eXBlLCAxNik7XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlKS5lZGdlQ29sbGVjdGlvbignaXNHcm91cGVkJyk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgZ3JvdXAtJHtmb3JtYXRVc2VySWR9LSR7Zm9ybWF0R3JvdXBJZH1gKTtcblxuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2tleTogZWRnZUlkLFxuICAgIGFkZGVkOiBub3csXG4gICAgdHlwZTogZm9ybWF0VHlwZVxuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gLCBgZ3JvdXBzLyR7Zm9ybWF0R3JvdXBJZH1gKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHtpZDogZm9ybWF0VXNlcklkfSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkR3JvdXAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogR3JvdXBUeXBlID0ge30pOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGQnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgbmFtZSA9ICdVbnRpdGxlZCcsXG4gICAgdHlwZVxuICB9OiBHcm91cFR5cGUgPSBpdGVtO1xuICBjb25zdCBpZDogc3RyaW5nID0gY3JlYXRlSGFzaChgZ3JvdXAtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdERlc2M6IHN0cmluZyA9IGRlc2NyaXB0aW9uLnN1YnN0cigwLCA2NDApO1xuICBjb25zdCBmb3JtYXRUeXBlOiBzdHJpbmcgPSBwYXJzZUNoYXIodHlwZSwgMTYpIHx8ICdwcml2YXRlJztcbiAgY29uc3QgaW5zZXJ0OiBHcm91cFR5cGUgPSB7XG4gICAgX2tleTogaWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBkZXNjcmlwdGlvbjogZm9ybWF0RGVzYyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWUsXG4gICAgdHlwZTogZm9ybWF0VHlwZVxuICB9O1xuICBjb25zdCBkYjogRGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZSk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBncm91cHMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBpdGVtVHlwZTogc3RyaW5nID0gJ2dyb3Vwcyc7XG5cbiAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgdGFnc1xuICAgICAgY29uc3Qge19rZXk6IGdyb3VwSWR9OiBHcm91cFR5cGUgPSBncm91cDtcbiAgICAgIHJldHVybiBleHRyYWN0VGFncyhkYiwgaXRlbVR5cGUsIGdyb3VwSWQsIGZvcm1hdERlc2MpXG4gICAgICAgIC50aGVuKCgpID0+IGNyZWF0ZUdyb3VwRWRnZShkYXRhYmFzZSwgc2Vzc2lvbklkLCBncm91cElkLCAnYWRtaW4nKS50aGVuKCgpID0+IGdyb3VwKSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUgPSB7fSk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBpZCxcbiAgICBuYW1lID0gJ1VudGl0bGVkJ1xuICB9OiBHcm91cFR5cGUgPSBpdGVtO1xuICBjb25zdCBpdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQoaWQpO1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdERlc2M6IHN0cmluZyA9IGRlc2NyaXB0aW9uLnN1YnN0cigwLCA2NDApO1xuICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICBkZXNjcmlwdGlvbjogZm9ybWF0RGVzYyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWVcbiAgfTtcbiAgY29uc3QgZGI6IERhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2UpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke2l0ZW1JZH0gV0lUSCAke3VwZGF0ZX0gSU4gZ3JvdXBzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3Qge19rZXk6IGdyb3VwS2V5fSA9IGdyb3VwO1xuICAgICAgY29uc3QgaXRlbVR5cGU6IHN0cmluZyA9ICdncm91cHMnO1xuXG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3NcbiAgICAgIHJldHVybiBleHRyYWN0VGFncyhkYiwgaXRlbVR5cGUsIGdyb3VwS2V5LCBkZXNjcmlwdGlvbikudGhlbigoKSA9PiBncm91cCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZyBJTiBncm91cHNcbiAgICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgICBSRU1PVkUgZyBJTiBncm91cHNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlID0ge30pID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3Vwc0J5UmVhY3Rpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgcmVhY3Rpb246IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0R3JvdXBzQnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb246IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpO1xuICBjb25zdCB1c2VyRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIHIgSU4gT1VUQk9VTkQgJHt1c2VyRG9jSWR9IGhhc1JlYWN0aW9uXG4gICAgICBGSUxURVIgci52YWx1ZSA9PSAke2Zvcm1hdFJlYWN0aW9ufVxuICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgUkVUVVJOIHt2YWx1ZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzR3JvdXBlZCA9IChkYXRhYmFzZTogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxHcm91cFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2lzR3JvdXBlZCc7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnIElOIGdyb3Vwc1xuICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRHcm91cElkfVxuICAgIEZPUiB1IElOIElOQk9VTkQgZy5faWQgaXNHcm91cGVkXG4gICAgRklMVEVSIHUuX2tleSA9PSAke2Zvcm1hdFVzZXJJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKHJlc3VsdHMgPSBbXSkgPT4ge1xuICAgICAgY29uc3QgaXNWYWxpZCA9ICEhcmVzdWx0cy5sZW5ndGg7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIGlzVmFsaWQsXG4gICAgICAgIHVzZXJJZFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHtpZDogdXNlcklkfSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuIl19
|
|
399
|
+
|
|
400
|
+
exports.isGrouped = isGrouped;
|
|
401
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2dyb3Vwcy50cyJdLCJuYW1lcyI6WyJldmVudENhdGVnb3J5IiwiZ2V0R3JvdXBMaXN0IiwiY29udGV4dCIsImZyb20iLCJ0byIsImFjdGlvbiIsImRhdGFiYXNlIiwibGltaXQiLCJhcWxRcnkiLCJhcWwiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJhbGwiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsImdldEdyb3VwTGlzdEJ5VXNlciIsInNlc3Npb25JZCIsInVzZXJJZCIsImdldEdyb3VwTGlzdEJ5VGFncyIsInRhZ3MiLCJQcm9taXNlIiwibWFwIiwidGFnTmFtZSIsImZvcm1hdFRhZ05hbWUiLCJyZXN1bHRzIiwiZ2V0R3JvdXAiLCJpdGVtSWQiLCJmb3JtYXRJdGVtSWQiLCJuZXh0IiwiZ3JvdXAiLCJnZXRHcm91cERldGFpbHMiLCJncm91cElkIiwiZm9ybWF0R3JvdXBJZCIsImNyZWF0ZUdyb3VwRWRnZSIsInR5cGUiLCJmb3JtYXRVc2VySWQiLCJmb3JtYXRUeXBlIiwibm93IiwiRGF0ZSIsImVkZ2VDb2xsZWN0aW9uIiwiZWRnZUlkIiwiZWRnZSIsIl9rZXkiLCJhZGRlZCIsInNhdmUiLCJpZCIsImFkZEdyb3VwIiwiaXRlbSIsImRlc2NyaXB0aW9uIiwibmFtZSIsImZvcm1hdERlc2MiLCJzdWJzdHIiLCJpbnNlcnQiLCJtb2RpZmllZCIsImRiIiwiaXRlbVR5cGUiLCJ1cGRhdGVHcm91cCIsInVwZGF0ZSIsImdyb3VwS2V5IiwiZGVsZXRlR3JvdXAiLCJnZXRHcm91cHNCeVJlYWN0aW9uIiwicmVhY3Rpb24iLCJmb3JtYXRSZWFjdGlvbiIsInVzZXJEb2NJZCIsImlzR3JvdXBlZCIsImlzVmFsaWQiLCJsZW5ndGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFLQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QURELEVBRUpGLElBRkksQ0FFQyxZQUFrQjtBQUFBLFFBQWpCZ0IsT0FBaUIsdUVBQVAsRUFBTztBQUN0QixRQUFNeUMsT0FBTyxHQUFHLENBQUMsQ0FBQ3pDLE9BQU8sQ0FBQzBDLE1BQTFCO0FBRUEsV0FBTztBQUNMbkMsTUFBQUEsT0FBTyxFQUFQQSxPQURLO0FBRUxrQyxNQUFBQSxPQUFPLEVBQVBBLE9BRks7QUFHTGhELE1BQUFBLE1BQU0sRUFBTkE7QUFISyxLQUFQO0FBS0QsR0FWSSxFQVdKTixLQVhJLENBV0UsVUFBQ0MsS0FBRDtBQUFBLFdBQWtCLHNCQUFTO0FBQ2hDVixNQUFBQSxNQUFNLEVBQU5BLE1BRGdDO0FBRWhDVyxNQUFBQSxRQUFRLEVBQUVoQixhQUZzQjtBQUdoQ2lCLE1BQUFBLEtBQUssRUFBRTtBQUh5QixLQUFULEVBSXRCRixLQUpzQixFQUlmO0FBQUNpQyxNQUFBQSxFQUFFLEVBQUU1QjtBQUFMLEtBSmUsRUFJRFQsSUFKQyxDQUlJO0FBQUEsYUFBTSxJQUFOO0FBQUEsS0FKSixDQUFsQjtBQUFBLEdBWEYsQ0FBUDtBQWdCRCxDQTNCTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VDaGFyLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWwsIERhdGFiYXNlfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9saWIvY2pzL2FxbC1xdWVyeSc7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9saWIvY2pzL2N1cnNvcic7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICdsb2Rhc2gvZmxhdHRlbic7XG5pbXBvcnQgdW5pcUJ5IGZyb20gJ2xvZGFzaC91bmlxQnknO1xuXG5pbXBvcnQge0FyYW5nb0RCTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aCc7XG5pbXBvcnQge0dyb3VwRWRnZVR5cGUsIEdyb3VwVHlwZSwgR3JvdXBVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvZ3JvdXBzJztcbmltcG9ydCB7Z2V0TGltaXQsIGxvZ0Vycm9yLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtleHRyYWN0VGFnc30gZnJvbSAnLi90YWdzJztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2dyb3Vwcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlBcHAnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBnIGluIGdyb3Vwc1xuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgbCBJTiBPVVRCT1VORCBnLl9pZCBpc0dyb3VwZWRcbiAgICAgICAgUkVUVVJOIE1FUkdFICh1LCB7dHlwZTpsLnR5cGV9KVxuICAgICAgKVxuICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICBTT1JUIGcuYWRkZWRcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGcsIGUgSU4gSU5CT1VORCBcIiR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9XCIgaXNHcm91cGVkXG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkIGlzR3JvdXBlZFxuICAgICAgICBSRVRVUk4gTUVSR0UgKHUsIHt0eXBlOmwudHlwZX0pXG4gICAgICApXG4gICAgICAke2xpbWl0LmFxbH1cbiAgICAgIFNPUlQgZy5hZGRlZFxuICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKGcsIHt1c2Vyczp1c2Vyc30pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeVRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhZ3M6IHN0cmluZ1tdLFxuICBmcm9tOiBudW1iZXIsXG4gIHRvOiBudW1iZXJcbik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5VGFncyc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuXG4gIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAodGFncyB8fCBbXSkubWFwKCh0YWdOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdFRhZ05hbWU6IHN0cmluZyA9IHBhcnNlSWQodGFnTmFtZSk7XG4gICAgICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgICAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwLCBlIElOIE9VVEJPVU5EIFwiJHtgdGFncy8ke2Zvcm1hdFRhZ05hbWV9YH1cIiBpc1RhZ2dlZFxuICAgICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgICAgTEVUIGxpa2VzID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIGxpa2UgSU4gSU5CT1VORCBwLl9pZCBsaWtlc1xuICAgICAgICAgICAgRklMVEVSIGxpa2UudmFsdWUgPT0gJ2xpa2UnXG4gICAgICAgICAgICBSRVRVUk4gbGlrZVxuICAgICAgICAgIClcbiAgICAgICAgICBMRVQgZGlzbGlrZXMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgbGlrZSBJTiBJTkJPVU5EIHAuX2lkIGxpa2VzXG4gICAgICAgICAgICBGSUxURVIgbGlrZS52YWx1ZSA9PSAnZGlzbGlrZSdcbiAgICAgICAgICAgIFJFVFVSTiBsaWtlXG4gICAgICAgICAgKVxuICAgICAgICAgIEZJTFRFUiBlLnR5cGUgPT0gJ3Bvc3QnICYmIHAudXNlcklkID09IHUuX2tleVxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7dXNlcjp1LCBsaWtlczpMRU5HVEgobGlrZXMpLCBkaXNsaWtlczpMRU5HVEgoZGlzbGlrZXMpfSlgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSkudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgICB9KVxuICApXG4gICAgLnRoZW4oKHJlc3VsdHMpID0+IHVuaXFCeShmbGF0dGVuKHJlc3VsdHMpLCAnX2tleScpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxHcm91cFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZywgZSBJTiBJTkJPVU5EICR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9IGlzR3JvdXBlZFxuICAgICAgRklMVEVSIGcuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICAgIExFVCB1c2VycyA9IChcbiAgICAgICAgRk9SIHUsIGwgSU4gT1VUQk9VTkQgZy5faWQgaXNHcm91cGVkXG4gICAgICAgIFJFVFVSTiBNRVJHRSAodSwge3R5cGU6bC50eXBlfSlcbiAgICAgIClcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUgPSB7fSkgPT4gZ3JvdXApXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBEZXRhaWxzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGdyb3VwSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERldGFpbHMnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0R3JvdXBJZDogc3RyaW5nID0gcGFyc2VJZChncm91cElkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZyBJTiBncm91cHNcbiAgICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRHcm91cElkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIGdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlID0ge30pID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwRWRnZSA9IChcbiAgZGF0YWJhc2U6IHN0cmluZyxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGdyb3VwSWQ6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nXG4pOiBQcm9taXNlPEdyb3VwRWRnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnY3JlYXRlR3JvdXBFZGdlJztcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4gIGNvbnN0IGZvcm1hdFR5cGU6IHN0cmluZyA9IHBhcnNlQ2hhcih0eXBlLCAxNik7XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlKS5lZGdlQ29sbGVjdGlvbignaXNHcm91cGVkJyk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgZ3JvdXAtJHtmb3JtYXRVc2VySWR9LSR7Zm9ybWF0R3JvdXBJZH1gKTtcblxuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2tleTogZWRnZUlkLFxuICAgIGFkZGVkOiBub3csXG4gICAgdHlwZTogZm9ybWF0VHlwZVxuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gLCBgZ3JvdXBzLyR7Zm9ybWF0R3JvdXBJZH1gKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHtpZDogZm9ybWF0VXNlcklkfSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkR3JvdXAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogR3JvdXBUeXBlID0ge30pOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGQnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgbmFtZSA9ICdVbnRpdGxlZCcsXG4gICAgdHlwZVxuICB9OiBHcm91cFR5cGUgPSBpdGVtO1xuICBjb25zdCBpZDogc3RyaW5nID0gY3JlYXRlSGFzaChgZ3JvdXAtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdERlc2M6IHN0cmluZyA9IGRlc2NyaXB0aW9uLnN1YnN0cigwLCA2NDApO1xuICBjb25zdCBmb3JtYXRUeXBlOiBzdHJpbmcgPSBwYXJzZUNoYXIodHlwZSwgMTYpIHx8ICdwcml2YXRlJztcbiAgY29uc3QgaW5zZXJ0OiBHcm91cFR5cGUgPSB7XG4gICAgX2tleTogaWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBkZXNjcmlwdGlvbjogZm9ybWF0RGVzYyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWUsXG4gICAgdHlwZTogZm9ybWF0VHlwZVxuICB9O1xuICBjb25zdCBkYjogRGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZSk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBncm91cHMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBpdGVtVHlwZTogc3RyaW5nID0gJ2dyb3Vwcyc7XG5cbiAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgdGFnc1xuICAgICAgY29uc3Qge19rZXk6IGdyb3VwSWR9OiBHcm91cFR5cGUgPSBncm91cDtcbiAgICAgIHJldHVybiBleHRyYWN0VGFncyhkYiwgaXRlbVR5cGUsIGdyb3VwSWQsIGZvcm1hdERlc2MpXG4gICAgICAgIC50aGVuKCgpID0+IGNyZWF0ZUdyb3VwRWRnZShkYXRhYmFzZSwgc2Vzc2lvbklkLCBncm91cElkLCAnYWRtaW4nKS50aGVuKCgpID0+IGdyb3VwKSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUgPSB7fSk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBpZCxcbiAgICBuYW1lID0gJ1VudGl0bGVkJ1xuICB9OiBHcm91cFR5cGUgPSBpdGVtO1xuICBjb25zdCBpdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQoaWQpO1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdERlc2M6IHN0cmluZyA9IGRlc2NyaXB0aW9uLnN1YnN0cigwLCA2NDApO1xuICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICBkZXNjcmlwdGlvbjogZm9ybWF0RGVzYyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWVcbiAgfTtcbiAgY29uc3QgZGI6IERhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2UpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke2l0ZW1JZH0gV0lUSCAke3VwZGF0ZX0gSU4gZ3JvdXBzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3Qge19rZXk6IGdyb3VwS2V5fSA9IGdyb3VwO1xuICAgICAgY29uc3QgaXRlbVR5cGU6IHN0cmluZyA9ICdncm91cHMnO1xuXG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3NcbiAgICAgIHJldHVybiBleHRyYWN0VGFncyhkYiwgaXRlbVR5cGUsIGdyb3VwS2V5LCBkZXNjcmlwdGlvbikudGhlbigoKSA9PiBncm91cCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZyBJTiBncm91cHNcbiAgICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgICBSRU1PVkUgZyBJTiBncm91cHNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlID0ge30pID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3Vwc0J5UmVhY3Rpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgcmVhY3Rpb246IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0R3JvdXBzQnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb246IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpO1xuICBjb25zdCB1c2VyRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIHIgSU4gT1VUQk9VTkQgJHt1c2VyRG9jSWR9IGhhc1JlYWN0aW9uXG4gICAgICBGSUxURVIgci52YWx1ZSA9PSAke2Zvcm1hdFJlYWN0aW9ufVxuICAgICAgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgUkVUVVJOIHt2YWx1ZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzR3JvdXBlZCA9IChkYXRhYmFzZTogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxHcm91cFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2lzR3JvdXBlZCc7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnIElOIGdyb3Vwc1xuICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRHcm91cElkfVxuICAgIEZPUiB1IElOIElOQk9VTkQgZy5faWQgaXNHcm91cGVkXG4gICAgRklMVEVSIHUuX2tleSA9PSAke2Zvcm1hdFVzZXJJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKHJlc3VsdHMgPSBbXSkgPT4ge1xuICAgICAgY29uc3QgaXNWYWxpZCA9ICEhcmVzdWx0cy5sZW5ndGg7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIGlzVmFsaWQsXG4gICAgICAgIHVzZXJJZFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHtpZDogdXNlcklkfSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuIl19
|