@nlabs/reaktor 0.8.1 → 0.9.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.
- package/.eslintrc +10 -0
- package/.prettierrc.js +4 -0
- package/README.md +1 -1
- package/coverage/actions/groups.ts.html +1039 -0
- package/coverage/actions/images.ts.html +2500 -0
- package/coverage/actions/index.html +131 -0
- package/coverage/actions/tags.ts.html +1000 -0
- package/coverage/adapters/arangoAdapter.ts.html +151 -0
- package/coverage/adapters/index.html +146 -0
- package/coverage/adapters/reaktorAdapter.ts.html +127 -0
- package/coverage/adapters/tagAdapter.ts.html +160 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +6 -0
- package/coverage/coverage-final.json +1 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +176 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +101 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov.info +0 -0
- package/coverage/mocks/file.ts.html +118 -0
- package/coverage/mocks/group.ts.html +145 -0
- package/coverage/mocks/image.ts.html +136 -0
- package/coverage/mocks/index.html +146 -0
- package/coverage/mocks/post.ts.html +169 -0
- package/coverage/mocks/tag.ts.html +121 -0
- package/coverage/mocks/user.ts.html +268 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/types/error.ts.html +145 -0
- package/coverage/types/index.html +116 -0
- package/coverage/utils/adapterUtils.ts.html +151 -0
- package/coverage/utils/analyticsUtils.ts.html +292 -0
- package/coverage/utils/arangodbUtils.ts.html +463 -0
- package/coverage/utils/index.html +146 -0
- package/jest.setup.js +0 -0
- package/jpg:- +0 -0
- package/lib/actions/apps.d.ts +25 -0
- package/lib/actions/apps.js +252 -0
- package/lib/actions/conversations.d.ts +12 -12
- package/lib/actions/conversations.js +131 -126
- package/lib/actions/dynamodb.d.ts +8 -8
- package/lib/actions/dynamodb.js +35 -32
- package/lib/actions/email.d.ts +2 -4
- package/lib/actions/email.js +23 -53
- package/lib/actions/files.d.ts +15 -12
- package/lib/actions/files.js +188 -202
- package/lib/actions/groups.d.ts +2 -2
- package/lib/actions/groups.js +38 -36
- package/lib/actions/images.d.ts +15 -11
- package/lib/actions/images.js +236 -229
- package/lib/actions/index.d.ts +1 -0
- package/lib/actions/index.js +3 -1
- package/lib/actions/ios.js +11 -10
- package/lib/actions/locations.d.ts +2 -0
- package/lib/actions/locations.js +29 -37
- package/lib/actions/messages.d.ts +2 -2
- package/lib/actions/messages.js +10 -10
- package/lib/actions/notifications.d.ts +2 -2
- package/lib/actions/notifications.js +1 -1
- package/lib/actions/payments.d.ts +2 -2
- package/lib/actions/payments.js +27 -26
- package/lib/actions/posts.d.ts +7 -9
- package/lib/actions/posts.js +176 -156
- package/lib/actions/reactions.d.ts +5 -5
- package/lib/actions/reactions.js +30 -28
- package/lib/actions/s3.d.ts +7 -7
- package/lib/actions/s3.js +37 -32
- package/lib/actions/search.d.ts +3 -3
- package/lib/actions/search.js +11 -9
- package/lib/actions/sms.d.ts +2 -2
- package/lib/actions/sms.js +58 -34
- package/lib/actions/statistics.d.ts +2 -1
- package/lib/actions/statistics.js +21 -18
- package/lib/actions/subscription.d.ts +2 -2
- package/lib/actions/subscription.js +24 -21
- package/lib/actions/tags.d.ts +21 -23
- package/lib/actions/tags.js +129 -198
- package/lib/actions/users.d.ts +23 -20
- package/lib/actions/users.js +188 -194
- package/lib/actions/websockets.d.ts +13 -0
- package/lib/actions/websockets.js +60 -34
- package/lib/adapters/arangoAdapter.d.ts +2 -0
- package/lib/adapters/arangoAdapter.js +46 -0
- package/lib/adapters/fileAdapter.d.ts +3 -0
- package/lib/adapters/fileAdapter.js +76 -0
- package/lib/adapters/postAdapter.d.ts +2 -0
- package/lib/adapters/postAdapter.js +70 -0
- package/lib/adapters/reaktorAdapter.d.ts +6 -0
- package/lib/adapters/reaktorAdapter.js +44 -0
- package/lib/adapters/tagAdapter.d.ts +2 -0
- package/lib/adapters/tagAdapter.js +50 -0
- package/lib/adapters/userAdapter.d.ts +2 -0
- package/lib/adapters/userAdapter.js +110 -0
- package/lib/config.js +14 -15
- package/lib/lambdas/actions/websockets.js +7 -7
- package/lib/lambdas/authorizer.js +1 -1
- package/lib/lambdas/connection.js +5 -4
- package/lib/lambdas/utils/websocket.js +7 -6
- package/lib/mocks/conversation.d.ts +8 -0
- package/lib/mocks/conversation.js +35 -0
- package/lib/mocks/file.d.ts +11 -0
- package/lib/mocks/file.js +38 -0
- package/lib/mocks/group.d.ts +17 -0
- package/lib/mocks/group.js +47 -0
- package/lib/mocks/image.d.ts +3 -0
- package/lib/mocks/image.js +43 -0
- package/lib/mocks/nlabs.png +0 -0
- package/lib/mocks/post.d.ts +38 -0
- package/lib/mocks/post.js +55 -0
- package/lib/mocks/tag.d.ts +2 -0
- package/lib/mocks/tag.js +37 -0
- package/lib/mocks/user.d.ts +4 -0
- package/lib/mocks/user.js +88 -0
- package/lib/types/apps.d.ts +19 -17
- package/lib/types/apps.js +17 -1
- package/lib/types/arangodb.d.ts +19 -6
- package/lib/types/arangodb.js +1 -1
- package/lib/types/auth.d.ts +4 -4
- package/lib/types/auth.js +1 -1
- package/lib/types/connections.d.ts +2 -3
- package/lib/types/connections.js +1 -1
- package/lib/types/conversations.d.ts +21 -8
- package/lib/types/conversations.js +1 -1
- package/lib/types/email.d.ts +4 -3
- package/lib/types/email.js +1 -1
- package/lib/types/error.d.ts +20 -0
- package/lib/types/error.js +44 -0
- package/lib/types/files.d.ts +10 -10
- package/lib/types/files.js +1 -1
- package/lib/types/google.d.ts +29 -27
- package/lib/types/google.js +1 -1
- package/lib/types/groups.d.ts +6 -7
- package/lib/types/groups.js +1 -1
- package/lib/types/images.d.ts +26 -17
- package/lib/types/images.js +1 -1
- package/lib/types/locations.d.ts +4 -4
- package/lib/types/locations.js +1 -1
- package/lib/types/messages.d.ts +3 -14
- package/lib/types/messages.js +1 -1
- package/lib/types/notifications.d.ts +9 -11
- package/lib/types/notifications.js +1 -1
- package/lib/types/payments.d.ts +13 -16
- package/lib/types/payments.js +1 -1
- package/lib/types/posts.d.ts +7 -23
- package/lib/types/posts.js +1 -1
- package/lib/types/statistics.d.ts +2 -2
- package/lib/types/statistics.js +1 -1
- package/lib/types/tags.d.ts +7 -12
- package/lib/types/tags.js +1 -1
- package/lib/types/users.d.ts +10 -14
- package/lib/types/users.js +1 -1
- package/lib/types/websocket.d.ts +2 -3
- package/lib/types/websocket.js +1 -1
- package/lib/utils/adapterUtils.d.ts +1 -0
- package/lib/utils/adapterUtils.js +45 -0
- package/lib/utils/analyticsUtils.d.ts +21 -0
- package/lib/utils/analyticsUtils.js +72 -0
- package/lib/utils/arangodbUtils.d.ts +65 -0
- package/lib/utils/arangodbUtils.js +144 -0
- package/lib/utils/auth.d.ts +18 -3
- package/lib/utils/auth.js +13 -30
- package/lib/utils/index.d.ts +3 -4
- package/lib/utils/index.js +7 -9
- package/lib/utils/session.d.ts +7 -9
- package/lib/utils/session.js +11 -2
- package/package.json +12 -5
- package/lib/utils/analytics.d.ts +0 -14
- package/lib/utils/analytics.js +0 -88
- package/lib/utils/arangodb.d.ts +0 -9
- package/lib/utils/arangodb.js +0 -118
- package/lib/utils/graphql.d.ts +0 -1
- package/lib/utils/graphql.js +0 -46
- package/lib/utils/objects.d.ts +0 -3
- package/lib/utils/objects.js +0 -59
package/lib/actions/payments.js
CHANGED
|
@@ -42,8 +42,9 @@ var import_utils = require("@nlabs/utils");
|
|
|
42
42
|
var import_arangojs = require("arangojs");
|
|
43
43
|
var import_stripe = __toESM(require("stripe"));
|
|
44
44
|
var import_config = require("../config");
|
|
45
|
-
var
|
|
45
|
+
var import_analyticsUtils = require("../utils/analyticsUtils");
|
|
46
46
|
var import_users = require("./users");
|
|
47
|
+
var import_error = require("../types/error");
|
|
47
48
|
const eventCategory = "payments";
|
|
48
49
|
const apiVersion = "2020-03-02";
|
|
49
50
|
const addCustomerAccount = (context) => {
|
|
@@ -62,10 +63,10 @@ const addCustomerAccount = (context) => {
|
|
|
62
63
|
stripeCustomerId: customer.id
|
|
63
64
|
};
|
|
64
65
|
const aqlQry = import_arangojs.aql`UPDATE ${sessionId} WITH ${update} IN users LIMIT 1 RETURN NEW`;
|
|
65
|
-
return database.query(aqlQry).then((cursor) => cursor.next()).then((updatedUser
|
|
66
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).then((updatedUser) => !!updatedUser).catch((error) => (0, import_analyticsUtils.logError)({
|
|
66
67
|
action,
|
|
67
68
|
category: eventCategory,
|
|
68
|
-
label:
|
|
69
|
+
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
69
70
|
}, error, context).then(() => null));
|
|
70
71
|
});
|
|
71
72
|
};
|
|
@@ -79,17 +80,17 @@ const addBankAccount = (context, bankAccount) => {
|
|
|
79
80
|
} = bankAccount;
|
|
80
81
|
const formatAccount = (0, import_utils.parseString)(accountNumber, 32);
|
|
81
82
|
if (formatAccount === "") {
|
|
82
|
-
throw new
|
|
83
|
+
throw new import_analyticsUtils.UserError("required_account_number");
|
|
83
84
|
}
|
|
84
85
|
const formatFullName = (0, import_utils.parseVarChar)(fullName, 128);
|
|
85
86
|
if (formatFullName === "") {
|
|
86
|
-
throw new
|
|
87
|
+
throw new import_analyticsUtils.UserError("required_full_name");
|
|
87
88
|
}
|
|
88
89
|
const formatRouting = (0, import_utils.parseString)(routing, 32);
|
|
89
90
|
if (formatRouting === "") {
|
|
90
|
-
throw new
|
|
91
|
+
throw new import_analyticsUtils.UserError("required_routing_number");
|
|
91
92
|
}
|
|
92
|
-
return (0, import_users.getUser)(context, sessionId).then((user) => {
|
|
93
|
+
return (0, import_users.getUser)(context, { userId: sessionId }).then((user) => {
|
|
93
94
|
const { stripeAccountId } = user;
|
|
94
95
|
const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
|
|
95
96
|
const source = {
|
|
@@ -111,17 +112,17 @@ const addBankAccount = (context, bankAccount) => {
|
|
|
111
112
|
modified: Date.now()
|
|
112
113
|
};
|
|
113
114
|
const aqlQry = import_arangojs.aql`UPDATE ${sessionId} WITH ${update} IN users LIMIT 1 RETURN NEW`;
|
|
114
|
-
return database.query(aqlQry).then((cursor) => cursor.next()).then((updatedUser
|
|
115
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).then((updatedUser) => updatedUser);
|
|
115
116
|
}).catch((error) => {
|
|
116
117
|
const msg = error.message;
|
|
117
118
|
if (msg === "A bank account with that routing number and account number already exists for this customer.") {
|
|
118
|
-
return (0,
|
|
119
|
+
return (0, import_analyticsUtils.logError)({
|
|
119
120
|
action,
|
|
120
121
|
category: eventCategory,
|
|
121
122
|
label: "bank_account_exists"
|
|
122
123
|
}, error, context).then(() => null);
|
|
123
124
|
}
|
|
124
|
-
return (0,
|
|
125
|
+
return (0, import_analyticsUtils.logError)({
|
|
125
126
|
action,
|
|
126
127
|
category: eventCategory,
|
|
127
128
|
label: "payment_error"
|
|
@@ -132,7 +133,7 @@ const addBankAccount = (context, bankAccount) => {
|
|
|
132
133
|
const addCreditCard = (context, card) => {
|
|
133
134
|
const action = "addCreditCard";
|
|
134
135
|
const { database, session: { userId: sessionId } } = context;
|
|
135
|
-
return (0, import_users.getUser)(context, sessionId).then((user) => {
|
|
136
|
+
return (0, import_users.getUser)(context, { userId: sessionId }).then((user) => {
|
|
136
137
|
const { stripeAccountId } = user;
|
|
137
138
|
const {
|
|
138
139
|
accountNumber,
|
|
@@ -149,15 +150,15 @@ const addCreditCard = (context, card) => {
|
|
|
149
150
|
} = card;
|
|
150
151
|
const formatNumber = (0, import_utils.parseNum)(accountNumber, 16);
|
|
151
152
|
if (!formatNumber) {
|
|
152
|
-
throw new
|
|
153
|
+
throw new import_analyticsUtils.UserError("required_credit_card_number");
|
|
153
154
|
}
|
|
154
155
|
const formatExpMonth = (0, import_utils.parseNum)(expMonth, 2);
|
|
155
156
|
if (!formatExpMonth) {
|
|
156
|
-
throw new
|
|
157
|
+
throw new import_analyticsUtils.UserError("required_credit_card_exp_month");
|
|
157
158
|
}
|
|
158
159
|
const formatExpYear = (0, import_utils.parseNum)(expYear, 2);
|
|
159
160
|
if (!formatExpYear) {
|
|
160
|
-
throw new
|
|
161
|
+
throw new import_analyticsUtils.UserError("required_credit_card_exp_year");
|
|
161
162
|
}
|
|
162
163
|
const formatCvc = (0, import_utils.parseNum)(cvc, 3);
|
|
163
164
|
const paymentCard = {};
|
|
@@ -220,7 +221,7 @@ const addCreditCard = (context, card) => {
|
|
|
220
221
|
userId: sessionId
|
|
221
222
|
};
|
|
222
223
|
const insertAqlQry = import_arangojs.aql`INSERT ${insert} IN creditCards RETURN NEW`;
|
|
223
|
-
return database.query(insertAqlQry).then((cursor) => cursor.next()).then((newCard
|
|
224
|
+
return database.query(insertAqlQry).then((cursor) => cursor.next()).then((newCard) => {
|
|
224
225
|
if (newCard) {
|
|
225
226
|
const { _id: cardId, _key: cardKey } = card;
|
|
226
227
|
const edgeCollection = database.collection("hasPayment");
|
|
@@ -233,7 +234,7 @@ const addCreditCard = (context, card) => {
|
|
|
233
234
|
return edgeCollection.save(edge, { returnNew: true }).then(() => card);
|
|
234
235
|
}
|
|
235
236
|
return newCard;
|
|
236
|
-
}).catch((error) => (0,
|
|
237
|
+
}).catch((error) => (0, import_analyticsUtils.logError)({
|
|
237
238
|
action,
|
|
238
239
|
category: eventCategory,
|
|
239
240
|
label: "payment_error"
|
|
@@ -256,7 +257,7 @@ const updateCreditCard = (context, card) => {
|
|
|
256
257
|
} = card;
|
|
257
258
|
const formatId = (0, import_utils.parseId)(id);
|
|
258
259
|
if (formatId) {
|
|
259
|
-
throw new
|
|
260
|
+
throw new import_analyticsUtils.UserError("required_credit_card_id");
|
|
260
261
|
}
|
|
261
262
|
const paymentCard = {};
|
|
262
263
|
const formatExpMonth = (0, import_utils.parseNum)(expMonth, 2);
|
|
@@ -311,7 +312,7 @@ const updateCreditCard = (context, card) => {
|
|
|
311
312
|
const updatedCard = results.card;
|
|
312
313
|
const { user } = results;
|
|
313
314
|
if (!updatedCard) {
|
|
314
|
-
throw new
|
|
315
|
+
throw new import_analyticsUtils.UserError("not_found");
|
|
315
316
|
}
|
|
316
317
|
const { stripeCustomerId } = user;
|
|
317
318
|
const { stripeId } = card;
|
|
@@ -328,7 +329,7 @@ const updateCreditCard = (context, card) => {
|
|
|
328
329
|
};
|
|
329
330
|
return stripeClient.customers.updateSource(stripeCustomerId, stripeId, update2).then(() => card).catch((error) => {
|
|
330
331
|
console.log("payments::updateCard::error", error);
|
|
331
|
-
throw new
|
|
332
|
+
throw new import_analyticsUtils.UserError("payment_error");
|
|
332
333
|
});
|
|
333
334
|
});
|
|
334
335
|
};
|
|
@@ -338,10 +339,10 @@ const getCreditCards = (context) => {
|
|
|
338
339
|
const aqlQry = import_arangojs.aql`FOR c IN creditCards
|
|
339
340
|
FILTER c.userId == ${sessionId}
|
|
340
341
|
RETURN c`;
|
|
341
|
-
return database.query(aqlQry).then((cursor) => cursor.all()).then((list = []) => list).catch((error) => (0,
|
|
342
|
+
return database.query(aqlQry).then((cursor) => cursor.all()).then((list = []) => list).catch((error) => (0, import_analyticsUtils.logError)({
|
|
342
343
|
action,
|
|
343
344
|
category: eventCategory,
|
|
344
|
-
label:
|
|
345
|
+
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
345
346
|
}, error, context).then(() => null));
|
|
346
347
|
};
|
|
347
348
|
const deleteCreditCard = (context, cardId) => {
|
|
@@ -381,7 +382,7 @@ const deleteCreditCard = (context, cardId) => {
|
|
|
381
382
|
const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
|
|
382
383
|
return stripeClient.customers.deleteSource(user.stripeCustomerId, card.stripeId).then(() => true).catch((error) => {
|
|
383
384
|
console.log("payments::deleteCard::error", error);
|
|
384
|
-
throw new
|
|
385
|
+
throw new import_analyticsUtils.UserError("payment_error");
|
|
385
386
|
});
|
|
386
387
|
});
|
|
387
388
|
}
|
|
@@ -399,7 +400,7 @@ const deleteBankAccount = (context, bankId) => {
|
|
|
399
400
|
modified: Date.now()
|
|
400
401
|
};
|
|
401
402
|
const aqlQry = import_arangojs.aql`UPDATE ${sessionId} WITH ${update} IN users LIMIT 1 RETURN NEW`;
|
|
402
|
-
return database.query(aqlQry).then((cursor) => cursor.next()).then((user
|
|
403
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).then((user) => {
|
|
403
404
|
const { stripeAccountId } = user;
|
|
404
405
|
const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
|
|
405
406
|
return stripeClient.customers.deleteSource(stripeAccountId, bankId).then((response = { deleted: false }) => response.deleted).catch(() => Promise.resolve(false));
|
|
@@ -410,7 +411,7 @@ const createPaymentTransfer = (context, transfer) => {
|
|
|
410
411
|
const { amount, currency } = transfer;
|
|
411
412
|
const formatAmount = (0, import_utils.parseNum)(amount);
|
|
412
413
|
const formatCurrency = (0, import_utils.parseChar)(currency, 3, "USD").toUpperCase();
|
|
413
|
-
return (0, import_users.getUser)(context, sessionId).then((user) => {
|
|
414
|
+
return (0, import_users.getUser)(context, { userId: sessionId }).then((user) => {
|
|
414
415
|
const { stripeAccountId } = user;
|
|
415
416
|
const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
|
|
416
417
|
return stripeClient.transfers.create({
|
|
@@ -463,7 +464,7 @@ const createPaymentHold = (context, payment) => {
|
|
|
463
464
|
return database.query(aqlQry).then((cursor) => cursor.next()).then((newPayment) => newPayment);
|
|
464
465
|
}).catch((error) => {
|
|
465
466
|
console.log("payments::createHold::error", error);
|
|
466
|
-
throw new
|
|
467
|
+
throw new import_analyticsUtils.UserError("payment_error");
|
|
467
468
|
});
|
|
468
469
|
};
|
|
469
470
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -478,4 +479,4 @@ const createPaymentHold = (context, payment) => {
|
|
|
478
479
|
getCreditCards,
|
|
479
480
|
updateCreditCard
|
|
480
481
|
});
|
|
481
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvY3Vyc29yJztcbmltcG9ydCBTdHJpcGUgZnJvbSAnc3RyaXBlJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge0FwaUNvbnRleHQsIFBheW1lbnRCYW5rQWNjb3VudCwgUGF5bWVudENhcmRUeXBlLCBQYXltZW50Q2hhcmdlLCBQYXltZW50VHJhbnNmZXIsIFVzZXJ9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIFVzZXJFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzJztcbmltcG9ydCB7Z2V0VXNlcn0gZnJvbSAnLi91c2Vycyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdwYXltZW50cyc7XG5jb25zdCBhcGlWZXJzaW9uOiBhbnkgPSAnMjAyMC0wMy0wMic7XG5cbmV4cG9ydCBjb25zdCBhZGRDdXN0b21lckFjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRDdXN0b21lckFjY291bnQnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlcm5hbWV9fSA9IGNvbnRleHQ7XG5cbiAgLy8gU3RyaXBlXG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG5cbiAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAuY3JlYXRlKHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkLFxuICAgICAgICB1c2VybmFtZVxuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oKGN1c3RvbWVyKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgdXBkYXRlOiBVc2VyID0ge1xuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICBzdHJpcGVDdXN0b21lcklkOiBjdXN0b21lci5pZFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXIgPSB7fSkgPT4gISF1cGRhdGVkVXNlcilcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEJhbmtBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGJhbmtBY2NvdW50OiBQYXltZW50QmFua0FjY291bnQpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkUGF5bWVudEFjY291bnRCYW5rJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgLy8gUGFyYW1zXG4gIGNvbnN0IHtcbiAgICBhY2NvdW50TnVtYmVyLFxuICAgIGZ1bGxOYW1lLFxuICAgIHJvdXRpbmdcbiAgfSA9IGJhbmtBY2NvdW50O1xuXG4gIGNvbnN0IGZvcm1hdEFjY291bnQ6IHN0cmluZyA9IHBhcnNlU3RyaW5nKGFjY291bnROdW1iZXIsIDMyKTtcblxuICBpZihmb3JtYXRBY2NvdW50ID09PSAnJykge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2FjY291bnRfbnVtYmVyJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRGdWxsTmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGZ1bGxOYW1lLCAxMjgpO1xuXG4gIGlmKGZvcm1hdEZ1bGxOYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2Z1bGxfbmFtZScpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0Um91dGluZzogc3RyaW5nID0gcGFyc2VTdHJpbmcocm91dGluZywgMzIpO1xuXG4gIGlmKGZvcm1hdFJvdXRpbmcgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfcm91dGluZ19udW1iZXInKTtcbiAgfVxuXG4gIHJldHVybiBnZXRVc2VyKGNvbnRleHQsIHNlc3Npb25JZClcbiAgICAudGhlbigodXNlcjogVXNlcikgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH06IFVzZXIgPSB1c2VyO1xuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG4gICAgICBjb25zdCBzb3VyY2U6IGFueSA9IHtcbiAgICAgICAgYWNjb3VudF9ob2xkZXJfbmFtZTogZm9ybWF0RnVsbE5hbWUsXG4gICAgICAgIGFjY291bnRfaG9sZGVyX3R5cGU6ICdpbmRpdmlkdWFsJyxcbiAgICAgICAgYWNjb3VudF9udW1iZXI6IGZvcm1hdEFjY291bnQsXG4gICAgICAgIGNvdW50cnk6ICdVUycsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgb2JqZWN0OiAnYmFua19hY2NvdW50JyxcbiAgICAgICAgcm91dGluZ19udW1iZXI6IGZvcm1hdFJvdXRpbmdcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC5jcmVhdGVTb3VyY2Uoc3RyaXBlQWNjb3VudElkLCB7c291cmNlfSlcbiAgICAgICAgLnRoZW4oKGFjY291bnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtpZDogYmFua0lkLCBsYXN0NDogYmFua0FjY291bnQsIHJvdXRpbmdfbnVtYmVyOiBiYW5rUm91dGluZ30gPSBhY2NvdW50O1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZTogYW55ID0ge1xuICAgICAgICAgICAgYmFua0FjY291bnQsXG4gICAgICAgICAgICBiYW5rRnVsbE5hbWU6IGZvcm1hdEZ1bGxOYW1lLFxuICAgICAgICAgICAgYmFua0lkLFxuICAgICAgICAgICAgYmFua1JvdXRpbmcsXG4gICAgICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3Nlc3Npb25JZH0gV0lUSCAke3VwZGF0ZX0gSU4gdXNlcnMgTElNSVQgMSBSRVRVUk4gTkVXYDtcblxuICAgICAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAgIC50aGVuKCh1cGRhdGVkVXNlcjogVXNlciA9IHt9KSA9PiB1cGRhdGVkVXNlcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyb3IubWVzc2FnZTtcblxuICAgICAgICAgIGlmKG1zZyA9PT0gJ0EgYmFuayBhY2NvdW50IHdpdGggdGhhdCByb3V0aW5nIG51bWJlciBhbmQgYWNjb3VudCBudW1iZXIgJyArXG4gICAgICAgICAgICAnYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgY3VzdG9tZXIuJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdiYW5rX2FjY291bnRfZXhpc3RzJ1xuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkOiBQYXltZW50Q2FyZFR5cGUpOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkQ3JlZGl0Q2FyZCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIHJldHVybiBnZXRVc2VyKGNvbnRleHQsIHNlc3Npb25JZClcbiAgICAudGhlbigodXNlcjogVXNlcikgPT4ge1xuICAgICAgLy8gVXNlclxuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH06IFVzZXIgPSB1c2VyO1xuXG4gICAgICAvLyBDYXJkXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICAgIGNpdHksXG4gICAgICAgIGNvdW50cnksXG4gICAgICAgIGN2YyxcbiAgICAgICAgZXhwTW9udGgsXG4gICAgICAgIGV4cFllYXIsXG4gICAgICAgIGZ1bGxOYW1lLFxuICAgICAgICBzdHJlZXQxLFxuICAgICAgICBzdHJlZXQyLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgemlwXG4gICAgICB9OiBQYXltZW50Q2FyZFR5cGUgPSBjYXJkO1xuXG4gICAgICBjb25zdCBmb3JtYXROdW1iZXI6IG51bWJlciA9IHBhcnNlTnVtKGFjY291bnROdW1iZXIsIDE2KTtcblxuICAgICAgaWYoIWZvcm1hdE51bWJlcikge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9udW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0RXhwTW9udGg6IG51bWJlciA9IHBhcnNlTnVtKGV4cE1vbnRoLCAyKTtcblxuICAgICAgaWYoIWZvcm1hdEV4cE1vbnRoKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX2V4cF9tb250aCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRFeHBZZWFyOiBudW1iZXIgPSBwYXJzZU51bShleHBZZWFyLCAyKTtcblxuICAgICAgaWYoIWZvcm1hdEV4cFllYXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfZXhwX3llYXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0Q3ZjOiBudW1iZXIgPSBwYXJzZU51bShjdmMsIDMpO1xuXG4gICAgICAvLyBBZGRyZXNzXG4gICAgICBjb25zdCBwYXltZW50Q2FyZDogUGF5bWVudENhcmRUeXBlID0ge307XG4gICAgICBjb25zdCBmb3JtYXRDaXR5OiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoY2l0eSwgMzIpO1xuXG4gICAgICBpZihmb3JtYXRDaXR5KSB7XG4gICAgICAgIHBheW1lbnRDYXJkLmNpdHkgPSBmb3JtYXRDaXR5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRDb3VudHJ5OiBzdHJpbmcgPSBwYXJzZUNoYXIoY291bnRyeSwgMik7XG5cbiAgICAgIGlmKGZvcm1hdENvdW50cnkpIHtcbiAgICAgICAgcGF5bWVudENhcmQuY291bnRyeSA9IGZvcm1hdENvdW50cnk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0RnVsbE5hbWUpIHtcbiAgICAgICAgcGF5bWVudENhcmQuZnVsbE5hbWUgPSBmb3JtYXRGdWxsTmFtZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RyZWV0MTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHN0cmVldDEsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0U3RyZWV0MSkge1xuICAgICAgICBwYXltZW50Q2FyZC5zdHJlZXQxID0gZm9ybWF0U3RyZWV0MTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RyZWV0Mjogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0U3RyZWV0Mikge1xuICAgICAgICBwYXltZW50Q2FyZC5zdHJlZXQyID0gZm9ybWF0U3RyZWV0MjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RhdGU6IHN0cmluZyA9IHBhcnNlQ2hhcihzdGF0ZSwgMik7XG5cbiAgICAgIGlmKGZvcm1hdFN0YXRlKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLnN0YXRlID0gZm9ybWF0U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdFppcDogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHppcCwgMTApO1xuXG4gICAgICBpZihmb3JtYXRaaXApIHtcbiAgICAgICAgcGF5bWVudENhcmQuemlwID0gZm9ybWF0WmlwO1xuICAgICAgfVxuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG4gICAgICBjb25zdCBzb3VyY2U6IGFueSA9IHtcbiAgICAgICAgYWRkcmVzc19jaXR5OiBmb3JtYXRDaXR5LFxuICAgICAgICBhZGRyZXNzX2NvdW50cnk6IGZvcm1hdENvdW50cnksXG4gICAgICAgIGFkZHJlc3NfbGluZTE6IGZvcm1hdFN0cmVldDEsXG4gICAgICAgIGFkZHJlc3NfbGluZTI6IGZvcm1hdFN0cmVldDIsXG4gICAgICAgIGFkZHJlc3Nfc3RhdGU6IGZvcm1hdFN0YXRlLFxuICAgICAgICBhZGRyZXNzX3ppcDogZm9ybWF0WmlwLFxuICAgICAgICBjdmM6IGZvcm1hdEN2YyxcbiAgICAgICAgZXhwX21vbnRoOiBmb3JtYXRFeHBNb250aCxcbiAgICAgICAgZXhwX3llYXI6IGZvcm1hdEV4cFllYXIsXG4gICAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICBudW1iZXI6IGZvcm1hdE51bWJlcixcbiAgICAgICAgb2JqZWN0OiAnY2FyZCdcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC5jcmVhdGVTb3VyY2Uoc3RyaXBlQWNjb3VudElkLCB7c291cmNlfSlcbiAgICAgICAgLnRoZW4oKG5ld1NvdXJjZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qge2JyYW5kLCBjdmNfY2hlY2s6IGN2Y0NoZWNrLCBsYXN0NH0gPSBuZXdTb3VyY2U7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICAgICAgICAuLi5wYXltZW50Q2FyZCxcbiAgICAgICAgICAgIF9rZXk6IGNyZWF0ZUhhc2goYHVzZXItcGF5bWVudC0ke3Nlc3Npb25JZH1gKSxcbiAgICAgICAgICAgIGFjY291bnROdW1iZXI6IGxhc3Q0LFxuICAgICAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgICAgIGJyYW5kLFxuICAgICAgICAgICAgY3ZjQ2hlY2ssXG4gICAgICAgICAgICBleHBNb250aCxcbiAgICAgICAgICAgIGV4cFllYXIsXG4gICAgICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGluc2VydEFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBjcmVkaXRDYXJkcyBSRVRVUk4gTkVXYDtcblxuICAgICAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShpbnNlcnRBcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAgIC50aGVuKChuZXdDYXJkOiBQYXltZW50Q2FyZFR5cGUgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICBpZihuZXdDYXJkKSB7XG4gICAgICAgICAgICAgICAgLy8gQWRkIGxpbmtlZCBlZGdlXG4gICAgICAgICAgICAgICAgY29uc3Qge19pZDogY2FyZElkLCBfa2V5OiBjYXJkS2V5fSA9IGNhcmQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaGFzUGF5bWVudCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHtjYXJkS2V5fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2U6IGFueSA9IHtcbiAgICAgICAgICAgICAgICAgIF9mcm9tOiBgdXNlcnMvJHtzZXNzaW9uSWR9YCxcbiAgICAgICAgICAgICAgICAgIF9rZXk6IGVkZ2VJZCxcbiAgICAgICAgICAgICAgICAgIF90bzogY2FyZElkXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IGNhcmQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0NhcmQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdwYXltZW50X2Vycm9yJ1xuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVDcmVkaXRDYXJkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNhcmQ6IFBheW1lbnRDYXJkVHlwZSk6IFByb21pc2U8UGF5bWVudENhcmRUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHtcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgZXhwTW9udGgsXG4gICAgZXhwWWVhcixcbiAgICBmdWxsTmFtZSxcbiAgICBpZCxcbiAgICBzdHJlZXQxLFxuICAgIHN0YXRlLFxuICAgIHppcFxuICB9OiBQYXltZW50Q2FyZFR5cGUgPSBjYXJkO1xuXG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKGlkKTtcblxuICBpZihmb3JtYXRJZCkge1xuICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX2lkJyk7XG4gIH1cblxuICBjb25zdCBwYXltZW50Q2FyZDogUGF5bWVudENhcmRUeXBlID0ge307XG4gIGNvbnN0IGZvcm1hdEV4cE1vbnRoOiBudW1iZXIgPSBwYXJzZU51bShleHBNb250aCwgMik7XG4gIGNvbnN0IGZvcm1hdEV4cFllYXI6IG51bWJlciA9IHBhcnNlTnVtKGV4cFllYXIsIDIpO1xuICBjb25zdCBmb3JtYXRDaXR5OiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoY2l0eSwgMzIpO1xuICBjb25zdCBmb3JtYXRDb3VudHJ5OiBzdHJpbmcgPSBwYXJzZUNoYXIoY291bnRyeSwgMik7XG4gIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RyZWV0MTogc3RyaW5nID0gcGFyc2VTdHJpbmcoc3RyZWV0MSwgMzIpO1xuICBjb25zdCBmb3JtYXRTdGF0ZTogc3RyaW5nID0gcGFyc2VDaGFyKHN0YXRlLCAyKTtcbiAgY29uc3QgZm9ybWF0WmlwOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoemlwLCAxMCk7XG5cbiAgaWYoZm9ybWF0RXhwTW9udGgpIHtcbiAgICBwYXltZW50Q2FyZC5leHBNb250aCA9IGZvcm1hdEV4cE1vbnRoO1xuICB9XG5cbiAgaWYoZm9ybWF0RXhwWWVhcikge1xuICAgIHBheW1lbnRDYXJkLmV4cFllYXIgPSBmb3JtYXRFeHBZZWFyO1xuICB9XG5cbiAgaWYoZm9ybWF0Q2l0eSkge1xuICAgIHBheW1lbnRDYXJkLmNpdHkgPSBmb3JtYXRDaXR5O1xuICB9XG5cbiAgaWYoZm9ybWF0Q291bnRyeSkge1xuICAgIHBheW1lbnRDYXJkLmNvdW50cnkgPSBmb3JtYXRDb3VudHJ5O1xuICB9XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUpIHtcbiAgICBwYXltZW50Q2FyZC5mdWxsTmFtZSA9IGZvcm1hdEZ1bGxOYW1lO1xuICB9XG5cbiAgaWYoZm9ybWF0U3RyZWV0MSkge1xuICAgIHBheW1lbnRDYXJkLnN0cmVldDEgPSBmb3JtYXRTdHJlZXQxO1xuICB9XG5cbiAgaWYoZm9ybWF0U3RhdGUpIHtcbiAgICBwYXltZW50Q2FyZC5zdGF0ZSA9IGZvcm1hdFN0YXRlO1xuICB9XG5cbiAgaWYoZm9ybWF0WmlwKSB7XG4gICAgcGF5bWVudENhcmQuemlwID0gZm9ybWF0WmlwO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlOiBhbnkgPSBwYXltZW50Q2FyZDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIExFVCB1cGRhdGVkQ2FyZCA9IEZJUlNUKFxuICAgICAgICBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgICBGSUxURVIgYy5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBVUERBVEUgYyBXSVRIICR7dXBkYXRlfSBJTiBjcmVkaXRDYXJkc1xuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiBORVdcbiAgICAgIClcbiAgICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVcbiAgICAgIClcbiAgICAgIFJFVFVSTiB7dXNlcjogdXNlciwgY2FyZDogdXBkYXRlZENhcmR9YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChyZXN1bHRzID0ge2NhcmQ6IHt9LCB1c2VyOiB7fX0pID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRDYXJkOiBQYXltZW50Q2FyZFR5cGUgPSByZXN1bHRzLmNhcmQ7XG4gICAgICBjb25zdCB7dXNlcn0gPSByZXN1bHRzO1xuXG4gICAgICBpZighdXBkYXRlZENhcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcignbm90X2ZvdW5kJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtzdHJpcGVDdXN0b21lcklkfSA9IHVzZXI7XG4gICAgICBjb25zdCB7c3RyaXBlSWR9ID0gY2FyZDtcblxuICAgICAgLy8gU3RyaXBlXG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuICAgICAgY29uc3QgdXBkYXRlOiBhbnkgPSB7XG4gICAgICAgIGFkZHJlc3NfY2l0eTogZm9ybWF0Q2l0eSxcbiAgICAgICAgYWRkcmVzc19jb3VudHJ5OiBmb3JtYXRDb3VudHJ5LFxuICAgICAgICBhZGRyZXNzX2xpbmUxOiBmb3JtYXRTdHJlZXQxLFxuICAgICAgICBhZGRyZXNzX3N0YXRlOiBmb3JtYXRTdGF0ZSxcbiAgICAgICAgYWRkcmVzc196aXA6IGZvcm1hdFppcCxcbiAgICAgICAgZXhwX21vbnRoOiBmb3JtYXRFeHBNb250aCxcbiAgICAgICAgZXhwX3llYXI6IGZvcm1hdEV4cFllYXIsXG4gICAgICAgIG5hbWU6IGZvcm1hdEZ1bGxOYW1lXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAudXBkYXRlU291cmNlKHN0cmlwZUN1c3RvbWVySWQsIHN0cmlwZUlkLCB1cGRhdGUpXG4gICAgICAgIC50aGVuKCgpID0+IGNhcmQpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3BheW1lbnRzOjp1cGRhdGVDYXJkOjplcnJvcicsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdwYXltZW50X2Vycm9yJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENyZWRpdENhcmRzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPFBheW1lbnRDYXJkVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldENyZWRpdENhcmRzJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICBGSUxURVIgYy51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigobGlzdDogUGF5bWVudENhcmRUeXBlW10gPSBbXSkgPT4gbGlzdClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVDcmVkaXRDYXJkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNhcmRJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDYXJkSWQ6IHN0cmluZyA9IHBhcnNlSWQoY2FyZElkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgY2FyZCA9IEZJUlNUKFxuICAgICAgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgIEZJTFRFUiBjLl9rZXkgPT0gJHtmb3JtYXRDYXJkSWR9ICYmIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVNT1ZFIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgIFJFVFVSTiBPTERcbiAgICApXG4gICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICBGSUxURVIgdS5fa2V5ID09ICR7c2Vzc2lvbklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIHt1c2VyOiB1c2VyLCBjYXJkOiBjYXJkfWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVzdWx0ID0ge2NhcmQ6IHt9LCB1c2VyOiB7fX0pID0+IHtcbiAgICAgIGlmKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7Y2FyZCwgdXNlcn0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7X2tleTogY2FyZEtleX0gPSBjYXJkO1xuXG4gICAgICAvLyBSZW1vdmUgbGlua2VkIGVkZ2VzXG4gICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oJ2hhc1BheW1lbnQnKTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLm91dEVkZ2VzKGNhcmRLZXksIHt9KVxuICAgICAgICAudGhlbigoZWRnZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmKGVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICBlZGdlcy5tYXAoKGVkZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7X2tleTogZWRnZUtleX0gPSBlZGdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUFxbFFyeTogQXFsUXVlcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGhhc1BheW1lbnRgO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShyZW1vdmVBcWxRcnkpO1xuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFN0cmlwZVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAgICAgICAgICAgLmRlbGV0ZVNvdXJjZSh1c2VyLnN0cmlwZUN1c3RvbWVySWQsIGNhcmQuc3RyaXBlSWQpXG4gICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3BheW1lbnRzOjpkZWxldGVDYXJkOjplcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgLy8gQ2xlYW4gZGJcbiAgY29uc3QgdXBkYXRlOiBVc2VyID0ge1xuICAgIGJhbmtBY2NvdW50OiAnJyxcbiAgICBiYW5rRnVsbE5hbWU6ICcnLFxuICAgIGJhbmtJZDogJycsXG4gICAgYmFua1JvdXRpbmc6ICcnLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVzZXI6IFVzZXIgPSB7fSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC5kZWxldGVTb3VyY2Uoc3RyaXBlQWNjb3VudElkLCBiYW5rSWQpXG4gICAgICAgIC50aGVuKChyZXNwb25zZTogYW55ID0ge2RlbGV0ZWQ6IGZhbHNlfSkgPT4gcmVzcG9uc2UuZGVsZXRlZClcbiAgICAgICAgLmNhdGNoKCgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBheW1lbnRUcmFuc2ZlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0cmFuc2ZlcjogUGF5bWVudFRyYW5zZmVyKTogUHJvbWlzZTxQYXltZW50VHJhbnNmZXI+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHthbW91bnQsIGN1cnJlbmN5fSA9IHRyYW5zZmVyO1xuICBjb25zdCBmb3JtYXRBbW91bnQ6IG51bWJlciA9IHBhcnNlTnVtKGFtb3VudCk7XG4gIGNvbnN0IGZvcm1hdEN1cnJlbmN5OiBzdHJpbmcgPSBwYXJzZUNoYXIoY3VycmVuY3ksIDMsICdVU0QnKS50b1VwcGVyQ2FzZSgpO1xuXG4gIHJldHVybiBnZXRVc2VyKGNvbnRleHQsIHNlc3Npb25JZClcbiAgICAudGhlbigodXNlcjogVXNlcikgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQudHJhbnNmZXJzXG4gICAgICAgIC5jcmVhdGUoe1xuICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaXBlQWNjb3VudElkXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChzdHJpcGVUcmFuc2ZlcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHN0cmlwZVRyYW5zZmVyKTtcbiAgICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0OiBQYXltZW50VHJhbnNmZXIgPSB7XG4gICAgICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQsXG4gICAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiB0cmFuc2ZlcnMgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigobmV3VHJhbnNmZXI6IFBheW1lbnRUcmFuc2ZlcikgPT4gbmV3VHJhbnNmZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXltZW50SG9sZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwYXltZW50OiBQYXltZW50Q2hhcmdlKTogUHJvbWlzZTxQYXltZW50Q2hhcmdlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjYXB0dXJlLCBjYXJkSWQsIGN1cnJlbmN5LCBkZXNjcmlwdGlvbn0gPSBwYXltZW50O1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmNoYXJnZXNcbiAgICAuY3JlYXRlKHtcbiAgICAgIGFtb3VudCxcbiAgICAgIGNhcHR1cmUsXG4gICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHNvdXJjZTogY2FyZElkXG4gICAgfSlcbiAgICAudGhlbigoc3RyaXBlQ2hhcmdlKSA9PiB7XG4gICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRDaGFyZ2UgPSB7XG4gICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgY2FwdHVyZSxcbiAgICAgICAgY2FyZElkLFxuICAgICAgICBjaGFyZ2VGYWlsQ29kZTogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfY29kZSxcbiAgICAgICAgY2hhcmdlRmFpbE1zZzogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfbWVzc2FnZSxcbiAgICAgICAgY2hhcmdlSWQ6IHN0cmlwZUNoYXJnZS5pZCxcbiAgICAgICAgY2hhcmdlU3RhdHVzOiBzdHJpcGVDaGFyZ2Uuc3RhdHVzLFxuICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwYXltZW50cyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChuZXdQYXltZW50OiBQYXltZW50Q2hhcmdlKSA9PiBuZXdQYXltZW50KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmNyZWF0ZUhvbGQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgIH0pO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsbUJBQWtGO0FBQ2xGLHNCQUFrQjtBQUlsQixvQkFBbUI7QUFFbkIsb0JBQXFCO0FBRXJCLHVCQUFrQztBQUNsQyxtQkFBc0I7QUFFdEIsTUFBTSxnQkFBd0I7QUFDOUIsTUFBTSxhQUFrQjtBQUVqQixNQUFNLHFCQUFxQixDQUFDLFlBQTBDO0FBQzNFLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFVBQVUsU0FBUyxFQUFDLFFBQVEsV0FBVyxTQUFRLEVBQUMsSUFBSTtBQUczRCxRQUFNLGVBQWUsSUFBSSxjQUFBQSxRQUFPLHFCQUFPLElBQUksY0FBYyxHQUFHLEVBQUMsWUFBWSxZQUFZLEtBQUksQ0FBQztBQUUxRixTQUFPLGFBQWEsVUFDakIsT0FBTztBQUFBLElBQ04sVUFBVTtBQUFBLE1BQ1IsUUFBUTtBQUFBLE1BQ1I7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDLEVBQ0EsS0FBSyxDQUFDLGFBQWE7QUFFbEIsVUFBTSxN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
|
|
482
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvY3Vyc29yJztcbmltcG9ydCBTdHJpcGUgZnJvbSAnc3RyaXBlJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge0FwaUNvbnRleHQsIFBheW1lbnRCYW5rQWNjb3VudCwgUGF5bWVudENhcmRUeXBlLCBQYXltZW50Q2hhcmdlLCBQYXltZW50VHJhbnNmZXIsIFVzZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBVc2VyRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzJztcbmltcG9ydCB7Z2V0VXNlcn0gZnJvbSAnLi91c2Vycyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3BheW1lbnRzJztcbmNvbnN0IGFwaVZlcnNpb246IGFueSA9ICcyMDIwLTAzLTAyJztcblxuZXhwb3J0IGNvbnN0IGFkZEN1c3RvbWVyQWNjb3VudCA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZEN1c3RvbWVyQWNjb3VudCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX19ID0gY29udGV4dDtcblxuICAvLyBTdHJpcGVcbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgIC5jcmVhdGUoe1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbigoY3VzdG9tZXIpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCB1cGRhdGU6IFVzZXJUeXBlID0ge1xuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICBzdHJpcGVDdXN0b21lcklkOiBjdXN0b21lci5pZFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXJUeXBlKSA9PiAhIXVwZGF0ZWRVc2VyKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQmFua0FjY291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgYmFua0FjY291bnQ6IFBheW1lbnRCYW5rQWNjb3VudCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRQYXltZW50QWNjb3VudEJhbmsnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICAvLyBQYXJhbXNcbiAgY29uc3Qge1xuICAgIGFjY291bnROdW1iZXIsXG4gICAgZnVsbE5hbWUsXG4gICAgcm91dGluZ1xuICB9ID0gYmFua0FjY291bnQ7XG5cbiAgY29uc3QgZm9ybWF0QWNjb3VudDogc3RyaW5nID0gcGFyc2VTdHJpbmcoYWNjb3VudE51bWJlciwgMzIpO1xuXG4gIGlmKGZvcm1hdEFjY291bnQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfYWNjb3VudF9udW1iZXInKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDEyOCk7XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfZnVsbF9uYW1lJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRSb3V0aW5nOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhyb3V0aW5nLCAzMik7XG5cbiAgaWYoZm9ybWF0Um91dGluZyA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9yb3V0aW5nX251bWJlcicpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcblxuICAgICAgLy8gU3RyaXBlXG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuICAgICAgY29uc3Qgc291cmNlOiBhbnkgPSB7XG4gICAgICAgIGFjY291bnRfaG9sZGVyX25hbWU6IGZvcm1hdEZ1bGxOYW1lLFxuICAgICAgICBhY2NvdW50X2hvbGRlcl90eXBlOiAnaW5kaXZpZHVhbCcsXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBmb3JtYXRBY2NvdW50LFxuICAgICAgICBjb3VudHJ5OiAnVVMnLFxuICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgIG9iamVjdDogJ2JhbmtfYWNjb3VudCcsXG4gICAgICAgIHJvdXRpbmdfbnVtYmVyOiBmb3JtYXRSb3V0aW5nXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAuY3JlYXRlU291cmNlKHN0cmlwZUFjY291bnRJZCwge3NvdXJjZX0pXG4gICAgICAgIC50aGVuKChhY2NvdW50OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB7aWQ6IGJhbmtJZCwgbGFzdDQ6IGJhbmtBY2NvdW50LCByb3V0aW5nX251bWJlcjogYmFua1JvdXRpbmd9ID0gYWNjb3VudDtcbiAgICAgICAgICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICAgICAgICAgIGJhbmtBY2NvdW50LFxuICAgICAgICAgICAgYmFua0Z1bGxOYW1lOiBmb3JtYXRGdWxsTmFtZSxcbiAgICAgICAgICAgIGJhbmtJZCxcbiAgICAgICAgICAgIGJhbmtSb3V0aW5nLFxuICAgICAgICAgICAgbW9kaWZpZWQ6IERhdGUubm93KClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigodXBkYXRlZFVzZXI6IFVzZXJUeXBlKSA9PiB1cGRhdGVkVXNlcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyb3IubWVzc2FnZTtcblxuICAgICAgICAgIGlmKG1zZyA9PT0gJ0EgYmFuayBhY2NvdW50IHdpdGggdGhhdCByb3V0aW5nIG51bWJlciBhbmQgYWNjb3VudCBudW1iZXIgJyArXG4gICAgICAgICAgICAnYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgY3VzdG9tZXIuJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdiYW5rX2FjY291bnRfZXhpc3RzJ1xuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkOiBQYXltZW50Q2FyZFR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZENyZWRpdENhcmQnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICByZXR1cm4gZ2V0VXNlcihjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgLy8gVXNlclxuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuXG4gICAgICAvLyBDYXJkXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICAgIGNpdHksXG4gICAgICAgIGNvdW50cnksXG4gICAgICAgIGN2YyxcbiAgICAgICAgZXhwTW9udGgsXG4gICAgICAgIGV4cFllYXIsXG4gICAgICAgIGZ1bGxOYW1lLFxuICAgICAgICBzdHJlZXQxLFxuICAgICAgICBzdHJlZXQyLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgemlwXG4gICAgICB9OiBQYXltZW50Q2FyZFR5cGUgPSBjYXJkO1xuXG4gICAgICBjb25zdCBmb3JtYXROdW1iZXI6IG51bWJlciA9IHBhcnNlTnVtKGFjY291bnROdW1iZXIsIDE2KTtcblxuICAgICAgaWYoIWZvcm1hdE51bWJlcikge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9udW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0RXhwTW9udGg6IG51bWJlciA9IHBhcnNlTnVtKGV4cE1vbnRoLCAyKTtcblxuICAgICAgaWYoIWZvcm1hdEV4cE1vbnRoKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX2V4cF9tb250aCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRFeHBZZWFyOiBudW1iZXIgPSBwYXJzZU51bShleHBZZWFyLCAyKTtcblxuICAgICAgaWYoIWZvcm1hdEV4cFllYXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfZXhwX3llYXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0Q3ZjOiBudW1iZXIgPSBwYXJzZU51bShjdmMsIDMpO1xuXG4gICAgICAvLyBBZGRyZXNzXG4gICAgICBjb25zdCBwYXltZW50Q2FyZDogUGF5bWVudENhcmRUeXBlID0ge307XG4gICAgICBjb25zdCBmb3JtYXRDaXR5OiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoY2l0eSwgMzIpO1xuXG4gICAgICBpZihmb3JtYXRDaXR5KSB7XG4gICAgICAgIHBheW1lbnRDYXJkLmNpdHkgPSBmb3JtYXRDaXR5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRDb3VudHJ5OiBzdHJpbmcgPSBwYXJzZUNoYXIoY291bnRyeSwgMik7XG5cbiAgICAgIGlmKGZvcm1hdENvdW50cnkpIHtcbiAgICAgICAgcGF5bWVudENhcmQuY291bnRyeSA9IGZvcm1hdENvdW50cnk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0RnVsbE5hbWUpIHtcbiAgICAgICAgcGF5bWVudENhcmQuZnVsbE5hbWUgPSBmb3JtYXRGdWxsTmFtZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RyZWV0MTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHN0cmVldDEsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0U3RyZWV0MSkge1xuICAgICAgICBwYXltZW50Q2FyZC5zdHJlZXQxID0gZm9ybWF0U3RyZWV0MTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RyZWV0Mjogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0U3RyZWV0Mikge1xuICAgICAgICBwYXltZW50Q2FyZC5zdHJlZXQyID0gZm9ybWF0U3RyZWV0MjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RhdGU6IHN0cmluZyA9IHBhcnNlQ2hhcihzdGF0ZSwgMik7XG5cbiAgICAgIGlmKGZvcm1hdFN0YXRlKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLnN0YXRlID0gZm9ybWF0U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdFppcDogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHppcCwgMTApO1xuXG4gICAgICBpZihmb3JtYXRaaXApIHtcbiAgICAgICAgcGF5bWVudENhcmQuemlwID0gZm9ybWF0WmlwO1xuICAgICAgfVxuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG4gICAgICBjb25zdCBzb3VyY2U6IGFueSA9IHtcbiAgICAgICAgYWRkcmVzc19jaXR5OiBmb3JtYXRDaXR5LFxuICAgICAgICBhZGRyZXNzX2NvdW50cnk6IGZvcm1hdENvdW50cnksXG4gICAgICAgIGFkZHJlc3NfbGluZTE6IGZvcm1hdFN0cmVldDEsXG4gICAgICAgIGFkZHJlc3NfbGluZTI6IGZvcm1hdFN0cmVldDIsXG4gICAgICAgIGFkZHJlc3Nfc3RhdGU6IGZvcm1hdFN0YXRlLFxuICAgICAgICBhZGRyZXNzX3ppcDogZm9ybWF0WmlwLFxuICAgICAgICBjdmM6IGZvcm1hdEN2YyxcbiAgICAgICAgZXhwX21vbnRoOiBmb3JtYXRFeHBNb250aCxcbiAgICAgICAgZXhwX3llYXI6IGZvcm1hdEV4cFllYXIsXG4gICAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICBudW1iZXI6IGZvcm1hdE51bWJlcixcbiAgICAgICAgb2JqZWN0OiAnY2FyZCdcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC5jcmVhdGVTb3VyY2Uoc3RyaXBlQWNjb3VudElkLCB7c291cmNlfSlcbiAgICAgICAgLnRoZW4oKG5ld1NvdXJjZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qge2JyYW5kLCBjdmNfY2hlY2s6IGN2Y0NoZWNrLCBsYXN0NH0gPSBuZXdTb3VyY2U7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICAgICAgICAuLi5wYXltZW50Q2FyZCxcbiAgICAgICAgICAgIF9rZXk6IGNyZWF0ZUhhc2goYHVzZXItcGF5bWVudC0ke3Nlc3Npb25JZH1gKSxcbiAgICAgICAgICAgIGFjY291bnROdW1iZXI6IGxhc3Q0LFxuICAgICAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgICAgIGJyYW5kLFxuICAgICAgICAgICAgY3ZjQ2hlY2ssXG4gICAgICAgICAgICBleHBNb250aCxcbiAgICAgICAgICAgIGV4cFllYXIsXG4gICAgICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGluc2VydEFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBjcmVkaXRDYXJkcyBSRVRVUk4gTkVXYDtcblxuICAgICAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShpbnNlcnRBcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAgIC50aGVuKChuZXdDYXJkOiBQYXltZW50Q2FyZFR5cGUpID0+IHtcbiAgICAgICAgICAgICAgaWYobmV3Q2FyZCkge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBsaW5rZWQgZWRnZVxuICAgICAgICAgICAgICAgIGNvbnN0IHtfaWQ6IGNhcmRJZCwgX2tleTogY2FyZEtleX0gPSBjYXJkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oJ2hhc1BheW1lbnQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBwYXltZW50LSR7Y2FyZEtleX1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICBfZnJvbTogYHVzZXJzLyR7c2Vzc2lvbklkfWAsXG4gICAgICAgICAgICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgICAgICAgICAgICBfdG86IGNhcmRJZFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBjYXJkKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBuZXdDYXJkO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkOiBQYXltZW50Q2FyZFR5cGUpOiBQcm9taXNlPFBheW1lbnRDYXJkVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBjb25zdCB7XG4gICAgY2l0eSxcbiAgICBjb3VudHJ5LFxuICAgIGV4cE1vbnRoLFxuICAgIGV4cFllYXIsXG4gICAgZnVsbE5hbWUsXG4gICAgaWQsXG4gICAgc3RyZWV0MSxcbiAgICBzdGF0ZSxcbiAgICB6aXBcbiAgfTogUGF5bWVudENhcmRUeXBlID0gY2FyZDtcblxuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChpZCk7XG5cbiAgaWYoZm9ybWF0SWQpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9pZCcpO1xuICB9XG5cbiAgY29uc3QgcGF5bWVudENhcmQ6IFBheW1lbnRDYXJkVHlwZSA9IHt9O1xuICBjb25zdCBmb3JtYXRFeHBNb250aDogbnVtYmVyID0gcGFyc2VOdW0oZXhwTW9udGgsIDIpO1xuICBjb25zdCBmb3JtYXRFeHBZZWFyOiBudW1iZXIgPSBwYXJzZU51bShleHBZZWFyLCAyKTtcbiAgY29uc3QgZm9ybWF0Q2l0eTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGNpdHksIDMyKTtcbiAgY29uc3QgZm9ybWF0Q291bnRyeTogc3RyaW5nID0gcGFyc2VDaGFyKGNvdW50cnksIDIpO1xuICBjb25zdCBmb3JtYXRGdWxsTmFtZTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKGZ1bGxOYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFN0cmVldDE6IHN0cmluZyA9IHBhcnNlU3RyaW5nKHN0cmVldDEsIDMyKTtcbiAgY29uc3QgZm9ybWF0U3RhdGU6IHN0cmluZyA9IHBhcnNlQ2hhcihzdGF0ZSwgMik7XG4gIGNvbnN0IGZvcm1hdFppcDogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHppcCwgMTApO1xuXG4gIGlmKGZvcm1hdEV4cE1vbnRoKSB7XG4gICAgcGF5bWVudENhcmQuZXhwTW9udGggPSBmb3JtYXRFeHBNb250aDtcbiAgfVxuXG4gIGlmKGZvcm1hdEV4cFllYXIpIHtcbiAgICBwYXltZW50Q2FyZC5leHBZZWFyID0gZm9ybWF0RXhwWWVhcjtcbiAgfVxuXG4gIGlmKGZvcm1hdENpdHkpIHtcbiAgICBwYXltZW50Q2FyZC5jaXR5ID0gZm9ybWF0Q2l0eTtcbiAgfVxuXG4gIGlmKGZvcm1hdENvdW50cnkpIHtcbiAgICBwYXltZW50Q2FyZC5jb3VudHJ5ID0gZm9ybWF0Q291bnRyeTtcbiAgfVxuXG4gIGlmKGZvcm1hdEZ1bGxOYW1lKSB7XG4gICAgcGF5bWVudENhcmQuZnVsbE5hbWUgPSBmb3JtYXRGdWxsTmFtZTtcbiAgfVxuXG4gIGlmKGZvcm1hdFN0cmVldDEpIHtcbiAgICBwYXltZW50Q2FyZC5zdHJlZXQxID0gZm9ybWF0U3RyZWV0MTtcbiAgfVxuXG4gIGlmKGZvcm1hdFN0YXRlKSB7XG4gICAgcGF5bWVudENhcmQuc3RhdGUgPSBmb3JtYXRTdGF0ZTtcbiAgfVxuXG4gIGlmKGZvcm1hdFppcCkge1xuICAgIHBheW1lbnRDYXJkLnppcCA9IGZvcm1hdFppcDtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZTogYW55ID0gcGF5bWVudENhcmQ7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBMRVQgdXBkYXRlZENhcmQgPSBGSVJTVChcbiAgICAgICAgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgICAgRklMVEVSIGMuX2tleSA9PSAke2Zvcm1hdElkfSAmJiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgICAgVVBEQVRFIGMgV0lUSCAke3VwZGF0ZX0gSU4gY3JlZGl0Q2FyZHNcbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gTkVXXG4gICAgICApXG4gICAgICBMRVQgdXNlciA9IEZJUlNUKFxuICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICBGSUxURVIgdS5fa2V5ID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiB1XG4gICAgICApXG4gICAgICBSRVRVUk4ge3VzZXI6IHVzZXIsIGNhcmQ6IHVwZGF0ZWRDYXJkfWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVzdWx0cyA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkQ2FyZDogUGF5bWVudENhcmRUeXBlID0gcmVzdWx0cy5jYXJkO1xuICAgICAgY29uc3Qge3VzZXJ9ID0gcmVzdWx0cztcblxuICAgICAgaWYoIXVwZGF0ZWRDYXJkKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ25vdF9mb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7c3RyaXBlQ3VzdG9tZXJJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qge3N0cmlwZUlkfSA9IGNhcmQ7XG5cbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogYW55ID0ge1xuICAgICAgICBhZGRyZXNzX2NpdHk6IGZvcm1hdENpdHksXG4gICAgICAgIGFkZHJlc3NfY291bnRyeTogZm9ybWF0Q291bnRyeSxcbiAgICAgICAgYWRkcmVzc19saW5lMTogZm9ybWF0U3RyZWV0MSxcbiAgICAgICAgYWRkcmVzc19zdGF0ZTogZm9ybWF0U3RhdGUsXG4gICAgICAgIGFkZHJlc3NfemlwOiBmb3JtYXRaaXAsXG4gICAgICAgIGV4cF9tb250aDogZm9ybWF0RXhwTW9udGgsXG4gICAgICAgIGV4cF95ZWFyOiBmb3JtYXRFeHBZZWFyLFxuICAgICAgICBuYW1lOiBmb3JtYXRGdWxsTmFtZVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgLnVwZGF0ZVNvdXJjZShzdHJpcGVDdXN0b21lcklkLCBzdHJpcGVJZCwgdXBkYXRlKVxuICAgICAgICAudGhlbigoKSA9PiBjYXJkKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXltZW50czo6dXBkYXRlQ2FyZDo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDcmVkaXRDYXJkcyA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxQYXltZW50Q2FyZFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDcmVkaXRDYXJkcyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgRklMVEVSIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3Q6IFBheW1lbnRDYXJkVHlwZVtdID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q2FyZElkOiBzdHJpbmcgPSBwYXJzZUlkKGNhcmRJZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIGNhcmQgPSBGSVJTVChcbiAgICAgIEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgICBGSUxURVIgYy5fa2V5ID09ICR7Zm9ybWF0Q2FyZElkfSAmJiBjLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSBjIElOIGNyZWRpdENhcmRzXG4gICAgICBSRVRVUk4gT0xEXG4gICAgKVxuICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB1XG4gICAgKVxuICAgIFJFVFVSTiB7dXNlcjogdXNlciwgY2FyZDogY2FyZH1gO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlc3VsdCA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge2NhcmQsIHVzZXJ9ID0gcmVzdWx0O1xuICAgICAgY29uc3Qge19rZXk6IGNhcmRLZXl9ID0gY2FyZDtcblxuICAgICAgLy8gUmVtb3ZlIGxpbmtlZCBlZGdlc1xuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYXRhYmFzZS5jb2xsZWN0aW9uKCdoYXNQYXltZW50Jyk7XG5cbiAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5vdXRFZGdlcyhjYXJkS2V5LCB7fSlcbiAgICAgICAgLnRoZW4oKGVkZ2VzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZWRnZXMubWFwKChlZGdlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFJFTU9WRSB7X2tleToke2VkZ2VLZXl9fSBJTiBoYXNQYXltZW50YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkocmVtb3ZlQXFsUXJ5KTtcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpcGVcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5jdXN0b21lcnNcbiAgICAgICAgICAgICAgICAgIC5kZWxldGVTb3VyY2UodXNlci5zdHJpcGVDdXN0b21lcklkLCBjYXJkLnN0cmlwZUlkKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXltZW50czo6ZGVsZXRlQ2FyZDo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUJhbmtBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGJhbmtJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIC8vIENsZWFuIGRiXG4gIGNvbnN0IHVwZGF0ZTogVXNlclR5cGUgPSB7XG4gICAgYmFua0FjY291bnQ6ICcnLFxuICAgIGJhbmtGdWxsTmFtZTogJycsXG4gICAgYmFua0lkOiAnJyxcbiAgICBiYW5rUm91dGluZzogJycsXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KClcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcblxuICAgICAgLy8gU3RyaXBlXG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBuZXcgU3RyaXBlKENvbmZpZy5nZXQoJ3N0cmlwZS50b2tlbicpLCB7YXBpVmVyc2lvbiwgdHlwZXNjcmlwdDogdHJ1ZX0pO1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAuZGVsZXRlU291cmNlKHN0cmlwZUFjY291bnRJZCwgYmFua0lkKVxuICAgICAgICAudGhlbigocmVzcG9uc2U6IGFueSA9IHtkZWxldGVkOiBmYWxzZX0pID0+IHJlc3BvbnNlLmRlbGV0ZWQpXG4gICAgICAgIC5jYXRjaCgoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXltZW50VHJhbnNmZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdHJhbnNmZXI6IFBheW1lbnRUcmFuc2Zlcik6IFByb21pc2U8UGF5bWVudFRyYW5zZmVyPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjdXJyZW5jeX0gPSB0cmFuc2ZlcjtcbiAgY29uc3QgZm9ybWF0QW1vdW50OiBudW1iZXIgPSBwYXJzZU51bShhbW91bnQpO1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeTogc3RyaW5nID0gcGFyc2VDaGFyKGN1cnJlbmN5LCAzLCAnVVNEJykudG9VcHBlckNhc2UoKTtcblxuICByZXR1cm4gZ2V0VXNlcihjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuXG4gICAgICAvLyBTdHJpcGVcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQudHJhbnNmZXJzXG4gICAgICAgIC5jcmVhdGUoe1xuICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaXBlQWNjb3VudElkXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChzdHJpcGVUcmFuc2ZlcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHN0cmlwZVRyYW5zZmVyKTtcbiAgICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0OiBQYXltZW50VHJhbnNmZXIgPSB7XG4gICAgICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQsXG4gICAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiB0cmFuc2ZlcnMgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgICAudGhlbigobmV3VHJhbnNmZXI6IFBheW1lbnRUcmFuc2ZlcikgPT4gbmV3VHJhbnNmZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXltZW50SG9sZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwYXltZW50OiBQYXltZW50Q2hhcmdlKTogUHJvbWlzZTxQYXltZW50Q2hhcmdlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjYXB0dXJlLCBjYXJkSWQsIGN1cnJlbmN5LCBkZXNjcmlwdGlvbn0gPSBwYXltZW50O1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmNoYXJnZXNcbiAgICAuY3JlYXRlKHtcbiAgICAgIGFtb3VudCxcbiAgICAgIGNhcHR1cmUsXG4gICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHNvdXJjZTogY2FyZElkXG4gICAgfSlcbiAgICAudGhlbigoc3RyaXBlQ2hhcmdlKSA9PiB7XG4gICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRDaGFyZ2UgPSB7XG4gICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgY2FwdHVyZSxcbiAgICAgICAgY2FyZElkLFxuICAgICAgICBjaGFyZ2VGYWlsQ29kZTogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfY29kZSxcbiAgICAgICAgY2hhcmdlRmFpbE1zZzogc3RyaXBlQ2hhcmdlLmZhaWx1cmVfbWVzc2FnZSxcbiAgICAgICAgY2hhcmdlSWQ6IHN0cmlwZUNoYXJnZS5pZCxcbiAgICAgICAgY2hhcmdlU3RhdHVzOiBzdHJpcGVDaGFyZ2Uuc3RhdHVzLFxuICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwYXltZW50cyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChuZXdQYXltZW50OiBQYXltZW50Q2hhcmdlKSA9PiBuZXdQYXltZW50KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmNyZWF0ZUhvbGQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgIH0pO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsbUJBQWtGO0FBQ2xGLHNCQUFrQjtBQUlsQixvQkFBbUI7QUFFbkIsb0JBQXFCO0FBRXJCLDRCQUFrQztBQUNsQyxtQkFBc0I7QUFDdEIsbUJBQXlCO0FBRXpCLE1BQU0sZ0JBQXdCO0FBQzlCLE1BQU0sYUFBa0I7QUFFakIsTUFBTSxxQkFBcUIsQ0FBQyxZQUEwQztBQUMzRSxRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxVQUFVLFNBQVMsRUFBQyxRQUFRLFdBQVcsU0FBUSxFQUFDLElBQUk7QUFHM0QsUUFBTSxlQUFlLElBQUksY0FBQUEsUUFBTyxxQkFBTyxJQUFJLGNBQWMsR0FBRyxFQUFDLFlBQVksWUFBWSxLQUFJ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
|
package/lib/actions/posts.d.ts
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ApiContext, FileType, PostInputType, PostOptions, PostType } from '../types';
|
|
1
|
+
import type { ApiContext, ArangoDbLimit, FileType, PostInputType, PostOptions, PostType } from '../types';
|
|
3
2
|
export declare const parsePostOptions: (options?: PostOptions) => {
|
|
4
3
|
latitude: number;
|
|
5
|
-
limit:
|
|
4
|
+
limit: ArangoDbLimit;
|
|
6
5
|
longitude: number;
|
|
7
6
|
type: string;
|
|
8
7
|
};
|
|
9
8
|
export declare const getPostOptional: (fields: string[], sessionId: string) => any;
|
|
10
|
-
export declare const getPost: (context: ApiContext,
|
|
9
|
+
export declare const getPost: (context: ApiContext, postId: string, options?: PostOptions) => Promise<PostType>;
|
|
11
10
|
export declare const getPostsByArea: (context: ApiContext, latitude: number, longitude: number, options?: PostOptions) => Promise<PostType[]>;
|
|
12
11
|
export declare const getPostsByLatest: (context: ApiContext, options?: PostOptions) => Promise<PostType[]>;
|
|
13
12
|
export declare const getPostsByReactions: (context: ApiContext, reactions?: string[], options?: PostOptions) => Promise<PostType[]>;
|
|
14
13
|
export declare const getPostsByTags: (context: ApiContext, tags?: string[], options?: PostOptions) => Promise<PostType[]>;
|
|
15
14
|
export declare const getPostsByUser: (context: ApiContext, userId: string, options?: PostOptions) => Promise<PostType[]>;
|
|
16
|
-
export declare const getPostComments: (context: ApiContext,
|
|
17
|
-
export declare const addPost: (context: ApiContext,
|
|
15
|
+
export declare const getPostComments: (context: ApiContext, postId: string, options?: PostOptions) => Promise<PostType[]>;
|
|
16
|
+
export declare const addPost: (context: ApiContext, { content, endDate, groupId, location, latitude, longitude, name, parentId, privacy, tags, startDate, type }: PostInputType) => Promise<PostType>;
|
|
18
17
|
export declare const updatePost: (context: ApiContext, post: PostInputType) => Promise<PostType>;
|
|
19
|
-
export declare const deletePost: (context: ApiContext,
|
|
20
|
-
export declare const
|
|
21
|
-
export declare const createPostEdge: (db: Database, file: FileType, postId: string) => Promise<FileType>;
|
|
18
|
+
export declare const deletePost: (context: ApiContext, postDocId: string) => Promise<PostType>;
|
|
19
|
+
export declare const createPostEdge: (context: ApiContext, postDocId: string, itemDocId: string, edgeType?: string, props?: any) => Promise<FileType>;
|