@foss.global/gitmanager 1.6.0 → 1.7.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/changelog.md +9 -0
- package/dist_rust/rustgitmanager_linux_amd64 +0 -0
- package/dist_rust/rustgitmanager_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.gitmanager.d.ts +4 -2
- package/dist_ts/classes.gitmanager.js +35 -8
- package/dist_ts/models.d.ts +3 -0
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/rust-gitmanager-bridge.d.ts +3 -2
- package/dist_ts/rust-gitmanager-bridge.js +46 -3
- package/package.json +5 -5
- package/readme.md +5 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.gitmanager.ts +38 -6
- package/ts/models.ts +4 -0
- package/ts/plugins.ts +2 -1
- package/ts/rust-gitmanager-bridge.ts +65 -2
package/changelog.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-08-12 - 1.7.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- add lifecycle-owned repository archive cancellation.
|
|
8
|
+
- Accept an optional AbortSignal for repository archive creation and propagate cancellation to the Rust archive and inspection subprocesses.
|
|
9
|
+
- Remove partial archive files and reap process groups before cancellation or shutdown settles.
|
|
10
|
+
- Make GitManager stop single-flight and await confirmed Rust bridge termination.
|
|
11
|
+
|
|
3
12
|
## 2026-08-04 - 1.6.0
|
|
4
13
|
|
|
5
14
|
### Features
|
|
Binary file
|
|
Binary file
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@foss.global/gitmanager',
|
|
6
|
-
version: '1.
|
|
6
|
+
version: '1.7.0',
|
|
7
7
|
description: 'Headless Git manager for the foss.global Git platform, with a TypeScript API and Rust engine.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLCtGQUErRjtDQUM3RyxDQUFBIn0=
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerMergeRequest, IGitManagerMergeResult, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerProtectedRefsApplyResult, IGitManagerSmartHttpRepositoryProtectedRefs, IGitManagerRepositoryBundle, IGitManagerRepositoryArchive, IGitManagerRepositoryArchiveRequest, IGitManagerRepositoryLfsPointer, IGitManagerRepositoryServiceRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerRestoreBundleRequest, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IGitManagerOptions, IGitManagerReadinessOptions, TGitManagerReadinessResult } from './models.js';
|
|
2
|
+
import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerMergeRequest, IGitManagerMergeResult, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerProtectedRefsApplyResult, IGitManagerSmartHttpRepositoryProtectedRefs, IGitManagerRepositoryBundle, IGitManagerRepositoryArchive, IGitManagerRepositoryArchiveOptions, IGitManagerRepositoryArchiveRequest, IGitManagerRepositoryLfsPointer, IGitManagerRepositoryServiceRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerRestoreBundleRequest, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IGitManagerOptions, IGitManagerReadinessOptions, TGitManagerReadinessResult } from './models.js';
|
|
3
3
|
import { GitManagerRepositoryService } from './classes.repositoryservice.js';
|
|
4
4
|
export declare class GitManager extends plugins.EventEmitter {
|
|
5
5
|
private bridge;
|
|
6
6
|
private started;
|
|
7
7
|
private startPromise;
|
|
8
8
|
private stopRequested;
|
|
9
|
+
private stopPromise;
|
|
9
10
|
private config;
|
|
10
11
|
private readonly repositoryServices;
|
|
11
12
|
private lifecycleEpoch;
|
|
@@ -15,6 +16,7 @@ export declare class GitManager extends plugins.EventEmitter {
|
|
|
15
16
|
constructor(optionsArg?: IGitManagerOptions);
|
|
16
17
|
start(): Promise<void>;
|
|
17
18
|
stop(): Promise<void>;
|
|
19
|
+
private stopInternal;
|
|
18
20
|
getStatus(): Promise<IGitManagerStatus>;
|
|
19
21
|
/**
|
|
20
22
|
* Performs a bounded, read-only probe to verify engine readiness. When Git
|
|
@@ -33,7 +35,7 @@ export declare class GitManager extends plugins.EventEmitter {
|
|
|
33
35
|
refreshMirror(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
|
|
34
36
|
verifyRepository(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
|
|
35
37
|
createRepositoryBundle(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryBundle>;
|
|
36
|
-
createRepositoryArchive(requestArg: IGitManagerRepositoryArchiveRequest): Promise<IGitManagerRepositoryArchive>;
|
|
38
|
+
createRepositoryArchive(requestArg: IGitManagerRepositoryArchiveRequest, optionsArg?: IGitManagerRepositoryArchiveOptions): Promise<IGitManagerRepositoryArchive>;
|
|
37
39
|
openRepositoryService(requestArg: IGitManagerRepositoryServiceRequest): Promise<GitManagerRepositoryService>;
|
|
38
40
|
restoreRepositoryBundle(requestArg: IGitManagerRestoreBundleRequest): Promise<IGitManagerRepositoryInfo>;
|
|
39
41
|
listRepositories(): Promise<IGitManagerRepositoryInfo[]>;
|
|
@@ -10,6 +10,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
10
10
|
this.started = false;
|
|
11
11
|
this.startPromise = null;
|
|
12
12
|
this.stopRequested = false;
|
|
13
|
+
this.stopPromise = null;
|
|
13
14
|
this.repositoryServices = new Set();
|
|
14
15
|
this.lifecycleEpoch = 0;
|
|
15
16
|
this.smartHttpProbeUrl = null;
|
|
@@ -77,6 +78,9 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
77
78
|
if (this.startPromise) {
|
|
78
79
|
throw new Error('GitManager is already starting');
|
|
79
80
|
}
|
|
81
|
+
if (this.stopPromise) {
|
|
82
|
+
throw new Error('GitManager is stopping');
|
|
83
|
+
}
|
|
80
84
|
this.stopRequested = false;
|
|
81
85
|
this.lifecycleEpoch++;
|
|
82
86
|
this.startPromise = this.startInternal();
|
|
@@ -87,7 +91,20 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
87
91
|
this.startPromise = null;
|
|
88
92
|
}
|
|
89
93
|
}
|
|
90
|
-
|
|
94
|
+
stop() {
|
|
95
|
+
if (this.stopPromise) {
|
|
96
|
+
return this.stopPromise;
|
|
97
|
+
}
|
|
98
|
+
const stopPromise = this.stopInternal();
|
|
99
|
+
this.stopPromise = stopPromise;
|
|
100
|
+
void stopPromise.finally(() => {
|
|
101
|
+
if (this.stopPromise === stopPromise) {
|
|
102
|
+
this.stopPromise = null;
|
|
103
|
+
}
|
|
104
|
+
}).catch(() => undefined);
|
|
105
|
+
return stopPromise;
|
|
106
|
+
}
|
|
107
|
+
async stopInternal() {
|
|
91
108
|
this.stopRequested = true;
|
|
92
109
|
this.lifecycleEpoch++;
|
|
93
110
|
this.smartHttpProbeUrl = null;
|
|
@@ -97,6 +114,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
97
114
|
}
|
|
98
115
|
if (!this.bridge.running) {
|
|
99
116
|
await this.closeRepositoryServices();
|
|
117
|
+
await this.bridge.terminate();
|
|
100
118
|
this.started = false;
|
|
101
119
|
return;
|
|
102
120
|
}
|
|
@@ -105,7 +123,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
105
123
|
await this.bridge.stopGitManager();
|
|
106
124
|
}
|
|
107
125
|
finally {
|
|
108
|
-
this.bridge.
|
|
126
|
+
await this.bridge.terminate();
|
|
109
127
|
this.started = false;
|
|
110
128
|
}
|
|
111
129
|
}
|
|
@@ -247,18 +265,24 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
247
265
|
this.assertRunning();
|
|
248
266
|
return this.bridge.createRepositoryBundle(requestArg);
|
|
249
267
|
}
|
|
250
|
-
async createRepositoryArchive(requestArg) {
|
|
268
|
+
async createRepositoryArchive(requestArg, optionsArg = {}) {
|
|
251
269
|
this.assertRunning();
|
|
252
|
-
return this.bridge.createRepositoryArchive(requestArg);
|
|
270
|
+
return this.bridge.createRepositoryArchive(requestArg, optionsArg);
|
|
253
271
|
}
|
|
254
272
|
async openRepositoryService(requestArg) {
|
|
255
273
|
this.assertRunning();
|
|
274
|
+
const serviceEpoch = this.lifecycleEpoch;
|
|
256
275
|
const descriptor = await this.bridge.prepareRepositoryService({
|
|
257
276
|
org: requestArg.org,
|
|
258
277
|
repo: requestArg.repo,
|
|
259
278
|
service: requestArg.service,
|
|
260
279
|
...(requestArg.protocol ? { protocol: requestArg.protocol } : {}),
|
|
261
280
|
});
|
|
281
|
+
if (this.lifecycleEpoch !== serviceEpoch
|
|
282
|
+
|| this.stopRequested
|
|
283
|
+
|| !this.running) {
|
|
284
|
+
throw new Error('GitManager stopped while preparing repository service');
|
|
285
|
+
}
|
|
262
286
|
const service = new GitManagerRepositoryService(descriptor, requestArg, this.config.dataDir);
|
|
263
287
|
this.repositoryServices.add(service);
|
|
264
288
|
service.completed.finally(() => {
|
|
@@ -320,7 +344,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
320
344
|
throw new Error('Failed to spawn rustgitmanager binary');
|
|
321
345
|
}
|
|
322
346
|
if (this.stopRequested) {
|
|
323
|
-
this.bridge.
|
|
347
|
+
await this.bridge.terminate();
|
|
324
348
|
throw new Error('GitManager start was cancelled');
|
|
325
349
|
}
|
|
326
350
|
try {
|
|
@@ -330,7 +354,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
330
354
|
await this.bridge.stopGitManager();
|
|
331
355
|
}
|
|
332
356
|
finally {
|
|
333
|
-
this.bridge.
|
|
357
|
+
await this.bridge.terminate();
|
|
334
358
|
this.started = false;
|
|
335
359
|
}
|
|
336
360
|
throw new Error('GitManager start was cancelled');
|
|
@@ -339,7 +363,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
339
363
|
await this.captureSmartHttpProbeUrl();
|
|
340
364
|
}
|
|
341
365
|
catch (error) {
|
|
342
|
-
this.bridge.
|
|
366
|
+
await this.bridge.terminate();
|
|
343
367
|
this.started = false;
|
|
344
368
|
throw error;
|
|
345
369
|
}
|
|
@@ -489,6 +513,9 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
489
513
|
}
|
|
490
514
|
}
|
|
491
515
|
assertRunning() {
|
|
516
|
+
if (this.stopRequested) {
|
|
517
|
+
throw new Error('GitManager is stopping');
|
|
518
|
+
}
|
|
492
519
|
if (!this.running) {
|
|
493
520
|
throw new Error('GitManager is not running');
|
|
494
521
|
}
|
|
@@ -499,4 +526,4 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
499
526
|
await Promise.all(services.map((service) => service.close()));
|
|
500
527
|
}
|
|
501
528
|
}
|
|
502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5naXRtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBd0N4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RSxNQUFNLHlCQUF5QixHQUFHLEtBQUssQ0FBQztBQUN4QyxNQUFNLHlCQUF5QixHQUFHLE1BQU0sQ0FBQztBQUt6QyxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBWWxELFlBQVksYUFBaUMsRUFBRTtRQUM3QyxLQUFLLEVBQUUsQ0FBQztRQVpGLFdBQU0sR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixpQkFBWSxHQUF5QixJQUFJLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFYix1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztRQUNyRSxtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixzQkFBaUIsR0FBa0IsSUFBSSxDQUFDO1FBQy9CLCtCQUEwQixHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBQ2pFLGlDQUE0QixHQUFxRCxJQUFJLENBQUM7UUFJNUYsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU87ZUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRSxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE9BQU87WUFDUCxXQUFXLEVBQUUsVUFB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QyxDQUFDO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQXNDO1FBQzFELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQXlDO1FBQ2hFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQW9DO1FBQ3pELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQWtDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQXNDO1FBQzFELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQWlDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYTtRQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxD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
|
|
529
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5naXRtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBeUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RSxNQUFNLHlCQUF5QixHQUFHLEtBQUssQ0FBQztBQUN4QyxNQUFNLHlCQUF5QixHQUFHLE1BQU0sQ0FBQztBQUt6QyxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBYWxELFlBQVksYUFBaUMsRUFBRTtRQUM3QyxLQUFLLEVBQUUsQ0FBQztRQWJGLFdBQU0sR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixpQkFBWSxHQUF5QixJQUFJLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsZ0JBQVcsR0FBeUIsSUFBSSxDQUFDO1FBRWhDLHVCQUFrQixHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBQ3JFLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFDL0IsK0JBQTBCLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDakUsaUNBQTRCLEdBQXFELElBQUksQ0FBQztRQUk1RixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTztlQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osT0FBTztZQUNQLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7WUFDOUUsY0FBYyxFQUFFLFVBQVUsQ0FBQyxjQUFjLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSTtZQUNuRSxlQUFlLEVBQUUsVUFBVSxDQUFDLGVBQWUsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUk7WUFDaEUsd0JBQXdCLEVBQ3RCLFVBQVUsQ0FBQyx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJO1lBQ2hFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxTQUFTO1lBQzVELFNBQVMsRUFBRSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEtBQUssS0FBSztnQkFDL0QsQ0FBQyxDQUFDO29CQUNFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksV0FBVztvQkFDeEQsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDO29CQUNoQyxzQkFBc0IsRUFBRSxnQkFBZ0IsQ0FBQyxzQkFBc0IsSUFBSSxLQUFLO29CQUN4RSxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxvQkFBb0IsSUFBSSxLQUFLO29CQUNwRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQzlFLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRzt3QkFDbkIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO3FCQUN0QixDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNULHNCQUFzQixFQUFFLGdCQUFnQixDQUFDLHNCQUFzQixJQUFJLEVBQUU7b0JBQ3JFLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLG1CQUFtQixJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSTtvQkFDN0UscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMscUJBQXFCLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJO29CQUNoRixnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJO29CQUM3RSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7b0JBQ3JFLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLGtCQUFrQixJQUFJLEdBQUc7b0JBQzlELGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLGtCQUFrQixJQUFJLE1BQU07b0JBQ2pFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXOzJCQUNwQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLLEtBQUs7d0JBQ2pELENBQUMsQ0FBQzs0QkFDRSxtQkFBbUIsRUFDakIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLG1CQUFtQjt5QkFDbkQ7d0JBQ0gsQ0FBQyxDQUFDLFNBQVM7b0JBQ2IsV0FBVyxFQUFFLGdCQUFnQixDQUFDLFdBQVc7MkJBQ3BDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLEtBQUssS0FBSzt3QkFDakQsQ0FBQyxDQUFDOzRCQUNFLG1CQUFtQixFQUNqQixnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsbUJBQW1COzRCQUNsRCxtQkFBbUIsRUFDakIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLG1CQUFtQjttQ0FDN0MsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSTt5QkFDNUI7d0JBQ0gsQ0FBQyxDQUFDLFNBQVM7aUJBQ2Q7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBbUIsRUFBRSxNQUFxQixFQUFFLEVBQUU7WUFDcEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDOUIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMxQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVNLElBQUk7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUIsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixLQUFLLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVk7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyQyxDQUFDO2dCQUFTLENBQUM7WUFDVCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQzVCLFFBQVEsRUFBRSxDQUFDO2FBQ1osQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxjQUFjLENBQ3pCLGFBQTBDLEVBQUU7UUFFNUMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUkseUJBQXlCLENBQUM7UUFDcEUsSUFDRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQ2hDLFNBQVMsSUFBSSxDQUFDO1lBQ2QsU0FBUyxHQUFHLHlCQUF5QixFQUNyQyxDQUFDO1lBQ0QsTUFBTSxJQUFJLFNBQVMsQ0FDakIsdUVBQXVFLHlCQUF5QixHQUFHLENBQ3BHLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxJQUFJLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQzNELElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNsRCxJQUFJLFdBQXdELENBQUM7UUFDN0QsTUFBTSxjQUFjLEdBQUcsR0FBUyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDakIsV0FBVyxHQUFHLFFBQVEsQ0FBQztZQUN6QixDQUFDO1lBQ0QsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBQ0YsWUFBWSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDakIsV0FBVyxHQUFHLFVBQVUsQ0FBQztZQUMzQixDQUFDO1lBQ0QsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRXpELElBQUksWUFBOEMsQ0FBQztRQUNuRCxJQUFJLENBQUM7WUFDSCxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQjtnQkFDbkMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUM3QixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLG1CQUFtQixDQUFDLE1BQU0sQ0FDM0I7Z0JBQ0gsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLENBQUM7Z0JBQVMsQ0FBQztZQUNULFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1QixZQUFZLEVBQUUsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUNoQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxhQUFhLEVBQ25ELFNBQVMsQ0FDVixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9CLElBQUksV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUNELElBQUksV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsSUFBSSxZQUFZLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsT0FBTztZQUNmLFVBQVUsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUztTQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyw0QkFBNEIsQ0FDdkMsU0FBK0M7UUFFL0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztZQUM5QyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsb0JBQW9CO1lBQ3BELG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRztnQkFDbkIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO2FBQ3RCLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsZ0NBQWdDLENBQzNDLGFBQXVEO1FBRXZELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLENBQUM7WUFDbEQsR0FBRyxFQUFFLGFBQWEsQ0FBQyxHQUFHO1lBQ3RCLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSTtZQUN4QixNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07WUFDNUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsbUNBQW1DLENBQzlDLGdCQUE2RDtRQUU3RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLG1DQUFtQyxDQUFDO1lBQ3JELEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHO1lBQ3pCLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJO1lBQzNCLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO1lBQ25DLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUMvQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2FBQ3hDLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQzdDLENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBZ0Q7UUFDOUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUEwQztRQUNsRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUF5QztRQUNsRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQXlDO1FBQ3JFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsVUFBeUM7UUFFekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QixDQUNsQyxVQUErQyxFQUMvQyxhQUFrRCxFQUFFO1FBRXBELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCLENBQ2hDLFVBQStDO1FBRS9DLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztZQUM1RCxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUc7WUFDbkIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDbEUsQ0FBQyxDQUFDO1FBQ0gsSUFDRSxJQUFJLENBQUMsY0FBYyxLQUFLLFlBQVk7ZUFDakMsSUFBSSxDQUFDLGFBQWE7ZUFDbEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUNoQixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLDJCQUEyQixDQUM3QyxVQUFVLEVBQ1YsVUFBVSxFQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVNLEtBQUssQ0FBQyx1QkFBdUIsQ0FDbEMsVUFBMkM7UUFFM0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQjtRQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBaUM7UUFDckQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyx5QkFBeUIsQ0FDcEMsVUFBeUM7UUFFekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FDMUIsVUFBbUM7UUFFbkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBa0M7UUFDdEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBc0M7UUFDMUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBeUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBb0M7UUFDekQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBa0M7UUFDckQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBc0M7UUFDMUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBaUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQyxDQUFDO3dCQUFTLENBQUM7b0JBQ1QsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyx3QkFBd0I7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUFDLFNBQTRCO1FBQzNELE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDNUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxPQUFZLENBQUM7UUFDakIsSUFBSSxDQUFDO1lBQ0gsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEUsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDN0IsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQ2QsUUFBUSxLQUFLLFdBQVc7WUFDeEIsUUFBUSxLQUFLLEtBQUs7WUFDbEIsUUFBUSxLQUFLLE9BQU87WUFDcEIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsV0FBbUIsRUFDbkIsU0FBc0I7UUFFdEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLGFBQXFELENBQUM7WUFDMUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxVQUE0QyxFQUFRLEVBQUU7Z0JBQ3BFLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osT0FBTztnQkFDVCxDQUFDO2dCQUNELE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ2YsU0FBUyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDbkQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQztZQUNGLE1BQU0sVUFBVSxHQUFHLEdBQVMsRUFBRTtnQkFDNUIsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFDO1lBQ0YsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdEIsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUM7Z0JBQ0gsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNsQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQ2hDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQy9CLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ1gsTUFBTSxPQUFPLEdBQ1gsUUFBUSxDQUFDLFVBQVUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO29CQUN4RCxnRUFBZ0U7b0JBQ2hFLCtEQUErRDtvQkFDL0QsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDO29CQUN6QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xCLENBQUMsQ0FDRixDQUFDO2dCQUNGLGFBQWEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEIsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHFCQUFxQixDQUMzQixTQUFzQjtRQUV0QixJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN2QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTTtpQkFDaEMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLHlCQUF5QixFQUFFLENBQUM7aUJBQ25ELElBQUksQ0FDSCxDQUFDLE1BQU0sRUFBb0MsRUFBRTtnQkFDM0MsSUFDRSxJQUFJLENBQUMsY0FBYyxLQUFLLFVBQVU7b0JBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztvQkFDckIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQ3ZCLENBQUM7b0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakUsQ0FBQztnQkFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ2xELENBQUMsRUFDRCxHQUFxQyxFQUFFLENBQUMsYUFBYSxDQUN0RCxDQUFDO1lBQ0osSUFBSSxDQUFDLDRCQUE0QixHQUFHLGVBQWUsQ0FBQztZQUNwRCxLQUFLLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNoQyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsS0FBSyxlQUFlLEVBQUUsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztRQUN0RCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBNEMsRUFBUSxFQUFFO2dCQUNwRSxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNmLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xELE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUM7WUFDRixNQUFNLFNBQVMsR0FBRyxHQUFTLEVBQUU7Z0JBQzNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQixDQUFDLENBQUM7WUFDRixTQUFTLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN0QixTQUFTLEVBQUUsQ0FBQztnQkFDWixPQUFPO1lBQ1QsQ0FBQztZQUNELEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTywyQkFBMkI7UUFNakMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sc0JBQXNCLENBQzVCLFNBQTRDLEVBQzVDLFlBQW9CO1FBRXBCLE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxhQUFhO1lBQ3JCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLFVBQVUsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsWUFBWTtTQUM3QyxDQUFDO0lBQ0osQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxLQUFLLE1BQU0sbUJBQW1CLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUM7WUFDdkUsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsdUJBQXVCO1FBQ25DLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGIn0=
|
package/dist_ts/models.d.ts
CHANGED
|
@@ -56,6 +56,9 @@ export interface IGitManagerRepositoryBundle extends IGitManagerRepositorySelect
|
|
|
56
56
|
export interface IGitManagerRepositoryArchiveRequest extends IGitManagerRepositorySelector {
|
|
57
57
|
objectId: string;
|
|
58
58
|
}
|
|
59
|
+
export interface IGitManagerRepositoryArchiveOptions {
|
|
60
|
+
signal?: AbortSignal;
|
|
61
|
+
}
|
|
59
62
|
export interface IGitManagerRepositoryArchive extends IGitManagerRepositorySelector {
|
|
60
63
|
objectId: string;
|
|
61
64
|
archivePath: string;
|
package/dist_ts/plugins.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as childProcess from 'node:child_process';
|
|
2
|
+
import * as crypto from 'node:crypto';
|
|
2
3
|
import { EventEmitter } from 'node:events';
|
|
3
4
|
import * as http from 'node:http';
|
|
4
5
|
import * as path from 'node:path';
|
|
5
6
|
import * as stream from 'node:stream';
|
|
6
7
|
import * as url from 'node:url';
|
|
7
|
-
export { childProcess, EventEmitter, http, path, stream, url };
|
|
8
|
+
export { childProcess, crypto, EventEmitter, http, path, stream, url };
|
|
8
9
|
import * as smartrust from '@push.rocks/smartrust';
|
|
9
10
|
export { smartrust };
|
package/dist_ts/plugins.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// node native scope
|
|
2
2
|
import * as childProcess from 'node:child_process';
|
|
3
|
+
import * as crypto from 'node:crypto';
|
|
3
4
|
import { EventEmitter } from 'node:events';
|
|
4
5
|
import * as http from 'node:http';
|
|
5
6
|
import * as path from 'node:path';
|
|
6
7
|
import * as stream from 'node:stream';
|
|
7
8
|
import * as url from 'node:url';
|
|
8
|
-
export { childProcess, EventEmitter, http, path, stream, url };
|
|
9
|
+
export { childProcess, crypto, EventEmitter, http, path, stream, url };
|
|
9
10
|
// @push.rocks scope
|
|
10
11
|
import * as smartrust from '@push.rocks/smartrust';
|
|
11
12
|
export { smartrust };
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxZQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEtBQUssR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUVoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFdkUsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDIn0=
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerMergeRequest, IGitManagerMergeResult, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerProtectedRefsApplyResult, IGitManagerSmartHttpRepositoryProtectedRefs, IGitManagerRepositoryBundle, IGitManagerRepositoryArchive, IGitManagerRepositoryArchiveRequest, IGitManagerRepositoryLfsPointer, IGitManagerRepositoryServiceRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerRestoreBundleRequest, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IRustGitManagerConfig, IRustGitManagerRepositoryServiceDescriptor } from './models.js';
|
|
2
|
+
import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerMergeRequest, IGitManagerMergeResult, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerProtectedRefsApplyResult, IGitManagerSmartHttpRepositoryProtectedRefs, IGitManagerRepositoryBundle, IGitManagerRepositoryArchive, IGitManagerRepositoryArchiveOptions, IGitManagerRepositoryArchiveRequest, IGitManagerRepositoryLfsPointer, IGitManagerRepositoryServiceRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerRestoreBundleRequest, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IRustGitManagerConfig, IRustGitManagerRepositoryServiceDescriptor } from './models.js';
|
|
3
3
|
export declare class RustGitManagerBridge extends plugins.EventEmitter {
|
|
4
4
|
private bridge;
|
|
5
5
|
constructor();
|
|
6
6
|
spawn(): Promise<boolean>;
|
|
7
7
|
kill(): void;
|
|
8
|
+
terminate(): Promise<void>;
|
|
8
9
|
get running(): boolean;
|
|
9
10
|
startGitManager(configArg: IRustGitManagerConfig): Promise<void>;
|
|
10
11
|
stopGitManager(): Promise<void>;
|
|
@@ -17,7 +18,7 @@ export declare class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
17
18
|
refreshMirror(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
|
|
18
19
|
verifyRepository(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryInfo>;
|
|
19
20
|
createRepositoryBundle(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryBundle>;
|
|
20
|
-
createRepositoryArchive(requestArg: IGitManagerRepositoryArchiveRequest): Promise<IGitManagerRepositoryArchive>;
|
|
21
|
+
createRepositoryArchive(requestArg: IGitManagerRepositoryArchiveRequest, optionsArg?: IGitManagerRepositoryArchiveOptions): Promise<IGitManagerRepositoryArchive>;
|
|
21
22
|
prepareRepositoryService(requestArg: IGitManagerRepositoryServiceRequest): Promise<IRustGitManagerRepositoryServiceDescriptor>;
|
|
22
23
|
restoreRepositoryBundle(requestArg: IGitManagerRestoreBundleRequest): Promise<IGitManagerRepositoryInfo>;
|
|
23
24
|
listRepositories(): Promise<IGitManagerRepositoryInfo[]>;
|
|
@@ -46,6 +46,9 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
46
46
|
kill() {
|
|
47
47
|
this.bridge.kill();
|
|
48
48
|
}
|
|
49
|
+
async terminate() {
|
|
50
|
+
await this.bridge.terminate();
|
|
51
|
+
}
|
|
49
52
|
get running() {
|
|
50
53
|
return this.bridge.running;
|
|
51
54
|
}
|
|
@@ -82,10 +85,50 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
82
85
|
async createRepositoryBundle(requestArg) {
|
|
83
86
|
return this.bridge.sendCommand('createRepositoryBundle', requestArg);
|
|
84
87
|
}
|
|
85
|
-
async createRepositoryArchive(requestArg) {
|
|
86
|
-
|
|
88
|
+
async createRepositoryArchive(requestArg, optionsArg = {}) {
|
|
89
|
+
if (optionsArg.signal?.aborted) {
|
|
90
|
+
throw optionsArg.signal.reason ?? new Error('Repository archive creation was aborted.');
|
|
91
|
+
}
|
|
92
|
+
const operationId = plugins.crypto.randomUUID();
|
|
93
|
+
const archivePromise = this.bridge.sendCommand('createRepositoryArchive', {
|
|
94
|
+
operationId,
|
|
95
|
+
request: requestArg,
|
|
96
|
+
}, {
|
|
87
97
|
timeoutMs: 65 * 60 * 1000,
|
|
88
98
|
});
|
|
99
|
+
let cancelPromise;
|
|
100
|
+
const cancelArchive = () => {
|
|
101
|
+
cancelPromise ??= this.bridge.sendCommand('cancelRepositoryArchive', {
|
|
102
|
+
operationId,
|
|
103
|
+
}, {
|
|
104
|
+
timeoutMs: 65 * 60 * 1000,
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
optionsArg.signal?.addEventListener('abort', cancelArchive, { once: true });
|
|
108
|
+
if (optionsArg.signal?.aborted) {
|
|
109
|
+
cancelArchive();
|
|
110
|
+
}
|
|
111
|
+
let result;
|
|
112
|
+
try {
|
|
113
|
+
result = await archivePromise;
|
|
114
|
+
if (cancelPromise) {
|
|
115
|
+
await cancelPromise.catch(() => undefined);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (archiveError) {
|
|
119
|
+
if (!cancelPromise) {
|
|
120
|
+
throw archiveError;
|
|
121
|
+
}
|
|
122
|
+
const cancellation = await cancelPromise;
|
|
123
|
+
if (cancellation.status === 'cancelled') {
|
|
124
|
+
throw optionsArg.signal?.reason
|
|
125
|
+
?? new Error('Repository archive creation was aborted.');
|
|
126
|
+
}
|
|
127
|
+
throw archiveError;
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
optionsArg.signal?.removeEventListener('abort', cancelArchive);
|
|
131
|
+
}
|
|
89
132
|
for (const [field, value] of [
|
|
90
133
|
['sizeBytes', result.sizeBytes],
|
|
91
134
|
['extractedSizeBytes', result.extractedSizeBytes],
|
|
@@ -137,4 +180,4 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
137
180
|
return this.bridge.sendCommand('getTag', requestArg);
|
|
138
181
|
}
|
|
139
182
|
}
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1naXRtYW5hZ2VyLWJyaWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3J1c3QtZ2l0bWFuYWdlci1icmlkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFtRnhDLFNBQVMsY0FBYztJQUNyQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakYsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsdUJBQXVCO0lBQzlCLE1BQU0sT0FBTyxHQUEyQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUEyQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixJQUFJLE1BQU0sRUFBRSxD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foss.global/gitmanager",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Headless Git manager for the foss.global Git platform, with a TypeScript API and Rust engine.",
|
|
6
6
|
"exports": {
|
|
@@ -11,16 +11,16 @@
|
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@foss.global/interfaces": "^0.11.0",
|
|
14
|
-
"@push.rocks/smartrust": "^1.
|
|
14
|
+
"@push.rocks/smartrust": "^1.7.0"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@foss.global/ci-spec": "0.2.0",
|
|
18
18
|
"@git.zone/tsbuild": "^4.4.2",
|
|
19
19
|
"@git.zone/tsdoc": "^2.1.1",
|
|
20
20
|
"@git.zone/tsrun": "^2.0.6",
|
|
21
|
-
"@git.zone/tsrust": "^1.
|
|
22
|
-
"@git.zone/tstest": "^
|
|
23
|
-
"@types/node": "^26.
|
|
21
|
+
"@git.zone/tsrust": "^1.8.0",
|
|
22
|
+
"@git.zone/tstest": "^4.0.0",
|
|
23
|
+
"@types/node": "^26.2.0"
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
26
|
"ts/**/*",
|
package/readme.md
CHANGED
|
@@ -76,6 +76,8 @@ await gitManager.restoreRepositoryBundle({
|
|
|
76
76
|
|
|
77
77
|
Exact-commit source archives default to a 128 MiB compressed limit, a 64 GiB extracted regular-file limit, and 1,000,000 filesystem entries. Configure these with `maxArchiveBytes`, `maxArchiveExtractedBytes`, and `maxArchiveEntries`; their hard ceilings are 16 GiB, 64 GiB, and 1,000,000 respectively. CI source consumers apply their negotiated compressed limit, which is at most 8 GiB in runner protocol v2. Before publication, GitManager validates the exact generated gzip/tar stream against the returned `extractedSizeBytes` and `entryCount`, including paths, entry types, links, PAX metadata, checksums, padding, and archive terminators.
|
|
78
78
|
|
|
79
|
+
Pass `{ signal }` as the second argument to `createRepositoryArchive()` to cancel archive creation. GitManager keeps operation IDs private, terminates and reaps active Git or inspection subprocesses, removes partial staging files, and only then rejects with the caller's abort reason. If final archive publication wins the cancellation race, the method returns the completed archive. `stop()` is single-flight and uses the same cleanup barrier before confirmed bridge termination.
|
|
80
|
+
|
|
79
81
|
The transfer directory is disposable staging, not persistence. GitManager holds exclusive ownership of it while running so startup can safely remove interrupted archive temporary files. The caller owns upload/download completion and removal of finished transfer files. Durable repository bytes belong in managed object storage.
|
|
80
82
|
|
|
81
83
|
## Git Smart HTTP
|
|
@@ -222,13 +224,13 @@ if (!readiness.ready) {
|
|
|
222
224
|
}
|
|
223
225
|
```
|
|
224
226
|
|
|
225
|
-
When Git Smart HTTP is running on a loopback bind, the probe targets the engine's own `GET /healthz` route out-of-band, so readiness stays available while the serial management channel is busy with a long-running command such as a mirror import
|
|
227
|
+
When Git Smart HTTP is running on a loopback bind, the probe targets the engine's own `GET /healthz` route out-of-band, so readiness stays available while the serial management channel is busy with a long-running command such as a mirror import. Repository archive creation also keeps management status and cancellation responsive while preserving serial admission for every other stateful command. Without a loopback Smart HTTP route, including a service bound to a non-loopback address with `allowUnsafeNonLoopback`, one shared bounded `getStatus` round trip per instance is used; that fallback queues behind other in-flight management commands and a Smart HTTP probe failure never falls through to it. Failure reasons are `not_running`, `starting`, `stopping`, `aborted`, `timeout`, and `unavailable`; the result matches the readiness contracts of `@push.rocks/smartdata` and `@push.rocks/smartbucket`.
|
|
226
228
|
|
|
227
229
|
## Public API
|
|
228
230
|
|
|
229
231
|
- `GitManager`: TypeScript facade for the Rust engine lifecycle.
|
|
230
232
|
- `GitManager.start()`: spawns the Rust binary through `smartrust` and starts the engine.
|
|
231
|
-
- `GitManager.stop()`:
|
|
233
|
+
- `GitManager.stop()`: shares one in-flight stop, cancels and cleans active archives, then confirms bridge process termination.
|
|
232
234
|
- `GitManager.getStatus()`: returns `{ running, dataDir, uptimeMs, smartHttp? }`.
|
|
233
235
|
- `GitManager.checkReadiness()`: performs a bounded, cancellable read-only readiness probe and returns `{ ready, status, durationMs }` plus a failure `reason` when unavailable.
|
|
234
236
|
- `GitManager.setSmartHttpRepositoryAccess()`: atomically replaces the running Smart HTTP allow-all/allowlist state.
|
|
@@ -239,7 +241,7 @@ When Git Smart HTTP is running on a loopback bind, the probe targets the engine'
|
|
|
239
241
|
- `GitManager.refreshMirror()`: atomically fetches and verifies the configured mirror source.
|
|
240
242
|
- `GitManager.verifyRepository()`: runs a strict full integrity check.
|
|
241
243
|
- `GitManager.createRepositoryBundle()`: writes a bounded full Git bundle into `transferDir` and returns its temporary path and size.
|
|
242
|
-
- `GitManager.createRepositoryArchive()`: writes a bounded deterministic exact-commit `tar.gz` archive into `transferDir` and returns its digest, compressed size, extracted regular-file size, entry count, and temporary path.
|
|
244
|
+
- `GitManager.createRepositoryArchive(request, { signal? })`: writes a bounded deterministic exact-commit `tar.gz` archive into `transferDir` and returns its digest, compressed size, extracted regular-file size, entry count, and temporary path; cancellation settles after Rust process and staging cleanup.
|
|
243
245
|
- `GitManager.restoreRepositoryBundle()`: validates and atomically restores a bounded bundle from `transferDir`.
|
|
244
246
|
- `GitManager.openRepositoryService()`: opens a bounded upload-pack or protected receive-pack stream for an authenticated SSH-style ingress.
|
|
245
247
|
- `GitManager.listRepositories()`: lists local repositories managed below the configured data directory.
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/classes.gitmanager.ts
CHANGED
|
@@ -19,6 +19,7 @@ import type {
|
|
|
19
19
|
IGitManagerSmartHttpRepositoryProtectedRefs,
|
|
20
20
|
IGitManagerRepositoryBundle,
|
|
21
21
|
IGitManagerRepositoryArchive,
|
|
22
|
+
IGitManagerRepositoryArchiveOptions,
|
|
22
23
|
IGitManagerRepositoryArchiveRequest,
|
|
23
24
|
IGitManagerRepositoryLfsPointer,
|
|
24
25
|
IGitManagerRepositoryServiceRequest,
|
|
@@ -52,6 +53,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
52
53
|
private started = false;
|
|
53
54
|
private startPromise: Promise<void> | null = null;
|
|
54
55
|
private stopRequested = false;
|
|
56
|
+
private stopPromise: Promise<void> | null = null;
|
|
55
57
|
private config: IRustGitManagerConfig;
|
|
56
58
|
private readonly repositoryServices = new Set<GitManagerRepositoryService>();
|
|
57
59
|
private lifecycleEpoch = 0;
|
|
@@ -128,6 +130,9 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
128
130
|
if (this.startPromise) {
|
|
129
131
|
throw new Error('GitManager is already starting');
|
|
130
132
|
}
|
|
133
|
+
if (this.stopPromise) {
|
|
134
|
+
throw new Error('GitManager is stopping');
|
|
135
|
+
}
|
|
131
136
|
|
|
132
137
|
this.stopRequested = false;
|
|
133
138
|
this.lifecycleEpoch++;
|
|
@@ -139,7 +144,21 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
139
144
|
}
|
|
140
145
|
}
|
|
141
146
|
|
|
142
|
-
public
|
|
147
|
+
public stop(): Promise<void> {
|
|
148
|
+
if (this.stopPromise) {
|
|
149
|
+
return this.stopPromise;
|
|
150
|
+
}
|
|
151
|
+
const stopPromise = this.stopInternal();
|
|
152
|
+
this.stopPromise = stopPromise;
|
|
153
|
+
void stopPromise.finally(() => {
|
|
154
|
+
if (this.stopPromise === stopPromise) {
|
|
155
|
+
this.stopPromise = null;
|
|
156
|
+
}
|
|
157
|
+
}).catch(() => undefined);
|
|
158
|
+
return stopPromise;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private async stopInternal(): Promise<void> {
|
|
143
162
|
this.stopRequested = true;
|
|
144
163
|
this.lifecycleEpoch++;
|
|
145
164
|
this.smartHttpProbeUrl = null;
|
|
@@ -149,6 +168,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
149
168
|
}
|
|
150
169
|
if (!this.bridge.running) {
|
|
151
170
|
await this.closeRepositoryServices();
|
|
171
|
+
await this.bridge.terminate();
|
|
152
172
|
this.started = false;
|
|
153
173
|
return;
|
|
154
174
|
}
|
|
@@ -156,7 +176,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
156
176
|
await this.closeRepositoryServices();
|
|
157
177
|
await this.bridge.stopGitManager();
|
|
158
178
|
} finally {
|
|
159
|
-
this.bridge.
|
|
179
|
+
await this.bridge.terminate();
|
|
160
180
|
this.started = false;
|
|
161
181
|
}
|
|
162
182
|
}
|
|
@@ -335,21 +355,30 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
335
355
|
|
|
336
356
|
public async createRepositoryArchive(
|
|
337
357
|
requestArg: IGitManagerRepositoryArchiveRequest,
|
|
358
|
+
optionsArg: IGitManagerRepositoryArchiveOptions = {},
|
|
338
359
|
): Promise<IGitManagerRepositoryArchive> {
|
|
339
360
|
this.assertRunning();
|
|
340
|
-
return this.bridge.createRepositoryArchive(requestArg);
|
|
361
|
+
return this.bridge.createRepositoryArchive(requestArg, optionsArg);
|
|
341
362
|
}
|
|
342
363
|
|
|
343
364
|
public async openRepositoryService(
|
|
344
365
|
requestArg: IGitManagerRepositoryServiceRequest,
|
|
345
366
|
): Promise<GitManagerRepositoryService> {
|
|
346
367
|
this.assertRunning();
|
|
368
|
+
const serviceEpoch = this.lifecycleEpoch;
|
|
347
369
|
const descriptor = await this.bridge.prepareRepositoryService({
|
|
348
370
|
org: requestArg.org,
|
|
349
371
|
repo: requestArg.repo,
|
|
350
372
|
service: requestArg.service,
|
|
351
373
|
...(requestArg.protocol ? { protocol: requestArg.protocol } : {}),
|
|
352
374
|
});
|
|
375
|
+
if (
|
|
376
|
+
this.lifecycleEpoch !== serviceEpoch
|
|
377
|
+
|| this.stopRequested
|
|
378
|
+
|| !this.running
|
|
379
|
+
) {
|
|
380
|
+
throw new Error('GitManager stopped while preparing repository service');
|
|
381
|
+
}
|
|
353
382
|
const service = new GitManagerRepositoryService(
|
|
354
383
|
descriptor,
|
|
355
384
|
requestArg,
|
|
@@ -434,7 +463,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
434
463
|
throw new Error('Failed to spawn rustgitmanager binary');
|
|
435
464
|
}
|
|
436
465
|
if (this.stopRequested) {
|
|
437
|
-
this.bridge.
|
|
466
|
+
await this.bridge.terminate();
|
|
438
467
|
throw new Error('GitManager start was cancelled');
|
|
439
468
|
}
|
|
440
469
|
|
|
@@ -444,7 +473,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
444
473
|
try {
|
|
445
474
|
await this.bridge.stopGitManager();
|
|
446
475
|
} finally {
|
|
447
|
-
this.bridge.
|
|
476
|
+
await this.bridge.terminate();
|
|
448
477
|
this.started = false;
|
|
449
478
|
}
|
|
450
479
|
throw new Error('GitManager start was cancelled');
|
|
@@ -452,7 +481,7 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
452
481
|
this.started = true;
|
|
453
482
|
await this.captureSmartHttpProbeUrl();
|
|
454
483
|
} catch (error) {
|
|
455
|
-
this.bridge.
|
|
484
|
+
await this.bridge.terminate();
|
|
456
485
|
this.started = false;
|
|
457
486
|
throw error;
|
|
458
487
|
}
|
|
@@ -630,6 +659,9 @@ export class GitManager extends plugins.EventEmitter {
|
|
|
630
659
|
}
|
|
631
660
|
|
|
632
661
|
private assertRunning(): void {
|
|
662
|
+
if (this.stopRequested) {
|
|
663
|
+
throw new Error('GitManager is stopping');
|
|
664
|
+
}
|
|
633
665
|
if (!this.running) {
|
|
634
666
|
throw new Error('GitManager is not running');
|
|
635
667
|
}
|
package/ts/models.ts
CHANGED
|
@@ -75,6 +75,10 @@ export interface IGitManagerRepositoryArchiveRequest
|
|
|
75
75
|
objectId: string;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
export interface IGitManagerRepositoryArchiveOptions {
|
|
79
|
+
signal?: AbortSignal;
|
|
80
|
+
}
|
|
81
|
+
|
|
78
82
|
export interface IGitManagerRepositoryArchive
|
|
79
83
|
extends IGitManagerRepositorySelector {
|
|
80
84
|
objectId: string;
|
package/ts/plugins.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// node native scope
|
|
2
2
|
import * as childProcess from 'node:child_process';
|
|
3
|
+
import * as crypto from 'node:crypto';
|
|
3
4
|
import { EventEmitter } from 'node:events';
|
|
4
5
|
import * as http from 'node:http';
|
|
5
6
|
import * as path from 'node:path';
|
|
6
7
|
import * as stream from 'node:stream';
|
|
7
8
|
import * as url from 'node:url';
|
|
8
9
|
|
|
9
|
-
export { childProcess, EventEmitter, http, path, stream, url };
|
|
10
|
+
export { childProcess, crypto, EventEmitter, http, path, stream, url };
|
|
10
11
|
|
|
11
12
|
// @push.rocks scope
|
|
12
13
|
import * as smartrust from '@push.rocks/smartrust';
|
|
@@ -19,6 +19,7 @@ import type {
|
|
|
19
19
|
IGitManagerSmartHttpRepositoryProtectedRefs,
|
|
20
20
|
IGitManagerRepositoryBundle,
|
|
21
21
|
IGitManagerRepositoryArchive,
|
|
22
|
+
IGitManagerRepositoryArchiveOptions,
|
|
22
23
|
IGitManagerRepositoryArchiveRequest,
|
|
23
24
|
IGitManagerRepositoryLfsPointer,
|
|
24
25
|
IGitManagerRepositoryServiceRequest,
|
|
@@ -36,6 +37,21 @@ import type {
|
|
|
36
37
|
IRustGitManagerRepositoryServiceDescriptor,
|
|
37
38
|
} from './models.js';
|
|
38
39
|
|
|
40
|
+
type TRepositoryArchiveCancelStatus =
|
|
41
|
+
| 'cancelled'
|
|
42
|
+
| 'completed'
|
|
43
|
+
| 'failed'
|
|
44
|
+
| 'not_found';
|
|
45
|
+
|
|
46
|
+
interface IRepositoryArchiveOperationRequest {
|
|
47
|
+
operationId: string;
|
|
48
|
+
request: IGitManagerRepositoryArchiveRequest;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
interface IRepositoryArchiveCancelRequest {
|
|
52
|
+
operationId: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
39
55
|
type TGitManagerCommands = {
|
|
40
56
|
start: { params: { config: IRustGitManagerConfig }; result: Record<string, never> };
|
|
41
57
|
stop: { params: Record<string, never>; result: Record<string, never> };
|
|
@@ -48,7 +64,8 @@ type TGitManagerCommands = {
|
|
|
48
64
|
refreshMirror: { params: IGitManagerRepositorySelector; result: IGitManagerRepositoryInfo };
|
|
49
65
|
verifyRepository: { params: IGitManagerRepositorySelector; result: IGitManagerRepositoryInfo };
|
|
50
66
|
createRepositoryBundle: { params: IGitManagerRepositorySelector; result: IGitManagerRepositoryBundle };
|
|
51
|
-
createRepositoryArchive: { params:
|
|
67
|
+
createRepositoryArchive: { params: IRepositoryArchiveOperationRequest; result: IGitManagerRepositoryArchive };
|
|
68
|
+
cancelRepositoryArchive: { params: IRepositoryArchiveCancelRequest; result: { status: TRepositoryArchiveCancelStatus } };
|
|
52
69
|
prepareRepositoryService: { params: IGitManagerRepositoryServiceRequest; result: IRustGitManagerRepositoryServiceDescriptor };
|
|
53
70
|
restoreRepositoryBundle: { params: IGitManagerRestoreBundleRequest; result: IGitManagerRepositoryInfo };
|
|
54
71
|
listRepositories: { params: Record<string, never>; result: IGitManagerRepositoryInfo[] };
|
|
@@ -122,6 +139,10 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
122
139
|
this.bridge.kill();
|
|
123
140
|
}
|
|
124
141
|
|
|
142
|
+
public async terminate(): Promise<void> {
|
|
143
|
+
await this.bridge.terminate();
|
|
144
|
+
}
|
|
145
|
+
|
|
125
146
|
public get running(): boolean {
|
|
126
147
|
return this.bridge.running;
|
|
127
148
|
}
|
|
@@ -183,10 +204,52 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
|
|
|
183
204
|
|
|
184
205
|
public async createRepositoryArchive(
|
|
185
206
|
requestArg: IGitManagerRepositoryArchiveRequest,
|
|
207
|
+
optionsArg: IGitManagerRepositoryArchiveOptions = {},
|
|
186
208
|
): Promise<IGitManagerRepositoryArchive> {
|
|
187
|
-
|
|
209
|
+
if (optionsArg.signal?.aborted) {
|
|
210
|
+
throw optionsArg.signal.reason ?? new Error('Repository archive creation was aborted.');
|
|
211
|
+
}
|
|
212
|
+
const operationId = plugins.crypto.randomUUID();
|
|
213
|
+
const archivePromise = this.bridge.sendCommand('createRepositoryArchive', {
|
|
214
|
+
operationId,
|
|
215
|
+
request: requestArg,
|
|
216
|
+
}, {
|
|
188
217
|
timeoutMs: 65 * 60 * 1000,
|
|
189
218
|
});
|
|
219
|
+
let cancelPromise:
|
|
220
|
+
| Promise<{ status: TRepositoryArchiveCancelStatus }>
|
|
221
|
+
| undefined;
|
|
222
|
+
const cancelArchive = (): void => {
|
|
223
|
+
cancelPromise ??= this.bridge.sendCommand('cancelRepositoryArchive', {
|
|
224
|
+
operationId,
|
|
225
|
+
}, {
|
|
226
|
+
timeoutMs: 65 * 60 * 1000,
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
optionsArg.signal?.addEventListener('abort', cancelArchive, { once: true });
|
|
230
|
+
if (optionsArg.signal?.aborted) {
|
|
231
|
+
cancelArchive();
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
let result: IGitManagerRepositoryArchive;
|
|
235
|
+
try {
|
|
236
|
+
result = await archivePromise;
|
|
237
|
+
if (cancelPromise) {
|
|
238
|
+
await cancelPromise.catch(() => undefined);
|
|
239
|
+
}
|
|
240
|
+
} catch (archiveError) {
|
|
241
|
+
if (!cancelPromise) {
|
|
242
|
+
throw archiveError;
|
|
243
|
+
}
|
|
244
|
+
const cancellation = await cancelPromise;
|
|
245
|
+
if (cancellation.status === 'cancelled') {
|
|
246
|
+
throw optionsArg.signal?.reason
|
|
247
|
+
?? new Error('Repository archive creation was aborted.');
|
|
248
|
+
}
|
|
249
|
+
throw archiveError;
|
|
250
|
+
} finally {
|
|
251
|
+
optionsArg.signal?.removeEventListener('abort', cancelArchive);
|
|
252
|
+
}
|
|
190
253
|
for (const [field, value] of [
|
|
191
254
|
['sizeBytes', result.sizeBytes],
|
|
192
255
|
['extractedSizeBytes', result.extractedSizeBytes],
|