@pagopa/dx-cli 0.24.0 → 0.25.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/README.md +14 -0
- package/bin/index.js +13 -3
- package/dist/adapters/azure/cloud-account-service.js +32 -1
- package/dist/adapters/azure-monitor/instrumentation.d.ts +26 -0
- package/dist/adapters/azure-monitor/instrumentation.js +84 -0
- package/dist/adapters/azure-monitor/telemetry.d.ts +19 -0
- package/dist/adapters/azure-monitor/telemetry.js +28 -0
- package/dist/adapters/commander/commands/add.d.ts +32 -7
- package/dist/adapters/commander/commands/add.js +197 -15
- package/dist/adapters/commander/commands/doctor.js +4 -1
- package/dist/adapters/octokit/index.d.ts +12 -0
- package/dist/adapters/octokit/index.js +26 -2
- package/dist/adapters/plop/actions/setup-pnpm.js +5 -1
- package/dist/adapters/plop/actions/sync-repository-environments.d.ts +15 -0
- package/dist/adapters/plop/actions/sync-repository-environments.js +98 -0
- package/dist/adapters/plop/generators/environment/actions.js +4 -1
- package/dist/adapters/plop/generators/environment/index.d.ts +3 -3
- package/dist/adapters/plop/generators/environment/index.js +6 -3
- package/dist/adapters/plop/generators/environment/prompts.d.ts +38 -0
- package/dist/adapters/plop/generators/environment/prompts.js +236 -91
- package/dist/adapters/plop/index.d.ts +3 -3
- package/dist/adapters/plop/index.js +5 -5
- package/dist/domain/authorization.js +4 -4
- package/dist/index.js +132 -8
- package/package.json +9 -1
|
@@ -6,7 +6,7 @@ import * as azure from "../../../azure/locations.js";
|
|
|
6
6
|
import { getLogger } from "@logtape/logtape";
|
|
7
7
|
import { z } from "zod/v4";
|
|
8
8
|
import { githubRepoSchema, } from "../../../../domain/github-repo.js";
|
|
9
|
-
import { githubAppCredentialsSchema } from "../../../../domain/github.js";
|
|
9
|
+
import { githubAppCredentialsSchema, } from "../../../../domain/github.js";
|
|
10
10
|
import { getGithubRepo } from "../../../github/github-repo.js";
|
|
11
11
|
import { validatePrompt } from "../../helpers/validate-prompt.js";
|
|
12
12
|
const initSchema = z.object({
|
|
@@ -35,14 +35,82 @@ export const payloadSchema = z.object({
|
|
|
35
35
|
tags: tagsSchema,
|
|
36
36
|
workspace: workspaceSchema,
|
|
37
37
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
{
|
|
38
|
+
/**
|
|
39
|
+
* Prefilled answers supplied up-front by the caller (e.g. CLI flags), used to
|
|
40
|
+
* skip the matching prompts. Identifies cloud accounts by id and locations by
|
|
41
|
+
* account id, since the full domain objects aren't available before resolving.
|
|
42
|
+
*/
|
|
43
|
+
export const initialAnswersSchema = z.object({
|
|
44
|
+
env: z
|
|
45
|
+
.object({
|
|
46
|
+
cloudAccountIds: z.array(z.string().trim().min(1)).optional(),
|
|
47
|
+
locations: z
|
|
48
|
+
.record(z.string().min(1), z.enum(azure.locations))
|
|
49
|
+
.optional(),
|
|
50
|
+
name: environmentSchema.shape.name.optional(),
|
|
51
|
+
prefix: environmentSchema.shape.prefix.optional(),
|
|
52
|
+
})
|
|
53
|
+
.optional(),
|
|
54
|
+
init: z
|
|
55
|
+
.object({
|
|
56
|
+
confirm: z.boolean().optional(),
|
|
57
|
+
runnerAppCredentials: githubAppCredentialsSchema.partial().optional(),
|
|
58
|
+
})
|
|
59
|
+
.optional(),
|
|
60
|
+
tags: z
|
|
61
|
+
.object({
|
|
62
|
+
BusinessUnit: z.string().trim().min(1).optional(),
|
|
63
|
+
ManagementTeam: z.string().trim().min(1).optional(),
|
|
64
|
+
})
|
|
65
|
+
.optional(),
|
|
66
|
+
workspace: z
|
|
67
|
+
.object({
|
|
68
|
+
domain: workspaceSchema.shape.domain.optional(),
|
|
69
|
+
})
|
|
70
|
+
.optional(),
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Answers gathered from the interactive base prompts. Mirrors {@link initialAnswersSchema}
|
|
74
|
+
* but holds the values produced by the prompt session: cloud accounts are full
|
|
75
|
+
* domain objects (resolved from inquirer choices) rather than ids. Only questions
|
|
76
|
+
* not already prefilled are asked, so every field is optional here too.
|
|
77
|
+
*/
|
|
78
|
+
const basePromptAnswersSchema = z.object({
|
|
79
|
+
env: z
|
|
80
|
+
.object({
|
|
81
|
+
cloudAccounts: z.array(cloudAccountSchema).optional(),
|
|
82
|
+
name: environmentSchema.shape.name.optional(),
|
|
83
|
+
prefix: environmentSchema.shape.prefix.optional(),
|
|
84
|
+
})
|
|
85
|
+
.optional(),
|
|
86
|
+
tags: z
|
|
87
|
+
.object({
|
|
88
|
+
BusinessUnit: z.string().trim().min(1).optional(),
|
|
89
|
+
ManagementTeam: z.string().trim().min(1).optional(),
|
|
90
|
+
})
|
|
91
|
+
.optional(),
|
|
92
|
+
workspace: z
|
|
93
|
+
.object({
|
|
94
|
+
domain: workspaceSchema.shape.domain.optional(),
|
|
95
|
+
})
|
|
96
|
+
.optional(),
|
|
97
|
+
});
|
|
98
|
+
const DEFAULT_COST_CENTER = "TS000";
|
|
99
|
+
const resolveCloudAccounts = (availableCloudAccounts, initialAnswers) => {
|
|
100
|
+
const cloudAccountIds = initialAnswers.env?.cloudAccountIds;
|
|
101
|
+
if (cloudAccountIds === undefined) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
return cloudAccountIds.map((cloudAccountId) => {
|
|
105
|
+
const cloudAccount = availableCloudAccounts.find((account) => account.id === cloudAccountId);
|
|
106
|
+
assert.ok(cloudAccount, `Cloud account "${cloudAccountId}" was not found.`);
|
|
107
|
+
return { ...cloudAccount };
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
const getBaseQuestions = (availableCloudAccounts, initialAnswers, selectedCloudAccounts) => {
|
|
111
|
+
const questions = [];
|
|
112
|
+
if (initialAnswers.env?.name === undefined) {
|
|
113
|
+
questions.push({
|
|
46
114
|
choices: [
|
|
47
115
|
{ name: "PROD", value: "prod" },
|
|
48
116
|
{ name: "UAT", value: "uat" },
|
|
@@ -52,19 +120,11 @@ const prompts = (deps) => async (inquirer) => {
|
|
|
52
120
|
message: "Environment name",
|
|
53
121
|
name: "env.name",
|
|
54
122
|
type: "list",
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
name: "csp",
|
|
61
|
-
type: "checkbox",
|
|
62
|
-
validate: (value) => Array.isArray(value) && value.length > 0
|
|
63
|
-
? true
|
|
64
|
-
: "Please select at least one cloud provider.",
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
choices: async () => getCloudAccountChoices(await deps.cloudAccountRepository.list()),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (selectedCloudAccounts === undefined) {
|
|
126
|
+
questions.push({
|
|
127
|
+
choices: getCloudAccountChoices(availableCloudAccounts),
|
|
68
128
|
loop: false,
|
|
69
129
|
message: "Account(s)",
|
|
70
130
|
name: "env.cloudAccounts",
|
|
@@ -72,76 +132,187 @@ const prompts = (deps) => async (inquirer) => {
|
|
|
72
132
|
validate: (value) => Array.isArray(value) && value.length > 0
|
|
73
133
|
? true
|
|
74
134
|
: "Please select a cloud account.",
|
|
75
|
-
}
|
|
76
|
-
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
if (initialAnswers.env?.prefix === undefined) {
|
|
138
|
+
questions.push({
|
|
77
139
|
filter: (value) => value.trim().toLowerCase(),
|
|
78
140
|
message: "Prefix (2-4 characters)",
|
|
79
141
|
name: "env.prefix",
|
|
80
142
|
type: "input",
|
|
81
143
|
validate: validatePrompt(environmentSchema.shape.prefix),
|
|
82
|
-
}
|
|
83
|
-
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
if (initialAnswers.workspace?.domain === undefined) {
|
|
147
|
+
questions.push({
|
|
84
148
|
filter: (value) => value.trim().toLowerCase(),
|
|
85
149
|
message: "Domain",
|
|
86
150
|
name: "workspace.domain",
|
|
87
151
|
type: "input",
|
|
88
152
|
validate: validatePrompt(workspaceSchema.shape.domain),
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
name: "TECNOLOGIA E SERVIZI",
|
|
94
|
-
value: "TS000",
|
|
95
|
-
},
|
|
96
|
-
],
|
|
97
|
-
default: "TS000 - Tecnologia e Servizi",
|
|
98
|
-
message: "Cost center",
|
|
99
|
-
name: "tags.CostCenter",
|
|
100
|
-
type: "list",
|
|
101
|
-
validate: (value) => Array.isArray(value) && value.length > 0
|
|
102
|
-
? true
|
|
103
|
-
: "Please select a Cost Center.",
|
|
104
|
-
},
|
|
105
|
-
{
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (initialAnswers.tags?.BusinessUnit === undefined) {
|
|
156
|
+
questions.push({
|
|
106
157
|
filter: (value) => value.trim(),
|
|
107
158
|
message: "Business unit",
|
|
108
159
|
name: "tags.BusinessUnit",
|
|
109
160
|
validate: (value) => value.length > 0 ? true : "Business Unit cannot be empty.",
|
|
110
|
-
}
|
|
111
|
-
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
if (initialAnswers.tags?.ManagementTeam === undefined) {
|
|
164
|
+
questions.push({
|
|
112
165
|
filter: (value) => value.trim(),
|
|
113
166
|
message: "Management team",
|
|
114
167
|
name: "tags.ManagementTeam",
|
|
115
168
|
validate: (value) => value.length > 0 ? true : "Management Team cannot be empty.",
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return questions;
|
|
172
|
+
};
|
|
173
|
+
const getSelectedCloudAccounts = (answers, initialCloudAccounts) => {
|
|
174
|
+
const promptedCloudAccounts = answers.env?.cloudAccounts;
|
|
175
|
+
const selectedCloudAccounts = initialCloudAccounts ?? promptedCloudAccounts;
|
|
176
|
+
assert.ok(Array.isArray(selectedCloudAccounts) && selectedCloudAccounts.length > 0, "Please select a cloud account.");
|
|
177
|
+
return selectedCloudAccounts.map((cloudAccount) => ({ ...cloudAccount }));
|
|
178
|
+
};
|
|
179
|
+
const applyLocations = async (promptModule, selectedCloudAccounts, initialAnswers) => {
|
|
180
|
+
const predefinedLocations = initialAnswers.env?.locations ?? {};
|
|
181
|
+
const locationQuestions = selectedCloudAccounts
|
|
182
|
+
.filter((account) => predefinedLocations[account.id] === undefined)
|
|
183
|
+
.map((account) => ({
|
|
120
184
|
choices: getCloudLocationChoices(azure.cloudRegions),
|
|
121
185
|
default: azure.defaultLocation,
|
|
122
186
|
message: `Default location for ${account.displayName}`,
|
|
123
187
|
name: account.id,
|
|
124
188
|
type: "list",
|
|
125
|
-
}))
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
189
|
+
}));
|
|
190
|
+
const promptedLocations = locationQuestions.length === 0
|
|
191
|
+
? {}
|
|
192
|
+
: await promptModule.prompt(locationQuestions);
|
|
193
|
+
selectedCloudAccounts.forEach((account) => {
|
|
194
|
+
const location = predefinedLocations[account.id] ?? promptedLocations[account.id];
|
|
195
|
+
if (location !== undefined) {
|
|
129
196
|
account.defaultLocation = location;
|
|
130
197
|
}
|
|
131
198
|
});
|
|
199
|
+
};
|
|
200
|
+
const parseInitialAnswers = (input) => {
|
|
201
|
+
const result = initialAnswersSchema.safeParse(input ?? {});
|
|
202
|
+
assert.ok(result.success, "Invalid initial answers for the environment generator.");
|
|
203
|
+
return result.data;
|
|
204
|
+
};
|
|
205
|
+
const getRunnerAppCredentialQuestions = (initialRunnerAppCredentials) => {
|
|
206
|
+
const questions = [];
|
|
207
|
+
if (initialRunnerAppCredentials.id === undefined) {
|
|
208
|
+
questions.push({
|
|
209
|
+
filter: (value) => value.trim(),
|
|
210
|
+
message: "GitHub Runner App ID",
|
|
211
|
+
name: "runnerAppCredentials.id",
|
|
212
|
+
type: "input",
|
|
213
|
+
validate: (value) => value.length > 0,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
if (initialRunnerAppCredentials.clientId === undefined) {
|
|
217
|
+
questions.push({
|
|
218
|
+
filter: (value) => value.trim(),
|
|
219
|
+
message: "GitHub Runner App Client ID",
|
|
220
|
+
name: "runnerAppCredentials.clientId",
|
|
221
|
+
type: "input",
|
|
222
|
+
validate: (value) => value.length > 0,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
if (initialRunnerAppCredentials.installationId === undefined) {
|
|
226
|
+
questions.push({
|
|
227
|
+
filter: (value) => value.trim(),
|
|
228
|
+
message: "GitHub Runner App Installation ID",
|
|
229
|
+
name: "runnerAppCredentials.installationId",
|
|
230
|
+
type: "input",
|
|
231
|
+
validate: (value) => value.length > 0,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
if (initialRunnerAppCredentials.key === undefined) {
|
|
235
|
+
questions.push({
|
|
236
|
+
filter: (value) => value.trim(),
|
|
237
|
+
message: "GitHub Runner App Private Key",
|
|
238
|
+
name: "runnerAppCredentials.key",
|
|
239
|
+
type: "editor",
|
|
240
|
+
validate: (value) => value.length > 0,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
return questions;
|
|
244
|
+
};
|
|
245
|
+
const mergeRunnerAppCredentials = (initialRunnerAppCredentials, promptedRunnerAppCredentials) => {
|
|
246
|
+
const runnerAppCredentials = {
|
|
247
|
+
clientId: initialRunnerAppCredentials.clientId ??
|
|
248
|
+
promptedRunnerAppCredentials?.clientId,
|
|
249
|
+
id: initialRunnerAppCredentials.id ?? promptedRunnerAppCredentials?.id,
|
|
250
|
+
installationId: initialRunnerAppCredentials.installationId ??
|
|
251
|
+
promptedRunnerAppCredentials?.installationId,
|
|
252
|
+
key: initialRunnerAppCredentials.key ?? promptedRunnerAppCredentials?.key,
|
|
253
|
+
};
|
|
254
|
+
if (Object.values(runnerAppCredentials).every((value) => value === undefined)) {
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
return githubAppCredentialsSchema.parse(runnerAppCredentials);
|
|
258
|
+
};
|
|
259
|
+
const collectBaseAnswers = async (promptModule, availableCloudAccounts, initialAnswers) => {
|
|
260
|
+
const initialCloudAccounts = resolveCloudAccounts(availableCloudAccounts, initialAnswers);
|
|
261
|
+
const baseQuestions = getBaseQuestions(availableCloudAccounts, initialAnswers, initialCloudAccounts);
|
|
262
|
+
const promptAnswersResult = basePromptAnswersSchema.safeParse(baseQuestions.length === 0 ? {} : await promptModule.prompt(baseQuestions));
|
|
263
|
+
assert.ok(promptAnswersResult.success, "Invalid environment prompt answers.");
|
|
264
|
+
return {
|
|
265
|
+
answers: promptAnswersResult.data,
|
|
266
|
+
initialCloudAccounts,
|
|
267
|
+
};
|
|
268
|
+
};
|
|
269
|
+
const buildPayload = ({ answers, github, initialAnswers, selectedCloudAccounts, }) => payloadSchema.parse({
|
|
270
|
+
env: {
|
|
271
|
+
cloudAccounts: selectedCloudAccounts,
|
|
272
|
+
name: initialAnswers.env?.name ?? answers.env?.name,
|
|
273
|
+
prefix: initialAnswers.env?.prefix ?? answers.env?.prefix,
|
|
274
|
+
},
|
|
275
|
+
github,
|
|
276
|
+
tags: {
|
|
277
|
+
BusinessUnit: initialAnswers.tags?.BusinessUnit ?? answers.tags?.BusinessUnit,
|
|
278
|
+
CostCenter: DEFAULT_COST_CENTER,
|
|
279
|
+
ManagementTeam: initialAnswers.tags?.ManagementTeam ?? answers.tags?.ManagementTeam,
|
|
280
|
+
},
|
|
281
|
+
workspace: {
|
|
282
|
+
domain: initialAnswers.workspace?.domain ?? answers.workspace?.domain,
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
const prompts = (deps) => async (promptModule) => {
|
|
286
|
+
const logger = getLogger(["gen", "env"]);
|
|
287
|
+
const github = deps.github ?? (await getGithubRepo());
|
|
288
|
+
assert.ok(github, "This generator only works inside a GitHub repository.");
|
|
289
|
+
const initialAnswers = parseInitialAnswers(deps.initialAnswers);
|
|
290
|
+
logger.debug("github repo {github}", { github });
|
|
291
|
+
const availableCloudAccounts = await deps.cloudAccountRepository.list();
|
|
292
|
+
const { answers, initialCloudAccounts } = await collectBaseAnswers(promptModule, availableCloudAccounts, initialAnswers);
|
|
293
|
+
const selectedCloudAccounts = getSelectedCloudAccounts(answers, initialCloudAccounts);
|
|
294
|
+
await applyLocations(promptModule, selectedCloudAccounts, initialAnswers);
|
|
295
|
+
const payload = buildPayload({
|
|
296
|
+
answers,
|
|
297
|
+
github,
|
|
298
|
+
initialAnswers,
|
|
299
|
+
selectedCloudAccounts,
|
|
300
|
+
});
|
|
132
301
|
const initStatus = await getInitializationStatus(deps.cloudAccountService, payload.env);
|
|
133
302
|
logger.debug("initialization status {initStatus}", { initStatus });
|
|
134
303
|
if (initStatus.initialized) {
|
|
135
304
|
return payload;
|
|
136
305
|
}
|
|
137
306
|
console.log(formatInitializationDetails(initStatus));
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
307
|
+
if (initialAnswers.init?.confirm !== true) {
|
|
308
|
+
const initConfirm = await promptModule.prompt({
|
|
309
|
+
default: true,
|
|
310
|
+
message: `The environment "${payload.env.name}" is not initialized. Proceed with the setup above?`,
|
|
311
|
+
name: "init",
|
|
312
|
+
type: "confirm",
|
|
313
|
+
});
|
|
314
|
+
assert.ok(initConfirm.init, "Can't proceed without initialization");
|
|
315
|
+
}
|
|
145
316
|
assert.ok(await hasUserPermissionToInitialize(deps.cloudAccountService, payload.env), "You don't have permission to initialize this environment. Ask your Engineering Leader to initialize it for you.");
|
|
146
317
|
const missingRemoteBackend = initStatus.issues.some((issue) => issue.type === "MISSING_REMOTE_BACKEND");
|
|
147
318
|
const questions = [];
|
|
@@ -162,41 +333,15 @@ const prompts = (deps) => async (inquirer) => {
|
|
|
162
333
|
}
|
|
163
334
|
}
|
|
164
335
|
const cloudAccountsNotInitialized = initStatus.issues.some((issue) => issue.type === "CLOUD_ACCOUNT_NOT_INITIALIZED");
|
|
165
|
-
|
|
336
|
+
const initialRunnerAppCredentials = initialAnswers.init?.runnerAppCredentials ?? {};
|
|
166
337
|
if (cloudAccountsNotInitialized) {
|
|
167
|
-
questions.push(
|
|
168
|
-
filter: (value) => value.trim(),
|
|
169
|
-
message: "GitHub Runner App ID",
|
|
170
|
-
name: "runnerAppCredentials.id",
|
|
171
|
-
type: "input",
|
|
172
|
-
validate: (value) => value.length > 0,
|
|
173
|
-
}, {
|
|
174
|
-
filter: (value) => value.trim(),
|
|
175
|
-
message: "GitHub Runner App Client ID",
|
|
176
|
-
name: "runnerAppCredentials.clientId",
|
|
177
|
-
type: "input",
|
|
178
|
-
validate: (value) => value.length > 0,
|
|
179
|
-
}, {
|
|
180
|
-
filter: (value) => value.trim(),
|
|
181
|
-
message: "GitHub Runner App Installation ID",
|
|
182
|
-
name: "runnerAppCredentials.installationId",
|
|
183
|
-
type: "input",
|
|
184
|
-
validate: (value) => value.length > 0,
|
|
185
|
-
}, {
|
|
186
|
-
filter: (value) => value.trim(),
|
|
187
|
-
message: "GitHub Runner App Private Key",
|
|
188
|
-
name: "runnerAppCredentials.key",
|
|
189
|
-
type: "editor",
|
|
190
|
-
validate: (value) => value.length > 0,
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
const initInput = await inquirer.prompt(questions);
|
|
194
|
-
if (initInput.runnerAppCredentials) {
|
|
195
|
-
runnerAppCredentials = initInput.runnerAppCredentials;
|
|
338
|
+
questions.push(...getRunnerAppCredentialQuestions(initialRunnerAppCredentials));
|
|
196
339
|
}
|
|
340
|
+
const initInput = questions.length === 0 ? {} : await promptModule.prompt(questions);
|
|
197
341
|
if (initInput.terraformBackend) {
|
|
198
342
|
terraformBackend = initInput.terraformBackend;
|
|
199
343
|
}
|
|
344
|
+
const runnerAppCredentials = mergeRunnerAppCredentials(initialRunnerAppCredentials, initInput.runnerAppCredentials);
|
|
200
345
|
payload.init = payloadSchema.shape.init.parse({
|
|
201
346
|
cloudAccountsToInitialize: getCloudAccountToInitialize(initStatus),
|
|
202
347
|
runnerAppCredentials,
|
|
@@ -250,4 +395,4 @@ export const formatInitializationDetails = (initStatus) => {
|
|
|
250
395
|
].join("\n");
|
|
251
396
|
};
|
|
252
397
|
export default prompts;
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9wbG9wL2dlbmVyYXRvcnMvZW52aXJvbm1lbnQvcHJvbXB0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHMUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQztBQUU3QyxPQUFPLEVBR0wsa0JBQWtCLEdBR25CLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUVMLGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsNkJBQTZCLEdBQzlCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSw2QkFBNkIsQ0FBQztBQUlyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUzQixPQUFPLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVsRSxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFCLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUM7SUFDdEQsb0JBQW9CLEVBQUUsMEJBQTBCLENBQUMsUUFBUSxFQUFFO0lBQzNELGdCQUFnQixFQUFFLENBQUM7U0FDaEIsTUFBTSxDQUFDO1FBQ04sWUFBWSxFQUFFLGtCQUFrQjtLQUNqQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO0NBQ2QsQ0FBQyxDQUFDO0FBSUgsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFD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QUNYO1lBQ0UsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQztZQUNqRSxvRkFBb0Y7WUFDcEYsaURBQWlEO1lBQ2pELHVFQUF1RTtZQUN2RSxrRUFBa0U7U0FDbkUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLFFBQVEsQ0FBQyxJQUFJLENBQ1g7WUFDRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztZQUM5Qyx3RUFBd0U7U0FDekUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTztRQUNMLEVBQUU7UUFDRixLQUFLLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDO1FBQ3RELEVBQUU7UUFDRixHQUFHLFFBQVE7UUFDWCxFQUFFO0tBQ0gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixlQUFlLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBpbnF1aXJlciwgeyBEaXN0aW5jdFF1ZXN0aW9uIH0gZnJvbSBcImlucXVpcmVyXCI7XG5pbXBvcnQgeyB0eXBlIER5bmFtaWNQcm9tcHRzRnVuY3Rpb24gfSBmcm9tIFwibm9kZS1wbG9wXCI7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSBcIm5vZGU6YXNzZXJ0L3N0cmljdFwiO1xuXG5pbXBvcnQge1xuICBDbG91ZEFjY291bnQsXG4gIENsb3VkQWNjb3VudFJlcG9zaXRvcnksXG4gIGNsb3VkQWNjb3VudFNjaGVtYSxcbiAgQ2xvdWRBY2NvdW50U2VydmljZSxcbiAgQ2xvdWRSZWdpb24sXG59IGZyb20gXCIuLi8uLi8uLi8uLi9kb21haW4vY2xvdWQtYWNjb3VudC5qc1wiO1xuaW1wb3J0IHtcbiAgRW52aXJvbm1lbnRJbml0U3RhdHVzLFxuICBlbnZpcm9ubWVudFNjaGVtYSxcbiAgZ2V0SW5pdGlhbGl6YXRpb25TdGF0dXMsXG4gIGhhc1VzZXJQZXJtaXNzaW9uVG9Jbml0aWFsaXplLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vZG9tYWluL2Vudmlyb25tZW50LmpzXCI7XG5pbXBvcnQgKiBhcyBhenVyZSBmcm9tIFwiLi4vLi4vLi4vYXp1cmUvbG9jYXRpb25zLmpzXCI7XG5cbnR5cGUgSW5xdWlyZXJDaG9pY2U8VD4gPSBpbnF1aXJlci5TZXBhcmF0b3IgfCB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IFQgfTtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kL3Y0XCI7XG5cbmltcG9ydCB7XG4gIEdpdEh1YlJlcG8sXG4gIGdpdGh1YlJlcG9TY2hlbWEsXG59IGZyb20gXCIuLi8uLi8uLi8uLi9kb21haW4vZ2l0aHViLXJlcG8uanNcIjtcbmltcG9ydCB7IGdpdGh1YkFwcENyZWRlbnRpYWxzU2NoZW1hIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2RvbWFpbi9naXRodWIuanNcIjtcbmltcG9ydCB7IGdldEdpdGh1YlJlcG8gfSBmcm9tIFwiLi4vLi4vLi4vZ2l0aHViL2dpdGh1Yi1yZXBvLmpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVByb21wdCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL3ZhbGlkYXRlLXByb21wdC5qc1wiO1xuXG5jb25zdCBpbml0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjbG91ZEFjY291bnRzVG9Jbml0aWFsaXplOiB6LmFycmF5KGNsb3VkQWNjb3VudFNjaGVtYSksXG4gIHJ1bm5lckFwcENyZWRlbnRpYWxzOiBnaXRodWJBcHBDcmVkZW50aWFsc1NjaGVtYS5vcHRpb25hbCgpLFxuICB0ZXJyYWZvcm1CYWNrZW5kOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBjbG91ZEFjY291bnQ6IGNsb3VkQWNjb3VudFNjaGVtYSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxufSk7XG5cbnR5cGUgSW5pdFBheWxvYWQgPSB6LmluZmVyPHR5cGVvZiBpbml0U2NoZW1hPjtcblxuY29uc3QgdGFnc1NjaGVtYSA9IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkubWluKDEpKTtcblxuY29uc3Qgd29ya3NwYWNlRG9tYWluU2NoZW1hID0gelxuICAuc3RyaW5nKClcbiAgLnRyaW0oKVxuICAudG9Mb3dlckNhc2UoKVxuICAubWluKDEsIFwiRG9tYWluIGlzIHJlcXVpcmVkXCIpXG4gIC5yZWdleChcbiAgICAvXlthLXowLTktXSskLyxcbiAgICBcIkRvbWFpbiBtYXkgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVuc1wiLFxuICApO1xuXG5leHBvcnQgY29uc3Qgd29ya3NwYWNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBkb21haW46IHdvcmtzcGFjZURvbWFpblNjaGVtYSxcbn0pO1xuXG5leHBvcnQgY29uc3QgcGF5bG9hZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW52OiBlbnZpcm9ubWVudFNjaGVtYSxcbiAgZ2l0aHViOiBnaXRodWJSZXBvU2NoZW1hLFxuICBpbml0OiBpbml0U2NoZW1hLm9wdGlvbmFsKCksXG4gIHRhZ3M6IHRhZ3NTY2hlbWEsXG4gIHdvcmtzcGFjZTogd29ya3NwYWNlU2NoZW1hLFxufSk7XG5cbmV4cG9ydCB0eXBlIFBheWxvYWQgPSB6LmluZmVyPHR5cGVvZiBwYXlsb2FkU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgUHJvbXB0c0RlcGVuZGVuY2llcyA9IHtcbiAgY2xvdWRBY2NvdW50UmVwb3NpdG9yeTogQ2xvdWRBY2NvdW50UmVwb3NpdG9yeTtcbiAgY2xvdWRBY2NvdW50U2VydmljZTogQ2xvdWRBY2NvdW50U2VydmljZTtcbiAgZ2l0aHViPzogR2l0SHViUmVwbztcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcy1wZXItZnVuY3Rpb24gKi9cbmNvbnN0IHByb21wdHM6IChkZXBzOiBQcm9tcHRzRGVwZW5kZW5jaWVzKSA9PiBEeW5hbWljUHJvbXB0c0Z1bmN0aW9uID1cbiAgKGRlcHMpID0+IGFzeW5jIChpbnF1aXJlcikgPT4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuICAgIGNvbnN0IGdpdGh1YiA9IGRlcHMuZ2l0aHViID8/IChhd2FpdCBnZXRHaXRodWJSZXBvKCkpO1xuICAgIGFzc2VydC5vayhnaXRodWIsIFwiVGhpcyBnZW5lcmF0b3Igb25seSB3b3JrcyBpbnNpZGUgYSBHaXRIdWIgcmVwb3NpdG9yeS5cIik7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZ2l0aHViIHJlcG8ge2dpdGh1Yn1cIiwgeyBnaXRodWIgfSk7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IG5hbWU6IFwiUFJPRFwiLCB2YWx1ZTogXCJwcm9kXCIgfSxcbiAgICAgICAgICB7IG5hbWU6IFwiVUFUXCIsIHZhbHVlOiBcInVhdFwiIH0sXG4gICAgICAgICAgeyBuYW1lOiBcIkRFVlwiLCB2YWx1ZTogXCJkZXZcIiB9LFxuICAgICAgICBdLFxuICAgICAgICBkZWZhdWx0OiBcInByb2RcIixcbiAgICAgICAgbWVzc2FnZTogXCJFbnZpcm9ubWVudCBuYW1lXCIsXG4gICAgICAgIG5hbWU6IFwiZW52Lm5hbWVcIixcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjaG9pY2VzOiBbeyBuYW1lOiBcIk1pY3Jvc29mdCBBenVyZVwiLCB2YWx1ZTogXCJhenVyZVwiIH1dLFxuICAgICAgICBkZWZhdWx0OiBbXCJhenVyZVwiXSxcbiAgICAgICAgbWVzc2FnZTogXCJDbG91ZCBwcm92aWRlcihzKVwiLFxuICAgICAgICBuYW1lOiBcImNzcFwiLFxuICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgIHZhbGlkYXRlOiAodmFsdWUpID0+XG4gICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IFwiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgY2xvdWQgcHJvdmlkZXIuXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjaG9pY2VzOiBhc3luYyAoKSA9PlxuICAgICAgICAgIGdldENsb3VkQWNjb3VudENob2ljZXMoYXdhaXQgZGVwcy5jbG91ZEFjY291bnRSZXBvc2l0b3J5Lmxpc3QoKSksXG4gICAgICAgIGxvb3A6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBcIkFjY291bnQocylcIixcbiAgICAgICAgbmFtZTogXCJlbnYuY2xvdWRBY2NvdW50c1wiLFxuICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgIHZhbGlkYXRlOiAodmFsdWUpID0+XG4gICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IFwiUGxlYXNlIHNlbGVjdCBhIGNsb3VkIGFjY291bnQuXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWx0ZXI6ICh2YWx1ZTogc3RyaW5nKSA9PiB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgbWVzc2FnZTogXCJQcmVmaXggKDItNCBjaGFyYWN0ZXJzKVwiLFxuICAgICAgICBuYW1lOiBcImVudi5wcmVmaXhcIixcbiAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICB2YWxpZGF0ZTogdmFsaWRhdGVQcm9tcHQoZW52aXJvbm1lbnRTY2hlbWEuc2hhcGUucHJlZml4KSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpbHRlcjogKHZhbHVlOiBzdHJpbmcpID0+IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBtZXNzYWdlOiBcIkRvbWFpblwiLFxuICAgICAgICBuYW1lOiBcIndvcmtzcGFjZS5kb21haW5cIixcbiAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICB2YWxpZGF0ZTogdmFsaWRhdGVQcm9tcHQod29ya3NwYWNlU2NoZW1hLnNoYXBlLmRvbWFpbiksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJURUNOT0xPR0lBIEUgU0VSVklaSVwiLFxuICAgICAgICAgICAgdmFsdWU6IFwiVFMwMDBcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkZWZhdWx0OiBcIlRTMDAwIC0gVGVjbm9sb2dpYSBlIFNlcnZpemlcIixcbiAgICAgICAgbWVzc2FnZTogXCJDb3N0IGNlbnRlclwiLFxuICAgICAgICBuYW1lOiBcInRhZ3MuQ29zdENlbnRlclwiLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZSkgPT5cbiAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogXCJQbGVhc2Ugc2VsZWN0IGEgQ29zdCBDZW50ZXIuXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWx0ZXI6ICh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpLFxuICAgICAgICBtZXNzYWdlOiBcIkJ1c2luZXNzIHVuaXRcIixcbiAgICAgICAgbmFtZTogXCJ0YWdzLkJ1c2luZXNzVW5pdFwiLFxuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PlxuICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IDAgPyB0cnVlIDogXCJCdXNpbmVzcyBVbml0IGNhbm5vdCBiZSBlbXB0eS5cIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpbHRlcjogKHZhbHVlKSA9PiB2YWx1ZS50cmltKCksXG4gICAgICAgIG1lc3NhZ2U6IFwiTWFuYWdlbWVudCB0ZWFtXCIsXG4gICAgICAgIG5hbWU6IFwidGFncy5NYW5hZ2VtZW50VGVhbVwiLFxuICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PlxuICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IDAgPyB0cnVlIDogXCJNYW5hZ2VtZW50IFRlYW0gY2Fubm90IGJlIGVtcHR5LlwiLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2FkU2NoZW1hLnBhcnNlKHsgLi4uYW5zd2VycywgZ2l0aHViIH0pO1xuXG4gICAgY29uc3QgbG9jYXRpb25zID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFxuICAgICAgcGF5bG9hZC5lbnYuY2xvdWRBY2NvdW50cy5tYXAoKGFjY291bnQpID0+ICh7XG4gICAgICAgIGNob2ljZXM6IGdldENsb3VkTG9jYXRpb25DaG9pY2VzKGF6dXJlLmNsb3VkUmVnaW9ucyksXG4gICAgICAgIGRlZmF1bHQ6IGF6dXJlLmRlZmF1bHRMb2NhdGlvbixcbiAgICAgICAgbWVzc2FnZTogYERlZmF1bHQgbG9jYXRpb24gZm9yICR7YWNjb3VudC5kaXNwbGF5TmFtZX1gLFxuICAgICAgICBuYW1lOiBhY2NvdW50LmlkLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgIH0pKSxcbiAgICApO1xuICAgIHBheWxvYWQuZW52LmNsb3VkQWNjb3VudHMuZm9yRWFjaCgoYWNjb3VudCkgPT4ge1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBsb2NhdGlvbnNbYWNjb3VudC5pZF07XG4gICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgYWNjb3VudC5kZWZhdWx0TG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGluaXRTdGF0dXMgPSBhd2FpdCBnZXRJbml0aWFsaXphdGlvblN0YXR1cyhcbiAgICAgIGRlcHMuY2xvdWRBY2NvdW50U2VydmljZSxcbiAgICAgIHBheWxvYWQuZW52LFxuICAgICk7XG5cbiAgICBsb2dnZXIuZGVidWcoXCJpbml0aWFsaXphdGlvbiBzdGF0dXMge2luaXRTdGF0dXN9XCIsIHsgaW5pdFN0YXR1cyB9KTtcblxuICAgIGlmIChpbml0U3RhdHVzLmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhmb3JtYXRJbml0aWFsaXphdGlvbkRldGFpbHMoaW5pdFN0YXR1cykpO1xuXG4gICAgY29uc3QgaW5pdENvbmZpcm0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoe1xuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IGBUaGUgZW52aXJvbm1lbnQgXCIke3BheWxvYWQuZW52Lm5hbWV9XCIgaXMgbm90IGluaXRpYWxpemVkLiBQcm9jZWVkIHdpdGggdGhlIHNldHVwIGFib3ZlP2AsXG4gICAgICBuYW1lOiBcImluaXRcIixcbiAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0Lm9rKGluaXRDb25maXJtLmluaXQsIFwiQ2FuJ3QgcHJvY2VlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uXCIpO1xuXG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgYXdhaXQgaGFzVXNlclBlcm1pc3Npb25Ub0luaXRpYWxpemUoXG4gICAgICAgIGRlcHMuY2xvdWRBY2NvdW50U2VydmljZSxcbiAgICAgICAgcGF5bG9hZC5lbnYsXG4gICAgICApLFxuICAgICAgXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGluaXRpYWxpemUgdGhpcyBlbnZpcm9ubWVudC4gQXNrIHlvdXIgRW5naW5lZXJpbmcgTGVhZGVyIHRvIGluaXRpYWxpemUgaXQgZm9yIHlvdS5cIixcbiAgICApO1xuXG4gICAgY29uc3QgbWlzc2luZ1JlbW90ZUJhY2tlbmQgPSBpbml0U3RhdHVzLmlzc3Vlcy5zb21lKFxuICAgICAgKGlzc3VlKSA9PiBpc3N1ZS50eXBlID09PSBcIk1JU1NJTkdfUkVNT1RFX0JBQ0tFTkRcIixcbiAgICApO1xuXG4gICAgY29uc3QgcXVlc3Rpb25zOiBEaXN0aW5jdFF1ZXN0aW9uW10gPSBbXTtcblxuICAgIGxldCB0ZXJyYWZvcm1CYWNrZW5kOiBJbml0UGF5bG9hZFtcInRlcnJhZm9ybUJhY2tlbmRcIl07XG5cbiAgICBpZiAobWlzc2luZ1JlbW90ZUJhY2tlbmQpIHtcbiAgICAgIGlmIChwYXlsb2FkLmVudi5jbG91ZEFjY291bnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0ZXJyYWZvcm1CYWNrZW5kID0ge1xuICAgICAgICAgIGNsb3VkQWNjb3VudDogcGF5bG9hZC5lbnYuY2xvdWRBY2NvdW50c1swXSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICBjaG9pY2VzOiBnZXRDbG91ZEFjY291bnRDaG9pY2VzKHBheWxvYWQuZW52LmNsb3VkQWNjb3VudHMpLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiQ2xvdWQgQWNjb3VudCB0byB1c2UgZm9yIHRoZSByZW1vdGUgVGVycmFmb3JtIGJhY2tlbmRcIixcbiAgICAgICAgICBuYW1lOiBcInRlcnJhZm9ybUJhY2tlbmQuY2xvdWRBY2NvdW50XCIsXG4gICAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsb3VkQWNjb3VudHNOb3RJbml0aWFsaXplZCA9IGluaXRTdGF0dXMuaXNzdWVzLnNvbWUoXG4gICAgICAoaXNzdWUpID0+IGlzc3VlLnR5cGUgPT09IFwiQ0xPVURfQUNDT1VOVF9OT1RfSU5JVElBTElaRURcIixcbiAgICApO1xuXG4gICAgbGV0IHJ1bm5lckFwcENyZWRlbnRpYWxzOiBJbml0UGF5bG9hZFtcInJ1bm5lckFwcENyZWRlbnRpYWxzXCJdO1xuXG4gICAgaWYgKGNsb3VkQWNjb3VudHNOb3RJbml0aWFsaXplZCkge1xuICAgICAgcXVlc3Rpb25zLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICBmaWx0ZXI6ICh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiR2l0SHViIFJ1bm5lciBBcHAgSURcIixcbiAgICAgICAgICBuYW1lOiBcInJ1bm5lckFwcENyZWRlbnRpYWxzLmlkXCIsXG4gICAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICAgIHZhbGlkYXRlOiAodmFsdWUpID0+IHZhbHVlLmxlbmd0aCA+IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWx0ZXI6ICh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiR2l0SHViIFJ1bm5lciBBcHAgQ2xpZW50IElEXCIsXG4gICAgICAgICAgbmFtZTogXCJydW5uZXJBcHBDcmVkZW50aWFscy5jbGllbnRJZFwiLFxuICAgICAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmlsdGVyOiAodmFsdWUpID0+IHZhbHVlLnRyaW0oKSxcbiAgICAgICAgICBtZXNzYWdlOiBcIkdpdEh1YiBSdW5uZXIgQXBwIEluc3RhbGxhdGlvbiBJRFwiLFxuICAgICAgICAgIG5hbWU6IFwicnVubmVyQXBwQ3JlZGVudGlhbHMuaW5zdGFsbGF0aW9uSWRcIixcbiAgICAgICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZSkgPT4gdmFsdWUubGVuZ3RoID4gMCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbHRlcjogKHZhbHVlKSA9PiB2YWx1ZS50cmltKCksXG4gICAgICAgICAgbWVzc2FnZTogXCJHaXRIdWIgUnVubmVyIEFwcCBQcml2YXRlIEtleVwiLFxuICAgICAgICAgIG5hbWU6IFwicnVubmVyQXBwQ3JlZGVudGlhbHMua2V5XCIsXG4gICAgICAgICAgdHlwZTogXCJlZGl0b3JcIixcbiAgICAgICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0SW5wdXQgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQocXVlc3Rpb25zKTtcblxuICAgIGlmIChpbml0SW5wdXQucnVubmVyQXBwQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJ1bm5lckFwcENyZWRlbnRpYWxzID0gaW5pdElucHV0LnJ1bm5lckFwcENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIGlmIChpbml0SW5wdXQudGVycmFmb3JtQmFja2VuZCkge1xuICAgICAgdGVycmFmb3JtQmFja2VuZCA9IGluaXRJbnB1dC50ZXJyYWZvcm1CYWNrZW5kO1xuICAgIH1cblxuICAgIHBheWxvYWQuaW5pdCA9IHBheWxvYWRTY2hlbWEuc2hhcGUuaW5pdC5wYXJzZSh7XG4gICAgICBjbG91ZEFjY291bnRzVG9Jbml0aWFsaXplOiBnZXRDbG91ZEFjY291bnRUb0luaXRpYWxpemUoaW5pdFN0YXR1cyksXG4gICAgICBydW5uZXJBcHBDcmVkZW50aWFscyxcbiAgICAgIHRlcnJhZm9ybUJhY2tlbmQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfTtcblxuLy8gQ3JlYXRlcyBJbnF1aXJlciBjaG9pY2VzLCBwcmlvcml0aXppbmcgdGhvc2UgdGhhdCBtYXRjaCB0aGUgZW52IHByZWZpeFxuZXhwb3J0IGNvbnN0IGdldENsb3VkQWNjb3VudENob2ljZXMgPSAoXG4gIGNsb3VkQWNjb3VudHM6IENsb3VkQWNjb3VudFtdLFxuKTogSW5xdWlyZXJDaG9pY2U8Q2xvdWRBY2NvdW50PltdID0+XG4gIGNsb3VkQWNjb3VudHMubWFwKChhY2NvdW50KSA9PiAoe1xuICAgIG5hbWU6IGAke2FjY291bnQuZGlzcGxheU5hbWV9YCxcbiAgICB2YWx1ZTogYWNjb3VudCxcbiAgfSkpO1xuXG5leHBvcnQgY29uc3QgZ2V0Q2xvdWRMb2NhdGlvbkNob2ljZXMgPSAoXG4gIHJlZ2lvbnM6IENsb3VkUmVnaW9uW10sXG4pOiBJbnF1aXJlckNob2ljZTxDbG91ZFJlZ2lvbltcIm5hbWVcIl0+W10gPT5cbiAgcmVnaW9ucy5tYXAoKHIpID0+ICh7IG5hbWU6IHIuZGlzcGxheU5hbWUsIHZhbHVlOiByLm5hbWUgfSkpO1xuXG5leHBvcnQgY29uc3QgZ2V0Q2xvdWRBY2NvdW50VG9Jbml0aWFsaXplID0gKFxuICBpbml0U3RhdHVzOiBFbnZpcm9ubWVudEluaXRTdGF0dXMgJiB7IGluaXRpYWxpemVkOiBmYWxzZSB9LFxuKSA9PlxuICBpbml0U3RhdHVzLmlzc3Vlc1xuICAgIC5maWx0ZXIoKGlzc3VlKSA9PiBpc3N1ZS50eXBlID09PSBcIkNMT1VEX0FDQ09VTlRfTk9UX0lOSVRJQUxJWkVEXCIpXG4gICAgLm1hcCgoaXNzdWUpID0+IGlzc3VlLmNsb3VkQWNjb3VudCk7XG5cbi8qKlxuICogQnVpbGQgYSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgcmVzb3VyY2VzIHRoYXQgd2lsbCBiZSBjcmVhdGVkXG4gKiB3aGVuIGluaXRpYWxpemluZyBhbiBlbnZpcm9ubWVudCwgc28gdXNlcnMgc2VlIHRoZSBzaWRlIGVmZmVjdHMgYmVmb3JlXG4gKiBjb25maXJtaW5nLiBUaGUgZXhhY3QgcmVzb3VyY2UgbmFtZXMgYXJlIGludGVudGlvbmFsbHkgb21pdHRlZCB0byBhdm9pZFxuICogY291cGxpbmcgdGhlIHByb21wdCBjb3B5IHRvIGludGVybmFsIG5hbWluZyBjb252ZW50aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdEluaXRpYWxpemF0aW9uRGV0YWlscyA9IChcbiAgaW5pdFN0YXR1czogRW52aXJvbm1lbnRJbml0U3RhdHVzICYgeyBpbml0aWFsaXplZDogZmFsc2UgfSxcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGFjY291bnRzVG9Jbml0ID0gZ2V0Q2xvdWRBY2NvdW50VG9Jbml0aWFsaXplKGluaXRTdGF0dXMpO1xuICBjb25zdCBtaXNzaW5nQmFja2VuZCA9IGluaXRTdGF0dXMuaXNzdWVzLnNvbWUoXG4gICAgKGlzc3VlKSA9PiBpc3N1ZS50eXBlID09PSBcIk1JU1NJTkdfUkVNT1RFX0JBQ0tFTkRcIixcbiAgKTtcblxuICBjb25zdCBzZWN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFjY291bnQgb2YgYWNjb3VudHNUb0luaXQpIHtcbiAgICBzZWN0aW9ucy5wdXNoKFxuICAgICAgW1xuICAgICAgICBjaGFsay5ib2xkLmN5YW4oYCAgQXp1cmUgc3Vic2NyaXB0aW9uIFwiJHthY2NvdW50LmRpc3BsYXlOYW1lfVwiOmApLFxuICAgICAgICBgICAgIOKAoiBCb290c3RyYXAgcmVzb3VyY2UgZ3JvdXAgYW5kIG1hbmFnZWQgaWRlbnRpdHkgd2l0aCBzdWJzY3JpcHRpb24tc2NvcGVkIHJvbGVzYCxcbiAgICAgICAgYCAgICDigKIgR2l0SHViIE9JREMgZmVkZXJhdGVkIGlkZW50aXR5IGNyZWRlbnRpYWxgLFxuICAgICAgICBgICAgIOKAoiBHaXRIdWIgZW52aXJvbm1lbnQgc2VjcmV0cyAoQVJNX0NMSUVOVF9JRCwgQVJNX1NVQlNDUklQVElPTl9JRClgLFxuICAgICAgICBgICAgIOKAoiBDb21tb24gS2V5IFZhdWx0IHN0b3JpbmcgdGhlIEdpdEh1YiBydW5uZXIgYXBwIGNyZWRlbnRpYWxzYCxcbiAgICAgIF0uam9pbihcIlxcblwiKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKG1pc3NpbmdCYWNrZW5kKSB7XG4gICAgc2VjdGlvbnMucHVzaChcbiAgICAgIFtcbiAgICAgICAgY2hhbGsuYm9sZC5jeWFuKGAgIFRlcnJhZm9ybSByZW1vdGUgYmFja2VuZDpgKSxcbiAgICAgICAgYCAgICDigKIgQXp1cmUgcmVzb3VyY2UgZ3JvdXAgYW5kIFN0b3JhZ2UgQWNjb3VudCBmb3IgdGhlIFRlcnJhZm9ybSBzdGF0ZWAsXG4gICAgICBdLmpvaW4oXCJcXG5cIiksXG4gICAgKTtcbiAgfVxuXG4gIGlmIChzZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgXCJcIixcbiAgICBjaGFsay5ib2xkKFwiVGhlIGZvbGxvd2luZyByZXNvdXJjZXMgd2lsbCBiZSBjcmVhdGVkOlwiKSxcbiAgICBcIlwiLFxuICAgIC4uLnNlY3Rpb25zLFxuICAgIFwiXCIsXG4gIF0uam9pbihcIlxcblwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHByb21wdHM7XG4iXX0=
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9wbG9wL2dlbmVyYXRvcnMvZW52aXJvbm1lbnQvcHJvbXB0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHMUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQztBQUU3QyxPQUFPLEVBR0wsa0JBQWtCLEdBR25CLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUVMLGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsNkJBQTZCLEdBQzlCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSw2QkFBNkIsQ0FBQztBQUlyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUzQixPQUFPLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUVMLDBCQUEwQixHQUMzQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbEUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxQix5QkFBeUIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO0lBQ3RELG9CQUFvQixFQUFFLDBCQUEwQixDQUFDLFFBQVEsRUFBRTtJQUMzRCxnQkFBZ0IsRUFBRSxDQUFDO1NBQ2hCLE1BQU0sQ0FBQztRQUNOLFlBQVksRUFBRSxrQkFBa0I7S0FDakMsQ0FBQztTQUNELFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUlILE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FB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ZUFBZSxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgaW5xdWlyZXIsIHsgRGlzdGluY3RRdWVzdGlvbiB9IGZyb20gXCJpbnF1aXJlclwiO1xuaW1wb3J0IHsgdHlwZSBEeW5hbWljUHJvbXB0c0Z1bmN0aW9uIH0gZnJvbSBcIm5vZGUtcGxvcFwiO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gXCJub2RlOmFzc2VydC9zdHJpY3RcIjtcblxuaW1wb3J0IHtcbiAgQ2xvdWRBY2NvdW50LFxuICBDbG91ZEFjY291bnRSZXBvc2l0b3J5LFxuICBjbG91ZEFjY291bnRTY2hlbWEsXG4gIENsb3VkQWNjb3VudFNlcnZpY2UsXG4gIENsb3VkUmVnaW9uLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vZG9tYWluL2Nsb3VkLWFjY291bnQuanNcIjtcbmltcG9ydCB7XG4gIEVudmlyb25tZW50SW5pdFN0YXR1cyxcbiAgZW52aXJvbm1lbnRTY2hlbWEsXG4gIGdldEluaXRpYWxpemF0aW9uU3RhdHVzLFxuICBoYXNVc2VyUGVybWlzc2lvblRvSW5pdGlhbGl6ZSxcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2RvbWFpbi9lbnZpcm9ubWVudC5qc1wiO1xuaW1wb3J0ICogYXMgYXp1cmUgZnJvbSBcIi4uLy4uLy4uL2F6dXJlL2xvY2F0aW9ucy5qc1wiO1xuXG50eXBlIElucXVpcmVyQ2hvaWNlPFQ+ID0gaW5xdWlyZXIuU2VwYXJhdG9yIHwgeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBUIH07XG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZC92NFwiO1xuXG5pbXBvcnQge1xuICBHaXRIdWJSZXBvLFxuICBnaXRodWJSZXBvU2NoZW1hLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vZG9tYWluL2dpdGh1Yi1yZXBvLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIEdpdEh1YkFwcENyZWRlbnRpYWxzLFxuICBnaXRodWJBcHBDcmVkZW50aWFsc1NjaGVtYSxcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2RvbWFpbi9naXRodWIuanNcIjtcbmltcG9ydCB7IGdldEdpdGh1YlJlcG8gfSBmcm9tIFwiLi4vLi4vLi4vZ2l0aHViL2dpdGh1Yi1yZXBvLmpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVByb21wdCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL3ZhbGlkYXRlLXByb21wdC5qc1wiO1xuXG5jb25zdCBpbml0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjbG91ZEFjY291bnRzVG9Jbml0aWFsaXplOiB6LmFycmF5KGNsb3VkQWNjb3VudFNjaGVtYSksXG4gIHJ1bm5lckFwcENyZWRlbnRpYWxzOiBnaXRodWJBcHBDcmVkZW50aWFsc1NjaGVtYS5vcHRpb25hbCgpLFxuICB0ZXJyYWZvcm1CYWNrZW5kOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBjbG91ZEFjY291bnQ6IGNsb3VkQWNjb3VudFNjaGVtYSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxufSk7XG5cbnR5cGUgSW5pdFBheWxvYWQgPSB6LmluZmVyPHR5cGVvZiBpbml0U2NoZW1hPjtcblxuY29uc3QgdGFnc1NjaGVtYSA9IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkubWluKDEpKTtcblxuY29uc3Qgd29ya3NwYWNlRG9tYWluU2NoZW1hID0gelxuICAuc3RyaW5nKClcbiAgLnRyaW0oKVxuICAudG9Mb3dlckNhc2UoKVxuICAubWluKDEsIFwiRG9tYWluIGlzIHJlcXVpcmVkXCIpXG4gIC5yZWdleChcbiAgICAvXlthLXowLTktXSskLyxcbiAgICBcIkRvbWFpbiBtYXkgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVuc1wiLFxuICApO1xuXG5leHBvcnQgY29uc3Qgd29ya3NwYWNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBkb21haW46IHdvcmtzcGFjZURvbWFpblNjaGVtYSxcbn0pO1xuXG5leHBvcnQgY29uc3QgcGF5bG9hZFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW52OiBlbnZpcm9ubWVudFNjaGVtYSxcbiAgZ2l0aHViOiBnaXRodWJSZXBvU2NoZW1hLFxuICBpbml0OiBpbml0U2NoZW1hLm9wdGlvbmFsKCksXG4gIHRhZ3M6IHRhZ3NTY2hlbWEsXG4gIHdvcmtzcGFjZTogd29ya3NwYWNlU2NoZW1hLFxufSk7XG5cbmV4cG9ydCB0eXBlIFBheWxvYWQgPSB6LmluZmVyPHR5cGVvZiBwYXlsb2FkU2NoZW1hPjtcblxuLyoqXG4gKiBQcmVmaWxsZWQgYW5zd2VycyBzdXBwbGllZCB1cC1mcm9udCBieSB0aGUgY2FsbGVyIChlLmcuIENMSSBmbGFncyksIHVzZWQgdG9cbiAqIHNraXAgdGhlIG1hdGNoaW5nIHByb21wdHMuIElkZW50aWZpZXMgY2xvdWQgYWNjb3VudHMgYnkgaWQgYW5kIGxvY2F0aW9ucyBieVxuICogYWNjb3VudCBpZCwgc2luY2UgdGhlIGZ1bGwgZG9tYWluIG9iamVjdHMgYXJlbid0IGF2YWlsYWJsZSBiZWZvcmUgcmVzb2x2aW5nLlxuICovXG5leHBvcnQgY29uc3QgaW5pdGlhbEFuc3dlcnNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVudjogelxuICAgIC5vYmplY3Qoe1xuICAgICAgY2xvdWRBY2NvdW50SWRzOiB6LmFycmF5KHouc3RyaW5nKCkudHJpbSgpLm1pbigxKSkub3B0aW9uYWwoKSxcbiAgICAgIGxvY2F0aW9uczogelxuICAgICAgICAucmVjb3JkKHouc3RyaW5nKCkubWluKDEpLCB6LmVudW0oYXp1cmUubG9jYXRpb25zKSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICBuYW1lOiBlbnZpcm9ubWVudFNjaGVtYS5zaGFwZS5uYW1lLm9wdGlvbmFsKCksXG4gICAgICBwcmVmaXg6IGVudmlyb25tZW50U2NoZW1hLnNoYXBlLnByZWZpeC5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKCksXG4gIGluaXQ6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGNvbmZpcm06IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgICBydW5uZXJBcHBDcmVkZW50aWFsczogZ2l0aHViQXBwQ3JlZGVudGlhbHNTY2hlbWEucGFydGlhbCgpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbiAgdGFnczogelxuICAgIC5vYmplY3Qoe1xuICAgICAgQnVzaW5lc3NVbml0OiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgICAgIE1hbmFnZW1lbnRUZWFtOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxuICB3b3Jrc3BhY2U6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGRvbWFpbjogd29ya3NwYWNlU2NoZW1hLnNoYXBlLmRvbWFpbi5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgSW5pdGlhbEFuc3dlcnMgPSB6LmluZmVyPHR5cGVvZiBpbml0aWFsQW5zd2Vyc1NjaGVtYT47XG5cbi8qKlxuICogQW5zd2VycyBnYXRoZXJlZCBmcm9tIHRoZSBpbnRlcmFjdGl2ZSBiYXNlIHByb21wdHMuIE1pcnJvcnMge0BsaW5rIGluaXRpYWxBbnN3ZXJzU2NoZW1hfVxuICogYnV0IGhvbGRzIHRoZSB2YWx1ZXMgcHJvZHVjZWQgYnkgdGhlIHByb21wdCBzZXNzaW9uOiBjbG91ZCBhY2NvdW50cyBhcmUgZnVsbFxuICogZG9tYWluIG9iamVjdHMgKHJlc29sdmVkIGZyb20gaW5xdWlyZXIgY2hvaWNlcykgcmF0aGVyIHRoYW4gaWRzLiBPbmx5IHF1ZXN0aW9uc1xuICogbm90IGFscmVhZHkgcHJlZmlsbGVkIGFyZSBhc2tlZCwgc28gZXZlcnkgZmllbGQgaXMgb3B0aW9uYWwgaGVyZSB0b28uXG4gKi9cbmNvbnN0IGJhc2VQcm9tcHRBbnN3ZXJzU2NoZW1hID0gei5vYmplY3Qoe1xuICBlbnY6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGNsb3VkQWNjb3VudHM6IHouYXJyYXkoY2xvdWRBY2NvdW50U2NoZW1hKS5vcHRpb25hbCgpLFxuICAgICAgbmFtZTogZW52aXJvbm1lbnRTY2hlbWEuc2hhcGUubmFtZS5vcHRpb25hbCgpLFxuICAgICAgcHJlZml4OiBlbnZpcm9ubWVudFNjaGVtYS5zaGFwZS5wcmVmaXgub3B0aW9uYWwoKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBCdXNpbmVzc1VuaXQ6IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5vcHRpb25hbCgpLFxuICAgICAgTWFuYWdlbWVudFRlYW06IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKCksXG4gIHdvcmtzcGFjZTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgZG9tYWluOiB3b3Jrc3BhY2VTY2hlbWEuc2hhcGUuZG9tYWluLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBQcm9tcHRzRGVwZW5kZW5jaWVzID0ge1xuICBjbG91ZEFjY291bnRSZXBvc2l0b3J5OiBDbG91ZEFjY291bnRSZXBvc2l0b3J5O1xuICBjbG91ZEFjY291bnRTZXJ2aWNlOiBDbG91ZEFjY291bnRTZXJ2aWNlO1xuICBnaXRodWI/OiBHaXRIdWJSZXBvO1xuICBpbml0aWFsQW5zd2Vycz86IEluaXRpYWxBbnN3ZXJzO1xufTtcblxudHlwZSBCYXNlUHJvbXB0QW5zd2VycyA9IHouaW5mZXI8dHlwZW9mIGJhc2VQcm9tcHRBbnN3ZXJzU2NoZW1hPjtcblxuY29uc3QgREVGQVVMVF9DT1NUX0NFTlRFUiA9IFwiVFMwMDBcIjtcblxuY29uc3QgcmVzb2x2ZUNsb3VkQWNjb3VudHMgPSAoXG4gIGF2YWlsYWJsZUNsb3VkQWNjb3VudHM6IENsb3VkQWNjb3VudFtdLFxuICBpbml0aWFsQW5zd2VyczogSW5pdGlhbEFuc3dlcnMsXG4pOiBDbG91ZEFjY291bnRbXSB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGNsb3VkQWNjb3VudElkcyA9IGluaXRpYWxBbnN3ZXJzLmVudj8uY2xvdWRBY2NvdW50SWRzO1xuICBpZiAoY2xvdWRBY2NvdW50SWRzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGNsb3VkQWNjb3VudElkcy5tYXAoKGNsb3VkQWNjb3VudElkKSA9PiB7XG4gICAgY29uc3QgY2xvdWRBY2NvdW50ID0gYXZhaWxhYmxlQ2xvdWRBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+IGFjY291bnQuaWQgPT09IGNsb3VkQWNjb3VudElkLFxuICAgICk7XG4gICAgYXNzZXJ0Lm9rKGNsb3VkQWNjb3VudCwgYENsb3VkIGFjY291bnQgXCIke2Nsb3VkQWNjb3VudElkfVwiIHdhcyBub3QgZm91bmQuYCk7XG4gICAgcmV0dXJuIHsgLi4uY2xvdWRBY2NvdW50IH07XG4gIH0pO1xufTtcblxuY29uc3QgZ2V0QmFzZVF1ZXN0aW9ucyA9IChcbiAgYXZhaWxhYmxlQ2xvdWRBY2NvdW50czogQ2xvdWRBY2NvdW50W10sXG4gIGluaXRpYWxBbnN3ZXJzOiBJbml0aWFsQW5zd2VycyxcbiAgc2VsZWN0ZWRDbG91ZEFjY291bnRzOiBDbG91ZEFjY291bnRbXSB8IHVuZGVmaW5lZCxcbik6IERpc3RpbmN0UXVlc3Rpb25bXSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uczogRGlzdGluY3RRdWVzdGlvbltdID0gW107XG5cbiAgaWYgKGluaXRpYWxBbnN3ZXJzLmVudj8ubmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IG5hbWU6IFwiUFJPRFwiLCB2YWx1ZTogXCJwcm9kXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIlVBVFwiLCB2YWx1ZTogXCJ1YXRcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiREVWXCIsIHZhbHVlOiBcImRldlwiIH0sXG4gICAgICBdLFxuICAgICAgZGVmYXVsdDogXCJwcm9kXCIsXG4gICAgICBtZXNzYWdlOiBcIkVudmlyb25tZW50IG5hbWVcIixcbiAgICAgIG5hbWU6IFwiZW52Lm5hbWVcIixcbiAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHNlbGVjdGVkQ2xvdWRBY2NvdW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgY2hvaWNlczogZ2V0Q2xvdWRBY2NvdW50Q2hvaWNlcyhhdmFpbGFibGVDbG91ZEFjY291bnRzKSxcbiAgICAgIGxvb3A6IGZhbHNlLFxuICAgICAgbWVzc2FnZTogXCJBY2NvdW50KHMpXCIsXG4gICAgICBuYW1lOiBcImVudi5jbG91ZEFjY291bnRzXCIsXG4gICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBcIlBsZWFzZSBzZWxlY3QgYSBjbG91ZCBhY2NvdW50LlwiLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGluaXRpYWxBbnN3ZXJzLmVudj8ucHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICBmaWx0ZXI6ICh2YWx1ZTogc3RyaW5nKSA9PiB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSxcbiAgICAgIG1lc3NhZ2U6IFwiUHJlZml4ICgyLTQgY2hhcmFjdGVycylcIixcbiAgICAgIG5hbWU6IFwiZW52LnByZWZpeFwiLFxuICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlUHJvbXB0KGVudmlyb25tZW50U2NoZW1hLnNoYXBlLnByZWZpeCksXG4gICAgfSk7XG4gIH1cblxuICBpZiAoaW5pdGlhbEFuc3dlcnMud29ya3NwYWNlPy5kb21haW4gPT09IHVuZGVmaW5lZCkge1xuICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgIGZpbHRlcjogKHZhbHVlOiBzdHJpbmcpID0+IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgbWVzc2FnZTogXCJEb21haW5cIixcbiAgICAgIG5hbWU6IFwid29ya3NwYWNlLmRvbWFpblwiLFxuICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlUHJvbXB0KHdvcmtzcGFjZVNjaGVtYS5zaGFwZS5kb21haW4pLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGluaXRpYWxBbnN3ZXJzLnRhZ3M/LkJ1c2luZXNzVW5pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgZmlsdGVyOiAodmFsdWUpID0+IHZhbHVlLnRyaW0oKSxcbiAgICAgIG1lc3NhZ2U6IFwiQnVzaW5lc3MgdW5pdFwiLFxuICAgICAgbmFtZTogXCJ0YWdzLkJ1c2luZXNzVW5pdFwiLFxuICAgICAgdmFsaWRhdGU6ICh2YWx1ZSkgPT5cbiAgICAgICAgdmFsdWUubGVuZ3RoID4gMCA/IHRydWUgOiBcIkJ1c2luZXNzIFVuaXQgY2Fubm90IGJlIGVtcHR5LlwiLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGluaXRpYWxBbnN3ZXJzLnRhZ3M/Lk1hbmFnZW1lbnRUZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICBmaWx0ZXI6ICh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpLFxuICAgICAgbWVzc2FnZTogXCJNYW5hZ2VtZW50IHRlYW1cIixcbiAgICAgIG5hbWU6IFwidGFncy5NYW5hZ2VtZW50VGVhbVwiLFxuICAgICAgdmFsaWRhdGU6ICh2YWx1ZSkgPT5cbiAgICAgICAgdmFsdWUubGVuZ3RoID4gMCA/IHRydWUgOiBcIk1hbmFnZW1lbnQgVGVhbSBjYW5ub3QgYmUgZW1wdHkuXCIsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcXVlc3Rpb25zO1xufTtcblxuY29uc3QgZ2V0U2VsZWN0ZWRDbG91ZEFjY291bnRzID0gKFxuICBhbnN3ZXJzOiBCYXNlUHJvbXB0QW5zd2VycyxcbiAgaW5pdGlhbENsb3VkQWNjb3VudHM6IENsb3VkQWNjb3VudFtdIHwgdW5kZWZpbmVkLFxuKTogQ2xvdWRBY2NvdW50W10gPT4ge1xuICBjb25zdCBwcm9tcHRlZENsb3VkQWNjb3VudHMgPSBhbnN3ZXJzLmVudj8uY2xvdWRBY2NvdW50cztcbiAgY29uc3Qgc2VsZWN0ZWRDbG91ZEFjY291bnRzID0gaW5pdGlhbENsb3VkQWNjb3VudHMgPz8gcHJvbXB0ZWRDbG91ZEFjY291bnRzO1xuXG4gIGFzc2VydC5vayhcbiAgICBBcnJheS5pc0FycmF5KHNlbGVjdGVkQ2xvdWRBY2NvdW50cykgJiYgc2VsZWN0ZWRDbG91ZEFjY291bnRzLmxlbmd0aCA+IDAsXG4gICAgXCJQbGVhc2Ugc2VsZWN0IGEgY2xvdWQgYWNjb3VudC5cIixcbiAgKTtcblxuICByZXR1cm4gc2VsZWN0ZWRDbG91ZEFjY291bnRzLm1hcCgoY2xvdWRBY2NvdW50KSA9PiAoeyAuLi5jbG91ZEFjY291bnQgfSkpO1xufTtcblxuY29uc3QgYXBwbHlMb2NhdGlvbnMgPSBhc3luYyAoXG4gIHByb21wdE1vZHVsZTogdHlwZW9mIGlucXVpcmVyLFxuICBzZWxlY3RlZENsb3VkQWNjb3VudHM6IENsb3VkQWNjb3VudFtdLFxuICBpbml0aWFsQW5zd2VyczogSW5pdGlhbEFuc3dlcnMsXG4pID0+IHtcbiAgY29uc3QgcHJlZGVmaW5lZExvY2F0aW9ucyA9IGluaXRpYWxBbnN3ZXJzLmVudj8ubG9jYXRpb25zID8/IHt9O1xuICBjb25zdCBsb2NhdGlvblF1ZXN0aW9ucyA9IHNlbGVjdGVkQ2xvdWRBY2NvdW50c1xuICAgIC5maWx0ZXIoKGFjY291bnQpID0+IHByZWRlZmluZWRMb2NhdGlvbnNbYWNjb3VudC5pZF0gPT09IHVuZGVmaW5lZClcbiAgICAubWFwKChhY2NvdW50KSA9PiAoe1xuICAgICAgY2hvaWNlczogZ2V0Q2xvdWRMb2NhdGlvbkNob2ljZXMoYXp1cmUuY2xvdWRSZWdpb25zKSxcbiAgICAgIGRlZmF1bHQ6IGF6dXJlLmRlZmF1bHRMb2NhdGlvbixcbiAgICAgIG1lc3NhZ2U6IGBEZWZhdWx0IGxvY2F0aW9uIGZvciAke2FjY291bnQuZGlzcGxheU5hbWV9YCxcbiAgICAgIG5hbWU6IGFjY291bnQuaWQsXG4gICAgICB0eXBlOiBcImxpc3RcIixcbiAgICB9KSk7XG5cbiAgY29uc3QgcHJvbXB0ZWRMb2NhdGlvbnMgPVxuICAgIGxvY2F0aW9uUXVlc3Rpb25zLmxlbmd0aCA9PT0gMFxuICAgICAgPyB7fVxuICAgICAgOiBhd2FpdCBwcm9tcHRNb2R1bGUucHJvbXB0KGxvY2F0aW9uUXVlc3Rpb25zKTtcblxuICBzZWxlY3RlZENsb3VkQWNjb3VudHMuZm9yRWFjaCgoYWNjb3VudCkgPT4ge1xuICAgIGNvbnN0IGxvY2F0aW9uID1cbiAgICAgIHByZWRlZmluZWRMb2NhdGlvbnNbYWNjb3VudC5pZF0gPz8gcHJvbXB0ZWRMb2NhdGlvbnNbYWNjb3VudC5pZF07XG4gICAgaWYgKGxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFjY291bnQuZGVmYXVsdExvY2F0aW9uID0gbG9jYXRpb247XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHBhcnNlSW5pdGlhbEFuc3dlcnMgPSAoXG4gIGlucHV0OiBJbml0aWFsQW5zd2VycyB8IHVuZGVmaW5lZCxcbik6IEluaXRpYWxBbnN3ZXJzID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gaW5pdGlhbEFuc3dlcnNTY2hlbWEuc2FmZVBhcnNlKGlucHV0ID8/IHt9KTtcbiAgYXNzZXJ0Lm9rKFxuICAgIHJlc3VsdC5zdWNjZXNzLFxuICAgIFwiSW52YWxpZCBpbml0aWFsIGFuc3dlcnMgZm9yIHRoZSBlbnZpcm9ubWVudCBnZW5lcmF0b3IuXCIsXG4gICk7XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IGdldFJ1bm5lckFwcENyZWRlbnRpYWxRdWVzdGlvbnMgPSAoXG4gIGluaXRpYWxSdW5uZXJBcHBDcmVkZW50aWFsczogUGFydGlhbDxHaXRIdWJBcHBDcmVkZW50aWFscz4sXG4pOiBEaXN0aW5jdFF1ZXN0aW9uW10gPT4ge1xuICBjb25zdCBxdWVzdGlvbnM6IERpc3RpbmN0UXVlc3Rpb25bXSA9IFtdO1xuXG4gIGlmIChpbml0aWFsUnVubmVyQXBwQ3JlZGVudGlhbHMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgIGZpbHRlcjogKHZhbHVlKSA9PiB2YWx1ZS50cmltKCksXG4gICAgICBtZXNzYWdlOiBcIkdpdEh1YiBSdW5uZXIgQXBwIElEXCIsXG4gICAgICBuYW1lOiBcInJ1bm5lckFwcENyZWRlbnRpYWxzLmlkXCIsXG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGluaXRpYWxSdW5uZXJBcHBDcmVkZW50aWFscy5jbGllbnRJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgZmlsdGVyOiAodmFsdWUpID0+IHZhbHVlLnRyaW0oKSxcbiAgICAgIG1lc3NhZ2U6IFwiR2l0SHViIFJ1bm5lciBBcHAgQ2xpZW50IElEXCIsXG4gICAgICBuYW1lOiBcInJ1bm5lckFwcENyZWRlbnRpYWxzLmNsaWVudElkXCIsXG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGluaXRpYWxSdW5uZXJBcHBDcmVkZW50aWFscy5pbnN0YWxsYXRpb25JZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgZmlsdGVyOiAodmFsdWUpID0+IHZhbHVlLnRyaW0oKSxcbiAgICAgIG1lc3NhZ2U6IFwiR2l0SHViIFJ1bm5lciBBcHAgSW5zdGFsbGF0aW9uIElEXCIsXG4gICAgICBuYW1lOiBcInJ1bm5lckFwcENyZWRlbnRpYWxzLmluc3RhbGxhdGlvbklkXCIsXG4gICAgICB0eXBlOiBcImlucHV0XCIsXG4gICAgICB2YWxpZGF0ZTogKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGluaXRpYWxSdW5uZXJBcHBDcmVkZW50aWFscy5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgIGZpbHRlcjogKHZhbHVlKSA9PiB2YWx1ZS50cmltKCksXG4gICAgICBtZXNzYWdlOiBcIkdpdEh1YiBSdW5uZXIgQXBwIFByaXZhdGUgS2V5XCIsXG4gICAgICBuYW1lOiBcInJ1bm5lckFwcENyZWRlbnRpYWxzLmtleVwiLFxuICAgICAgdHlwZTogXCJlZGl0b3JcIixcbiAgICAgIHZhbGlkYXRlOiAodmFsdWUpID0+IHZhbHVlLmxlbmd0aCA+IDAsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcXVlc3Rpb25zO1xufTtcblxuY29uc3QgbWVyZ2VSdW5uZXJBcHBDcmVkZW50aWFscyA9IChcbiAgaW5pdGlhbFJ1bm5lckFwcENyZWRlbnRpYWxzOiBQYXJ0aWFsPEdpdEh1YkFwcENyZWRlbnRpYWxzPixcbiAgcHJvbXB0ZWRSdW5uZXJBcHBDcmVkZW50aWFsczogUGFydGlhbDxHaXRIdWJBcHBDcmVkZW50aWFscz4gfCB1bmRlZmluZWQsXG4pOiBJbml0UGF5bG9hZFtcInJ1bm5lckFwcENyZWRlbnRpYWxzXCJdID0+IHtcbiAgY29uc3QgcnVubmVyQXBwQ3JlZGVudGlhbHMgPSB7XG4gICAgY2xpZW50SWQ6XG4gICAgICBpbml0aWFsUnVubmVyQXBwQ3JlZGVudGlhbHMuY2xpZW50SWQgPz9cbiAgICAgIHByb21wdGVkUnVubmVyQXBwQ3JlZGVudGlhbHM/LmNsaWVudElkLFxuICAgIGlkOiBpbml0aWFsUnVubmVyQXBwQ3JlZGVudGlhbHMuaWQgPz8gcHJvbXB0ZWRSdW5uZXJBcHBDcmVkZW50aWFscz8uaWQsXG4gICAgaW5zdGFsbGF0aW9uSWQ6XG4gICAgICBpbml0aWFsUnVubmVyQXBwQ3JlZGVudGlhbHMuaW5zdGFsbGF0aW9uSWQgPz9cbiAgICAgIHByb21wdGVkUnVubmVyQXBwQ3JlZGVudGlhbHM/Lmluc3RhbGxhdGlvbklkLFxuICAgIGtleTogaW5pdGlhbFJ1bm5lckFwcENyZWRlbnRpYWxzLmtleSA/PyBwcm9tcHRlZFJ1bm5lckFwcENyZWRlbnRpYWxzPy5rZXksXG4gIH07XG5cbiAgaWYgKFxuICAgIE9iamVjdC52YWx1ZXMocnVubmVyQXBwQ3JlZGVudGlhbHMpLmV2ZXJ5KCh2YWx1ZSkgPT4gdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBnaXRodWJBcHBDcmVkZW50aWFsc1NjaGVtYS5wYXJzZShydW5uZXJBcHBDcmVkZW50aWFscyk7XG59O1xuXG5jb25zdCBjb2xsZWN0QmFzZUFuc3dlcnMgPSBhc3luYyAoXG4gIHByb21wdE1vZHVsZTogdHlwZW9mIGlucXVpcmVyLFxuICBhdmFpbGFibGVDbG91ZEFjY291bnRzOiBDbG91ZEFjY291bnRbXSxcbiAgaW5pdGlhbEFuc3dlcnM6IEluaXRpYWxBbnN3ZXJzLFxuKTogUHJvbWlzZTx7XG4gIGFuc3dlcnM6IEJhc2VQcm9tcHRBbnN3ZXJzO1xuICBpbml0aWFsQ2xvdWRBY2NvdW50czogQ2xvdWRBY2NvdW50W10gfCB1bmRlZmluZWQ7XG59PiA9PiB7XG4gIGNvbnN0IGluaXRpYWxDbG91ZEFjY291bnRzID0gcmVzb2x2ZUNsb3VkQWNjb3VudHMoXG4gICAgYXZhaWxhYmxlQ2xvdWRBY2NvdW50cyxcbiAgICBpbml0aWFsQW5zd2VycyxcbiAgKTtcbiAgY29uc3QgYmFzZVF1ZXN0aW9ucyA9IGdldEJhc2VRdWVzdGlvbnMoXG4gICAgYXZhaWxhYmxlQ2xvdWRBY2NvdW50cyxcbiAgICBpbml0aWFsQW5zd2VycyxcbiAgICBpbml0aWFsQ2xvdWRBY2NvdW50cyxcbiAgKTtcbiAgY29uc3QgcHJvbXB0QW5zd2Vyc1Jlc3VsdCA9IGJhc2VQcm9tcHRBbnN3ZXJzU2NoZW1hLnNhZmVQYXJzZShcbiAgICBiYXNlUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCA/IHt9IDogYXdhaXQgcHJvbXB0TW9kdWxlLnByb21wdChiYXNlUXVlc3Rpb25zKSxcbiAgKTtcbiAgYXNzZXJ0Lm9rKHByb21wdEFuc3dlcnNSZXN1bHQuc3VjY2VzcywgXCJJbnZhbGlkIGVudmlyb25tZW50IHByb21wdCBhbnN3ZXJzLlwiKTtcblxuICByZXR1cm4ge1xuICAgIGFuc3dlcnM6IHByb21wdEFuc3dlcnNSZXN1bHQuZGF0YSxcbiAgICBpbml0aWFsQ2xvdWRBY2NvdW50cyxcbiAgfTtcbn07XG5cbmNvbnN0IGJ1aWxkUGF5bG9hZCA9ICh7XG4gIGFuc3dlcnMsXG4gIGdpdGh1YixcbiAgaW5pdGlhbEFuc3dlcnMsXG4gIHNlbGVjdGVkQ2xvdWRBY2NvdW50cyxcbn06IHtcbiAgYW5zd2VyczogQmFzZVByb21wdEFuc3dlcnM7XG4gIGdpdGh1YjogR2l0SHViUmVwbztcbiAgaW5pdGlhbEFuc3dlcnM6IEluaXRpYWxBbnN3ZXJzO1xuICBzZWxlY3RlZENsb3VkQWNjb3VudHM6IENsb3VkQWNjb3VudFtdO1xufSk6IFBheWxvYWQgPT5cbiAgcGF5bG9hZFNjaGVtYS5wYXJzZSh7XG4gICAgZW52OiB7XG4gICAgICBjbG91ZEFjY291bnRzOiBzZWxlY3RlZENsb3VkQWNjb3VudHMsXG4gICAgICBuYW1lOiBpbml0aWFsQW5zd2Vycy5lbnY/Lm5hbWUgPz8gYW5zd2Vycy5lbnY/Lm5hbWUsXG4gICAgICBwcmVmaXg6IGluaXRpYWxBbnN3ZXJzLmVudj8ucHJlZml4ID8/IGFuc3dlcnMuZW52Py5wcmVmaXgsXG4gICAgfSxcbiAgICBnaXRodWIsXG4gICAgdGFnczoge1xuICAgICAgQnVzaW5lc3NVbml0OlxuICAgICAgICBpbml0aWFsQW5zd2Vycy50YWdzPy5CdXNpbmVzc1VuaXQgPz8gYW5zd2Vycy50YWdzPy5CdXNpbmVzc1VuaXQsXG4gICAgICBDb3N0Q2VudGVyOiBERUZBVUxUX0NPU1RfQ0VOVEVSLFxuICAgICAgTWFuYWdlbWVudFRlYW06XG4gICAgICAgIGluaXRpYWxBbnN3ZXJzLnRhZ3M/Lk1hbmFnZW1lbnRUZWFtID8/IGFuc3dlcnMudGFncz8uTWFuYWdlbWVudFRlYW0sXG4gICAgfSxcbiAgICB3b3Jrc3BhY2U6IHtcbiAgICAgIGRvbWFpbjogaW5pdGlhbEFuc3dlcnMud29ya3NwYWNlPy5kb21haW4gPz8gYW5zd2Vycy53b3Jrc3BhY2U/LmRvbWFpbixcbiAgICB9LFxuICB9KTtcblxuY29uc3QgcHJvbXB0czogKGRlcHM6IFByb21wdHNEZXBlbmRlbmNpZXMpID0+IER5bmFtaWNQcm9tcHRzRnVuY3Rpb24gPVxuICAoZGVwcykgPT4gYXN5bmMgKHByb21wdE1vZHVsZSkgPT4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJnZW5cIiwgXCJlbnZcIl0pO1xuICAgIGNvbnN0IGdpdGh1YiA9IGRlcHMuZ2l0aHViID8/IChhd2FpdCBnZXRHaXRodWJSZXBvKCkpO1xuICAgIGFzc2VydC5vayhnaXRodWIsIFwiVGhpcyBnZW5lcmF0b3Igb25seSB3b3JrcyBpbnNpZGUgYSBHaXRIdWIgcmVwb3NpdG9yeS5cIik7XG4gICAgY29uc3QgaW5pdGlhbEFuc3dlcnMgPSBwYXJzZUluaXRpYWxBbnN3ZXJzKGRlcHMuaW5pdGlhbEFuc3dlcnMpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImdpdGh1YiByZXBvIHtnaXRodWJ9XCIsIHsgZ2l0aHViIH0pO1xuICAgIGNvbnN0IGF2YWlsYWJsZUNsb3VkQWNjb3VudHMgPSBhd2FpdCBkZXBzLmNsb3VkQWNjb3VudFJlcG9zaXRvcnkubGlzdCgpO1xuICAgIGNvbnN0IHsgYW5zd2VycywgaW5pdGlhbENsb3VkQWNjb3VudHMgfSA9IGF3YWl0IGNvbGxlY3RCYXNlQW5zd2VycyhcbiAgICAgIHByb21wdE1vZHVsZSxcbiAgICAgIGF2YWlsYWJsZUNsb3VkQWNjb3VudHMsXG4gICAgICBpbml0aWFsQW5zd2VycyxcbiAgICApO1xuICAgIGNvbnN0IHNlbGVjdGVkQ2xvdWRBY2NvdW50cyA9IGdldFNlbGVjdGVkQ2xvdWRBY2NvdW50cyhcbiAgICAgIGFuc3dlcnMsXG4gICAgICBpbml0aWFsQ2xvdWRBY2NvdW50cyxcbiAgICApO1xuXG4gICAgYXdhaXQgYXBwbHlMb2NhdGlvbnMocHJvbXB0TW9kdWxlLCBzZWxlY3RlZENsb3VkQWNjb3VudHMsIGluaXRpYWxBbnN3ZXJzKTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSBidWlsZFBheWxvYWQoe1xuICAgICAgYW5zd2VycyxcbiAgICAgIGdpdGh1YixcbiAgICAgIGluaXRpYWxBbnN3ZXJzLFxuICAgICAgc2VsZWN0ZWRDbG91ZEFjY291bnRzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5pdFN0YXR1cyA9IGF3YWl0IGdldEluaXRpYWxpemF0aW9uU3RhdHVzKFxuICAgICAgZGVwcy5jbG91ZEFjY291bnRTZXJ2aWNlLFxuICAgICAgcGF5bG9hZC5lbnYsXG4gICAgKTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcImluaXRpYWxpemF0aW9uIHN0YXR1cyB7aW5pdFN0YXR1c31cIiwgeyBpbml0U3RhdHVzIH0pO1xuXG4gICAgaWYgKGluaXRTdGF0dXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGZvcm1hdEluaXRpYWxpemF0aW9uRGV0YWlscyhpbml0U3RhdHVzKSk7XG5cbiAgICBpZiAoaW5pdGlhbEFuc3dlcnMuaW5pdD8uY29uZmlybSAhPT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaW5pdENvbmZpcm0gPSBhd2FpdCBwcm9tcHRNb2R1bGUucHJvbXB0KHtcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZTogYFRoZSBlbnZpcm9ubWVudCBcIiR7cGF5bG9hZC5lbnYubmFtZX1cIiBpcyBub3QgaW5pdGlhbGl6ZWQuIFByb2NlZWQgd2l0aCB0aGUgc2V0dXAgYWJvdmU/YCxcbiAgICAgICAgbmFtZTogXCJpbml0XCIsXG4gICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5vayhpbml0Q29uZmlybS5pbml0LCBcIkNhbid0IHByb2NlZWQgd2l0aG91dCBpbml0aWFsaXphdGlvblwiKTtcbiAgICB9XG5cbiAgICBhc3NlcnQub2soXG4gICAgICBhd2FpdCBoYXNVc2VyUGVybWlzc2lvblRvSW5pdGlhbGl6ZShcbiAgICAgICAgZGVwcy5jbG91ZEFjY291bnRTZXJ2aWNlLFxuICAgICAgICBwYXlsb2FkLmVudixcbiAgICAgICksXG4gICAgICBcIllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gaW5pdGlhbGl6ZSB0aGlzIGVudmlyb25tZW50LiBBc2sgeW91ciBFbmdpbmVlcmluZyBMZWFkZXIgdG8gaW5pdGlhbGl6ZSBpdCBmb3IgeW91LlwiLFxuICAgICk7XG5cbiAgICBjb25zdCBtaXNzaW5nUmVtb3RlQmFja2VuZCA9IGluaXRTdGF0dXMuaXNzdWVzLnNvbWUoXG4gICAgICAoaXNzdWUpID0+IGlzc3VlLnR5cGUgPT09IFwiTUlTU0lOR19SRU1PVEVfQkFDS0VORFwiLFxuICAgICk7XG5cbiAgICBjb25zdCBxdWVzdGlvbnM6IERpc3RpbmN0UXVlc3Rpb25bXSA9IFtdO1xuXG4gICAgbGV0IHRlcnJhZm9ybUJhY2tlbmQ6IEluaXRQYXlsb2FkW1widGVycmFmb3JtQmFja2VuZFwiXTtcblxuICAgIGlmIChtaXNzaW5nUmVtb3RlQmFja2VuZCkge1xuICAgICAgaWYgKHBheWxvYWQuZW52LmNsb3VkQWNjb3VudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRlcnJhZm9ybUJhY2tlbmQgPSB7XG4gICAgICAgICAgY2xvdWRBY2NvdW50OiBwYXlsb2FkLmVudi5jbG91ZEFjY291bnRzWzBdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgIGNob2ljZXM6IGdldENsb3VkQWNjb3VudENob2ljZXMocGF5bG9hZC5lbnYuY2xvdWRBY2NvdW50cyksXG4gICAgICAgICAgbWVzc2FnZTogXCJDbG91ZCBBY2NvdW50IHRvIHVzZSBmb3IgdGhlIHJlbW90ZSBUZXJyYWZvcm0gYmFja2VuZFwiLFxuICAgICAgICAgIG5hbWU6IFwidGVycmFmb3JtQmFja2VuZC5jbG91ZEFjY291bnRcIixcbiAgICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xvdWRBY2NvdW50c05vdEluaXRpYWxpemVkID0gaW5pdFN0YXR1cy5pc3N1ZXMuc29tZShcbiAgICAgIChpc3N1ZSkgPT4gaXNzdWUudHlwZSA9PT0gXCJDTE9VRF9BQ0NPVU5UX05PVF9JTklUSUFMSVpFRFwiLFxuICAgICk7XG5cbiAgICBjb25zdCBpbml0aWFsUnVubmVyQXBwQ3JlZGVudGlhbHMgPVxuICAgICAgaW5pdGlhbEFuc3dlcnMuaW5pdD8ucnVubmVyQXBwQ3JlZGVudGlhbHMgPz8ge307XG5cbiAgICBpZiAoY2xvdWRBY2NvdW50c05vdEluaXRpYWxpemVkKSB7XG4gICAgICBxdWVzdGlvbnMucHVzaChcbiAgICAgICAgLi4uZ2V0UnVubmVyQXBwQ3JlZGVudGlhbFF1ZXN0aW9ucyhpbml0aWFsUnVubmVyQXBwQ3JlZGVudGlhbHMpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0SW5wdXQgPVxuICAgICAgcXVlc3Rpb25zLmxlbmd0aCA9PT0gMCA/IHt9IDogYXdhaXQgcHJvbXB0TW9kdWxlLnByb21wdChxdWVzdGlvbnMpO1xuXG4gICAgaWYgKGluaXRJbnB1dC50ZXJyYWZvcm1CYWNrZW5kKSB7XG4gICAgICB0ZXJyYWZvcm1CYWNrZW5kID0gaW5pdElucHV0LnRlcnJhZm9ybUJhY2tlbmQ7XG4gICAgfVxuXG4gICAgY29uc3QgcnVubmVyQXBwQ3JlZGVudGlhbHMgPSBtZXJnZVJ1bm5lckFwcENyZWRlbnRpYWxzKFxuICAgICAgaW5pdGlhbFJ1bm5lckFwcENyZWRlbnRpYWxzLFxuICAgICAgaW5pdElucHV0LnJ1bm5lckFwcENyZWRlbnRpYWxzLFxuICAgICk7XG5cbiAgICBwYXlsb2FkLmluaXQgPSBwYXlsb2FkU2NoZW1hLnNoYXBlLmluaXQucGFyc2Uoe1xuICAgICAgY2xvdWRBY2NvdW50c1RvSW5pdGlhbGl6ZTogZ2V0Q2xvdWRBY2NvdW50VG9Jbml0aWFsaXplKGluaXRTdGF0dXMpLFxuICAgICAgcnVubmVyQXBwQ3JlZGVudGlhbHMsXG4gICAgICB0ZXJyYWZvcm1CYWNrZW5kLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH07XG5cbi8vIENyZWF0ZXMgSW5xdWlyZXIgY2hvaWNlcywgcHJpb3JpdGl6aW5nIHRob3NlIHRoYXQgbWF0Y2ggdGhlIGVudiBwcmVmaXhcbmV4cG9ydCBjb25zdCBnZXRDbG91ZEFjY291bnRDaG9pY2VzID0gKFxuICBjbG91ZEFjY291bnRzOiBDbG91ZEFjY291bnRbXSxcbik6IElucXVpcmVyQ2hvaWNlPENsb3VkQWNjb3VudD5bXSA9PlxuICBjbG91ZEFjY291bnRzLm1hcCgoYWNjb3VudCkgPT4gKHtcbiAgICBuYW1lOiBgJHthY2NvdW50LmRpc3BsYXlOYW1lfWAsXG4gICAgdmFsdWU6IGFjY291bnQsXG4gIH0pKTtcblxuZXhwb3J0IGNvbnN0IGdldENsb3VkTG9jYXRpb25DaG9pY2VzID0gKFxuICByZWdpb25zOiBDbG91ZFJlZ2lvbltdLFxuKTogSW5xdWlyZXJDaG9pY2U8Q2xvdWRSZWdpb25bXCJuYW1lXCJdPltdID0+XG4gIHJlZ2lvbnMubWFwKChyKSA9PiAoeyBuYW1lOiByLmRpc3BsYXlOYW1lLCB2YWx1ZTogci5uYW1lIH0pKTtcblxuZXhwb3J0IGNvbnN0IGdldENsb3VkQWNjb3VudFRvSW5pdGlhbGl6ZSA9IChcbiAgaW5pdFN0YXR1czogRW52aXJvbm1lbnRJbml0U3RhdHVzICYgeyBpbml0aWFsaXplZDogZmFsc2UgfSxcbikgPT5cbiAgaW5pdFN0YXR1cy5pc3N1ZXNcbiAgICAuZmlsdGVyKChpc3N1ZSkgPT4gaXNzdWUudHlwZSA9PT0gXCJDTE9VRF9BQ0NPVU5UX05PVF9JTklUSUFMSVpFRFwiKVxuICAgIC5tYXAoKGlzc3VlKSA9PiBpc3N1ZS5jbG91ZEFjY291bnQpO1xuXG4vKipcbiAqIEJ1aWxkIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIHJlc291cmNlcyB0aGF0IHdpbGwgYmUgY3JlYXRlZFxuICogd2hlbiBpbml0aWFsaXppbmcgYW4gZW52aXJvbm1lbnQsIHNvIHVzZXJzIHNlZSB0aGUgc2lkZSBlZmZlY3RzIGJlZm9yZVxuICogY29uZmlybWluZy4gVGhlIGV4YWN0IHJlc291cmNlIG5hbWVzIGFyZSBpbnRlbnRpb25hbGx5IG9taXR0ZWQgdG8gYXZvaWRcbiAqIGNvdXBsaW5nIHRoZSBwcm9tcHQgY29weSB0byBpbnRlcm5hbCBuYW1pbmcgY29udmVudGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRJbml0aWFsaXphdGlvbkRldGFpbHMgPSAoXG4gIGluaXRTdGF0dXM6IEVudmlyb25tZW50SW5pdFN0YXR1cyAmIHsgaW5pdGlhbGl6ZWQ6IGZhbHNlIH0sXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBhY2NvdW50c1RvSW5pdCA9IGdldENsb3VkQWNjb3VudFRvSW5pdGlhbGl6ZShpbml0U3RhdHVzKTtcbiAgY29uc3QgbWlzc2luZ0JhY2tlbmQgPSBpbml0U3RhdHVzLmlzc3Vlcy5zb21lKFxuICAgIChpc3N1ZSkgPT4gaXNzdWUudHlwZSA9PT0gXCJNSVNTSU5HX1JFTU9URV9CQUNLRU5EXCIsXG4gICk7XG5cbiAgY29uc3Qgc2VjdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBhY2NvdW50IG9mIGFjY291bnRzVG9Jbml0KSB7XG4gICAgc2VjdGlvbnMucHVzaChcbiAgICAgIFtcbiAgICAgICAgY2hhbGsuYm9sZC5jeWFuKGAgIEF6dXJlIHN1YnNjcmlwdGlvbiBcIiR7YWNjb3VudC5kaXNwbGF5TmFtZX1cIjpgKSxcbiAgICAgICAgYCAgICDigKIgQm9vdHN0cmFwIHJlc291cmNlIGdyb3VwIGFuZCBtYW5hZ2VkIGlkZW50aXR5IHdpdGggc3Vic2NyaXB0aW9uLXNjb3BlZCByb2xlc2AsXG4gICAgICAgIGAgICAg4oCiIEdpdEh1YiBPSURDIGZlZGVyYXRlZCBpZGVudGl0eSBjcmVkZW50aWFsYCxcbiAgICAgICAgYCAgICDigKIgR2l0SHViIGVudmlyb25tZW50IHNlY3JldHMgKEFSTV9DTElFTlRfSUQsIEFSTV9TVUJTQ1JJUFRJT05fSUQpYCxcbiAgICAgICAgYCAgICDigKIgQ29tbW9uIEtleSBWYXVsdCBzdG9yaW5nIHRoZSBHaXRIdWIgcnVubmVyIGFwcCBjcmVkZW50aWFsc2AsXG4gICAgICBdLmpvaW4oXCJcXG5cIiksXG4gICAgKTtcbiAgfVxuXG4gIGlmIChtaXNzaW5nQmFja2VuZCkge1xuICAgIHNlY3Rpb25zLnB1c2goXG4gICAgICBbXG4gICAgICAgIGNoYWxrLmJvbGQuY3lhbihgICBUZXJyYWZvcm0gcmVtb3RlIGJhY2tlbmQ6YCksXG4gICAgICAgIGAgICAg4oCiIEF6dXJlIHJlc291cmNlIGdyb3VwIGFuZCBTdG9yYWdlIEFjY291bnQgZm9yIHRoZSBUZXJyYWZvcm0gc3RhdGVgLFxuICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICk7XG4gIH1cblxuICBpZiAoc2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIFwiXCIsXG4gICAgY2hhbGsuYm9sZChcIlRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIHdpbGwgYmUgY3JlYXRlZDpcIiksXG4gICAgXCJcIixcbiAgICAuLi5zZWN0aW9ucyxcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwcm9tcHRzO1xuIl19
|
|
@@ -2,7 +2,7 @@ import type { NodePlopAPI, PlopGenerator } from "plop";
|
|
|
2
2
|
import { Answers } from "inquirer";
|
|
3
3
|
import { GitHubRepo } from "../../domain/github-repo.js";
|
|
4
4
|
import { GitHubService } from "../../domain/github.js";
|
|
5
|
-
import { Payload as EnvironmentPayload } from "../plop/generators/environment/index.js";
|
|
5
|
+
import { InitialAnswers as DeploymentEnvironmentInitialAnswers, Payload as EnvironmentPayload } from "../plop/generators/environment/index.js";
|
|
6
6
|
import { Payload as MonorepoPayload } from "../plop/generators/monorepo/index.js";
|
|
7
7
|
export declare const setMonorepoGenerator: (plop: NodePlopAPI, initialAnswers?: Partial<MonorepoPayload>) => void;
|
|
8
8
|
export declare const getPlopInstance: () => Promise<NodePlopAPI>;
|
|
@@ -40,7 +40,7 @@ export declare const runMonorepoActions: (generator: PlopGenerator, payload: Mon
|
|
|
40
40
|
* uses the explicitly passed repository. When omitted (by add command),
|
|
41
41
|
* the generator infers it from the local git context.
|
|
42
42
|
*/
|
|
43
|
-
export declare const collectDeploymentEnvironmentPayload: (plop: NodePlopAPI, gitHubService: GitHubService, github?: GitHubRepo) => Promise<{
|
|
43
|
+
export declare const collectDeploymentEnvironmentPayload: (plop: NodePlopAPI, gitHubService: GitHubService, github?: GitHubRepo, initialAnswers?: DeploymentEnvironmentInitialAnswers) => Promise<{
|
|
44
44
|
generator: PlopGenerator;
|
|
45
45
|
payload: EnvironmentPayload;
|
|
46
46
|
}>;
|
|
@@ -60,4 +60,4 @@ export declare const runDeploymentEnvironmentActions: (generator: PlopGenerator,
|
|
|
60
60
|
* uses the explicitly passed repository. When omitted (by add command),
|
|
61
61
|
* the generator infers it from the local git context.
|
|
62
62
|
*/
|
|
63
|
-
export declare const setDeploymentEnvironmentGenerator: (plop: NodePlopAPI, gitHubService: GitHubService, github?: GitHubRepo) => void;
|
|
63
|
+
export declare const setDeploymentEnvironmentGenerator: (plop: NodePlopAPI, gitHubService: GitHubService, github?: GitHubRepo, initialAnswers?: DeploymentEnvironmentInitialAnswers) => void;
|