sliftutils 1.7.120 → 1.7.121
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/treeSummary.ts.cache +2 -2
- 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/archiveHelpers.ts +19 -7
- package/storage/dist/ArchivesDisk.ts.cache +2 -2
- package/storage/dist/FileFolderAPI.tsx.cache +2 -2
- package/storage/dist/IArchives.ts.cache +2 -2
- 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/StreamingLogs.ts.cache +2 -2
- package/storage/dist/TransactionFile.ts.cache +2 -2
- package/storage/dist/TransactionStorage.ts.cache +2 -2
- package/storage/dist/archiveHelpers.ts.cache +24 -9
- package/storage/dist/backblaze.ts.cache +2 -2
- package/storage/dist/fileSystemPointer.ts.cache +2 -2
- package/storage/dist/remoteFileStorage.ts.cache +2 -2
- package/storage/remoteStorage/dist/ArchivesDelayed.ts.cache +2 -2
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +2 -2
- package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
- package/storage/remoteStorage/dist/accessStats.ts.cache +2 -2
- package/storage/remoteStorage/dist/blobStore.ts.cache +2 -2
- package/storage/remoteStorage/dist/bucketDisk.ts.cache +2 -2
- package/storage/remoteStorage/dist/certTrustModal.tsx.cache +2 -2
- package/storage/remoteStorage/dist/chainStartup.ts.cache +2 -2
- package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
- package/storage/remoteStorage/dist/createArchives.ts.cache +2 -2
- package/storage/remoteStorage/dist/deployTakeover.ts.cache +2 -2
- package/storage/remoteStorage/dist/intermediateManagement.ts.cache +2 -2
- package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
- package/storage/remoteStorage/dist/remoteConfig.ts.cache +2 -2
- package/storage/remoteStorage/dist/serverConfig.ts.cache +2 -2
- package/storage/remoteStorage/dist/sourceWrapper.ts.cache +2 -2
- package/storage/remoteStorage/dist/sourcesList.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageController.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageLogs.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageServerState.ts.cache +2 -2
- package/storage/remoteStorage/dist/storeConfig.ts.cache +2 -2
- package/storage/remoteStorage/dist/storePlan.ts.cache +2 -2
- package/storage/remoteStorage/dist/storeSources.ts.cache +2 -2
- package/storage/remoteStorage/dist/storeSync.ts.cache +2 -2
- package/storage/remoteStorage/dist/validation.ts.cache +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
@@ -252,4 +252,4 @@ class TransactionFile {
|
|
|
252
252
|
}
|
|
253
253
|
exports.TransactionFile = TransactionFile;
|
|
254
254
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25GaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiVHJhbnNhY3Rpb25GaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIseURBQW1EO0FBRW5ELG9iQUFvYjtBQUNwYixFQUFFO0FBQ0Ysb0tBQW9LO0FBRXBLLCtJQUErSTtBQUMvSSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsOEZBQThGO0FBQzlGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLHNMQUFzTDtBQUN0TCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7QUF5QnhCLE1BQWEsZUFBZTtJQUN4QixZQUFvQixRQUFnQjtRQUFoQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBRTVCLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztRQUN4QyxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7UUFDckQsNEdBQTRHO1FBQ3BHLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixZQUFPLEdBQWEsRUFBRSxDQUFDO1FBRS9CLGdHQUFnRztRQUN4RixlQUFVLEdBQWtCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV0RCw4RkFBOEY7UUFDdkYsU0FBSSxHQUFHLElBQUEsY0FBSSxFQUFDLEtBQUssSUFBSSxFQUFFO1lBQzFCLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksQ0FBQztnQkFDRCxJQUFJLEdBQUcsTUFBTSxZQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNULElBQUssQ0FBdUIsQ0FBQyxJQUFJLEtBQUssUUFBUTtvQkFBRSxPQUFPO2dCQUN2RCxNQUFNLENBQUMsQ0FBQztZQUNaLENBQUM7WUFDRCxJQUFJLE9BQU8sR0FBRyxD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QUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLG9HQUFvRztRQUNwRyxNQUFNLFlBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsb0JBQW9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFlLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQztRQUN2SSxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0o7QUFuT0QsMENBbU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5cbi8vIEEgcGVyc2lzdGVudCBNYXAgdGhhdCBrbm93cyBhYm91dCB0aW1lIGFuZCBhYm91dCBkZWxldGlvbnMuIEV2ZXJ5IHZhbHVlIGNhcnJpZXMgdGhlIHRpbWUgaXQgd2FzIHdyaXR0ZW4sIHNvIGEgd3JpdGUgdGhhdCBhcnJpdmVzIG91dCBvZiBvcmRlciBpcyBzaW1wbHkgbm90IGFwcGxpZWQgLSB0aGUgbWFwIGNhbm5vdCBiZSBtYWRlIHRvIGdvIGJhY2t3YXJkcy4gQSBkZWxldGVkIGtleSBrZWVwcyBpdHMgdGltZSB0b28sIGFzIGEgdG9tYnN0b25lIGluIGEgc2Vjb25kIG1hcCwgc28gXCJ3YXMgdGhpcyBkZWxldGVkLCBhbmQgd2hlblwiIGlzIGFzIGNoZWFwIHRvIGFzayBhcyBcImRvZXMgdGhpcyBleGlzdFwiLCBhbmQgZXhwaXJpbmcgb2xkIHRvbWJzdG9uZXMgaXMgYSB3YWxrIG9mIHRoZSB0b21ic3RvbmVzIGFsb25lIHJhdGhlciB0aGFuIG9mIGV2ZXJ5dGhpbmcuXG4vL1xuLy8gT24gZGlzayBpdCBpcyBvbmUgYXBwZW5kLW9ubHkgbG9nIG9mIHRoZSBzZXRzLCBkZWxldGVzIGFuZCBwdXJnZXMgdGhhdCBwcm9kdWNlZCBib3RoIG1hcHMsIHJld3JpdHRlbiBmcm9tIHRoZW0gd2hlbmV2ZXIgaXQgaGFzIGdyb3duIHRvIHNldmVyYWwgdGltZXMgdGhlaXIgc2l6ZS5cblxuLy8gVGhlIGxvZyBpcyByZXdyaXR0ZW4gb25jZSBpdCBob2xkcyB0aGlzIG1hbnkgdGltZXMgbW9yZSByZWNvcmRzIHRoYW4gdGhlcmUgYXJlIGtleXMgKGEgbG9nIG9mIDMgcmVjb3JkcyBwZXIgc3Vydml2aW5nIGtleSBpcyBtb3N0bHkgaGlzdG9yeSlcbmNvbnN0IENPTVBBQ1RfUkFUSU8gPSAzO1xuLy8gLi4uYnV0IG5ldmVyIGZvciBhIHNtYWxsIGxvZywgd2hlcmUgdGhlIHJld3JpdGUgd291bGQgY29zdCBtb3JlIHRoYW4gdGhlIGhpc3RvcnkgaXQgcmVtb3Zlc1xuY29uc3QgTUlOX0NPTVBBQ1RfUkVDT1JEUyA9IDEwMDA7XG4vLyBBcHBlbmRzIGFyZSBjb2FsZXNjZWQgZm9yIHRoaXMgbG9uZy4gQSBjcmFzaCBsb3NlcyBhdCBtb3N0IHRoaXMgbXVjaCAtIHRoZSBjYWxsZXJzIG9mIHRoaXMgY2xhc3MgdHJlYXQgdGhlaXIgZGF0YSBhcyByZWNvbnN0cnVjdGlibGUgLSBhbmQgdGhlIGFsdGVybmF0aXZlIGlzIGEgZmlsZSB3cml0ZSBwZXIgc2V0LlxuY29uc3QgRkxVU0hfREVMQVkgPSA1MDA7XG5cbi8qKiBBIGxpdmUgdmFsdWU6IHdoYXQgd2FzIHN0b3JlZCwgd2hlbiBpdCB3YXMgd3JpdHRlbiAodGhlIGNhbGxlcidzIG9yZGVyaW5nKSwgYW5kIHdoZW4gd2UgbGFzdCBjaGFuZ2VkIGl0IChvdXJzKS4gKi9cbmV4cG9ydCB0eXBlIExvZ0VudHJ5PFQ+ID0geyB2YWx1ZTogVDsgdGltZTogbnVtYmVyOyBjaGFuZ2VkQXQ6IG51bWJlciB9O1xuLyoqIEEgZGVsZXRlZCBrZXk6IHdoZW4gaXQgd2FzIGRlbGV0ZWQsIGFuZCB3aGVuIHdlIGxlYXJuZWQuIFdoZW4gdGhlIGtleSBoYWQgYSBsaXZlIHZhbHVlIGF0IGRlbGV0aW9uIHRpbWUgaXQgaXMgTUFSS0VEIHJhdGhlciB0aGFuIGdvbmUgLSB0aGUgdmFsdWUgKGFuZCBpdHMgb3JpZ2luYWwgd3JpdGUgdGltZSkgcmlkZXMgYWxvbmcsIHNvIHRoZSB1bmRlcmx5aW5nIGRhdGEgY2FuIHN0aWxsIGJlIHJlYWQgYW5kIHRoZSBkZWxldGlvbiBjYW4gYmUgdW5kb25lIChzZWUgdW5tYXJrKSB1bnRpbCB0aGUgaGlzdG9yeSBpcyBkcm9wcGVkIChzZWUgZHJvcFZhbHVlKS4gKi9cbmV4cG9ydCB0eXBlIExvZ1RvbWJzdG9uZTxUPiA9IHsgdGltZTogbnVtYmVyOyBjaGFuZ2VkQXQ6IG51bWJlcjsgdmFsdWU/OiBUOyB2YWx1ZVRpbWU/OiBudW1iZXIgfTtcblxuLy8gT25lIGxpbmUgb2YgdGhlIGxvZywgd2l0aCBzaW5nbGUtbGV0dGVyIGZpZWxkIG5hbWVzIGJlY2F1c2UgdGhlcmUgaXMgb25lIHJlY29yZCBwZXIgc2V0L2RlbGV0ZS9wdXJnZSBldmVyIG1hZGUgYW5kIHRoZSBmaWVsZCBuYW1lcyBhcmUgbW9zdCBvZiBhIHJlY29yZCdzIG92ZXJoZWFkLiBKU09OLnN0cmluZ2lmeSBlc2NhcGVzIG5ld2xpbmVzIGluc2lkZSBrZXlzIGFuZCB2YWx1ZXMsIHNvIGEgcmVjb3JkIGNhbiBuZXZlciBjb250YWluIHRoZSBzZXBhcmF0b3IuXG50eXBlIExvZ1JlY29yZDxUPiA9IHtcbiAgICAvLyBrZXlcbiAgICBrOiBzdHJpbmc7XG4gICAgLy8gdGltZSwgbGFzdE1vZGlmaWVkIHRpbWUgb2YgdGhlIGZpbGUsIG9yIHRoZSBkZWxldGUgdGltZSwgb3IgdGhlIHB1cmdlIHRpbWVcbiAgICB0OiBudW1iZXI7XG4gICAgLy8gdmFsdWVcbiAgICB2PzogVDtcbiAgICAvLyBkZWxldGVkLCB0aGUgZmlsZSBvbiBkaXNrIGlzIGRlbGV0ZWQsIHByZXNlcnZlZCB3aGVuIHdlIGNvbXBhY3RcbiAgICBkPzogMTtcbiAgICAvLyBtYXJrZWQgZm9yIGRlbGV0aW9uOiBkZWxldGVkLCBidXQgdGhlIHZhbHVlICh2KSBhbmQgaXRzIG9yaWdpbmFsIHdyaXRlIHRpbWUgKHcpIGFyZSBrZXB0LCBzbyB0aGUgZGF0YSBpcyBzdGlsbCByZWFkYWJsZSBhbmQgcmVzdG9yYWJsZS4gUHJlc2VydmVkIHdoZW4gd2UgY29tcGFjdC5cbiAgICBtPzogMTtcbiAgICAvLyB3cml0ZVRpbWUsIHRoZSBvcmlnaW5hbCB3cml0ZSB0aW1lIG9mIGEgbWFya2VkLWZvci1kZWxldGlvbiB2YWx1ZSAodCBpcyB0aGUgREVMRVRFIHRpbWUgb24gdGhvc2UgcmVjb3JkcylcbiAgICB3PzogbnVtYmVyO1xuICAgIC8vIHB1cmdlZCwgdGhlIGZpbGUgb24gZGlzayBpcyBkZWxldGVkLCBub3QgcHJlc2VydmVkIHdoZW4gd2UgY29tcGFjdFxuICAgIHA/OiAxO1xufTtcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uRmlsZTxUPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmaWxlUGF0aDogc3RyaW5nKSB7IH1cblxuICAgIHByaXZhdGUgdmFsdWVzID0gbmV3IE1hcDxzdHJpbmcsIExvZ0VudHJ5PFQ+PigpO1xuICAgIHByaXZhdGUgZGVsZXRlZCA9IG5ldyBNYXA8c3RyaW5nLCBMb2dUb21ic3RvbmU8VD4+KCk7XG4gICAgLy8gUmVjb3JkcyB0aGUgbG9nIGhvbGRzICh3cml0dGVuIHBsdXMgcGVuZGluZykgLSB3aGF0IGNvbXBhY3Rpb24gaXMgZGVjaWRlZCBhZ2FpbnN0LCBOT1QgdGhlIG51bWJlciBvZiBrZXlzXG4gICAgcHJpdmF0ZSBsb2dSZWNvcmRzID0gMDtcbiAgICBwcml2YXRlIHBlbmRpbmc6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBmbHVzaFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICAvLyBTZXJpYWxpemVzIGV2ZXJ5dGhpbmcgdGhhdCB0b3VjaGVzIHRoZSBmaWxlLCBzbyBhbiBhcHBlbmQgY2FuIG5ldmVyIGludGVybGVhdmUgd2l0aCBhIHJld3JpdGVcbiAgICBwcml2YXRlIHdyaXRlQ2hhaW46IFByb21pc2U8dm9pZD4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIC8qKiBSZWFkcyB0aGUgbG9nIGFuZCByZXBsYXlzIGl0IGludG8gbWVtb3J5LiBFdmVyeSBvdGhlciBtZXRob2QgYXNzdW1lcyB0aGlzIGhhcyBmaW5pc2hlZC4gKi9cbiAgICBwdWJsaWMgbG9hZCA9IGxhenkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgZGF0YTogc3RyaW5nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKHRoaXMuZmlsZVBhdGgsIFwidXRmOFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKChlIGFzIHsgY29kZT86IHN0cmluZyB9KS5jb2RlID09PSBcIkVOT0VOVFwiKSByZXR1cm47XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhcHBsaWVkID0gMDtcbiAgICAgICAgbGV0IGRhbWFnZWQgPSAwO1xuICAgICAgICBmb3IgKGxldCBsaW5lIG9mIGRhdGEuc3BsaXQoXCJcXG5cIikpIHtcbiAgICAgICAgICAgIGlmICghbGluZSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgcmVjb3JkOiBMb2dSZWNvcmQ8VD4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlY29yZCA9IEpTT04ucGFyc2UobGluZSkgYXMgTG9nUmVjb3JkPFQ+O1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gQSBjcmFzaCBtaWQtYXBwZW5kIGxlYXZlcyBhIHRvcm4gZmluYWwgbGluZTsgYW55dGhpbmcgZWFybGllciBtZWFucyByZWFsIGRhbWFnZS4gRWl0aGVyIHdheSB0aGUgcmVzdCBvZiB0aGUgbG9nIGlzIHN0aWxsIHdvcnRoIGhhdmluZyAtIHRoaXMgaXMgYW4gaW5kZXgsIGFuZCBzY2FubmluZyByZWJ1aWxkcyB3aGF0ZXZlciB3ZSBsb3NlLlxuICAgICAgICAgICAgICAgIGRhbWFnZWQrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFwcGxpZWQrKztcbiAgICAgICAgICAgIC8vIFJlcGxheWVkIHRocm91Z2ggdGhlIHNhbWUgb3JkZXJpbmcgcnVsZXMgdGhhdCBwcm9kdWNlZCBpdCwgc28gYSBsb2cgd3JpdHRlbiBvdXQgb2Ygb3JkZXIgc3RpbGwgbGFuZHMgb24gdGhlIHNhbWUgc3RhdGVcbiAgICAgICAgICAgIGlmIChyZWNvcmQucCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzLmRlbGV0ZShyZWNvcmQuayk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkLmRlbGV0ZShyZWNvcmQuayk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC5tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseURlbGV0ZShyZWNvcmQuaywgcmVjb3JkLnQsIHJlY29yZC50LCByZWNvcmQudiwgcmVjb3JkLncpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlEZWxldGUocmVjb3JkLmssIHJlY29yZC50LCByZWNvcmQudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC52ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5U2V0KHJlY29yZC5rLCByZWNvcmQudiwgcmVjb3JkLnQsIHJlY29yZC50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ1JlY29yZHMgPSBhcHBsaWVkO1xuICAgICAgICBpZiAoZGFtYWdlZCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHtkYW1hZ2VkfSBkYW1hZ2VkIHJlY29yZChzKSBpbiAke3RoaXMuZmlsZVBhdGh9IHdlcmUgc2tpcHBlZDsgJHthcHBsaWVkfSBhcHBsaWVkLCBsZWF2aW5nICR7dGhpcy52YWx1ZXMuc2l6ZX0gdmFsdWVzIGFuZCAke3RoaXMuZGVsZXRlZC5zaXplfSB0b21ic3RvbmVzYCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKiBUaGUgbGl2ZSB2YWx1ZSwgb3IgdW5kZWZpbmVkIHdoZW4gdGhlIGtleSBkb2VzIG5vdCBleGlzdCBoZXJlIChkZWxldGVkIGluY2x1ZGVkIC0gYSBkZWxldGlvbiBpcyBhbiBhYnNlbmNlLCBzZWUgZ2V0RGVsZXRlZCBmb3IgaXRzIHRpbWUpLiAqL1xuICAgIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiBMb2dFbnRyeTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5nZXQoa2V5KTtcbiAgICB9XG4gICAgLyoqIFdoZW4gdGhlIGtleSB3YXMgZGVsZXRlZCwgaWYgaXQgd2FzICh2YWx1ZSBpbmNsdWRlZCB3aGVuIHRoZSBkZWxldGlvbiBpcyBzdGlsbCBtYXJrZWQgLSBzZWUgTG9nVG9tYnN0b25lKS4gQWJzZW50IGJvdGggaGVyZSBhbmQgaW4gZ2V0IG1lYW5zIHdlIGhhdmUgbmV2ZXIgaGVhcmQgb2YgaXQuICovXG4gICAgcHVibGljIGdldERlbGV0ZWQoa2V5OiBzdHJpbmcpOiBMb2dUb21ic3RvbmU8VD4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVkLmdldChrZXkpO1xuICAgIH1cbiAgICAvKiogVGhlIHRpbWUgdGhlIGtleSBsYXN0IGNoYW5nZWQgZWl0aGVyIHdheSwgb3IgMCBpZiB3ZSBoYXZlIG5ldmVyIGhlYXJkIG9mIGl0IC0gd2hhdCBhIG5ldyB3cml0ZSBoYXMgdG8gYmVhdC4gKi9cbiAgICBwdWJsaWMgdGltZU9mKGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGxpdmUgPSB0aGlzLnZhbHVlcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGxpdmUpIHJldHVybiBsaXZlLnRpbWU7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZWQuZ2V0KGtleSk/LnRpbWUgfHwgMDtcbiAgICB9XG5cbiAgICAvKiogTygxKSwgYW5kIGNvdW50cyBvbmx5IHdoYXQgZXhpc3RzLiAqL1xuICAgIHB1YmxpYyBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMuc2l6ZTtcbiAgICB9XG4gICAgcHVibGljIGdldCBkZWxldGVkU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVkLnNpemU7XG4gICAgfVxuICAgIC8qKiBMaXZlIHZhbHVlcyBvbmx5LiBMaXZlLCBpbiBpbnNlcnRpb24gb3JkZXIgLSBkZWxldGluZyBkdXJpbmcgaXRlcmF0aW9uIGlzIHNhZmUgKEpTIHNraXBzIGVudHJpZXMgcmVtb3ZlZCBiZWZvcmUgdGhleSBhcmUgcmVhY2hlZCksIHdoaWNoIGlzIHdoYXQgdGhlIHBhc3NlcyB0aGF0IHdhbGsgZXZlcnl0aGluZyBhbmQgcHJ1bmUgYXMgdGhleSBnbyByZWx5IG9uLiAqL1xuICAgIHB1YmxpYyBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W3N0cmluZywgTG9nRW50cnk8VD5dPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5lbnRyaWVzKCk7XG4gICAgfVxuICAgIC8qKiBUaGUgdG9tYnN0b25lcywgd2hpY2ggaXMgYSBtdWNoIHNtYWxsZXIgd2FsayB0aGFuIHRoZSB2YWx1ZXMgLSBzbyBleHBpcmluZyB0aGVtLCBvciBsaXN0aW5nIHdoYXQgd2FzIGRlbGV0ZWQgc2luY2Ugc29tZSB0aW1lLCBjb3N0cyB3aGF0IGl0IHNob3VsZC4gKi9cbiAgICBwdWJsaWMgZGVsZXRlZEVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbc3RyaW5nLCBMb2dUb21ic3RvbmU8VD5dPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZWQuZW50cmllcygpO1xuICAgIH1cblxuICAgIC8qKiBTdG9yZXMgYSB2YWx1ZSBhcyBvZiBgdGltZWAgKHJvdW5kZWQgdG8gd2hvbGUgbWlsbGlzZWNvbmRzIC0gc2VlIGFwcGx5U2V0KS4gUmV0dXJucyBmYWxzZSB3aGVuIHNvbWV0aGluZyBhdCBsZWFzdCBhcyBuZXcgaXMgYWxyZWFkeSBoZXJlLCBpbiB3aGljaCBjYXNlIG5vdGhpbmcgY2hhbmdlZCAtIGFuIG91dC1vZi1vcmRlciB3cml0ZSBpcyBub3QgYW4gZXJyb3IsIGl0IGlzIGp1c3QgbGF0ZS4gKi9cbiAgICBwdWJsaWMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCwgdGltZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHRpbWUgPSBNYXRoLnJvdW5kKHRpbWUpO1xuICAgICAgICBpZiAoIXRoaXMuYXBwbHlTZXQoa2V5LCB2YWx1ZSwgdGltZSwgRGF0ZS5ub3coKSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5hcHBlbmQoeyBrOiBrZXksIHQ6IHRpbWUsIHY6IHZhbHVlIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogRGVsZXRlcyBhcyBvZiBgdGltZWAsIGtlZXBpbmcgdGhlIHRvbWJzdG9uZS4gQSBrZXkgdGhhdCBoYWQgYSBsaXZlIHZhbHVlIGtlZXBzIGl0IGluIHRoZSB0b21ic3RvbmUgYXMgTUFSS0VEIGZvciBkZWxldGlvbiAocmVhZGFibGUgYW5kIHJlc3RvcmFibGUgdW50aWwgZHJvcFZhbHVlKS4gUmV0dXJucyBmYWxzZSB3aGVuIHNvbWV0aGluZyBhdCBsZWFzdCBhcyBuZXcgaXMgYWxyZWFkeSBoZXJlLiAqL1xuICAgIHB1YmxpYyBkZWxldGUoa2V5OiBzdHJpbmcsIHRpbWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICB0aW1lID0gTWF0aC5yb3VuZCh0aW1lKTtcbiAgICAgICAgbGV0IGxpdmUgPSB0aGlzLnZhbHVlcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCF0aGlzLmFwcGx5RGVsZXRlKGtleSwgdGltZSwgRGF0ZS5ub3coKSwgbGl2ZT8udmFsdWUsIGxpdmU/LnRpbWUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChsaXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCh7IGs6IGtleSwgdDogdGltZSwgbTogMSwgdjogbGl2ZS52YWx1ZSwgdzogbGl2ZS50aW1lIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoeyBrOiBrZXksIHQ6IHRpbWUsIGQ6IDEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIFVuZG9lcyBhIG1hcmtlZCBkZWxldGlvbjogdGhlIGtlcHQgdmFsdWUgYmVjb21lcyBsaXZlIGFnYWluLCBhcyBvZiBgdGltZWAgKGEgZnJlc2ggdGltZSwgc28gdGhlIHJlc3RvcmUgb3V0cmFua3MgdGhlIGRlbGV0aW9uIGV2ZXJ5d2hlcmUgaXQgcHJvcGFnYXRlZCkuIFJldHVybnMgZmFsc2Ugd2hlbiB0aGVyZSBpcyBubyBtYXJrZWQgdmFsdWUgdG8gcmVzdG9yZSwgb3Igc29tZXRoaW5nIGF0IGxlYXN0IGFzIG5ldyBpcyBhbHJlYWR5IGhlcmUuICovXG4gICAgcHVibGljIHVubWFyayhrZXk6IHN0cmluZywgdGltZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHRpbWUgPSBNYXRoLnJvdW5kKHRpbWUpO1xuICAgICAgICBsZXQgdG9tYnN0b25lID0gdGhpcy5kZWxldGVkLmdldChrZXkpO1xuICAgICAgICBpZiAoIXRvbWJzdG9uZSB8fCB0b21ic3RvbmUudmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuYXBwbHlTZXQoa2V5LCB0b21ic3RvbmUudmFsdWUsIHRpbWUsIERhdGUubm93KCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuYXBwZW5kKHsgazoga2V5LCB0OiB0aW1lLCB2OiB0b21ic3RvbmUudmFsdWUgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBEcm9wcyBhIG1hcmtlZCBkZWxldGlvbidzIGtlcHQgdmFsdWUgKGl0cyBoaXN0b3J5IGhhcyBiZWVuIHBoeXNpY2FsbHkgcmVtb3ZlZCksIGxlYXZpbmcgYSBwbGFpbiB0b21ic3RvbmUgd2l0aCB0aGUgc2FtZSBkZWxldGUgdGltZS4gKi9cbiAgICBwdWJsaWMgZHJvcFZhbHVlKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCB0b21ic3RvbmUgPSB0aGlzLmRlbGV0ZWQuZ2V0KGtleSk7XG4gICAgICAgIGlmICghdG9tYnN0b25lIHx8IHRvbWJzdG9uZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIHRoaXMuZGVsZXRlZC5zZXQoa2V5LCB7IHRpbWU6IHRvbWJzdG9uZS50aW1lLCBjaGFuZ2VkQXQ6IERhdGUubm93KCkgfSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKHsgazoga2V5LCB0OiB0b21ic3RvbmUudGltZSwgZDogMSB9KTtcbiAgICB9XG5cbiAgICAvKiogRm9yZ2V0cyB0aGUga2V5IGVudGlyZWx5LCB0b21ic3RvbmUgaW5jbHVkZWQgLSBmb3IgYSB0b21ic3RvbmUgb2xkIGVub3VnaCB0aGF0IG5vYm9keSBuZWVkcyB0byBoZWFyIGFib3V0IHRoZSBkZWxldGlvbiBhbnkgbW9yZSwgYW5kIGZvciBhbiBlbnRyeSB0aGF0IHR1cm5lZCBvdXQgbmV2ZXIgdG8gaGF2ZSBleGlzdGVkLiBOb3QgYSBkZWxldGlvbjogaXQgbGVhdmVzIG5vdGhpbmcgYmVoaW5kIHRvIHByb3BhZ2F0ZS4gKi9cbiAgICBwdWJsaWMgcHVyZ2Uoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGhhZCA9IHRoaXMudmFsdWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICBoYWQgPSB0aGlzLmRlbGV0ZWQuZGVsZXRlKGtleSkgfHwgaGFkO1xuICAgICAgICBpZiAoIWhhZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmFwcGVuZCh7IGs6IGtleSwgdDogTWF0aC5yb3VuZChEYXRlLm5vdygpKSwgcDogMSB9KTtcbiAgICB9XG5cbiAgICAvLyBUaW1lcyBhcmUgUk9VTkRFRCB0byB3aG9sZSBtaWxsaXNlY29uZHMgb24gZXZlcnkgcGF0aCBpbnRvIHRoZSBtYXBzIChsb2FkIHJlcGxheXMgdGhyb3VnaCBoZXJlIHRvbywgc28gZnJhY3Rpb25hbCB0aW1lcyBwZXJzaXN0ZWQgYnkgb2xkZXIgY29kZSBoZWFsIG9uIHN0YXJ0dXApLiBEaXNrIG10aW1lcyBjYXJyeSBmcmFjdGlvbmFsIG1pbGxpc2Vjb25kcyBidXQgdXRpbWVzIHJvdW5kLXRyaXBzIG9ubHkgd2hvbGUgb25lcywgc28gYSBmcmFjdGlvbmFsIHRpbWUgY2FuIG5ldmVyIGJlIHJlcHJvZHVjZWQgYnkgcHJvcGFnYXRpb24gLSBldmVyeSBjb3B5IG9mIHRoZSB2YWx1ZSB3b3VsZCBjb21wYXJlIFwib2xkZXJcIiB0aGFuIHRoZSBvcmlnaW5hbCBmb3JldmVyLCBhbmQgdGhlIHNhbWUgd3JpdGUgd291bGQgYmUgcmUtcHVzaGVkIGFuZCByZS1jb3BpZWQgZXZlcnkgcm91bmQuIFJvdW5kIHJhdGhlciB0aGFuIGZsb29yLCB0byBtYXRjaCBBcmNoaXZlc0Rpc2sgKHNlZSBpdHMgZ2V0Mik6IHV0aW1lcyBnb2VzIHRocm91Z2ggYSBzZWNvbmRzIGRvdWJsZSBhbmQgY2FuIGxhbmQgYSBoYWlyIGJlbG93IHRoZSBzdGFtcGVkIG1pbGxpc2Vjb25kLlxuICAgIHByaXZhdGUgYXBwbHlTZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBULCB0aW1lOiBudW1iZXIsIGNoYW5nZWRBdDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHRpbWUgPSBNYXRoLnJvdW5kKHRpbWUpO1xuICAgICAgICBjaGFuZ2VkQXQgPSBNYXRoLnJvdW5kKGNoYW5nZWRBdCk7XG4gICAgICAgIGlmICh0aW1lIDwgdGhpcy50aW1lT2Yoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmRlbGV0ZWQuZGVsZXRlKGtleSk7XG4gICAgICAgIHRoaXMudmFsdWVzLnNldChrZXksIHsgdmFsdWUsIHRpbWUsIGNoYW5nZWRBdCB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseURlbGV0ZShrZXk6IHN0cmluZywgdGltZTogbnVtYmVyLCBjaGFuZ2VkQXQ6IG51bWJlciwgdmFsdWU/OiBULCB2YWx1ZVRpbWU/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgdGltZSA9IE1hdGgucm91bmQodGltZSk7XG4gICAgICAgIGNoYW5nZWRBdCA9IE1hdGgucm91bmQoY2hhbmdlZEF0KTtcbiAgICAgICAgaWYgKHZhbHVlVGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZVRpbWUgPSBNYXRoLnJvdW5kKHZhbHVlVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWUgPCB0aGlzLnRpbWVPZihrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMudmFsdWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICB0aGlzLmRlbGV0ZWQuc2V0KGtleSwgeyB0aW1lLCBjaGFuZ2VkQXQsIHZhbHVlLCB2YWx1ZVRpbWUgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kKHJlY29yZDogTG9nUmVjb3JkPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMucGVuZGluZy5wdXNoKEpTT04uc3RyaW5naWZ5KHJlY29yZCkpO1xuICAgICAgICB0aGlzLmxvZ1JlY29yZHMrKztcbiAgICAgICAgdGhpcy5zY2hlZHVsZUZsdXNoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY2hlZHVsZUZsdXNoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mbHVzaFRpbWVyICE9PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5mbHVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZsdXNoVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2goKS5jYXRjaCgoZTogRXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoYEZsdXNoaW5nICR7dGhpcy5maWxlUGF0aH0gZmFpbGVkOiAke2Uuc3RhY2sgPz8gZX1gKSk7XG4gICAgICAgIH0sIEZMVVNIX0RFTEFZKTtcbiAgICAgICAgKHRoaXMuZmx1c2hUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgfVxuXG4gICAgLyoqIFdyaXRlcyBldmVyeXRoaW5nIHBlbmRpbmcgKHJld3JpdGluZyB0aGUgbG9nIGZpcnN0IGlmIGl0IGhhcyBncm93biB0b28gZmFyIHBhc3Qgd2hhdCBpdCBkZXNjcmliZXMpLiAqL1xuICAgIHB1YmxpYyBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMud3JpdGVDaGFpbi50aGVuKCgpID0+IHRoaXMud3JpdGUoKSk7XG4gICAgICAgIC8vIFRoZSBjaGFpbiBvbmx5IGV4aXN0cyB0byBzZXJpYWxpemUgd3JpdGVzLCBzbyBpdCBtdXN0IG5vdCBzdGF5IHJlamVjdGVkOiBhIGZhaWx1cmUgYmVsb25ncyB0byB0aGUgY2FsbGVyIHRoYXQgYXNrZWQgZm9yIHRoaXMgZmx1c2gsIG5vdCB0byBldmVyeSBmbHVzaCBhZnRlciBpdFxuICAgICAgICB0aGlzLndyaXRlQ2hhaW4gPSByZXN1bHQuY2F0Y2goKCkgPT4geyB9KTtcbiAgICAgICAgYXdhaXQgcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlyZWN0b3J5ID0gbGF6eShhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHBhdGguZGlybmFtZSh0aGlzLmZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIGFzeW5jIHdyaXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5sb2dSZWNvcmRzID4gTWF0aC5tYXgoTUlOX0NPTVBBQ1RfUkVDT1JEUywgKHRoaXMudmFsdWVzLnNpemUgKyB0aGlzLmRlbGV0ZWQuc2l6ZSkgKiBDT01QQUNUX1JBVElPKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21wYWN0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5hcHBlbmRQZW5kaW5nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhcHBlbmRQZW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMucGVuZGluZy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbGV0IHJlY29yZHMgPSB0aGlzLnBlbmRpbmc7XG4gICAgICAgIHRoaXMucGVuZGluZyA9IFtdO1xuICAgICAgICBhd2FpdCB0aGlzLmRpcmVjdG9yeSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMuYXBwZW5kRmlsZSh0aGlzLmZpbGVQYXRoLCByZWNvcmRzLmpvaW4oXCJcXG5cIikgKyBcIlxcblwiKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gUHV0IHRoZW0gYmFjayByYXRoZXIgdGhhbiBsb3NlIHRoZW06IHRoZSB2YWx1ZXMgYXJlIHN0aWxsIGluIG1lbW9yeSwgc28gYWxsIHRoYXQgaXMgYXQgcmlzayBpcyBoYXZpbmcgdG8gcmVidWlsZCB0aGVtIGJ5IHNjYW5uaW5nXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSByZWNvcmRzLmNvbmNhdCh0aGlzLnBlbmRpbmcpO1xuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZsdXNoKCk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV3cml0ZXMgdGhlIGxvZyBhcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiBib3RoIG1hcHMuIFRoZXkgYXJlIHRoZSB0cnV0aCAtIHRoZSBsb2cgb25seSBleGlzdHMgdG8gcmVidWlsZCB0aGVtIC0gc28gdGhlIHNuYXBzaG90IElTIHRoZSBuZXcgbG9nLlxuICAgIHByaXZhdGUgYXN5bmMgY29tcGFjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlY29yZHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IFtrZXksIGVudHJ5XSBvZiB0aGlzLnZhbHVlcykge1xuICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKEpTT04uc3RyaW5naWZ5KHsgazoga2V5LCB0OiBlbnRyeS50aW1lLCB2OiBlbnRyeS52YWx1ZSB9IHNhdGlzZmllcyBMb2dSZWNvcmQ8VD4pKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBba2V5LCB0b21ic3RvbmVdIG9mIHRoaXMuZGVsZXRlZCkge1xuICAgICAgICAgICAgaWYgKHRvbWJzdG9uZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKEpTT04uc3RyaW5naWZ5KHsgazoga2V5LCB0OiB0b21ic3RvbmUudGltZSwgbTogMSwgdjogdG9tYnN0b25lLnZhbHVlLCB3OiB0b21ic3RvbmUudmFsdWVUaW1lIH0gc2F0aXNmaWVzIExvZ1JlY29yZDxUPikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2goSlNPTi5zdHJpbmdpZnkoeyBrOiBrZXksIHQ6IHRvbWJzdG9uZS50aW1lLCBkOiAxIH0gc2F0aXNmaWVzIExvZ1JlY29yZDxUPikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENsZWFyZWQgd2l0aCB0aGUgc25hcHNob3Q6IGV2ZXJ5IHBlbmRpbmcgcmVjb3JkIGlzIGFscmVhZHkgcmVmbGVjdGVkIGluIHRoZSBtYXBzLCBzbyB0aGUgc25hcHNob3QgY29udGFpbnMgaXQuIEFueXRoaW5nIGFwcGVuZGVkIGZyb20gaGVyZSBvbiBpcyBOT1QgaW4gdGhlIHNuYXBzaG90LCBhbmQgbGFuZHMgaW4gdGhlIG5ldyBsb2cgYWZ0ZXIgdGhlIHJlbmFtZS5cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gW107XG4gICAgICAgIGxldCBzdGFydGVkV2l0aCA9IHRoaXMubG9nUmVjb3JkcztcbiAgICAgICAgbGV0IHRlbXBQYXRoID0gYCR7dGhpcy5maWxlUGF0aH0uY29tcGFjdGluZ2A7XG4gICAgICAgIGF3YWl0IHRoaXMuZGlyZWN0b3J5KCk7XG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZSh0ZW1wUGF0aCwgcmVjb3Jkcy5sZW5ndGggJiYgYCR7cmVjb3Jkcy5qb2luKFwiXFxuXCIpfVxcbmAgfHwgXCJcIik7XG4gICAgICAgIC8vIFJlcGxhY2VzIHRoZSBvbGQgbG9nIGluIG9uZSBzdGVwLCBzbyBhIGNyYXNoIGxlYXZlcyBlaXRoZXIgdGhlIHdob2xlIG9sZCBsb2cgb3IgdGhlIHdob2xlIG5ldyBvbmVcbiAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMucmVuYW1lKHRlbXBQYXRoLCB0aGlzLmZpbGVQYXRoKTtcbiAgICAgICAgdGhpcy5sb2dSZWNvcmRzID0gcmVjb3Jkcy5sZW5ndGggKyB0aGlzLnBlbmRpbmcubGVuZ3RoO1xuICAgICAgICBjb25zb2xlLmxvZyhgUmV3cm90ZSAke3RoaXMuZmlsZVBhdGh9OiAke3N0YXJ0ZWRXaXRofSBsb2cgcmVjb3JkcyBmb3IgJHt0aGlzLnZhbHVlcy5zaXplfSB2YWx1ZXMgYW5kICR7dGhpcy5kZWxldGVkLnNpemV9IHRvbWJzdG9uZXNgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBlbmRQZW5kaW5nKCk7XG4gICAgfVxufVxuIl19
|
|
255
|
-
/* _JS_SOURCE_HASH = "
|
|
255
|
+
/* _JS_SOURCE_HASH = "1473d3fc1595229d40e30289b677b52306cd586602494c718fe6bb9d8525c35b"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.TransactionStorage = void 0;
|
|
4
4
|
const misc_1 = require("socket-function/src/misc");
|
|
@@ -544,4 +544,4 @@ class TransactionStorage {
|
|
|
544
544
|
exports.TransactionStorage = TransactionStorage;
|
|
545
545
|
TransactionStorage.allStorage = [];
|
|
546
546
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25TdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiVHJhbnNhY3Rpb25TdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUEwRztBQUUxRyxxQ0FBa0M7QUFDbEMsMkRBQWtFO0FBQ2xFLGtFQUFpRjtBQUNqRixxREFBOEM7QUFDOUMscURBQWdEO0FBRWhELDJEQUErRDtBQUUvRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF1QkU7QUFFRixNQUFNLG1CQUFtQixHQUFHLG1CQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRTdDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxtQkFBWSxHQUFHLEVBQUUsQ0FBQztBQUU1QyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBRTVDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEUsNkRBQTZEO0FBQzdELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQztBQWN4QixNQUFNLGVBQWUsR0FBRyxJQUFBLHNCQUFXLEVBQUMsS0FBSyxFQUFFLEdBQXdCLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzNCLE1BQU0sS0FBSyxH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QUFDLFdBQU0sQ0FBQyxDQUFDLENBQUM7WUFFWCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQS9oQkwsZ0RBZ2lCQztBQXJoQmtCLDZCQUFVLEdBQXlCLEVBQUUsQUFBM0IsQ0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9taXNlT2JqLCBjb21wYXJlQXJyYXksIHNvcnQsIHRocm90dGxlRnVuY3Rpb24sIHRpbWVJbk1pbnV0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IElTdG9yYWdlLCBJU3RvcmFnZVJhdyB9IGZyb20gXCIuL0lTdG9yYWdlXCI7XG5pbXBvcnQgeyBaaXAgfSBmcm9tIFwiLi4vbWlzYy96aXBcIjtcbmltcG9ydCB7IGRlbGF5LCBydW5JblNlcmlhbCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQgeyBmb3JtYXROdW1iZXIsIGZvcm1hdFRpbWUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2Zvcm1hdFwiO1xuaW1wb3J0IHsgc2V0UGVuZGluZyB9IGZyb20gXCIuL1BlbmRpbmdNYW5hZ2VyXCI7XG5pbXBvcnQgeyBpc0luQnVpbGQgfSBmcm9tIFwiLi4vbWlzYy9lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSBcInR5cGVzYWZlY3NzXCI7XG5pbXBvcnQgeyBydW5JbmZpbml0ZVBvbGwgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuXG4vKlxuLy8gU3BlYzpcbi8vICAgICAgLSBaaXAgaW5kaXZpZHVhbCBsYXJnZSB2YWx1ZXNcbi8vICAgICAgLSBTdG9yZXMgYSB0cmFuc2FjdGlvbiBsb2dcbi8vICAgICAgICAgIC0gVHJhbnNhY3Rpb24gbG9nIGhhcyBhIGhlYWRlciwgd2hpY2ggaXMgSlNPTiwgZm9yIHRoaW5ncyBzdWNoIGFzIFwiemlwcGVkXCJcbi8vICAgICAgICAgIC0gVHJhbnNhY3Rpb24gbG9nIHVzZXMgbGVuZ3RoIHByZWZpeGVkIHZhbHVlcywgd2l0aCBhIHNwZWNpYWwgOCBieXRlcyB0byBkZW5vdGUgdGhlIGVuZCwgYW5kIDggZm9yIHRoZSBzdGFydC5cbi8vICAgICAgICAgIC0gV2hlbiB0cmFuc2FjdGlvbiBsb2cgaXMgaXRlcmF0ZWQgb24sIGlmIHRoZSBieXRlcyBhdCB0aGUgZW5kICh1c2luZyB0aGUgbGVuZ3RoIHByZWZpeCkgZG9uJ3QgbWF0Y2ggdGhlIGVuZCBieXRlcyBPUiB0aGUgc3RhcnQgYnl0ZXMgYXJlIHdyb25nLCB3ZSBza2lwIHRoZSBzdGFydCBieXRlcywgYW5kIGl0ZXJhdGluZyB1bnRpbCB3ZSBmaW5kIG5ldyBzdGFydCBieXRlcyB0aGF0IG1hdGNoIG91ciBzcGVjaWFsIGJ5dGVzLiBUaGVuIHdlIHRyeSB0byByZWFkIHRoZXNlIHZhbHVlcy5cbi8vICAgICAgICAgIC0gRWFjaCB0cmFuc2FjdGlvbiBlbnRyeSBoYXMgYSBieXRlIGZvciBmbGFncywgb25lIGJpdCB3aGljaCBkZW5vdGVzIGlmIHRoZSB2YWx1ZSBpcyB6aXBwZWQgb3Igbm90LlxuLy8gICAgICAtIENvbXByZXNzZXMgdGhlIGxvZyBhZnRlciB0aGVyZSBhcmUgM1ggZW50cmllcyB0aGFuIGtleXMgKGFuZCA+IDEwMClcbi8vICAgICAgICAgIC0gQm90aCBkZWR1cGUga2V5cywgYW5kIHppcFxuLy8gICAgICAtIEFzc3VtZXMgYWxsIGZpbGVzIGluIHJhd1N0b3JhZ2UgZW5kaW5nIHdpdGggLnR4IGFyZSB0cmFuc2FjdGlvbiBsb2dzXG4vLyAgICAgIC0gTmFtZXMgZmlsZXMgbGlrZSBgJHtnZW5lcmF0aW9ufS50eGBcbi8vICAgICAgICAgIC0gV2hlbiBjb21wcmVzc2luZywgd2UgaW5jcmVtZW50IHRoZSBnZW5lcmF0aW9uLCBhbmQgd3JpdGUgdG8gYSBuZXcgZmlsZSwgYW5kIGRlbGV0ZSBhbnkgZ2VuZXJhdGlvbnMgdGhhdCBhcmUgb2xkZXIgdGhhbiB0aGUgbmV3IG9uZVxuLy8gICAgICAgICAgLSBPbiByZWFkaW5nLCB3ZSByZWFkIGZyb20gYWxsIGdlbmVyYXRpb24gZmlsZXMgdGhhdCBleGlzdCwgaW4gY2FzZSBzb21lIGFyZSBjb3JydXB0ZWRcbi8vICAgICAgLSBPbiBsb2FkLCBsb2FkcyBpbiBhbGwgdHJhbnNhY3Rpb24gbG9ncywgYW5kIHN0b3JlcyBhbGwgdmFsdWVzIGluIGEgTWFwPHN0cmluZywgQnVmZmVyPlxuLy8gICAgICAtIE9uIHdyaXRlcyBpbW1lZGlhdGVseSB1cGRhdGVzIHRoZSBpbiBtZW1vcnkgTWFwLCBhbmQgdGhlbiB3cml0ZXMgdG8gdGhlIHRyYW5zYWN0aW9uIGxvZ1xuLy8gICAgICAtIENhY2hlcyB0aGUgbGFzdCB0cmFuc2FjdGlvbiBmaWxlIG5hbWUgaW4gbWVtb3J5XG4vLyAgICAgIC0gTWFrZXMgc3VyZSBhbGwgZmlsZSBzeXN0ZW0gd3JpdGVzIChidXQgbm90IE1hcCB1cGRhdGVzKSBhcmUgZG9uZSB3aXRoIGZpbGVMb2NrU2VjdGlvbiwgc28gdGhleSBuZXZlciBvdmVybGFwLlxuLy8gICAgICAtIEJ1ZmZlcnMgcGVuZGluZyBhcHBlbmRzIGluIG1lbW9yeSwgc28gdGhleSBjYW4gd3JpdHRlbiBhbGwgYXQgb25jZSAoYWZ0ZXIgdGhlIGZpcnN0IG9uZSBpcyBibG9ja2luZyBpbiBmaWxlTG9ja1NlY3Rpb24pLlxuXG5VUERBVEUgbm93IHdlIHVzZSBjaHVua3MsIGJlY2F1c2UgYXBwZW5kIGlzIHRvbyBzbG93LlxuXG5JTVBPUlRBTlQhIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB3cml0ZXJzLCB3ZSBjbG9iYmVyIHdyaXRlcyBmcm9tIG90aGVyIHdyaXRlcnMgd2hlbiB3ZSBjb21wcmVzc1xuKi9cblxuY29uc3QgRElTS19DSEVDS19JTlRFUlZBTCA9IHRpbWVJbk1pbnV0ZSAqIDU7XG5cbmNvbnN0IEZJTEVfQ0hVTktfU0laRSA9IDEwMjQgKiAxMDI0O1xuY29uc3QgRklMRV9NQVhfTElGRVRJTUUgPSB0aW1lSW5NaW51dGUgKiAzMDtcblxuY29uc3QgRklMRV9aSVBfVEhSRVNIT0xEID0gMTYgKiAxMDI0ICogMTAyNDtcblxuY29uc3QgU1RBUlRfQllURVMgPSBCdWZmZXIuZnJvbShbMjM2LCA0OSwgMTEyLCAxMjEsIDI3LCAxMjcsIDIyNywgNjNdKTtcbmNvbnN0IEVORF9CWVRFUyA9IEJ1ZmZlci5mcm9tKFsyMjAsIDExMSwgMjQzLCAyMDIsIDIwMCwgNzksIDIxMywgNjNdKTtcbi8vIERlbGF5IHdyaXRlcywgc28gd2UgYmF0Y2ggYmV0dGVyLCBhbmQgdGhyYXNoIHRoZSBkaXNrIGxlc3NcbmNvbnN0IFdSSVRFX0RFTEFZID0gNTAwO1xuXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25FbnRyeSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgICAvLyBOT1RFOiBXZSBkaXNhYmxlZCBwZXItZW50cnkgemlwcGluZy4gRWl0aGVyIHVzZSBhIHJhdyBjb2xsZWN0aW9uIHNvIHlvdSBkb24ndCBoYXZlIHRvIGxvYWQgYWxsIG9mIHRoZW0gaW50byBtZW1vcnkgb3Igc2hhcmQgeW91ciBjb2xsZWN0aW9uLiBaaXBwaW5nIGlzIG9ubHkgYSBiYW5kLWFpZCBzb2x1dGlvbiBmb3IgbWVtb3J5IGlzc3Vlcy4gQUxTTywgaXQgbWFrZXMgbG9hZGluZyBzbG93ZXIsIHdoaWNoIG1ha2VzIGFsbCBvdGhlciBhcHBsaWNhdGlvbnMgdGhhdCBkb24ndCBuZWVkIHppcHBpbmcgd29yc2UuXG4gICAgaXNaaXBwZWQ6IGJvb2xlYW47XG4gICAgdGltZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25IZWFkZXIge1xuICAgIHppcHBlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgZmlsZUxvY2tTZWN0aW9uID0gcnVuSW5TZXJpYWwoYXN5bmMgKGZuYzogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgIGF3YWl0IGZuYygpO1xufSk7XG5cbmNvbnN0IENIVU5LX0VYVCA9IFwiLmNodW5rXCI7XG5jb25zdCBvdXJJZCA9IERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpO1xubGV0IHNlcU51bSA9IDA7XG5cbmZ1bmN0aW9uIGdldE5leHRDaHVua1BhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7RGF0ZS5ub3coKX1fJHtzZXFOdW0rK31fJHtvdXJJZH0uY2h1bmtgO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25TdG9yYWdlIGltcGxlbWVudHMgSVN0b3JhZ2U8QnVmZmVyPiB7XG4gICAgcHVibGljIGNhY2hlOiBNYXA8c3RyaW5nLCBUcmFuc2FjdGlvbkVudHJ5PiA9IG5ldyBNYXAoKTtcbiAgICAvLyBNYXBzIGZpbGUgbmFtZSB0byBvdXIgbGFzdCBrbm93biB3cml0ZSB0aW1lc3RhbXBcbiAgICBwcml2YXRlIGRpc2tGaWxlczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIGN1cnJlbnRDaHVuazoge1xuICAgICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICAgIHNpemU6IG51bWJlcjtcbiAgICAgICAgdGltZUNyZWF0ZWQ6IG51bWJlcjtcbiAgICB9IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgZW50cnlDb3VudCA9IDA7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhbGxTdG9yYWdlOiBUcmFuc2FjdGlvblN0b3JhZ2VbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmF3U3RvcmFnZTogSVN0b3JhZ2VSYXcsXG4gICAgICAgIHByaXZhdGUgZGVidWdOYW1lOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgd3JpdGVEZWxheSA9IFdSSVRFX0RFTEFZLFxuICAgICAgICAvLyBXaGVuIHNldCwgd2UgcG9sbCB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGFuZCByZWxvYWQgaWYgYW5vdGhlciBwcm9jZXNzL3RhYiB3cml0ZXMgbmV3IGNodW5rIGZpbGVzLiBPZmYgYnkgZGVmYXVsdCwgYXMgaXQgY29zdHMgYSBwZXJpb2RpYyBkaXNrIHNjYW4gYW5kIG1vc3QgY29sbGVjdGlvbnMgYXJlIG9ubHkgd3JpdHRlbiBieSBhIHNpbmdsZSBwcm9jZXNzLlxuICAgICAgICBwcml2YXRlIHJlc3luY0Zyb21EaXNrID0gZmFsc2VcbiAgICApIHtcbiAgICAgICAgVHJhbnNhY3Rpb25TdG9yYWdlLmFsbFN0b3JhZ2UucHVzaCh0aGlzKTtcbiAgICAgICAgLy8gVkVSWSB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbiAgICAgICAgKGdsb2JhbFRoaXMgYXMgYW55KVtgdHgke3RoaXMuZGVidWdOYW1lfWBdID0gdGhpcztcbiAgICB9XG4gICAgLy8gSGVscHMgZ2V0IHJpZCBvZiBwYXJzZSBlcnJvcnMgd2hpY2ggY29uc3RhbnRseSBsb2cuIEFsc28sIHVzZXMgbGVzcyBzcGFjZVxuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgY29tcHJlc3NBbGwoKSB7XG4gICAgICAgIGF3YWl0IGZpbGVMb2NrU2VjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBzdG9yYWdlIG9mIFRyYW5zYWN0aW9uU3RvcmFnZS5hbGxTdG9yYWdlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc3RvcmFnZS5jb21wcmVzc1RyYW5zYWN0aW9uTG9nKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc3luY0NhbGxiYWNrczogKCgpID0+IHZvaWQpW10gPSBbXTtcbiAgICBwdWJsaWMgd2F0Y2hSZXN5bmMoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXN5bmNDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0OiBQcm9taXNlPHVua25vd24+IHwgdW5kZWZpbmVkID0gdGhpcy5sb2FkQWxsVHJhbnNhY3Rpb25zKHRydWUpO1xuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50Q2h1bmsoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENodW5rICYmIHRoaXMuY3VycmVudENodW5rLnRpbWVDcmVhdGVkIDwgRGF0ZS5ub3coKSAtIEZJTEVfTUFYX0xJRkVUSU1FKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaHVuayA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudENodW5rKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaHVuayA9IHtcbiAgICAgICAgICAgICAgICBwYXRoOiBnZXROZXh0Q2h1bmtQYXRoKCksXG4gICAgICAgICAgICAgICAgc2l6ZTogMCxcbiAgICAgICAgICAgICAgICB0aW1lQ3JlYXRlZDogRGF0ZS5ub3coKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFRpbWVzdGFtcCB3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgYWN0dWFsIHdyaXRlXG4gICAgICAgICAgICB0aGlzLmRpc2tGaWxlcy5zZXQodGhpcy5jdXJyZW50Q2h1bmsucGF0aCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENodW5rLnBhdGg7XG4gICAgfVxuICAgIHByaXZhdGUgdXBkYXRlRGlza0ZpbGVUaW1lc3RhbXAoZmlsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlza0ZpbGVzLnNldChmaWxlLCBEYXRlLm5vdygpKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBvbkFkZFRvQ2h1bmsoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50Q2h1bmspIHJldHVybjtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2h1bmsuc2l6ZSArPSBzaXplO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2h1bmsuc2l6ZSA+PSBGSUxFX0NIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENodW5rID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNaaXBwZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNhY3Rpb25zIHNob3VsZCBiZSB1bnppcHBlZCBvbiBmaWxlIHJlYWR5LCBzbyB0aGlzIHN0YXRlIHNob3VsZCBiZSBpbXBvc3NpYmxlLiBLZXk6ICR7a2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pbml0KSBhd2FpdCB0aGlzLmluaXQ7XG5cbiAgICAgICAgLy8gVGltZSBpcyBzZXQgb24gZGlzayB3cml0ZSwgYXMgRGF0ZS5ub3coKSBpcyB0b28gc2xvd1xuICAgICAgICBsZXQgZW50cnk6IFRyYW5zYWN0aW9uRW50cnkgPSB7IGtleSwgdmFsdWUsIGlzWmlwcGVkOiBmYWxzZSwgdGltZTogMCB9O1xuICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIGVudHJ5KTtcblxuICAgICAgICBhd2FpdCB0aGlzLnB1c2hBcHBlbmQoZW50cnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdCkgYXdhaXQgdGhpcy5pbml0O1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMucHVzaEFwcGVuZCh7IGtleSwgdmFsdWU6IHVuZGVmaW5lZCwgaXNaaXBwZWQ6IGZhbHNlLCB0aW1lOiAwIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGtleTogc3RyaW5nKTogUHJvbWlzZTx7IHNpemU6IG51bWJlcjsgbGFzdE1vZGlmaWVkOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCF2YWx1ZT8udmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7IHNpemU6IHZhbHVlLnZhbHVlLmxlbmd0aCwgbGFzdE1vZGlmaWVkOiB2YWx1ZS50aW1lIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwZW5kaW5nQXBwZW5kczogVHJhbnNhY3Rpb25FbnRyeVtdID0gW107XG4gICAgcHJpdmF0ZSBleHRyYUFwcGVuZHMgPSAwO1xuICAgIHByaXZhdGUgcGVuZGluZ1dyaXRlOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuICAgIGFzeW5jIHB1c2hBcHBlbmQoZW50cnk6IFRyYW5zYWN0aW9uRW50cnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5lbnRyeUNvdW50Kys7XG4gICAgICAgIHRoaXMucGVuZGluZ0FwcGVuZHMucHVzaChlbnRyeSk7XG4gICAgICAgIHZvaWQgdGhpcy51cGRhdGVQZW5kaW5nQXBwZW5kcygpO1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nV3JpdGUpIHJldHVybiB0aGlzLnBlbmRpbmdXcml0ZTtcbiAgICAgICAgdGhpcy5wZW5kaW5nV3JpdGUgPSBmaWxlTG9ja1NlY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRGVsYXkgdG8gYWxsb3cgYmF0Y2hpbmcsIGFuZCBkZWR1cGluZ1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRoaXMud3JpdGVEZWxheSkpO1xuICAgICAgICAgICAgbGV0IGN1ckFwcGVuZHMgPSB0aGlzLnBlbmRpbmdBcHBlbmRzO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQXBwZW5kcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nV3JpdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGFwcGVuZHNEZWR1cGVkOiBNYXA8c3RyaW5nLCBUcmFuc2FjdGlvbkVudHJ5PiA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN1ckFwcGVuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kc0RlZHVwZWQuc2V0KGVudHJ5LmtleSwgZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJBcHBlbmRzID0gQXJyYXkuZnJvbShhcHBlbmRzRGVkdXBlZC52YWx1ZXMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4dHJhQXBwZW5kcyArPSBjdXJBcHBlbmRzLmxlbmd0aDtcbiAgICAgICAgICAgIHZvaWQgdGhpcy51cGRhdGVQZW5kaW5nQXBwZW5kcygpO1xuICAgICAgICAgICAgaWYgKGN1ckFwcGVuZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGN1ckFwcGVuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cnkudGltZSA9IHRpbWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IG5ld1N1bSA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZlcnM6IEJ1ZmZlcltdID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdXJBcHBlbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmZXIgPSB0aGlzLnNlcmlhbGl6ZVRyYW5zYWN0aW9uRW50cnkoZW50cnkpO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3VtICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IG5ld0NodW5rcyA9IHRoaXMuY2h1bmtCdWZmZXJzKGJ1ZmZlcnMpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNodW5rIG9mIG5ld0NodW5rcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IHRoaXMuZ2V0Q3VycmVudENodW5rKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXdhaXQgdGhpcy5yYXdTdG9yYWdlLmdldChmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHsgaGVhZGVyLCBoZWFkZXJCdWZmZXIgfSA9IHRoaXMuZ2V0SGVhZGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmF3U3RvcmFnZS5zZXQoZmlsZSwgaGVhZGVyQnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGNodW5rLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yYXdTdG9yYWdlLmFwcGVuZChmaWxlLCBjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNrRmlsZVRpbWVzdGFtcChmaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFkZFRvQ2h1bmsoY29udGVudC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tcHJlc3NUcmFuc2FjdGlvbkxvZygpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4dHJhQXBwZW5kcyAtPSBjdXJBcHBlbmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMudXBkYXRlUGVuZGluZ0FwcGVuZHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucGVuZGluZ1dyaXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUGVuZGluZ0FwcGVuZHMgPSB0aHJvdHRsZUZ1bmN0aW9uKDEwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgYXBwZW5kQ291bnQgPSB0aGlzLnBlbmRpbmdBcHBlbmRzLmxlbmd0aCArIHRoaXMuZXh0cmFBcHBlbmRzO1xuICAgICAgICBsZXQgZ3JvdXAgPSBgVHJhbnNhY3Rpb24gKCR7dGhpcy5kZWJ1Z05hbWV9KWA7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBVcGRhdGUgcGVuZGluZyBhcHBlbmRzICR7Z3JvdXB9OiAke2FwcGVuZENvdW50fWApO1xuICAgICAgICBpZiAoIWFwcGVuZENvdW50KSB7XG4gICAgICAgICAgICBzZXRQZW5kaW5nKGdyb3VwLCBcIlwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRQZW5kaW5nKGdyb3VwLCBgUGVuZGluZyBhcHBlbmRzOiAke2FwcGVuZENvdW50fWApO1xuICAgIH0pO1xuXG4gICAgcHVibGljIGFzeW5jIGdldEtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBpZiAodGhpcy5pbml0KSBhd2FpdCB0aGlzLmluaXQ7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2FjaGUua2V5cygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tEaXNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pbml0KSBhd2FpdCB0aGlzLmluaXQ7XG4gICAgICAgIGNvbnN0IGFueUNoYW5nZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQga2V5cyA9IGF3YWl0IHRoaXMucmF3U3RvcmFnZS5nZXRLZXlzKCk7XG4gICAgICAgICAgICBsZXQgZGlza0ZpbGVzID0ga2V5cy5maWx0ZXIoa2V5ID0+IGtleS5lbmRzV2l0aChDSFVOS19FWFQpKTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGFueSBrbm93biBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQgZXh0ZXJuYWxseSAoZGlzayB0aW1lc3RhbXAgbmV3ZXIgdGhhbiBvdXJzKVxuICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBkaXNrRmlsZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgb3VyVGltZXN0YW1wID0gdGhpcy5kaXNrRmlsZXMuZ2V0KGZpbGUpO1xuICAgICAgICAgICAgICAgIGlmIChvdXJUaW1lc3RhbXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGluZm8gPSBhd2FpdCB0aGlzLnJhd1N0b3JhZ2UuZ2V0SW5mbyhmaWxlKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5mbyAmJiBpbmZvLmxhc3RNb2RpZmllZCA+IG91clRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIGlmICghYXdhaXQgYW55Q2hhbmdlcygpKSByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgZmlsZUxvY2tTZWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICghYXdhaXQgYW55Q2hhbmdlcygpKSByZXR1cm47XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgbmV3IGNoYW5nZXMgaW4gY29sbGVjdGlvbiBmcm9tIG90aGVyIHRhYi4gTG9hZGluZyB0aGVtIG5vdy4gJHt0aGlzLmRlYnVnTmFtZX1gKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEFsbFRyYW5zYWN0aW9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIC8vIE5PVEU6IFRoaXMgaXMgZWl0aGVyIGNhbGxlZCBpbiBpbml0ICh3aGljaCBibG9ja3MgYWxsIG90aGVyIGNhbGxzKSwgb3IgaW5zaWRlIG9mIHRoZSBnbG9iYWwgZmlsZSBsb2NrLCBzbyBpdCBpcyBzYWZlIHRvIGxvYWQuXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkQWxsVHJhbnNhY3Rpb25zKGluaXRpYWxMb2FkPzogYm9vbGVhbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgaWYgKGlzSW5CdWlsZCgpKSByZXR1cm4gW107XG5cbiAgICAgICAgaWYgKGluaXRpYWxMb2FkICYmIHRoaXMucmVzeW5jRnJvbURpc2spIHtcbiAgICAgICAgICAgIHJ1bkluZmluaXRlUG9sbChESVNLX0NIRUNLX0lOVEVSVkFMLCAoKSA9PiB0aGlzLmNoZWNrRGlzaygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IHRoaXMucmF3U3RvcmFnZS5nZXRLZXlzKCk7XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uRmlsZXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ga2V5LmVuZHNXaXRoKENIVU5LX0VYVCkpO1xuICAgICAgICAvLyBQb3B1bGF0ZSBkaXNrRmlsZXMgd2l0aCBhY3R1YWwgdGltZXN0YW1wcyBmcm9tIGRpc2tcbiAgICAgICAgdGhpcy5kaXNrRmlsZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAobGV0IGZpbGUgb2YgdHJhbnNhY3Rpb25GaWxlcykge1xuICAgICAgICAgICAgbGV0IGluZm8gPSBhd2FpdCB0aGlzLnJhd1N0b3JhZ2UuZ2V0SW5mbyhmaWxlKTtcbiAgICAgICAgICAgIHRoaXMuZGlza0ZpbGVzLnNldChmaWxlLCBpbmZvPy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2l6ZSA9IHsgdmFsdWU6IDAgfTtcbiAgICAgICAgbGV0IGVudHJ5TGlzdDogVHJhbnNhY3Rpb25FbnRyeVtdW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZmlsZSBvZiB0cmFuc2FjdGlvbkZpbGVzKSB7XG4gICAgICAgICAgICBlbnRyeUxpc3QucHVzaChhd2FpdCB0aGlzLnBhcnNlVHJhbnNhY3Rpb25GaWxlKGZpbGUsIHNpemUpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZW50cmllcyA9IGVudHJ5TGlzdC5mbGF0KCk7XG4gICAgICAgIHRoaXMuYXBwbHlUcmFuc2FjdGlvbkVudHJpZXMoZW50cmllcywgaW5pdGlhbExvYWQpO1xuXG4gICAgICAgIHRpbWUgPSBEYXRlLm5vdygpIC0gdGltZTtcbiAgICAgICAgaWYgKHRpbWUgPiA1MCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYExvYWRlZCAke3RoaXMuZGVidWdOYW1lfSBpbiAke2Zvcm1hdFRpbWUodGltZSl9LCAke2Zvcm1hdE51bWJlcih0aGlzLmNhY2hlLnNpemUpfSBrZXlzLCBmcm9tICR7Zm9ybWF0TnVtYmVyKHRyYW5zYWN0aW9uRmlsZXMubGVuZ3RoKX0gZmlsZXMsIGVudHJpZXMgJHtmb3JtYXROdW1iZXIoZW50cmllcy5sZW5ndGgpfSwgdG90YWwgc2l6ZSAke2Zvcm1hdE51bWJlcihzaXplLnZhbHVlKX1CYCwgdHJhbnNhY3Rpb25GaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluaXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0cmFuc2FjdGlvbkZpbGVzO1xuICAgIH1cblxuICAgIC8vIE9OTFkgY2FsbCB0aGlzIGluc2lkZSBvZiBsb2FkQWxsVHJhbnNhY3Rpb25zXG4gICAgcHJpdmF0ZSBhc3luYyBwYXJzZVRyYW5zYWN0aW9uRmlsZShmaWxlbmFtZTogc3RyaW5nLCBzaXplOiB7IHZhbHVlOiBudW1iZXIgfSk6IFByb21pc2U8VHJhbnNhY3Rpb25FbnRyeVtdPiB7XG4gICAgICAgIGNvbnN0IGZ1bGxGaWxlID0gYXdhaXQgdGhpcy5yYXdTdG9yYWdlLmdldChmaWxlbmFtZSk7XG4gICAgICAgIGlmICghZnVsbEZpbGUpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKGZ1bGxGaWxlLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoYFRyYW5zYWN0aW9uIGluICR7dGhpcy5kZWJ1Z05hbWV9IGZpbGUgJHtmaWxlbmFtZX0gaXMgdG9vIHNtYWxsLCBza2lwcGluZ2ApO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHNpemUudmFsdWUgKz0gZnVsbEZpbGUubGVuZ3RoO1xuICAgICAgICBsZXQgaGVhZGVyU2l6ZSA9IGZ1bGxGaWxlLnJlYWRVSW50MzJMRSgwKTtcbiAgICAgICAgbGV0IGhlYWRlckJ1ZmZlciA9IGZ1bGxGaWxlLnNsaWNlKDQsIDQgKyBoZWFkZXJTaXplKTtcbiAgICAgICAgbGV0IGhlYWRlcjogVHJhbnNhY3Rpb25IZWFkZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBoZWFkZXIgPSBKU09OLnBhcnNlKGhlYWRlckJ1ZmZlci50b1N0cmluZygpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIGhlYWRlciBvZiB0cmFuc2FjdGlvbiBmaWxlIGluICR7dGhpcy5kZWJ1Z05hbWV9LCAke2ZpbGVuYW1lfWApO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb250ZW50ID0gZnVsbEZpbGUuc2xpY2UoNCArIGhlYWRlclNpemUpO1xuICAgICAgICBpZiAoaGVhZGVyLnppcHBlZCkge1xuICAgICAgICAgICAgY29udGVudCA9IGF3YWl0IFppcC5ndW56aXAoY29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgbGV0IGVudHJpZXM6IFRyYW5zYWN0aW9uRW50cnlbXSA9IFtdO1xuICAgICAgICB3aGlsZSAob2Zmc2V0IDwgY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghY29udGVudC5zbGljZShvZmZzZXQsIG9mZnNldCArIFNUQVJUX0JZVEVTLmxlbmd0aCkuZXF1YWxzKFNUQVJUX0JZVEVTKSkge1xuICAgICAgICAgICAgICAgIGxldCBzID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBjb250ZW50Lmxlbmd0aCAmJiAhY29udGVudC5zbGljZShvZmZzZXQsIG9mZnNldCArIFNUQVJUX0JZVEVTLmxlbmd0aCkuZXF1YWxzKFNUQVJUX0JZVEVTKSkge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGxlbiA9IG9mZnNldCAtIHM7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBGb3VuZCBiYWQgYnl0ZXMgaW4gJHtmaWxlbmFtZX0sIHNraXBwaW5nICR7bGVufSBieXRlcyBhdCBvZmZzZXQgJHtzfS4gVG90YWwgZmlsZSBieXRlcyAke2NvbnRlbnQubGVuZ3RofSwgcmVhZCAke2VudHJpZXMubGVuZ3RofSBlbnRyaWVzYCk7XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBjb250ZW50Lmxlbmd0aCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZW50cnlPYmo6IHsgZW50cnk6IFRyYW5zYWN0aW9uRW50cnksIG9mZnNldDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGVudHJ5T2JqID0gdGhpcy5yZWFkVHJhbnNhY3Rpb25FbnRyeShjb250ZW50LCBvZmZzZXQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcyhcIlJlYWQgcGFzdCBlbmQgb2YgYnVmZmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAxO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZW50cnlPYmopIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byByZWFkIHRyYW5zYWN0aW9uIGVudHJ5IGluIGluICR7dGhpcy5kZWJ1Z05hbWV9LCBmaWxlICR7ZmlsZW5hbWV9IGF0IG9mZnNldCAke29mZnNldH0sIHNraXBwaW5nIGJhZCBieXRlcywgcmVhZGluZyByZW1haW5kZXIgb2YgZmlsZWApO1xuICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVudHJ5Q291bnQrKztcbiAgICAgICAgICAgIGxldCB7IGVudHJ5IH0gPSBlbnRyeU9iajtcbiAgICAgICAgICAgIG9mZnNldCA9IGVudHJ5T2JqLm9mZnNldDtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfVxuICAgIHByaXZhdGUgYXBwbHlUcmFuc2FjdGlvbkVudHJpZXMoZW50cmllczogVHJhbnNhY3Rpb25FbnRyeVtdLCBpbml0aWFsTG9hZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgbGV0IHBlbmRpbmdXcml0ZVRpbWVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLnBlbmRpbmdBcHBlbmRzKSB7XG4gICAgICAgICAgICBsZXQgcHJldlRpbWUgPSBwZW5kaW5nV3JpdGVUaW1lcy5nZXQoZW50cnkua2V5KTtcbiAgICAgICAgICAgIGlmIChwcmV2VGltZSAmJiBwcmV2VGltZSA+IGVudHJ5LnRpbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBlbmRpbmdXcml0ZVRpbWVzLnNldChlbnRyeS5rZXksIGVudHJ5LnRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYXRlc3QgPSBuZXcgTWFwPHN0cmluZywgVHJhbnNhY3Rpb25FbnRyeT4oKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBsZXQgcGVuZGluZ1RpbWUgPSBwZW5kaW5nV3JpdGVUaW1lcy5nZXQoZW50cnkua2V5KTtcbiAgICAgICAgICAgIGlmIChwZW5kaW5nVGltZSAmJiBwZW5kaW5nVGltZSA+IGVudHJ5LnRpbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwcmV2ID0gbGF0ZXN0LmdldChlbnRyeS5rZXkpO1xuICAgICAgICAgICAgaWYgKHByZXYgJiYgcHJldi50aW1lID4gZW50cnkudGltZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGF0ZXN0LnNldChlbnRyeS5rZXksIGVudHJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhbnlDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGxhdGVzdC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKGVudHJ5LmtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGFueUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGVudHJ5LmtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghYW55Q2hhbmdlZCAmJiAhaW5pdGlhbExvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gdGhpcy5jYWNoZS5nZXQoZW50cnkua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcHJldi52YWx1ZSAhPT0gISFlbnRyeS52YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldi52YWx1ZSAmJiBlbnRyeS52YWx1ZSAmJiAhcHJldi52YWx1ZS5lcXVhbHMoZW50cnkudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGFueUNoYW5nZWQgPSBoYXNDaGFuZ2VkKCkgfHwgYW55Q2hhbmdlZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLnNldChlbnRyeS5rZXksIGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbnlDaGFuZ2VkICYmICFpbml0aWFsTG9hZCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBUcmFuc2FjdGlvbiBzdG9yYWdlICR7dGhpcy5kZWJ1Z05hbWV9IGNoYW5nZWQgb24gZGlzaywgdHJpZ2dlcmluZyBmdWxsIGRvd25sb2FkIGZyb20gZGlza2ApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLnJlc3luY0NhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkVHJhbnNhY3Rpb25FbnRyeShidWZmZXI6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiB7XG4gICAgICAgIGVudHJ5OiBUcmFuc2FjdGlvbkVudHJ5O1xuICAgICAgICBvZmZzZXQ6IG51bWJlcjtcbiAgICB9IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgZnVuY3Rpb24gcmVhZFNsaWNlKGNvdW50OiBudW1iZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsaWNlID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgY291bnQpO1xuICAgICAgICAgICAgaWYgKHNsaWNlLmxlbmd0aCA8IGNvdW50KSB0aHJvdyBuZXcgRXJyb3IoYFJlYWQgcGFzdCBlbmQgb2YgYnVmZmVyIGF0IG9mZnNldCAke29mZnNldH0vJHtidWZmZXIubGVuZ3RofWApO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNvdW50O1xuICAgICAgICAgICAgcmV0dXJuIHNsaWNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVhZFNsaWNlKFNUQVJUX0JZVEVTLmxlbmd0aCkuZXF1YWxzKFNUQVJUX0JZVEVTKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBrZXlMZW5ndGggPSByZWFkU2xpY2UoNCkucmVhZFVJbnQzMkxFKDApO1xuICAgICAgICBjb25zdCB2YWx1ZUxlbmd0aCA9IHJlYWRTbGljZSg0KS5yZWFkVUludDMyTEUoMCk7XG4gICAgICAgIGNvbnN0IHRpbWUgPSByZWFkU2xpY2UoOCkucmVhZERvdWJsZUxFKDApO1xuICAgICAgICBjb25zdCBmbGFncyA9IHJlYWRTbGljZSgxKS5yZWFkVUludDgoMCk7XG5cbiAgICAgICAgY29uc3Qga2V5ID0gcmVhZFNsaWNlKGtleUxlbmd0aCkudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHZhbHVlID0gcmVhZFNsaWNlKHZhbHVlTGVuZ3RoKTtcblxuICAgICAgICBpZiAoIXJlYWRTbGljZShFTkRfQllURVMubGVuZ3RoKS5lcXVhbHMoRU5EX0JZVEVTKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgaXNaaXBwZWQgPSAoZmxhZ3MgJiAxKSA9PT0gMTtcbiAgICAgICAgbGV0IGlzRGVsZXRlID0gKGZsYWdzICYgMikgPT09IDI7XG5cbiAgICAgICAgaWYgKGlzWmlwcGVkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFppcC5ndW56aXBTeW5jKHZhbHVlKTtcbiAgICAgICAgICAgIGlzWmlwcGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZW50cnk6IFRyYW5zYWN0aW9uRW50cnkgPSB7IGtleSwgdmFsdWUsIGlzWmlwcGVkLCB0aW1lIH07XG4gICAgICAgIGlmIChpc0RlbGV0ZSkge1xuICAgICAgICAgICAgZW50cnkudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZW50cnksIG9mZnNldCB9O1xuICAgIH1cblxuICAgIC8vIFRPRE86IE1ha2UgdGhpcyBkaXJlY3RseSBnbyBmcm9tIFRyYW5zYWN0aW9uRW50cnlbXSB0byBCdWZmZXIsIGJ5IHByZS1hbGxvY2F0aW5nLCBzbyBpdCBpcyBtb3JlIGVmZmljaWVudFxuICAgIHByaXZhdGUgc2VyaWFsaXplVHJhbnNhY3Rpb25FbnRyeShlbnRyeTogVHJhbnNhY3Rpb25FbnRyeSk6IEJ1ZmZlciB7XG4gICAgICAgIGxldCBrZXlCdWZmZXIgPSBCdWZmZXIuZnJvbShlbnRyeS5rZXkpO1xuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoXG4gICAgICAgICAgICBTVEFSVF9CWVRFUy5sZW5ndGggKyA0ICsgNCArIDggKyAxICsga2V5QnVmZmVyLmxlbmd0aCArIChlbnRyeS52YWx1ZT8ubGVuZ3RoIHx8IDApICsgRU5EX0JZVEVTLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgICAgICBTVEFSVF9CWVRFUy5jb3B5KGJ1ZmZlciwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IFNUQVJUX0JZVEVTLmxlbmd0aDtcblxuICAgICAgICBidWZmZXIud3JpdGVVSW50MzJMRShrZXlCdWZmZXIubGVuZ3RoLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gNDtcblxuICAgICAgICBidWZmZXIud3JpdGVVSW50MzJMRShlbnRyeS52YWx1ZSA/IGVudHJ5LnZhbHVlLmxlbmd0aCA6IDAsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSA0O1xuXG4gICAgICAgIGJ1ZmZlci53cml0ZURvdWJsZUxFKGVudHJ5LnRpbWUsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSA4O1xuXG4gICAgICAgIGxldCBmbGFncyA9IDA7XG4gICAgICAgIGlmIChlbnRyeS5pc1ppcHBlZCkgZmxhZ3MgfD0gMTtcbiAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSB1bmRlZmluZWQpIGZsYWdzIHw9IDI7XG4gICAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KGZsYWdzLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gMTtcblxuICAgICAgICBrZXlCdWZmZXIuY29weShidWZmZXIsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSBrZXlCdWZmZXIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChlbnRyeS52YWx1ZSkge1xuICAgICAgICAgICAgZW50cnkudmFsdWUuY29weShidWZmZXIsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gZW50cnkudmFsdWUubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgRU5EX0JZVEVTLmNvcHkoYnVmZmVyLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gRU5EX0JZVEVTLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SGVhZGVyKHppcDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBoZWFkZXI6IFRyYW5zYWN0aW9uSGVhZGVyID0geyB6aXBwZWQ6IHppcCB9O1xuICAgICAgICBsZXQgaGVhZGVyQnVmZmVyID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoaGVhZGVyKSk7XG4gICAgICAgIGxldCBoZWFkZXJTaXplID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgICAgICBoZWFkZXJTaXplLndyaXRlVUludDMyTEUoaGVhZGVyQnVmZmVyLmxlbmd0aCwgMCk7XG4gICAgICAgIHJldHVybiB7IGhlYWRlciwgaGVhZGVyQnVmZmVyOiBCdWZmZXIuY29uY2F0KFtoZWFkZXJTaXplLCBoZWFkZXJCdWZmZXJdKSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2h1bmtCdWZmZXJzKGJ1ZmZlcnM6IEJ1ZmZlcltdKSB7XG4gICAgICAgIGxldCBuZXdDaHVua3M6IHtcbiAgICAgICAgICAgIGJ1ZmZlcnM6IEJ1ZmZlcltdO1xuICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuICAgICAgICB9W10gPSBbXTtcbiAgICAgICAgbmV3Q2h1bmtzLnB1c2goeyBidWZmZXJzOiBbXSwgc2l6ZTogMCB9KTtcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgaWYgKG5ld0NodW5rc1tuZXdDaHVua3MubGVuZ3RoIC0gMV0uc2l6ZSArIGJ1ZmZlci5sZW5ndGggPj0gRklMRV9DSFVOS19TSVpFKSB7XG4gICAgICAgICAgICAgICAgbmV3Q2h1bmtzLnB1c2goeyBidWZmZXJzOiBbXSwgc2l6ZTogMCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0NodW5rc1tuZXdDaHVua3MubGVuZ3RoIC0gMV0uYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICBuZXdDaHVua3NbbmV3Q2h1bmtzLmxlbmd0aCAtIDFdLnNpemUgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3Q2h1bmtzLm1hcCh4ID0+ICh7IGJ1ZmZlcjogQnVmZmVyLmNvbmNhdCh4LmJ1ZmZlcnMpLCBzaXplOiB4LnNpemUgfSkpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBjb21wcmVzc2luZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgYXN5bmMgY29tcHJlc3NUcmFuc2FjdGlvbkxvZyhmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcHJlc3NpbmcpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY29tcHJlc3NpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBsZXQgZXhpc3RpbmdEaXNrRW50cmllcyA9IGF3YWl0IHRoaXMucmF3U3RvcmFnZS5nZXRLZXlzKCk7XG4gICAgICAgICAgICBleGlzdGluZ0Rpc2tFbnRyaWVzID0gZXhpc3RpbmdEaXNrRW50cmllcy5maWx0ZXIoeCA9PiB4LmVuZHNXaXRoKENIVU5LX0VYVCkpO1xuICAgICAgICAgICAgbGV0IGNvbXByZXNzTm93ID0gZm9yY2UgfHwgKFxuICAgICAgICAgICAgICAgIHRoaXMuZW50cnlDb3VudCA+IDEwMCAmJiB0aGlzLmVudHJ5Q291bnQgPiB0aGlzLmNhY2hlLnNpemUgKiAzXG4gICAgICAgICAgICAgICAgLy8gTk9URTogVGhpcyBjb21wcmVzcyBjaGVjayBicmVha3MgZG93biBpZiB3ZSBvbmx5IGhhdmUgdmVyeSBsYXJnZSB2YWx1ZXMsIGJ1dC4uLiB0aG9zZSBkb24ndCB3b3JrIEFOWVdBWVMgKGl0IGlzIGJldHRlciB0byB1c2Ugb25lIGZpbGUgcGVyIHZhbHVlIGluc3RlYWQpLlxuICAgICAgICAgICAgICAgIC8vICAtIE1heWJlIHdlIHNob3VsZCB0aHJvdywgb3IgYXQgbGVhc3Qgd2Fybiwgb24gc2V0cyBvZiB2YWx1ZSA+IDFNQixcbiAgICAgICAgICAgICAgICAvLyAgICAgIGF0IHdoaWNoIHBvaW50IHRoZXkgc2hvdWxkIGp1c3QgdXNlIGEgZmlsZSBwZXIgdmFsdWVcbiAgICAgICAgICAgICAgICB8fCBleGlzdGluZ0Rpc2tFbnRyaWVzLmxlbmd0aCA+IE1hdGgubWF4KDEwLCBNYXRoLmNlaWwodGhpcy5lbnRyeUNvdW50IC8gMTAwMCkpXG4gICAgICAgICAgICAgICAgfHwgZXhpc3RpbmdEaXNrRW50cmllcy5sZW5ndGggPiAxMDAwICogMTBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNvbXByZXNzTm93KSByZXR1cm47XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29tcHJlc3NpbmcgJHt0aGlzLmRlYnVnTmFtZX0gdHJhbnNhY3Rpb24gbG9nLCAke3RoaXMuZW50cnlDb3VudH0gZW50cmllcywgJHt0aGlzLmNhY2hlLnNpemV9IGtleXNgKTtcblxuICAgICAgICAgICAgLy8gTG9hZCBvZmYgZGlzaywgaW4gY2FzZSB0aGVyZSBhcmUgb3RoZXIgd3JpdGVzLiBXZSBzdGlsbCByYWNlIHdpdGggdGhlbSwgYnV0IGF0IGxlYXN0IHRoaXMgcmVkdWNlcyB0aGUgcmFjZSBjb25kaXRpb24gY29uc2lkZXJhYmx5XG4gICAgICAgICAgICBleGlzdGluZ0Rpc2tFbnRyaWVzID0gYXdhaXQgdGhpcy5sb2FkQWxsVHJhbnNhY3Rpb25zKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZW50cnlDb3VudCA9IHRoaXMuY2FjaGUuc2l6ZTtcblxuXG4gICAgICAgICAgICBsZXQgYnVmZmVyczogQnVmZmVyW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5jYWNoZS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgIGxldCBidWZmZXIgPSB0aGlzLnNlcmlhbGl6ZVRyYW5zYWN0aW9uRW50cnkoZW50cnkpO1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbmV3Q2h1bmtzID0gdGhpcy5jaHVua0J1ZmZlcnMoYnVmZmVycyk7XG5cbiAgICAgICAgICAgIGxldCBuZXdGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGNodW5rIG9mIG5ld0NodW5rcykge1xuICAgICAgICAgICAgICAgIC8vIERvbid0IHVzZSB0aGUgcHJldmlvdXMgY3VycmVudCBjaHVuayBmb3IgdGhlIG5ldyBmaWxlLiBBbHNvIGNsZWFyIGl0IGFmdGVyd2FyZHMgc28gaXQncyBub3QgcmV1c2VkIGZvciBhbnkgZnV0dXJlIHJpZ2h0cy4gXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2h1bmsgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbGV0IGZpbGUgPSB0aGlzLmdldEN1cnJlbnRDaHVuaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENodW5rID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIG5ld0ZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBjaHVuay5idWZmZXI7XG4gICAgICAgICAgICAgICAgbGV0IHsgaGVhZGVyLCBoZWFkZXJCdWZmZXIgfSA9IHRoaXMuZ2V0SGVhZGVyKFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50Lmxlbmd0aCA+PSBGSUxFX1pJUF9USFJFU0hPTERcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXIuemlwcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBaaXAuZ3ppcChjb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW2hlYWRlckJ1ZmZlciwgY29udGVudF0pO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmF3U3RvcmFnZS5zZXQoZmlsZSwgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURpc2tGaWxlVGltZXN0YW1wKGZpbGUpO1xuICAgICAgICAgICAgICAgIGxldCB2ZXJpZmllZCA9IGF3YWl0IHRoaXMucmF3U3RvcmFnZS5nZXQoZmlsZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF2ZXJpZmllZD8uZXF1YWxzKGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiBmaWxlICR7ZmlsZX0gaW4gJHt0aGlzLmRlYnVnTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIGZpbGUgJHtmaWxlfSBpbiAke3RoaXMuZGVidWdOYW1lfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgT05MWSB0aW1lIHdlIGNhbiBkZWxldGUgb2xkIGZpbGVzLCBhcyB3ZSBrbm93IGZvciBzdXJlIHRoZSBuZXcgZmlsZSBoYXMgYWxsIG9mIG91ciBkYXRhLiBBbnkgZnV0dXJlIHJlYWRlcnMgd29uJ3Qga25vdyB0aGlzLCB1bmxlc3MgdGhleSB3cml0ZSBpdCB0aGVtc2VsdmVzIChvciB1bmxlc3MgdGhleSBhdWRpdCBpdCBhZ2FpbnN0IHRoZSBvdGhlciBnZW5lcmF0aW9ucywgd2hpY2ggaXMgYW5ub3lpbmcpLlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGV4aXN0aW5nRGlza0VudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJhd1N0b3JhZ2UucmVtb3ZlKGZpbGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlza0ZpbGVzLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuY29tcHJlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZXNldCgpIHtcbiAgICAgICAgYXdhaXQgZmlsZUxvY2tTZWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCBleGlzdGluZ0Rpc2tFbnRyaWVzID0gYXdhaXQgdGhpcy5yYXdTdG9yYWdlLmdldEtleXMoKTtcbiAgICAgICAgICAgIGV4aXN0aW5nRGlza0VudHJpZXMgPSBleGlzdGluZ0Rpc2tFbnRyaWVzLmZpbHRlcih4ID0+IHguZW5kc1dpdGgoQ0hVTktfRVhUKSk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGV4aXN0aW5nRGlza0VudHJpZXMubWFwKHggPT4gdGhpcy5yYXdTdG9yYWdlLnJlbW92ZSh4KSkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7IH1cblxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQXBwZW5kcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5kaXNrRmlsZXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENodW5rID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5lbnRyeUNvdW50ID0gMDtcbiAgICAgICAgfSk7XG4gICAgfVxufSJdfQ==
|
|
547
|
-
/* _JS_SOURCE_HASH = "
|
|
547
|
+
/* _JS_SOURCE_HASH = "4243396e51240c3f63dfe0fd7207c3a864fb73cf06f7acadabf9c6175dbda2ba"; */
|
|
@@ -16,11 +16,13 @@ async function copyArchiveFile(config) {
|
|
|
16
16
|
let size = info.size;
|
|
17
17
|
let writeTime = Math.round(config.preserveWriteTime && info.writeTime || Date.now());
|
|
18
18
|
if (config.preserveWriteTime) {
|
|
19
|
-
// A destination that already holds
|
|
20
|
-
let destInfo = await to.getInfo(toPath, { noFallbacks: config.noFallbacks });
|
|
19
|
+
// A destination that already holds something NEWER (a file OR a deletion - includeTombstones, so a tombstone is visible instead of reading as absence) must not be overwritten with our older copy - and the destination's own only-take-latest would drop the write SILENTLY, leaving the caller believing the copy happened. Refusing here, loudly, is what turns "the remote has something we missed" from a masked bug into a log line the caller can act on. (A fresh-stamped copy needs no such guard - nothing at the destination can be newer than now - so plain copies skip the round trip.)
|
|
20
|
+
let destInfo = await to.getInfo(toPath, { noFallbacks: config.noFallbacks, includeTombstones: true });
|
|
21
21
|
// Compared at whole-millisecond precision (ROUNDED, matching ArchivesDisk - see its get2), here and at the confirm below: disk mtimes carry fractional milliseconds, but utimes round-trips only whole ones, so sub-millisecond differences are storage artifacts of the SAME time, not ordering
|
|
22
22
|
if (destInfo && Math.round(destInfo.writeTime) > Math.round(writeTime)) {
|
|
23
|
-
|
|
23
|
+
// Size 0 IS a deletion, everywhere in this system - a live file can never be empty
|
|
24
|
+
let theirs = destInfo.size === 0 && `a deletion at ${(0, format_1.formatDateTimeDetailed)(destInfo.writeTime)}` || `${destInfo.size} bytes at ${(0, format_1.formatDateTimeDetailed)(destInfo.writeTime)}`;
|
|
25
|
+
(0, storageLogs_1.logStorageError)(`Copy refused - ${destInfo.size === 0 && "a newer deletion exists at the destination" || "a newer file exists at the destination"}. Refusing to copy ${JSON.stringify(path)} from ${from.getDebugName()} to ${to.getDebugName()}${toPath !== path && ` (as ${JSON.stringify(toPath)})` || ""}: ours ${size} bytes at ${(0, format_1.formatDateTimeDetailed)(writeTime)}, theirs ${theirs} - copying would roll it back`);
|
|
24
26
|
return undefined;
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -61,10 +63,23 @@ async function copyArchiveFile(config) {
|
|
|
61
63
|
copiedSize = totalSize;
|
|
62
64
|
}
|
|
63
65
|
if (config.preserveWriteTime) {
|
|
64
|
-
// Every backend drops a superseded write SILENTLY (its only-take-latest is the last line of defense against races the up-front check can't see), so a returned set is not proof the copy landed - only the destination reporting the file at OUR time or newer is. Newer also counts as landed: the destination is at least as new as what we pushed (and b2 always stamps its own, later, upload time). Only for preserved stamps: a fresh stamp cannot lose the race, and moveArchiveFile does its own confirm before deleting anything.
|
|
65
|
-
let confirmed = await to.getInfo(toPath, { noFallbacks: config.noFallbacks });
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
// Every backend drops a superseded write SILENTLY (its only-take-latest is the last line of defense against races the up-front check can't see), so a returned set is not proof the copy landed - only the destination reporting the file at OUR time or newer is. Newer also counts as landed: the destination is at least as new as what we pushed (and b2 always stamps its own, later, upload time). Only for preserved stamps: a fresh stamp cannot lose the race, and moveArchiveFile does its own confirm before deleting anything. includeTombstones so the four failure cases are distinguishable instead of a tombstone reading as "nothing".
|
|
67
|
+
let confirmed = await to.getInfo(toPath, { noFallbacks: config.noFallbacks, includeTombstones: true });
|
|
68
|
+
let landed = confirmed && confirmed.size !== 0 && Math.round(confirmed.writeTime) >= Math.round(writeTime);
|
|
69
|
+
if (!landed) {
|
|
70
|
+
let detail = `Copy of ${JSON.stringify(path)} from ${from.getDebugName()} to ${to.getDebugName()}${toPath !== path && ` (as ${JSON.stringify(toPath)})` || ""}: ours was ${copiedSize} bytes at ${(0, format_1.formatDateTimeDetailed)(writeTime)}`;
|
|
71
|
+
if (!confirmed) {
|
|
72
|
+
(0, storageLogs_1.logStorageError)(`Copy dropped - the destination does not know the file at all. ${detail}, and the destination reports neither a file nor a deletion for it`);
|
|
73
|
+
}
|
|
74
|
+
else if (confirmed.size === 0 && Math.round(confirmed.writeTime) >= Math.round(writeTime)) {
|
|
75
|
+
(0, storageLogs_1.logStorageError)(`Copy dropped - a newer deletion won. ${detail}, but the destination has a deletion at ${(0, format_1.formatDateTimeDetailed)(confirmed.writeTime)}`);
|
|
76
|
+
}
|
|
77
|
+
else if (confirmed.size === 0) {
|
|
78
|
+
(0, storageLogs_1.logStorageError)(`Copy dropped - an OLDER deletion survived our write, so the set did not take. ${detail}, but the destination still has a deletion at ${(0, format_1.formatDateTimeDetailed)(confirmed.writeTime)}`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
(0, storageLogs_1.logStorageError)(`Copy dropped - an OLDER write survived ours, so the set did not take. ${detail}, but the destination still has ${confirmed.size} bytes at ${(0, format_1.formatDateTimeDetailed)(confirmed.writeTime)}`);
|
|
82
|
+
}
|
|
68
83
|
return undefined;
|
|
69
84
|
}
|
|
70
85
|
}
|
|
@@ -107,5 +122,5 @@ async function moveArchiveFile(config) {
|
|
|
107
122
|
await from.del(path);
|
|
108
123
|
}
|
|
109
124
|
exports.moveArchiveFile = moveArchiveFile;
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZUhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcmNoaXZlSGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxrRUFBK0U7QUFDL0UsNkRBQThEO0FBRTlELCtKQUErSjtBQUUvSixNQUFNLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzlDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFMUMsOC9CQUE4L0I7QUFDdi9CLEtBQUssVUFBVSxlQUFlLENBQUMsTUFZckM7SUFDRyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDaEMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDbkMsSUFBSSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN6RSxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNyRixJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLCtkQUErZDtRQUMvZCxJQUFJLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLGlTQUFpUztRQUNqUyxJQUFJLFFBQVEsSUFBSSxJ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QUFDLE1BQU0sQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO1FBQ3ZYLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNoSSxDQUFDO0lBQ0QsSUFBSSxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDclIsQ0FBQztJQUNELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBL0JELDBDQStCQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFR5cGUtb25seTogSUFyY2hpdmVzLnRzIHJlLWV4cG9ydHMgb3VyIGZ1bmN0aW9ucywgc28gYSB2YWx1ZSBpbXBvcnQgYmFjayBhdCBpdCB3b3VsZCBiZSBhIHJlcXVpcmUgY3ljbGVcbmltcG9ydCB0eXBlIHsgSUFyY2hpdmVzIH0gZnJvbSBcIi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBmb3JtYXREYXRlVGltZURldGFpbGVkIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7IGxvZ1N0b3JhZ2VFcnJvciB9IGZyb20gXCIuL3JlbW90ZVN0b3JhZ2Uvc3RvcmFnZUxvZ3NcIjtcblxuLy8gQ3Jvc3MtYXJjaGl2ZSBmaWxlIG9wZXJhdGlvbnMgYnVpbHQgT04gVE9QIG9mIElBcmNoaXZlcyAoY29weSwgbW92ZSkgLSBoZWxwZXJzIG92ZXIgdGhlIGludGVyZmFjZSwgbm90IHBhcnQgb2YgaXQsIHNvIHRoZXkgbGl2ZSBiZXNpZGUgaXQgcmF0aGVyIHRoYW4gaW4gaXQuXG5cbmNvbnN0IExBUkdFX0NPUFlfVEhSRVNIT0xEID0gNjQgKiAxMDI0ICogMTAyNDtcbmNvbnN0IExBUkdFX0NPUFlfQ0hVTksgPSAzMiAqIDEwMjQgKiAxMDI0O1xuXG4vKiogQ29waWVzIG9uZSBmaWxlIGJldHdlZW4gdHdvIGFyY2hpdmVzLiBUaGUgc291cmNlJ3MgQ1VSUkVOVCBzaXplIGFuZCB3cml0ZSB0aW1lIGFsd2F5cyBjb21lIGZyb20gZ2V0SW5mbyByaWdodCBoZXJlIC0gY2FsbGVycyBuZXZlciBzdXBwbHkgdGhlbSwgYmVjYXVzZSBhIHN0YWxlIHNpemUgdHVybnMgaW50byByYW5nZWQgcmVhZHMgb2YgYSBmaWxlIHRoYXQgaGFzIGNoYW5nZWQgKGZhaWxpbmcgZm9yZXZlciksIGFuZCBhIHN0YWxlIHdyaXRlIHRpbWUgcmUtb3JkZXJzIGhpc3RvcnkuIFNtYWxsIGZpbGVzIGdvIGFzIGEgc2luZ2xlIGdldDIrc2V0OyBwYXN0IExBUkdFX0NPUFlfVEhSRVNIT0xEIHRoZSBjb3B5IHN0cmVhbXMgdGhyb3VnaCBzZXRMYXJnZUZpbGUgaW4gTEFSR0VfQ09QWV9DSFVOSyByYW5nZWQgcmVhZHMsIHNvIHRoZSB3aG9sZSBmaWxlIGlzIG5ldmVyIGluIG1lbW9yeS4gUmV0dXJucyB0aGUgY29waWVkIGZpbGUncyBpbmZvLCBhbmQgdW5kZWZpbmVkIGZvciBldmVyeSB3YXkgdGhlIGNvcHkgZGlkIE5PVCBsYW5kOiB0aGUgc291cmNlIGRvZXNuJ3QgaGF2ZSB0aGUgZmlsZSwgYW5kIHdpdGggcHJlc2VydmVXcml0ZVRpbWUgdGhlIHR3byBndWFyZGVkIGNhc2VzIC0gdGhlIGRlc3RpbmF0aW9uIGFscmVhZHkgaGVsZCBzb21ldGhpbmcgTkVXRVIgKHJlZnVzZWQgdXAgZnJvbnQgcmF0aGVyIHRoYW4gcm9sbCBpdCBiYWNrKSwgb3IgdGhlIGRlc3RpbmF0aW9uIHNpbGVudGx5IGRyb3BwZWQgdGhlIHdyaXRlIChpdHMgb3duIG9ubHktdGFrZS1sYXRlc3Qgd29uIGEgcmFjZSB3ZSBsb3N0IC0gY2F1Z2h0IGJ5IGNvbmZpcm1pbmcgd2l0aCBnZXRJbmZvIGFmdGVyd2FyZCkuIFRoZSByZWZ1c2VkL2Ryb3BwZWQgY2FzZXMgYXJlIGxvZ2dlZCBhcyBlcnJvcnM7IGEgY2FsbGVyIHRoYXQgdHJlYXRzIHVuZGVmaW5lZCBhcyBcIm1pc3NpbmcgYXQgdGhlIHNvdXJjZVwiIG11c3QgZ2V0SW5mbyB0aGUgZGVzdGluYXRpb24gdG8gbGVhcm4gdGhlIGFjdHVhbCBsYXRlc3QgdmFsdWUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weUFyY2hpdmVGaWxlKGNvbmZpZzoge1xuICAgIGZyb206IElBcmNoaXZlcztcbiAgICB0bzogSUFyY2hpdmVzO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICAvKiogVGhlIHBhdGggYXQgdGhlIGRlc3RpbmF0aW9uIC0gZGVmYXVsdHMgdG8gcGF0aCAodGhlIGNvbW1vbiBjYXNlOiB0aGUgc2FtZSBrZXkgbW92aW5nIGJldHdlZW4gdHdvIGFyY2hpdmVzKS4gKi9cbiAgICB0b1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqIFN0YW1wcyB0aGUgZGVzdGluYXRpb24gd2l0aCB0aGUgU09VUkNFJ3Mgd3JpdGUgdGltZSBpbnN0ZWFkIG9mIG5vdywgYW5kIHR1cm5zIG9uIHRoZSBvcmRlcmluZyBndWFyZHMgYXJvdW5kIGl0ICh0aGUgbmV3ZXItZGVzdGluYXRpb24gcmVmdXNhbCB1cCBmcm9udCwgYW5kIHRoZSBnZXRJbmZvIGNvbmZpcm0gYWZ0ZXIpLiBPTkxZIGZvciBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiByZXBsaWNhcyBvZiB0aGUgc2FtZSBrZXksIHdoZXJlIHRoZSBoaWdoZXIgd3JpdGUgdGltZSBtdXN0IHdpbiBhbmQgb3JkZXJpbmcgbXVzdCBzdXJ2aXZlIHByb3BhZ2F0aW9uIC0gbmV2ZXIgZm9yIGEgdXNlci10cmlnZ2VyZWQgY29weTogYSBwbGFpbiBjb3B5IGlzIGEgTkVXIHdyaXRlLCBhbmQgdGhlIHNvdXJjZSdzIG9sZCBzdGFtcCB3b3VsZCBtYWtlIGl0IExPU0UgdG8gYW55IG5ld2VyIHdyaXRlIG9yIHRvbWJzdG9uZSBhdCB0aGUgZGVzdGluYXRpb24sIHNpbGVudGx5IChtb3ZlIGEgZmlsZSBiYWNrIHRvIGEgZm9sZGVyIGl0IHdhcyBkZWxldGVkIGZyb20gYW5kIHRoZSBjb3B5IGlzIGRyb3BwZWQsIHRoZW4gdGhlIGNhbGxlciBkZWxldGVzIHRoZSBzb3VyY2UsIGFuZCB0aGUgZmlsZSBpcyBnb25lIGVudGlyZWx5KS4gKi9cbiAgICBwcmVzZXJ2ZVdyaXRlVGltZT86IGJvb2xlYW47XG4gICAgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuO1xuICAgIG5vQ2hlY2tzPzogYm9vbGVhbjtcbiAgICBpbnRlcm5hbD86IGJvb2xlYW47XG4gICAgbm9GYWxsYmFja3M/OiBib29sZWFuO1xufSk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgeyBmcm9tLCB0bywgcGF0aCB9ID0gY29uZmlnO1xuICAgIGxldCB0b1BhdGggPSBjb25maWcudG9QYXRoIHx8IHBhdGg7XG4gICAgbGV0IGluZm8gPSBhd2FpdCBmcm9tLmdldEluZm8ocGF0aCwgeyBub0ZhbGxiYWNrczogY29uZmlnLm5vRmFsbGJhY2tzIH0pO1xuICAgIGlmICghaW5mbykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBsZXQgc2l6ZSA9IGluZm8uc2l6ZTtcbiAgICBsZXQgd3JpdGVUaW1lID0gTWF0aC5yb3VuZChjb25maWcucHJlc2VydmVXcml0ZVRpbWUgJiYgaW5mby53cml0ZVRpbWUgfHwgRGF0ZS5ub3coKSk7XG4gICAgaWYgKGNvbmZpZy5wcmVzZXJ2ZVdyaXRlVGltZSkge1xuICAgICAgICAvLyBBIGRlc3RpbmF0aW9uIHRoYXQgYWxyZWFkeSBob2xkcyBhIE5FV0VSIGZpbGUgbXVzdCBub3QgYmUgb3ZlcndyaXR0ZW4gd2l0aCBvdXIgb2xkZXIgb25lIC0gYW5kIHRoZSBkZXN0aW5hdGlvbidzIG93biBvbmx5LXRha2UtbGF0ZXN0IHdvdWxkIGRyb3AgdGhlIHdyaXRlIFNJTEVOVExZLCBsZWF2aW5nIHRoZSBjYWxsZXIgYmVsaWV2aW5nIHRoZSBjb3B5IGhhcHBlbmVkLiBSZWZ1c2luZyBoZXJlLCBsb3VkbHksIGlzIHdoYXQgdHVybnMgXCJ0aGUgcmVtb3RlIGhhcyBzb21ldGhpbmcgd2UgbWlzc2VkXCIgZnJvbSBhIG1hc2tlZCBidWcgaW50byBhIGxvZyBsaW5lIHRoZSBjYWxsZXIgY2FuIGFjdCBvbi4gKEEgZnJlc2gtc3RhbXBlZCBjb3B5IG5lZWRzIG5vIHN1Y2ggZ3VhcmQgLSBub3RoaW5nIGF0IHRoZSBkZXN0aW5hdGlvbiBjYW4gYmUgbmV3ZXIgdGhhbiBub3cgLSBzbyBwbGFpbiBjb3BpZXMgc2tpcCB0aGUgcm91bmQgdHJpcC4pXG4gICAgICAgIGxldCBkZXN0SW5mbyA9IGF3YWl0IHRvLmdldEluZm8odG9QYXRoLCB7IG5vRmFsbGJhY2tzOiBjb25maWcubm9GYWxsYmFja3MgfSk7XG4gICAgICAgIC8vIENvbXBhcmVkIGF0IHdob2xlLW1pbGxpc2Vjb25kIHByZWNpc2lvbiAoUk9VTkRFRCwgbWF0Y2hpbmcgQXJjaGl2ZXNEaXNrIC0gc2VlIGl0cyBnZXQyKSwgaGVyZSBhbmQgYXQgdGhlIGNvbmZpcm0gYmVsb3c6IGRpc2sgbXRpbWVzIGNhcnJ5IGZyYWN0aW9uYWwgbWlsbGlzZWNvbmRzLCBidXQgdXRpbWVzIHJvdW5kLXRyaXBzIG9ubHkgd2hvbGUgb25lcywgc28gc3ViLW1pbGxpc2Vjb25kIGRpZmZlcmVuY2VzIGFyZSBzdG9yYWdlIGFydGlmYWN0cyBvZiB0aGUgU0FNRSB0aW1lLCBub3Qgb3JkZXJpbmdcbiAgICAgICAgaWYgKGRlc3RJbmZvICYmIE1hdGgucm91bmQoZGVzdEluZm8ud3JpdGVUaW1lKSA+IE1hdGgucm91bmQod3JpdGVUaW1lKSkge1xuICAgICAgICAgICAgbG9nU3RvcmFnZUVycm9yKGBDb3B5IHJlZnVzZWQgLSBhIG5ld2VyIGZpbGUgZXhpc3RzIGF0IHRoZSBkZXN0aW5hdGlvbi4gUmVmdXNpbmcgdG8gY29weSAke0pTT04uc3RyaW5naWZ5KHBhdGgpfSBmcm9tICR7ZnJvbS5nZXREZWJ1Z05hbWUoKX0gdG8gJHt0by5nZXREZWJ1Z05hbWUoKX0ke3RvUGF0aCAhPT0gcGF0aCAmJiBgIChhcyAke0pTT04uc3RyaW5naWZ5KHRvUGF0aCl9KWAgfHwgXCJcIn06IG91cnMgJHtzaXplfSBieXRlcyBhdCAke2Zvcm1hdERhdGVUaW1lRGV0YWlsZWQod3JpdGVUaW1lKX0sIHRoZWlycyAke2Rlc3RJbmZvLnNpemV9IGJ5dGVzIGF0ICR7Zm9ybWF0RGF0ZVRpbWVEZXRhaWxlZChkZXN0SW5mby53cml0ZVRpbWUpfSAtIGNvcHlpbmcgd291bGQgcm9sbCBpdCBiYWNrYCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBjb3BpZWRTaXplOiBudW1iZXI7XG4gICAgaWYgKHNpemUgPD0gTEFSR0VfQ09QWV9USFJFU0hPTEQpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGZyb20uZ2V0MihwYXRoLCB7IGludGVybmFsOiBjb25maWcuaW50ZXJuYWwsIG5vRmFsbGJhY2tzOiBjb25maWcubm9GYWxsYmFja3MgfSk7XG4gICAgICAgIC8vIEVtcHR5IGNvdW50cyBhcyBhYnNlbnQsIG5ldmVyIGFzIGNvbnRlbnQgdG8gY29weTogYW4gZW1wdHkgZmlsZSBJUyBhIGRlbGV0aW9uLCBzZXQgcmVmdXNlcyBlbXB0eSBidWZmZXJzLCBhbmQgZGVsZXRpb25zIHRyYXZlbCB0aHJvdWdoIHRoZWlyIG93biBwYXRoIChkZWwgLyBzY2FuIHRvbWJzdG9uZXMpXG4gICAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuZGF0YSB8fCAhcmVzdWx0LmRhdGEubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCB0by5zZXQodG9QYXRoLCByZXN1bHQuZGF0YSwgeyBsYXN0TW9kaWZpZWQ6IHdyaXRlVGltZSwgZm9yY2VTZXRJbW11dGFibGU6IGNvbmZpZy5mb3JjZVNldEltbXV0YWJsZSwgbm9DaGVja3M6IGNvbmZpZy5ub0NoZWNrcywgaW50ZXJuYWw6IGNvbmZpZy5pbnRlcm5hbCB9KTtcbiAgICAgICAgY29waWVkU2l6ZSA9IHJlc3VsdC5kYXRhLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb25zdCBzbyB0aGUgY2xvc3VyZSBrZWVwcyB0aGUgbmFycm93ZWQgdHlwZVxuICAgICAgICBjb25zdCB0b3RhbFNpemUgPSBzaXplO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgYXdhaXQgdG8uc2V0TGFyZ2VGaWxlKHtcbiAgICAgICAgICAgIHBhdGg6IHRvUGF0aCxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDogd3JpdGVUaW1lLFxuICAgICAgICAgICAgZm9yY2VTZXRJbW11dGFibGU6IGNvbmZpZy5mb3JjZVNldEltbXV0YWJsZSxcbiAgICAgICAgICAgIG5vQ2hlY2tzOiBjb25maWcubm9DaGVja3MsXG4gICAgICAgICAgICBpbnRlcm5hbDogY29uZmlnLmludGVybmFsLFxuICAgICAgICAgICAgcmVzdGFydFN0cmVhbTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0TmV4dERhdGE6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID49IHRvdGFsU2l6ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsZXQgZW5kID0gTWF0aC5taW4ob2Zmc2V0ICsgTEFSR0VfQ09QWV9DSFVOSywgdG90YWxTaXplKTtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGZyb20uZ2V0KHBhdGgsIHsgcmFuZ2U6IHsgc3RhcnQ6IG9mZnNldCwgZW5kIH0sIGludGVybmFsOiBjb25maWcuaW50ZXJuYWwsIG5vRmFsbGJhY2tzOiBjb25maWcubm9GYWxsYmFja3MgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJhbmdlZCByZWFkIHJldHVybmVkIG5vdGhpbmcgbWlkLWNvcHkuIFJlYWRpbmcgJHtKU09OLnN0cmluZ2lmeShwYXRoKX0gZnJvbSAke2Zyb20uZ2V0RGVidWdOYW1lKCl9IHJldHVybmVkICR7ZGF0YSAmJiBkYXRhLmxlbmd0aCB8fCBcIm5vdGhpbmdcIn0gYXQgJHtvZmZzZXR9LSR7ZW5kfSAoZXhwZWN0ZWQgJHtlbmQgLSBvZmZzZXR9IGJ5dGVzIG9mIGEgJHt0b3RhbFNpemV9IGJ5dGUgZmlsZSAtIGl0IGNoYW5nZWQgb3IgdmFuaXNoZWQgbWlkLWNvcHkpYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb3BpZWRTaXplID0gdG90YWxTaXplO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnByZXNlcnZlV3JpdGVUaW1lKSB7XG4gICAgICAgIC8vIEV2ZXJ5IGJhY2tlbmQgZHJvcHMgYSBzdXBlcnNlZGVkIHdyaXRlIFNJTEVOVExZIChpdHMgb25seS10YWtlLWxhdGVzdCBpcyB0aGUgbGFzdCBsaW5lIG9mIGRlZmVuc2UgYWdhaW5zdCByYWNlcyB0aGUgdXAtZnJvbnQgY2hlY2sgY2FuJ3Qgc2VlKSwgc28gYSByZXR1cm5lZCBzZXQgaXMgbm90IHByb29mIHRoZSBjb3B5IGxhbmRlZCAtIG9ubHkgdGhlIGRlc3RpbmF0aW9uIHJlcG9ydGluZyB0aGUgZmlsZSBhdCBPVVIgdGltZSBvciBuZXdlciBpcy4gTmV3ZXIgYWxzbyBjb3VudHMgYXMgbGFuZGVkOiB0aGUgZGVzdGluYXRpb24gaXMgYXQgbGVhc3QgYXMgbmV3IGFzIHdoYXQgd2UgcHVzaGVkIChhbmQgYjIgYWx3YXlzIHN0YW1wcyBpdHMgb3duLCBsYXRlciwgdXBsb2FkIHRpbWUpLiBPbmx5IGZvciBwcmVzZXJ2ZWQgc3RhbXBzOiBhIGZyZXNoIHN0YW1wIGNhbm5vdCBsb3NlIHRoZSByYWNlLCBhbmQgbW92ZUFyY2hpdmVGaWxlIGRvZXMgaXRzIG93biBjb25maXJtIGJlZm9yZSBkZWxldGluZyBhbnl0aGluZy5cbiAgICAgICAgbGV0IGNvbmZpcm1lZCA9IGF3YWl0IHRvLmdldEluZm8odG9QYXRoLCB7IG5vRmFsbGJhY2tzOiBjb25maWcubm9GYWxsYmFja3MgfSk7XG4gICAgICAgIGlmICghY29uZmlybWVkIHx8IE1hdGgucm91bmQoY29uZmlybWVkLndyaXRlVGltZSkgPCBNYXRoLnJvdW5kKHdyaXRlVGltZSkpIHtcbiAgICAgICAgICAgIGxvZ1N0b3JhZ2VFcnJvcihgQ29weSB3YXMgc2lsZW50bHkgZHJvcHBlZCBieSB0aGUgZGVzdGluYXRpb24uIENvcHkgb2YgJHtKU09OLnN0cmluZ2lmeShwYXRoKX0gZnJvbSAke2Zyb20uZ2V0RGVidWdOYW1lKCl9IHRvICR7dG8uZ2V0RGVidWdOYW1lKCl9JHt0b1BhdGggIT09IHBhdGggJiYgYCAoYXMgJHtKU09OLnN0cmluZ2lmeSh0b1BhdGgpfSlgIHx8IFwiXCJ9OiBvdXIgY29weSB3YXMgJHtjb3BpZWRTaXplfSBieXRlcyBhdCAke2Zvcm1hdERhdGVUaW1lRGV0YWlsZWQod3JpdGVUaW1lKX0sIGJ1dCB0aGUgZGVzdGluYXRpb24gcmVwb3J0cyAke2NvbmZpcm1lZCAmJiBgJHtjb25maXJtZWQuc2l6ZX0gYnl0ZXMgYXQgJHtmb3JtYXREYXRlVGltZURldGFpbGVkKGNvbmZpcm1lZC53cml0ZVRpbWUpfWAgfHwgXCJub3RoaW5nXCJ9IChhIG5ld2VyIHdyaXRlIG9yIGRlbGV0aW9uIHdvbiB0aGUgcmFjZSlgKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdGVUaW1lLCBzaXplOiBjb3BpZWRTaXplIH07XG59XG5cbi8qKlxuICogTW92ZXMgb25lIGZpbGUgLSBiZXR3ZWVuIHR3byBhcmNoaXZlcywgb3IgYmV0d2VlbiB0d28gcGF0aHMgb2Ygb25lLiBXaGVuIGZyb20gYW5kIHRvIGFyZSB0aGUgU0FNRVxuICogYXJjaGl2ZXMgaW5zdGFuY2UgYW5kIGl0IGltcGxlbWVudHMgbW92ZSwgdGhlIGJhY2tlbmQgbW92ZXMgdGhlIGZpbGUgaXRzZWxmIChiYWNrYmxhemUgY29waWVzXG4gKiBzZXJ2ZXItc2lkZSwgZGlzayByZW5hbWVzLCB0aGUgc3RvcmFnZSBzZXJ2ZXIgcmVsb2NhdGVzIGl0IG5vZGUtc2lkZSkgYW5kIHRoZSBieXRlcyBuZXZlciB0cmF2ZWxcbiAqIHRocm91Z2ggdXMuIEV2ZXJ5dGhpbmcgZWxzZSBpcyB0aGUgc2FmZSBmYWxsYmFjazogY29weSwgdGhlbiBDT05GSVJNIHRoZSBkZXN0aW5hdGlvbiBhY3R1YWxseVxuICogcmVwb3J0cyB0aGUgZmlsZSAoZ2V0SW5mbyksIGFuZCBvbmx5IHRoZW4gZGVsZXRlIHRoZSBzb3VyY2UgLSB0aGUgb25lIG9yZGVyIGluIHdoaWNoIG5vIGZhaWx1cmVcbiAqIGNhbiBsb3NlIHRoZSBmaWxlLCBvbmx5IGF0IHdvcnN0IGxlYXZlIGl0IGluIGJvdGggcGxhY2VzLiBUaHJvd3Mgd2hlbiB0aGUgc291cmNlIGRvZXNuJ3QgaGF2ZSB0aGVcbiAqIGZpbGUsIG9yIHdoZW4gdGhlIGNvcHkgY2Fubm90IGJlIGNvbmZpcm1lZCAodGhlIHNvdXJjZSBpcyB0aGVuIGxlZnQgdW50b3VjaGVkKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1vdmVBcmNoaXZlRmlsZShjb25maWc6IHtcbiAgICBmcm9tOiBJQXJjaGl2ZXM7XG4gICAgdG86IElBcmNoaXZlcztcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwYXRoIGF0IHRoZSBkZXN0aW5hdGlvbiAtIGRlZmF1bHRzIHRvIHBhdGggKG1vdmluZyBiZXR3ZWVuIHR3byBhcmNoaXZlcykuIFJlcXVpcmVkIGluIHByYWN0aWNlIHdoZW4gZnJvbSBhbmQgdG8gYXJlIHRoZSBzYW1lIGFyY2hpdmVzLCB3aGVyZSB0aGUgc2FtZSBwYXRoIHdvdWxkIGJlIGEgbm8tb3AuICovXG4gICAgdG9QYXRoPzogc3RyaW5nO1xuICAgIG5vRmFsbGJhY2tzPzogYm9vbGVhbjtcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgeyBmcm9tLCB0bywgcGF0aCB9ID0gY29uZmlnO1xuICAgIGxldCB0b1BhdGggPSBjb25maWcudG9QYXRoIHx8IHBhdGg7XG4gICAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgICAgIGlmIChwYXRoID09PSB0b1BhdGgpIHJldHVybjtcbiAgICAgICAgaWYgKGZyb20ubW92ZSkge1xuICAgICAgICAgICAgYXdhaXQgZnJvbS5tb3ZlKHsgZnJvbVBhdGg6IHBhdGgsIHRvUGF0aCB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgY29waWVkID0gYXdhaXQgY29weUFyY2hpdmVGaWxlKHsgZnJvbSwgdG8sIHBhdGgsIHRvUGF0aCwgbm9GYWxsYmFja3M6IGNvbmZpZy5ub0ZhbGxiYWNrcyB9KTtcbiAgICBpZiAoIWNvcGllZCkge1xuICAgICAgICAvLyBVbmRlZmluZWQgaXMgdHdvIGNhc2VzIChzZWUgY29weUFyY2hpdmVGaWxlKSAtIGFza2luZyB0aGUgc291cmNlIHdoaWNoIG9uZSBrZWVwcyB0aGUgZXJyb3IgaG9uZXN0XG4gICAgICAgIGxldCBzb3VyY2VJbmZvID0gYXdhaXQgZnJvbS5nZXRJbmZvKHBhdGgsIHsgbm9GYWxsYmFja3M6IGNvbmZpZy5ub0ZhbGxiYWNrcyB9KTtcbiAgICAgICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTW92ZSByZWZ1c2VkIC0gYSBuZXdlciBmaWxlIGV4aXN0cyBhdCB0aGUgZGVzdGluYXRpb24uIENhbm5vdCBtb3ZlICR7SlNPTi5zdHJpbmdpZnkocGF0aCl9ICgke3NvdXJjZUluZm8uc2l6ZX0gYnl0ZXMgYXQgJHtmb3JtYXREYXRlVGltZURldGFpbGVkKHNvdXJjZUluZm8ud3JpdGVUaW1lKX0pIGZyb20gJHtmcm9tLmdldERlYnVnTmFtZSgpfTogJHt0by5nZXREZWJ1Z05hbWUoKX0gaG9sZHMgc29tZXRoaW5nIG5ld2VyIGF0ICR7SlNPTi5zdHJpbmdpZnkodG9QYXRoKX0sIGFuZCB0aGUgY29weSB3YXMgcmVmdXNlZCByYXRoZXIgdGhhbiByb2xsIGl0IGJhY2sgLSB0aGUgc291cmNlIGlzIGxlZnQgdW50b3VjaGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb3ZlIHNvdXJjZSBkb2VzIG5vdCBleGlzdC4gQ2Fubm90IG1vdmUgJHtKU09OLnN0cmluZ2lmeShwYXRoKX06ICR7ZnJvbS5nZXREZWJ1Z05hbWUoKX0gZG9lcyBub3QgaGF2ZSBpdGApO1xuICAgIH1cbiAgICBsZXQgY29uZmlybWVkID0gYXdhaXQgdG8uZ2V0SW5mbyh0b1BhdGgsIHsgbm9GYWxsYmFja3M6IGNvbmZpZy5ub0ZhbGxiYWNrcyB9KTtcbiAgICBpZiAoIWNvbmZpcm1lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vdmUgY29weSBjb3VsZCBub3QgYmUgY29uZmlybWVkIC0gdGhlIHNvdXJjZSBpcyBrZXB0LiBOb3QgZGVsZXRpbmcgJHtKU09OLnN0cmluZ2lmeShwYXRoKX0gZnJvbSAke2Zyb20uZ2V0RGVidWdOYW1lKCl9IGFmdGVyIGNvcHlpbmcgaXQ6ICR7dG8uZ2V0RGVidWdOYW1lKCl9IGRvZXMgbm90IHJlcG9ydCAke0pTT04uc3RyaW5naWZ5KHRvUGF0aCl9ICh0aGUgY29weSBjbGFpbWVkIHRvIHN1Y2NlZWQsIHNvIHNvbWV0aGluZyBpcyB3cm9uZylgKTtcbiAgICB9XG4gICAgYXdhaXQgZnJvbS5kZWwocGF0aCk7XG59XG4iXX0=
|
|
111
|
-
/* _JS_SOURCE_HASH = "
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZUhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcmNoaXZlSGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxrRUFBK0U7QUFDL0UsNkRBQThEO0FBRTlELCtKQUErSjtBQUUvSixNQUFNLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzlDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFMUMsOC9CQUE4L0I7QUFDdi9CLEtBQUssVUFBVSxlQUFlLENBQUMsTUFZckM7SUFDRyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDaEMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDbkMsSUFBSSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN6RSxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNyRixJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLHVrQkFBdWtCO1FBQ3ZrQixJQUFJLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RyxpU0FB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QUksQ0FBQyxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNoSSxDQUFDO0lBQ0QsSUFBSSxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDclIsQ0FBQztJQUNELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBL0JELDBDQStCQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFR5cGUtb25seTogSUFyY2hpdmVzLnRzIHJlLWV4cG9ydHMgb3VyIGZ1bmN0aW9ucywgc28gYSB2YWx1ZSBpbXBvcnQgYmFjayBhdCBpdCB3b3VsZCBiZSBhIHJlcXVpcmUgY3ljbGVcbmltcG9ydCB0eXBlIHsgSUFyY2hpdmVzIH0gZnJvbSBcIi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBmb3JtYXREYXRlVGltZURldGFpbGVkIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7IGxvZ1N0b3JhZ2VFcnJvciB9IGZyb20gXCIuL3JlbW90ZVN0b3JhZ2Uvc3RvcmFnZUxvZ3NcIjtcblxuLy8gQ3Jvc3MtYXJjaGl2ZSBmaWxlIG9wZXJhdGlvbnMgYnVpbHQgT04gVE9QIG9mIElBcmNoaXZlcyAoY29weSwgbW92ZSkgLSBoZWxwZXJzIG92ZXIgdGhlIGludGVyZmFjZSwgbm90IHBhcnQgb2YgaXQsIHNvIHRoZXkgbGl2ZSBiZXNpZGUgaXQgcmF0aGVyIHRoYW4gaW4gaXQuXG5cbmNvbnN0IExBUkdFX0NPUFlfVEhSRVNIT0xEID0gNjQgKiAxMDI0ICogMTAyNDtcbmNvbnN0IExBUkdFX0NPUFlfQ0hVTksgPSAzMiAqIDEwMjQgKiAxMDI0O1xuXG4vKiogQ29waWVzIG9uZSBmaWxlIGJldHdlZW4gdHdvIGFyY2hpdmVzLiBUaGUgc291cmNlJ3MgQ1VSUkVOVCBzaXplIGFuZCB3cml0ZSB0aW1lIGFsd2F5cyBjb21lIGZyb20gZ2V0SW5mbyByaWdodCBoZXJlIC0gY2FsbGVycyBuZXZlciBzdXBwbHkgdGhlbSwgYmVjYXVzZSBhIHN0YWxlIHNpemUgdHVybnMgaW50byByYW5nZWQgcmVhZHMgb2YgYSBmaWxlIHRoYXQgaGFzIGNoYW5nZWQgKGZhaWxpbmcgZm9yZXZlciksIGFuZCBhIHN0YWxlIHdyaXRlIHRpbWUgcmUtb3JkZXJzIGhpc3RvcnkuIFNtYWxsIGZpbGVzIGdvIGFzIGEgc2luZ2xlIGdldDIrc2V0OyBwYXN0IExBUkdFX0NPUFlfVEhSRVNIT0xEIHRoZSBjb3B5IHN0cmVhbXMgdGhyb3VnaCBzZXRMYXJnZUZpbGUgaW4gTEFSR0VfQ09QWV9DSFVOSyByYW5nZWQgcmVhZHMsIHNvIHRoZSB3aG9sZSBmaWxlIGlzIG5ldmVyIGluIG1lbW9yeS4gUmV0dXJucyB0aGUgY29waWVkIGZpbGUncyBpbmZvLCBhbmQgdW5kZWZpbmVkIGZvciBldmVyeSB3YXkgdGhlIGNvcHkgZGlkIE5PVCBsYW5kOiB0aGUgc291cmNlIGRvZXNuJ3QgaGF2ZSB0aGUgZmlsZSwgYW5kIHdpdGggcHJlc2VydmVXcml0ZVRpbWUgdGhlIHR3byBndWFyZGVkIGNhc2VzIC0gdGhlIGRlc3RpbmF0aW9uIGFscmVhZHkgaGVsZCBzb21ldGhpbmcgTkVXRVIgKHJlZnVzZWQgdXAgZnJvbnQgcmF0aGVyIHRoYW4gcm9sbCBpdCBiYWNrKSwgb3IgdGhlIGRlc3RpbmF0aW9uIHNpbGVudGx5IGRyb3BwZWQgdGhlIHdyaXRlIChpdHMgb3duIG9ubHktdGFrZS1sYXRlc3Qgd29uIGEgcmFjZSB3ZSBsb3N0IC0gY2F1Z2h0IGJ5IGNvbmZpcm1pbmcgd2l0aCBnZXRJbmZvIGFmdGVyd2FyZCkuIFRoZSByZWZ1c2VkL2Ryb3BwZWQgY2FzZXMgYXJlIGxvZ2dlZCBhcyBlcnJvcnM7IGEgY2FsbGVyIHRoYXQgdHJlYXRzIHVuZGVmaW5lZCBhcyBcIm1pc3NpbmcgYXQgdGhlIHNvdXJjZVwiIG11c3QgZ2V0SW5mbyB0aGUgZGVzdGluYXRpb24gdG8gbGVhcm4gdGhlIGFjdHVhbCBsYXRlc3QgdmFsdWUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weUFyY2hpdmVGaWxlKGNvbmZpZzoge1xuICAgIGZyb206IElBcmNoaXZlcztcbiAgICB0bzogSUFyY2hpdmVzO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICAvKiogVGhlIHBhdGggYXQgdGhlIGRlc3RpbmF0aW9uIC0gZGVmYXVsdHMgdG8gcGF0aCAodGhlIGNvbW1vbiBjYXNlOiB0aGUgc2FtZSBrZXkgbW92aW5nIGJldHdlZW4gdHdvIGFyY2hpdmVzKS4gKi9cbiAgICB0b1BhdGg/OiBzdHJpbmc7XG4gICAgLyoqIFN0YW1wcyB0aGUgZGVzdGluYXRpb24gd2l0aCB0aGUgU09VUkNFJ3Mgd3JpdGUgdGltZSBpbnN0ZWFkIG9mIG5vdywgYW5kIHR1cm5zIG9uIHRoZSBvcmRlcmluZyBndWFyZHMgYXJvdW5kIGl0ICh0aGUgbmV3ZXItZGVzdGluYXRpb24gcmVmdXNhbCB1cCBmcm9udCwgYW5kIHRoZSBnZXRJbmZvIGNvbmZpcm0gYWZ0ZXIpLiBPTkxZIGZvciBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiByZXBsaWNhcyBvZiB0aGUgc2FtZSBrZXksIHdoZXJlIHRoZSBoaWdoZXIgd3JpdGUgdGltZSBtdXN0IHdpbiBhbmQgb3JkZXJpbmcgbXVzdCBzdXJ2aXZlIHByb3BhZ2F0aW9uIC0gbmV2ZXIgZm9yIGEgdXNlci10cmlnZ2VyZWQgY29weTogYSBwbGFpbiBjb3B5IGlzIGEgTkVXIHdyaXRlLCBhbmQgdGhlIHNvdXJjZSdzIG9sZCBzdGFtcCB3b3VsZCBtYWtlIGl0IExPU0UgdG8gYW55IG5ld2VyIHdyaXRlIG9yIHRvbWJzdG9uZSBhdCB0aGUgZGVzdGluYXRpb24sIHNpbGVudGx5IChtb3ZlIGEgZmlsZSBiYWNrIHRvIGEgZm9sZGVyIGl0IHdhcyBkZWxldGVkIGZyb20gYW5kIHRoZSBjb3B5IGlzIGRyb3BwZWQsIHRoZW4gdGhlIGNhbGxlciBkZWxldGVzIHRoZSBzb3VyY2UsIGFuZCB0aGUgZmlsZSBpcyBnb25lIGVudGlyZWx5KS4gKi9cbiAgICBwcmVzZXJ2ZVdyaXRlVGltZT86IGJvb2xlYW47XG4gICAgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuO1xuICAgIG5vQ2hlY2tzPzogYm9vbGVhbjtcbiAgICBpbnRlcm5hbD86IGJvb2xlYW47XG4gICAgbm9GYWxsYmFja3M/OiBib29sZWFuO1xufSk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgeyBmcm9tLCB0bywgcGF0aCB9ID0gY29uZmlnO1xuICAgIGxldCB0b1BhdGggPSBjb25maWcudG9QYXRoIHx8IHBhdGg7XG4gICAgbGV0IGluZm8gPSBhd2FpdCBmcm9tLmdldEluZm8ocGF0aCwgeyBub0ZhbGxiYWNrczogY29uZmlnLm5vRmFsbGJhY2tzIH0pO1xuICAgIGlmICghaW5mbykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBsZXQgc2l6ZSA9IGluZm8uc2l6ZTtcbiAgICBsZXQgd3JpdGVUaW1lID0gTWF0aC5yb3VuZChjb25maWcucHJlc2VydmVXcml0ZVRpbWUgJiYgaW5mby53cml0ZVRpbWUgfHwgRGF0ZS5ub3coKSk7XG4gICAgaWYgKGNvbmZpZy5wcmVzZXJ2ZVdyaXRlVGltZSkge1xuICAgICAgICAvLyBBIGRlc3RpbmF0aW9uIHRoYXQgYWxyZWFkeSBob2xkcyBzb21ldGhpbmcgTkVXRVIgKGEgZmlsZSBPUiBhIGRlbGV0aW9uIC0gaW5jbHVkZVRvbWJzdG9uZXMsIHNvIGEgdG9tYnN0b25lIGlzIHZpc2libGUgaW5zdGVhZCBvZiByZWFkaW5nIGFzIGFic2VuY2UpIG11c3Qgbm90IGJlIG92ZXJ3cml0dGVuIHdpdGggb3VyIG9sZGVyIGNvcHkgLSBhbmQgdGhlIGRlc3RpbmF0aW9uJ3Mgb3duIG9ubHktdGFrZS1sYXRlc3Qgd291bGQgZHJvcCB0aGUgd3JpdGUgU0lMRU5UTFksIGxlYXZpbmcgdGhlIGNhbGxlciBiZWxpZXZpbmcgdGhlIGNvcHkgaGFwcGVuZWQuIFJlZnVzaW5nIGhlcmUsIGxvdWRseSwgaXMgd2hhdCB0dXJucyBcInRoZSByZW1vdGUgaGFzIHNvbWV0aGluZyB3ZSBtaXNzZWRcIiBmcm9tIGEgbWFza2VkIGJ1ZyBpbnRvIGEgbG9nIGxpbmUgdGhlIGNhbGxlciBjYW4gYWN0IG9uLiAoQSBmcmVzaC1zdGFtcGVkIGNvcHkgbmVlZHMgbm8gc3VjaCBndWFyZCAtIG5vdGhpbmcgYXQgdGhlIGRlc3RpbmF0aW9uIGNhbiBiZSBuZXdlciB0aGFuIG5vdyAtIHNvIHBsYWluIGNvcGllcyBza2lwIHRoZSByb3VuZCB0cmlwLilcbiAgICAgICAgbGV0IGRlc3RJbmZvID0gYXdhaXQgdG8uZ2V0SW5mbyh0b1BhdGgsIHsgbm9GYWxsYmFja3M6IGNvbmZpZy5ub0ZhbGxiYWNrcywgaW5jbHVkZVRvbWJzdG9uZXM6IHRydWUgfSk7XG4gICAgICAgIC8vIENvbXBhcmVkIGF0IHdob2xlLW1pbGxpc2Vjb25kIHByZWNpc2lvbiAoUk9VTkRFRCwgbWF0Y2hpbmcgQXJjaGl2ZXNEaXNrIC0gc2VlIGl0cyBnZXQyKSwgaGVyZSBhbmQgYXQgdGhlIGNvbmZpcm0gYmVsb3c6IGRpc2sgbXRpbWVzIGNhcnJ5IGZyYWN0aW9uYWwgbWlsbGlzZWNvbmRzLCBidXQgdXRpbWVzIHJvdW5kLXRyaXBzIG9ubHkgd2hvbGUgb25lcywgc28gc3ViLW1pbGxpc2Vjb25kIGRpZmZlcmVuY2VzIGFyZSBzdG9yYWdlIGFydGlmYWN0cyBvZiB0aGUgU0FNRSB0aW1lLCBub3Qgb3JkZXJpbmdcbiAgICAgICAgaWYgKGRlc3RJbmZvICYmIE1hdGgucm91bmQoZGVzdEluZm8ud3JpdGVUaW1lKSA+IE1hdGgucm91bmQod3JpdGVUaW1lKSkge1xuICAgICAgICAgICAgLy8gU2l6ZSAwIElTIGEgZGVsZXRpb24sIGV2ZXJ5d2hlcmUgaW4gdGhpcyBzeXN0ZW0gLSBhIGxpdmUgZmlsZSBjYW4gbmV2ZXIgYmUgZW1wdHlcbiAgICAgICAgICAgIGxldCB0aGVpcnMgPSBkZXN0SW5mby5zaXplID09PSAwICYmIGBhIGRlbGV0aW9uIGF0ICR7Zm9ybWF0RGF0ZVRpbWVEZXRhaWxlZChkZXN0SW5mby53cml0ZVRpbWUpfWAgfHwgYCR7ZGVzdEluZm8uc2l6ZX0gYnl0ZXMgYXQgJHtmb3JtYXREYXRlVGltZURldGFpbGVkKGRlc3RJbmZvLndyaXRlVGltZSl9YDtcbiAgICAgICAgICAgIGxvZ1N0b3JhZ2VFcnJvcihgQ29weSByZWZ1c2VkIC0gJHtkZXN0SW5mby5zaXplID09PSAwICYmIFwiYSBuZXdlciBkZWxldGlvbiBleGlzdHMgYXQgdGhlIGRlc3RpbmF0aW9uXCIgfHwgXCJhIG5ld2VyIGZpbGUgZXhpc3RzIGF0IHRoZSBkZXN0aW5hdGlvblwifS4gUmVmdXNpbmcgdG8gY29weSAke0pTT04uc3RyaW5naWZ5KHBhdGgpfSBmcm9tICR7ZnJvbS5nZXREZWJ1Z05hbWUoKX0gdG8gJHt0by5nZXREZWJ1Z05hbWUoKX0ke3RvUGF0aCAhPT0gcGF0aCAmJiBgIChhcyAke0pTT04uc3RyaW5naWZ5KHRvUGF0aCl9KWAgfHwgXCJcIn06IG91cnMgJHtzaXplfSBieXRlcyBhdCAke2Zvcm1hdERhdGVUaW1lRGV0YWlsZWQod3JpdGVUaW1lKX0sIHRoZWlycyAke3RoZWlyc30gLSBjb3B5aW5nIHdvdWxkIHJvbGwgaXQgYmFja2ApO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgY29waWVkU2l6ZTogbnVtYmVyO1xuICAgIGlmIChzaXplIDw9IExBUkdFX0NPUFlfVEhSRVNIT0xEKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBmcm9tLmdldDIocGF0aCwgeyBpbnRlcm5hbDogY29uZmlnLmludGVybmFsLCBub0ZhbGxiYWNrczogY29uZmlnLm5vRmFsbGJhY2tzIH0pO1xuICAgICAgICAvLyBFbXB0eSBjb3VudHMgYXMgYWJzZW50LCBuZXZlciBhcyBjb250ZW50IHRvIGNvcHk6IGFuIGVtcHR5IGZpbGUgSVMgYSBkZWxldGlvbiwgc2V0IHJlZnVzZXMgZW1wdHkgYnVmZmVycywgYW5kIGRlbGV0aW9ucyB0cmF2ZWwgdGhyb3VnaCB0aGVpciBvd24gcGF0aCAoZGVsIC8gc2NhbiB0b21ic3RvbmVzKVxuICAgICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0LmRhdGEgfHwgIXJlc3VsdC5kYXRhLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgYXdhaXQgdG8uc2V0KHRvUGF0aCwgcmVzdWx0LmRhdGEsIHsgbGFzdE1vZGlmaWVkOiB3cml0ZVRpbWUsIGZvcmNlU2V0SW1tdXRhYmxlOiBjb25maWcuZm9yY2VTZXRJbW11dGFibGUsIG5vQ2hlY2tzOiBjb25maWcubm9DaGVja3MsIGludGVybmFsOiBjb25maWcuaW50ZXJuYWwgfSk7XG4gICAgICAgIGNvcGllZFNpemUgPSByZXN1bHQuZGF0YS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ29uc3Qgc28gdGhlIGNsb3N1cmUga2VlcHMgdGhlIG5hcnJvd2VkIHR5cGVcbiAgICAgICAgY29uc3QgdG90YWxTaXplID0gc2l6ZTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGF3YWl0IHRvLnNldExhcmdlRmlsZSh7XG4gICAgICAgICAgICBwYXRoOiB0b1BhdGgsXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHdyaXRlVGltZSxcbiAgICAgICAgICAgIGZvcmNlU2V0SW1tdXRhYmxlOiBjb25maWcuZm9yY2VTZXRJbW11dGFibGUsXG4gICAgICAgICAgICBub0NoZWNrczogY29uZmlnLm5vQ2hlY2tzLFxuICAgICAgICAgICAgaW50ZXJuYWw6IGNvbmZpZy5pbnRlcm5hbCxcbiAgICAgICAgICAgIHJlc3RhcnRTdHJlYW06ICgpID0+IHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldE5leHREYXRhOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSB0b3RhbFNpemUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbGV0IGVuZCA9IE1hdGgubWluKG9mZnNldCArIExBUkdFX0NPUFlfQ0hVTkssIHRvdGFsU2l6ZSk7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCBmcm9tLmdldChwYXRoLCB7IHJhbmdlOiB7IHN0YXJ0OiBvZmZzZXQsIGVuZCB9LCBpbnRlcm5hbDogY29uZmlnLmludGVybmFsLCBub0ZhbGxiYWNrczogY29uZmlnLm5vRmFsbGJhY2tzIH0pO1xuICAgICAgICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSYW5nZWQgcmVhZCByZXR1cm5lZCBub3RoaW5nIG1pZC1jb3B5LiBSZWFkaW5nICR7SlNPTi5zdHJpbmdpZnkocGF0aCl9IGZyb20gJHtmcm9tLmdldERlYnVnTmFtZSgpfSByZXR1cm5lZCAke2RhdGEgJiYgZGF0YS5sZW5ndGggfHwgXCJub3RoaW5nXCJ9IGF0ICR7b2Zmc2V0fS0ke2VuZH0gKGV4cGVjdGVkICR7ZW5kIC0gb2Zmc2V0fSBieXRlcyBvZiBhICR7dG90YWxTaXplfSBieXRlIGZpbGUgLSBpdCBjaGFuZ2VkIG9yIHZhbmlzaGVkIG1pZC1jb3B5KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29waWVkU2l6ZSA9IHRvdGFsU2l6ZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wcmVzZXJ2ZVdyaXRlVGltZSkge1xuICAgICAgICAvLyBFdmVyeSBiYWNrZW5kIGRyb3BzIGEgc3VwZXJzZWRlZCB3cml0ZSBTSUxFTlRMWSAoaXRzIG9ubHktdGFrZS1sYXRlc3QgaXMgdGhlIGxhc3QgbGluZSBvZiBkZWZlbnNlIGFnYWluc3QgcmFjZXMgdGhlIHVwLWZyb250IGNoZWNrIGNhbid0IHNlZSksIHNvIGEgcmV0dXJuZWQgc2V0IGlzIG5vdCBwcm9vZiB0aGUgY29weSBsYW5kZWQgLSBvbmx5IHRoZSBkZXN0aW5hdGlvbiByZXBvcnRpbmcgdGhlIGZpbGUgYXQgT1VSIHRpbWUgb3IgbmV3ZXIgaXMuIE5ld2VyIGFsc28gY291bnRzIGFzIGxhbmRlZDogdGhlIGRlc3RpbmF0aW9uIGlzIGF0IGxlYXN0IGFzIG5ldyBhcyB3aGF0IHdlIHB1c2hlZCAoYW5kIGIyIGFsd2F5cyBzdGFtcHMgaXRzIG93biwgbGF0ZXIsIHVwbG9hZCB0aW1lKS4gT25seSBmb3IgcHJlc2VydmVkIHN0YW1wczogYSBmcmVzaCBzdGFtcCBjYW5ub3QgbG9zZSB0aGUgcmFjZSwgYW5kIG1vdmVBcmNoaXZlRmlsZSBkb2VzIGl0cyBvd24gY29uZmlybSBiZWZvcmUgZGVsZXRpbmcgYW55dGhpbmcuIGluY2x1ZGVUb21ic3RvbmVzIHNvIHRoZSBmb3VyIGZhaWx1cmUgY2FzZXMgYXJlIGRpc3Rpbmd1aXNoYWJsZSBpbnN0ZWFkIG9mIGEgdG9tYnN0b25lIHJlYWRpbmcgYXMgXCJub3RoaW5nXCIuXG4gICAgICAgIGxldCBjb25maXJtZWQgPSBhd2FpdCB0by5nZXRJbmZvKHRvUGF0aCwgeyBub0ZhbGxiYWNrczogY29uZmlnLm5vRmFsbGJhY2tzLCBpbmNsdWRlVG9tYnN0b25lczogdHJ1ZSB9KTtcbiAgICAgICAgbGV0IGxhbmRlZCA9IGNvbmZpcm1lZCAmJiBjb25maXJtZWQuc2l6ZSAhPT0gMCAmJiBNYXRoLnJvdW5kKGNvbmZpcm1lZC53cml0ZVRpbWUpID49IE1hdGgucm91bmQod3JpdGVUaW1lKTtcbiAgICAgICAgaWYgKCFsYW5kZWQpIHtcbiAgICAgICAgICAgIGxldCBkZXRhaWwgPSBgQ29weSBvZiAke0pTT04uc3RyaW5naWZ5KHBhdGgpfSBmcm9tICR7ZnJvbS5nZXREZWJ1Z05hbWUoKX0gdG8gJHt0by5nZXREZWJ1Z05hbWUoKX0ke3RvUGF0aCAhPT0gcGF0aCAmJiBgIChhcyAke0pTT04uc3RyaW5naWZ5KHRvUGF0aCl9KWAgfHwgXCJcIn06IG91cnMgd2FzICR7Y29waWVkU2l6ZX0gYnl0ZXMgYXQgJHtmb3JtYXREYXRlVGltZURldGFpbGVkKHdyaXRlVGltZSl9YDtcbiAgICAgICAgICAgIGlmICghY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgbG9nU3RvcmFnZUVycm9yKGBDb3B5IGRyb3BwZWQgLSB0aGUgZGVzdGluYXRpb24gZG9lcyBub3Qga25vdyB0aGUgZmlsZSBhdCBhbGwuICR7ZGV0YWlsfSwgYW5kIHRoZSBkZXN0aW5hdGlvbiByZXBvcnRzIG5laXRoZXIgYSBmaWxlIG5vciBhIGRlbGV0aW9uIGZvciBpdGApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maXJtZWQuc2l6ZSA9PT0gMCAmJiBNYXRoLnJvdW5kKGNvbmZpcm1lZC53cml0ZVRpbWUpID49IE1hdGgucm91bmQod3JpdGVUaW1lKSkge1xuICAgICAgICAgICAgICAgIGxvZ1N0b3JhZ2VFcnJvcihgQ29weSBkcm9wcGVkIC0gYSBuZXdlciBkZWxldGlvbiB3b24uICR7ZGV0YWlsfSwgYnV0IHRoZSBkZXN0aW5hdGlvbiBoYXMgYSBkZWxldGlvbiBhdCAke2Zvcm1hdERhdGVUaW1lRGV0YWlsZWQoY29uZmlybWVkLndyaXRlVGltZSl9YCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpcm1lZC5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbG9nU3RvcmFnZUVycm9yKGBDb3B5IGRyb3BwZWQgLSBhbiBPTERFUiBkZWxldGlvbiBzdXJ2aXZlZCBvdXIgd3JpdGUsIHNvIHRoZSBzZXQgZGlkIG5vdCB0YWtlLiAke2RldGFpbH0sIGJ1dCB0aGUgZGVzdGluYXRpb24gc3RpbGwgaGFzIGEgZGVsZXRpb24gYXQgJHtmb3JtYXREYXRlVGltZURldGFpbGVkKGNvbmZpcm1lZC53cml0ZVRpbWUpfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dTdG9yYWdlRXJyb3IoYENvcHkgZHJvcHBlZCAtIGFuIE9MREVSIHdyaXRlIHN1cnZpdmVkIG91cnMsIHNvIHRoZSBzZXQgZGlkIG5vdCB0YWtlLiAke2RldGFpbH0sIGJ1dCB0aGUgZGVzdGluYXRpb24gc3RpbGwgaGFzICR7Y29uZmlybWVkLnNpemV9IGJ5dGVzIGF0ICR7Zm9ybWF0RGF0ZVRpbWVEZXRhaWxlZChjb25maXJtZWQud3JpdGVUaW1lKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgd3JpdGVUaW1lLCBzaXplOiBjb3BpZWRTaXplIH07XG59XG5cbi8qKlxuICogTW92ZXMgb25lIGZpbGUgLSBiZXR3ZWVuIHR3byBhcmNoaXZlcywgb3IgYmV0d2VlbiB0d28gcGF0aHMgb2Ygb25lLiBXaGVuIGZyb20gYW5kIHRvIGFyZSB0aGUgU0FNRVxuICogYXJjaGl2ZXMgaW5zdGFuY2UgYW5kIGl0IGltcGxlbWVudHMgbW92ZSwgdGhlIGJhY2tlbmQgbW92ZXMgdGhlIGZpbGUgaXRzZWxmIChiYWNrYmxhemUgY29waWVzXG4gKiBzZXJ2ZXItc2lkZSwgZGlzayByZW5hbWVzLCB0aGUgc3RvcmFnZSBzZXJ2ZXIgcmVsb2NhdGVzIGl0IG5vZGUtc2lkZSkgYW5kIHRoZSBieXRlcyBuZXZlciB0cmF2ZWxcbiAqIHRocm91Z2ggdXMuIEV2ZXJ5dGhpbmcgZWxzZSBpcyB0aGUgc2FmZSBmYWxsYmFjazogY29weSwgdGhlbiBDT05GSVJNIHRoZSBkZXN0aW5hdGlvbiBhY3R1YWxseVxuICogcmVwb3J0cyB0aGUgZmlsZSAoZ2V0SW5mbyksIGFuZCBvbmx5IHRoZW4gZGVsZXRlIHRoZSBzb3VyY2UgLSB0aGUgb25lIG9yZGVyIGluIHdoaWNoIG5vIGZhaWx1cmVcbiAqIGNhbiBsb3NlIHRoZSBmaWxlLCBvbmx5IGF0IHdvcnN0IGxlYXZlIGl0IGluIGJvdGggcGxhY2VzLiBUaHJvd3Mgd2hlbiB0aGUgc291cmNlIGRvZXNuJ3QgaGF2ZSB0aGVcbiAqIGZpbGUsIG9yIHdoZW4gdGhlIGNvcHkgY2Fubm90IGJlIGNvbmZpcm1lZCAodGhlIHNvdXJjZSBpcyB0aGVuIGxlZnQgdW50b3VjaGVkKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1vdmVBcmNoaXZlRmlsZShjb25maWc6IHtcbiAgICBmcm9tOiBJQXJjaGl2ZXM7XG4gICAgdG86IElBcmNoaXZlcztcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwYXRoIGF0IHRoZSBkZXN0aW5hdGlvbiAtIGRlZmF1bHRzIHRvIHBhdGggKG1vdmluZyBiZXR3ZWVuIHR3byBhcmNoaXZlcykuIFJlcXVpcmVkIGluIHByYWN0aWNlIHdoZW4gZnJvbSBhbmQgdG8gYXJlIHRoZSBzYW1lIGFyY2hpdmVzLCB3aGVyZSB0aGUgc2FtZSBwYXRoIHdvdWxkIGJlIGEgbm8tb3AuICovXG4gICAgdG9QYXRoPzogc3RyaW5nO1xuICAgIG5vRmFsbGJhY2tzPzogYm9vbGVhbjtcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgeyBmcm9tLCB0bywgcGF0aCB9ID0gY29uZmlnO1xuICAgIGxldCB0b1BhdGggPSBjb25maWcudG9QYXRoIHx8IHBhdGg7XG4gICAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgICAgIGlmIChwYXRoID09PSB0b1BhdGgpIHJldHVybjtcbiAgICAgICAgaWYgKGZyb20ubW92ZSkge1xuICAgICAgICAgICAgYXdhaXQgZnJvbS5tb3ZlKHsgZnJvbVBhdGg6IHBhdGgsIHRvUGF0aCB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgY29waWVkID0gYXdhaXQgY29weUFyY2hpdmVGaWxlKHsgZnJvbSwgdG8sIHBhdGgsIHRvUGF0aCwgbm9GYWxsYmFja3M6IGNvbmZpZy5ub0ZhbGxiYWNrcyB9KTtcbiAgICBpZiAoIWNvcGllZCkge1xuICAgICAgICAvLyBVbmRlZmluZWQgaXMgdHdvIGNhc2VzIChzZWUgY29weUFyY2hpdmVGaWxlKSAtIGFza2luZyB0aGUgc291cmNlIHdoaWNoIG9uZSBrZWVwcyB0aGUgZXJyb3IgaG9uZXN0XG4gICAgICAgIGxldCBzb3VyY2VJbmZvID0gYXdhaXQgZnJvbS5nZXRJbmZvKHBhdGgsIHsgbm9GYWxsYmFja3M6IGNvbmZpZy5ub0ZhbGxiYWNrcyB9KTtcbiAgICAgICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTW92ZSByZWZ1c2VkIC0gYSBuZXdlciBmaWxlIGV4aXN0cyBhdCB0aGUgZGVzdGluYXRpb24uIENhbm5vdCBtb3ZlICR7SlNPTi5zdHJpbmdpZnkocGF0aCl9ICgke3NvdXJjZUluZm8uc2l6ZX0gYnl0ZXMgYXQgJHtmb3JtYXREYXRlVGltZURldGFpbGVkKHNvdXJjZUluZm8ud3JpdGVUaW1lKX0pIGZyb20gJHtmcm9tLmdldERlYnVnTmFtZSgpfTogJHt0by5nZXREZWJ1Z05hbWUoKX0gaG9sZHMgc29tZXRoaW5nIG5ld2VyIGF0ICR7SlNPTi5zdHJpbmdpZnkodG9QYXRoKX0sIGFuZCB0aGUgY29weSB3YXMgcmVmdXNlZCByYXRoZXIgdGhhbiByb2xsIGl0IGJhY2sgLSB0aGUgc291cmNlIGlzIGxlZnQgdW50b3VjaGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb3ZlIHNvdXJjZSBkb2VzIG5vdCBleGlzdC4gQ2Fubm90IG1vdmUgJHtKU09OLnN0cmluZ2lmeShwYXRoKX06ICR7ZnJvbS5nZXREZWJ1Z05hbWUoKX0gZG9lcyBub3QgaGF2ZSBpdGApO1xuICAgIH1cbiAgICBsZXQgY29uZmlybWVkID0gYXdhaXQgdG8uZ2V0SW5mbyh0b1BhdGgsIHsgbm9GYWxsYmFja3M6IGNvbmZpZy5ub0ZhbGxiYWNrcyB9KTtcbiAgICBpZiAoIWNvbmZpcm1lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vdmUgY29weSBjb3VsZCBub3QgYmUgY29uZmlybWVkIC0gdGhlIHNvdXJjZSBpcyBrZXB0LiBOb3QgZGVsZXRpbmcgJHtKU09OLnN0cmluZ2lmeShwYXRoKX0gZnJvbSAke2Zyb20uZ2V0RGVidWdOYW1lKCl9IGFmdGVyIGNvcHlpbmcgaXQ6ICR7dG8uZ2V0RGVidWdOYW1lKCl9IGRvZXMgbm90IHJlcG9ydCAke0pTT04uc3RyaW5naWZ5KHRvUGF0aCl9ICh0aGUgY29weSBjbGFpbWVkIHRvIHN1Y2NlZWQsIHNvIHNvbWV0aGluZyBpcyB3cm9uZylgKTtcbiAgICB9XG4gICAgYXdhaXQgZnJvbS5kZWwocGF0aCk7XG59XG4iXX0=
|
|
126
|
+
/* _JS_SOURCE_HASH = "dc16f97b59c17881ed687c25628fee4582f488227d34c3763ba95249248b90a0"; */
|