sliftutils 1.7.47 → 1.7.49
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/index.d.ts +86 -35
- package/misc/dist/environment.ts.cache +2 -2
- package/misc/dist/getSecret.ts.cache +2 -2
- package/misc/dist/strings.ts.cache +2 -2
- package/misc/dist/zip.ts.cache +2 -2
- package/misc/https/dist/certs.ts.cache +2 -2
- package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
- package/package.json +1 -1
- package/render-utils/dist/observer.tsx.cache +2 -2
- package/storage/ArchivesDisk.d.ts +3 -4
- package/storage/ArchivesDisk.ts +9 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/blockCache.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/mergeLock.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/streamLog.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/syncClient.ts.cache +2 -2
- package/storage/IArchives.d.ts +21 -6
- package/storage/IArchives.ts +25 -6
- package/storage/backblaze.d.ts +3 -4
- package/storage/backblaze.ts +87 -35
- package/storage/dist/ArchivesDisk.ts.cache +4 -3
- package/storage/dist/FileFolderAPI.tsx.cache +2 -2
- package/storage/dist/IArchives.ts.cache +3 -3
- package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
- package/storage/dist/JSONStorage.ts.cache +2 -2
- package/storage/dist/PendingManager.tsx.cache +2 -2
- package/storage/dist/TransactionStorage.ts.cache +2 -2
- package/storage/dist/backblaze.ts.cache +9 -3
- package/storage/dist/fileSystemPointer.ts.cache +2 -2
- package/storage/dist/remoteFileStorage.ts.cache +2 -2
- package/storage/remoteStorage/ArchivesRemote.d.ts +3 -5
- package/storage/remoteStorage/ArchivesRemote.ts +5 -5
- package/storage/remoteStorage/ArchivesUrl.d.ts +2 -1
- package/storage/remoteStorage/ArchivesUrl.ts +13 -3
- package/storage/remoteStorage/blobStore.d.ts +13 -4
- package/storage/remoteStorage/blobStore.ts +191 -105
- package/storage/remoteStorage/createArchives.d.ts +12 -7
- package/storage/remoteStorage/createArchives.ts +27 -18
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +4 -4
- package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
- package/storage/remoteStorage/dist/blobStore.ts.cache +179 -92
- package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
- package/storage/remoteStorage/dist/createArchives.ts.cache +22 -11
- package/storage/remoteStorage/dist/deployTakeover.ts.cache +2 -2
- package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
- package/storage/remoteStorage/dist/remoteConfig.ts.cache +13 -6
- package/storage/remoteStorage/dist/sourceWrapper.ts.cache +9 -3
- package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageController.ts.cache +5 -5
- package/storage/remoteStorage/dist/storageServerState.ts.cache +47 -13
- package/storage/remoteStorage/remoteConfig.d.ts +3 -1
- package/storage/remoteStorage/remoteConfig.ts +20 -5
- package/storage/remoteStorage/sourceWrapper.d.ts +1 -0
- package/storage/remoteStorage/sourceWrapper.ts +7 -1
- package/storage/remoteStorage/sourcesList.d.ts +15 -0
- package/storage/remoteStorage/sourcesList.ts +69 -0
- package/storage/remoteStorage/storageController.d.ts +3 -3
- package/storage/remoteStorage/storageController.ts +6 -9
- package/storage/remoteStorage/storageServer.ts +1 -0
- package/storage/remoteStorage/storageServerState.d.ts +3 -0
- package/storage/remoteStorage/storageServerState.ts +37 -12
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
|
-
import { IArchives, RemoteConfig, RemoteConfigBase, HostedConfig, BackblazeConfig, ArchiveFileInfo, ArchivesConfig, ArchivesSyncStatus } from "../IArchives";
|
|
3
|
+
import { IArchives, RemoteConfig, RemoteConfigBase, HostedConfig, BackblazeConfig, ArchiveFileInfo, ArchivesConfig, ArchivesSyncStatus, ChangesAfterConfig, SetConfig } from "../IArchives";
|
|
4
4
|
import { ServerBucketInfo, ActiveBucketInfo } from "./storageServerState";
|
|
5
5
|
/** The address, port, account, and bucket name a bucket routing URL addresses. Throws when the URL isn't a hosted bucket routing URL (https://host:port/file/<account>/<bucketName>/storage/storagerouting.json). */
|
|
6
6
|
export { parseHostedUrl, parseBackblazeUrl, getBucketBaseUrl } from "./remoteConfig";
|
|
7
7
|
export declare function createApiArchives(source: HostedConfig | BackblazeConfig): IArchives;
|
|
8
|
+
export type ArchivesChainOptions = {
|
|
9
|
+
/** Outside of node we default to read-only downloads over the public URLs (no API connection) when the config has public sources. Set this to connect to the API anyway - needed for writing, listing, and any other operation the plain URL form cannot serve. */
|
|
10
|
+
directConnect?: boolean;
|
|
11
|
+
};
|
|
8
12
|
export declare class ArchivesChain implements IArchives {
|
|
13
|
+
private options?;
|
|
9
14
|
private configured;
|
|
10
15
|
private activeConfig;
|
|
11
16
|
private statePromise;
|
|
@@ -14,10 +19,12 @@ export declare class ArchivesChain implements IArchives {
|
|
|
14
19
|
private pollTimer;
|
|
15
20
|
private disposed;
|
|
16
21
|
private unsubscribeRoutingPush;
|
|
17
|
-
constructor(config: RemoteConfig | RemoteConfigBase);
|
|
22
|
+
constructor(config: RemoteConfig | RemoteConfigBase, options?: ArchivesChainOptions | undefined);
|
|
18
23
|
getDebugName(): string;
|
|
19
24
|
private getState;
|
|
20
25
|
private init;
|
|
26
|
+
/** Clientside, a config with public sources is served entirely over plain URL downloads - no API connection, no access grant, and no writing. directConnect opts out of that. */
|
|
27
|
+
private isReadOnly;
|
|
21
28
|
private createChainSource;
|
|
22
29
|
private buildSources;
|
|
23
30
|
private startConfigPoll;
|
|
@@ -70,13 +77,11 @@ export declare class ArchivesChain implements IArchives {
|
|
|
70
77
|
shallow?: boolean;
|
|
71
78
|
type: "files" | "folders";
|
|
72
79
|
}): Promise<ArchiveFileInfo[]>;
|
|
73
|
-
|
|
80
|
+
getChangesAfter2(config: ChangesAfterConfig): Promise<ArchiveFileInfo[]>;
|
|
74
81
|
getSyncStatus(): Promise<ArchivesSyncStatus>;
|
|
75
82
|
getConfig(): Promise<ArchivesConfig>;
|
|
76
83
|
hasWriteAccess(): Promise<boolean>;
|
|
77
|
-
set(fileName: string, data: Buffer, config?:
|
|
78
|
-
lastModified?: number;
|
|
79
|
-
}): Promise<string>;
|
|
84
|
+
set(fileName: string, data: Buffer, config?: SetConfig): Promise<string>;
|
|
80
85
|
private setRoutingConfig;
|
|
81
86
|
del(fileName: string): Promise<void>;
|
|
82
87
|
private setVariableShard;
|
|
@@ -89,7 +94,7 @@ export declare class ArchivesChain implements IArchives {
|
|
|
89
94
|
getURLs(path: string): Promise<string[]>;
|
|
90
95
|
dispose(): void;
|
|
91
96
|
}
|
|
92
|
-
export declare function createArchives(config: RemoteConfig | RemoteConfigBase): ArchivesChain;
|
|
97
|
+
export declare function createArchives(config: RemoteConfig | RemoteConfigBase, options?: ArchivesChainOptions): ArchivesChain;
|
|
93
98
|
export declare function listServerBuckets(config: {
|
|
94
99
|
url: string;
|
|
95
100
|
account: string;
|
|
@@ -2,7 +2,7 @@ import { isNode, sort } from "socket-function/src/misc";
|
|
|
2
2
|
import { delay } from "socket-function/src/batching";
|
|
3
3
|
import {
|
|
4
4
|
IArchives, RemoteConfig, RemoteConfigBase, HostedConfig, BackblazeConfig,
|
|
5
|
-
ArchiveFileInfo, ArchivesConfig, ArchivesSyncStatus, STORAGE_WRONG_VALID_WINDOW,
|
|
5
|
+
ArchiveFileInfo, ArchivesConfig, ArchivesSyncStatus, ChangesAfterConfig, SetConfig, STORAGE_WRONG_VALID_WINDOW,
|
|
6
6
|
STORAGE_WRONG_ROUTE, FULL_ROUTE, VARIABLE_SHARD,
|
|
7
7
|
} from "../IArchives";
|
|
8
8
|
import {
|
|
@@ -45,6 +45,11 @@ type ChainState = {
|
|
|
45
45
|
sources: SourceWrapper[];
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
+
export type ArchivesChainOptions = {
|
|
49
|
+
/** Outside of node we default to read-only downloads over the public URLs (no API connection) when the config has public sources. Set this to connect to the API anyway - needed for writing, listing, and any other operation the plain URL form cannot serve. */
|
|
50
|
+
directConnect?: boolean;
|
|
51
|
+
};
|
|
52
|
+
|
|
48
53
|
function configWindowCurrent(config: HostedConfig | BackblazeConfig): boolean {
|
|
49
54
|
let now = Date.now();
|
|
50
55
|
let [start, end] = config.validWindow;
|
|
@@ -93,7 +98,7 @@ export class ArchivesChain implements IArchives {
|
|
|
93
98
|
private disposed = false;
|
|
94
99
|
private unsubscribeRoutingPush: (() => void) | undefined;
|
|
95
100
|
|
|
96
|
-
constructor(config: RemoteConfig | RemoteConfigBase) {
|
|
101
|
+
constructor(config: RemoteConfig | RemoteConfigBase, private options?: ArchivesChainOptions) {
|
|
97
102
|
this.configured = normalizeRemoteConfig(config);
|
|
98
103
|
this.activeConfig = this.configured;
|
|
99
104
|
this.unsubscribeRoutingPush = onServerRoutingChanged(() => {
|
|
@@ -135,8 +140,9 @@ export class ArchivesChain implements IArchives {
|
|
|
135
140
|
|
|
136
141
|
private async init(): Promise<ChainState> {
|
|
137
142
|
let configs = this.configured.sources.map(normalizeSource);
|
|
143
|
+
let readOnly = this.isReadOnly(this.configured);
|
|
138
144
|
let fetches = await Promise.all(configs.map(async sourceConfig => {
|
|
139
|
-
let probe = await SourceWrapper.create(sourceConfig, { background: false });
|
|
145
|
+
let probe = await SourceWrapper.create(sourceConfig, { background: false, readOnly });
|
|
140
146
|
let start = Date.now();
|
|
141
147
|
try {
|
|
142
148
|
let existing = await probe.readRoutingConfig();
|
|
@@ -243,16 +249,23 @@ export class ArchivesChain implements IArchives {
|
|
|
243
249
|
}
|
|
244
250
|
}
|
|
245
251
|
|
|
246
|
-
|
|
247
|
-
|
|
252
|
+
/** Clientside, a config with public sources is served entirely over plain URL downloads - no API connection, no access grant, and no writing. directConnect opts out of that. */
|
|
253
|
+
private isReadOnly(config: RemoteConfig): boolean {
|
|
254
|
+
if (this.options?.directConnect || isNode()) return false;
|
|
255
|
+
return config.sources.map(normalizeSource).some(x => x.public);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
private async createChainSource(sourceConfig: HostedConfig | BackblazeConfig, readOnly: boolean): Promise<SourceWrapper> {
|
|
259
|
+
let source = await SourceWrapper.create(sourceConfig, { readOnly });
|
|
248
260
|
source.startPinging();
|
|
249
261
|
return source;
|
|
250
262
|
}
|
|
251
263
|
|
|
252
264
|
private async buildSources(config: RemoteConfig): Promise<SourceWrapper[]> {
|
|
265
|
+
let readOnly = this.isReadOnly(config);
|
|
253
266
|
let sources: SourceWrapper[] = [];
|
|
254
267
|
for (let sourceConfig of config.sources.map(normalizeSource)) {
|
|
255
|
-
sources.push(await this.createChainSource(sourceConfig));
|
|
268
|
+
sources.push(await this.createChainSource(sourceConfig, readOnly));
|
|
256
269
|
}
|
|
257
270
|
return sources;
|
|
258
271
|
}
|
|
@@ -328,6 +341,7 @@ export class ArchivesChain implements IArchives {
|
|
|
328
341
|
}
|
|
329
342
|
list.push(source);
|
|
330
343
|
}
|
|
344
|
+
let readOnly = this.isReadOnly(latest);
|
|
331
345
|
let sources: SourceWrapper[] = [];
|
|
332
346
|
for (let sourceConfig of latest.sources.map(normalizeSource)) {
|
|
333
347
|
let old = oldByConfig.get(strippedKey(sourceConfig))?.shift();
|
|
@@ -335,7 +349,7 @@ export class ArchivesChain implements IArchives {
|
|
|
335
349
|
old.updateValidWindow(sourceConfig.validWindow);
|
|
336
350
|
sources.push(old);
|
|
337
351
|
} else {
|
|
338
|
-
sources.push(await this.createChainSource(sourceConfig));
|
|
352
|
+
sources.push(await this.createChainSource(sourceConfig, readOnly));
|
|
339
353
|
}
|
|
340
354
|
}
|
|
341
355
|
for (let leftovers of oldByConfig.values()) {
|
|
@@ -556,13 +570,8 @@ export class ArchivesChain implements IArchives {
|
|
|
556
570
|
sort(merged, x => x.path);
|
|
557
571
|
return merged;
|
|
558
572
|
}
|
|
559
|
-
public async
|
|
560
|
-
let results = await this.runOnCovering(
|
|
561
|
-
if (!archives.getChangesAfter) {
|
|
562
|
-
throw new Error(`${archives.getDebugName()} does not support getChangesAfter`);
|
|
563
|
-
}
|
|
564
|
-
return await archives.getChangesAfter(time);
|
|
565
|
-
});
|
|
573
|
+
public async getChangesAfter2(config: ChangesAfterConfig): Promise<ArchiveFileInfo[]> {
|
|
574
|
+
let results = await this.runOnCovering(archives => archives.getChangesAfter2(config));
|
|
566
575
|
let byPath = new Map<string, ArchiveFileInfo>();
|
|
567
576
|
for (let list of results) {
|
|
568
577
|
for (let file of list) {
|
|
@@ -604,7 +613,7 @@ export class ArchivesChain implements IArchives {
|
|
|
604
613
|
return true;
|
|
605
614
|
}
|
|
606
615
|
|
|
607
|
-
public async set(fileName: string, data: Buffer, config?:
|
|
616
|
+
public async set(fileName: string, data: Buffer, config?: SetConfig): Promise<string> {
|
|
608
617
|
if (fileName === ROUTING_FILE) {
|
|
609
618
|
return await this.setRoutingConfig(data, config);
|
|
610
619
|
}
|
|
@@ -643,7 +652,7 @@ export class ArchivesChain implements IArchives {
|
|
|
643
652
|
await this.request({ write: true, route: getRoute(fileName) }, archives => archives.del(fileName));
|
|
644
653
|
}
|
|
645
654
|
|
|
646
|
-
private async setVariableShard(key: string, data: Buffer, config?:
|
|
655
|
+
private async setVariableShard(key: string, data: Buffer, config?: SetConfig): Promise<string> {
|
|
647
656
|
let recheckedAvailability = false;
|
|
648
657
|
while (true) {
|
|
649
658
|
let state = await this.getState();
|
|
@@ -752,8 +761,8 @@ export class ArchivesChain implements IArchives {
|
|
|
752
761
|
}
|
|
753
762
|
}
|
|
754
763
|
|
|
755
|
-
export function createArchives(config: RemoteConfig | RemoteConfigBase): ArchivesChain {
|
|
756
|
-
return new ArchivesChain(config);
|
|
764
|
+
export function createArchives(config: RemoteConfig | RemoteConfigBase, options?: ArchivesChainOptions): ArchivesChain {
|
|
765
|
+
return new ArchivesChain(config, options);
|
|
757
766
|
}
|
|
758
767
|
|
|
759
768
|
async function callServer<T>(url: string, run: (controller: typeof RemoteStorageController.nodes[string]) => Promise<T>): Promise<T> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.ArchivesRemote = exports.authenticateStorage = exports.parseStorageUrl = void 0;
|
|
4
4
|
const SocketFunction_1 = require("socket-function/SocketFunction");
|
|
@@ -128,7 +128,7 @@ class ArchivesRemote {
|
|
|
128
128
|
return result && { data: Buffer.from(result.data), writeTime: result.writeTime, size: result.size } || undefined;
|
|
129
129
|
}
|
|
130
130
|
async set(fileName, data, config) {
|
|
131
|
-
await this.call(() => this.controller.set(this.account, this.bucketName, fileName, data, config === null || config === void 0 ? void 0 : config.lastModified));
|
|
131
|
+
await this.call(() => this.controller.set(this.account, this.bucketName, fileName, data, config === null || config === void 0 ? void 0 : config.lastModified, config === null || config === void 0 ? void 0 : config.forceSetImmutable));
|
|
132
132
|
return fileName;
|
|
133
133
|
}
|
|
134
134
|
async del(fileName) {
|
|
@@ -181,5 +181,5 @@ class ArchivesRemote {
|
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
183
|
exports.ArchivesRemote = ArchivesRemote;
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNSZW1vdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBcmNoaXZlc1JlbW90ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtRUFBZ0U7QUFDaEUsbURBQXdEO0FBQ3hELDJEQUFxRDtBQUNyRCxrREFBNkU7QUFFN0UsaURBQWdGO0FBQ2hGLDJEQUc2QjtBQUU3QixrVkFBa1Y7QUFFbFYsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFVN0MsU0FBZ0IsZUFBZSxDQUFDLEdBQVc7SUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN6RCxDQUFDO0FBTkQsMENBTUM7QUFFRCx1RkFBdUY7QUFDaEYsS0FBSyxVQUFVLG1CQUFtQixDQUFDLE1BQXlEO0lBQy9GLG9KQUFvSjtJQUNwSiwrQkFBYyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUN6QyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0Qs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TSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsSUFBSTtvQkFBRSxNQUFNO2dCQUNqQixLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksb0JBQW9CLEVBQUUsQ0FBQztvQkFDeEUsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQztnQkFDckcsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUFDLFdBQU0sQ0FBQyxDQUFDLENBQUM7WUFDWCxNQUFNLENBQUMsQ0FBQztRQUNaLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFZO1FBQzVCLHdGQUF3RjtRQUN4RixPQUFPLElBQUEsMkJBQVksRUFBQyxJQUFBLCtCQUFnQixFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNKO0FBdEpELHdDQXNKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvY2tldEZ1bmN0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9Tb2NrZXRGdW5jdGlvblwiO1xuaW1wb3J0IHsgdGltZUluTWludXRlIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuaW1wb3J0IHsgZ2V0SWRlbnRpdHlDQSwgbG9hZElkZW50aXR5Q0EsIHNpZ24gfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgSUFyY2hpdmVzLCBBcmNoaXZlRmlsZUluZm8sIEFyY2hpdmVzQ29uZmlnLCBBcmNoaXZlc1N5bmNTdGF0dXMgfSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBwYXJzZUhvc3RlZFVybCwgZ2V0QnVja2V0QmFzZVVybCwgYnVpbGRGaWxlVXJsIH0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5pbXBvcnQge1xuICAgIFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLCBTVE9SQUdFX0FVVEhfUFVSUE9TRSxcbiAgICBTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVELCBTVE9SQUdFX0FDQ0VTU19ERU5JRUQsXG59IGZyb20gXCIuL3N0b3JhZ2VDb250cm9sbGVyXCI7XG5cbi8vIEEgYnVja2V0IG9uIG91ciByZW1vdGUgc3RvcmFnZSBzZXJ2ZXIgKHN0b3JhZ2VTZXJ2ZXIudHMpLCB1c2VkIGxpa2UgQXJjaGl2ZXNCYWNrYmxhemUuIFdvcmtzIGluIE5vZGUuanMgYW5kIHRoZSBicm93c2VyLiBBdXRoZW50aWNhdGVzIHdpdGggdGhpcyBtYWNoaW5lJ3MgY2VydHMudHMgaWRlbnRpdHk7IGlmIHRoZSBhY2NvdW50IGhhc24ndCB0cnVzdGVkIHRoaXMgbWFjaGluZSB5ZXQgaXQgcmVxdWVzdHMgYWNjZXNzLCBhbmQgYnkgZGVmYXVsdCB3YWl0cywgbG9nZ2luZyBpbnN0cnVjdGlvbnMgZXZlcnkgbWludXRlIChjYWxscyBibG9jayB1bnRpbCBhY2Nlc3MgaXMgZ3JhbnRlZCkuXG5cbmNvbnN0IEFDQ0VTU19SRVRSWV9ERUxBWSA9IDEwMDAgKiAzMDtcbmNvbnN0IExBUkdFX0ZJTEVfUEFSVF9TSVpFID0gOCAqIDEwMjQgKiAxMDI0O1xuXG5leHBvcnQgdHlwZSBBcmNoaXZlc1JlbW90ZUNvbmZpZyA9IHtcbiAgICAvLyBUaGUgYnVja2V0J3Mgcm91dGluZyBVUkwsIHdoaWNoIGFkZHJlc3NlcyB0aGUgc2VydmVyLCBhY2NvdW50LCBhbmQgYnVja2V0IGluIG9uZTpcbiAgICAvLyAgaHR0cHM6Ly9zdG9yYWdlLmV4YW1wbGUuY29tOjQ0NDQvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+L3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuICAgIHVybDogc3RyaW5nO1xuICAgIC8vIGZhbHNlOiBhY2Nlc3MtZGVuaWVkIGNhbGxzIHRocm93IGltbWVkaWF0ZWx5ICh0aGUgZXJyb3IgaW5jbHVkZXMgdGhlIGFjY2VzcyBwYWdlIGxpbmspIGluc3RlYWQgb2YgcmVxdWVzdGluZyBhY2Nlc3MgYW5kIGJsb2NraW5nIHVudGlsIGl0IGlzIGdyYW50ZWQgKHRoZSBkZWZhdWx0KS5cbiAgICB3YWl0Rm9yQWNjZXNzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0b3JhZ2VVcmwodXJsOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZzsgcG9ydDogbnVtYmVyIH0ge1xuICAgIGxldCB1ID0gbmV3IFVSTCh1cmwpO1xuICAgIGlmICh1LnByb3RvY29sICE9PSBcImh0dHBzOlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RvcmFnZSBVUkwgbXVzdCB1c2UgaHR0cHMsIGdvdCAke0pTT04uc3RyaW5naWZ5KHUucHJvdG9jb2wpfSBpbiAke0pTT04uc3RyaW5naWZ5KHVybCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IGFkZHJlc3M6IHUuaG9zdG5hbWUsIHBvcnQ6ICt1LnBvcnQgfHwgNDQzIH07XG59XG5cbi8vIEF1dGhlbnRpY2F0ZXMgYSBjb25uZWN0aW9uIHRvIGEgc3RvcmFnZSBzZXJ2ZXIgd2l0aCB0aGlzIG1hY2hpbmUncyBjZXJ0cy50cyBpZGVudGl0eVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZVN0b3JhZ2UoY29uZmlnOiB7IGFkZHJlc3M6IHN0cmluZzsgcG9ydDogbnVtYmVyOyBub2RlSWQ6IHN0cmluZyB9KTogUHJvbWlzZTx7IG1hY2hpbmVJZDogc3RyaW5nOyBpcDogc3RyaW5nIH0+IHtcbiAgICAvLyBob3N0U2VydmVyIG5vZGVJZHMgYXJlIG1hY2hpbmUtc3BlY2lmaWMsIHNvIGNvbm5lY3Rpb25zIGJ5IGRvbWFpbiBtdXN0IHRhcmdldCBcImFueSBzZXJ2ZXIgYXQgdGhpcyBhZGRyZXNzXCIgKHdoaWNoIGlzIGhvdyBicm93c2VycyBhbHdheXMgY29ubmVjdClcbiAgICBTb2NrZXRGdW5jdGlvbi5FTkFCTEVfQ0xJRU5UX01PREUgPSB0cnVlO1xuICAgIGxldCByb290RG9tYWluID0gY29uZmlnLmFkZHJlc3Muc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcbiAgICBhd2FpdCBsb2FkSWRlbnRpdHlDQShyb290RG9tYWluKTtcbiAgICBsZXQgY2EgPSBnZXRJZGVudGl0eUNBKHJvb3REb21haW4pO1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgICBwdXJwb3NlOiBTVE9SQUdFX0FVVEhfUFVSUE9TRSxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgc2VydmVyOiBgJHtjb25maWcuYWRkcmVzc306JHtjb25maWcucG9ydH1gLFxuICAgIH07XG4gICAgbGV0IHNpZ25hdHVyZSA9IHNpZ24oeyBrZXk6IGNhLmtleSB9LCBkYXRhKTtcbiAgICByZXR1cm4gYXdhaXQgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbY29uZmlnLm5vZGVJZF0uYXV0aGVudGljYXRlKHsgY2VydFBlbTogY2EuY2VydC50b1N0cmluZygpLCBzaWduYXR1cmUsIGRhdGEgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc1JlbW90ZSBpbXBsZW1lbnRzIElBcmNoaXZlcyB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IEFyY2hpdmVzUmVtb3RlQ29uZmlnKSB7XG4gICAgICAgIC8vIGhvc3RTZXJ2ZXIgbm9kZUlkcyBhcmUgbWFjaGluZS1zcGVjaWZpYywgc28gY29ubmVjdGlvbnMgYnkgZG9tYWluIG11c3QgdGFyZ2V0IFwiYW55IHNlcnZlciBhdCB0aGlzIGFkZHJlc3NcIiAod2hpY2ggaXMgaG93IGJyb3dzZXJzIGFsd2F5cyBjb25uZWN0KVxuICAgICAgICBTb2NrZXRGdW5jdGlvbi5FTkFCTEVfQ0xJRU5UX01PREUgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VkID0gcGFyc2VIb3N0ZWRVcmwodGhpcy5jb25maWcudXJsKTtcbiAgICBwcml2YXRlIGFjY291bnQgPSB0aGlzLnBhcnNlZC5hY2NvdW50O1xuICAgIHByaXZhdGUgYnVja2V0TmFtZSA9IHRoaXMucGFyc2VkLmJ1Y2tldE5hbWU7XG4gICAgcHJpdmF0ZSBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5jb25uZWN0KHsgYWRkcmVzczogdGhpcy5wYXJzZWQuYWRkcmVzcywgcG9ydDogdGhpcy5wYXJzZWQucG9ydCB9KTtcbiAgICBwcml2YXRlIGNvbnRyb2xsZXIgPSBSZW1vdGVTdG9yYWdlQ29udHJvbGxlci5ub2Rlc1t0aGlzLm5vZGVJZF07XG4gICAgcHJpdmF0ZSBsYXN0RGVuaWVkTG9nID0gMDtcblxuICAgIHB1YmxpYyBnZXREZWJ1Z05hbWUoKSB7XG4gICAgICAgIHJldHVybiBgcmVtb3RlU3RvcmFnZSAke3RoaXMucGFyc2VkLmFkZHJlc3N9OiR7dGhpcy5wYXJzZWQucG9ydH0gYWNjb3VudCAke3RoaXMuYWNjb3VudH0gYnVja2V0ICR7dGhpcy5idWNrZXROYW1lfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29ubmVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gU29ja2V0RnVuY3Rpb24uaXNOb2RlQ29ubmVjdGVkKHRoaXMubm9kZUlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcGluZygpOiBQcm9taXNlPHt9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbnRyb2xsZXIucGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYXV0aGVudGljYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBhdXRoZW50aWNhdGVTdG9yYWdlKHsgYWRkcmVzczogdGhpcy5wYXJzZWQuYWRkcmVzcywgcG9ydDogdGhpcy5wYXJzZWQucG9ydCwgbm9kZUlkOiB0aGlzLm5vZGVJZCB9KTtcbiAgICB9XG5cbiAgICAvLyBSdW5zIGEgY2FsbCwgYXV0aGVudGljYXRpbmcgKGFuZCByZS1hdXRoZW50aWNhdGluZyBhZnRlciByZWNvbm5lY3RzKSBhcyBuZWVkZWQuIFVubGlrZSBjYWxsKCksIGRvZXMgTk9UIHdhaXQgZm9yIGFjY291bnQgYWNjZXNzLlxuICAgIHByaXZhdGUgYXN5bmMgY2FsbEF1dGhlZDxUPihmbmM6ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbmMoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBpZiAoIVN0cmluZyhlLnN0YWNrIHx8IGUpLmluY2x1ZGVzKFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQpKSB0aHJvdyBlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbmMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoaXMgbWFjaGluZSBoYXMgYWNjZXNzIHRvIHRoZSBhY2NvdW50LiBPdGhlcndpc2UgcHV0cyBpbiBhbiBhY2Nlc3MgcmVxdWVzdCBhbmQgcmV0dXJucyBvdXIgbWFjaGluZUlkICsgaXAgKHNvIHRoZSBjYWxsZXIgY2FuIGRpc3BsYXkgdGhlbSBhbG9uZ3NpZGUgdGhlIGxpbmssIGZvciB0aGUgYXBwcm92ZXIgdG8gbWF0Y2ggdGhlIGluY29taW5nIHJlcXVlc3QpIGFuZCB0aGUgbGluayB0byB0aGUgZ3JhbnQgcGFnZS5cbiAgICBwdWJsaWMgYXN5bmMgd2FpdGluZ0ZvckFjY2VzcygpOiBQcm9taXNlPHsgbGluazogc3RyaW5nOyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZyB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuY2FsbEF1dGhlZCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0QWNjZXNzU3RhdGUodGhpcy5hY2NvdW50KSk7XG4gICAgICAgIGlmIChzdGF0ZS5oYXNBY2Nlc3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCByZXF1ZXN0ZWQgPSBhd2FpdCB0aGlzLmNhbGxBdXRoZWQoKCkgPT4gdGhpcy5jb250cm9sbGVyLnJlcXVlc3RBY2Nlc3ModGhpcy5hY2NvdW50KSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5rOiBgaHR0cHM6Ly8ke3RoaXMucGFyc2VkLmFkZHJlc3N9OiR7dGhpcy5wYXJzZWQucG9ydH0vJHt0aGlzLmFjY291bnR9YCxcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcmVxdWVzdGVkLm1hY2hpbmVJZCxcbiAgICAgICAgICAgIGlwOiByZXF1ZXN0ZWQuaXAsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhhc1dyaXRlQWNjZXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmNhbGxBdXRoZWQoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEFjY2Vzc1N0YXRlKHRoaXMuYWNjb3VudCkpO1xuICAgICAgICByZXR1cm4gISFzdGF0ZS5oYXNBY2Nlc3M7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXJzIG91ciBhY2Nlc3MgcmVxdWVzdCBzZXJ2ZXItc2lkZSAoc28gYW4gYWRtaW4gaGFzIGEgcmVxdWVzdElkIHRvIGdyYW50KSBhbmQgbG9ncyB0aGUgZ3JhbnQgaW5zdHJ1Y3Rpb25zLCBhdCBtb3N0IG9uY2UgYSBtaW51dGVcbiAgICBwcml2YXRlIGFzeW5jIHJlZ2lzdGVyQWNjZXNzUmVxdWVzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RlZCA9IGF3YWl0IHRoaXMuY2FsbEF1dGhlZCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIucmVxdWVzdEFjY2Vzcyh0aGlzLmFjY291bnQpKTtcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmxhc3REZW5pZWRMb2cgPiB0aW1lSW5NaW51dGUpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdERlbmllZExvZyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgTm8gYWNjZXNzIHRvIHN0b3JhZ2UgYWNjb3VudCAke0pTT04uc3RyaW5naWZ5KHRoaXMuYWNjb3VudCl9IG9uICR7dGhpcy5wYXJzZWQuYWRkcmVzc306JHt0aGlzLnBhcnNlZC5wb3J0fSAob3VyIG1hY2hpbmUgJHtyZXF1ZXN0ZWQubWFjaGluZUlkfSwgaXAgJHtyZXF1ZXN0ZWQuaXB9KS4gU2VlIGh0dHBzOi8vJHt0aGlzLnBhcnNlZC5hZGRyZXNzfToke3RoaXMucGFyc2VkLnBvcnR9LyR7dGhpcy5hY2NvdW50fSAtIG9yIGdyYW50IGl0IHdpdGg6ICR7cmVxdWVzdGVkLmdyYW50QWNjZXNzQ29tbWFuZH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJ1bnMgYSBjYWxsLCBhdXRoZW50aWNhdGluZyAoYW5kIHJlLWF1dGhlbnRpY2F0aW5nIGFmdGVyIHJlY29ubmVjdHMpIGFuZCB3YWl0aW5nIGZvciBhY2NvdW50IGFjY2VzcyBhcyBuZWVkZWQuIFdpdGggd2FpdEZvckFjY2VzcyBmYWxzZSwgZGVuaWVkIGNhbGxzIHRocm93IGltbWVkaWF0ZWx5IGluc3RlYWQgLSBidXQgdGhlIGFjY2VzcyByZXF1ZXN0IGlzIHN0aWxsIHJlZ2lzdGVyZWQgKGluIHRoZSBiYWNrZ3JvdW5kKSwgc28gdGhlIGRlbmlhbCBpcyBncmFudGFibGUuXG4gICAgcHJpdmF0ZSBhc3luYyBjYWxsPFQ+KGZuYzogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZm5jKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IFN0cmluZyhlLnN0YWNrIHx8IGUpO1xuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX0FDQ0VTU19ERU5JRUQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy53YWl0Rm9yQWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLnJlZ2lzdGVyQWNjZXNzUmVxdWVzdCgpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJBY2Nlc3NSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KEFDQ0VTU19SRVRSWV9ERUxBWSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiB7IHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IH0pOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQyKGZpbGVOYW1lLCBjb25maWcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICYmIHJlc3VsdC5kYXRhIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldDIoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogeyByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB9KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldDIodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUsIGZpbGVOYW1lLCBjb25maWc/LnJhbmdlKSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgJiYgeyBkYXRhOiBCdWZmZXIuZnJvbShyZXN1bHQuZGF0YSksIHdyaXRlVGltZTogcmVzdWx0LndyaXRlVGltZSwgc2l6ZTogcmVzdWx0LnNpemUgfSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBzZXQoZmlsZU5hbWU6IHN0cmluZywgZGF0YTogQnVmZmVyLCBjb25maWc/OiB7IGxhc3RNb2RpZmllZD86IG51bWJlciB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5zZXQodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUsIGZpbGVOYW1lLCBkYXRhLCBjb25maWc/Lmxhc3RNb2RpZmllZCkpO1xuICAgICAgICByZXR1cm4gZmlsZU5hbWU7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBkZWwoZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmRlbCh0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSwgZmlsZU5hbWUpKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0SW5mbyh0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSwgZmlsZU5hbWUpKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGZpbmRJbmZvKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiB7IHNoYWxsb3c/OiBib29sZWFuOyB0eXBlOiBcImZpbGVzXCIgfCBcImZvbGRlcnNcIiB9KTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5maW5kSW5mbyh0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSwgcHJlZml4LCBjb25maWcpKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGZpbmQocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IHsgc2hhbGxvdz86IGJvb2xlYW47IHR5cGU6IFwiZmlsZXNcIiB8IFwiZm9sZGVyc1wiIH0pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5maW5kSW5mbyhwcmVmaXgsIGNvbmZpZykpLm1hcCh4ID0+IHgucGF0aCk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIodGltZTogbnVtYmVyKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5nZXRDaGFuZ2VzQWZ0ZXIodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUsIHRpbWUpKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENvbmZpZygpOiBQcm9taXNlPEFyY2hpdmVzQ29uZmlnPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEFyY2hpdmVzQ29uZmlnKHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lKSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRTeW5jU3RhdHVzKCk6IFByb21pc2U8QXJjaGl2ZXNTeW5jU3RhdHVzPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldFN5bmNTdGF0dXModGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0TGFyZ2VGaWxlKGNvbmZpZzogeyBwYXRoOiBzdHJpbmc7IGdldE5leHREYXRhKCk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIEVuc3VyZSB3ZSdyZSBhdXRoZW50aWNhdGVkIHdpdGggYWNjZXNzIEJFRk9SRSBjb25zdW1pbmcgYW55IGRhdGEgKHRoZSBzdHJlYW0gY2Fubm90IGJlIHJld291bmQsIHNvIHdlIGNhbid0IHVzZSB0aGUgcmV0cnkgbG9vcCBhcm91bmQgdGhlIGFjdHVhbCB1cGxvYWQpXG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0SW5mbyh0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSwgY29uZmlnLnBhdGgpKTtcbiAgICAgICAgbGV0IHVwbG9hZElkID0gYXdhaXQgdGhpcy5jb250cm9sbGVyLnN0YXJ0TGFyZ2VGaWxlKHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lLCBjb25maWcucGF0aCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgY29uZmlnLmdldE5leHREYXRhKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhKSBicmVhaztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBkYXRhLmxlbmd0aDsgb2Zmc2V0ICs9IExBUkdFX0ZJTEVfUEFSVF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29udHJvbGxlci51cGxvYWRQYXJ0KHVwbG9hZElkLCBkYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgTEFSR0VfRklMRV9QQVJUX1NJWkUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuZmluaXNoTGFyZ2VGaWxlKHVwbG9hZElkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuY2FuY2VsTGFyZ2VGaWxlKHVwbG9hZElkKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVSTChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICAvLyBPbmx5IGFjdHVhbGx5IGxvYWRzIGZvciBwdWJsaWMgYnVja2V0cyAodGhlIHNlcnZlciByZWplY3RzIHBsYWluIFVSTCByZWFkcyBvdGhlcndpc2UpXG4gICAgICAgIHJldHVybiBidWlsZEZpbGVVcmwoZ2V0QnVja2V0QmFzZVVybCh0aGlzLmNvbmZpZy51cmwpLCBwYXRoKTtcbiAgICB9XG59XG4iXX0=
|
|
185
|
-
/* _JS_SOURCE_HASH = "
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNSZW1vdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBcmNoaXZlc1JlbW90ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtRUFBZ0U7QUFDaEUsbURBQXdEO0FBQ3hELDJEQUFxRDtBQUNyRCxrREFBNkU7QUFFN0UsaURBQWdGO0FBQ2hGLDJEQUc2QjtBQUU3QixrVkFBa1Y7QUFFbFYsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFVN0MsU0FBZ0IsZUFBZSxDQUFDLEdBQVc7SUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN6RCxDQUFDO0FBTkQsMENBTUM7QUFFRCx1RkFBdUY7QUFDaEYsS0FBSyxVQUFVLG1CQUFtQixDQUFDLE1BQXlEO0lBQy9GLG9KQUFvSjtJQUNwSiwrQkFBYyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUN6QyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0Qs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QUFJLEVBQUUsQ0FBQztnQkFDVixJQUFJLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLElBQUk7b0JBQUUsTUFBTTtnQkFDakIsS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLG9CQUFvQixFQUFFLENBQUM7b0JBQ3hFLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JHLENBQUM7WUFDTCxDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFBQyxXQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxDQUFDLENBQUM7UUFDWixDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBWTtRQUM1Qix3RkFBd0Y7UUFDeEYsT0FBTyxJQUFBLDJCQUFZLEVBQUMsSUFBQSwrQkFBZ0IsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDSjtBQXRKRCx3Q0FzSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb2NrZXRGdW5jdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25cIjtcbmltcG9ydCB7IHRpbWVJbk1pbnV0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IGdldElkZW50aXR5Q0EsIGxvYWRJZGVudGl0eUNBLCBzaWduIH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvY2VydHNcIjtcbmltcG9ydCB7IElBcmNoaXZlcywgQXJjaGl2ZUZpbGVJbmZvLCBBcmNoaXZlc0NvbmZpZywgQXJjaGl2ZXNTeW5jU3RhdHVzLCBTZXRDb25maWcgfSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBwYXJzZUhvc3RlZFVybCwgZ2V0QnVja2V0QmFzZVVybCwgYnVpbGRGaWxlVXJsIH0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5pbXBvcnQge1xuICAgIFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLCBTVE9SQUdFX0FVVEhfUFVSUE9TRSxcbiAgICBTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVELCBTVE9SQUdFX0FDQ0VTU19ERU5JRUQsXG59IGZyb20gXCIuL3N0b3JhZ2VDb250cm9sbGVyXCI7XG5cbi8vIEEgYnVja2V0IG9uIG91ciByZW1vdGUgc3RvcmFnZSBzZXJ2ZXIgKHN0b3JhZ2VTZXJ2ZXIudHMpLCB1c2VkIGxpa2UgQXJjaGl2ZXNCYWNrYmxhemUuIFdvcmtzIGluIE5vZGUuanMgYW5kIHRoZSBicm93c2VyLiBBdXRoZW50aWNhdGVzIHdpdGggdGhpcyBtYWNoaW5lJ3MgY2VydHMudHMgaWRlbnRpdHk7IGlmIHRoZSBhY2NvdW50IGhhc24ndCB0cnVzdGVkIHRoaXMgbWFjaGluZSB5ZXQgaXQgcmVxdWVzdHMgYWNjZXNzLCBhbmQgYnkgZGVmYXVsdCB3YWl0cywgbG9nZ2luZyBpbnN0cnVjdGlvbnMgZXZlcnkgbWludXRlIChjYWxscyBibG9jayB1bnRpbCBhY2Nlc3MgaXMgZ3JhbnRlZCkuXG5cbmNvbnN0IEFDQ0VTU19SRVRSWV9ERUxBWSA9IDEwMDAgKiAzMDtcbmNvbnN0IExBUkdFX0ZJTEVfUEFSVF9TSVpFID0gOCAqIDEwMjQgKiAxMDI0O1xuXG5leHBvcnQgdHlwZSBBcmNoaXZlc1JlbW90ZUNvbmZpZyA9IHtcbiAgICAvLyBUaGUgYnVja2V0J3Mgcm91dGluZyBVUkwsIHdoaWNoIGFkZHJlc3NlcyB0aGUgc2VydmVyLCBhY2NvdW50LCBhbmQgYnVja2V0IGluIG9uZTpcbiAgICAvLyAgaHR0cHM6Ly9zdG9yYWdlLmV4YW1wbGUuY29tOjQ0NDQvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+L3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuICAgIHVybDogc3RyaW5nO1xuICAgIC8vIGZhbHNlOiBhY2Nlc3MtZGVuaWVkIGNhbGxzIHRocm93IGltbWVkaWF0ZWx5ICh0aGUgZXJyb3IgaW5jbHVkZXMgdGhlIGFjY2VzcyBwYWdlIGxpbmspIGluc3RlYWQgb2YgcmVxdWVzdGluZyBhY2Nlc3MgYW5kIGJsb2NraW5nIHVudGlsIGl0IGlzIGdyYW50ZWQgKHRoZSBkZWZhdWx0KS5cbiAgICB3YWl0Rm9yQWNjZXNzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0b3JhZ2VVcmwodXJsOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZzsgcG9ydDogbnVtYmVyIH0ge1xuICAgIGxldCB1ID0gbmV3IFVSTCh1cmwpO1xuICAgIGlmICh1LnByb3RvY29sICE9PSBcImh0dHBzOlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RvcmFnZSBVUkwgbXVzdCB1c2UgaHR0cHMsIGdvdCAke0pTT04uc3RyaW5naWZ5KHUucHJvdG9jb2wpfSBpbiAke0pTT04uc3RyaW5naWZ5KHVybCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IGFkZHJlc3M6IHUuaG9zdG5hbWUsIHBvcnQ6ICt1LnBvcnQgfHwgNDQzIH07XG59XG5cbi8vIEF1dGhlbnRpY2F0ZXMgYSBjb25uZWN0aW9uIHRvIGEgc3RvcmFnZSBzZXJ2ZXIgd2l0aCB0aGlzIG1hY2hpbmUncyBjZXJ0cy50cyBpZGVudGl0eVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZVN0b3JhZ2UoY29uZmlnOiB7IGFkZHJlc3M6IHN0cmluZzsgcG9ydDogbnVtYmVyOyBub2RlSWQ6IHN0cmluZyB9KTogUHJvbWlzZTx7IG1hY2hpbmVJZDogc3RyaW5nOyBpcDogc3RyaW5nIH0+IHtcbiAgICAvLyBob3N0U2VydmVyIG5vZGVJZHMgYXJlIG1hY2hpbmUtc3BlY2lmaWMsIHNvIGNvbm5lY3Rpb25zIGJ5IGRvbWFpbiBtdXN0IHRhcmdldCBcImFueSBzZXJ2ZXIgYXQgdGhpcyBhZGRyZXNzXCIgKHdoaWNoIGlzIGhvdyBicm93c2VycyBhbHdheXMgY29ubmVjdClcbiAgICBTb2NrZXRGdW5jdGlvbi5FTkFCTEVfQ0xJRU5UX01PREUgPSB0cnVlO1xuICAgIGxldCByb290RG9tYWluID0gY29uZmlnLmFkZHJlc3Muc3BsaXQoXCIuXCIpLnNsaWNlKC0yKS5qb2luKFwiLlwiKTtcbiAgICBhd2FpdCBsb2FkSWRlbnRpdHlDQShyb290RG9tYWluKTtcbiAgICBsZXQgY2EgPSBnZXRJZGVudGl0eUNBKHJvb3REb21haW4pO1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgICBwdXJwb3NlOiBTVE9SQUdFX0FVVEhfUFVSUE9TRSxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgc2VydmVyOiBgJHtjb25maWcuYWRkcmVzc306JHtjb25maWcucG9ydH1gLFxuICAgIH07XG4gICAgbGV0IHNpZ25hdHVyZSA9IHNpZ24oeyBrZXk6IGNhLmtleSB9LCBkYXRhKTtcbiAgICByZXR1cm4gYXdhaXQgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbY29uZmlnLm5vZGVJZF0uYXV0aGVudGljYXRlKHsgY2VydFBlbTogY2EuY2VydC50b1N0cmluZygpLCBzaWduYXR1cmUsIGRhdGEgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc1JlbW90ZSBpbXBsZW1lbnRzIElBcmNoaXZlcyB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IEFyY2hpdmVzUmVtb3RlQ29uZmlnKSB7XG4gICAgICAgIC8vIGhvc3RTZXJ2ZXIgbm9kZUlkcyBhcmUgbWFjaGluZS1zcGVjaWZpYywgc28gY29ubmVjdGlvbnMgYnkgZG9tYWluIG11c3QgdGFyZ2V0IFwiYW55IHNlcnZlciBhdCB0aGlzIGFkZHJlc3NcIiAod2hpY2ggaXMgaG93IGJyb3dzZXJzIGFsd2F5cyBjb25uZWN0KVxuICAgICAgICBTb2NrZXRGdW5jdGlvbi5FTkFCTEVfQ0xJRU5UX01PREUgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VkID0gcGFyc2VIb3N0ZWRVcmwodGhpcy5jb25maWcudXJsKTtcbiAgICBwcml2YXRlIGFjY291bnQgPSB0aGlzLnBhcnNlZC5hY2NvdW50O1xuICAgIHByaXZhdGUgYnVja2V0TmFtZSA9IHRoaXMucGFyc2VkLmJ1Y2tldE5hbWU7XG4gICAgcHJpdmF0ZSBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5jb25uZWN0KHsgYWRkcmVzczogdGhpcy5wYXJzZWQuYWRkcmVzcywgcG9ydDogdGhpcy5wYXJzZWQucG9ydCB9KTtcbiAgICBwcml2YXRlIGNvbnRyb2xsZXIgPSBSZW1vdGVTdG9yYWdlQ29udHJvbGxlci5ub2Rlc1t0aGlzLm5vZGVJZF07XG4gICAgcHJpdmF0ZSBsYXN0RGVuaWVkTG9nID0gMDtcblxuICAgIHB1YmxpYyBnZXREZWJ1Z05hbWUoKSB7XG4gICAgICAgIHJldHVybiBgcmVtb3RlU3RvcmFnZSAke3RoaXMucGFyc2VkLmFkZHJlc3N9OiR7dGhpcy5wYXJzZWQucG9ydH0gYWNjb3VudCAke3RoaXMuYWNjb3VudH0gYnVja2V0ICR7dGhpcy5idWNrZXROYW1lfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29ubmVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gU29ja2V0RnVuY3Rpb24uaXNOb2RlQ29ubmVjdGVkKHRoaXMubm9kZUlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcGluZygpOiBQcm9taXNlPHt9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbnRyb2xsZXIucGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYXV0aGVudGljYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBhdXRoZW50aWNhdGVTdG9yYWdlKHsgYWRkcmVzczogdGhpcy5wYXJzZWQuYWRkcmVzcywgcG9ydDogdGhpcy5wYXJzZWQucG9ydCwgbm9kZUlkOiB0aGlzLm5vZGVJZCB9KTtcbiAgICB9XG5cbiAgICAvLyBSdW5zIGEgY2FsbCwgYXV0aGVudGljYXRpbmcgKGFuZCByZS1hdXRoZW50aWNhdGluZyBhZnRlciByZWNvbm5lY3RzKSBhcyBuZWVkZWQuIFVubGlrZSBjYWxsKCksIGRvZXMgTk9UIHdhaXQgZm9yIGFjY291bnQgYWNjZXNzLlxuICAgIHByaXZhdGUgYXN5bmMgY2FsbEF1dGhlZDxUPihmbmM6ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbmMoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBpZiAoIVN0cmluZyhlLnN0YWNrIHx8IGUpLmluY2x1ZGVzKFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQpKSB0aHJvdyBlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbmMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoaXMgbWFjaGluZSBoYXMgYWNjZXNzIHRvIHRoZSBhY2NvdW50LiBPdGhlcndpc2UgcHV0cyBpbiBhbiBhY2Nlc3MgcmVxdWVzdCBhbmQgcmV0dXJucyBvdXIgbWFjaGluZUlkICsgaXAgKHNvIHRoZSBjYWxsZXIgY2FuIGRpc3BsYXkgdGhlbSBhbG9uZ3NpZGUgdGhlIGxpbmssIGZvciB0aGUgYXBwcm92ZXIgdG8gbWF0Y2ggdGhlIGluY29taW5nIHJlcXVlc3QpIGFuZCB0aGUgbGluayB0byB0aGUgZ3JhbnQgcGFnZS5cbiAgICBwdWJsaWMgYXN5bmMgd2FpdGluZ0ZvckFjY2VzcygpOiBQcm9taXNlPHsgbGluazogc3RyaW5nOyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZyB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuY2FsbEF1dGhlZCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0QWNjZXNzU3RhdGUodGhpcy5hY2NvdW50KSk7XG4gICAgICAgIGlmIChzdGF0ZS5oYXNBY2Nlc3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCByZXF1ZXN0ZWQgPSBhd2FpdCB0aGlzLmNhbGxBdXRoZWQoKCkgPT4gdGhpcy5jb250cm9sbGVyLnJlcXVlc3RBY2Nlc3ModGhpcy5hY2NvdW50KSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5rOiBgaHR0cHM6Ly8ke3RoaXMucGFyc2VkLmFkZHJlc3N9OiR7dGhpcy5wYXJzZWQucG9ydH0vJHt0aGlzLmFjY291bnR9YCxcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcmVxdWVzdGVkLm1hY2hpbmVJZCxcbiAgICAgICAgICAgIGlwOiByZXF1ZXN0ZWQuaXAsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhhc1dyaXRlQWNjZXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmNhbGxBdXRoZWQoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldEFjY2Vzc1N0YXRlKHRoaXMuYWNjb3VudCkpO1xuICAgICAgICByZXR1cm4gISFzdGF0ZS5oYXNBY2Nlc3M7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXJzIG91ciBhY2Nlc3MgcmVxdWVzdCBzZXJ2ZXItc2lkZSAoc28gYW4gYWRtaW4gaGFzIGEgcmVxdWVzdElkIHRvIGdyYW50KSBhbmQgbG9ncyB0aGUgZ3JhbnQgaW5zdHJ1Y3Rpb25zLCBhdCBtb3N0IG9uY2UgYSBtaW51dGVcbiAgICBwcml2YXRlIGFzeW5jIHJlZ2lzdGVyQWNjZXNzUmVxdWVzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RlZCA9IGF3YWl0IHRoaXMuY2FsbEF1dGhlZCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIucmVxdWVzdEFjY2Vzcyh0aGlzLmFjY291bnQpKTtcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmxhc3REZW5pZWRMb2cgPiB0aW1lSW5NaW51dGUpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdERlbmllZExvZyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgTm8gYWNjZXNzIHRvIHN0b3JhZ2UgYWNjb3VudCAke0pTT04uc3RyaW5naWZ5KHRoaXMuYWNjb3VudCl9IG9uICR7dGhpcy5wYXJzZWQuYWRkcmVzc306JHt0aGlzLnBhcnNlZC5wb3J0fSAob3VyIG1hY2hpbmUgJHtyZXF1ZXN0ZWQubWFjaGluZUlkfSwgaXAgJHtyZXF1ZXN0ZWQuaXB9KS4gU2VlIGh0dHBzOi8vJHt0aGlzLnBhcnNlZC5hZGRyZXNzfToke3RoaXMucGFyc2VkLnBvcnR9LyR7dGhpcy5hY2NvdW50fSAtIG9yIGdyYW50IGl0IHdpdGg6ICR7cmVxdWVzdGVkLmdyYW50QWNjZXNzQ29tbWFuZH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJ1bnMgYSBjYWxsLCBhdXRoZW50aWNhdGluZyAoYW5kIHJlLWF1dGhlbnRpY2F0aW5nIGFmdGVyIHJlY29ubmVjdHMpIGFuZCB3YWl0aW5nIGZvciBhY2NvdW50IGFjY2VzcyBhcyBuZWVkZWQuIFdpdGggd2FpdEZvckFjY2VzcyBmYWxzZSwgZGVuaWVkIGNhbGxzIHRocm93IGltbWVkaWF0ZWx5IGluc3RlYWQgLSBidXQgdGhlIGFjY2VzcyByZXF1ZXN0IGlzIHN0aWxsIHJlZ2lzdGVyZWQgKGluIHRoZSBiYWNrZ3JvdW5kKSwgc28gdGhlIGRlbmlhbCBpcyBncmFudGFibGUuXG4gICAgcHJpdmF0ZSBhc3luYyBjYWxsPFQ+KGZuYzogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZm5jKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IFN0cmluZyhlLnN0YWNrIHx8IGUpO1xuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX0FDQ0VTU19ERU5JRUQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy53YWl0Rm9yQWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLnJlZ2lzdGVyQWNjZXNzUmVxdWVzdCgpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJBY2Nlc3NSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KEFDQ0VTU19SRVRSWV9ERUxBWSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiB7IHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IH0pOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQyKGZpbGVOYW1lLCBjb25maWcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICYmIHJlc3VsdC5kYXRhIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldDIoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogeyByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB9KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldDIodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUsIGZpbGVOYW1lLCBjb25maWc/LnJhbmdlKSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgJiYgeyBkYXRhOiBCdWZmZXIuZnJvbShyZXN1bHQuZGF0YSksIHdyaXRlVGltZTogcmVzdWx0LndyaXRlVGltZSwgc2l6ZTogcmVzdWx0LnNpemUgfSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBzZXQoZmlsZU5hbWU6IHN0cmluZywgZGF0YTogQnVmZmVyLCBjb25maWc/OiBTZXRDb25maWcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLnNldCh0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSwgZmlsZU5hbWUsIGRhdGEsIGNvbmZpZz8ubGFzdE1vZGlmaWVkLCBjb25maWc/LmZvcmNlU2V0SW1tdXRhYmxlKSk7XG4gICAgICAgIHJldHVybiBmaWxlTmFtZTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGRlbChmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZGVsKHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lLCBmaWxlTmFtZSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mbyhmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5nZXRJbmZvKHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lLCBmaWxlTmFtZSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZmluZEluZm8ocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IHsgc2hhbGxvdz86IGJvb2xlYW47IHR5cGU6IFwiZmlsZXNcIiB8IFwiZm9sZGVyc1wiIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmZpbmRJbmZvKHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lLCBwcmVmaXgsIGNvbmZpZykpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZmluZChwcmVmaXg6IHN0cmluZywgY29uZmlnPzogeyBzaGFsbG93PzogYm9vbGVhbjsgdHlwZTogXCJmaWxlc1wiIHwgXCJmb2xkZXJzXCIgfSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmZpbmRJbmZvKHByZWZpeCwgY29uZmlnKSkubWFwKHggPT4geC5wYXRoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENoYW5nZXNBZnRlcih0aW1lOiBudW1iZXIpOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhbGwoKCkgPT4gdGhpcy5jb250cm9sbGVyLmdldENoYW5nZXNBZnRlcih0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSwgdGltZSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0QXJjaGl2ZXNDb25maWcodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUpKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldFN5bmNTdGF0dXMoKTogUHJvbWlzZTxBcmNoaXZlc1N5bmNTdGF0dXM+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsbCgoKSA9PiB0aGlzLmNvbnRyb2xsZXIuZ2V0U3luY1N0YXR1cyh0aGlzLmFjY291bnQsIHRoaXMuYnVja2V0TmFtZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRMYXJnZUZpbGUoY29uZmlnOiB7IHBhdGg6IHN0cmluZzsgZ2V0TmV4dERhdGEoKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gRW5zdXJlIHdlJ3JlIGF1dGhlbnRpY2F0ZWQgd2l0aCBhY2Nlc3MgQkVGT1JFIGNvbnN1bWluZyBhbnkgZGF0YSAodGhlIHN0cmVhbSBjYW5ub3QgYmUgcmV3b3VuZCwgc28gd2UgY2FuJ3QgdXNlIHRoZSByZXRyeSBsb29wIGFyb3VuZCB0aGUgYWN0dWFsIHVwbG9hZClcbiAgICAgICAgYXdhaXQgdGhpcy5jYWxsKCgpID0+IHRoaXMuY29udHJvbGxlci5nZXRJbmZvKHRoaXMuYWNjb3VudCwgdGhpcy5idWNrZXROYW1lLCBjb25maWcucGF0aCkpO1xuICAgICAgICBsZXQgdXBsb2FkSWQgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuc3RhcnRMYXJnZUZpbGUodGhpcy5hY2NvdW50LCB0aGlzLmJ1Y2tldE5hbWUsIGNvbmZpZy5wYXRoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCBjb25maWcuZ2V0TmV4dERhdGEoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIGJyZWFrO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGRhdGEubGVuZ3RoOyBvZmZzZXQgKz0gTEFSR0VfRklMRV9QQVJUX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sbGVyLnVwbG9hZFBhcnQodXBsb2FkSWQsIGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBMQVJHRV9GSUxFX1BBUlRfU0laRSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29udHJvbGxlci5maW5pc2hMYXJnZUZpbGUodXBsb2FkSWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29udHJvbGxlci5jYW5jZWxMYXJnZUZpbGUodXBsb2FkSWQpO1xuICAgICAgICAgICAgfSBjYXRjaCB7IH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIC8vIE9ubHkgYWN0dWFsbHkgbG9hZHMgZm9yIHB1YmxpYyBidWNrZXRzICh0aGUgc2VydmVyIHJlamVjdHMgcGxhaW4gVVJMIHJlYWRzIG90aGVyd2lzZSlcbiAgICAgICAgcmV0dXJuIGJ1aWxkRmlsZVVybChnZXRCdWNrZXRCYXNlVXJsKHRoaXMuY29uZmlnLnVybCksIHBhdGgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
185
|
+
/* _JS_SOURCE_HASH = "c7addcba0ee9034173642891286ac30c48407f5a8f060e99ed698807f766ff44"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.ArchivesUrl = void 0;
|
|
4
4
|
const https_1 = require("socket-function/src/https");
|
|
@@ -84,4 +84,4 @@ class ArchivesUrl {
|
|
|
84
84
|
}
|
|
85
85
|
exports.ArchivesUrl = ArchivesUrl;
|
|
86
86
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNVcmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBcmNoaXZlc1VybC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBNEU7QUFFNUUsaURBQThDO0FBRTlDLGtGQUFrRjtBQUNsRixnTUFBZ007QUFFaE0sTUFBYSxXQUFXO0lBQ3BCLDJGQUEyRjtJQUMzRixZQUFvQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtJQUFJLENBQUM7SUFFOUIsWUFBWTtRQUNmLE9BQU8sT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxTQUFpQjtRQUNuQyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsU0FBUyx5R0FBeUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkosQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxNQUFtRDtRQUNsRixJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDO0lBQzlDLENBQUM7SUFDTSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQWdCLEVBQUUsTUFBbUQ7UUFDbkYsSUFBSSxHQUFHLEdBQUcsSUFBQSwyQkFBWSxFQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxPQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEtBQUssR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSyxDQUFDO1FBQzFCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFF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RCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFZO1FBQzVCLE9BQU8sSUFBQSwyQkFBWSxFQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNNLEtBQUssQ0FBQyxTQUFTO1FBQ2xCLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQTlFRCxrQ0E4RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBodHRwc1JlcXVlc3QsIEh0dHBzUmVzcG9uc2VJbmZvIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvaHR0cHNcIjtcbmltcG9ydCB7IElBcmNoaXZlcywgQXJjaGl2ZUZpbGVJbmZvLCBBcmNoaXZlc0NvbmZpZyB9IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IGJ1aWxkRmlsZVVybCB9IGZyb20gXCIuL3JlbW90ZUNvbmZpZ1wiO1xuXG4vLyBSZWFkLW9ubHkgSUFyY2hpdmVzIG92ZXIgYSBwdWJsaWMgYnVja2V0J3MgcGxhaW4tVVJMIGZvcm0gKG91ciBzdG9yYWdlIHNlcnZlcidzXG4vLyAvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+Ly4uLiByb3V0ZSwgb3IgYSBiYWNrYmxhemUgZnJpZW5kbHkgVVJMKS4gVXNlZCB3aGVuIHdlIGhhdmUgbm8gQVBJIGFjY2VzcyB0byBhIHNvdXJjZS4gT25seSBzaW5nbGUtZmlsZSByZWFkcyB3b3JrOiB0aGVyZSBpcyBubyBsaXN0aW5nLCBhbmQgd3JpdGVzIGFsd2F5cyB0aHJvdy5cblxuZXhwb3J0IGNsYXNzIEFyY2hpdmVzVXJsIGltcGxlbWVudHMgSUFyY2hpdmVzIHtcbiAgICAvLyBiYXNlIGlzIHRoZSBidWNrZXQncyBwdWJsaWMgYmFzZSBVUkwsIGUuZy4gaHR0cHM6Ly9ob3N0OnBvcnQvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBiYXNlOiBzdHJpbmcpIHsgfVxuXG4gICAgcHVibGljIGdldERlYnVnTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIGB1cmwgJHt0aGlzLmJhc2V9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRPbmx5RXJyb3Iob3BlcmF0aW9uOiBzdHJpbmcpOiBFcnJvciB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoYCR7b3BlcmF0aW9ufSBpcyBub3Qgc3VwcG9ydGVkIG92ZXIgVVJMLWZvcm0gYWNjZXNzIChubyBBUEkgYWNjZXNzIHRvIHRoaXMgc291cmNlLCBvbmx5IHB1YmxpYyBVUkwgcmVhZHMpLiBTb3VyY2U6ICR7dGhpcy5iYXNlfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogeyByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB9KTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXQyKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IHsgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0gfSk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgdXJsID0gYnVpbGRGaWxlVXJsKHRoaXMuYmFzZSwgZmlsZU5hbWUpO1xuICAgICAgICBsZXQgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgICBsZXQgcmFuZ2UgPSBjb25maWc/LnJhbmdlO1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbXCJSYW5nZVwiXSA9IGBieXRlcz0ke3JhbmdlLnN0YXJ0fS0ke3JhbmdlLmVuZCAtIDF9YDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2U6IEh0dHBzUmVzcG9uc2VJbmZvID0geyBoZWFkZXJzOiB7fSB9O1xuICAgICAgICBsZXQgZGF0YTogQnVmZmVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGh0dHBzUmVxdWVzdCh1cmwsIHVuZGVmaW5lZCwgXCJHRVRcIiwgZmFsc2UsIHsgaGVhZGVycywgb3V0UmVzcG9uc2U6IHJlc3BvbnNlIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBodHRwc1JlcXVlc3QgdGhyb3dzIG9uIGFueSBub24tMnh4OyBhIG1pc3NpbmcgZmlsZSBpcyBhIG5vcm1hbCBhYnNlbnQgcmVzdWx0LCBub3QgYW4gZXJyb3IuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gNDA0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBIHJlYWwgMjA2IG9ubHkgcmV0dXJucyB0aGUgcmVxdWVzdGVkIHNsaWNlLCBzbyB0aGUgZnVsbCBzaXplIGxpdmVzIGluIENvbnRlbnQtUmFuZ2UncyB0b3RhbC5cbiAgICAgICAgbGV0IHNpemUgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgbGV0IGNvbnRlbnRSYW5nZSA9IHJlc3BvbnNlLmhlYWRlcnNbXCJjb250ZW50LXJhbmdlXCJdO1xuICAgICAgICBsZXQgdG90YWwgPSBjb250ZW50UmFuZ2UgJiYgTnVtYmVyKGNvbnRlbnRSYW5nZS5zcGxpdChcIi9cIilbMV0pO1xuICAgICAgICBpZiAodG90YWwgJiYgTnVtYmVyLmlzRmluaXRlKHRvdGFsKSkge1xuICAgICAgICAgICAgc2l6ZSA9IHRvdGFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlcnZlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHJhbmdlcyByZXR1cm4gdGhlIGZ1bGwgZmlsZSB3aXRoIGEgMjAwIChvdXJzIHNlcnZlcyByZWFsIDIwNnMsIGJ1dCBiYWNrYmxhemUgZnJpZW5kbHkgVVJMcyBhbmQgcHJveGllcyBtYXkgbm90KVxuICAgICAgICBpZiAocmFuZ2UgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5zdWJhcnJheShNYXRoLm1pbihyYW5nZS5zdGFydCwgZGF0YS5sZW5ndGgpLCBNYXRoLm1pbihyYW5nZS5lbmQsIGRhdGEubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxhc3RNb2RpZmllZCA9IHJlc3BvbnNlLmhlYWRlcnNbXCJsYXN0LW1vZGlmaWVkXCJdO1xuICAgICAgICBsZXQgd3JpdGVUaW1lID0gbGFzdE1vZGlmaWVkICYmIG5ldyBEYXRlKGxhc3RNb2RpZmllZCkuZ2V0VGltZSgpIHx8IDA7XG4gICAgICAgIHJldHVybiB7IGRhdGEsIHdyaXRlVGltZSwgc2l6ZSB9O1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mbyhmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQyKGZpbGVOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiB7IHdyaXRlVGltZTogcmVzdWx0LndyaXRlVGltZSwgc2l6ZTogcmVzdWx0LnNpemUgfSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldChmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IHsgbGFzdE1vZGlmaWVkPzogbnVtYmVyIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyB0aGlzLnJlYWRPbmx5RXJyb3IoXCJzZXRcIik7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBkZWwoZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyB0aGlzLnJlYWRPbmx5RXJyb3IoXCJkZWxcIik7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBzZXRMYXJnZUZpbGUoY29uZmlnOiB7IHBhdGg6IHN0cmluZzsgZ2V0TmV4dERhdGEoKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgdGhpcy5yZWFkT25seUVycm9yKFwic2V0TGFyZ2VGaWxlXCIpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZmluZChwcmVmaXg6IHN0cmluZywgY29uZmlnPzogeyBzaGFsbG93PzogYm9vbGVhbjsgdHlwZTogXCJmaWxlc1wiIHwgXCJmb2xkZXJzXCIgfSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgdGhyb3cgdGhpcy5yZWFkT25seUVycm9yKFwiZmluZCAobGlzdGluZylcIik7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBmaW5kSW5mbyhwcmVmaXg6IHN0cmluZywgY29uZmlnPzogeyBzaGFsbG93PzogYm9vbGVhbjsgdHlwZTogXCJmaWxlc1wiIHwgXCJmb2xkZXJzXCIgfSk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgdGhyb3cgdGhpcy5yZWFkT25seUVycm9yKFwiZmluZEluZm8gKGxpc3RpbmcpXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRVUkwocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkRmlsZVVybCh0aGlzLmJhc2UsIHBhdGgpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBoYXNXcml0ZUFjY2VzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
|
|
87
|
-
/* _JS_SOURCE_HASH = "
|
|
87
|
+
/* _JS_SOURCE_HASH = "0e995269880ce37ea2a5cf17baa75ff97ed370cd54cdddf03699d8b429d88441"; */
|