@sendly/cli 3.17.0 → 3.18.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/dist/commands/sms/batch.d.ts +2 -2
- package/dist/commands/sms/batch.js +5 -5
- package/dist/commands/sms/send.d.ts +2 -1
- package/dist/commands/sms/send.js +30 -11
- package/dist/lib/api-client.d.ts +1 -1
- package/dist/lib/api-client.js +2 -2
- package/oclif.manifest.json +14 -5
- package/package.json +1 -1
|
@@ -25,11 +25,11 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
25
25
|
private reuseBatch;
|
|
26
26
|
/**
|
|
27
27
|
* Send to inline recipients (--to flag)
|
|
28
|
-
* This path doesn't upload to
|
|
28
|
+
* This path doesn't upload to R2 since it's just a few numbers
|
|
29
29
|
*/
|
|
30
30
|
private sendInlineRecipients;
|
|
31
31
|
/**
|
|
32
|
-
* Upload CSV to
|
|
32
|
+
* Upload CSV to R2 and send
|
|
33
33
|
*/
|
|
34
34
|
private uploadAndSend;
|
|
35
35
|
/**
|
|
@@ -69,7 +69,7 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
69
69
|
if (flags.to) {
|
|
70
70
|
return this.sendInlineRecipients(flags);
|
|
71
71
|
}
|
|
72
|
-
// Handle --file flag (upload to
|
|
72
|
+
// Handle --file flag (upload to R2)
|
|
73
73
|
if (flags.file) {
|
|
74
74
|
return this.uploadAndSend(flags);
|
|
75
75
|
}
|
|
@@ -144,7 +144,7 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
144
144
|
}
|
|
145
145
|
/**
|
|
146
146
|
* Send to inline recipients (--to flag)
|
|
147
|
-
* This path doesn't upload to
|
|
147
|
+
* This path doesn't upload to R2 since it's just a few numbers
|
|
148
148
|
*/
|
|
149
149
|
async sendInlineRecipients(flags) {
|
|
150
150
|
if (!flags.text) {
|
|
@@ -168,7 +168,7 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
168
168
|
await this.previewOrSend(messages, flags);
|
|
169
169
|
}
|
|
170
170
|
/**
|
|
171
|
-
* Upload CSV to
|
|
171
|
+
* Upload CSV to R2 and send
|
|
172
172
|
*/
|
|
173
173
|
async uploadAndSend(flags) {
|
|
174
174
|
const filePath = flags.file;
|
|
@@ -196,7 +196,7 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
196
196
|
}
|
|
197
197
|
const spin = spinner(`Uploading ${filename}...`).start();
|
|
198
198
|
try {
|
|
199
|
-
// Upload to
|
|
199
|
+
// Upload to R2 via CLI endpoint
|
|
200
200
|
const response = await apiClient.uploadFile("/api/cli/batch/upload", { buffer, filename, mimetype: "text/csv" });
|
|
201
201
|
spin.stop();
|
|
202
202
|
// Show upload summary
|
|
@@ -433,4 +433,4 @@ export default class SmsBatch extends AuthenticatedCommand {
|
|
|
433
433
|
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
434
434
|
}
|
|
435
435
|
}
|
|
436
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvc21zL2JhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixJQUFJLEVBQ0osVUFBVSxHQUNYLE1BQU0scUJBQXFCLENBQUM7QUE2RzdCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sUUFBUyxTQUFRLG9CQUFvQjtJQUN4RCxNQUFNLENBQUMsV0FBVyxHQUNoQixnRUFBZ0UsQ0FBQztJQUVuRSxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLG1EQUFtRDtRQUNuRCx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLDZEQUE2RDtRQUM3RCx1RkFBdUY7UUFDdkYsbURBQW1EO1FBQ25ELHVDQUF1QztLQUN4QyxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSx5REFBeUQ7WUFDdEUsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUM7U0FDdEMsQ0FBQztRQUNGLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2YsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFX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RSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgc3VjY2VzcyxcbiAgZXJyb3IsXG4gIHNwaW5uZXIsXG4gIGNvbG9ycyxcbiAganNvbixcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIEJhdGNoVXBsb2FkUmVzcG9uc2Uge1xuICB1cGxvYWQ6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgc2l6ZTogbnVtYmVyO1xuICAgIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB9O1xuICB2YWxpZGF0aW9uOiB7XG4gICAgdG90YWxSb3dzOiBudW1iZXI7XG4gICAgdmFsaWRDb3VudDogbnVtYmVyO1xuICAgIGludmFsaWRDb3VudDogbnVtYmVyO1xuICAgIGR1cGxpY2F0ZXNSZW1vdmVkOiBudW1iZXI7XG4gICAgaGFzSGVhZGVyOiBib29sZWFuO1xuICB9O1xuICByZWNpcGllbnRzOiBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ/OiBzdHJpbmcgfT47XG4gIGVycm9yczogQXJyYXk8eyByb3c6IG51bWJlcjsgcGhvbmU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9PjtcbiAgaGFzTW9yZUVycm9yczogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEJhdGNoSGlzdG9yeVJlc3BvbnNlIHtcbiAgdXBsb2FkczogQXJyYXk8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBzaXplOiBudW1iZXI7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIHRvdGFsUm93czogbnVtYmVyO1xuICAgICAgdmFsaWRDb3VudDogbnVtYmVyO1xuICAgICAgaW52YWxpZENvdW50OiBudW1iZXI7XG4gICAgICBzb3VyY2U/OiBzdHJpbmc7XG4gICAgfTtcbiAgfT47XG59XG5cbmludGVyZmFjZSBCYXRjaFJlc3BvbnNlIHtcbiAgYmF0Y2hJZDogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBzZW50OiBudW1iZXI7XG4gIHF1ZXVlZDogbnVtYmVyO1xuICBmYWlsZWQ6IG51bWJlcjtcbiAgY3JlZGl0c1VzZWQ6IG51bWJlcjtcbiAgY3JlZGl0c1JlZnVuZGVkOiBudW1iZXI7XG4gIHN0YXR1czogc3RyaW5nO1xuICBtZXNzYWdlcz86IEFycmF5PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdG86IHN0cmluZztcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfT47XG59XG5cbmludGVyZmFjZSBCYXRjaFByZXZpZXdSZXNwb25zZSB7XG4gIHRvdGFsOiBudW1iZXI7XG4gIHNlbmRhYmxlOiBudW1iZXI7XG4gIGJsb2NrZWQ6IG51bWJlcjtcbiAgZHVwbGljYXRlczogbnVtYmVyO1xuICBjcmVkaXRzTmVlZGVkOiBudW1iZXI7XG4gIGNyZWRpdEJhbGFuY2U6IG51bWJlcjtcbiAgaGFzU3VmZmljaWVudENyZWRpdHM6IGJvb2xlYW47XG4gIGtleVR5cGU6IFwidGVzdFwiIHwgXCJsaXZlXCI7XG4gIGtleVNjb3Blczogc3RyaW5nW107XG4gIGhhc1dyaXRlU2NvcGU6IGJvb2xlYW47XG4gIG1lc3NhZ2luZ1Byb2ZpbGU6IHtcbiAgICBpZDogc3RyaW5nIHwgbnVsbDtcbiAgICBjYW5TZW5kRG9tZXN0aWM6IGJvb2xlYW47XG4gICAgY2FuU2VuZEludGVybmF0aW9uYWw6IGJvb2xlYW47XG4gICAgdmVyaWZpY2F0aW9uU3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuICAgIHZlcmlmaWNhdGlvblR5cGU6IHN0cmluZyB8IG51bGw7XG4gIH07XG4gIGJ5Q291bnRyeTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBjb3VudDogbnVtYmVyO1xuICAgICAgY3JlZGl0czogbnVtYmVyO1xuICAgICAgdGllcjogc3RyaW5nO1xuICAgICAgYWxsb3dlZDogYm9vbGVhbjtcbiAgICAgIGJsb2NrZWRSZWFzb24/OiBzdHJpbmc7XG4gICAgfVxuICA+O1xuICBibG9ja2VkTWVzc2FnZXM6IEFycmF5PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHRvOiBzdHJpbmc7XG4gICAgcmVhc29uOiBzdHJpbmc7XG4gIH0+O1xuICBjb21wbGlhbmNlOiB7XG4gICAgbWVzc2FnZVR5cGU6IFwibWFya2V0aW5nXCIgfCBcInRyYW5zYWN0aW9uYWxcIjtcbiAgICBzaGFmdEJsb2NrZWQ6IG51bWJlcjtcbiAgICBxdWlldEhvdXJzQmxvY2tlZDogbnVtYmVyO1xuICAgIHF1aWV0SG91cnNSZXNjaGVkdWxlZDogbnVtYmVyO1xuICAgIHNoYWZ0QmxvY2tlZE1lc3NhZ2VzOiBBcnJheTx7XG4gICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgdG86IHN0cmluZztcbiAgICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgICBtYXRjaGVkVGVybXM6IHN0cmluZ1tdO1xuICAgIH0+O1xuICAgIHF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXM6IEFycmF5PHtcbiAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICB0bzogc3RyaW5nO1xuICAgICAgcmVjaXBpZW50VGltZXpvbmU6IHN0cmluZztcbiAgICAgIHJlY2lwaWVudExvY2FsVGltZTogc3RyaW5nO1xuICAgICAgbmV4dEFsbG93ZWRUaW1lPzogc3RyaW5nO1xuICAgIH0+O1xuICB9O1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNtc0JhdGNoIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiU2VuZCBiYXRjaCBTTVMgbWVzc2FnZXMgKHVwbG9hZHMgQ1NWIHRvIGNsb3VkIGZvciBhdWRpdCB0cmFpbClcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBzbXMgYmF0Y2ggLS1maWxlIHJlY2lwaWVudHMuY3N2XCIsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWZpbGUgcGhvbmVzLmNzdiAtLXRleHQgXCJIZWxsbyBldmVyeW9uZSFcIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLXRvICsxNTU1MTIzNDU2NywrMTU1NTk4NzY1NDMgLS10ZXh0IFwiSGVsbG8hXCInLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSByZWNpcGllbnRzLmNzdiAtLWRyeS1ydW5cIixcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSBwaG9uZXMuY3N2IC0tdGV4dCBcIkNvZGU6IDEyM1wiIC0tdHlwZSB0cmFuc2FjdGlvbmFsJyxcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLXJldXNlIGFiYzEyMy1kZWY0NTZcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWhpc3RvcnlcIixcbiAgXTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICAgIGZpbGU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIkZcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNTViBmaWxlIHdpdGggcGhvbmUgbnVtYmVycyAoYW5kIG9wdGlvbmFsIG1lc3NhZ2UgdGV4dClcIixcbiAgICAgIGV4Y2x1c2l2ZTogW1widG9cIiwgXCJyZXVzZVwiLCBcImhpc3RvcnlcIl0sXG4gICAgfSksXG4gICAgdG86IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbW1hLXNlcGFyYXRlZCByZWNpcGllbnQgcGhvbmUgbnVtYmVycyAoRS4xNjQgZm9ybWF0KVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXCJmaWxlXCIsIFwicmV1c2VcIiwgXCJoaXN0b3J5XCJdLFxuICAgIH0pLFxuICAgIHRleHQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm1cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk1lc3NhZ2UgdGV4dCAocmVxdWlyZWQgd2l0aCAtLXRvLCBvcHRpb25hbCB3aXRoIC0tZmlsZSBpZiBDU1YgaGFzIHRleHQgY29sdW1uKVwiLFxuICAgIH0pLFxuICAgIGZyb206IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImZcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNlbmRlciBJRCBvciBwaG9uZSBudW1iZXIgZm9yIGFsbCBtZXNzYWdlc1wiLFxuICAgIH0pLFxuICAgIHR5cGU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJNZXNzYWdlIHR5cGU6IG1hcmtldGluZyAoZGVmYXVsdCkgb3IgdHJhbnNhY3Rpb25hbC4gVHJhbnNhY3Rpb25hbCBieXBhc3NlcyBxdWlldCBob3Vycy5cIixcbiAgICAgIG9wdGlvbnM6IFtcIm1hcmtldGluZ1wiLCBcInRyYW5zYWN0aW9uYWxcIl0sXG4gICAgICBkZWZhdWx0OiBcIm1hcmtldGluZ1wiLFxuICAgIH0pLFxuICAgIFwiZHJ5LXJ1blwiOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGNoYXI6IFwiZFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUHJldmlldyBiYXRjaCB3aXRob3V0IHNlbmRpbmcgKHZhbGlkYXRlcyBhY2Nlc3MsIHNob3dzIGNvc3QgYW5kIGNvbXBsaWFuY2UgYnJlYWtkb3duKVwiLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSksXG4gICAgcmV1c2U6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSZS11c2UgYSBwcmV2aW91cyBiYXRjaCB1cGxvYWQgYnkgSUQgKHNlZSAtLWhpc3RvcnkpXCIsXG4gICAgICBleGNsdXNpdmU6IFtcImZpbGVcIiwgXCJ0b1wiLCBcImhpc3RvcnlcIl0sXG4gICAgfSksXG4gICAgaGlzdG9yeTogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBkZXNjcmlwdGlvbjogXCJTaG93IHJlY2VudCBiYXRjaCB1cGxvYWQgaGlzdG9yeVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXCJmaWxlXCIsIFwidG9cIiwgXCJyZXVzZVwiXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFNtc0JhdGNoKTtcblxuICAgIC8vIEhhbmRsZSBoaXN0b3J5IHN1YmNvbW1hbmRcbiAgICBpZiAoZmxhZ3MuaGlzdG9yeSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd0hpc3RvcnkoKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcmV1c2Ugc3ViY29tbWFuZFxuICAgIGlmIChmbGFncy5yZXVzZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV1c2VCYXRjaChmbGFncy5yZXVzZSwgZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSAtLXRvIGZsYWcgKGlubGluZSByZWNpcGllbnRzLCBubyB1cGxvYWQgbmVlZGVkKVxuICAgIGlmIChmbGFncy50bykge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZElubGluZVJlY2lwaWVudHMoZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSAtLWZpbGUgZmxhZyAodXBsb2FkIHRvIFN1cGFiYXNlKVxuICAgIGlmIChmbGFncy5maWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRBbmRTZW5kKGZsYWdzKTtcbiAgICB9XG5cbiAgICBlcnJvcihcIkVpdGhlciAtLWZpbGUsIC0tdG8sIC0tcmV1c2UsIG9yIC0taGlzdG9yeSBpcyByZXF1aXJlZFwiKTtcbiAgICB0aGlzLmV4aXQoMSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBiYXRjaCB1cGxvYWQgaGlzdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaG93SGlzdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzcGluID0gc3Bpbm5lcihcIkZldGNoaW5nIGJhdGNoIGhpc3RvcnkuLi5cIikuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8QmF0Y2hIaXN0b3J5UmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvY2xpL2JhdGNoL2hpc3RvcnlcIixcbiAgICAgICAgeyBsaW1pdDogMTUgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICAgIGpzb24ocmVzcG9uc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS51cGxvYWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiXFxuTm8gYmF0Y2ggdXBsb2FkcyBmb3VuZC5cXG5cIikpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlVwbG9hZCBhIENTViBmaWxlIHdpdGg6IHNlbmRseSBzbXMgYmF0Y2ggLS1maWxlIHlvdXIuY3N2XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TgSBSZWNlbnQgQmF0Y2ggVXBsb2Fkc1xcblwiKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDgwKSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHVwbG9hZCBvZiByZXNwb25zZS51cGxvYWRzKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh1cGxvYWQuY3JlYXRlZEF0KS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5mb3JtYXRCeXRlcyh1cGxvYWQuc2l6ZSk7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHVwbG9hZC5tZXRhZGF0YT8uc291cmNlID09PSBcImNsaVwiID8gXCJDTElcIiA6IFwiV2ViXCI7XG5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCR7Y29sb3JzLmluZm8odXBsb2FkLmlkLnNsaWNlKDAsIDgpKX0gICR7dXBsb2FkLmZpbGVuYW1lfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgICBgICAgJHtkYXRlfSB8ICR7c2l6ZX0gfCAke3VwbG9hZC5tZXRhZGF0YT8udmFsaWRDb3VudCB8fCAwfSB2YWxpZCByZWNpcGllbnRzIHwgJHtzb3VyY2V9YCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDgwKSkpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXCJcXG5SZS11c2UgYSBiYXRjaDogc2VuZGx5IHNtcyBiYXRjaCAtLXJldXNlIDxpZD5cIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3Bpbi5zdG9wKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXVzZSBhIHByZXZpb3VzIGJhdGNoIHVwbG9hZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXVzZUJhdGNoKFxuICAgIHVwbG9hZElkOiBzdHJpbmcsXG4gICAgZmxhZ3M6IHsgdGV4dD86IHN0cmluZzsgZnJvbT86IHN0cmluZzsgdHlwZT86IHN0cmluZzsgXCJkcnktcnVuXCI/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiRmV0Y2hpbmcgYmF0Y2ggZGF0YS4uLlwiKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LmdldDxCYXRjaFVwbG9hZFJlc3BvbnNlPihcbiAgICAgICAgYC9hcGkvY2xpL2JhdGNoL3JldXNlLyR7dXBsb2FkSWR9YCxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLnN1Y2Nlc3MoYFxcbuKckyBMb2FkZWQgYmF0Y2g6ICR7cmVzcG9uc2UudXBsb2FkLmZpbGVuYW1lfWApLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgIGAgICR7cmVzcG9uc2UudmFsaWRhdGlvbi52YWxpZENvdW50fSB2YWxpZCByZWNpcGllbnRzIGZyb20gJHtyZXNwb25zZS52YWxpZGF0aW9uLnRvdGFsUm93c30gcm93c2AsXG4gICAgICAgICksXG4gICAgICApO1xuXG4gICAgICAvLyBBcHBseSBzaGFyZWQgdGV4dCBpZiBwcm92aWRlZFxuICAgICAgbGV0IG1lc3NhZ2VzID0gcmVzcG9uc2UucmVjaXBpZW50cztcbiAgICAgIGlmIChmbGFncy50ZXh0KSB7XG4gICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMubWFwKChyKSA9PiAoe1xuICAgICAgICAgIHRvOiByLnRvLFxuICAgICAgICAgIHRleHQ6IHIudGV4dCB8fCBmbGFncy50ZXh0LFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGFsbCBtZXNzYWdlcyBoYXZlIHRleHRcbiAgICAgIGNvbnN0IG1pc3NpbmdUZXh0ID0gbWVzc2FnZXMuZmlsdGVyKChtKSA9PiAhbS50ZXh0Py50cmltKCkpO1xuICAgICAgaWYgKG1pc3NpbmdUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgYCR7bWlzc2luZ1RleHQubGVuZ3RofSByZWNpcGllbnRzIG1pc3NpbmcgbWVzc2FnZSB0ZXh0LiBVc2UgLS10ZXh0IHRvIHByb3ZpZGUgYSBkZWZhdWx0LmAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VlZCB3aXRoIHByZXZpZXcgb3Igc2VuZFxuICAgICAgYXdhaXQgdGhpcy5wcmV2aWV3T3JTZW5kKFxuICAgICAgICBtZXNzYWdlcyBhcyBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9PixcbiAgICAgICAgZmxhZ3MsXG4gICAgICAgIHJlc3BvbnNlLnVwbG9hZC5pZCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzcGluLnN0b3AoKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCB0byBpbmxpbmUgcmVjaXBpZW50cyAoLS10byBmbGFnKVxuICAgKiBUaGlzIHBhdGggZG9lc24ndCB1cGxvYWQgdG8gU3VwYWJhc2Ugc2luY2UgaXQncyBqdXN0IGEgZmV3IG51bWJlcnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZElubGluZVJlY2lwaWVudHMoZmxhZ3M6IHtcbiAgICB0bz86IHN0cmluZztcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIGZyb20/OiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICBcImRyeS1ydW5cIj86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWZsYWdzLnRleHQpIHtcbiAgICAgIGVycm9yKFwiLS10ZXh0IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgLS10b1wiKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBwaG9uZXMgPSBmbGFncy50byEuc3BsaXQoXCIsXCIpLm1hcCgocCkgPT4gcC50cmltKCkpO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gcGhvbmVzLm1hcCgocGhvbmUpID0+ICh7XG4gICAgICB0bzogcGhvbmUuc3RhcnRzV2l0aChcIitcIikgPyBwaG9uZSA6IGArJHtwaG9uZX1gLFxuICAgICAgdGV4dDogZmxhZ3MudGV4dCEsXG4gICAgfSkpO1xuXG4gICAgLy8gVmFsaWRhdGUgcGhvbmUgbnVtYmVyc1xuICAgIGZvciAoY29uc3QgbXNnIG9mIG1lc3NhZ2VzKSB7XG4gICAgICBpZiAoIS9eXFwrWzEtOV1cXGR7MSwxNH0kLy50ZXN0KG1zZy50bykpIHtcbiAgICAgICAgZXJyb3IoYEludmFsaWQgcGhvbmUgbnVtYmVyOiAke21zZy50b31gLCB7XG4gICAgICAgICAgaGludDogXCJVc2UgRS4xNjQgZm9ybWF0OiArMTU1NTEyMzQ1NjdcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByZXZpZXdPclNlbmQobWVzc2FnZXMsIGZsYWdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgQ1NWIHRvIFN1cGFiYXNlIGFuZCBzZW5kXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVwbG9hZEFuZFNlbmQoZmxhZ3M6IHtcbiAgICBmaWxlPzogc3RyaW5nO1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgZnJvbT86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIFwiZHJ5LXJ1blwiPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gZmxhZ3MuZmlsZSE7XG5cbiAgICAvLyBDaGVjayBmaWxlIGV4aXN0c1xuICAgIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgIGVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtmaWxlUGF0aH1gKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWxlIGV4dGVuc2lvblxuICAgIGlmICghZmlsZVBhdGguZW5kc1dpdGgoXCIuY3N2XCIpKSB7XG4gICAgICBlcnJvcihcIk9ubHkgQ1NWIGZpbGVzIGFyZSBzdXBwb3J0ZWRcIiwge1xuICAgICAgICBoaW50OiBcIkNvbnZlcnQgeW91ciBmaWxlIHRvIENTViBmb3JtYXQgd2l0aCBjb2x1bW5zOiBwaG9uZSxtZXNzYWdlXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIGZpbGVcbiAgICBjb25zdCBidWZmZXIgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZVBhdGgpO1xuXG4gICAgLy8gQ2hlY2sgZmlsZSBzaXplICg1TUIgbGltaXQpXG4gICAgaWYgKGJ1ZmZlci5sZW5ndGggPiA1ICogMTAyNCAqIDEwMjQpIHtcbiAgICAgIGVycm9yKFwiRmlsZSB0b28gbGFyZ2UgKG1heCA1TUIpXCIsIHtcbiAgICAgICAgaGludDogXCJTcGxpdCB5b3VyIENTViBpbnRvIHNtYWxsZXIgZmlsZXNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKGBVcGxvYWRpbmcgJHtmaWxlbmFtZX0uLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVwbG9hZCB0byBTdXBhYmFzZSB2aWEgQ0xJIGVuZHBvaW50XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC51cGxvYWRGaWxlPEJhdGNoVXBsb2FkUmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvY2xpL2JhdGNoL3VwbG9hZFwiLFxuICAgICAgICB7IGJ1ZmZlciwgZmlsZW5hbWUsIG1pbWV0eXBlOiBcInRleHQvY3N2XCIgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICAvLyBTaG93IHVwbG9hZCBzdW1tYXJ5XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuc3VjY2VzcyhgXFxu4pyTIFVwbG9hZGVkOiAke3Jlc3BvbnNlLnVwbG9hZC5maWxlbmFtZX1gKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGAgIFVwbG9hZCBJRDogJHtyZXNwb25zZS51cGxvYWQuaWR9YCkpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgYCAgJHtyZXNwb25zZS52YWxpZGF0aW9uLnZhbGlkQ291bnR9IHZhbGlkIC8gJHtyZXNwb25zZS52YWxpZGF0aW9uLmludmFsaWRDb3VudH0gaW52YWxpZCAvICR7cmVzcG9uc2UudmFsaWRhdGlvbi5kdXBsaWNhdGVzUmVtb3ZlZH0gZHVwbGljYXRlcyByZW1vdmVkYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFNob3cgdmFsaWRhdGlvbiBlcnJvcnMgaWYgYW55XG4gICAgICBpZiAocmVzcG9uc2UuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLndhcm5pbmcoYFxcbuKaoO+4jyAgVmFsaWRhdGlvbiBlcnJvcnM6YCkpO1xuICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiByZXNwb25zZS5lcnJvcnMuc2xpY2UoMCwgNSkpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgIFJvdyAke2Vyci5yb3d9OiAke2Vyci5waG9uZX0gLSAke2Vyci5lcnJvcn1gKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNNb3JlRXJyb3JzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICBgICAgLi4uIGFuZCAke3Jlc3BvbnNlLnZhbGlkYXRpb24uaW52YWxpZENvdW50IC0gNX0gbW9yZSBlcnJvcnNgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS5yZWNpcGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBlcnJvcihcIk5vIHZhbGlkIHJlY2lwaWVudHMgZm91bmQgaW4gQ1NWXCIpO1xuICAgICAgICB0aGlzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IHNoYXJlZCB0ZXh0IGlmIHByb3ZpZGVkXG4gICAgICBsZXQgbWVzc2FnZXMgPSByZXNwb25zZS5yZWNpcGllbnRzO1xuICAgICAgaWYgKGZsYWdzLnRleHQpIHtcbiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcy5tYXAoKHIpID0+ICh7XG4gICAgICAgICAgdG86IHIudG8sXG4gICAgICAgICAgdGV4dDogci50ZXh0IHx8IGZsYWdzLnRleHQsXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgYWxsIG1lc3NhZ2VzIGhhdmUgdGV4dFxuICAgICAgY29uc3QgbWlzc2luZ1RleHQgPSBtZXNzYWdlcy5maWx0ZXIoKG0pID0+ICFtLnRleHQ/LnRyaW0oKSk7XG4gICAgICBpZiAobWlzc2luZ1RleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBgJHttaXNzaW5nVGV4dC5sZW5ndGh9IHJlY2lwaWVudHMgbWlzc2luZyBtZXNzYWdlIHRleHQuIFVzZSAtLXRleHQgdG8gcHJvdmlkZSBhIGRlZmF1bHQuYCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgIFwiXFxuQ1NWIHNob3VsZCBoYXZlIGNvbHVtbnM6IHBob25lLG1lc3NhZ2UgT1IgdXNlIC0tdGV4dCBmbGFnXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZWVkIHdpdGggcHJldmlldyBvciBzZW5kXG4gICAgICBhd2FpdCB0aGlzLnByZXZpZXdPclNlbmQoXG4gICAgICAgIG1lc3NhZ2VzIGFzIEFycmF5PHsgdG86IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+LFxuICAgICAgICBmbGFncyxcbiAgICAgICAgcmVzcG9uc2UudXBsb2FkLmlkLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNwaW4uc3RvcCgpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2aWV3IG9yIHNlbmQgdGhlIGJhdGNoXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByZXZpZXdPclNlbmQoXG4gICAgbWVzc2FnZXM6IEFycmF5PHsgdG86IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+LFxuICAgIGZsYWdzOiB7IGZyb20/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmc7IFwiZHJ5LXJ1blwiPzogYm9vbGVhbiB9LFxuICAgIHVwbG9hZElkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDaGVjayBiYXRjaCBzaXplXG4gICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA+IDEwMDApIHtcbiAgICAgIGVycm9yKFwiQmF0Y2ggc2l6ZSBjYW5ub3QgZXhjZWVkIDEwMDAgbWVzc2FnZXNcIiwge1xuICAgICAgICBoaW50OiBcIlNwbGl0IHlvdXIgbWVzc2FnZXMgaW50byBzbWFsbGVyIGJhdGNoZXNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkcnktcnVuIG1vZGVcbiAgICBpZiAoZmxhZ3NbXCJkcnktcnVuXCJdKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93UHJldmlldyhtZXNzYWdlcywgZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIGJhdGNoXG4gICAgY29uc3Qgc3BpbiA9IHNwaW5uZXIoYFNlbmRpbmcgJHttZXNzYWdlcy5sZW5ndGh9IG1lc3NhZ2VzLi4uYCk7XG4gICAgc3Bpbi5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8QmF0Y2hSZXNwb25zZT4oXG4gICAgICAgIFwiL2FwaS92MS9tZXNzYWdlcy9iYXRjaFwiLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgICAgbWVzc2FnZVR5cGU6IGZsYWdzLnR5cGUsXG4gICAgICAgICAgLi4uKGZsYWdzLmZyb20gJiYgeyBmcm9tOiBmbGFncy5mcm9tIH0pLFxuICAgICAgICAgIC4uLih1cGxvYWRJZCAmJiB7IHVwbG9hZElkIH0pLCAvLyBMaW5rIHRvIGZpbGUgdXBsb2FkIGZvciBhdWRpdCB0cmFpbFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgc3Bpbi5zdG9wKCk7XG5cbiAgICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHN1Y2Nlc3MgbGV2ZWxcbiAgICAgIGNvbnN0IGFsbFN1Y2NlZWRlZCA9IHJlc3BvbnNlLmZhaWxlZCA9PT0gMDtcbiAgICAgIGNvbnN0IGFsbEZhaWxlZCA9IHJlc3BvbnNlLnNlbnQgPT09IDAgJiYgcmVzcG9uc2UuZmFpbGVkID4gMDtcbiAgICAgIGNvbnN0IHBhcnRpYWxTdWNjZXNzID0gcmVzcG9uc2Uuc2VudCA+IDAgJiYgcmVzcG9uc2UuZmFpbGVkID4gMDtcblxuICAgICAgaWYgKGFsbFN1Y2NlZWRlZCkge1xuICAgICAgICBzdWNjZXNzKFwiQmF0Y2ggc2VudCBzdWNjZXNzZnVsbHlcIiwge1xuICAgICAgICAgIFwiQmF0Y2ggSURcIjogcmVzcG9uc2UuYmF0Y2hJZCxcbiAgICAgICAgICBUb3RhbDogcmVzcG9uc2UudG90YWwsXG4gICAgICAgICAgU2VudDogY29sb3JzLnN1Y2Nlc3MoU3RyaW5nKHJlc3BvbnNlLnNlbnQpKSxcbiAgICAgICAgICBcIkNyZWRpdHMgVXNlZFwiOiByZXNwb25zZS5jcmVkaXRzVXNlZCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFsbEZhaWxlZCkge1xuICAgICAgICBlcnJvcihcIkJhdGNoIGZhaWxlZFwiLCB7XG4gICAgICAgICAgaGludDogYEFsbCAke3Jlc3BvbnNlLmZhaWxlZH0gbWVzc2FnZXMgZmFpbGVkIHRvIHNlbmRgLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShgICBCYXRjaCBJRDogJHtyZXNwb25zZS5iYXRjaElkfWApKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShgICBDcmVkaXRzIFJlZnVuZGVkOiAke3Jlc3BvbnNlLmNyZWRpdHNSZWZ1bmRlZH1gKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydGlhbFN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLndhcm5pbmcoXCJcXG7imqDvuI8gIEJhdGNoIGNvbXBsZXRlZCB3aXRoIGVycm9yc1xcblwiKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIEJhdGNoIElEOiAgICAgICAgICR7cmVzcG9uc2UuYmF0Y2hJZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgVG90YWw6ICAgICAgICAgICAgJHtyZXNwb25zZS50b3RhbH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgU2VudDogICAgICAgICAgICAgJHtjb2xvcnMuc3VjY2VzcyhTdHJpbmcocmVzcG9uc2Uuc2VudCkpfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAgIEZhaWxlZDogICAgICAgICAgICR7Y29sb3JzLmVycm9yKFN0cmluZyhyZXNwb25zZS5mYWlsZWQpKX1gLFxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBDcmVkaXRzIFVzZWQ6ICAgICAke3Jlc3BvbnNlLmNyZWRpdHNVc2VkfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBDcmVkaXRzIFJlZnVuZGVkOiAke3Jlc3BvbnNlLmNyZWRpdHNSZWZ1bmRlZH1gKTtcblxuICAgICAgICAvLyBTaG93IGZhaWxlZCBtZXNzYWdlcyBpZiBhdmFpbGFibGVcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgY29uc3QgZmFpbGVkTXNncyA9IHJlc3BvbnNlLm1lc3NhZ2VzLmZpbHRlcihcbiAgICAgICAgICAgIChtKSA9PiBtLnN0YXR1cyA9PT0gXCJmYWlsZWRcIixcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmYWlsZWRNc2dzLmxlbmd0aCA+IDAgJiYgZmFpbGVkTXNncy5sZW5ndGggPD0gNSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIlxcbiAgRmFpbGVkIG1lc3NhZ2VzOlwiKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBmYWlsZWRNc2dzKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgICAke21zZy50b306ICR7bXNnLmVycm9yIHx8IFwiVW5rbm93biBlcnJvclwifWApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZmFpbGVkTXNncy5sZW5ndGggPiA1KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgICAgICBgXFxuICAke2ZhaWxlZE1zZ3MubGVuZ3RofSBtZXNzYWdlcyBmYWlsZWQuIFVzZSAtLWpzb24gZm9yIGRldGFpbHMuYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzcGluLnN0b3AoKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBiYXRjaCBwcmV2aWV3IChkcnktcnVuIG1vZGUpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNob3dQcmV2aWV3KFxuICAgIG1lc3NhZ2VzOiBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9PixcbiAgICBmbGFnczogeyB0eXBlPzogc3RyaW5nIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiQW5hbHl6aW5nIGJhdGNoLi4uXCIpLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJldmlldyA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PEJhdGNoUHJldmlld1Jlc3BvbnNlPihcbiAgICAgICAgXCIvYXBpL3YxL21lc3NhZ2VzL2JhdGNoL3ByZXZpZXdcIixcbiAgICAgICAgeyBtZXNzYWdlcywgbWVzc2FnZVR5cGU6IGZsYWdzLnR5cGUgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICAgIGpzb24ocHJldmlldyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBjb21wcmVoZW5zaXZlIHByZXZpZXdcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TiiBCYXRjaCBQcmV2aWV3IChEcnkgUnVuKVxcblwiKSk7XG5cbiAgICAgIC8vIFN1bW1hcnkgdGFibGVcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCLilIBcIi5yZXBlYXQoNTApKSk7XG4gICAgICBjb25zb2xlLmxvZyhgVG90YWwgbWVzc2FnZXM6ICAgICAke3ByZXZpZXcudG90YWx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFNlbmRhYmxlOiAgICAgICAgICAgJHtjb2xvcnMuc3VjY2VzcyhTdHJpbmcocHJldmlldy5zZW5kYWJsZSkpfWAsXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBCbG9ja2VkOiAgICAgICAgICAgICR7cHJldmlldy5ibG9ja2VkID4gMCA/IGNvbG9ycy5lcnJvcihTdHJpbmcocHJldmlldy5ibG9ja2VkKSkgOiBcIjBcIn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGBEdXBsaWNhdGVzIHJlbW92ZWQ6ICR7cHJldmlldy5kdXBsaWNhdGVzfWApO1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIuKUgFwiLnJlcGVhdCg1MCkpKTtcblxuICAgICAgLy8gQ3JlZGl0c1xuICAgICAgY29uc29sZS5sb2coYFxcbkNyZWRpdHMgbmVlZGVkOiAgICAgJHtwcmV2aWV3LmNyZWRpdHNOZWVkZWR9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgWW91ciBiYWxhbmNlOiAgICAgICAke3ByZXZpZXcuY3JlZGl0QmFsYW5jZX1gKTtcbiAgICAgIGlmICghcHJldmlldy5oYXNTdWZmaWNpZW50Q3JlZGl0cykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBjb2xvcnMuZXJyb3IoXG4gICAgICAgICAgICBg4pqg77iPICBJbnN1ZmZpY2llbnQgY3JlZGl0cyEgTmVlZCAke3ByZXZpZXcuY3JlZGl0c05lZWRlZCAtIHByZXZpZXcuY3JlZGl0QmFsYW5jZX0gbW9yZS5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFjY2VzcyBpbmZvXG4gICAgICBjb25zb2xlLmxvZyhgXFxuQVBJIEtleSB0eXBlOiAgICAgICAke3ByZXZpZXcua2V5VHlwZS50b1VwcGVyQ2FzZSgpfWApO1xuICAgICAgY29uc29sZS5sb2coYFdyaXRlIGFjY2VzczogICAgICAgJHtwcmV2aWV3Lmhhc1dyaXRlU2NvcGUgPyBcIuKck1wiIDogXCLinJdcIn1gKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgRG9tZXN0aWMgKFVTL0NBKTogICAke3ByZXZpZXcubWVzc2FnaW5nUHJvZmlsZS5jYW5TZW5kRG9tZXN0aWMgPyBcIuKck1wiIDogXCLinJdcIn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgSW50ZXJuYXRpb25hbDogICAgICAke3ByZXZpZXcubWVzc2FnaW5nUHJvZmlsZS5jYW5TZW5kSW50ZXJuYXRpb25hbCA/IFwi4pyTXCIgOiBcIuKcl1wifWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb3VudHJ5IGJyZWFrZG93blxuICAgICAgY29uc3QgY291bnRyaWVzID0gT2JqZWN0LmVudHJpZXMocHJldmlldy5ieUNvdW50cnkpO1xuICAgICAgaWYgKGNvdW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TjSBCeSBDb3VudHJ5OlxcblwiKSk7XG4gICAgICAgIGZvciAoY29uc3QgW2NvdW50cnksIGRhdGFdIG9mIGNvdW50cmllcykge1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGRhdGEuYWxsb3dlZCA/IGNvbG9ycy5zdWNjZXNzKFwi4pyTXCIpIDogY29sb3JzLmVycm9yKFwi4pyXXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCAgJHtzdGF0dXN9ICR7Y291bnRyeX06ICR7ZGF0YS5jb3VudH0gbXNncywgJHtkYXRhLmNyZWRpdHN9IGNyZWRpdHMgKCR7ZGF0YS50aWVyfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFkYXRhLmFsbG93ZWQgJiYgZGF0YS5ibG9ja2VkUmVhc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGAgICAgIOKUlOKUgCAke2RhdGEuYmxvY2tlZFJlYXNvbn1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENvbXBsaWFuY2UgY2hlY2sgcmVzdWx0c1xuICAgICAgaWYgKHByZXZpZXcuY29tcGxpYW5jZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIlxcbvCfm6HvuI8gIENvbXBsaWFuY2UgQ2hlY2s6XFxuXCIpKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgTWVzc2FnZSBUeXBlOiAgICAgICR7cHJldmlldy5jb21wbGlhbmNlLm1lc3NhZ2VUeXBlLnRvVXBwZXJDYXNlKCl9YCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLnNoYWZ0QmxvY2tlZCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5lcnJvcihcbiAgICAgICAgICAgICAgYCAgU0hBRlQgQmxvY2tlZDogICAgICR7cHJldmlldy5jb21wbGlhbmNlLnNoYWZ0QmxvY2tlZH0gbWVzc2FnZXNgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGZvciAoY29uc3QgbXNnIG9mIHByZXZpZXcuY29tcGxpYW5jZS5zaGFmdEJsb2NrZWRNZXNzYWdlcy5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAzLFxuICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICAgIGAgICAgIOKUlOKUgCAke21zZy50b306ICR7bXNnLmNhdGVnb3J5fSAoJHttc2cubWF0Y2hlZFRlcm1zLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmV2aWV3LmNvbXBsaWFuY2Uuc2hhZnRCbG9ja2VkTWVzc2FnZXMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgICAgICAgYCAgICAgLi4uIGFuZCAke3ByZXZpZXcuY29tcGxpYW5jZS5zaGFmdEJsb2NrZWRNZXNzYWdlcy5sZW5ndGggLSAzfSBtb3JlYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY29sb3JzLnN1Y2Nlc3MoXG4gICAgICAgICAgICAgIFwiICBTSEFGVCBDaGVjazogICAgICAg4pyTIEFsbCBtZXNzYWdlcyBwYXNzIGNvbnRlbnQgZmlsdGVyXCIsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLm1lc3NhZ2VUeXBlID09PSBcIm1hcmtldGluZ1wiKSB7XG4gICAgICAgICAgaWYgKHByZXZpZXcuY29tcGxpYW5jZS5xdWlldEhvdXJzUmVzY2hlZHVsZWQgPiAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgY29sb3JzLndhcm5pbmcoXG4gICAgICAgICAgICAgICAgYCAgUXVpZXQgSG91cnM6ICAgICAgICR7cHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNSZXNjaGVkdWxlZH0gbWVzc2FnZXMgd2lsbCBiZSByZXNjaGVkdWxlZGAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBtc2cgb2YgcHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXMuc2xpY2UoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDMsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRUaW1lID0gbXNnLm5leHRBbGxvd2VkVGltZVxuICAgICAgICAgICAgICAgID8gbmV3IERhdGUobXNnLm5leHRBbGxvd2VkVGltZSkudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICAgICAgICAgIDogXCJuZXh0IGF2YWlsYWJsZSB3aW5kb3dcIjtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgICAgICAgIGAgICAgIOKUlOKUgCAke21zZy50b306ICR7bXNnLnJlY2lwaWVudFRpbWV6b25lfSDihpIgJHtuZXh0VGltZX1gLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICAgICAgYCAgICAgLi4uIGFuZCAke3ByZXZpZXcuY29tcGxpYW5jZS5xdWlldEhvdXJzQmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCAtIDN9IG1vcmVgLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBjb2xvcnMuc3VjY2VzcyhcbiAgICAgICAgICAgICAgICBcIiAgUXVpZXQgSG91cnM6ICAgICAgIOKckyBBbGwgcmVjaXBpZW50cyB3aXRoaW4gYWxsb3dlZCBob3Vyc1wiLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjb2xvcnMuZGltKFwiICBRdWlldCBIb3VyczogICAgICAgQnlwYXNzZWQgKHRyYW5zYWN0aW9uYWwgbWVzc2FnZSlcIiksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBXYXJuaW5nc1xuICAgICAgaWYgKHByZXZpZXcud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMud2FybmluZyhcIlxcbuKaoO+4jyAgV2FybmluZ3M6XCIpKTtcbiAgICAgICAgZm9yIChjb25zdCB3IG9mIHByZXZpZXcud2FybmluZ3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAg4oCiICR7d31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCbG9ja2VkIG1lc3NhZ2VzIChmaXJzdCA1KVxuICAgICAgaWYgKHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmVycm9yKFxuICAgICAgICAgICAgYFxcbuKdjCBCbG9ja2VkIE1lc3NhZ2VzICgke3ByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aH0gdG90YWwpOmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLnNsaWNlKDAsIDUpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgICR7Yi50b306ICR7Yi5yZWFzb259YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgIC4uLiBhbmQgJHtwcmV2aWV3LmJsb2NrZWRNZXNzYWdlcy5sZW5ndGggLSA1fSBtb3JlYCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJcXG5cIiArIGNvbG9ycy5kaW0oXCJObyBtZXNzYWdlcyB3ZXJlIHNlbnQuIFJlbW92ZSAtLWRyeS1ydW4gdG8gc2VuZC5cIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3Bpbi5zdG9wKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBieXRlcyB0byBodW1hbiByZWFkYWJsZSBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0Qnl0ZXMoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYDtcbiAgICByZXR1cm4gYCR7KGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
|
|
436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvc21zL2JhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixJQUFJLEVBQ0osVUFBVSxHQUNYLE1BQU0scUJBQXFCLENBQUM7QUE2RzdCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sUUFBUyxTQUFRLG9CQUFvQjtJQUN4RCxNQUFNLENBQUMsV0FBVyxHQUNoQixnRUFBZ0UsQ0FBQztJQUVuRSxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLG1EQUFtRDtRQUNuRCx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLDZEQUE2RDtRQUM3RCx1RkFBdUY7UUFDdkYsbURBQW1EO1FBQ25ELHVDQUF1QztLQUN4QyxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSx5REFBeUQ7WUFDdEUsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUM7U0FDdEMsQ0FBQztRQUNGLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2YsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsd0RBQXdEO1lBQ3JFLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDO1NBQ3hDLENBQUM7UUFDRixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFDVCxnRkFBZ0Y7U0FDbkYsQ0FBQztRQUNGLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2pCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLDRDQUE0QztTQUMxRCxDQUFDO1FBQ0YsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUNULHlGQUF5RjtZQUMzRixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUM7UUFDRixTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFDVCx1RkFBdUY7WUFDekYsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBQ0YsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbEIsV0FBVyxFQUFFLHNEQUFzRDtZQUNuRSxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQztTQUNyQyxDQUFDO1FBQ0YsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDckIsV0FBVyxFQUFFLGtDQUFrQztZQUMvQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztZQUNsQyxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdDLDRCQUE0QjtRQUM1QixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCx5REFBeUQ7UUFDekQsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDYixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsb0NBQW9DO1FBQ3BDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFdBQVc7UUFDdkIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFMUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUNsQyx3QkFBd0IsRUFDeEIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQ2QsQ0FBQztZQUVGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVaLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNmLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQztnQkFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO2dCQUN4RSxPQUFPO1lBQ1QsQ0FBQztZQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7WUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXhDLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUVqRSxPQUFPLENBQUMsR0FBRyxDQUNULEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQzVELENBQUM7Z0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUNSLE1BQU0sSUFBSSxNQUFNLElBQUksTUFBTSxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsSUFBSSxDQUFDLHVCQUF1QixNQUFNLEVBQUUsQ0FDMUYsQ0FDRixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQUMsaURBQWlELENBQUMsQ0FDOUQsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFVBQVUsQ0FDdEIsUUFBZ0IsRUFDaEIsS0FBMkU7UUFFM0UsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUNsQyx3QkFBd0IsUUFBUSxFQUFFLENBQ25DLENBQUM7WUFFRixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFWixPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FDaEUsQ0FBQztZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEdBQUcsQ0FDUixLQUFLLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSwwQkFBMEIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLE9BQU8sQ0FDbEcsQ0FDRixDQUFDO1lBRUYsZ0NBQWdDO1lBQ2hDLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDbkMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzlCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtvQkFDUixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSTtpQkFDM0IsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1lBRUQsa0NBQWtDO1lBQ2xDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsS0FBSyxDQUNILEdBQUcsV0FBVyxDQUFDLE1BQU0sb0VBQW9FLENBQzFGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNmLENBQUM7WUFFRCwrQkFBK0I7WUFDL0IsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUN0QixRQUErQyxFQUMvQyxLQUFLLEVBQ0wsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ25CLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsb0JBQW9CLENBQUMsS0FNbEM7UUFDQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLEVBQUUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFO1lBQy9DLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSztTQUNsQixDQUFDLENBQUMsQ0FBQztRQUVKLHlCQUF5QjtRQUN6QixLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUN2QyxJQUFJLEVBQUUsZ0NBQWdDO2lCQUN2QyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBTTNCO1FBQ0MsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUssQ0FBQztRQUU3QixvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxtQkFBbUIsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQy9CLEtBQUssQ0FBQyw4QkFBOEIsRUFBRTtnQkFDcEMsSUFBSSxFQUFFLDZEQUE2RDthQUNwRSxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztRQUVELFlBQVk7UUFDWixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLDhCQUE4QjtRQUM5QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxLQUFLLENBQUMsMEJBQTBCLEVBQUU7Z0JBQ2hDLElBQUksRUFBRSxtQ0FBbUM7YUFDMUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsYUFBYSxRQUFRLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpELElBQUksQ0FBQztZQUNILGdDQUFnQztZQUNoQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQ3pDLHVCQUF1QixFQUN2QixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUMzQyxDQUFDO1lBRUYsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRVosc0JBQXNCO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RCxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQ1IsS0FBSyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsWUFBWSxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksY0FBYyxRQUFRLENBQUMsVUFBVSxDQUFDLGlCQUFpQixxQkFBcUIsQ0FDeEosQ0FDRixDQUFDO1lBRUYsZ0NBQWdDO1lBQ2hDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDN0QsQ0FBQztnQkFDSixDQUFDO2dCQUNELElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUMzQixPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQ1IsY0FBYyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxDQUFDLGNBQWMsQ0FDakUsQ0FDRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixDQUFDO1lBRUQsZ0NBQWdDO1lBQ2hDLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDbkMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzlCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtvQkFDUixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSTtpQkFDM0IsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1lBRUQsa0NBQWtDO1lBQ2xDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsS0FBSyxDQUNILEdBQUcsV0FBVyxDQUFDLE1BQU0sb0VBQW9FLENBQzFGLENBQUM7Z0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUNSLDZEQUE2RCxDQUM5RCxDQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNmLENBQUM7WUFFRCwrQkFBK0I7WUFDL0IsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUN0QixRQUErQyxFQUMvQyxLQUFLLEVBQ0wsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ25CLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxhQUFhLENBQ3pCLFFBQTZDLEVBQzdDLEtBQTRELEVBQzVELFFBQWlCO1FBRWpCLG1CQUFtQjtRQUNuQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLHdDQUF3QyxFQUFFO2dCQUM5QyxJQUFJLEVBQUUsMENBQTBDO2FBQ2pELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLFFBQVEsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUViLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDbkMsd0JBQXdCLEVBQ3hCO2dCQUNFLFFBQVE7Z0JBQ1IsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUN2QixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZDLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLHNDQUFzQzthQUN0RSxDQUNGLENBQUM7WUFFRixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFWixJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDZixPQUFPO1lBQ1QsQ0FBQztZQUVELDBCQUEwQjtZQUMxQixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM3RCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUVoRSxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixPQUFPLENBQUMseUJBQXlCLEVBQUU7b0JBQ2pDLFVBQVUsRUFBRSxRQUFRLENBQUMsT0FBTztvQkFDNUIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNyQixJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzQyxjQUFjLEVBQUUsUUFBUSxDQUFDLFdBQVc7aUJBQ3JDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxDQUFDLGNBQWMsRUFBRTtvQkFDcEIsSUFBSSxFQUFFLE9BQU8sUUFBUSxDQUFDLE1BQU0sMEJBQTBCO2lCQUN2RCxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FDOUQsQ0FBQztZQUNKLENBQUM7aUJBQU0sSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPLENBQUMsR0FBRyxDQUNULHVCQUF1QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUMvRCxDQUFDO2dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQ1QsdUJBQXVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQy9ELENBQUM7Z0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO2dCQUUvRCxvQ0FBb0M7Z0JBQ3BDLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN0QixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDekMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUM3QixDQUFDO29CQUNGLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQzt3QkFDaEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQzs0QkFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDLENBQzdELENBQUM7d0JBQ0osQ0FBQztvQkFDSCxDQUFDO3lCQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDakMsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUNSLE9BQU8sVUFBVSxDQUFDLE1BQU0sMkNBQTJDLENBQ3BFLENBQ0YsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsV0FBVyxDQUN2QixRQUE2QyxFQUM3QyxLQUF3QjtRQUV4QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVuRCxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQ2xDLGdDQUFnQyxFQUNoQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUN0QyxDQUFDO1lBRUYsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRVosSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2QsT0FBTztZQUNULENBQUM7WUFFRCw2QkFBNkI7WUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQztZQUUzRCxnQkFBZ0I7WUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQ1QsdUJBQXVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQ2xFLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUNULHVCQUF1QixPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUMzRixDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXhDLFVBQVU7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUM5RCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEtBQUssQ0FDVixrQ0FBa0MsT0FBTyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxRQUFRLENBQ3hGLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFFRCxjQUFjO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sQ0FBQyxHQUFHLENBQ1QsdUJBQXVCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQzlFLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUNULHVCQUF1QixPQUFPLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQ25GLENBQUM7WUFFRixvQkFBb0I7WUFDcEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3RFLE9BQU8sQ0FBQyxHQUFHLENBQ1QsS0FBSyxNQUFNLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxLQUFLLFVBQVUsSUFBSSxDQUFDLE9BQU8sYUFBYSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQ3JGLENBQUM7b0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsMkJBQTJCO1lBQzNCLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxPQUFPLENBQUMsR0FBRyxDQUNULHdCQUF3QixPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUN2RSxDQUFDO2dCQUVGLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEtBQUssQ0FDVix3QkFBd0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLFdBQVcsQ0FDbkUsQ0FDRixDQUFDO29CQUNGLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQzdELENBQUMsRUFDRCxDQUFDLENBQ0YsRUFBRSxDQUFDO3dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEdBQUcsQ0FDUixXQUFXLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUN0RSxDQUNGLENBQUM7b0JBQ0osQ0FBQztvQkFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUN2RCxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQ1IsZ0JBQWdCLE9BQU8sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUMxRSxDQUNGLENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsT0FBTyxDQUNaLHlEQUF5RCxDQUMxRCxDQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUNuRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ2pELE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLE9BQU8sQ0FDWix3QkFBd0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsK0JBQStCLENBQ2hHLENBQ0YsQ0FBQzt3QkFDRixLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUNsRSxDQUFDLEVBQ0QsQ0FBQyxDQUNGLEVBQUUsQ0FBQzs0QkFDRixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsZUFBZTtnQ0FDbEMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxjQUFjLEVBQUU7Z0NBQ2hELENBQUMsQ0FBQyx1QkFBdUIsQ0FBQzs0QkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxNQUFNLENBQUMsR0FBRyxDQUNSLFdBQVcsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsaUJBQWlCLE1BQU0sUUFBUSxFQUFFLENBQzVELENBQ0YsQ0FBQzt3QkFDSixDQUFDO3dCQUNELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7NEJBQzVELE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEdBQUcsQ0FDUixnQkFBZ0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQy9FLENBQ0YsQ0FBQzt3QkFDSixDQUFDO29CQUNILENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxPQUFPLENBQ1osNERBQTRELENBQzdELENBQ0YsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FDcEUsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELFdBQVc7WUFDWCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzNCLENBQUM7WUFDSCxDQUFDO1lBRUQsNkJBQTZCO1lBQzdCLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEtBQUssQ0FDVix5QkFBeUIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLFVBQVUsQ0FDbEUsQ0FDRixDQUFDO2dCQUNGLEtBQUssTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO2dCQUNELElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQ3BFLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLENBQUMsR0FBRyxDQUNULElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxDQUFDLENBQ3RFLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVcsQ0FBQyxLQUFhO1FBQy9CLElBQUksS0FBSyxHQUFHLElBQUk7WUFBRSxPQUFPLEdBQUcsS0FBSyxJQUFJLENBQUM7UUFDdEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUk7WUFBRSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgc3VjY2VzcyxcbiAgZXJyb3IsXG4gIHNwaW5uZXIsXG4gIGNvbG9ycyxcbiAganNvbixcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIEJhdGNoVXBsb2FkUmVzcG9uc2Uge1xuICB1cGxvYWQ6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgc2l6ZTogbnVtYmVyO1xuICAgIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB9O1xuICB2YWxpZGF0aW9uOiB7XG4gICAgdG90YWxSb3dzOiBudW1iZXI7XG4gICAgdmFsaWRDb3VudDogbnVtYmVyO1xuICAgIGludmFsaWRDb3VudDogbnVtYmVyO1xuICAgIGR1cGxpY2F0ZXNSZW1vdmVkOiBudW1iZXI7XG4gICAgaGFzSGVhZGVyOiBib29sZWFuO1xuICB9O1xuICByZWNpcGllbnRzOiBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ/OiBzdHJpbmcgfT47XG4gIGVycm9yczogQXJyYXk8eyByb3c6IG51bWJlcjsgcGhvbmU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9PjtcbiAgaGFzTW9yZUVycm9yczogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEJhdGNoSGlzdG9yeVJlc3BvbnNlIHtcbiAgdXBsb2FkczogQXJyYXk8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBzaXplOiBudW1iZXI7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIHRvdGFsUm93czogbnVtYmVyO1xuICAgICAgdmFsaWRDb3VudDogbnVtYmVyO1xuICAgICAgaW52YWxpZENvdW50OiBudW1iZXI7XG4gICAgICBzb3VyY2U/OiBzdHJpbmc7XG4gICAgfTtcbiAgfT47XG59XG5cbmludGVyZmFjZSBCYXRjaFJlc3BvbnNlIHtcbiAgYmF0Y2hJZDogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBzZW50OiBudW1iZXI7XG4gIHF1ZXVlZDogbnVtYmVyO1xuICBmYWlsZWQ6IG51bWJlcjtcbiAgY3JlZGl0c1VzZWQ6IG51bWJlcjtcbiAgY3JlZGl0c1JlZnVuZGVkOiBudW1iZXI7XG4gIHN0YXR1czogc3RyaW5nO1xuICBtZXNzYWdlcz86IEFycmF5PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdG86IHN0cmluZztcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfT47XG59XG5cbmludGVyZmFjZSBCYXRjaFByZXZpZXdSZXNwb25zZSB7XG4gIHRvdGFsOiBudW1iZXI7XG4gIHNlbmRhYmxlOiBudW1iZXI7XG4gIGJsb2NrZWQ6IG51bWJlcjtcbiAgZHVwbGljYXRlczogbnVtYmVyO1xuICBjcmVkaXRzTmVlZGVkOiBudW1iZXI7XG4gIGNyZWRpdEJhbGFuY2U6IG51bWJlcjtcbiAgaGFzU3VmZmljaWVudENyZWRpdHM6IGJvb2xlYW47XG4gIGtleVR5cGU6IFwidGVzdFwiIHwgXCJsaXZlXCI7XG4gIGtleVNjb3Blczogc3RyaW5nW107XG4gIGhhc1dyaXRlU2NvcGU6IGJvb2xlYW47XG4gIG1lc3NhZ2luZ1Byb2ZpbGU6IHtcbiAgICBpZDogc3RyaW5nIHwgbnVsbDtcbiAgICBjYW5TZW5kRG9tZXN0aWM6IGJvb2xlYW47XG4gICAgY2FuU2VuZEludGVybmF0aW9uYWw6IGJvb2xlYW47XG4gICAgdmVyaWZpY2F0aW9uU3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuICAgIHZlcmlmaWNhdGlvblR5cGU6IHN0cmluZyB8IG51bGw7XG4gIH07XG4gIGJ5Q291bnRyeTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBjb3VudDogbnVtYmVyO1xuICAgICAgY3JlZGl0czogbnVtYmVyO1xuICAgICAgdGllcjogc3RyaW5nO1xuICAgICAgYWxsb3dlZDogYm9vbGVhbjtcbiAgICAgIGJsb2NrZWRSZWFzb24/OiBzdHJpbmc7XG4gICAgfVxuICA+O1xuICBibG9ja2VkTWVzc2FnZXM6IEFycmF5PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHRvOiBzdHJpbmc7XG4gICAgcmVhc29uOiBzdHJpbmc7XG4gIH0+O1xuICBjb21wbGlhbmNlOiB7XG4gICAgbWVzc2FnZVR5cGU6IFwibWFya2V0aW5nXCIgfCBcInRyYW5zYWN0aW9uYWxcIjtcbiAgICBzaGFmdEJsb2NrZWQ6IG51bWJlcjtcbiAgICBxdWlldEhvdXJzQmxvY2tlZDogbnVtYmVyO1xuICAgIHF1aWV0SG91cnNSZXNjaGVkdWxlZDogbnVtYmVyO1xuICAgIHNoYWZ0QmxvY2tlZE1lc3NhZ2VzOiBBcnJheTx7XG4gICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgdG86IHN0cmluZztcbiAgICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgICBtYXRjaGVkVGVybXM6IHN0cmluZ1tdO1xuICAgIH0+O1xuICAgIHF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXM6IEFycmF5PHtcbiAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICB0bzogc3RyaW5nO1xuICAgICAgcmVjaXBpZW50VGltZXpvbmU6IHN0cmluZztcbiAgICAgIHJlY2lwaWVudExvY2FsVGltZTogc3RyaW5nO1xuICAgICAgbmV4dEFsbG93ZWRUaW1lPzogc3RyaW5nO1xuICAgIH0+O1xuICB9O1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNtc0JhdGNoIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiU2VuZCBiYXRjaCBTTVMgbWVzc2FnZXMgKHVwbG9hZHMgQ1NWIHRvIGNsb3VkIGZvciBhdWRpdCB0cmFpbClcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBzbXMgYmF0Y2ggLS1maWxlIHJlY2lwaWVudHMuY3N2XCIsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWZpbGUgcGhvbmVzLmNzdiAtLXRleHQgXCJIZWxsbyBldmVyeW9uZSFcIicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLXRvICsxNTU1MTIzNDU2NywrMTU1NTk4NzY1NDMgLS10ZXh0IFwiSGVsbG8hXCInLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSByZWNpcGllbnRzLmNzdiAtLWRyeS1ydW5cIixcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gc21zIGJhdGNoIC0tZmlsZSBwaG9uZXMuY3N2IC0tdGV4dCBcIkNvZGU6IDEyM1wiIC0tdHlwZSB0cmFuc2FjdGlvbmFsJyxcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLXJldXNlIGFiYzEyMy1kZWY0NTZcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHNtcyBiYXRjaCAtLWhpc3RvcnlcIixcbiAgXTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICAgIGZpbGU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIkZcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNTViBmaWxlIHdpdGggcGhvbmUgbnVtYmVycyAoYW5kIG9wdGlvbmFsIG1lc3NhZ2UgdGV4dClcIixcbiAgICAgIGV4Y2x1c2l2ZTogW1widG9cIiwgXCJyZXVzZVwiLCBcImhpc3RvcnlcIl0sXG4gICAgfSksXG4gICAgdG86IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbW1hLXNlcGFyYXRlZCByZWNpcGllbnQgcGhvbmUgbnVtYmVycyAoRS4xNjQgZm9ybWF0KVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXCJmaWxlXCIsIFwicmV1c2VcIiwgXCJoaXN0b3J5XCJdLFxuICAgIH0pLFxuICAgIHRleHQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm1cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk1lc3NhZ2UgdGV4dCAocmVxdWlyZWQgd2l0aCAtLXRvLCBvcHRpb25hbCB3aXRoIC0tZmlsZSBpZiBDU1YgaGFzIHRleHQgY29sdW1uKVwiLFxuICAgIH0pLFxuICAgIGZyb206IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImZcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNlbmRlciBJRCBvciBwaG9uZSBudW1iZXIgZm9yIGFsbCBtZXNzYWdlc1wiLFxuICAgIH0pLFxuICAgIHR5cGU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJNZXNzYWdlIHR5cGU6IG1hcmtldGluZyAoZGVmYXVsdCkgb3IgdHJhbnNhY3Rpb25hbC4gVHJhbnNhY3Rpb25hbCBieXBhc3NlcyBxdWlldCBob3Vycy5cIixcbiAgICAgIG9wdGlvbnM6IFtcIm1hcmtldGluZ1wiLCBcInRyYW5zYWN0aW9uYWxcIl0sXG4gICAgICBkZWZhdWx0OiBcIm1hcmtldGluZ1wiLFxuICAgIH0pLFxuICAgIFwiZHJ5LXJ1blwiOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGNoYXI6IFwiZFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUHJldmlldyBiYXRjaCB3aXRob3V0IHNlbmRpbmcgKHZhbGlkYXRlcyBhY2Nlc3MsIHNob3dzIGNvc3QgYW5kIGNvbXBsaWFuY2UgYnJlYWtkb3duKVwiLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSksXG4gICAgcmV1c2U6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSZS11c2UgYSBwcmV2aW91cyBiYXRjaCB1cGxvYWQgYnkgSUQgKHNlZSAtLWhpc3RvcnkpXCIsXG4gICAgICBleGNsdXNpdmU6IFtcImZpbGVcIiwgXCJ0b1wiLCBcImhpc3RvcnlcIl0sXG4gICAgfSksXG4gICAgaGlzdG9yeTogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBkZXNjcmlwdGlvbjogXCJTaG93IHJlY2VudCBiYXRjaCB1cGxvYWQgaGlzdG9yeVwiLFxuICAgICAgZXhjbHVzaXZlOiBbXCJmaWxlXCIsIFwidG9cIiwgXCJyZXVzZVwiXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0pLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFNtc0JhdGNoKTtcblxuICAgIC8vIEhhbmRsZSBoaXN0b3J5IHN1YmNvbW1hbmRcbiAgICBpZiAoZmxhZ3MuaGlzdG9yeSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd0hpc3RvcnkoKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcmV1c2Ugc3ViY29tbWFuZFxuICAgIGlmIChmbGFncy5yZXVzZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV1c2VCYXRjaChmbGFncy5yZXVzZSwgZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSAtLXRvIGZsYWcgKGlubGluZSByZWNpcGllbnRzLCBubyB1cGxvYWQgbmVlZGVkKVxuICAgIGlmIChmbGFncy50bykge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZElubGluZVJlY2lwaWVudHMoZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSAtLWZpbGUgZmxhZyAodXBsb2FkIHRvIFIyKVxuICAgIGlmIChmbGFncy5maWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRBbmRTZW5kKGZsYWdzKTtcbiAgICB9XG5cbiAgICBlcnJvcihcIkVpdGhlciAtLWZpbGUsIC0tdG8sIC0tcmV1c2UsIG9yIC0taGlzdG9yeSBpcyByZXF1aXJlZFwiKTtcbiAgICB0aGlzLmV4aXQoMSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBiYXRjaCB1cGxvYWQgaGlzdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaG93SGlzdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzcGluID0gc3Bpbm5lcihcIkZldGNoaW5nIGJhdGNoIGhpc3RvcnkuLi5cIikuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8QmF0Y2hIaXN0b3J5UmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvY2xpL2JhdGNoL2hpc3RvcnlcIixcbiAgICAgICAgeyBsaW1pdDogMTUgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICAgIGpzb24ocmVzcG9uc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS51cGxvYWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiXFxuTm8gYmF0Y2ggdXBsb2FkcyBmb3VuZC5cXG5cIikpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlVwbG9hZCBhIENTViBmaWxlIHdpdGg6IHNlbmRseSBzbXMgYmF0Y2ggLS1maWxlIHlvdXIuY3N2XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TgSBSZWNlbnQgQmF0Y2ggVXBsb2Fkc1xcblwiKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDgwKSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHVwbG9hZCBvZiByZXNwb25zZS51cGxvYWRzKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh1cGxvYWQuY3JlYXRlZEF0KS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5mb3JtYXRCeXRlcyh1cGxvYWQuc2l6ZSk7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHVwbG9hZC5tZXRhZGF0YT8uc291cmNlID09PSBcImNsaVwiID8gXCJDTElcIiA6IFwiV2ViXCI7XG5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCR7Y29sb3JzLmluZm8odXBsb2FkLmlkLnNsaWNlKDAsIDgpKX0gICR7dXBsb2FkLmZpbGVuYW1lfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgICBgICAgJHtkYXRlfSB8ICR7c2l6ZX0gfCAke3VwbG9hZC5tZXRhZGF0YT8udmFsaWRDb3VudCB8fCAwfSB2YWxpZCByZWNpcGllbnRzIHwgJHtzb3VyY2V9YCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDgwKSkpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXCJcXG5SZS11c2UgYSBiYXRjaDogc2VuZGx5IHNtcyBiYXRjaCAtLXJldXNlIDxpZD5cIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3Bpbi5zdG9wKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXVzZSBhIHByZXZpb3VzIGJhdGNoIHVwbG9hZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXVzZUJhdGNoKFxuICAgIHVwbG9hZElkOiBzdHJpbmcsXG4gICAgZmxhZ3M6IHsgdGV4dD86IHN0cmluZzsgZnJvbT86IHN0cmluZzsgdHlwZT86IHN0cmluZzsgXCJkcnktcnVuXCI/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiRmV0Y2hpbmcgYmF0Y2ggZGF0YS4uLlwiKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LmdldDxCYXRjaFVwbG9hZFJlc3BvbnNlPihcbiAgICAgICAgYC9hcGkvY2xpL2JhdGNoL3JldXNlLyR7dXBsb2FkSWR9YCxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLnN1Y2Nlc3MoYFxcbuKckyBMb2FkZWQgYmF0Y2g6ICR7cmVzcG9uc2UudXBsb2FkLmZpbGVuYW1lfWApLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgIGAgICR7cmVzcG9uc2UudmFsaWRhdGlvbi52YWxpZENvdW50fSB2YWxpZCByZWNpcGllbnRzIGZyb20gJHtyZXNwb25zZS52YWxpZGF0aW9uLnRvdGFsUm93c30gcm93c2AsXG4gICAgICAgICksXG4gICAgICApO1xuXG4gICAgICAvLyBBcHBseSBzaGFyZWQgdGV4dCBpZiBwcm92aWRlZFxuICAgICAgbGV0IG1lc3NhZ2VzID0gcmVzcG9uc2UucmVjaXBpZW50cztcbiAgICAgIGlmIChmbGFncy50ZXh0KSB7XG4gICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMubWFwKChyKSA9PiAoe1xuICAgICAgICAgIHRvOiByLnRvLFxuICAgICAgICAgIHRleHQ6IHIudGV4dCB8fCBmbGFncy50ZXh0LFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGFsbCBtZXNzYWdlcyBoYXZlIHRleHRcbiAgICAgIGNvbnN0IG1pc3NpbmdUZXh0ID0gbWVzc2FnZXMuZmlsdGVyKChtKSA9PiAhbS50ZXh0Py50cmltKCkpO1xuICAgICAgaWYgKG1pc3NpbmdUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgYCR7bWlzc2luZ1RleHQubGVuZ3RofSByZWNpcGllbnRzIG1pc3NpbmcgbWVzc2FnZSB0ZXh0LiBVc2UgLS10ZXh0IHRvIHByb3ZpZGUgYSBkZWZhdWx0LmAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VlZCB3aXRoIHByZXZpZXcgb3Igc2VuZFxuICAgICAgYXdhaXQgdGhpcy5wcmV2aWV3T3JTZW5kKFxuICAgICAgICBtZXNzYWdlcyBhcyBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9PixcbiAgICAgICAgZmxhZ3MsXG4gICAgICAgIHJlc3BvbnNlLnVwbG9hZC5pZCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzcGluLnN0b3AoKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCB0byBpbmxpbmUgcmVjaXBpZW50cyAoLS10byBmbGFnKVxuICAgKiBUaGlzIHBhdGggZG9lc24ndCB1cGxvYWQgdG8gUjIgc2luY2UgaXQncyBqdXN0IGEgZmV3IG51bWJlcnNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZElubGluZVJlY2lwaWVudHMoZmxhZ3M6IHtcbiAgICB0bz86IHN0cmluZztcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIGZyb20/OiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICBcImRyeS1ydW5cIj86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWZsYWdzLnRleHQpIHtcbiAgICAgIGVycm9yKFwiLS10ZXh0IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgLS10b1wiKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBwaG9uZXMgPSBmbGFncy50byEuc3BsaXQoXCIsXCIpLm1hcCgocCkgPT4gcC50cmltKCkpO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gcGhvbmVzLm1hcCgocGhvbmUpID0+ICh7XG4gICAgICB0bzogcGhvbmUuc3RhcnRzV2l0aChcIitcIikgPyBwaG9uZSA6IGArJHtwaG9uZX1gLFxuICAgICAgdGV4dDogZmxhZ3MudGV4dCEsXG4gICAgfSkpO1xuXG4gICAgLy8gVmFsaWRhdGUgcGhvbmUgbnVtYmVyc1xuICAgIGZvciAoY29uc3QgbXNnIG9mIG1lc3NhZ2VzKSB7XG4gICAgICBpZiAoIS9eXFwrWzEtOV1cXGR7MSwxNH0kLy50ZXN0KG1zZy50bykpIHtcbiAgICAgICAgZXJyb3IoYEludmFsaWQgcGhvbmUgbnVtYmVyOiAke21zZy50b31gLCB7XG4gICAgICAgICAgaGludDogXCJVc2UgRS4xNjQgZm9ybWF0OiArMTU1NTEyMzQ1NjdcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByZXZpZXdPclNlbmQobWVzc2FnZXMsIGZsYWdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgQ1NWIHRvIFIyIGFuZCBzZW5kXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVwbG9hZEFuZFNlbmQoZmxhZ3M6IHtcbiAgICBmaWxlPzogc3RyaW5nO1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgZnJvbT86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIFwiZHJ5LXJ1blwiPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gZmxhZ3MuZmlsZSE7XG5cbiAgICAvLyBDaGVjayBmaWxlIGV4aXN0c1xuICAgIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgIGVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtmaWxlUGF0aH1gKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWxlIGV4dGVuc2lvblxuICAgIGlmICghZmlsZVBhdGguZW5kc1dpdGgoXCIuY3N2XCIpKSB7XG4gICAgICBlcnJvcihcIk9ubHkgQ1NWIGZpbGVzIGFyZSBzdXBwb3J0ZWRcIiwge1xuICAgICAgICBoaW50OiBcIkNvbnZlcnQgeW91ciBmaWxlIHRvIENTViBmb3JtYXQgd2l0aCBjb2x1bW5zOiBwaG9uZSxtZXNzYWdlXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIGZpbGVcbiAgICBjb25zdCBidWZmZXIgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZVBhdGgpO1xuXG4gICAgLy8gQ2hlY2sgZmlsZSBzaXplICg1TUIgbGltaXQpXG4gICAgaWYgKGJ1ZmZlci5sZW5ndGggPiA1ICogMTAyNCAqIDEwMjQpIHtcbiAgICAgIGVycm9yKFwiRmlsZSB0b28gbGFyZ2UgKG1heCA1TUIpXCIsIHtcbiAgICAgICAgaGludDogXCJTcGxpdCB5b3VyIENTViBpbnRvIHNtYWxsZXIgZmlsZXNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKGBVcGxvYWRpbmcgJHtmaWxlbmFtZX0uLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVwbG9hZCB0byBSMiB2aWEgQ0xJIGVuZHBvaW50XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC51cGxvYWRGaWxlPEJhdGNoVXBsb2FkUmVzcG9uc2U+KFxuICAgICAgICBcIi9hcGkvY2xpL2JhdGNoL3VwbG9hZFwiLFxuICAgICAgICB7IGJ1ZmZlciwgZmlsZW5hbWUsIG1pbWV0eXBlOiBcInRleHQvY3N2XCIgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICAvLyBTaG93IHVwbG9hZCBzdW1tYXJ5XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuc3VjY2VzcyhgXFxu4pyTIFVwbG9hZGVkOiAke3Jlc3BvbnNlLnVwbG9hZC5maWxlbmFtZX1gKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGAgIFVwbG9hZCBJRDogJHtyZXNwb25zZS51cGxvYWQuaWR9YCkpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgYCAgJHtyZXNwb25zZS52YWxpZGF0aW9uLnZhbGlkQ291bnR9IHZhbGlkIC8gJHtyZXNwb25zZS52YWxpZGF0aW9uLmludmFsaWRDb3VudH0gaW52YWxpZCAvICR7cmVzcG9uc2UudmFsaWRhdGlvbi5kdXBsaWNhdGVzUmVtb3ZlZH0gZHVwbGljYXRlcyByZW1vdmVkYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFNob3cgdmFsaWRhdGlvbiBlcnJvcnMgaWYgYW55XG4gICAgICBpZiAocmVzcG9uc2UuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLndhcm5pbmcoYFxcbuKaoO+4jyAgVmFsaWRhdGlvbiBlcnJvcnM6YCkpO1xuICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiByZXNwb25zZS5lcnJvcnMuc2xpY2UoMCwgNSkpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgIFJvdyAke2Vyci5yb3d9OiAke2Vyci5waG9uZX0gLSAke2Vyci5lcnJvcn1gKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNNb3JlRXJyb3JzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICBgICAgLi4uIGFuZCAke3Jlc3BvbnNlLnZhbGlkYXRpb24uaW52YWxpZENvdW50IC0gNX0gbW9yZSBlcnJvcnNgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS5yZWNpcGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBlcnJvcihcIk5vIHZhbGlkIHJlY2lwaWVudHMgZm91bmQgaW4gQ1NWXCIpO1xuICAgICAgICB0aGlzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IHNoYXJlZCB0ZXh0IGlmIHByb3ZpZGVkXG4gICAgICBsZXQgbWVzc2FnZXMgPSByZXNwb25zZS5yZWNpcGllbnRzO1xuICAgICAgaWYgKGZsYWdzLnRleHQpIHtcbiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcy5tYXAoKHIpID0+ICh7XG4gICAgICAgICAgdG86IHIudG8sXG4gICAgICAgICAgdGV4dDogci50ZXh0IHx8IGZsYWdzLnRleHQsXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgYWxsIG1lc3NhZ2VzIGhhdmUgdGV4dFxuICAgICAgY29uc3QgbWlzc2luZ1RleHQgPSBtZXNzYWdlcy5maWx0ZXIoKG0pID0+ICFtLnRleHQ/LnRyaW0oKSk7XG4gICAgICBpZiAobWlzc2luZ1RleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBgJHttaXNzaW5nVGV4dC5sZW5ndGh9IHJlY2lwaWVudHMgbWlzc2luZyBtZXNzYWdlIHRleHQuIFVzZSAtLXRleHQgdG8gcHJvdmlkZSBhIGRlZmF1bHQuYCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgIFwiXFxuQ1NWIHNob3VsZCBoYXZlIGNvbHVtbnM6IHBob25lLG1lc3NhZ2UgT1IgdXNlIC0tdGV4dCBmbGFnXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZWVkIHdpdGggcHJldmlldyBvciBzZW5kXG4gICAgICBhd2FpdCB0aGlzLnByZXZpZXdPclNlbmQoXG4gICAgICAgIG1lc3NhZ2VzIGFzIEFycmF5PHsgdG86IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+LFxuICAgICAgICBmbGFncyxcbiAgICAgICAgcmVzcG9uc2UudXBsb2FkLmlkLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNwaW4uc3RvcCgpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2aWV3IG9yIHNlbmQgdGhlIGJhdGNoXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByZXZpZXdPclNlbmQoXG4gICAgbWVzc2FnZXM6IEFycmF5PHsgdG86IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+LFxuICAgIGZsYWdzOiB7IGZyb20/OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmc7IFwiZHJ5LXJ1blwiPzogYm9vbGVhbiB9LFxuICAgIHVwbG9hZElkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDaGVjayBiYXRjaCBzaXplXG4gICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA+IDEwMDApIHtcbiAgICAgIGVycm9yKFwiQmF0Y2ggc2l6ZSBjYW5ub3QgZXhjZWVkIDEwMDAgbWVzc2FnZXNcIiwge1xuICAgICAgICBoaW50OiBcIlNwbGl0IHlvdXIgbWVzc2FnZXMgaW50byBzbWFsbGVyIGJhdGNoZXNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkcnktcnVuIG1vZGVcbiAgICBpZiAoZmxhZ3NbXCJkcnktcnVuXCJdKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93UHJldmlldyhtZXNzYWdlcywgZmxhZ3MpO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIGJhdGNoXG4gICAgY29uc3Qgc3BpbiA9IHNwaW5uZXIoYFNlbmRpbmcgJHttZXNzYWdlcy5sZW5ndGh9IG1lc3NhZ2VzLi4uYCk7XG4gICAgc3Bpbi5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8QmF0Y2hSZXNwb25zZT4oXG4gICAgICAgIFwiL2FwaS92MS9tZXNzYWdlcy9iYXRjaFwiLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgICAgbWVzc2FnZVR5cGU6IGZsYWdzLnR5cGUsXG4gICAgICAgICAgLi4uKGZsYWdzLmZyb20gJiYgeyBmcm9tOiBmbGFncy5mcm9tIH0pLFxuICAgICAgICAgIC4uLih1cGxvYWRJZCAmJiB7IHVwbG9hZElkIH0pLCAvLyBMaW5rIHRvIGZpbGUgdXBsb2FkIGZvciBhdWRpdCB0cmFpbFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgc3Bpbi5zdG9wKCk7XG5cbiAgICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHN1Y2Nlc3MgbGV2ZWxcbiAgICAgIGNvbnN0IGFsbFN1Y2NlZWRlZCA9IHJlc3BvbnNlLmZhaWxlZCA9PT0gMDtcbiAgICAgIGNvbnN0IGFsbEZhaWxlZCA9IHJlc3BvbnNlLnNlbnQgPT09IDAgJiYgcmVzcG9uc2UuZmFpbGVkID4gMDtcbiAgICAgIGNvbnN0IHBhcnRpYWxTdWNjZXNzID0gcmVzcG9uc2Uuc2VudCA+IDAgJiYgcmVzcG9uc2UuZmFpbGVkID4gMDtcblxuICAgICAgaWYgKGFsbFN1Y2NlZWRlZCkge1xuICAgICAgICBzdWNjZXNzKFwiQmF0Y2ggc2VudCBzdWNjZXNzZnVsbHlcIiwge1xuICAgICAgICAgIFwiQmF0Y2ggSURcIjogcmVzcG9uc2UuYmF0Y2hJZCxcbiAgICAgICAgICBUb3RhbDogcmVzcG9uc2UudG90YWwsXG4gICAgICAgICAgU2VudDogY29sb3JzLnN1Y2Nlc3MoU3RyaW5nKHJlc3BvbnNlLnNlbnQpKSxcbiAgICAgICAgICBcIkNyZWRpdHMgVXNlZFwiOiByZXNwb25zZS5jcmVkaXRzVXNlZCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFsbEZhaWxlZCkge1xuICAgICAgICBlcnJvcihcIkJhdGNoIGZhaWxlZFwiLCB7XG4gICAgICAgICAgaGludDogYEFsbCAke3Jlc3BvbnNlLmZhaWxlZH0gbWVzc2FnZXMgZmFpbGVkIHRvIHNlbmRgLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShgICBCYXRjaCBJRDogJHtyZXNwb25zZS5iYXRjaElkfWApKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmRpbShgICBDcmVkaXRzIFJlZnVuZGVkOiAke3Jlc3BvbnNlLmNyZWRpdHNSZWZ1bmRlZH1gKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydGlhbFN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5sb2coY29sb3JzLndhcm5pbmcoXCJcXG7imqDvuI8gIEJhdGNoIGNvbXBsZXRlZCB3aXRoIGVycm9yc1xcblwiKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIEJhdGNoIElEOiAgICAgICAgICR7cmVzcG9uc2UuYmF0Y2hJZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgVG90YWw6ICAgICAgICAgICAgJHtyZXNwb25zZS50b3RhbH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgU2VudDogICAgICAgICAgICAgJHtjb2xvcnMuc3VjY2VzcyhTdHJpbmcocmVzcG9uc2Uuc2VudCkpfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAgIEZhaWxlZDogICAgICAgICAgICR7Y29sb3JzLmVycm9yKFN0cmluZyhyZXNwb25zZS5mYWlsZWQpKX1gLFxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBDcmVkaXRzIFVzZWQ6ICAgICAke3Jlc3BvbnNlLmNyZWRpdHNVc2VkfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBDcmVkaXRzIFJlZnVuZGVkOiAke3Jlc3BvbnNlLmNyZWRpdHNSZWZ1bmRlZH1gKTtcblxuICAgICAgICAvLyBTaG93IGZhaWxlZCBtZXNzYWdlcyBpZiBhdmFpbGFibGVcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgY29uc3QgZmFpbGVkTXNncyA9IHJlc3BvbnNlLm1lc3NhZ2VzLmZpbHRlcihcbiAgICAgICAgICAgIChtKSA9PiBtLnN0YXR1cyA9PT0gXCJmYWlsZWRcIixcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmYWlsZWRNc2dzLmxlbmd0aCA+IDAgJiYgZmFpbGVkTXNncy5sZW5ndGggPD0gNSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIlxcbiAgRmFpbGVkIG1lc3NhZ2VzOlwiKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBmYWlsZWRNc2dzKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgICAke21zZy50b306ICR7bXNnLmVycm9yIHx8IFwiVW5rbm93biBlcnJvclwifWApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZmFpbGVkTXNncy5sZW5ndGggPiA1KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgICAgICBgXFxuICAke2ZhaWxlZE1zZ3MubGVuZ3RofSBtZXNzYWdlcyBmYWlsZWQuIFVzZSAtLWpzb24gZm9yIGRldGFpbHMuYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzcGluLnN0b3AoKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBiYXRjaCBwcmV2aWV3IChkcnktcnVuIG1vZGUpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNob3dQcmV2aWV3KFxuICAgIG1lc3NhZ2VzOiBBcnJheTx7IHRvOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9PixcbiAgICBmbGFnczogeyB0eXBlPzogc3RyaW5nIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiQW5hbHl6aW5nIGJhdGNoLi4uXCIpLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJldmlldyA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PEJhdGNoUHJldmlld1Jlc3BvbnNlPihcbiAgICAgICAgXCIvYXBpL3YxL21lc3NhZ2VzL2JhdGNoL3ByZXZpZXdcIixcbiAgICAgICAgeyBtZXNzYWdlcywgbWVzc2FnZVR5cGU6IGZsYWdzLnR5cGUgfSxcbiAgICAgICk7XG5cbiAgICAgIHNwaW4uc3RvcCgpO1xuXG4gICAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICAgIGpzb24ocHJldmlldyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBjb21wcmVoZW5zaXZlIHByZXZpZXdcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TiiBCYXRjaCBQcmV2aWV3IChEcnkgUnVuKVxcblwiKSk7XG5cbiAgICAgIC8vIFN1bW1hcnkgdGFibGVcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCLilIBcIi5yZXBlYXQoNTApKSk7XG4gICAgICBjb25zb2xlLmxvZyhgVG90YWwgbWVzc2FnZXM6ICAgICAke3ByZXZpZXcudG90YWx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFNlbmRhYmxlOiAgICAgICAgICAgJHtjb2xvcnMuc3VjY2VzcyhTdHJpbmcocHJldmlldy5zZW5kYWJsZSkpfWAsXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBCbG9ja2VkOiAgICAgICAgICAgICR7cHJldmlldy5ibG9ja2VkID4gMCA/IGNvbG9ycy5lcnJvcihTdHJpbmcocHJldmlldy5ibG9ja2VkKSkgOiBcIjBcIn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGBEdXBsaWNhdGVzIHJlbW92ZWQ6ICR7cHJldmlldy5kdXBsaWNhdGVzfWApO1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIuKUgFwiLnJlcGVhdCg1MCkpKTtcblxuICAgICAgLy8gQ3JlZGl0c1xuICAgICAgY29uc29sZS5sb2coYFxcbkNyZWRpdHMgbmVlZGVkOiAgICAgJHtwcmV2aWV3LmNyZWRpdHNOZWVkZWR9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgWW91ciBiYWxhbmNlOiAgICAgICAke3ByZXZpZXcuY3JlZGl0QmFsYW5jZX1gKTtcbiAgICAgIGlmICghcHJldmlldy5oYXNTdWZmaWNpZW50Q3JlZGl0cykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBjb2xvcnMuZXJyb3IoXG4gICAgICAgICAgICBg4pqg77iPICBJbnN1ZmZpY2llbnQgY3JlZGl0cyEgTmVlZCAke3ByZXZpZXcuY3JlZGl0c05lZWRlZCAtIHByZXZpZXcuY3JlZGl0QmFsYW5jZX0gbW9yZS5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFjY2VzcyBpbmZvXG4gICAgICBjb25zb2xlLmxvZyhgXFxuQVBJIEtleSB0eXBlOiAgICAgICAke3ByZXZpZXcua2V5VHlwZS50b1VwcGVyQ2FzZSgpfWApO1xuICAgICAgY29uc29sZS5sb2coYFdyaXRlIGFjY2VzczogICAgICAgJHtwcmV2aWV3Lmhhc1dyaXRlU2NvcGUgPyBcIuKck1wiIDogXCLinJdcIn1gKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgRG9tZXN0aWMgKFVTL0NBKTogICAke3ByZXZpZXcubWVzc2FnaW5nUHJvZmlsZS5jYW5TZW5kRG9tZXN0aWMgPyBcIuKck1wiIDogXCLinJdcIn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgSW50ZXJuYXRpb25hbDogICAgICAke3ByZXZpZXcubWVzc2FnaW5nUHJvZmlsZS5jYW5TZW5kSW50ZXJuYXRpb25hbCA/IFwi4pyTXCIgOiBcIuKcl1wifWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb3VudHJ5IGJyZWFrZG93blxuICAgICAgY29uc3QgY291bnRyaWVzID0gT2JqZWN0LmVudHJpZXMocHJldmlldy5ieUNvdW50cnkpO1xuICAgICAgaWYgKGNvdW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiXFxu8J+TjSBCeSBDb3VudHJ5OlxcblwiKSk7XG4gICAgICAgIGZvciAoY29uc3QgW2NvdW50cnksIGRhdGFdIG9mIGNvdW50cmllcykge1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGRhdGEuYWxsb3dlZCA/IGNvbG9ycy5zdWNjZXNzKFwi4pyTXCIpIDogY29sb3JzLmVycm9yKFwi4pyXXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCAgJHtzdGF0dXN9ICR7Y291bnRyeX06ICR7ZGF0YS5jb3VudH0gbXNncywgJHtkYXRhLmNyZWRpdHN9IGNyZWRpdHMgKCR7ZGF0YS50aWVyfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFkYXRhLmFsbG93ZWQgJiYgZGF0YS5ibG9ja2VkUmVhc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKGAgICAgIOKUlOKUgCAke2RhdGEuYmxvY2tlZFJlYXNvbn1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENvbXBsaWFuY2UgY2hlY2sgcmVzdWx0c1xuICAgICAgaWYgKHByZXZpZXcuY29tcGxpYW5jZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIlxcbvCfm6HvuI8gIENvbXBsaWFuY2UgQ2hlY2s6XFxuXCIpKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgTWVzc2FnZSBUeXBlOiAgICAgICR7cHJldmlldy5jb21wbGlhbmNlLm1lc3NhZ2VUeXBlLnRvVXBwZXJDYXNlKCl9YCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLnNoYWZ0QmxvY2tlZCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5lcnJvcihcbiAgICAgICAgICAgICAgYCAgU0hBRlQgQmxvY2tlZDogICAgICR7cHJldmlldy5jb21wbGlhbmNlLnNoYWZ0QmxvY2tlZH0gbWVzc2FnZXNgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGZvciAoY29uc3QgbXNnIG9mIHByZXZpZXcuY29tcGxpYW5jZS5zaGFmdEJsb2NrZWRNZXNzYWdlcy5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAzLFxuICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICAgIGAgICAgIOKUlOKUgCAke21zZy50b306ICR7bXNnLmNhdGVnb3J5fSAoJHttc2cubWF0Y2hlZFRlcm1zLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmV2aWV3LmNvbXBsaWFuY2Uuc2hhZnRCbG9ja2VkTWVzc2FnZXMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgIGNvbG9ycy5kaW0oXG4gICAgICAgICAgICAgICAgYCAgICAgLi4uIGFuZCAke3ByZXZpZXcuY29tcGxpYW5jZS5zaGFmdEJsb2NrZWRNZXNzYWdlcy5sZW5ndGggLSAzfSBtb3JlYCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY29sb3JzLnN1Y2Nlc3MoXG4gICAgICAgICAgICAgIFwiICBTSEFGVCBDaGVjazogICAgICAg4pyTIEFsbCBtZXNzYWdlcyBwYXNzIGNvbnRlbnQgZmlsdGVyXCIsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLm1lc3NhZ2VUeXBlID09PSBcIm1hcmtldGluZ1wiKSB7XG4gICAgICAgICAgaWYgKHByZXZpZXcuY29tcGxpYW5jZS5xdWlldEhvdXJzUmVzY2hlZHVsZWQgPiAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgY29sb3JzLndhcm5pbmcoXG4gICAgICAgICAgICAgICAgYCAgUXVpZXQgSG91cnM6ICAgICAgICR7cHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNSZXNjaGVkdWxlZH0gbWVzc2FnZXMgd2lsbCBiZSByZXNjaGVkdWxlZGAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBtc2cgb2YgcHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXMuc2xpY2UoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDMsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRUaW1lID0gbXNnLm5leHRBbGxvd2VkVGltZVxuICAgICAgICAgICAgICAgID8gbmV3IERhdGUobXNnLm5leHRBbGxvd2VkVGltZSkudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICAgICAgICAgIDogXCJuZXh0IGF2YWlsYWJsZSB3aW5kb3dcIjtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgY29sb3JzLmRpbShcbiAgICAgICAgICAgICAgICAgIGAgICAgIOKUlOKUgCAke21zZy50b306ICR7bXNnLnJlY2lwaWVudFRpbWV6b25lfSDihpIgJHtuZXh0VGltZX1gLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldmlldy5jb21wbGlhbmNlLnF1aWV0SG91cnNCbG9ja2VkTWVzc2FnZXMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgICAgICAgYCAgICAgLi4uIGFuZCAke3ByZXZpZXcuY29tcGxpYW5jZS5xdWlldEhvdXJzQmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCAtIDN9IG1vcmVgLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBjb2xvcnMuc3VjY2VzcyhcbiAgICAgICAgICAgICAgICBcIiAgUXVpZXQgSG91cnM6ICAgICAgIOKckyBBbGwgcmVjaXBpZW50cyB3aXRoaW4gYWxsb3dlZCBob3Vyc1wiLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjb2xvcnMuZGltKFwiICBRdWlldCBIb3VyczogICAgICAgQnlwYXNzZWQgKHRyYW5zYWN0aW9uYWwgbWVzc2FnZSlcIiksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBXYXJuaW5nc1xuICAgICAgaWYgKHByZXZpZXcud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMud2FybmluZyhcIlxcbuKaoO+4jyAgV2FybmluZ3M6XCIpKTtcbiAgICAgICAgZm9yIChjb25zdCB3IG9mIHByZXZpZXcud2FybmluZ3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAg4oCiICR7d31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCbG9ja2VkIG1lc3NhZ2VzIChmaXJzdCA1KVxuICAgICAgaWYgKHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY29sb3JzLmVycm9yKFxuICAgICAgICAgICAgYFxcbuKdjCBCbG9ja2VkIE1lc3NhZ2VzICgke3ByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aH0gdG90YWwpOmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLnNsaWNlKDAsIDUpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgICR7Yi50b306ICR7Yi5yZWFzb259YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZpZXcuYmxvY2tlZE1lc3NhZ2VzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNvbG9ycy5kaW0oYCAgIC4uLiBhbmQgJHtwcmV2aWV3LmJsb2NrZWRNZXNzYWdlcy5sZW5ndGggLSA1fSBtb3JlYCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJcXG5cIiArIGNvbG9ycy5kaW0oXCJObyBtZXNzYWdlcyB3ZXJlIHNlbnQuIFJlbW92ZSAtLWRyeS1ydW4gdG8gc2VuZC5cIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3Bpbi5zdG9wKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBieXRlcyB0byBodW1hbiByZWFkYWJsZSBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0Qnl0ZXMoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYDtcbiAgICByZXR1cm4gYCR7KGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
|
|
@@ -4,9 +4,10 @@ export default class SmsSend extends AuthenticatedCommand {
|
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
6
|
to: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
-
text: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
text: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
8
|
from: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
9
|
type: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
"media-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
11
|
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
12
|
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
13
|
};
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { Flags } from "@oclif/core";
|
|
2
2
|
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
3
3
|
import { apiClient } from "../../lib/api-client.js";
|
|
4
|
-
import { success, error, spinner, formatStatus, formatCredits, json, isJsonMode, } from "../../lib/output.js";
|
|
4
|
+
import { success, error, spinner, colors, formatStatus, formatCredits, json, isJsonMode, } from "../../lib/output.js";
|
|
5
5
|
export default class SmsSend extends AuthenticatedCommand {
|
|
6
|
-
static description = "Send an SMS message";
|
|
6
|
+
static description = "Send an SMS or MMS message";
|
|
7
7
|
static examples = [
|
|
8
8
|
'<%= config.bin %> sms send --to +15551234567 --text "Hello!"',
|
|
9
9
|
'<%= config.bin %> sms send --to +15551234567 --text "Hello!" --from "Sendly"',
|
|
10
10
|
'<%= config.bin %> sms send --to +15551234567 --text "Hello!" --type transactional',
|
|
11
11
|
'<%= config.bin %> sms send --to +15551234567 --text "Hello!" --json',
|
|
12
|
+
'<%= config.bin %> sms send --to +15551234567 --text "Check this out" --media-url https://example.com/image.jpg',
|
|
13
|
+
'<%= config.bin %> sms send --to +15551234567 --media-url https://example.com/image.jpg',
|
|
14
|
+
'<%= config.bin %> sms send --to +15551234567 --text "Two images" --media-url https://example.com/a.jpg --media-url https://example.com/b.jpg',
|
|
12
15
|
];
|
|
13
16
|
static flags = {
|
|
14
17
|
...AuthenticatedCommand.baseFlags,
|
|
@@ -19,8 +22,7 @@ export default class SmsSend extends AuthenticatedCommand {
|
|
|
19
22
|
}),
|
|
20
23
|
text: Flags.string({
|
|
21
24
|
char: "m",
|
|
22
|
-
description: "Message text",
|
|
23
|
-
required: true,
|
|
25
|
+
description: "Message text (optional when --media-url is provided)",
|
|
24
26
|
}),
|
|
25
27
|
from: Flags.string({
|
|
26
28
|
char: "f",
|
|
@@ -31,42 +33,59 @@ export default class SmsSend extends AuthenticatedCommand {
|
|
|
31
33
|
options: ["marketing", "transactional"],
|
|
32
34
|
default: "marketing",
|
|
33
35
|
}),
|
|
36
|
+
"media-url": Flags.string({
|
|
37
|
+
description: "Media URL to attach (MMS). Can be specified multiple times.",
|
|
38
|
+
multiple: true,
|
|
39
|
+
}),
|
|
34
40
|
};
|
|
35
41
|
async run() {
|
|
36
42
|
const { flags } = await this.parse(SmsSend);
|
|
37
|
-
|
|
43
|
+
const mediaUrls = flags["media-url"];
|
|
44
|
+
const hasMedia = mediaUrls && mediaUrls.length > 0;
|
|
38
45
|
if (!/^\+[1-9]\d{1,14}$/.test(flags.to)) {
|
|
39
46
|
error("Invalid phone number format", {
|
|
40
47
|
hint: "Use E.164 format: +15551234567",
|
|
41
48
|
});
|
|
42
49
|
this.exit(1);
|
|
43
50
|
}
|
|
44
|
-
|
|
45
|
-
|
|
51
|
+
if (!flags.text && !hasMedia) {
|
|
52
|
+
error("Either --text or --media-url is required");
|
|
53
|
+
this.exit(1);
|
|
54
|
+
}
|
|
55
|
+
if (flags.text && !flags.text.trim()) {
|
|
46
56
|
error("Message text cannot be empty");
|
|
47
57
|
this.exit(1);
|
|
48
58
|
}
|
|
49
|
-
const
|
|
59
|
+
const messageLabel = hasMedia ? "MMS" : "SMS";
|
|
60
|
+
const spin = spinner(`Sending ${messageLabel} message...`);
|
|
50
61
|
spin.start();
|
|
51
62
|
try {
|
|
52
63
|
const response = await apiClient.post("/api/v1/messages", {
|
|
53
64
|
to: flags.to,
|
|
54
|
-
text: flags.text,
|
|
55
65
|
messageType: flags.type,
|
|
66
|
+
...(flags.text && { text: flags.text }),
|
|
56
67
|
...(flags.from && { from: flags.from }),
|
|
68
|
+
...(hasMedia && { mediaUrls }),
|
|
57
69
|
});
|
|
58
70
|
spin.stop();
|
|
59
71
|
if (isJsonMode()) {
|
|
60
72
|
json(response);
|
|
61
73
|
return;
|
|
62
74
|
}
|
|
63
|
-
success(
|
|
75
|
+
success(`${messageLabel} sent`, {
|
|
64
76
|
ID: response.id,
|
|
65
77
|
To: response.to,
|
|
78
|
+
Type: messageLabel,
|
|
66
79
|
Status: formatStatus(response.status),
|
|
67
80
|
...(response.segments != null && { Segments: response.segments }),
|
|
68
81
|
Credits: formatCredits(response.creditsUsed),
|
|
82
|
+
...(hasMedia && { Media: `${mediaUrls.length} attachment${mediaUrls.length > 1 ? "s" : ""}` }),
|
|
69
83
|
});
|
|
84
|
+
if (hasMedia && !isJsonMode()) {
|
|
85
|
+
for (const url of mediaUrls) {
|
|
86
|
+
console.log(` ${colors.dim("Media:")} ${url}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
70
89
|
}
|
|
71
90
|
catch (err) {
|
|
72
91
|
spin.stop();
|
|
@@ -74,4 +93,4 @@ export default class SmsSend extends AuthenticatedCommand {
|
|
|
74
93
|
}
|
|
75
94
|
}
|
|
76
95
|
}
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zbXMvc2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFlBQVksRUFDWixhQUFhLEVBQ2IsSUFBSSxFQUNKLFVBQVUsR0FDWCxNQUFNLHFCQUFxQixDQUFDO0FBYzdCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sT0FBUSxTQUFRLG9CQUFvQjtJQUN2RCxNQUFNLENBQUMsV0FBVyxHQUFHLDRCQUE0QixDQUFDO0lBRWxELE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsOERBQThEO1FBQzlELDhFQUE4RTtRQUM5RSxtRkFBbUY7UUFDbkYscUVBQXFFO1FBQ3JFLGdIQUFnSDtRQUNoSCx3RkFBd0Y7UUFDeEYsOElBQThJO0tBQy9JLENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2YsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsdUNBQXVDO1lBQ3BELFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUNGLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2pCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLHNEQUFzRDtTQUNwRSxDQUFDO1FBQ0YsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDakIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsMkJBQTJCO1NBQ3pD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T0FBTyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2dCQUM1QyxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sY0FBYyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQy9GLENBQUMsQ0FBQztZQUVILElBQUksUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBzdWNjZXNzLFxuICBlcnJvcixcbiAgc3Bpbm5lcixcbiAgY29sb3JzLFxuICBmb3JtYXRTdGF0dXMsXG4gIGZvcm1hdENyZWRpdHMsXG4gIGpzb24sXG4gIGlzSnNvbk1vZGUsXG59IGZyb20gXCIuLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBTZW5kTWVzc2FnZVJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgZnJvbTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBzZWdtZW50czogbnVtYmVyO1xuICBjcmVkaXRzVXNlZDogbnVtYmVyO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgbWVkaWFVcmxzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNtc1NlbmQgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiU2VuZCBhbiBTTVMgb3IgTU1TIG1lc3NhZ2VcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBzZW5kIC0tdG8gKzE1NTUxMjM0NTY3IC0tdGV4dCBcIkhlbGxvIVwiJyxcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gc21zIHNlbmQgLS10byArMTU1NTEyMzQ1NjcgLS10ZXh0IFwiSGVsbG8hXCIgLS1mcm9tIFwiU2VuZGx5XCInLFxuICAgICc8JT0gY29uZmlnLmJpbiAlPiBzbXMgc2VuZCAtLXRvICsxNTU1MTIzNDU2NyAtLXRleHQgXCJIZWxsbyFcIiAtLXR5cGUgdHJhbnNhY3Rpb25hbCcsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBzZW5kIC0tdG8gKzE1NTUxMjM0NTY3IC0tdGV4dCBcIkhlbGxvIVwiIC0tanNvbicsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBzZW5kIC0tdG8gKzE1NTUxMjM0NTY3IC0tdGV4dCBcIkNoZWNrIHRoaXMgb3V0XCIgLS1tZWRpYS11cmwgaHR0cHM6Ly9leGFtcGxlLmNvbS9pbWFnZS5qcGcnLFxuICAgICc8JT0gY29uZmlnLmJpbiAlPiBzbXMgc2VuZCAtLXRvICsxNTU1MTIzNDU2NyAtLW1lZGlhLXVybCBodHRwczovL2V4YW1wbGUuY29tL2ltYWdlLmpwZycsXG4gICAgJzwlPSBjb25maWcuYmluICU+IHNtcyBzZW5kIC0tdG8gKzE1NTUxMjM0NTY3IC0tdGV4dCBcIlR3byBpbWFnZXNcIiAtLW1lZGlhLXVybCBodHRwczovL2V4YW1wbGUuY29tL2EuanBnIC0tbWVkaWEtdXJsIGh0dHBzOi8vZXhhbXBsZS5jb20vYi5qcGcnLFxuICBdO1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgdG86IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcInRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJlY2lwaWVudCBwaG9uZSBudW1iZXIgKEUuMTY0IGZvcm1hdClcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICAgIHRleHQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm1cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk1lc3NhZ2UgdGV4dCAob3B0aW9uYWwgd2hlbiAtLW1lZGlhLXVybCBpcyBwcm92aWRlZClcIixcbiAgICB9KSxcbiAgICBmcm9tOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJmXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTZW5kZXIgSUQgb3IgcGhvbmUgbnVtYmVyXCIsXG4gICAgfSksXG4gICAgdHlwZTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk1lc3NhZ2UgdHlwZTogbWFya2V0aW5nIChkZWZhdWx0KSBvciB0cmFuc2FjdGlvbmFsXCIsXG4gICAgICBvcHRpb25zOiBbXCJtYXJrZXRpbmdcIiwgXCJ0cmFuc2FjdGlvbmFsXCJdLFxuICAgICAgZGVmYXVsdDogXCJtYXJrZXRpbmdcIixcbiAgICB9KSxcbiAgICBcIm1lZGlhLXVybFwiOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiTWVkaWEgVVJMIHRvIGF0dGFjaCAoTU1TKS4gQ2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy5cIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFNtc1NlbmQpO1xuICAgIGNvbnN0IG1lZGlhVXJscyA9IGZsYWdzW1wibWVkaWEtdXJsXCJdO1xuICAgIGNvbnN0IGhhc01lZGlhID0gbWVkaWFVcmxzICYmIG1lZGlhVXJscy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKCEvXlxcK1sxLTldXFxkezEsMTR9JC8udGVzdChmbGFncy50bykpIHtcbiAgICAgIGVycm9yKFwiSW52YWxpZCBwaG9uZSBudW1iZXIgZm9ybWF0XCIsIHtcbiAgICAgICAgaGludDogXCJVc2UgRS4xNjQgZm9ybWF0OiArMTU1NTEyMzQ1NjdcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGlmICghZmxhZ3MudGV4dCAmJiAhaGFzTWVkaWEpIHtcbiAgICAgIGVycm9yKFwiRWl0aGVyIC0tdGV4dCBvciAtLW1lZGlhLXVybCBpcyByZXF1aXJlZFwiKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAoZmxhZ3MudGV4dCAmJiAhZmxhZ3MudGV4dC50cmltKCkpIHtcbiAgICAgIGVycm9yKFwiTWVzc2FnZSB0ZXh0IGNhbm5vdCBiZSBlbXB0eVwiKTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlTGFiZWwgPSBoYXNNZWRpYSA/IFwiTU1TXCIgOiBcIlNNU1wiO1xuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKGBTZW5kaW5nICR7bWVzc2FnZUxhYmVsfSBtZXNzYWdlLi4uYCk7XG4gICAgc3Bpbi5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8U2VuZE1lc3NhZ2VSZXNwb25zZT4oXG4gICAgICAgIFwiL2FwaS92MS9tZXNzYWdlc1wiLFxuICAgICAgICB7XG4gICAgICAgICAgdG86IGZsYWdzLnRvLFxuICAgICAgICAgIG1lc3NhZ2VUeXBlOiBmbGFncy50eXBlLFxuICAgICAgICAgIC4uLihmbGFncy50ZXh0ICYmIHsgdGV4dDogZmxhZ3MudGV4dCB9KSxcbiAgICAgICAgICAuLi4oZmxhZ3MuZnJvbSAmJiB7IGZyb206IGZsYWdzLmZyb20gfSksXG4gICAgICAgICAgLi4uKGhhc01lZGlhICYmIHsgbWVkaWFVcmxzIH0pLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgc3Bpbi5zdG9wKCk7XG5cbiAgICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3VjY2VzcyhgJHttZXNzYWdlTGFiZWx9IHNlbnRgLCB7XG4gICAgICAgIElEOiByZXNwb25zZS5pZCxcbiAgICAgICAgVG86IHJlc3BvbnNlLnRvLFxuICAgICAgICBUeXBlOiBtZXNzYWdlTGFiZWwsXG4gICAgICAgIFN0YXR1czogZm9ybWF0U3RhdHVzKHJlc3BvbnNlLnN0YXR1cyksXG4gICAgICAgIC4uLihyZXNwb25zZS5zZWdtZW50cyAhPSBudWxsICYmIHsgU2VnbWVudHM6IHJlc3BvbnNlLnNlZ21lbnRzIH0pLFxuICAgICAgICBDcmVkaXRzOiBmb3JtYXRDcmVkaXRzKHJlc3BvbnNlLmNyZWRpdHNVc2VkKSxcbiAgICAgICAgLi4uKGhhc01lZGlhICYmIHsgTWVkaWE6IGAke21lZGlhVXJscy5sZW5ndGh9IGF0dGFjaG1lbnQke21lZGlhVXJscy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifWAgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhc01lZGlhICYmICFpc0pzb25Nb2RlKCkpIHtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgbWVkaWFVcmxzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuZGltKFwiTWVkaWE6XCIpfSAke3VybH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3Bpbi5zdG9wKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/dist/lib/api-client.d.ts
CHANGED
|
@@ -63,7 +63,7 @@ declare class ApiClient {
|
|
|
63
63
|
delete<T>(path: string, requireAuth?: boolean): Promise<T>;
|
|
64
64
|
/**
|
|
65
65
|
* Upload a file using multipart/form-data
|
|
66
|
-
* Used for batch CSV uploads to
|
|
66
|
+
* Used for batch CSV uploads to R2 storage
|
|
67
67
|
*/
|
|
68
68
|
uploadFile<T>(path: string, file: {
|
|
69
69
|
buffer: Buffer;
|
package/dist/lib/api-client.js
CHANGED
|
@@ -267,7 +267,7 @@ class ApiClient {
|
|
|
267
267
|
}
|
|
268
268
|
/**
|
|
269
269
|
* Upload a file using multipart/form-data
|
|
270
|
-
* Used for batch CSV uploads to
|
|
270
|
+
* Used for batch CSV uploads to R2 storage
|
|
271
271
|
*/
|
|
272
272
|
async uploadFile(path, file, requireAuth = true) {
|
|
273
273
|
const maxRetries = getEffectiveValue("maxRetries");
|
|
@@ -334,4 +334,4 @@ class ApiClient {
|
|
|
334
334
|
}
|
|
335
335
|
}
|
|
336
336
|
export const apiClient = new ApiClient();
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuSCxpQ0FBaUM7QUFDakMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBd0IsQ0FBQztBQUV6RTs7R0FFRztBQUNILFNBQVMsS0FBSyxDQUFDLEVBQVU7SUFDdkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUN0QyxpQkFBaUI7SUFDakIsSUFBSSxLQUFLLFlBQVksU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0Qsb0NBQW9DO0lBQ3BDLElBQUksS0FBSyxZQUFZLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQWlCRCxNQUFNLE9BQU8sUUFBUyxTQUFRLEtBQUs7SUFJeEI7SUFFQTtJQUNBO0lBTkYsSUFBSSxDQUFVO0lBRXJC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RUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFNBQVMsSUFBSSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQVBJIENsaWVudCBmb3IgU2VuZGx5IENMSVxuICogSGFuZGxlcyBhbGwgSFRUUCByZXF1ZXN0cyB0byB0aGUgU2VuZGx5IEFQSVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGdldEF1dGhUb2tlbiwgZ2V0U3RvcmVkQWNjZXNzVG9rZW4sIGdldENvbmZpZ1ZhbHVlLCBnZXRFZmZlY3RpdmVWYWx1ZSwgc2V0QXV0aFRva2VucyB9IGZyb20gXCIuL2NvbmZpZy5qc1wiO1xuXG4vLyBSZWFkIHZlcnNpb24gZnJvbSBwYWNrYWdlLmpzb25cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCB7IHZlcnNpb24gfSA9IHJlcXVpcmUoXCIuLi8uLi9wYWNrYWdlLmpzb25cIikgYXMgeyB2ZXJzaW9uOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBTbGVlcCBmb3IgYSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gKi9cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gZXJyb3IgaXMgcmV0cnlhYmxlIChuZXR3b3JrIGVycm9ycyBvciA1eHggc2VydmVyIGVycm9ycylcbiAqL1xuZnVuY3Rpb24gaXNSZXRyeWFibGVFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAvLyBOZXR3b3JrIGVycm9yc1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcImZldGNoXCIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gU2VydmVyIGVycm9ycyAoNXh4KSBhcmUgcmV0cnlhYmxlXG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEFwaUVycm9yICYmIGVycm9yLnN0YXR1c0NvZGUgPj0gNTAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVJlc3BvbnNlPFQ+IHtcbiAgZGF0YT86IFQ7XG4gIGVycm9yPzoge1xuICAgIGNvZGU6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhdGVMaW1pdEluZm8ge1xuICBsaW1pdDogbnVtYmVyO1xuICByZW1haW5pbmc6IG51bWJlcjtcbiAgcmVzZXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgaGludD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29kZTogc3RyaW5nLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgc3RhdHVzQ29kZTogbnVtYmVyLFxuICAgIHB1YmxpYyBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgaGludD86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJBcGlFcnJvclwiO1xuICAgIHRoaXMuaGludCA9IGhpbnQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyA9IFwiQXV0aGVudGljYXRpb24gZmFpbGVkXCIsXG4gICAgaGludDogc3RyaW5nID0gXCJSdW4gJ3NlbmRseSBsb2dpbicgdG8gYXV0aGVudGljYXRlLCBvciBjaGVjayB5b3VyIEFQSSBrZXkgd2l0aCAnc2VuZGx5IGNvbmZpZyBzaG93J1wiLFxuICApIHtcbiAgICBzdXBlcihcImF1dGhlbnRpY2F0aW9uX2Vycm9yXCIsIG1lc3NhZ2UsIDQwMSwgdW5kZWZpbmVkLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIkF1dGhlbnRpY2F0aW9uRXJyb3JcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXBpS2V5UmVxdWlyZWRFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nID0gXCJBUEkga2V5IHJlcXVpcmVkIGZvciB0aGlzIG9wZXJhdGlvbi5cIixcbiAgICBwdWJsaWMgaGludDogc3RyaW5nID0gXCJTZXQgU0VORExZX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgY3JlYXRlIGEga2V5IHdpdGg6IHNlbmRseSBrZXlzIGNyZWF0ZSAtLXR5cGUgdGVzdFwiLFxuICApIHtcbiAgICBzdXBlcihcImFwaV9rZXlfcmVxdWlyZWRcIiwgbWVzc2FnZSwgNDAxKTtcbiAgICB0aGlzLm5hbWUgPSBcIkFwaUtleVJlcXVpcmVkRXJyb3JcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmF0ZUxpbWl0RXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZXRyeUFmdGVyOiBudW1iZXIsXG4gICAgbWVzc2FnZTogc3RyaW5nID0gXCJSYXRlIGxpbWl0IGV4Y2VlZGVkXCIsXG4gICkge1xuICAgIGNvbnN0IGhpbnQgPSBgV2FpdCAke3JldHJ5QWZ0ZXJ9IHNlY29uZHMgYmVmb3JlIHJldHJ5aW5nLCBvciB1cGdyYWRlIHlvdXIgcGxhbiBmb3IgaGlnaGVyIGxpbWl0c2A7XG4gICAgc3VwZXIoXCJyYXRlX2xpbWl0X2V4Y2VlZGVkXCIsIG1lc3NhZ2UsIDQyOSwgdW5kZWZpbmVkLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIlJhdGVMaW1pdEVycm9yXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluc3VmZmljaWVudENyZWRpdHNFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gXCJJbnN1ZmZpY2llbnQgY3JlZGl0c1wiKSB7XG4gICAgY29uc3QgaGludCA9XG4gICAgICBcIkNoZWNrIHlvdXIgYmFsYW5jZSB3aXRoICdzZW5kbHkgY3JlZGl0cycsIG9yIGFkZCBjcmVkaXRzIGF0IGh0dHBzOi8vc2VuZGx5LmxpdmUvZGFzaGJvYXJkL2JpbGxpbmdcIjtcbiAgICBzdXBlcihcImluc3VmZmljaWVudF9jcmVkaXRzXCIsIG1lc3NhZ2UsIDQwMiwgdW5kZWZpbmVkLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIkluc3VmZmljaWVudENyZWRpdHNFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcgPSBcIlJlc291cmNlIG5vdCBmb3VuZFwiLFxuICAgIGhpbnQ6IHN0cmluZyA9IFwiVmVyaWZ5IHRoZSBJRCBpcyBjb3JyZWN0LCBvciB1c2UgYSBsaXN0IGNvbW1hbmQgdG8gc2VlIGF2YWlsYWJsZSByZXNvdXJjZXNcIixcbiAgKSB7XG4gICAgc3VwZXIoXCJub3RfZm91bmRcIiwgbWVzc2FnZSwgNDA0LCB1bmRlZmluZWQsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9IFwiTm90Rm91bmRFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyA9IFwiVmFsaWRhdGlvbiBmYWlsZWRcIixcbiAgICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICkge1xuICAgIGNvbnN0IGhpbnQgPSBcIkNoZWNrIHRoZSBjb21tYW5kIGhlbHAgd2l0aCAtLWhlbHAgZm9yIHZhbGlkIG9wdGlvbnMgYW5kIGZvcm1hdHNcIjtcbiAgICBzdXBlcihcInZhbGlkYXRpb25fZXJyb3JcIiwgbWVzc2FnZSwgNDAwLCBkZXRhaWxzLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIlZhbGlkYXRpb25FcnJvclwiO1xuICB9XG59XG5cbmNsYXNzIEFwaUNsaWVudCB7XG4gIHByaXZhdGUgcmF0ZUxpbWl0SW5mbz86IFJhdGVMaW1pdEluZm87XG4gIHByaXZhdGUgcmVmcmVzaGluZzogUHJvbWlzZTxib29sZWFuPiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgZ2V0QmFzZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRDb25maWdWYWx1ZShcImJhc2VVcmxcIikgfHwgXCJodHRwczovL3NlbmRseS5saXZlXCI7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUF1dGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgdG9rZW4gPSBnZXRBdXRoVG9rZW4oKTtcbiAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtcblxuICAgIGNvbnN0IHN0b3JlZCA9IGdldFN0b3JlZEFjY2Vzc1Rva2VuKCk7XG4gICAgaWYgKHN0b3JlZD8uc3RhcnRzV2l0aChcImNsaV9cIikpIHtcbiAgICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VucygpO1xuICAgICAgaWYgKHJlZnJlc2hlZCkge1xuICAgICAgICB0b2tlbiA9IGdldEF1dGhUb2tlbigpO1xuICAgICAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRIZWFkZXJzKHJlcXVpcmVBdXRoOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcIlVzZXItQWdlbnRcIjogYEBzZW5kbHkvY2xpLyR7dmVyc2lvbn1gLFxuICAgIH07XG5cbiAgICBpZiAocmVxdWlyZUF1dGgpIHtcbiAgICAgIGhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke2F3YWl0IHRoaXMuZW5zdXJlQXV0aCgpfWA7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JnSWQgPSBnZXRFZmZlY3RpdmVWYWx1ZShcImN1cnJlbnRPcmdJZFwiKTtcbiAgICBpZiAob3JnSWQpIHtcbiAgICAgIGhlYWRlcnNbXCJYLU9yZ2FuaXphdGlvbi1JZFwiXSA9IG9yZ0lkO1xuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoVG9rZW5zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnJlZnJlc2hpbmcpIHJldHVybiB0aGlzLnJlZnJlc2hpbmc7XG5cbiAgICB0aGlzLnJlZnJlc2hpbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVkID0gZ2V0U3RvcmVkQWNjZXNzVG9rZW4oKTtcbiAgICAgIGlmICghc3RvcmVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5nZXRCYXNlVXJsKCl9L2FwaS9jbGkvYXV0aC9yZWZyZXNoYCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogYEBzZW5kbHkvY2xpLyR7dmVyc2lvbn1gLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY2Nlc3NUb2tlbjogc3RvcmVkIH0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7XG4gICAgICAgICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICAgICAgICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgICAgICAgICBleHBpcmVzSW46IG51bWJlcjtcbiAgICAgICAgICB1c2VySWQ6IHN0cmluZztcbiAgICAgICAgICBlbWFpbDogc3RyaW5nO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNldEF1dGhUb2tlbnMoXG4gICAgICAgICAgZGF0YS5hY2Nlc3NUb2tlbixcbiAgICAgICAgICBkYXRhLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBkYXRhLmV4cGlyZXNJbixcbiAgICAgICAgICBkYXRhLnVzZXJJZCxcbiAgICAgICAgICBkYXRhLmVtYWlsLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlZnJlc2hpbmc7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVmcmVzaGluZyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVxdWVzdDxUPihcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYm9keT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgICAgIHJlcXVpcmVBdXRoPzogYm9vbGVhbjtcbiAgICB9ID0ge30sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHsgYm9keSwgcXVlcnksIHJlcXVpcmVBdXRoID0gdHJ1ZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBtYXhSZXRyaWVzID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJtYXhSZXRyaWVzXCIpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBnZXRFZmZlY3RpdmVWYWx1ZShcInRpbWVvdXRcIik7XG5cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke3RoaXMuZ2V0QmFzZVVybCgpfSR7cGF0aH1gKTtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHF1ZXJ5KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZGlkUmVmcmVzaCA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gbWF4UmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgdGltZW91dCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwudG9TdHJpbmcoKSwge1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiBhd2FpdCB0aGlzLmdldEhlYWRlcnMocmVxdWlyZUF1dGgpLFxuICAgICAgICAgIGJvZHk6IGJvZHkgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9KTtcblxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVJhdGVMaW1pdEluZm8ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgcmVxdWlyZUF1dGggJiYgIWRpZFJlZnJlc2gpIHtcbiAgICAgICAgICBkaWRSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbnMoKTtcbiAgICAgICAgICBpZiAocmVmcmVzaGVkKSB7XG4gICAgICAgICAgICBhdHRlbXB0LS07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZXNwb25zZS5zdGF0dXMsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGFzIEVycm9yO1xuXG4gICAgICAgIGlmICghaXNSZXRyeWFibGVFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRlbXB0ID09PSBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYWNrb2ZmTXMgPSBNYXRoLm1pbigxMDAwICogTWF0aC5wb3coMiwgYXR0ZW1wdCksIDEwMDAwKTtcbiAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZk1zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBsYXN0RXJyb3IgfHwgbmV3IEVycm9yKFwiUmVxdWVzdCBmYWlsZWRcIik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJhdGVMaW1pdEluZm8oaGVhZGVyczogSGVhZGVycyk6IHZvaWQge1xuICAgIGNvbnN0IGxpbWl0ID0gaGVhZGVycy5nZXQoXCJYLVJhdGVMaW1pdC1MaW1pdFwiKTtcbiAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldChcIlgtUmF0ZUxpbWl0LVJlbWFpbmluZ1wiKTtcbiAgICBjb25zdCByZXNldCA9IGhlYWRlcnMuZ2V0KFwiWC1SYXRlTGltaXQtUmVzZXRcIik7XG5cbiAgICBpZiAobGltaXQgJiYgcmVtYWluaW5nICYmIHJlc2V0KSB7XG4gICAgICB0aGlzLnJhdGVMaW1pdEluZm8gPSB7XG4gICAgICAgIGxpbWl0OiBwYXJzZUludChsaW1pdCwgMTApLFxuICAgICAgICByZW1haW5pbmc6IHBhcnNlSW50KHJlbWFpbmluZywgMTApLFxuICAgICAgICByZXNldDogcGFyc2VJbnQocmVzZXQsIDEwKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihzdGF0dXNDb2RlOiBudW1iZXIsIGRhdGE6IGFueSk6IG5ldmVyIHtcbiAgICBjb25zdCBlcnJvciA9IGRhdGE/LmVycm9yIHx8IFwidW5rbm93bl9lcnJvclwiO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhPy5tZXNzYWdlIHx8IGBIVFRQICR7c3RhdHVzQ29kZX1gO1xuICAgIGNvbnN0IGRldGFpbHMgPSBkYXRhPy5kZXRhaWxzO1xuXG4gICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICAvLyBEZXRlY3QgaWYgdGhpcyBpcyBhbiBBUEkga2V5IHJlcXVpcmVkIGVycm9yIHZzIGdlbmVyYWwgYXV0aCBlcnJvclxuICAgICAgICBpZiAoXG4gICAgICAgICAgZXJyb3IgPT09IFwiaW52YWxpZF9hcGlfa2V5XCIgfHxcbiAgICAgICAgICBlcnJvciA9PT0gXCJhcGlfa2V5X3JlcXVpcmVkXCIgfHxcbiAgICAgICAgICBtZXNzYWdlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYXBpIGtleVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXBpS2V5UmVxdWlyZWRFcnJvcihcbiAgICAgICAgICAgIFwiQVBJIGtleSByZXF1aXJlZCBmb3Igc2VuZGluZyBtZXNzYWdlc1wiLFxuICAgICAgICAgICAgXCJTZXQgU0VORExZX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgY3JlYXRlIGEga2V5IHdpdGg6XFxuICBzZW5kbHkga2V5cyBjcmVhdGUgLS10eXBlIHRlc3RcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKG1lc3NhZ2UpO1xuICAgICAgY2FzZSA0MDA6XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZGV0YWlscyk7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgdGhyb3cgbmV3IEluc3VmZmljaWVudENyZWRpdHNFcnJvcihtZXNzYWdlKTtcbiAgICAgIGNhc2UgNDA0OlxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihtZXNzYWdlKTtcbiAgICAgIGNhc2UgNDI5OlxuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gZGF0YT8ucmV0cnlBZnRlciB8fCA2MDtcbiAgICAgICAgdGhyb3cgbmV3IFJhdGVMaW1pdEVycm9yKHJldHJ5QWZ0ZXIsIG1lc3NhZ2UpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc3QgZGVmYXVsdEhpbnQgPVxuICAgICAgICAgIHN0YXR1c0NvZGUgPj0gNTAwXG4gICAgICAgICAgICA/IFwiVGhpcyBpcyBhIHNlcnZlciBlcnJvci4gVHJ5IGFnYWluIGxhdGVyIG9yIGNoZWNrIGh0dHBzOi8vc3RhdHVzLnNlbmRseS5saXZlXCJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBuZXcgQXBpRXJyb3IoZXJyb3IsIG1lc3NhZ2UsIHN0YXR1c0NvZGUsIGRldGFpbHMsIGRlZmF1bHRIaW50KTtcbiAgICB9XG4gIH1cblxuICBnZXRSYXRlTGltaXRJbmZvKCk6IFJhdGVMaW1pdEluZm8gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJhdGVMaW1pdEluZm87XG4gIH1cblxuICAvLyBDb252ZW5pZW5jZSBtZXRob2RzXG4gIGFzeW5jIGdldDxUPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPixcbiAgICByZXF1aXJlQXV0aDogYm9vbGVhbiA9IHRydWUsXG4gICk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oXCJHRVRcIiwgcGF0aCwgeyBxdWVyeSwgcmVxdWlyZUF1dGggfSk7XG4gIH1cblxuICBhc3luYyBwb3N0PFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBib2R5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwiUE9TVFwiLCBwYXRoLCB7IGJvZHksIHJlcXVpcmVBdXRoIH0pO1xuICB9XG5cbiAgYXN5bmMgcGF0Y2g8VD4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICByZXF1aXJlQXV0aDogYm9vbGVhbiA9IHRydWUsXG4gICk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oXCJQQVRDSFwiLCBwYXRoLCB7IGJvZHksIHJlcXVpcmVBdXRoIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlPFQ+KHBhdGg6IHN0cmluZywgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPihcIkRFTEVURVwiLCBwYXRoLCB7IHJlcXVpcmVBdXRoIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZCBhIGZpbGUgdXNpbmcgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuICAgKiBVc2VkIGZvciBiYXRjaCBDU1YgdXBsb2FkcyB0byBTdXBhYmFzZSBzdG9yYWdlXG4gICAqL1xuICBhc3luYyB1cGxvYWRGaWxlPFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBmaWxlOiB7XG4gICAgICBidWZmZXI6IEJ1ZmZlcjtcbiAgICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICBtaW1ldHlwZT86IHN0cmluZztcbiAgICB9LFxuICAgIHJlcXVpcmVBdXRoOiBib29sZWFuID0gdHJ1ZSxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IGdldEVmZmVjdGl2ZVZhbHVlKFwibWF4UmV0cmllc1wiKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJ0aW1lb3V0XCIpO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QmFzZVVybCgpfSR7cGF0aH1gO1xuXG4gICAgLy8gQnVpbGQgbXVsdGlwYXJ0IGZvcm0gZGF0YSBtYW51YWxseSAoTm9kZS5qcyBjb21wYXRpYmxlKVxuICAgIGNvbnN0IGJvdW5kYXJ5ID0gYC0tLS1Gb3JtQm91bmRhcnkke0RhdGUubm93KCl9JHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMil9YDtcbiAgICBjb25zdCBtaW1ldHlwZSA9IGZpbGUubWltZXR5cGUgfHwgXCJ0ZXh0L2NzdlwiO1xuXG4gICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmZyb20oXG4gICAgICBgLS0ke2JvdW5kYXJ5fVxcclxcbmAgK1xuICAgICAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiZmlsZVwiOyBmaWxlbmFtZT1cIiR7ZmlsZS5maWxlbmFtZX1cIlxcclxcbmAgK1xuICAgICAgICBgQ29udGVudC1UeXBlOiAke21pbWV0eXBlfVxcclxcblxcclxcbmAsXG4gICAgKTtcbiAgICBjb25zdCBmb290ZXIgPSBCdWZmZXIuZnJvbShgXFxyXFxuLS0ke2JvdW5kYXJ5fS0tXFxyXFxuYCk7XG4gICAgY29uc3QgYm9keSA9IEJ1ZmZlci5jb25jYXQoW2hlYWRlciwgZmlsZS5idWZmZXIsIGZvb3Rlcl0pO1xuXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke2JvdW5kYXJ5fWAsXG4gICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgXCJVc2VyLUFnZW50XCI6IGBAc2VuZGx5L2NsaS8ke3ZlcnNpb259YCxcbiAgICB9O1xuXG4gICAgaWYgKHJlcXVpcmVBdXRoKSB7XG4gICAgICBoZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHthd2FpdCB0aGlzLmVuc3VyZUF1dGgoKX1gO1xuICAgIH1cblxuICAgIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGxldCBkaWRSZWZyZXNoID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBtYXhSZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0KTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlUmF0ZUxpbWl0SW5mbyhyZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgcmVxdWlyZUF1dGggJiYgIWRpZFJlZnJlc2gpIHtcbiAgICAgICAgICBkaWRSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbnMoKTtcbiAgICAgICAgICBpZiAocmVmcmVzaGVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHtnZXRBdXRoVG9rZW4oKX1gO1xuICAgICAgICAgICAgYXR0ZW1wdC0tO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IocmVzcG9uc2Uuc3RhdHVzLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsYXN0RXJyb3IgPSBlcnJvciBhcyBFcnJvcjtcblxuICAgICAgICBpZiAoIWlzUmV0cnlhYmxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXR0ZW1wdCA9PT0gbWF4UmV0cmllcykge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFja29mZk1zID0gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGF0dGVtcHQpLCAxMDAwMCk7XG4gICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmZNcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcihcIlVwbG9hZCBmYWlsZWRcIik7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGFwaUNsaWVudCA9IG5ldyBBcGlDbGllbnQoKTtcbiJdfQ==
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuSCxpQ0FBaUM7QUFDakMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBd0IsQ0FBQztBQUV6RTs7R0FFRztBQUNILFNBQVMsS0FBSyxDQUFDLEVBQVU7SUFDdkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUN0QyxpQkFBaUI7SUFDakIsSUFBSSxLQUFLLFlBQVksU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0Qsb0NBQW9DO0lBQ3BDLElBQUksS0FBSyxZQUFZLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQWlCRCxNQUFNLE9BQU8sUUFBUyxTQUFRLEtBQUs7SUFJeEI7SUFFQTtJQUNBO0lBTkYsSUFBSSxDQUFVO0lBRXJC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RUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFNBQVMsSUFBSSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQVBJIENsaWVudCBmb3IgU2VuZGx5IENMSVxuICogSGFuZGxlcyBhbGwgSFRUUCByZXF1ZXN0cyB0byB0aGUgU2VuZGx5IEFQSVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGdldEF1dGhUb2tlbiwgZ2V0U3RvcmVkQWNjZXNzVG9rZW4sIGdldENvbmZpZ1ZhbHVlLCBnZXRFZmZlY3RpdmVWYWx1ZSwgc2V0QXV0aFRva2VucyB9IGZyb20gXCIuL2NvbmZpZy5qc1wiO1xuXG4vLyBSZWFkIHZlcnNpb24gZnJvbSBwYWNrYWdlLmpzb25cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCB7IHZlcnNpb24gfSA9IHJlcXVpcmUoXCIuLi8uLi9wYWNrYWdlLmpzb25cIikgYXMgeyB2ZXJzaW9uOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBTbGVlcCBmb3IgYSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gKi9cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gZXJyb3IgaXMgcmV0cnlhYmxlIChuZXR3b3JrIGVycm9ycyBvciA1eHggc2VydmVyIGVycm9ycylcbiAqL1xuZnVuY3Rpb24gaXNSZXRyeWFibGVFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAvLyBOZXR3b3JrIGVycm9yc1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcImZldGNoXCIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gU2VydmVyIGVycm9ycyAoNXh4KSBhcmUgcmV0cnlhYmxlXG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEFwaUVycm9yICYmIGVycm9yLnN0YXR1c0NvZGUgPj0gNTAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVJlc3BvbnNlPFQ+IHtcbiAgZGF0YT86IFQ7XG4gIGVycm9yPzoge1xuICAgIGNvZGU6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhdGVMaW1pdEluZm8ge1xuICBsaW1pdDogbnVtYmVyO1xuICByZW1haW5pbmc6IG51bWJlcjtcbiAgcmVzZXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgaGludD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29kZTogc3RyaW5nLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgc3RhdHVzQ29kZTogbnVtYmVyLFxuICAgIHB1YmxpYyBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgaGludD86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJBcGlFcnJvclwiO1xuICAgIHRoaXMuaGludCA9IGhpbnQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyA9IFwiQXV0aGVudGljYXRpb24gZmFpbGVkXCIsXG4gICAgaGludDogc3RyaW5nID0gXCJSdW4gJ3NlbmRseSBsb2dpbicgdG8gYXV0aGVudGljYXRlLCBvciBjaGVjayB5b3VyIEFQSSBrZXkgd2l0aCAnc2VuZGx5IGNvbmZpZyBzaG93J1wiLFxuICApIHtcbiAgICBzdXBlcihcImF1dGhlbnRpY2F0aW9uX2Vycm9yXCIsIG1lc3NhZ2UsIDQwMSwgdW5kZWZpbmVkLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIkF1dGhlbnRpY2F0aW9uRXJyb3JcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXBpS2V5UmVxdWlyZWRFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nID0gXCJBUEkga2V5IHJlcXVpcmVkIGZvciB0aGlzIG9wZXJhdGlvbi5cIixcbiAgICBwdWJsaWMgaGludDogc3RyaW5nID0gXCJTZXQgU0VORExZX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgY3JlYXRlIGEga2V5IHdpdGg6IHNlbmRseSBrZXlzIGNyZWF0ZSAtLXR5cGUgdGVzdFwiLFxuICApIHtcbiAgICBzdXBlcihcImFwaV9rZXlfcmVxdWlyZWRcIiwgbWVzc2FnZSwgNDAxKTtcbiAgICB0aGlzLm5hbWUgPSBcIkFwaUtleVJlcXVpcmVkRXJyb3JcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmF0ZUxpbWl0RXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZXRyeUFmdGVyOiBudW1iZXIsXG4gICAgbWVzc2FnZTogc3RyaW5nID0gXCJSYXRlIGxpbWl0IGV4Y2VlZGVkXCIsXG4gICkge1xuICAgIGNvbnN0IGhpbnQgPSBgV2FpdCAke3JldHJ5QWZ0ZXJ9IHNlY29uZHMgYmVmb3JlIHJldHJ5aW5nLCBvciB1cGdyYWRlIHlvdXIgcGxhbiBmb3IgaGlnaGVyIGxpbWl0c2A7XG4gICAgc3VwZXIoXCJyYXRlX2xpbWl0X2V4Y2VlZGVkXCIsIG1lc3NhZ2UsIDQyOSwgdW5kZWZpbmVkLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIlJhdGVMaW1pdEVycm9yXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluc3VmZmljaWVudENyZWRpdHNFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gXCJJbnN1ZmZpY2llbnQgY3JlZGl0c1wiKSB7XG4gICAgY29uc3QgaGludCA9XG4gICAgICBcIkNoZWNrIHlvdXIgYmFsYW5jZSB3aXRoICdzZW5kbHkgY3JlZGl0cycsIG9yIGFkZCBjcmVkaXRzIGF0IGh0dHBzOi8vc2VuZGx5LmxpdmUvZGFzaGJvYXJkL2JpbGxpbmdcIjtcbiAgICBzdXBlcihcImluc3VmZmljaWVudF9jcmVkaXRzXCIsIG1lc3NhZ2UsIDQwMiwgdW5kZWZpbmVkLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIkluc3VmZmljaWVudENyZWRpdHNFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcgPSBcIlJlc291cmNlIG5vdCBmb3VuZFwiLFxuICAgIGhpbnQ6IHN0cmluZyA9IFwiVmVyaWZ5IHRoZSBJRCBpcyBjb3JyZWN0LCBvciB1c2UgYSBsaXN0IGNvbW1hbmQgdG8gc2VlIGF2YWlsYWJsZSByZXNvdXJjZXNcIixcbiAgKSB7XG4gICAgc3VwZXIoXCJub3RfZm91bmRcIiwgbWVzc2FnZSwgNDA0LCB1bmRlZmluZWQsIGhpbnQpO1xuICAgIHRoaXMubmFtZSA9IFwiTm90Rm91bmRFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyA9IFwiVmFsaWRhdGlvbiBmYWlsZWRcIixcbiAgICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICkge1xuICAgIGNvbnN0IGhpbnQgPSBcIkNoZWNrIHRoZSBjb21tYW5kIGhlbHAgd2l0aCAtLWhlbHAgZm9yIHZhbGlkIG9wdGlvbnMgYW5kIGZvcm1hdHNcIjtcbiAgICBzdXBlcihcInZhbGlkYXRpb25fZXJyb3JcIiwgbWVzc2FnZSwgNDAwLCBkZXRhaWxzLCBoaW50KTtcbiAgICB0aGlzLm5hbWUgPSBcIlZhbGlkYXRpb25FcnJvclwiO1xuICB9XG59XG5cbmNsYXNzIEFwaUNsaWVudCB7XG4gIHByaXZhdGUgcmF0ZUxpbWl0SW5mbz86IFJhdGVMaW1pdEluZm87XG4gIHByaXZhdGUgcmVmcmVzaGluZzogUHJvbWlzZTxib29sZWFuPiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgZ2V0QmFzZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRDb25maWdWYWx1ZShcImJhc2VVcmxcIikgfHwgXCJodHRwczovL3NlbmRseS5saXZlXCI7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUF1dGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgdG9rZW4gPSBnZXRBdXRoVG9rZW4oKTtcbiAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtcblxuICAgIGNvbnN0IHN0b3JlZCA9IGdldFN0b3JlZEFjY2Vzc1Rva2VuKCk7XG4gICAgaWYgKHN0b3JlZD8uc3RhcnRzV2l0aChcImNsaV9cIikpIHtcbiAgICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VucygpO1xuICAgICAgaWYgKHJlZnJlc2hlZCkge1xuICAgICAgICB0b2tlbiA9IGdldEF1dGhUb2tlbigpO1xuICAgICAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRIZWFkZXJzKHJlcXVpcmVBdXRoOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcIlVzZXItQWdlbnRcIjogYEBzZW5kbHkvY2xpLyR7dmVyc2lvbn1gLFxuICAgIH07XG5cbiAgICBpZiAocmVxdWlyZUF1dGgpIHtcbiAgICAgIGhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke2F3YWl0IHRoaXMuZW5zdXJlQXV0aCgpfWA7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JnSWQgPSBnZXRFZmZlY3RpdmVWYWx1ZShcImN1cnJlbnRPcmdJZFwiKTtcbiAgICBpZiAob3JnSWQpIHtcbiAgICAgIGhlYWRlcnNbXCJYLU9yZ2FuaXphdGlvbi1JZFwiXSA9IG9yZ0lkO1xuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoVG9rZW5zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnJlZnJlc2hpbmcpIHJldHVybiB0aGlzLnJlZnJlc2hpbmc7XG5cbiAgICB0aGlzLnJlZnJlc2hpbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVkID0gZ2V0U3RvcmVkQWNjZXNzVG9rZW4oKTtcbiAgICAgIGlmICghc3RvcmVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5nZXRCYXNlVXJsKCl9L2FwaS9jbGkvYXV0aC9yZWZyZXNoYCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogYEBzZW5kbHkvY2xpLyR7dmVyc2lvbn1gLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY2Nlc3NUb2tlbjogc3RvcmVkIH0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7XG4gICAgICAgICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICAgICAgICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgICAgICAgICBleHBpcmVzSW46IG51bWJlcjtcbiAgICAgICAgICB1c2VySWQ6IHN0cmluZztcbiAgICAgICAgICBlbWFpbDogc3RyaW5nO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNldEF1dGhUb2tlbnMoXG4gICAgICAgICAgZGF0YS5hY2Nlc3NUb2tlbixcbiAgICAgICAgICBkYXRhLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBkYXRhLmV4cGlyZXNJbixcbiAgICAgICAgICBkYXRhLnVzZXJJZCxcbiAgICAgICAgICBkYXRhLmVtYWlsLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlZnJlc2hpbmc7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVmcmVzaGluZyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVxdWVzdDxUPihcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYm9keT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgICAgIHJlcXVpcmVBdXRoPzogYm9vbGVhbjtcbiAgICB9ID0ge30sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHsgYm9keSwgcXVlcnksIHJlcXVpcmVBdXRoID0gdHJ1ZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBtYXhSZXRyaWVzID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJtYXhSZXRyaWVzXCIpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBnZXRFZmZlY3RpdmVWYWx1ZShcInRpbWVvdXRcIik7XG5cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke3RoaXMuZ2V0QmFzZVVybCgpfSR7cGF0aH1gKTtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHF1ZXJ5KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZGlkUmVmcmVzaCA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gbWF4UmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgdGltZW91dCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwudG9TdHJpbmcoKSwge1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiBhd2FpdCB0aGlzLmdldEhlYWRlcnMocmVxdWlyZUF1dGgpLFxuICAgICAgICAgIGJvZHk6IGJvZHkgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9KTtcblxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVJhdGVMaW1pdEluZm8ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgcmVxdWlyZUF1dGggJiYgIWRpZFJlZnJlc2gpIHtcbiAgICAgICAgICBkaWRSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbnMoKTtcbiAgICAgICAgICBpZiAocmVmcmVzaGVkKSB7XG4gICAgICAgICAgICBhdHRlbXB0LS07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZXNwb25zZS5zdGF0dXMsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGFzIEVycm9yO1xuXG4gICAgICAgIGlmICghaXNSZXRyeWFibGVFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRlbXB0ID09PSBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYWNrb2ZmTXMgPSBNYXRoLm1pbigxMDAwICogTWF0aC5wb3coMiwgYXR0ZW1wdCksIDEwMDAwKTtcbiAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZk1zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBsYXN0RXJyb3IgfHwgbmV3IEVycm9yKFwiUmVxdWVzdCBmYWlsZWRcIik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJhdGVMaW1pdEluZm8oaGVhZGVyczogSGVhZGVycyk6IHZvaWQge1xuICAgIGNvbnN0IGxpbWl0ID0gaGVhZGVycy5nZXQoXCJYLVJhdGVMaW1pdC1MaW1pdFwiKTtcbiAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldChcIlgtUmF0ZUxpbWl0LVJlbWFpbmluZ1wiKTtcbiAgICBjb25zdCByZXNldCA9IGhlYWRlcnMuZ2V0KFwiWC1SYXRlTGltaXQtUmVzZXRcIik7XG5cbiAgICBpZiAobGltaXQgJiYgcmVtYWluaW5nICYmIHJlc2V0KSB7XG4gICAgICB0aGlzLnJhdGVMaW1pdEluZm8gPSB7XG4gICAgICAgIGxpbWl0OiBwYXJzZUludChsaW1pdCwgMTApLFxuICAgICAgICByZW1haW5pbmc6IHBhcnNlSW50KHJlbWFpbmluZywgMTApLFxuICAgICAgICByZXNldDogcGFyc2VJbnQocmVzZXQsIDEwKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihzdGF0dXNDb2RlOiBudW1iZXIsIGRhdGE6IGFueSk6IG5ldmVyIHtcbiAgICBjb25zdCBlcnJvciA9IGRhdGE/LmVycm9yIHx8IFwidW5rbm93bl9lcnJvclwiO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBkYXRhPy5tZXNzYWdlIHx8IGBIVFRQICR7c3RhdHVzQ29kZX1gO1xuICAgIGNvbnN0IGRldGFpbHMgPSBkYXRhPy5kZXRhaWxzO1xuXG4gICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICAvLyBEZXRlY3QgaWYgdGhpcyBpcyBhbiBBUEkga2V5IHJlcXVpcmVkIGVycm9yIHZzIGdlbmVyYWwgYXV0aCBlcnJvclxuICAgICAgICBpZiAoXG4gICAgICAgICAgZXJyb3IgPT09IFwiaW52YWxpZF9hcGlfa2V5XCIgfHxcbiAgICAgICAgICBlcnJvciA9PT0gXCJhcGlfa2V5X3JlcXVpcmVkXCIgfHxcbiAgICAgICAgICBtZXNzYWdlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYXBpIGtleVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXBpS2V5UmVxdWlyZWRFcnJvcihcbiAgICAgICAgICAgIFwiQVBJIGtleSByZXF1aXJlZCBmb3Igc2VuZGluZyBtZXNzYWdlc1wiLFxuICAgICAgICAgICAgXCJTZXQgU0VORExZX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgY3JlYXRlIGEga2V5IHdpdGg6XFxuICBzZW5kbHkga2V5cyBjcmVhdGUgLS10eXBlIHRlc3RcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKG1lc3NhZ2UpO1xuICAgICAgY2FzZSA0MDA6XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZGV0YWlscyk7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgdGhyb3cgbmV3IEluc3VmZmljaWVudENyZWRpdHNFcnJvcihtZXNzYWdlKTtcbiAgICAgIGNhc2UgNDA0OlxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihtZXNzYWdlKTtcbiAgICAgIGNhc2UgNDI5OlxuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gZGF0YT8ucmV0cnlBZnRlciB8fCA2MDtcbiAgICAgICAgdGhyb3cgbmV3IFJhdGVMaW1pdEVycm9yKHJldHJ5QWZ0ZXIsIG1lc3NhZ2UpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc3QgZGVmYXVsdEhpbnQgPVxuICAgICAgICAgIHN0YXR1c0NvZGUgPj0gNTAwXG4gICAgICAgICAgICA/IFwiVGhpcyBpcyBhIHNlcnZlciBlcnJvci4gVHJ5IGFnYWluIGxhdGVyIG9yIGNoZWNrIGh0dHBzOi8vc3RhdHVzLnNlbmRseS5saXZlXCJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBuZXcgQXBpRXJyb3IoZXJyb3IsIG1lc3NhZ2UsIHN0YXR1c0NvZGUsIGRldGFpbHMsIGRlZmF1bHRIaW50KTtcbiAgICB9XG4gIH1cblxuICBnZXRSYXRlTGltaXRJbmZvKCk6IFJhdGVMaW1pdEluZm8gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJhdGVMaW1pdEluZm87XG4gIH1cblxuICAvLyBDb252ZW5pZW5jZSBtZXRob2RzXG4gIGFzeW5jIGdldDxUPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPixcbiAgICByZXF1aXJlQXV0aDogYm9vbGVhbiA9IHRydWUsXG4gICk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oXCJHRVRcIiwgcGF0aCwgeyBxdWVyeSwgcmVxdWlyZUF1dGggfSk7XG4gIH1cblxuICBhc3luYyBwb3N0PFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBib2R5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwiUE9TVFwiLCBwYXRoLCB7IGJvZHksIHJlcXVpcmVBdXRoIH0pO1xuICB9XG5cbiAgYXN5bmMgcGF0Y2g8VD4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICByZXF1aXJlQXV0aDogYm9vbGVhbiA9IHRydWUsXG4gICk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oXCJQQVRDSFwiLCBwYXRoLCB7IGJvZHksIHJlcXVpcmVBdXRoIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlPFQ+KHBhdGg6IHN0cmluZywgcmVxdWlyZUF1dGg6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPihcIkRFTEVURVwiLCBwYXRoLCB7IHJlcXVpcmVBdXRoIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZCBhIGZpbGUgdXNpbmcgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuICAgKiBVc2VkIGZvciBiYXRjaCBDU1YgdXBsb2FkcyB0byBSMiBzdG9yYWdlXG4gICAqL1xuICBhc3luYyB1cGxvYWRGaWxlPFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBmaWxlOiB7XG4gICAgICBidWZmZXI6IEJ1ZmZlcjtcbiAgICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICBtaW1ldHlwZT86IHN0cmluZztcbiAgICB9LFxuICAgIHJlcXVpcmVBdXRoOiBib29sZWFuID0gdHJ1ZSxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IGdldEVmZmVjdGl2ZVZhbHVlKFwibWF4UmV0cmllc1wiKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJ0aW1lb3V0XCIpO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QmFzZVVybCgpfSR7cGF0aH1gO1xuXG4gICAgLy8gQnVpbGQgbXVsdGlwYXJ0IGZvcm0gZGF0YSBtYW51YWxseSAoTm9kZS5qcyBjb21wYXRpYmxlKVxuICAgIGNvbnN0IGJvdW5kYXJ5ID0gYC0tLS1Gb3JtQm91bmRhcnkke0RhdGUubm93KCl9JHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMil9YDtcbiAgICBjb25zdCBtaW1ldHlwZSA9IGZpbGUubWltZXR5cGUgfHwgXCJ0ZXh0L2NzdlwiO1xuXG4gICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmZyb20oXG4gICAgICBgLS0ke2JvdW5kYXJ5fVxcclxcbmAgK1xuICAgICAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiZmlsZVwiOyBmaWxlbmFtZT1cIiR7ZmlsZS5maWxlbmFtZX1cIlxcclxcbmAgK1xuICAgICAgICBgQ29udGVudC1UeXBlOiAke21pbWV0eXBlfVxcclxcblxcclxcbmAsXG4gICAgKTtcbiAgICBjb25zdCBmb290ZXIgPSBCdWZmZXIuZnJvbShgXFxyXFxuLS0ke2JvdW5kYXJ5fS0tXFxyXFxuYCk7XG4gICAgY29uc3QgYm9keSA9IEJ1ZmZlci5jb25jYXQoW2hlYWRlciwgZmlsZS5idWZmZXIsIGZvb3Rlcl0pO1xuXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke2JvdW5kYXJ5fWAsXG4gICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgXCJVc2VyLUFnZW50XCI6IGBAc2VuZGx5L2NsaS8ke3ZlcnNpb259YCxcbiAgICB9O1xuXG4gICAgaWYgKHJlcXVpcmVBdXRoKSB7XG4gICAgICBoZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHthd2FpdCB0aGlzLmVuc3VyZUF1dGgoKX1gO1xuICAgIH1cblxuICAgIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGxldCBkaWRSZWZyZXNoID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBtYXhSZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0KTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlUmF0ZUxpbWl0SW5mbyhyZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgcmVxdWlyZUF1dGggJiYgIWRpZFJlZnJlc2gpIHtcbiAgICAgICAgICBkaWRSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbnMoKTtcbiAgICAgICAgICBpZiAocmVmcmVzaGVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHtnZXRBdXRoVG9rZW4oKX1gO1xuICAgICAgICAgICAgYXR0ZW1wdC0tO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IocmVzcG9uc2Uuc3RhdHVzLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsYXN0RXJyb3IgPSBlcnJvciBhcyBFcnJvcjtcblxuICAgICAgICBpZiAoIWlzUmV0cnlhYmxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXR0ZW1wdCA9PT0gbWF4UmV0cmllcykge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFja29mZk1zID0gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGF0dGVtcHQpLCAxMDAwMCk7XG4gICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmZNcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcihcIlVwbG9hZCBmYWlsZWRcIik7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGFwaUNsaWVudCA9IG5ldyBBcGlDbGllbnQoKTtcbiJdfQ==
|
package/oclif.manifest.json
CHANGED
|
@@ -2407,12 +2407,15 @@
|
|
|
2407
2407
|
"sms:send": {
|
|
2408
2408
|
"aliases": [],
|
|
2409
2409
|
"args": {},
|
|
2410
|
-
"description": "Send an SMS message",
|
|
2410
|
+
"description": "Send an SMS or MMS message",
|
|
2411
2411
|
"examples": [
|
|
2412
2412
|
"<%= config.bin %> sms send --to +15551234567 --text \"Hello!\"",
|
|
2413
2413
|
"<%= config.bin %> sms send --to +15551234567 --text \"Hello!\" --from \"Sendly\"",
|
|
2414
2414
|
"<%= config.bin %> sms send --to +15551234567 --text \"Hello!\" --type transactional",
|
|
2415
|
-
"<%= config.bin %> sms send --to +15551234567 --text \"Hello!\" --json"
|
|
2415
|
+
"<%= config.bin %> sms send --to +15551234567 --text \"Hello!\" --json",
|
|
2416
|
+
"<%= config.bin %> sms send --to +15551234567 --text \"Check this out\" --media-url https://example.com/image.jpg",
|
|
2417
|
+
"<%= config.bin %> sms send --to +15551234567 --media-url https://example.com/image.jpg",
|
|
2418
|
+
"<%= config.bin %> sms send --to +15551234567 --text \"Two images\" --media-url https://example.com/a.jpg --media-url https://example.com/b.jpg"
|
|
2416
2419
|
],
|
|
2417
2420
|
"flags": {
|
|
2418
2421
|
"json": {
|
|
@@ -2439,9 +2442,8 @@
|
|
|
2439
2442
|
},
|
|
2440
2443
|
"text": {
|
|
2441
2444
|
"char": "m",
|
|
2442
|
-
"description": "Message text",
|
|
2445
|
+
"description": "Message text (optional when --media-url is provided)",
|
|
2443
2446
|
"name": "text",
|
|
2444
|
-
"required": true,
|
|
2445
2447
|
"hasDynamicHelp": false,
|
|
2446
2448
|
"multiple": false,
|
|
2447
2449
|
"type": "option"
|
|
@@ -2465,6 +2467,13 @@
|
|
|
2465
2467
|
"transactional"
|
|
2466
2468
|
],
|
|
2467
2469
|
"type": "option"
|
|
2470
|
+
},
|
|
2471
|
+
"media-url": {
|
|
2472
|
+
"description": "Media URL to attach (MMS). Can be specified multiple times.",
|
|
2473
|
+
"name": "media-url",
|
|
2474
|
+
"hasDynamicHelp": false,
|
|
2475
|
+
"multiple": true,
|
|
2476
|
+
"type": "option"
|
|
2468
2477
|
}
|
|
2469
2478
|
},
|
|
2470
2479
|
"hasDynamicHelp": false,
|
|
@@ -4253,5 +4262,5 @@
|
|
|
4253
4262
|
]
|
|
4254
4263
|
}
|
|
4255
4264
|
},
|
|
4256
|
-
"version": "3.
|
|
4265
|
+
"version": "3.18.0"
|
|
4257
4266
|
}
|