@git.zone/cli 5.0.0 → 6.0.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/assets/templates/ci_default/.gitea/workflows/default_tags.yaml +0 -21
- package/assets/templates/ci_default_gitlab/.gitlab-ci.yml +0 -13
- package/assets/templates/ci_default_private/.gitea/workflows/default_tags.yaml +0 -21
- package/assets/templates/ci_default_private_gitlab/.gitlab-ci.yml +0 -13
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/helpers.climode.js +31 -2
- package/dist_ts/helpers.workflow.d.ts +10 -0
- package/dist_ts/helpers.workflow.js +80 -8
- package/dist_ts/mod_release/classes.releasejournal.d.ts +78 -0
- package/dist_ts/mod_release/classes.releasejournal.js +511 -0
- package/dist_ts/mod_release/helpers.npmartifact.d.ts +32 -0
- package/dist_ts/mod_release/helpers.npmartifact.js +358 -0
- package/dist_ts/mod_release/helpers.releasebranch.d.ts +1 -0
- package/dist_ts/mod_release/helpers.releasebranch.js +54 -6
- package/dist_ts/mod_release/helpers.releasepublication.d.ts +24 -0
- package/dist_ts/mod_release/helpers.releasepublication.js +293 -0
- package/dist_ts/mod_release/index.d.ts +1 -11
- package/dist_ts/mod_release/index.js +410 -288
- package/package.json +1 -1
- package/readme.hints.md +47 -1
- package/readme.md +61 -26
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/helpers.climode.ts +34 -1
- package/ts/helpers.workflow.ts +114 -7
- package/ts/mod_release/classes.releasejournal.ts +740 -0
- package/ts/mod_release/helpers.npmartifact.ts +553 -0
- package/ts/mod_release/helpers.releasebranch.ts +67 -5
- package/ts/mod_release/helpers.releasepublication.ts +641 -0
- package/ts/mod_release/index.ts +576 -411
|
@@ -3,17 +3,40 @@ import * as paths from "../paths.js";
|
|
|
3
3
|
import { logger } from "../gitzone.logging.js";
|
|
4
4
|
import { getCliMode, printJson } from "../helpers.climode.js";
|
|
5
5
|
import { inferVersionTypeFromPending, movePendingToVersion, readPendingChangelog, } from "../helpers.changelog.js";
|
|
6
|
-
import {
|
|
6
|
+
import { resolveReleaseWorkflow, resolveReleaseResumeConfiguration, } from "../helpers.workflow.js";
|
|
7
7
|
import * as commitHelpers from "../mod_commit/mod.helpers.js";
|
|
8
|
-
import { hasInstalledProjectTsdockerBinary } from "../helpers.tsdocker.js";
|
|
9
8
|
import { inspectReleaseBranch, integrateReleaseBranch, prepareReleaseIntegration, revalidatePreparedReleaseBranch, revalidateReleasePublicationState, releaseGitEnv, resolveReleaseMergeFlag, } from "./helpers.releasebranch.js";
|
|
9
|
+
import { ReleaseJournalStore, createInitialTargetStatus, finalizeJournalCompletion, normalizeReleaseGitRemoteName, normalizeReleaseVersion, resolveGitCommonDirectory, } from "./classes.releasejournal.js";
|
|
10
|
+
import { assertNoLegacyNpmPublisher, assertPnpmReleaseCapability, hashReleaseDestination, normalizeNpmRegistryUrl, packNpmArtifact, verifyStoredNpmArtifact, } from "./helpers.npmartifact.js";
|
|
11
|
+
import { executeReleasePublication } from "./helpers.releasepublication.js";
|
|
12
|
+
export { buildReleaseGitPushArgs } from "./helpers.releasepublication.js";
|
|
10
13
|
export const run = async (argvArg) => {
|
|
14
|
+
try {
|
|
15
|
+
await runInternal(argvArg);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
logger.log("error", error instanceof Error ? error.message : String(error));
|
|
19
|
+
process.exitCode = 1;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const runInternal = async (argvArg) => {
|
|
11
23
|
const mode = await getCliMode(argvArg);
|
|
12
24
|
const subcommand = argvArg._?.[1];
|
|
13
25
|
if (mode.help || subcommand === "help") {
|
|
14
26
|
showHelp(mode);
|
|
15
27
|
return;
|
|
16
28
|
}
|
|
29
|
+
if (subcommand === "inspect") {
|
|
30
|
+
await runReleaseInspect(argvArg, mode);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (subcommand === "resume") {
|
|
34
|
+
await runReleaseResume(argvArg, mode);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (subcommand !== undefined) {
|
|
38
|
+
throw new Error(`Unknown release subcommand: ${subcommand}`);
|
|
39
|
+
}
|
|
17
40
|
if (mode.json) {
|
|
18
41
|
printJson({
|
|
19
42
|
ok: false,
|
|
@@ -25,42 +48,27 @@ export const run = async (argvArg) => {
|
|
|
25
48
|
executor: "bash",
|
|
26
49
|
sourceFilePaths: [],
|
|
27
50
|
});
|
|
28
|
-
|
|
29
|
-
try {
|
|
30
|
-
mergeRequested = resolveReleaseMergeFlag(argvArg);
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
logger.log("error", error instanceof Error ? error.message : String(error));
|
|
34
|
-
process.exit(1);
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
51
|
+
const mergeRequested = resolveReleaseMergeFlag(argvArg);
|
|
37
52
|
const workflow = await resolveReleaseWorkflow(argvArg);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
logger.log("error", error instanceof Error ? error.message : String(error));
|
|
53
|
-
process.exit(1);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
53
|
+
assertReleaseConfiguration(workflow);
|
|
54
|
+
let branchContext = await inspectReleaseBranch({
|
|
55
|
+
smartshell: smartshellInstance,
|
|
56
|
+
cwd: paths.cwd,
|
|
57
|
+
gitRemote: workflow.gitRemote,
|
|
58
|
+
gitTargetActive: workflow.targets.includes("git"),
|
|
59
|
+
pushBranch: workflow.pushBranch,
|
|
60
|
+
pushTags: workflow.pushTags,
|
|
61
|
+
mergeRequested,
|
|
62
|
+
planMode: workflow.confirmation === "plan",
|
|
63
|
+
});
|
|
56
64
|
printReleasePlan(workflow, branchContext);
|
|
57
65
|
if (workflow.confirmation === "plan") {
|
|
58
66
|
return;
|
|
59
67
|
}
|
|
68
|
+
await assertFreshReleaseCapabilities(smartshellInstance, workflow, branchContext.sourceCwd, branchContext.pushUrl);
|
|
60
69
|
const pending = await readPendingChangelog(plugins.path.join(branchContext.sourceCwd, workflow.changelogFile), workflow.changelogPendingSection);
|
|
61
70
|
if (pending.isEmpty && !argvArg["allow-empty"] && !argvArg.allowEmpty) {
|
|
62
|
-
|
|
63
|
-
process.exit(1);
|
|
71
|
+
throw new Error("No pending changelog entries. Nothing to release.");
|
|
64
72
|
}
|
|
65
73
|
const versionType = resolveVersionType(argvArg, pending.block);
|
|
66
74
|
const projectType = await commitHelpers.detectProjectType(branchContext.sourceCwd);
|
|
@@ -77,17 +85,7 @@ export const run = async (argvArg) => {
|
|
|
77
85
|
}
|
|
78
86
|
}
|
|
79
87
|
let newVersion = plannedVersion;
|
|
80
|
-
|
|
81
|
-
const npmResults = [];
|
|
82
|
-
const dockerResults = [];
|
|
83
|
-
try {
|
|
84
|
-
branchContext = await prepareReleaseIntegration(smartshellInstance, branchContext);
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
logger.log("error", error instanceof Error ? error.message : String(error));
|
|
88
|
-
process.exit(1);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
88
|
+
branchContext = await prepareReleaseIntegration(smartshellInstance, branchContext);
|
|
91
89
|
if (workflow.runTests) {
|
|
92
90
|
await runCommandStep(smartshellInstance, branchContext.sourceCwd, "Running tests", workflow.testCommand);
|
|
93
91
|
}
|
|
@@ -95,27 +93,13 @@ export const run = async (argvArg) => {
|
|
|
95
93
|
let releasePushUrl = branchContext.pushUrl;
|
|
96
94
|
let expectedRemoteMainOid = branchContext.remoteMainOid;
|
|
97
95
|
if (branchContext.sourceBranch === "main") {
|
|
98
|
-
|
|
99
|
-
await revalidatePreparedReleaseBranch(smartshellInstance, branchContext);
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
logger.log("error", error instanceof Error ? error.message : String(error));
|
|
103
|
-
process.exit(1);
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
96
|
+
await revalidatePreparedReleaseBranch(smartshellInstance, branchContext);
|
|
106
97
|
}
|
|
107
98
|
else {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
expectedRemoteMainOid = integration.expectedRemoteMainOid;
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
logger.log("error", error instanceof Error ? error.message : String(error));
|
|
116
|
-
process.exit(1);
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
99
|
+
const integration = await integrateReleaseBranch(smartshellInstance, branchContext);
|
|
100
|
+
releaseCwd = integration.releaseCwd;
|
|
101
|
+
releasePushUrl = integration.pushUrl;
|
|
102
|
+
expectedRemoteMainOid = integration.expectedRemoteMainOid;
|
|
119
103
|
}
|
|
120
104
|
newVersion = await runVersionStep(projectType, versionType, releaseCwd);
|
|
121
105
|
await runChangelogStep(workflow, newVersion, releaseCwd);
|
|
@@ -126,47 +110,315 @@ export const run = async (argvArg) => {
|
|
|
126
110
|
await runCommandStep(smartshellInstance, releaseCwd, "Running release build", workflow.buildCommand);
|
|
127
111
|
await verifyCleanTree(smartshellInstance, releaseCwd, "Build produced uncommitted changes. Aborting release.");
|
|
128
112
|
}
|
|
129
|
-
const ensurePublicationState = async () => {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
await revalidateReleasePublicationState(smartshellInstance, branchContext, releaseRefs.mainOid, expectedRemoteMainOid);
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
catch (error) {
|
|
136
|
-
logger.log("error", error instanceof Error ? error.message : String(error));
|
|
137
|
-
process.exit(1);
|
|
138
|
-
return false;
|
|
139
|
-
}
|
|
113
|
+
const ensurePublicationState = async (expectedRemoteMainOidArg = expectedRemoteMainOid) => {
|
|
114
|
+
await verifyReleaseRefs(smartshellInstance, releaseCwd, newVersion, releaseRefs);
|
|
115
|
+
await revalidateReleasePublicationState(smartshellInstance, branchContext, releaseRefs.mainOid, expectedRemoteMainOidArg);
|
|
140
116
|
};
|
|
141
|
-
|
|
117
|
+
await ensurePublicationState();
|
|
118
|
+
const journalContext = await createReleaseJournal({
|
|
119
|
+
smartshell: smartshellInstance,
|
|
120
|
+
workflow,
|
|
121
|
+
releaseCwd,
|
|
122
|
+
releasePushUrl,
|
|
123
|
+
expectedRemoteMainOid,
|
|
124
|
+
version: newVersion,
|
|
125
|
+
refs: releaseRefs,
|
|
126
|
+
ensurePublicationState,
|
|
127
|
+
});
|
|
128
|
+
const finalJournal = await executeReleasePublication({
|
|
129
|
+
smartshell: smartshellInstance,
|
|
130
|
+
cwd: releaseCwd,
|
|
131
|
+
store: journalContext.store,
|
|
132
|
+
journal: journalContext.journal,
|
|
133
|
+
pushUrl: releasePushUrl,
|
|
134
|
+
ensurePublicationState,
|
|
135
|
+
});
|
|
136
|
+
printReleaseJournalSummary(finalJournal);
|
|
137
|
+
};
|
|
138
|
+
const assertFreshReleaseCapabilities = async (smartshellArg, workflowArg, cwdArg, pushUrlArg) => {
|
|
139
|
+
if (workflowArg.targets.includes("docker")) {
|
|
140
|
+
throw new Error("Journaled Docker publication requires the planned structured tSDocker digest capability. Disable the Docker target until that upstream release is installed.");
|
|
141
|
+
}
|
|
142
|
+
if (workflowArg.targets.includes("git") && !pushUrlArg) {
|
|
143
|
+
throw new Error("The Git release target requires one resolved push destination.");
|
|
144
|
+
}
|
|
145
|
+
if (workflowArg.targets.includes("git") ||
|
|
146
|
+
workflowArg.targets.includes("npm")) {
|
|
147
|
+
await assertNoLegacyNpmPublisher(cwdArg);
|
|
148
|
+
}
|
|
149
|
+
if (workflowArg.targets.includes("npm")) {
|
|
150
|
+
await assertPnpmReleaseCapability(smartshellArg, cwdArg);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
const assertReleaseConfiguration = (workflowArg) => {
|
|
154
|
+
if (workflowArg.targets.includes("git")) {
|
|
155
|
+
normalizeReleaseGitRemoteName(workflowArg.gitRemote);
|
|
156
|
+
}
|
|
157
|
+
if (!workflowArg.targets.includes("npm")) {
|
|
142
158
|
return;
|
|
143
159
|
}
|
|
144
|
-
if (
|
|
145
|
-
|
|
146
|
-
if (gitResults.some((result) => result.status === "failed")) {
|
|
147
|
-
printReleaseSummary(newVersion, gitResults, npmResults, dockerResults);
|
|
148
|
-
process.exit(1);
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
expectedRemoteMainOid = releaseRefs.mainOid;
|
|
160
|
+
if (workflowArg.npmRegistries.length === 0) {
|
|
161
|
+
throw new Error("The npm release target requires at least one registry.");
|
|
152
162
|
}
|
|
153
|
-
if (
|
|
154
|
-
|
|
155
|
-
|
|
163
|
+
if (workflowArg.npmAccessLevel !== "public") {
|
|
164
|
+
throw new Error("Journaled npm publication currently requires public access so every destination can be verified anonymously.");
|
|
165
|
+
}
|
|
166
|
+
if (workflowArg.npmAlreadyPublished !== "success" &&
|
|
167
|
+
workflowArg.npmAlreadyPublished !== "error") {
|
|
168
|
+
throw new Error("release.targets.npm.alreadyPublished must be success or error.");
|
|
169
|
+
}
|
|
170
|
+
const canonicalRegistries = workflowArg.npmRegistries.map(normalizeNpmRegistryUrl);
|
|
171
|
+
if (new Set(canonicalRegistries).size !== canonicalRegistries.length ||
|
|
172
|
+
canonicalRegistries.some((registryArg, indexArg) => registryArg !== workflowArg.npmRegistries[indexArg])) {
|
|
173
|
+
throw new Error("npm release registries must be unique canonical credential-free http(s) URLs.");
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
const createReleaseJournal = async (optionsArg) => {
|
|
177
|
+
const gitCommonDirectory = await resolveGitCommonDirectory(optionsArg.smartshell, optionsArg.releaseCwd);
|
|
178
|
+
const store = new ReleaseJournalStore(gitCommonDirectory);
|
|
179
|
+
const releaseDirectory = store.getReleaseDirectory(optionsArg.version);
|
|
180
|
+
const releaseDirectoryExists = await plugins.fs
|
|
181
|
+
.lstat(releaseDirectory)
|
|
182
|
+
.then(() => true)
|
|
183
|
+
.catch((error) => {
|
|
184
|
+
if (error.code === "ENOENT")
|
|
185
|
+
return false;
|
|
186
|
+
throw error;
|
|
187
|
+
});
|
|
188
|
+
if (releaseDirectoryExists) {
|
|
189
|
+
throw new Error(`Release journal v${optionsArg.version} already exists. Inspect or resume it instead of regenerating artifacts.`);
|
|
190
|
+
}
|
|
191
|
+
let temporaryDirectory = await store.createTemporaryDirectory(optionsArg.version);
|
|
192
|
+
try {
|
|
193
|
+
let artifact = null;
|
|
194
|
+
if (optionsArg.workflow.targets.includes("npm")) {
|
|
195
|
+
artifact = await packNpmArtifact(optionsArg.smartshell, optionsArg.releaseCwd, temporaryDirectory, optionsArg.version);
|
|
196
|
+
await verifyCleanTree(optionsArg.smartshell, optionsArg.releaseCwd, "npm pack lifecycle scripts changed the release worktree. Aborting release.");
|
|
197
|
+
await optionsArg.ensurePublicationState();
|
|
198
|
+
}
|
|
199
|
+
const gitEnabled = optionsArg.workflow.targets.includes("git");
|
|
200
|
+
if (gitEnabled &&
|
|
201
|
+
(!optionsArg.releasePushUrl || !optionsArg.expectedRemoteMainOid)) {
|
|
202
|
+
throw new Error("Git release destination state is incomplete.");
|
|
203
|
+
}
|
|
204
|
+
const now = new Date().toISOString();
|
|
205
|
+
const gitStatus = createInitialTargetStatus(gitEnabled);
|
|
206
|
+
const journal = finalizeJournalCompletion({
|
|
207
|
+
kind: "gitzone-release-journal",
|
|
208
|
+
schemaVersion: 1,
|
|
209
|
+
revision: 1,
|
|
210
|
+
release: {
|
|
211
|
+
version: optionsArg.version,
|
|
212
|
+
tag: `v${optionsArg.version}`,
|
|
213
|
+
mainOid: optionsArg.refs.mainOid,
|
|
214
|
+
tagOid: optionsArg.refs.tagOid,
|
|
215
|
+
},
|
|
216
|
+
artifact,
|
|
217
|
+
git: {
|
|
218
|
+
state: gitStatus.state,
|
|
219
|
+
attempts: gitStatus.attempts,
|
|
220
|
+
attempt: gitStatus.attempt,
|
|
221
|
+
error: gitStatus.error,
|
|
222
|
+
remote: gitEnabled ? optionsArg.workflow.gitRemote : null,
|
|
223
|
+
destinationHash: gitEnabled
|
|
224
|
+
? hashReleaseDestination(optionsArg.releasePushUrl)
|
|
225
|
+
: null,
|
|
226
|
+
expectedRemoteMainOid: gitEnabled
|
|
227
|
+
? optionsArg.expectedRemoteMainOid
|
|
228
|
+
: null,
|
|
229
|
+
},
|
|
230
|
+
npm: {
|
|
231
|
+
access: "public",
|
|
232
|
+
tag: "latest",
|
|
233
|
+
alreadyPublished: optionsArg.workflow.targets.includes("npm")
|
|
234
|
+
? optionsArg.workflow.npmAlreadyPublished
|
|
235
|
+
: "success",
|
|
236
|
+
registries: optionsArg.workflow.targets.includes("npm")
|
|
237
|
+
? optionsArg.workflow.npmRegistries.map((registryArg) => {
|
|
238
|
+
const status = createInitialTargetStatus(true);
|
|
239
|
+
return {
|
|
240
|
+
state: status.state,
|
|
241
|
+
attempts: status.attempts,
|
|
242
|
+
attempt: status.attempt,
|
|
243
|
+
error: status.error,
|
|
244
|
+
registry: registryArg,
|
|
245
|
+
};
|
|
246
|
+
})
|
|
247
|
+
: [],
|
|
248
|
+
},
|
|
249
|
+
createdAt: now,
|
|
250
|
+
updatedAt: now,
|
|
251
|
+
completedAt: null,
|
|
252
|
+
}, now);
|
|
253
|
+
const installed = await store.installPrepared(temporaryDirectory, journal);
|
|
254
|
+
temporaryDirectory = "";
|
|
255
|
+
return { store, journal: installed };
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
if (temporaryDirectory) {
|
|
259
|
+
await plugins.fs.rm(temporaryDirectory, { recursive: true, force: true });
|
|
156
260
|
}
|
|
157
|
-
npmResults.push(...(await runNpmTarget(smartshellInstance, workflow, releaseCwd)));
|
|
158
261
|
}
|
|
159
|
-
|
|
160
|
-
|
|
262
|
+
};
|
|
263
|
+
const runReleaseInspect = async (argvArg, modeArg) => {
|
|
264
|
+
if (argvArg._?.length > 3) {
|
|
265
|
+
throw new Error("Usage: gitzone release inspect [version] [--json]");
|
|
266
|
+
}
|
|
267
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
268
|
+
executor: "bash",
|
|
269
|
+
sourceFilePaths: [],
|
|
270
|
+
});
|
|
271
|
+
const store = new ReleaseJournalStore(await resolveGitCommonDirectory(smartshellInstance, paths.cwd));
|
|
272
|
+
const requestedVersion = argvArg._?.[2];
|
|
273
|
+
const journals = requestedVersion
|
|
274
|
+
? [await store.read(normalizeReleaseVersion(requestedVersion))]
|
|
275
|
+
: await store.list();
|
|
276
|
+
if (modeArg.json) {
|
|
277
|
+
printJson({ ok: true, journals });
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (journals.length === 0) {
|
|
281
|
+
console.log("No release journals found.");
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
for (const journal of journals) {
|
|
285
|
+
printReleaseJournalSummary(journal);
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
const assertResumeArguments = (argvArg) => {
|
|
289
|
+
const forbiddenKeys = [
|
|
290
|
+
"allow-empty",
|
|
291
|
+
"allowEmpty",
|
|
292
|
+
"b",
|
|
293
|
+
"build",
|
|
294
|
+
"docker",
|
|
295
|
+
"git",
|
|
296
|
+
"major",
|
|
297
|
+
"merge",
|
|
298
|
+
"minor",
|
|
299
|
+
"npm",
|
|
300
|
+
"p",
|
|
301
|
+
"patch",
|
|
302
|
+
"plan",
|
|
303
|
+
"publish",
|
|
304
|
+
"push",
|
|
305
|
+
"t",
|
|
306
|
+
"target",
|
|
307
|
+
"targets",
|
|
308
|
+
"test",
|
|
309
|
+
];
|
|
310
|
+
if (forbiddenKeys.some((keyArg) => Object.prototype.hasOwnProperty.call(argvArg, keyArg))) {
|
|
311
|
+
throw new Error("release resume rejects fresh-release target, integration, build, test, and version overrides.");
|
|
312
|
+
}
|
|
313
|
+
if (argvArg._?.length !== 3) {
|
|
314
|
+
throw new Error("Usage: gitzone release resume <version> [-y] [--recover-attempt=<id>]");
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
const runReleaseResume = async (argvArg, modeArg) => {
|
|
318
|
+
assertResumeArguments(argvArg);
|
|
319
|
+
if (modeArg.json) {
|
|
320
|
+
throw new Error("JSON output is read-only. Use release inspect --json.");
|
|
321
|
+
}
|
|
322
|
+
const recoveryAttemptId = argvArg["recover-attempt"] || argvArg.recoverAttempt;
|
|
323
|
+
if (recoveryAttemptId !== undefined &&
|
|
324
|
+
(typeof recoveryAttemptId !== "string" ||
|
|
325
|
+
!/^[0-9a-f]{32}$/.test(recoveryAttemptId))) {
|
|
326
|
+
throw new Error("--recover-attempt requires one exact 32-character owner ID.");
|
|
327
|
+
}
|
|
328
|
+
const version = normalizeReleaseVersion(argvArg._[2]);
|
|
329
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
330
|
+
executor: "bash",
|
|
331
|
+
sourceFilePaths: [],
|
|
332
|
+
});
|
|
333
|
+
const store = new ReleaseJournalStore(await resolveGitCommonDirectory(smartshellInstance, paths.cwd));
|
|
334
|
+
const journal = await store.read(version);
|
|
335
|
+
const gitEnabled = journal.git.state !== "skipped";
|
|
336
|
+
const resumeConfiguration = await resolveReleaseResumeConfiguration({
|
|
337
|
+
git: gitEnabled,
|
|
338
|
+
npm: journal.npm.registries.length > 0,
|
|
339
|
+
});
|
|
340
|
+
await assertResumeConfiguration(resumeConfiguration, journal, paths.cwd);
|
|
341
|
+
if (journal.artifact) {
|
|
342
|
+
await assertPnpmReleaseCapability(smartshellInstance, paths.cwd);
|
|
343
|
+
await assertNoLegacyNpmPublisher(paths.cwd);
|
|
344
|
+
await verifyStoredNpmArtifact(store.getArtifactPath(version), journal.artifact);
|
|
345
|
+
}
|
|
346
|
+
const branchContext = await inspectReleaseBranch({
|
|
347
|
+
smartshell: smartshellInstance,
|
|
348
|
+
cwd: paths.cwd,
|
|
349
|
+
gitRemote: journal.git.remote || resumeConfiguration.gitRemote,
|
|
350
|
+
gitTargetActive: gitEnabled,
|
|
351
|
+
pushBranch: true,
|
|
352
|
+
pushTags: true,
|
|
353
|
+
mergeRequested: false,
|
|
354
|
+
planMode: false,
|
|
355
|
+
});
|
|
356
|
+
if (branchContext.sourceOid !== journal.release.mainOid) {
|
|
357
|
+
throw new Error("Resume must run from the journaled release commit on main.");
|
|
358
|
+
}
|
|
359
|
+
const refs = await captureReleaseRefs(smartshellInstance, paths.cwd, version, journal.release.mainOid);
|
|
360
|
+
if (refs.tagOid !== journal.release.tagOid) {
|
|
361
|
+
throw new Error("The local release tag no longer matches the journal.");
|
|
362
|
+
}
|
|
363
|
+
const pushUrl = gitEnabled ? branchContext.pushUrl : undefined;
|
|
364
|
+
if (gitEnabled &&
|
|
365
|
+
(!pushUrl || hashReleaseDestination(pushUrl) !== journal.git.destinationHash)) {
|
|
366
|
+
throw new Error("The Git push destination changed after journal creation.");
|
|
367
|
+
}
|
|
368
|
+
if (!modeArg.yes) {
|
|
369
|
+
if (!modeArg.interactive) {
|
|
370
|
+
throw new Error("Release resume requires an interactive terminal or -y.");
|
|
371
|
+
}
|
|
372
|
+
const confirmed = await plugins.smartinteract.SmartInteract.getCliConfirmation(`Resume release v${version} now?`, true);
|
|
373
|
+
if (!confirmed) {
|
|
374
|
+
logger.log("info", "Release resume cancelled.");
|
|
161
375
|
return;
|
|
162
376
|
}
|
|
163
|
-
dockerResults.push(...(await runDockerTarget(smartshellInstance, workflow, releaseCwd)));
|
|
164
377
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
378
|
+
const ensurePublicationState = async (expectedRemoteMainOidArg) => {
|
|
379
|
+
await verifyReleaseRefs(smartshellInstance, paths.cwd, version, refs);
|
|
380
|
+
await revalidateReleasePublicationState(smartshellInstance, branchContext, journal.release.mainOid, expectedRemoteMainOidArg);
|
|
381
|
+
};
|
|
382
|
+
const finalJournal = await executeReleasePublication({
|
|
383
|
+
smartshell: smartshellInstance,
|
|
384
|
+
cwd: paths.cwd,
|
|
385
|
+
store,
|
|
386
|
+
journal,
|
|
387
|
+
pushUrl,
|
|
388
|
+
recoveryAttemptId,
|
|
389
|
+
ensurePublicationState,
|
|
390
|
+
});
|
|
391
|
+
printReleaseJournalSummary(finalJournal);
|
|
392
|
+
};
|
|
393
|
+
const assertResumeConfiguration = async (workflowArg, journalArg, cwdArg) => {
|
|
394
|
+
if (journalArg.git.state !== "skipped" &&
|
|
395
|
+
workflowArg.gitRemote !== journalArg.git.remote) {
|
|
396
|
+
throw new Error("Current Git release remote does not match the journal.");
|
|
397
|
+
}
|
|
398
|
+
const currentRegistries = workflowArg.npmRegistries.map(normalizeNpmRegistryUrl);
|
|
399
|
+
if (journalArg.npm.registries.length > 0 &&
|
|
400
|
+
(JSON.stringify(currentRegistries) !==
|
|
401
|
+
JSON.stringify(journalArg.npm.registries.map((registryArg) => registryArg.registry)) ||
|
|
402
|
+
workflowArg.npmAccessLevel !== journalArg.npm.access ||
|
|
403
|
+
workflowArg.npmAlreadyPublished !== journalArg.npm.alreadyPublished)) {
|
|
404
|
+
throw new Error("Current npm release configuration does not match the journal.");
|
|
405
|
+
}
|
|
406
|
+
if (journalArg.git.state !== "skipped" || journalArg.artifact) {
|
|
407
|
+
await assertNoLegacyNpmPublisher(cwdArg);
|
|
168
408
|
}
|
|
169
409
|
};
|
|
410
|
+
const printReleaseJournalSummary = (journalArg) => {
|
|
411
|
+
console.log("");
|
|
412
|
+
console.log(`Release v${journalArg.release.version}`);
|
|
413
|
+
console.log(`journal revision: ${journalArg.revision}`);
|
|
414
|
+
console.log(`artifact: ${journalArg.artifact ? `${journalArg.artifact.integrity} (${journalArg.artifact.sha256})` : "none"}`);
|
|
415
|
+
console.log(`git: ${journalArg.git.state}`);
|
|
416
|
+
for (const registry of journalArg.npm.registries) {
|
|
417
|
+
console.log(`npm ${registry.registry}: ${registry.state}`);
|
|
418
|
+
}
|
|
419
|
+
console.log(`completed: ${journalArg.completedAt || "no"}`);
|
|
420
|
+
console.log("");
|
|
421
|
+
};
|
|
170
422
|
function resolveVersionType(argvArg, pendingBlock) {
|
|
171
423
|
if (argvArg.major)
|
|
172
424
|
return "major";
|
|
@@ -180,17 +432,19 @@ async function runCommandStep(smartshellInstance, cwdArg, label, command) {
|
|
|
180
432
|
console.log(`\n${label}`);
|
|
181
433
|
const result = await smartshellInstance.exec(command, { cwd: cwdArg });
|
|
182
434
|
if (result.exitCode !== 0) {
|
|
183
|
-
|
|
184
|
-
process.exit(1);
|
|
435
|
+
throw new Error(`${label} failed. Aborting release.`);
|
|
185
436
|
}
|
|
186
437
|
logger.log("success", `${label} passed.`);
|
|
187
438
|
}
|
|
188
439
|
async function verifyCleanTree(smartshellInstance, cwdArg, errorMessage) {
|
|
189
|
-
const statusResult = await smartshellInstance.execSpawn("git", ["status", "--porcelain"], {
|
|
440
|
+
const statusResult = await smartshellInstance.execSpawn("git", ["status", "--porcelain"], {
|
|
441
|
+
cwd: cwdArg,
|
|
442
|
+
env: releaseGitEnv,
|
|
443
|
+
timeout: 60_000,
|
|
444
|
+
timeoutKillGraceMs: 5_000,
|
|
445
|
+
});
|
|
190
446
|
if (statusResult.stdout.trim() !== "") {
|
|
191
|
-
|
|
192
|
-
console.log(statusResult.stdout);
|
|
193
|
-
process.exit(1);
|
|
447
|
+
throw new Error(errorMessage);
|
|
194
448
|
}
|
|
195
449
|
}
|
|
196
450
|
async function runVersionStep(projectType, versionType, cwdArg) {
|
|
@@ -210,15 +464,28 @@ async function runReleaseCommitStep(smartshellInstance, newVersion, cwdArg) {
|
|
|
210
464
|
const addResult = await smartshellInstance.execSpawn("git", ["add", "-A"], {
|
|
211
465
|
cwd: cwdArg,
|
|
212
466
|
env: releaseGitEnv,
|
|
467
|
+
timeout: 60_000,
|
|
468
|
+
timeoutKillGraceMs: 5_000,
|
|
213
469
|
});
|
|
214
470
|
if (addResult.exitCode !== 0) {
|
|
215
471
|
throw new Error("Staging release metadata failed.");
|
|
216
472
|
}
|
|
217
|
-
const result = await smartshellInstance.execSpawn("git", ["commit", "-m", `v${newVersion}`], {
|
|
473
|
+
const result = await smartshellInstance.execSpawn("git", ["commit", "-m", `v${newVersion}`], {
|
|
474
|
+
cwd: cwdArg,
|
|
475
|
+
env: releaseGitEnv,
|
|
476
|
+
timeout: 60_000,
|
|
477
|
+
timeoutKillGraceMs: 5_000,
|
|
478
|
+
});
|
|
218
479
|
if (result.exitCode !== 0) {
|
|
219
480
|
throw new Error("Release commit failed.");
|
|
220
481
|
}
|
|
221
|
-
const branchResult = await smartshellInstance.execSpawn("git", ["symbolic-ref", "--quiet", "HEAD"], {
|
|
482
|
+
const branchResult = await smartshellInstance.execSpawn("git", ["symbolic-ref", "--quiet", "HEAD"], {
|
|
483
|
+
cwd: cwdArg,
|
|
484
|
+
env: releaseGitEnv,
|
|
485
|
+
silent: true,
|
|
486
|
+
timeout: 60_000,
|
|
487
|
+
timeoutKillGraceMs: 5_000,
|
|
488
|
+
});
|
|
222
489
|
if (branchResult.exitCode !== 0 ||
|
|
223
490
|
branchResult.stdout.trim() !== "refs/heads/main") {
|
|
224
491
|
throw new Error("The release commit was not created on main.");
|
|
@@ -238,13 +505,24 @@ async function runTagStep(smartshellInstance, newVersion, releaseCommitOidArg, c
|
|
|
238
505
|
"-m",
|
|
239
506
|
`v${newVersion}`,
|
|
240
507
|
releaseCommitOidArg,
|
|
241
|
-
], {
|
|
508
|
+
], {
|
|
509
|
+
cwd: cwdArg,
|
|
510
|
+
env: releaseGitEnv,
|
|
511
|
+
timeout: 60_000,
|
|
512
|
+
timeoutKillGraceMs: 5_000,
|
|
513
|
+
});
|
|
242
514
|
if (result.exitCode !== 0) {
|
|
243
515
|
throw new Error("Release tag failed.");
|
|
244
516
|
}
|
|
245
517
|
}
|
|
246
518
|
const resolveGitObjectOid = async (smartshellInstanceArg, cwdArg, revisionArg) => {
|
|
247
|
-
const result = await smartshellInstanceArg.execSpawn("git", ["rev-parse", "--verify", revisionArg], {
|
|
519
|
+
const result = await smartshellInstanceArg.execSpawn("git", ["rev-parse", "--verify", revisionArg], {
|
|
520
|
+
cwd: cwdArg,
|
|
521
|
+
env: releaseGitEnv,
|
|
522
|
+
silent: true,
|
|
523
|
+
timeout: 60_000,
|
|
524
|
+
timeoutKillGraceMs: 5_000,
|
|
525
|
+
});
|
|
248
526
|
const oid = result.stdout.trim();
|
|
249
527
|
if (result.exitCode !== 0 || !/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i.test(oid)) {
|
|
250
528
|
throw new Error(`Unable to resolve release Git object ${revisionArg}.`);
|
|
@@ -268,148 +546,6 @@ const verifyReleaseRefs = async (smartshellInstanceArg, cwdArg, newVersionArg, e
|
|
|
268
546
|
throw new Error("Local release refs changed before publication. Inspect main and the release tag before retrying.");
|
|
269
547
|
}
|
|
270
548
|
};
|
|
271
|
-
async function runGitTarget(smartshellInstance, workflow, cwdArg, newVersionArg, releaseRefsArg, pushUrlArg, expectedRemoteMainOidArg) {
|
|
272
|
-
const destination = pushUrlArg || workflow.gitRemote;
|
|
273
|
-
const targets = [];
|
|
274
|
-
const refspecs = [];
|
|
275
|
-
if (workflow.pushBranch) {
|
|
276
|
-
targets.push(`${workflow.gitRemote}/main`);
|
|
277
|
-
refspecs.push("refs/heads/main:refs/heads/main");
|
|
278
|
-
}
|
|
279
|
-
if (workflow.pushTags) {
|
|
280
|
-
targets.push(`${workflow.gitRemote}/v${newVersionArg}`);
|
|
281
|
-
refspecs.push(`refs/tags/v${newVersionArg}:refs/tags/v${newVersionArg}`);
|
|
282
|
-
}
|
|
283
|
-
if (refspecs.length === 0) {
|
|
284
|
-
return [];
|
|
285
|
-
}
|
|
286
|
-
const args = buildReleaseGitPushArgs({
|
|
287
|
-
destination,
|
|
288
|
-
newVersion: newVersionArg,
|
|
289
|
-
pushBranch: workflow.pushBranch,
|
|
290
|
-
pushTags: workflow.pushTags,
|
|
291
|
-
mainOid: releaseRefsArg.mainOid,
|
|
292
|
-
tagOid: releaseRefsArg.tagOid,
|
|
293
|
-
expectedRemoteMainOid: expectedRemoteMainOidArg,
|
|
294
|
-
});
|
|
295
|
-
const result = await smartshellInstance.execSpawn("git", args, {
|
|
296
|
-
cwd: cwdArg,
|
|
297
|
-
env: releaseGitEnv,
|
|
298
|
-
});
|
|
299
|
-
return targets.map((target) => ({
|
|
300
|
-
target,
|
|
301
|
-
status: result.exitCode === 0 ? "success" : "failed",
|
|
302
|
-
message: result.exitCode === 0
|
|
303
|
-
? undefined
|
|
304
|
-
: firstMeaningfulLine(result.combinedOutput),
|
|
305
|
-
}));
|
|
306
|
-
}
|
|
307
|
-
export function buildReleaseGitPushArgs(optionsArg) {
|
|
308
|
-
const refspecs = [];
|
|
309
|
-
if (optionsArg.pushBranch) {
|
|
310
|
-
refspecs.push(`${optionsArg.mainOid}:refs/heads/main`);
|
|
311
|
-
}
|
|
312
|
-
if (optionsArg.pushTags) {
|
|
313
|
-
refspecs.push(`${optionsArg.tagOid}:refs/tags/v${optionsArg.newVersion}`);
|
|
314
|
-
}
|
|
315
|
-
const args = ["push", "--no-follow-tags"];
|
|
316
|
-
if (refspecs.length > 1) {
|
|
317
|
-
args.push("--atomic");
|
|
318
|
-
}
|
|
319
|
-
if (optionsArg.pushBranch && optionsArg.expectedRemoteMainOid) {
|
|
320
|
-
args.push(`--force-with-lease=refs/heads/main:${optionsArg.expectedRemoteMainOid}`);
|
|
321
|
-
}
|
|
322
|
-
args.push(optionsArg.destination, ...refspecs);
|
|
323
|
-
return args;
|
|
324
|
-
}
|
|
325
|
-
async function runNpmTarget(smartshellInstance, workflow, cwdArg) {
|
|
326
|
-
if (!workflow.npmEnabled) {
|
|
327
|
-
return [{ target: "npm", status: "skipped", message: "disabled" }];
|
|
328
|
-
}
|
|
329
|
-
if (workflow.npmRegistries.length === 0) {
|
|
330
|
-
return [
|
|
331
|
-
{ target: "npm", status: "failed", message: "no registries configured" },
|
|
332
|
-
];
|
|
333
|
-
}
|
|
334
|
-
const results = [];
|
|
335
|
-
for (const registry of workflow.npmRegistries) {
|
|
336
|
-
const command = `pnpm publish --registry=${registry} --access=${workflow.npmAccessLevel}`;
|
|
337
|
-
const result = await smartshellInstance.exec(command, { cwd: cwdArg });
|
|
338
|
-
const output = result.combinedOutput;
|
|
339
|
-
if (result.exitCode === 0) {
|
|
340
|
-
results.push({ target: registry, status: "success" });
|
|
341
|
-
}
|
|
342
|
-
else if (isAlreadyPublishedOutput(output) &&
|
|
343
|
-
workflow.npmAlreadyPublished === "success") {
|
|
344
|
-
results.push({ target: registry, status: "already-published" });
|
|
345
|
-
}
|
|
346
|
-
else {
|
|
347
|
-
results.push({
|
|
348
|
-
target: registry,
|
|
349
|
-
status: "failed",
|
|
350
|
-
message: firstMeaningfulLine(output),
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
return results;
|
|
355
|
-
}
|
|
356
|
-
async function runDockerTarget(smartshellInstance, workflow, cwdArg) {
|
|
357
|
-
if (!workflow.dockerEnabled) {
|
|
358
|
-
return [{ target: "docker", status: "skipped", message: "disabled" }];
|
|
359
|
-
}
|
|
360
|
-
let packageJson;
|
|
361
|
-
try {
|
|
362
|
-
packageJson = JSON.parse(await plugins.fs.readFile(plugins.path.join(cwdArg, "package.json"), "utf8"));
|
|
363
|
-
}
|
|
364
|
-
catch {
|
|
365
|
-
packageJson = undefined;
|
|
366
|
-
}
|
|
367
|
-
if (!getDeclaredTsdockerRange(packageJson)) {
|
|
368
|
-
return [
|
|
369
|
-
{
|
|
370
|
-
target: "tsdocker",
|
|
371
|
-
status: "failed",
|
|
372
|
-
message: "Docker releases require @git.zone/tsdocker as a project dependency",
|
|
373
|
-
},
|
|
374
|
-
];
|
|
375
|
-
}
|
|
376
|
-
if (!(await hasInstalledProjectTsdockerBinary(cwdArg))) {
|
|
377
|
-
return [
|
|
378
|
-
{
|
|
379
|
-
target: "tsdocker",
|
|
380
|
-
status: "failed",
|
|
381
|
-
message: "Docker releases require the installed project-local tSDocker binary",
|
|
382
|
-
},
|
|
383
|
-
];
|
|
384
|
-
}
|
|
385
|
-
const minimumTsdockerVersion = getTsdockerMinimumVersion(workflow.dockerBuildRegistries.length > 0, workflow.dockerTest);
|
|
386
|
-
if (minimumTsdockerVersion) {
|
|
387
|
-
const versionResult = await smartshellInstance.exec("pnpm exec tsdocker --version", { cwd: cwdArg });
|
|
388
|
-
if (versionResult.exitCode !== 0 ||
|
|
389
|
-
!supportsTsdockerMinimumVersion(versionResult.combinedOutput, minimumTsdockerVersion)) {
|
|
390
|
-
const minimumVersion = formatTsdockerMinimumVersion(minimumTsdockerVersion);
|
|
391
|
-
return [
|
|
392
|
-
{
|
|
393
|
-
target: "tsdocker",
|
|
394
|
-
status: "failed",
|
|
395
|
-
message: `Docker release options require project-local @git.zone/tsdocker >= ${minimumVersion}`,
|
|
396
|
-
},
|
|
397
|
-
];
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
const command = buildTsdockerPushCommand(workflow);
|
|
401
|
-
const result = await smartshellInstance.exec(command, { cwd: cwdArg });
|
|
402
|
-
const output = result.combinedOutput;
|
|
403
|
-
return [
|
|
404
|
-
{
|
|
405
|
-
target: workflow.dockerPatterns.length > 0
|
|
406
|
-
? `tsdocker:${workflow.dockerPatterns.join(",")}`
|
|
407
|
-
: "tsdocker",
|
|
408
|
-
status: result.exitCode === 0 ? "success" : "failed",
|
|
409
|
-
message: result.exitCode === 0 ? undefined : firstMeaningfulLine(output),
|
|
410
|
-
},
|
|
411
|
-
];
|
|
412
|
-
}
|
|
413
549
|
export function buildTsdockerPushCommand(workflow) {
|
|
414
550
|
const commandParts = ["pnpm", "exec", "tsdocker", "push"];
|
|
415
551
|
for (const pattern of workflow.dockerPatterns) {
|
|
@@ -443,15 +579,6 @@ export function buildTsdockerPushCommand(workflow) {
|
|
|
443
579
|
}
|
|
444
580
|
return commandParts.join(" ");
|
|
445
581
|
}
|
|
446
|
-
function isAlreadyPublishedOutput(output) {
|
|
447
|
-
return /previously published versions|cannot publish over|already exists/i.test(output);
|
|
448
|
-
}
|
|
449
|
-
function firstMeaningfulLine(output) {
|
|
450
|
-
return (output
|
|
451
|
-
.split("\n")
|
|
452
|
-
.map((line) => line.trim())
|
|
453
|
-
.find((line) => line.length > 0) || "command failed");
|
|
454
|
-
}
|
|
455
582
|
function shellQuote(value) {
|
|
456
583
|
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
457
584
|
}
|
|
@@ -499,34 +626,11 @@ function formatDockerOptions(workflow) {
|
|
|
499
626
|
options.push(`context=${workflow.dockerContext}`);
|
|
500
627
|
return options.length > 0 ? options.join(", ") : "default";
|
|
501
628
|
}
|
|
502
|
-
function printReleaseSummary(newVersion, gitResults, npmResults, dockerResults) {
|
|
503
|
-
console.log("");
|
|
504
|
-
console.log(`Release v${newVersion}`);
|
|
505
|
-
console.log("");
|
|
506
|
-
if (gitResults.length > 0) {
|
|
507
|
-
console.log("git:");
|
|
508
|
-
for (const result of gitResults) {
|
|
509
|
-
console.log(` ${result.target} ${result.status}${result.message ? ` (${result.message})` : ""}`);
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
if (npmResults.length > 0) {
|
|
513
|
-
console.log("npm:");
|
|
514
|
-
for (const result of npmResults) {
|
|
515
|
-
console.log(` ${result.target} ${result.status}${result.message ? ` (${result.message})` : ""}`);
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
if (dockerResults.length > 0) {
|
|
519
|
-
console.log("docker:");
|
|
520
|
-
for (const result of dockerResults) {
|
|
521
|
-
console.log(` ${result.target} ${result.status}${result.message ? ` (${result.message})` : ""}`);
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
629
|
export function showHelp(mode) {
|
|
526
630
|
if (mode?.json) {
|
|
527
631
|
printJson({
|
|
528
632
|
command: "release",
|
|
529
|
-
usage: "gitzone release [options]",
|
|
633
|
+
usage: "gitzone release [inspect [version]|resume <version>] [options]",
|
|
530
634
|
description: "Creates a versioned release from pending changelog entries and publishes configured artifacts.",
|
|
531
635
|
flags: [
|
|
532
636
|
{
|
|
@@ -542,16 +646,19 @@ export function showHelp(mode) {
|
|
|
542
646
|
flag: "--no-build",
|
|
543
647
|
description: "Disable the post-metadata release build",
|
|
544
648
|
},
|
|
545
|
-
{ flag: "-p, --push", description: "
|
|
649
|
+
{ flag: "-p, --push", description: "Explicitly select the git target" },
|
|
546
650
|
{
|
|
547
651
|
flag: "--target <names>",
|
|
548
|
-
description: "
|
|
652
|
+
description: "Replace configured targets with a non-empty subset of git,npm,docker",
|
|
653
|
+
},
|
|
654
|
+
{ flag: "--npm", description: "Explicitly select the npm target" },
|
|
655
|
+
{
|
|
656
|
+
flag: "--docker",
|
|
657
|
+
description: "Select Docker and fail closed under journal schema v1",
|
|
549
658
|
},
|
|
550
|
-
{ flag: "--npm", description: "Enable the npm release target" },
|
|
551
|
-
{ flag: "--docker", description: "Enable the tsdocker release target" },
|
|
552
659
|
{
|
|
553
660
|
flag: "--no-publish",
|
|
554
|
-
description: "
|
|
661
|
+
description: "Remove npm and Docker without implicitly enabling Git",
|
|
555
662
|
},
|
|
556
663
|
{
|
|
557
664
|
flag: "--merge",
|
|
@@ -561,12 +668,24 @@ export function showHelp(mode) {
|
|
|
561
668
|
flag: "--plan",
|
|
562
669
|
description: "Show the workflow without fetching or mutating refs, files, the index, or worktrees",
|
|
563
670
|
},
|
|
671
|
+
{
|
|
672
|
+
flag: "inspect [version]",
|
|
673
|
+
description: "Read one or all durable release journals without mutation",
|
|
674
|
+
},
|
|
675
|
+
{
|
|
676
|
+
flag: "resume <version>",
|
|
677
|
+
description: "Resume exact Git/npm publication without rebuilding or repacking",
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
flag: "--recover-attempt <id>",
|
|
681
|
+
description: "Recover one exact 32-character hexadecimal attempt ID after proving it stopped",
|
|
682
|
+
},
|
|
564
683
|
],
|
|
565
684
|
});
|
|
566
685
|
return;
|
|
567
686
|
}
|
|
568
687
|
console.log("");
|
|
569
|
-
console.log("Usage: gitzone release [options]");
|
|
688
|
+
console.log("Usage: gitzone release [inspect [version]|resume <version>] [options]");
|
|
570
689
|
console.log("");
|
|
571
690
|
console.log("Creates a versioned release from changelog Pending entries.");
|
|
572
691
|
console.log("");
|
|
@@ -575,14 +694,17 @@ export function showHelp(mode) {
|
|
|
575
694
|
console.log(" -t, --test Enable release preflight tests");
|
|
576
695
|
console.log(" -b, --build Build after creating local release metadata");
|
|
577
696
|
console.log(" --no-build Disable the post-metadata release build");
|
|
578
|
-
console.log(" -p, --push
|
|
579
|
-
console.log(" --target <names>
|
|
580
|
-
console.log(" --npm
|
|
581
|
-
console.log(" --docker
|
|
582
|
-
console.log(" --no-publish
|
|
697
|
+
console.log(" -p, --push Explicitly select the git target");
|
|
698
|
+
console.log(" --target <names> Replace configured targets with a non-empty subset of git,npm,docker");
|
|
699
|
+
console.log(" --npm Explicitly select the npm target");
|
|
700
|
+
console.log(" --docker Select Docker (fails closed under journal schema v1)");
|
|
701
|
+
console.log(" --no-publish Remove npm and Docker without implicitly enabling Git");
|
|
583
702
|
console.log(" --merge Fast-forward and lease-push a cleanly rebased feature branch before release metadata");
|
|
584
703
|
console.log(" --major|--minor|--patch Override inferred semver level");
|
|
585
704
|
console.log(" --plan Show workflow without fetching or mutating refs, files, index, or worktrees");
|
|
705
|
+
console.log(" inspect [version] Read one or all durable release journals without mutation");
|
|
706
|
+
console.log(" resume <version> Resume exact Git/npm publication without rebuilding or repacking");
|
|
707
|
+
console.log(" --recover-attempt Recover one exact 32-character hexadecimal attempt ID after proving its publisher stopped");
|
|
586
708
|
console.log("");
|
|
587
709
|
}
|
|
588
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb2RfcmVsZWFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsOEJBQThCLEdBRS9CLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxLQUFLLGFBQWEsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyxhQUFhLEVBQ2IsdUJBQXVCLEdBRXhCLE1BQU0sNEJBQTRCLENBQUM7QUFVcEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxPQUFZLEVBQUUsRUFBRTtJQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN2QyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsU0FBUyxDQUFDO1lBQ1IsRUFBRSxFQUFFLEtBQUs7WUFDVCxLQUFLLEVBQ0gsMEhBQTBIO1NBQzdILENBQUMsQ0FBQztRQUNILE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQzNELFFBQVEsRUFBRSxNQUFNO1FBQ2hCLGVBQWUsRUFBRSxFQUFFO0tBQ3BCLENBQUMsQ0FBQztJQUNILElBQUksY0FBdUIsQ0FBQztJQUM1QixJQUFJLENBQUM7UUFDSCxjQUFjLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxJQUFJLGFBQW9DLENBQUM7SUFDekMsSUFBSSxDQUFDO1FBQ0gsYUFBYSxHQUFHLE1BQU0sb0JBQW9CLENBQUM7WUFDekMsVUFBVSxFQUFFLGtCQUFrQjtZQUM5QixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7WUFDN0IsZUFBZSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNqRCxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7WUFDL0IsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1lBQzNCLGNBQWM7WUFDZCxRQUFRLEVBQUUsUUFBUSxDQUFDLFlBQVksS0FBSyxNQUFNO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixPQUFPO0lBQ1QsQ0FBQztJQUNELGdCQUFnQixDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMxQyxJQUFJLFFBQVEsQ0FBQyxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDckMsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLG9CQUFvQixDQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFDbEUsUUFBUSxDQUFDLHVCQUF1QixDQUNqQyxDQUFDO0lBQ0YsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLG1EQUFtRCxDQUFDLENBQUM7UUFDekUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvRCxNQUFNLFdBQVcsR0FBRyxNQUFNLGFBQWEsQ0FBQyxpQkFBaUIsQ0FDdkQsYUFBYSxDQUFDLFNBQVMsQ0FDeEIsQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHLE1BQU0sYUFBYSxDQUFDLGtCQUFrQixDQUMzRCxXQUFXLEVBQ1gsYUFBYSxDQUFDLFNBQVMsQ0FDeEIsQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxtQkFBbUIsQ0FDdEQsY0FBYyxFQUNkLFdBQVcsQ0FDWixDQUFDO0lBRUYsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYix3R0FBd0csQ0FDekcsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FDYixNQUFNLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUMxRCxZQUFZLGNBQWMsS0FBSyxXQUFXLFFBQVEsRUFDbEQsSUFBSSxDQUNMLENBQUM7UUFDSixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVSxHQUFHLGNBQWMsQ0FBQztJQUNoQyxNQUFNLFVBQVUsR0FBb0IsRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFvQixFQUFFLENBQUM7SUFDdkMsTUFBTSxhQUFhLEdBQW9CLEVBQUUsQ0FBQztJQUUxQyxJQUFJLENBQUM7UUFDSCxhQUFhLEdBQUcsTUFBTSx5QkFBeUIsQ0FDN0Msa0JBQWtCLEVBQ2xCLGFBQWEsQ0FDZCxDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsTUFBTSxjQUFjLENBQ2xCLGtCQUFrQixFQUNsQixhQUFhLENBQUMsU0FBUyxFQUN2QixlQUFlLEVBQ2YsUUFBUSxDQUFDLFdBQVcsQ0FDckIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFVBQVUsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQ3pDLElBQUksY0FBYyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFDM0MsSUFBSSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ3hELElBQUksYUFBYSxDQUFDLFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUM7WUFDSCxNQUFNLCtCQUErQixDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FDUixPQUFPLEVBQ1AsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUN2RCxDQUFDO1lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQixPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxzQkFBc0IsQ0FDOUMsa0JBQWtCLEVBQ2xCLGFBQWEsQ0FDZCxDQUFDO1lBQ0YsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7WUFDcEMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDckMscUJBQXFCLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixDQUFDO1FBQzVELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FDUixPQUFPLEVBQ1AsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUN2RCxDQUFDO1lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQixPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN4RSxNQUFNLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLG9CQUFvQixDQUNqRCxrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLFVBQVUsQ0FDWCxDQUFDO0lBQ0YsTUFBTSxVQUFVLENBQ2Qsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsVUFBVSxDQUNYLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBRyxNQUFNLGtCQUFrQixDQUMxQyxrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLFVBQVUsRUFDVixnQkFBZ0IsQ0FDakIsQ0FBQztJQUVGLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sY0FBYyxDQUNsQixrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLHVCQUF1QixFQUN2QixRQUFRLENBQUMsWUFBWSxDQUN0QixDQUFDO1FBQ0YsTUFBTSxlQUFlLENBQ25CLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsdURBQXVELENBQ3hELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLElBQXNCLEVBQUU7UUFDMUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxpQkFBaUIsQ0FDckIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxDQUNaLENBQUM7WUFDRixNQUFNLGlDQUFpQyxDQUNyQyxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLFdBQVcsQ0FBQyxPQUFPLEVBQ25CLHFCQUFxQixDQUN0QixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxFQUNQLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FDdkQsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsSUFBSSxDQUFDLENBQUMsTUFBTSxzQkFBc0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxVQUFVLENBQUMsSUFBSSxDQUNiLEdBQUcsQ0FBQyxNQUFNLFlBQVksQ0FDcEIsa0JBQWtCLEVBQ2xCLFFBQVEsRUFDUixVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxjQUFjLEVBQ2QscUJBQXFCLENBQ3RCLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUQsbUJBQW1CLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDdkUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQixPQUFPO1FBQ1QsQ0FBQztRQUNELHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsQ0FBQyxNQUFNLHNCQUFzQixFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBQ0QsVUFBVSxDQUFDLElBQUksQ0FDYixHQUFHLENBQUMsTUFBTSxZQUFZLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQ2xFLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxDQUFDLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTztRQUNULENBQUM7UUFDRCxhQUFhLENBQUMsSUFBSSxDQUNoQixHQUFHLENBQUMsTUFBTSxlQUFlLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQ3JFLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdkUsSUFDRSxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUNuRCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQ3ZDLEVBQ0QsQ0FBQztRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLFNBQVMsa0JBQWtCLENBQ3pCLE9BQVksRUFDWixZQUFvQjtJQUVwQixJQUFJLE9BQU8sQ0FBQyxLQUFLO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDbEMsSUFBSSxPQUFPLENBQUMsS0FBSztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ2xDLElBQUksT0FBTyxDQUFDLEtBQUs7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUNsQyxPQUFPLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxLQUFLLFVBQVUsY0FBYyxDQUMzQixrQkFBaUQsRUFDakQsTUFBYyxFQUNkLEtBQWEsRUFDYixPQUFlO0lBRWYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdkUsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxVQUFVLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsS0FBSyxVQUFVLGVBQWUsQ0FDNUIsa0JBQWlELEVBQ2pELE1BQWMsRUFDZCxZQUFvQjtJQUVwQixNQUFNLFlBQVksR0FBRyxNQUFNLGtCQUFrQixDQUFDLFNBQVMsQ0FDckQsS0FBSyxFQUNMLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUN6QixFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxDQUNwQyxDQUFDO0lBQ0YsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsY0FBYyxDQUMzQixXQUFzQyxFQUN0QyxXQUFzQyxFQUN0QyxNQUFjO0lBRWQsTUFBTSxjQUFjLEdBQUcsTUFBTSxhQUFhLENBQUMsa0JBQWtCLENBQzNELFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxtQkFBbUIsQ0FDbEQsY0FBYyxFQUNkLFdBQVcsQ0FDWixDQUFDO0lBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLGNBQWMsT0FBTyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBRTFFLE1BQU0sVUFBVSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sVUFBVSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDMUMsTUFBTSxhQUFhLENBQUMseUJBQXlCLENBQzNDLFdBQVcsRUFDWCxVQUFVLEVBQ1YsTUFBTSxDQUNQLENBQUM7SUFDRixPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsS0FBSyxVQUFVLGdCQUFnQixDQUM3QixRQUFrQyxFQUNsQyxVQUFrQixFQUNsQixNQUFjO0lBRWQsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sb0JBQW9CLENBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQ2pELFFBQVEsQ0FBQyx1QkFBdUIsRUFDaEMsUUFBUSxDQUFDLHVCQUF1QixFQUNoQyxVQUFVLEVBQ1YsVUFBVSxDQUNYLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLG9CQUFvQixDQUNqQyxrQkFBaUQsRUFDakQsVUFBa0IsRUFDbEIsTUFBYztJQUVkLE1BQU0sU0FBUyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtRQUN6RSxHQUFHLEVBQUUsTUFBTTtRQUNYLEdBQUcsRUFBRSxhQUFhO0tBQ25CLENBQUMsQ0FBQztJQUNILElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsU0FBUyxDQUMvQyxLQUFLLEVBQ0wsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksVUFBVSxFQUFFLENBQUMsRUFDbEMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsQ0FDcEMsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsU0FBUyxDQUNyRCxLQUFLLEVBQ0wsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUNuQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQ2xELENBQUM7SUFDRixJQUNFLFlBQVksQ0FBQyxRQUFRLEtBQUssQ0FBQztRQUMzQixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLGlCQUFpQixFQUNoRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLG1CQUFtQixDQUN2QyxrQkFBa0IsRUFDbEIsTUFBTSxFQUNOLGVBQWUsQ0FDaEIsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLE1BQU0sbUJBQW1CLENBQ3ZDLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sMEJBQTBCLENBQzNCLENBQUM7SUFDRixJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxLQUFLLFVBQVUsVUFBVSxDQUN2QixrQkFBaUQsRUFDakQsVUFBa0IsRUFDbEIsbUJBQTJCLEVBQzNCLE1BQWM7SUFFZCxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLFNBQVMsQ0FDL0MsS0FBSyxFQUNMO1FBQ0UsS0FBSztRQUNMLElBQUk7UUFDSixJQUFJLFVBQVUsRUFBRTtRQUNoQixJQUFJO1FBQ0osSUFBSSxVQUFVLEVBQUU7UUFDaEIsbUJBQW1CO0tBQ3BCLEVBQ0QsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsQ0FDcEMsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDekMsQ0FBQztBQUNILENBQUM7QUFPRCxNQUFNLG1CQUFtQixHQUFHLEtBQUssRUFDL0IscUJBQW9ELEVBQ3BELE1BQWMsRUFDZCxXQUFtQixFQUNGLEVBQUU7SUFDbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxTQUFTLENBQ2xELEtBQUssRUFDTCxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQ3RDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FDbEQsQ0FBQztJQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQzlCLHFCQUFvRCxFQUNwRCxNQUFjLEVBQ2QsYUFBcUIsRUFDckIsa0JBQTJCLEVBQ0osRUFBRTtJQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLG1CQUFtQixDQUN2QyxxQkFBcUIsRUFDckIsTUFBTSxFQUNOLDBCQUEwQixDQUMzQixDQUFDO0lBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxtQkFBbUIsQ0FDdEMscUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixjQUFjLGFBQWEsUUFBUSxDQUNwQyxDQUFDO0lBQ0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxtQkFBbUIsQ0FDNUMscUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixjQUFjLGFBQWEsV0FBVyxDQUN2QyxDQUFDO0lBQ0YsSUFDRSxDQUFDLGtCQUFrQixJQUFJLE9BQU8sS0FBSyxrQkFBa0IsQ0FBQztRQUN0RCxZQUFZLEtBQUssT0FBTyxFQUN4QixDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYixtRUFBbUUsQ0FDcEUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzdCLENBQUMsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUM3QixxQkFBb0QsRUFDcEQsTUFBYyxFQUNkLGFBQXFCLEVBQ3JCLGVBQTZCLEVBQ2QsRUFBRTtJQUNqQixNQUFNLFdBQVcsR0FBRyxNQUFNLGtCQUFrQixDQUMxQyxxQkFBcUIsRUFDckIsTUFBTSxFQUNOLGFBQWEsRUFDYixlQUFlLENBQUMsT0FBTyxDQUN4QixDQUFDO0lBQ0YsSUFDRSxXQUFXLENBQUMsT0FBTyxLQUFLLGVBQWUsQ0FBQyxPQUFPO1FBQy9DLFdBQVcsQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLE1BQU0sRUFDN0MsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQ2Isa0dBQWtHLENBQ25HLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsS0FBSyxVQUFVLFlBQVksQ0FDekIsa0JBQWlELEVBQ2pELFFBQWtDLEVBQ2xDLE1BQWMsRUFDZCxhQUFxQixFQUNyQixjQUE0QixFQUM1QixVQUFtQixFQUNuQix3QkFBaUM7SUFFakMsTUFBTSxXQUFXLEdBQUcsVUFBVSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQzdCLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztJQUM5QixJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsT0FBTyxDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsS0FBSyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxhQUFhLGVBQWUsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLHVCQUF1QixDQUFDO1FBQ25DLFdBQVc7UUFDWCxVQUFVLEVBQUUsYUFBYTtRQUN6QixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7UUFDL0IsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1FBQzNCLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTztRQUMvQixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07UUFDN0IscUJBQXFCLEVBQUUsd0JBQXdCO0tBQ2hELENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7UUFDN0QsR0FBRyxFQUFFLE1BQU07UUFDWCxHQUFHLEVBQUUsYUFBYTtLQUNuQixDQUFDLENBQUM7SUFDSCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUIsTUFBTTtRQUNOLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQ3BELE9BQU8sRUFDTCxNQUFNLENBQUMsUUFBUSxLQUFLLENBQUM7WUFDbkIsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztLQUNqRCxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFZRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLFVBQTJDO0lBRTNDLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztJQUM5QixJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMxQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLE9BQU8sa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLGVBQWUsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDMUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsSUFBSSxDQUNQLHNDQUFzQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUMvQyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUN6QixrQkFBaUQsRUFDakQsUUFBa0MsRUFDbEMsTUFBYztJQUVkLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU87WUFDTCxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUU7U0FDekUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBb0IsRUFBRSxDQUFDO0lBQ3BDLEtBQUssTUFBTSxRQUFRLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLDJCQUEyQixRQUFRLGFBQWEsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFGLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDckMsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7YUFBTSxJQUNMLHdCQUF3QixDQUFDLE1BQU0sQ0FBQztZQUNoQyxRQUFRLENBQUMsbUJBQW1CLEtBQUssU0FBUyxFQUMxQyxDQUFDO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixPQUFPLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDO2FBQ3JDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELEtBQUssVUFBVSxlQUFlLENBQzVCLGtCQUFpRCxFQUNqRCxRQUFrQyxFQUNsQyxNQUFjO0lBRWQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QixPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELElBQUksV0FBb0IsQ0FBQztJQUN6QixJQUFJLENBQUM7UUFDSCxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDdEIsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxFQUN6QyxNQUFNLENBQ1AsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzNDLE9BQU87WUFDTDtnQkFDRSxNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE9BQU8sRUFDTCxvRUFBb0U7YUFDdkU7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLE1BQU0saUNBQWlDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE9BQU87WUFDTDtnQkFDRSxNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE9BQU8sRUFDTCxxRUFBcUU7YUFDeEU7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sc0JBQXNCLEdBQUcseUJBQXlCLENBQ3RELFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN6QyxRQUFRLENBQUMsVUFBVSxDQUNwQixDQUFDO0lBQ0YsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzNCLE1BQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxDQUNqRCw4QkFBOEIsRUFDOUIsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQ2hCLENBQUM7UUFDRixJQUNFLGFBQWEsQ0FBQyxRQUFRLEtBQUssQ0FBQztZQUM1QixDQUFDLDhCQUE4QixDQUM3QixhQUFhLENBQUMsY0FBYyxFQUM1QixzQkFBc0IsQ0FDdkIsRUFDRCxDQUFDO1lBQ0QsTUFBTSxjQUFjLEdBQUcsNEJBQTRCLENBQ2pELHNCQUFzQixDQUN2QixDQUFDO1lBQ0YsT0FBTztnQkFDTDtvQkFDRSxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLE9BQU8sRUFBRSxzRUFBc0UsY0FBYyxFQUFFO2lCQUNoRzthQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDckMsT0FBTztRQUNMO1lBQ0UsTUFBTSxFQUNKLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqRCxDQUFDLENBQUMsVUFBVTtZQUNoQixNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUTtZQUNwRCxPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1NBQ3pFO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFjRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLFFBQWdDO0lBRWhDLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDOUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUIsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLFVBQVUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUMsWUFBWSxDQUFDLElBQUksQ0FDZixzQkFBc0IsVUFBVSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUM3RSxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7U0FBTSxJQUNMLE9BQU8sUUFBUSxDQUFDLGNBQWMsS0FBSyxRQUFRO1FBQzNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUN4QyxRQUFRLENBQUMsY0FBYyxHQUFHLENBQUMsRUFDM0IsQ0FBQztRQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLE1BQWM7SUFDOUMsT0FBTyxtRUFBbUUsQ0FBQyxJQUFJLENBQzdFLE1BQU0sQ0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsTUFBYztJQUN6QyxPQUFPLENBQ0wsTUFBTTtTQUNILEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDWCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMxQixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQ3ZELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUMvQixPQUFPLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FDdkIsUUFBa0MsRUFDbEMsZ0JBQXVDO0lBRXZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMvRCxJQUFJLGdCQUFnQixDQUFDLFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDekUsT0FBTyxDQUFDLEdBQUcsQ0FDVCx5QkFBeUIsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLEVBQUUsQ0FDM0csQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxDQUNULFlBQVksUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQ2pGLENBQUM7SUFDRixPQUFPLENBQUMsR0FBRyxDQUNULGNBQWMsUUFBUSxDQUFDLGFBQWEsSUFBSSxRQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FDM0UsQ0FBQztJQUNGLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUNULG1CQUFtQixRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FDcEcsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FDVCxvQkFBb0IsUUFBUSxDQUFDLGNBQWMsSUFBSSwyQkFBMkIsRUFBRSxDQUM3RSxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCxnQ0FBZ0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixFQUFFLENBQ3RKLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUNULHVCQUF1QixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQzNHLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUNULG9CQUFvQixRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUNsSCxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLFFBQWtDO0lBQzdELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUM3QixJQUFJLFFBQVEsQ0FBQyxjQUFjO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN0RCxJQUFJLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsUUFBUSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFVBQVU7UUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLElBQUksUUFBUSxDQUFDLFlBQVk7UUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELElBQUksUUFBUSxDQUFDLGNBQWM7UUFDekIsT0FBTyxDQUFDLElBQUksQ0FDVixZQUFZLFFBQVEsQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FDbEYsQ0FBQztJQUNKLElBQUksUUFBUSxDQUFDLGFBQWE7UUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JELElBQUksUUFBUSxDQUFDLGFBQWE7UUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDOUUsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzdELENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUMxQixVQUFrQixFQUNsQixVQUEyQixFQUMzQixVQUEyQixFQUMzQixhQUE4QjtJQUU5QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFaEIsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxPQUFPLENBQUMsR0FBRyxDQUNULEtBQUssTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDdEYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxPQUFPLENBQUMsR0FBRyxDQUNULEtBQUssTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDdEYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsR0FBRyxDQUNULEtBQUssTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDdEYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBZTtJQUN0QyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNmLFNBQVMsQ0FBQztZQUNSLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLEtBQUssRUFBRSwyQkFBMkI7WUFDbEMsV0FBVyxFQUNULGdHQUFnRztZQUNsRyxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLFdBQVcsRUFBRSxzQ0FBc0M7aUJBQ3BEO2dCQUNELEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0NBQWdDLEVBQUU7Z0JBQ3JFO29CQUNFLElBQUksRUFBRSxhQUFhO29CQUNuQixXQUFXLEVBQ1QsMERBQTBEO2lCQUM3RDtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsV0FBVyxFQUFFLHlDQUF5QztpQkFDdkQ7Z0JBQ0QsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSwrQkFBK0IsRUFBRTtnQkFDcEU7b0JBQ0UsSUFBSSxFQUFFLGtCQUFrQjtvQkFDeEIsV0FBVyxFQUFFLCtDQUErQztpQkFDN0Q7Z0JBQ0QsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSwrQkFBK0IsRUFBRTtnQkFDL0QsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxvQ0FBb0MsRUFBRTtnQkFDdkU7b0JBQ0UsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLFdBQVcsRUFBRSxzQ0FBc0M7aUJBQ3BEO2dCQUNEO29CQUNFLElBQUksRUFBRSxTQUFTO29CQUNmLFdBQVcsRUFDVCxzRkFBc0Y7aUJBQ3pGO2dCQUNEO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLFdBQVcsRUFDVCxxRkFBcUY7aUJBQ3hGO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPO0lBQ1QsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLDREQUE0RCxDQUFDLENBQUM7SUFDMUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sQ0FBQyxHQUFHLENBQ1QsbUVBQW1FLENBQ3BFLENBQUM7SUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLCtEQUErRCxDQUFDLENBQUM7SUFDN0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sQ0FBQyxHQUFHLENBQ1QscUVBQXFFLENBQ3RFLENBQUM7SUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7SUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsNERBQTRELENBQUMsQ0FBQztJQUMxRSxPQUFPLENBQUMsR0FBRyxDQUNULDRHQUE0RyxDQUM3RyxDQUFDO0lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0lBQ3pFLE9BQU8sQ0FBQyxHQUFHLENBQ1QsbUdBQW1HLENBQ3BHLENBQUM7SUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLENBQUMifQ==
|
|
710
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb2RfcmVsZWFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUNBQWlDLEdBR2xDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxLQUFLLGFBQWEsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyxhQUFhLEVBQ2IsdUJBQXVCLEdBRXhCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIseUJBQXlCLEdBRzFCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0Isc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsdUJBQXVCLEdBQ3hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFMUUsTUFBTSxDQUFD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
|