sliftutils 1.7.20 → 1.7.22

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.
Files changed (38) hide show
  1. package/index.d.ts +24 -4
  2. package/misc/dist/strings.ts.cache +2 -2
  3. package/misc/https/dist/certs.ts.cache +2 -2
  4. package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
  5. package/package.json +2 -2
  6. package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +2 -2
  7. package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +2 -2
  8. package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +2 -2
  9. package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +2 -2
  10. package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
  11. package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +2 -2
  12. package/storage/BulkDatabase2/dist/blockCache.ts.cache +2 -2
  13. package/storage/BulkDatabase2/dist/mergeLock.ts.cache +2 -2
  14. package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +2 -2
  15. package/storage/BulkDatabase2/dist/streamLog.ts.cache +2 -2
  16. package/storage/BulkDatabase2/dist/syncClient.ts.cache +2 -2
  17. package/storage/remoteStorage/ArchivesRemote.d.ts +3 -1
  18. package/storage/remoteStorage/ArchivesRemote.ts +7 -7
  19. package/storage/remoteStorage/blobStore.d.ts +0 -1
  20. package/storage/remoteStorage/blobStore.ts +4 -10
  21. package/storage/remoteStorage/createArchives.d.ts +1 -0
  22. package/storage/remoteStorage/createArchives.ts +38 -7
  23. package/storage/remoteStorage/deployTakeover.d.ts +7 -0
  24. package/storage/remoteStorage/deployTakeover.ts +59 -12
  25. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +3 -3
  26. package/storage/remoteStorage/dist/blobStore.ts.cache +16 -4
  27. package/storage/remoteStorage/dist/createArchives.ts.cache +52 -10
  28. package/storage/remoteStorage/dist/deployTakeover.ts.cache +84 -40
  29. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +11 -4
  30. package/storage/remoteStorage/dist/storageController.ts.cache +9 -4
  31. package/storage/remoteStorage/dist/storageServerState.ts.cache +22 -9
  32. package/storage/remoteStorage/sourceWrapper.d.ts +4 -0
  33. package/storage/remoteStorage/sourceWrapper.ts +11 -1
  34. package/storage/remoteStorage/spec.md +1 -1
  35. package/storage/remoteStorage/storageController.d.ts +9 -2
  36. package/storage/remoteStorage/storageController.ts +31 -10
  37. package/storage/remoteStorage/storageServerState.ts +9 -5
  38. package/yarn.lock +4 -4
@@ -1,4 +1,4 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
1
+ "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.BulkDatabaseBase = exports.noopReactiveDeps = exports.bulkDatabase2Timing = exports.BULK_ROOT_FOLDER = void 0;
4
4
  const misc_1 = require("socket-function/src/misc");
@@ -1239,4 +1239,4 @@ BulkDatabaseBase.liveInstances = new Set();
1239
1239
  BulkDatabaseBase.memoryWatchdogStarted = false;
1240
1240
  BulkDatabaseBase.lastMemoryFlushMs = 0;
1241
1241
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkJ1bGtEYXRhYmFzZUJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWtFO0FBQ2xFLDJEQUEyRDtBQUMzRCxtREFBeUQ7QUFDekQseURBQW1EO0FBQ25ELDZDQUFxQztBQUVyQyw2REFNOEI7QUFDOUIsMkRBQXNEO0FBQ3RELDZDQUFrRTtBQUNsRSxrRUFBaUY7QUFDakYsd0VBQXlFO0FBQ3pFLDJDQUFpRztBQUNqRyw2Q0FBb0o7QUFDcEosaURBQXlDO0FBQ3pDLDJDQUFpTTtBQUNqTSxpREFBOEc7QUFDOUcsK0NBVXVCO0FBQ3ZCLDZEQUFvRTtBQUV2RCxRQUFBLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQ2pELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQztBQUMvQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDM0IsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkMsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzlDLE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM1QyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUNwQyxNQUFNLGlCQUFpQixHQUFHLHNDQUFpQixHQUFHLENBQUMsQ0FBQztBQUNoRCxNQUFNLGVBQWUsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFDMUIsc0dBQXNHO0FBQ3RHLG9HQUFvRztBQUNwRyw4RUFBOEU7QUFDOUUsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUM5QyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLHlCQUF5QixHQUFHLEdB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bXBvcnQgeyBzb3J0LCB0aHJvdHRsZUZ1bmN0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgcnVuSW5TZXJpYWwgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuaW1wb3J0IHsgZ2V0VGltZVVuaXF1ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JpdHNcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwidHlwZXNhZmVjc3NcIjtcbmltcG9ydCB0eXBlIHsgRmlsZVN0b3JhZ2UgfSBmcm9tIFwiLi4vRmlsZUZvbGRlckFQSVwiO1xuaW1wb3J0IHtcbiAgICBCYXNlQnVsa0RhdGFiYXNlUmVhZGVyLFxuICAgIEJ1bGtIZWFkZXJJbmZvLFxuICAgIGJ1aWxkRmlsZUJ1ZmZlcixcbiAgICBsb2FkQnVsa0hlYWRlcixcbiAgICBUQVJHRVRfRklMRV9CWVRFUyxcbn0gZnJvbSBcIi4vQnVsa0RhdGFiYXNlRm9ybWF0XCI7XG5pbXBvcnQgeyBydW5QbGFubmVkTWVyZ2UgfSBmcm9tIFwiLi9CdWxrRGF0YWJhc2VNZXJnZVwiO1xuaW1wb3J0IHsgYmxvY2tDYWNoZSwgZW5jb2RlQ29tcHJlc3NlZEJsb2NrcyB9IGZyb20gXCIuL2Jsb2NrQ2FjaGVcIjtcbmltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0VGltZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5pbXBvcnQgeyBibHVlLCBtYWdlbnRhIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9sb2dDb2xvcnNcIjtcbmltcG9ydCB7IFNUUkVBTV9FWFRFTlNJT04sIGZyYW1lRGVsZXRlcywgZnJhbWVSb3dzLCBzdHJlYW1SZWFkZXJGcm9tRW50cmllcyB9IGZyb20gXCIuL3N0cmVhbUxvZ1wiO1xuaW1wb3J0IHsgYnJvYWRjYXN0IGFzIHN5bmNCcm9hZGNhc3QsIGJyb2FkY2FzdFNlYWwgYXMgc3luY0Jyb2FkY2FzdFNlYWwsIGNvbm5lY3QgYXMgc3luY0Nvbm5lY3QsIGlzU3luY1N1cHBvcnRlZCwgUmVtb3RlV3JpdGUgfSBmcm9tIFwiLi9zeW5jQ2xpZW50XCI7XG5pbXBvcnQgeyBERUxFVEVEIH0gZnJvbSBcIi4vV3JpdGVPdmVybGF5XCI7XG5pbXBvcnQgeyBNZXJnZUxvY2tJbmZvLCBwZWVrTWVyZ2VGaWxlTG9jaywgcGVla01lcmdlTG9jaywgcmVsZWFzZU1lcmdlRmlsZUxvY2ssIHJlbGVhc2VNZXJnZUxvY2ssIHN0YXJ0TWVyZ2VGaWxlTG9ja0hlYXJ0YmVhdCwgdHJ5QWNxdWlyZU1lcmdlRmlsZUxvY2ssIHRyeUFjcXVpcmVNZXJnZUxvY2sgfSBmcm9tIFwiLi9tZXJnZUxvY2tcIjtcbmltcG9ydCB7IG1hcmtlckV4Y2x1c2lvbnMsIHByb2Nlc3NEZWxldGVNYXJrZXJzLCByZWFkRGVsZXRlTWFya2Vycywgd3JpdGVEZWxldGVNYXJrZXIgfSBmcm9tIFwiLi9tZXJnZU1hcmtlcnNcIjtcbmltcG9ydCB7XG4gICAgQnVsa0ZpbGVJbmZvLFxuICAgIExvYWRlZEluZGV4LFxuICAgIGxvYWRGaWxlUmVhZGVyLFxuICAgIGxvYWRTdHJlYW1FbnRyaWVzLFxuICAgIG1ha2VSYXdHZXRSYW5nZSxcbiAgICBNaXNzaW5nRmlsZUVycm9yLFxuICAgIG9yZGVyU3RyZWFtRW50cmllcyxcbiAgICBTdHJlYW1GaWxlSW5mbyxcbiAgICBTdWJSZWFkZXJDYWNoZXMsXG59IGZyb20gXCIuL0xvYWRlZEluZGV4XCI7XG5pbXBvcnQgeyBCdWxrRGF0YWJhc2VSZWFkZXIsIG51bGxKb2luIH0gZnJvbSBcIi4vQnVsa0RhdGFiYXNlUmVhZGVyXCI7XG5cbmV4cG9ydCBjb25zdCBCVUxLX1JPT1RfRk9MREVSID0gXCJidWxrRGF0YWJhc2VzMlwiO1xuY29uc3QgRklMRV9FWFRFTlNJT04gPSBcIi5idWxrXCI7XG5jb25zdCBST0xMT1ZFUl9ST1dTID0gNTAwMDtcbmNvbnN0IFJPTExPVkVSX0JZVEVTID0gNSAqIDEwMjQgKiAxMDI0O1xuY29uc3QgTUVNT1JZX1dBVENIRE9HX0lOVEVSVkFMX01TID0gNjAgKiAxMDAwO1xuY29uc3QgU1RBTEVfREVMRVRFX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDtcbmNvbnN0IE1BWF9JTkRFWF9SRUxPQURfQVRURU1QVFMgPSAzO1xuY29uc3QgRklSU1RfTUVSR0VfQllURVMgPSBUQVJHRVRfRklMRV9CWVRFUyAvIDI7XG5jb25zdCBLRVlfR1JPVVBfQllURVMgPSA4MDAgKiAxMDI0ICogMTAyNDtcbmNvbnN0IERVUF9USFJFU0hPTEQgPSAwLjQ7XG4vLyBXaG9sZS10aWVyIGRlZHVwIHNob3J0LWNpcmN1aXQgKGFmdGVyIFBhc3MgMSk6IHdoZW4gdGhlIGJ1bGsgdGllciBpcyBvdmVyIHRoaXMgc2l6ZSBBTkQgdGhlIG92ZXJhbGxcbi8vIGtleSBkdXBsaWNhdGlvbiBmcmFjdGlvbiBpcyBvdmVyIHRoaXMgdGhyZXNob2xkLCBmb2xkIGV2ZXJ5IGJ1bGsgZmlsZSBpbiBvbmUgbWVyZ2UgaW5zdGVhZCBvZiB0aGVcbi8vIHBlci1rZXktZ3JvdXAgd2FsayAod2hpY2ggc3BhY2VzIG1lcmdlcyA1IG1pbiBhcGFydCDigJQgMTYgaCBmb3IgMjAwIGdyb3VwcykuXG5jb25zdCBERURVUF9UUklHR0VSX0JZVEVTID0gNTEyICogMTAyNCAqIDEwMjQ7XG5jb25zdCBERURVUF9UUklHR0VSX0ZSQUNUSU9OID0gMC41O1xuY29uc3QgV1JJVEVfRkxVU0hfRklSU1RfU1RFUF9NUyA9IDI1MDtcbi8vIFNraXAgbG9ncyBhcmUgdGhyb3R0bGVkIHBlciBjb2xsZWN0aW9uOiB0aGUgYmFja2dyb3VuZCB3cml0ZSBwYXRoIHJldHJpZXMgbWVyZ2VzIGFib3V0IG9uY2UgYSBzZWNvbmQsXG4vLyBzbyBhbiB1bnRocm90dGxlZCBsb2cgd291bGQgcmVwZWF0IGZvciB0aGUgd2hvbGUgZHVyYXRpb24gb2YgYW5vdGhlciB0YWIncyBtZXJnZS5cbmNvbnN0IE1FUkdFX1NLSVBfTE9HX0lOVEVSVkFMX01TID0gMzAgKiAxMDAwO1xuXG5leHBvcnQgY29uc3QgYnVsa0RhdGFiYXNlMlRpbWluZyA9IHtcbiAgICBzdHJlYW1TZWFsQWdlTXM6IDEwICogNjAgKiA2MCAqIDEwMDAsXG4gICAgLy8gV2FpdCB0aGlzIGxvbmcgYWZ0ZXIgdGhlIHRhYiBiZWNvbWVzIHZpc2libGUgYmVmb3JlIHRoZSBmaXJzdCBtZXJnZSBjaGVjaywgdGhlbiBjaGVjayB0aGlzIG9mdGVuXG4gICAgLy8gYWZ0ZXJ3YXJkcy4gVGFiIGJlaW5nIGhpZGRlbiBjYW5jZWxzIHRoZSB0aW1lcnMgKG5vIG1lcmdlcyB3aGlsZSBpbiBiYWNrZ3JvdW5kKS4gQnJvd3Nlci1vbmx5O1xuICAgIC8vIE5vZGUgY29tcGFjdG9ycyAoZS5nLiByZW1vdGVGaWxlU2VydmVyKSBkcml2ZSB0aGVpciBvd24gcG9sbGluZy5cbiAgICB2aXNpYmxlTWVyZ2VJbnRlcnZhbE1zOiA1ICogNjAgKiAxMDAwLFxuICAgIG1lcmdlU3BhY2luZ01zOiA1ICogNjAgKiAxMDAwLFxuICAgIGZpcnN0TWVyZ2VUcmlnZ2VyRmlsZXM6IDIwLFxuICAgIGZpcnN0TWVyZ2VUcmlnZ2VyUmFuZ2VNczogMyAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgc3RyZWFtRm9sZFRyaWdnZXJSb3dzOiAxMDAsXG4gICAgc3RyZWFtRm9sZFRyaWdnZXJCeXRlczogNjQgKiAxMDI0ICogMTAyNCxcbiAgICBzdHJlYW1GaWxlTWF4Qnl0ZXM6IDUwICogMTAyNCAqIDEwMjQsXG4gICAgc3RyZWFtRm9sZEhhcmRMaW1pdEJ5dGVzOiA3NjggKiAxMDI0ICogMTAyNCxcbiAgICAvLyAwID0gZmx1c2ggZXZlcnkgd3JpdGUgKE5vZGUg4oCUIGFwcGVuZCBpcyByZWFsIGFuZCBjaGVhcCk7IGJyb3dzZXIgcmFtcHMgdG8gMTVzIHRvIGF2b2lkIHJld3JpdGluZ1xuICAgIC8vIHRoZSB3aG9sZSBzdHJlYW0gZmlsZSBwZXIgd3JpdGUuXG4gICAgd3JpdGVGbHVzaE1heERlbGF5TXM6IGlzTm9kZSgpID8gMCA6IDE1ICogMTAwMCxcbiAgICBmaWxlU2V0UG9sbEludGVydmFsTXM6IDMwICogNjAgKiAxMDAwLFxuICAgIG1lbW9yeUZsdXNoSGVhcEJ5dGVzOiA1ICogMTAyNCAqIDEwMjQgKiAxMDI0LFxuICAgIG1lbW9yeUZsdXNoTWluQ29sbGVjdGlvbkJ5dGVzOiAxMDAgKiAxMDI0ICogMTAyNCxcbiAgICBtZW1vcnlGbHVzaFRocm90dGxlTXM6IDE1ICogNjAgKiAxMDAwLFxufTtcblxuZnVuY3Rpb24gZm10Qnl0ZXMobjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAobiA8IDEwMjQpIHJldHVybiBuICsgXCJCXCI7XG4gICAgaWYgKG4gPCAxMDI0ICogMTAyNCkgcmV0dXJuIChuIC8gMTAyNCkudG9GaXhlZCgxKSArIFwiS0JcIjtcbiAgICBpZiAobiA8IDEwMjQgKiAxMDI0ICogMTAyNCkgcmV0dXJuIChuIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIk1CXCI7XG4gICAgcmV0dXJuIChuIC8gMTAyNCAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpICsgXCJHQlwiO1xufVxuXG4vLyBSZWFjdGl2aXR5IHNlYW0gKG5vIG1vYnggZGVwZW5kZW5jeSBpbiB0aGlzIGZpbGUpLiBUaGUgbW9ieCBzdWJjbGFzcyBzdXBwbGllcyBhIFJlYWN0aXZlRGVwcyB0aGF0XG4vLyBtYXBzIHNpZ25hbCBzdHJpbmdzIHRvIGl0cyBvd24gZGVwZW5kZW5jeSB0cmFja2luZzsgbm9uLXJlYWN0aXZlIGNhbGxlcnMgcGFzcyBub29wUmVhY3RpdmVEZXBzLlxuZXhwb3J0IGludGVyZmFjZSBSZWFjdGl2ZURlcHMge1xuICAgIG9ic2VydmUoc2lnbmFsOiBzdHJpbmcpOiB2b2lkO1xuICAgIGludmFsaWRhdGUoc2lnbmFsOiBzdHJpbmcpOiB2b2lkO1xuICAgIGJhdGNoKGZuOiAoKSA9PiB2b2lkKTogdm9pZDtcbiAgICAvLyBPcHRpb25hbCDigJQgbGV0cyB3cml0ZXMgc2tpcCBwZXIta2V5IGludmFsaWRhdGlvbiBmb3Igcm93cyBub3RoaW5nIGlzIHdhdGNoaW5nLiBVbmRlZmluZWQgPVxuICAgIC8vIFwiYXNzdW1lIHdhdGNoZWRcIi5cbiAgICBpc09ic2VydmVkPyhzaWduYWw6IHN0cmluZyk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBub29wUmVhY3RpdmVEZXBzOiBSZWFjdGl2ZURlcHMgPSB7XG4gICAgb2JzZXJ2ZSgpIHsgfSxcbiAgICBpbnZhbGlkYXRlKCkgeyB9LFxuICAgIGJhdGNoKGZuKSB7IGZuKCk7IH0sXG4gICAgaXNPYnNlcnZlZCgpIHsgcmV0dXJuIGZhbHNlOyB9LFxufTtcblxuZXhwb3J0IHR5cGUgU3RvcmFnZUZhY3RvcnkgPSAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPEZpbGVTdG9yYWdlPjtcblxuZXhwb3J0IHR5cGUgQnVsa0RhdGFiYXNlMkNvbmZpZyA9IHtcbiAgICAvLyBTZWUgQnVsa0RhdGFiYXNlUmVhZGVyLmNmZy5tYXhUcmlnZ2VyVGhyb3R0bGVNcy5cbiAgICBtYXhUcmlnZ2VyVGhyb3R0bGVNcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lcmdlU2tpcFJlYXNvbiA9XG4gICAgLy8gVGhpcyBpbnN0YW5jZSBpcyBhbHJlYWR5IG1pZC1tZXJnZS5cbiAgICB8IFwibWVyZ2VJbkZsaWdodFwiXG4gICAgLy8gQW5vdGhlciBzYW1lLW9yaWdpbiB0YWIgaG9sZHMgdGhlIGxvY2FsU3RvcmFnZSBtZXJnZSBsb2NrLlxuICAgIHwgXCJ0YWJMb2NrSGVsZFwiXG4gICAgLy8gQW5vdGhlciBwcm9jZXNzIGhvbGRzIHRoZSBjcm9zcy1wcm9jZXNzIC5tZXJnZS1sb2NrIGZpbGUgKG9yIHdvbiB0aGUgc2V0dGxlIHJhY2UgZm9yIGl0KS5cbiAgICB8IFwiZmlsZUxvY2tIZWxkXCJcbiAgICAvLyBjb21wYWN0KCkgb25seTogdGhlIGNvbGxlY3Rpb24gaGFzIG5vIGZpbGVzIG9uIGRpc2suXG4gICAgfCBcIm5vdGhpbmdUb01lcmdlXCI7XG5cbi8vIFdoYXQgYSBjb21wYWN0KCkvdHJ5TWVyZ2VOb3coKSBjYWxsIGRpZC4gc2tpcFJlYXNvbiBpcyBzZXQgd2hlbiB0aGUgcGFzcyBuZXZlciByYW47IGZvciB0aGUgbG9ja1xuLy8gcmVhc29ucywgbG9ja0hvbGRlcklkL2xvY2tFeHBpcmVzSW5NcyByZXBvcnQgd2hvIGhvbGRzIHRoZSBsb2NrIGFuZCBob3cgbG9uZyB1bnRpbCBpdCBnb2VzIHN0YWxlXG4vLyAoc28gYSBzY2hlZHVsZXIga25vd3Mgd2hlbiByZXRyeWluZyBjb3VsZCBzdWNjZWVkKS5cbmV4cG9ydCB0eXBlIE1lcmdlQXR0ZW1wdFJlc3VsdCA9IHtcbiAgICBtZXJnZWQ6IGJvb2xlYW47XG4gICAgc2tpcFJlYXNvbj86IE1lcmdlU2tpcFJlYXNvbjtcbiAgICBsb2NrSG9sZGVySWQ/OiBzdHJpbmc7XG4gICAgbG9ja0V4cGlyZXNJbk1zPzogbnVtYmVyO1xufTtcblxubGV0IG5ldHdvcmtDb21wYWN0aW9uRW5hYmxlZCA9IGZhbHNlO1xuXG5sZXQgZmlsZU5hbWVDb3VudGVyID0gMDtcbi8vIFBlci1wcm9jZXNzIElEIHNvIHR3byB3cml0ZXJzIHBpY2tpbmcgdGhlIHNhbWUgdGltZXN0YW1wICsgY291bnRlciBuZXZlciBjb2xsaWRlIG9uIGEgbmFtZS5cbmNvbnN0IHdyaXRlcklkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApO1xuZnVuY3Rpb24gbmV4dENvdW50ZXIoKTogbnVtYmVyIHsgcmV0dXJuICsrZmlsZU5hbWVDb3VudGVyOyB9XG5cbmxldCBsYXN0RmlsZVRpbWUgPSAwO1xuLy8gU3RyaWN0bHktaW5jcmVhc2luZyBpbnRlZ2VyIHNvIG5ld2VzdC1maXJzdCBvcmRlcmluZyBpcyB1bmFtYmlndW91cyB3aXRoaW4gYSBtaWxsaXNlY29uZC5cbmZ1bmN0aW9uIG5leHRGaWxlVGltZSgpOiBudW1iZXIge1xuICAgIGxhc3RGaWxlVGltZSA9IE1hdGgubWF4KERhdGUubm93KCksIGxhc3RGaWxlVGltZSArIDEpO1xuICAgIHJldHVybiBsYXN0RmlsZVRpbWU7XG59XG5cbmZ1bmN0aW9uIG5ld0ZpbGVOYW1lKHRpbWVzdGFtcDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYDBfJHt0aW1lc3RhbXB9XyR7d3JpdGVySWR9XyR7bmV4dENvdW50ZXIoKX0ke0ZJTEVfRVhURU5TSU9OfWA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3RyZWFtRmlsZU5hbWUoZmlsZU5hbWU6IHN0cmluZyk6IFN0cmVhbUZpbGVJbmZvIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWZpbGVOYW1lLmVuZHNXaXRoKFNUUkVBTV9FWFRFTlNJT04pKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhcnRzID0gZmlsZU5hbWUuc2xpY2UoMCwgLVNUUkVBTV9FWFRFTlNJT04ubGVuZ3RoKS5zcGxpdChcIl9cIik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMyB8fCBwYXJ0c1swXSAhPT0gXCJzdHJlYW1cIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBwYXJzZUludChwYXJ0c1sxXSwgMTApO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVzdGFtcCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgZmlsZU5hbWUsIHRpbWVzdGFtcCB9O1xufVxuXG4vLyBBY2NlcHQgb2xkIDMtcGFydCAobGV2ZWxfdGltZXN0YW1wX2NvdW50ZXIpIGFuZCBuZXcgNC1wYXJ0IChsZXZlbF90aW1lc3RhbXBfd3JpdGVySWRfY291bnRlcikgc2hhcGVzLlxuZnVuY3Rpb24gcGFyc2VGaWxlTmFtZShmaWxlTmFtZTogc3RyaW5nKTogQnVsa0ZpbGVJbmZvIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWZpbGVOYW1lLmVuZHNXaXRoKEZJTEVfRVhURU5TSU9OKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXJ0cyA9IGZpbGVOYW1lLnNsaWNlKDAsIC1GSUxFX0VYVEVOU0lPTi5sZW5ndGgpLnNwbGl0KFwiX1wiKTtcbiAgICBpZiAocGFydHMubGVuZ3RoIDwgMykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBsZXZlbCA9IHBhcnNlSW50KHBhcnRzWzBdLCAxMCk7XG4gICAgY29uc3QgdGltZXN0YW1wID0gcGFyc2VJbnQocGFydHNbMV0sIDEwKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShsZXZlbCkgfHwgIU51bWJlci5pc0Zpbml0ZSh0aW1lc3RhbXApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IGZpbGVOYW1lLCBsZXZlbCwgdGltZXN0YW1wIH07XG59XG5cbmV4cG9ydCBjbGFzcyBCdWxrRGF0YWJhc2VCYXNlPFQgZXh0ZW5kcyB7IGtleTogc3RyaW5nIH0+IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICAgICAgcHJvdGVjdGVkIGRlcHM6IFJlYWN0aXZlRGVwcyxcbiAgICAgICAgcHJpdmF0ZSBzdG9yYWdlRmFjdG9yeTogU3RvcmFnZUZhY3RvcnksXG4gICAgICAgIHByaXZhdGUgY29uZmlnOiBCdWxrRGF0YWJhc2UyQ29uZmlnID0ge30sXG4gICAgKSB7IH1cblxuICAgIC8vIFRoZSByZWFkZXIgKGFuZCB0aGUgYmFja2dyb3VuZCBtYWNoaW5lcnkgdGhhdCByaWRlcyBhbG9uZyB3aXRoIGl0KSBtdXN0IE5PVCBiZSBzZXQgdXAganVzdFxuICAgIC8vIGJlY2F1c2UgdGhlIGNvbGxlY3Rpb24gd2FzIGNvbnN0cnVjdGVkLiBNYW55IGNvbGxlY3Rpb25zIGFyZSBjb25zdHJ1Y3RlZCBhbmQgbmV2ZXIgdG91Y2hlZCwgYW5kXG4gICAgLy8gaW4gTm9kZSBhIG1lcmdlIHRpY2sgd291bGQgcG9rZSB0aGUgc3RvcmFnZSBmYWN0b3J5IChlLmcuIGluZGV4ZWREQikgYW5kIHRocm93LiBXZSBidWlsZCBpdFxuICAgIC8vIGxhemlseSBvbiBmaXJzdCBhY2Nlc3MgdG8gYHRoaXMucmVhZGVyYDogZXZlcnkgcmVhZCwgd3JpdGUsIGFuZCBtZXJnZSBnb2VzIHRocm91Z2ggdGhlIHJlYWRlcixcbiAgICAvLyB3aGlsZSBwdXJlIGNvbnN0cnVjdGlvbiBuZXZlciB0b3VjaGVzIGl0LlxuICAgIHByaXZhdGUgX3JlYWRlcjogQnVsa0RhdGFiYXNlUmVhZGVyPFQ+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgZ2V0IHJlYWRlcigpOiBCdWxrRGF0YWJhc2VSZWFkZXI8VD4ge1xuICAgICAgICBpZiAodGhpcy5fcmVhZGVyKSByZXR1cm4gdGhpcy5fcmVhZGVyO1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgQnVsa0RhdGFiYXNlUmVhZGVyPFQ+KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGRlcHM6IHRoaXMuZGVwcyxcbiAgICAgICAgICAgIG1heFRyaWdnZXJUaHJvdHRsZU1zOiB0aGlzLmNvbmZpZy5tYXhUcmlnZ2VyVGhyb3R0bGVNcyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlYWRlci5zZXRFbnN1cmVJbmRleCgoKSA9PiB0aGlzLmVuc3VyZUluZGV4KCkpO1xuICAgICAgICB0aGlzLl9yZWFkZXIgPSByZWFkZXI7XG4gICAgICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFjdGl2YXRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2YXRlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmFjdGl2YXRlZCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgKCkgPT4gdm9pZCB0aGlzLmZsdXNoUGVuZGluZygpKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09IFwiaGlkZGVuXCIpIHZvaWQgdGhpcy5mbHVzaFBlbmRpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7IC8qIG5vdCBpbiBhIERPTSBjb250ZXh0ICovIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGVTZXRQb2xsVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB2b2lkIHRoaXMucG9sbEZpbGVTZXQoKSwgYnVsa0RhdGFiYXNlMlRpbWluZy5maWxlU2V0UG9sbEludGVydmFsTXMpO1xuICAgICAgICAodGhpcy5maWxlU2V0UG9sbFRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICAgICAgdGhpcy5zZXR1cFZpc2liaWxpdHlNZXJnZUNoZWNrKCk7XG4gICAgICAgIEJ1bGtEYXRhYmFzZUJhc2UubGl2ZUluc3RhbmNlcy5hZGQodGhpcyk7XG4gICAgICAgIEJ1bGtEYXRhYmFzZUJhc2Uuc3RhcnRNZW1vcnlXYXRjaGRvZygpO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IGB2aXNpYmxlTWVyZ2VJbnRlcnZhbE1zYCBvZiBiZWluZy12aXNpYmxlIHRpbWUsIHJ1biBhIG1lcmdlIGNoZWNrLiBGaXJzdCBjaGVjayBmaXJlc1xuICAgIC8vIGB2aXNpYmxlTWVyZ2VJbnRlcnZhbE1zYCBhZnRlciB0aGUgdGFiIGJlY29tZXMgdmlzaWJsZSAobm90IG9uIGluaXRpYWwgbG9hZCDigJQgZ2l2ZXMgdGhlIHVzZXIgYVxuICAgIC8vIG1vbWVudCBvZiBzZXNzaW9uIGNvbW1pdG1lbnQgYmVmb3JlIHdlIHN0YXJ0IGNodXJuaW5nIHRoZSBGUyksIHRoZW4gZXZlcnkgaW50ZXJ2YWwgYWZ0ZXIuIFRhYlxuICAgIC8vIGhpZGluZyBjYW5jZWxzIHRoZSB0aW1lcnM7IHZpc2libGUtYWdhaW4gcmVzdGFydHMuIE5vZGUgaGFzIG5vIGRvY3VtZW50IOKAlCB0aGVyZSB3ZSBjb25zaWRlclxuICAgIC8vIG91cnNlbHZlcyBhbHdheXMtdmlzaWJsZSBhbmQganVzdCBpbnN0YWxsIHRoZSBpbnRlcnZhbCBkaXJlY3RseS5cbiAgICBwcml2YXRlIHNldHVwVmlzaWJpbGl0eU1lcmdlQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGxldCBmaXJzdFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGludGVydmFsVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChmaXJzdFRpbWVyKSB7IGNsZWFyVGltZW91dChmaXJzdFRpbWVyKTsgZmlyc3RUaW1lciA9IHVuZGVmaW5lZDsgfVxuICAgICAgICAgICAgaWYgKGludGVydmFsVGltZXIpIHsgY2xlYXJJbnRlcnZhbChpbnRlcnZhbFRpbWVyKTsgaW50ZXJ2YWxUaW1lciA9IHVuZGVmaW5lZDsgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChmaXJzdFRpbWVyIHx8IGludGVydmFsVGltZXIpIHJldHVybjtcbiAgICAgICAgICAgIGZpcnN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5tYXliZU1lcmdlKCk7XG4gICAgICAgICAgICAgICAgaW50ZXJ2YWxUaW1lciA9IHNldEludGVydmFsKCgpID0+IHZvaWQgdGhpcy5tYXliZU1lcmdlKCksIGJ1bGtEYXRhYmFzZTJUaW1pbmcudmlzaWJsZU1lcmdlSW50ZXJ2YWxNcyk7XG4gICAgICAgICAgICAgICAgKGludGVydmFsVGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICAgICAgfSwgYnVsa0RhdGFiYXNlMlRpbWluZy52aXNpYmxlTWVyZ2VJbnRlcnZhbE1zKTtcbiAgICAgICAgICAgIChmaXJzdFRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgeyBzdGFydCgpOyByZXR1cm47IH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSBcInZpc2libGVcIikgc3RhcnQoKTtcbiAgICAgICAgICAgICAgICBlbHNlIHN0b3AoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gXCJ2aXNpYmxlXCIpIHN0YXJ0KCk7XG4gICAgICAgIH0gY2F0Y2ggeyAvKiBub3QgaW4gYSBET00gY29udGV4dCAqLyB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJDYWNoZXM6IFN1YlJlYWRlckNhY2hlcyA9IHsgYnVsazogbmV3IE1hcCgpLCBzdHJlYW06IG5ldyBNYXAoKSB9O1xuXG4gICAgcHJpdmF0ZSBwZW5kaW5nQXBwZW5kczogeyBmcmFtZWQ6IEJ1ZmZlcjsgcm93czogbnVtYmVyIH1bXSA9IFtdO1xuICAgIHByaXZhdGUgZmx1c2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBmbHVzaENoYWluOiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgcHJpdmF0ZSBjdXJyZW50Rmx1c2hEZWxheSA9IDA7XG4gICAgcHJpdmF0ZSBsYXN0V3JpdGVUaW1lID0gMDtcblxuICAgIHByaXZhdGUgc3RyZWFtRmlsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGN1cnJlbnRTdHJlYW1GaWxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgY3VycmVudFN0cmVhbUZpbGVCeXRlcyA9IDA7XG4gICAgLy8gSW4tcHJvY2VzcyByZS1lbnRyeSBndWFyZDogaWYgYSBtZXJnZSBpcyBydW5uaW5nLCBhZGRpdGlvbmFsIHRyaWdnZXJzICh2aXNpYmlsaXR5IHRpbWVyLCB3cml0ZXMsXG4gICAgLy8gdHJ5TWVyZ2VOb3cgY2FsbHMpIHJldHVybiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHF1ZXVlaW5nLiBLZWVwcyB0aGUgdmlzaWJpbGl0eS10aW1lciBmaXJpbmdzXG4gICAgLy8gZnJvbSBzdGFja2luZyBiZWhpbmQgYSBsb25nIG1lcmdlLlxuICAgIHByaXZhdGUgbWVyZ2VJbkZsaWdodCA9IGZhbHNlO1xuICAgIHByaXZhdGUgbGFzdE1lcmdlU2tpcExvZ01zID0gMDtcbiAgICAvLyBSdW5uaW5nIGNvdW50ZXJzIG9mIHN0cmVhbS10aWVyIHJvd3MgKyBieXRlcyBvbiBkaXNrLiBTZWVkZWQgZnJvbSBlYWNoIExvYWRlZEluZGV4IGJ1aWxkLCB0aGVuXG4gICAgLy8gaW5jcmVtZW50ZWQgcGVyIGZsdXNoIHNvIHRoZSBmb2xkLXRyaWdnZXIgY2hlY2tzIGN1cnJlbnQgZGF0YSB3aXRob3V0IGFuIGV4dHJhIGRpcmVjdG9yeSBsaXN0aW5nLlxuICAgIHByaXZhdGUgc3RyZWFtUm93c09uRGlzayA9IDA7XG4gICAgcHJpdmF0ZSBzdHJlYW1CeXRlc09uRGlzayA9IDA7XG5cbiAgICBwcml2YXRlIGZpbGVTZXRQb2xsVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIHJlYnVpbGRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgcmVidWlsZERpcnR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSByZWJ1aWxkT3B0aW9uczogeyBkcm9wU3RhbGVGYWxsYmFjazogYm9vbGVhbiB9ID0geyBkcm9wU3RhbGVGYWxsYmFjazogZmFsc2UgfTtcblxuICAgIC8vIOKUgOKUgCBtZW1vcnktcHJlc3N1cmUgd2F0Y2hkb2cgKGdsb2JhbCwgYnJvd3Nlci1vbmx5KSDilIDilIBcbiAgICBwcml2YXRlIHN0YXRpYyBsaXZlSW5zdGFuY2VzID0gbmV3IFNldDxCdWxrRGF0YWJhc2VCYXNlPHsga2V5OiBzdHJpbmcgfT4+KCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbWVtb3J5V2F0Y2hkb2dTdGFydGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbGFzdE1lbW9yeUZsdXNoTXMgPSAwO1xuICAgIHByaXZhdGUgc3RhdGljIHN0YXJ0TWVtb3J5V2F0Y2hkb2coKSB7XG4gICAgICAgIGlmIChCdWxrRGF0YWJhc2VCYXNlLm1lbW9yeVdhdGNoZG9nU3RhcnRlZCkgcmV0dXJuO1xuICAgICAgICBCdWxrRGF0YWJhc2VCYXNlLm1lbW9yeVdhdGNoZG9nU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHVzZWRIZWFwID0gKCk6IG51bWJlciB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgICAgICB0cnkgeyByZXR1cm4gKHBlcmZvcm1hbmNlIGFzIHVua25vd24gYXMgeyBtZW1vcnk/OiB7IHVzZWRKU0hlYXBTaXplPzogbnVtYmVyIH0gfSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemU7IH1cbiAgICAgICAgICAgIGNhdGNoIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZW9mIHBlcmZvcm1hbmNlID09PSBcInVuZGVmaW5lZFwiIHx8IHVzZWRIZWFwKCkgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZWQgPSB1c2VkSGVhcCgpO1xuICAgICAgICAgICAgaWYgKHVzZWQgIT09IHVuZGVmaW5lZCkgQnVsa0RhdGFiYXNlQmFzZS5jaGVja01lbW9yeVByZXNzdXJlKHVzZWQpO1xuICAgICAgICB9LCBNRU1PUllfV0FUQ0hET0dfSU5URVJWQUxfTVMpO1xuICAgICAgICAodGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIGNoZWNrTWVtb3J5UHJlc3N1cmUodXNlZEhlYXBCeXRlczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh1c2VkSGVhcEJ5dGVzIDwgYnVsa0RhdGFiYXNlMlRpbWluZy5tZW1vcnlGbHVzaEhlYXBCeXRlcykgcmV0dXJuO1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAobm93IC0gQnVsa0RhdGFiYXNlQmFzZS5sYXN0TWVtb3J5Rmx1c2hNcyA8IGJ1bGtEYXRhYmFzZTJUaW1pbmcubWVtb3J5Rmx1c2hUaHJvdHRsZU1zKSByZXR1cm47XG4gICAgICAgIEJ1bGtEYXRhYmFzZUJhc2UubGFzdE1lbW9yeUZsdXNoTXMgPSBub3c7XG4gICAgICAgIGNvbnN0IGZsdXNoZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZGIgb2YgQnVsa0RhdGFiYXNlQmFzZS5saXZlSW5zdGFuY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlcyA9IGRiLnJlYWRlci5pbmRleD8udG90YWxCeXRlcyA/PyAwO1xuICAgICAgICAgICAgaWYgKGJ5dGVzID4gYnVsa0RhdGFiYXNlMlRpbWluZy5tZW1vcnlGbHVzaE1pbkNvbGxlY3Rpb25CeXRlcykge1xuICAgICAgICAgICAgICAgIGZsdXNoZWQucHVzaChgJHtkYi5uYW1lfSAoJHtmbXRCeXRlcyhieXRlcyl9KWApO1xuICAgICAgICAgICAgICAgIGRiLnJlbG9hZEZyb21EaXNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZsdXNoZWQubGVuZ3RoKSBjb25zb2xlLmxvZyhgW2J1bGsyXSBoZWFwICR7Zm10Qnl0ZXModXNlZEhlYXBCeXRlcyl9IG92ZXIgJHtmbXRCeXRlcyhidWxrRGF0YWJhc2UyVGltaW5nLm1lbW9yeUZsdXNoSGVhcEJ5dGVzKX0gLSBmbHVzaGVkICR7Zmx1c2hlZC5sZW5ndGh9IGxhcmdlIGNvbGxlY3Rpb24ocyk6ICR7Zmx1c2hlZC5qb2luKFwiLCBcIil9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjbGVhckNhY2hlKCkge1xuICAgICAgICBibG9ja0NhY2hlLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBlbmFibGVOZXR3b3JrQ29tcGFjdGlvbigpIHtcbiAgICAgICAgbmV0d29ya0NvbXBhY3Rpb25FbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcmFnZSA9IGxhenkoYXN5bmMgKCkgPT4gdGhpcy5zdG9yYWdlRmFjdG9yeShgJHtCVUxLX1JPT1RfRk9MREVSfS8ke3RoaXMubmFtZX1gKSk7XG5cbiAgICBwdWJsaWMgYXN5bmMgaXNSZW1vdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiAhIShhd2FpdCB0aGlzLnN0b3JhZ2UoKSkuaXNSZW1vdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdHJlYW1OZWVkc0ZvbGQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbVJvd3NPbkRpc2sgPj0gYnVsa0RhdGFiYXNlMlRpbWluZy5zdHJlYW1Gb2xkVHJpZ2dlclJvd3NcbiAgICAgICAgICAgICYmIHRoaXMuc3RyZWFtQnl0ZXNPbkRpc2sgPiBidWxrRGF0YWJhc2UyVGltaW5nLnN0cmVhbUZvbGRUcmlnZ2VyQnl0ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhdXRvbWF0aWNDb21wYWN0aW9uQWxsb3dlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKG5ldHdvcmtDb21wYWN0aW9uRW5hYmxlZCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChpc05vZGUoKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiAhKGF3YWl0IHRoaXMuc3RvcmFnZSgpKS5pc1JlbW90ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNLZXlXYXRjaGVkKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRlci5pc0tleVdhdGNoZWQoa2V5KTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgaW5kZXggbGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIHByaXZhdGUgYXN5bmMgZW5zdXJlSW5kZXgoKTogUHJvbWlzZTxMb2FkZWRJbmRleDxUPj4ge1xuICAgICAgICBpZiAodGhpcy5yZWFkZXIuaW5kZXgpIHJldHVybiB0aGlzLnJlYWRlci5pbmRleDtcbiAgICAgICAgYXdhaXQgdGhpcy50cmlnZ2VyUmVidWlsZCgpO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLnJlYWRlci5pbmRleDtcbiAgICAgICAgaWYgKCFpZHgpIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm5hbWV9OiBpbmRleCBmYWlsZWQgdG8gYnVpbGRgKTtcbiAgICAgICAgcmV0dXJuIGlkeDtcbiAgICB9XG5cbiAgICAvLyBDb2FsZXNjaW5nIHJlYnVpbGQgbG9vcDogdHJpZ2dlcnMgZHVyaW5nIGEgYnVpbGQgc2V0IHJlYnVpbGREaXJ0eSBzbyB0aGUgbG9vcCBpdGVyYXRlcyBvbmNlIG1vcmVcbiAgICAvLyB3aGVuIGl0IGZpbmlzaGVzIOKAlCBOIHJhcGlkIHRyaWdnZXJzIGNhdXNlIGF0IG1vc3QgT05FIGV4dHJhIHJlYnVpbGQgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIGVuZHMuXG4gICAgcHJpdmF0ZSB0cmlnZ2VyUmVidWlsZChvcHRzOiB7IGRyb3BTdGFsZUZhbGxiYWNrPzogYm9vbGVhbiB9ID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKG9wdHMuZHJvcFN0YWxlRmFsbGJhY2spIHRoaXMucmVidWlsZE9wdGlvbnMuZHJvcFN0YWxlRmFsbGJhY2sgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5yZWJ1aWxkUHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5yZWJ1aWxkRGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVidWlsZFByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWJ1aWxkUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWJ1aWxkRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kb09uZVJlYnVpbGQoKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlICh0aGlzLnJlYnVpbGREaXJ0eSk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWJ1aWxkT3B0aW9ucy5kcm9wU3RhbGVGYWxsYmFjayA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWJ1aWxkUHJvbWlzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGRvT25lUmVidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgeyBidWxrRmlsZXMsIHN0cmVhbUZpbGVzIH0gPSBhd2FpdCB0aGlzLmxpc3RGaWxlcygpO1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gYXdhaXQgdGhpcy5zdG9yYWdlKCk7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gYXdhaXQgTG9hZGVkSW5kZXguYnVpbGQ8VD4oe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgIGJ1bGtGaWxlcyxcbiAgICAgICAgICAgIHN0cmVhbUZpbGVzLFxuICAgICAgICAgICAgc3ViQ2FjaGVzOiB0aGlzLnN1YkNhY2hlcyxcbiAgICAgICAgICAgIG9uVW5yZWFkYWJsZUZpbGU6IChmLCBtc2cpID0+IHRoaXMuaGFuZGxlVW5yZWFkYWJsZUZpbGUoZiwgbXNnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9sZEluZGV4ID0gdGhpcy5yZWFkZXIuaW5kZXg7XG4gICAgICAgIHRoaXMucmVhZGVyLnNldEluZGV4KG5ld0luZGV4LCB7IGRyb3BTdGFsZUZhbGxiYWNrOiB0aGlzLnJlYnVpbGRPcHRpb25zLmRyb3BTdGFsZUZhbGxiYWNrIH0pO1xuICAgICAgICB0aGlzLnN0cmVhbVJvd3NPbkRpc2sgPSBuZXdJbmRleC5zdHJlYW1Sb3dzT25EaXNrO1xuICAgICAgICB0aGlzLnN0cmVhbUJ5dGVzT25EaXNrID0gbmV3SW5kZXguc3RyZWFtQnl0ZXNPbkRpc2s7XG4gICAgICAgIGlmIChvbGRJbmRleCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIG9sZEluZGV4LmZpbGVTZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5ld0luZGV4LmZpbGVTZXQuaGFzKGYpKSBibG9ja0NhY2hlLmV2aWN0KG51bGxKb2luKHRoaXMubmFtZSwgZikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRHJvcCBldmVyeXRoaW5nIGluLW1lbW9yeSwgaGFyZCByZXNldC4gUGVuZGluZyB1bi1mbHVzaGVkIHdyaXRlcyBzdXJ2aXZlIChzdGlsbCBpbiBvdmVybGF5KS5cbiAgICBwdWJsaWMgcmVsb2FkRnJvbURpc2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3ViQ2FjaGVzLmJ1bGsuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zdWJDYWNoZXMuc3RyZWFtLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucmVhZGVyLmluZGV4Py5kcm9wTG9hZGVkVmFsdWVzKCk7XG4gICAgICAgIHZvaWQgdGhpcy50cmlnZ2VyUmVidWlsZCh7IGRyb3BTdGFsZUZhbGxiYWNrOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIEV4dGVybmFsLW1lcmdlIGRldGVjdGlvbjogaWYgc29tZSBvdGhlciB0YWIvcHJvY2VzcyBjaGFuZ2VkIHRoZSBmaWxlIHNldCB1bmRlciB1cywgcmVidWlsZC5cbiAgICBwcml2YXRlIGFzeW5jIHBvbGxGaWxlU2V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMucmVhZGVyLmluZGV4KSByZXR1cm47XG4gICAgICAgIGxldCBjdXJyZW50OiBTZXQ8c3RyaW5nPjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgYnVsa0ZpbGVzLCBzdHJlYW1GaWxlcyB9ID0gYXdhaXQgdGhpcy5saXN0RmlsZXMoKTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBuZXcgU2V0KFsuLi5idWxrRmlsZXMubWFwKGYgPT4gZi5maWxlTmFtZSksIC4uLnN0cmVhbUZpbGVzLm1hcChmID0+IGYuZmlsZU5hbWUpXSk7XG4gICAgICAgIH0gY2F0Y2ggeyByZXR1cm47IH1cbiAgICAgICAgY29uc3QgcHJldiA9IHRoaXMucmVhZGVyLmluZGV4Py5maWxlU2V0O1xuICAgICAgICBpZiAoIXByZXYpIHJldHVybjtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IGN1cnJlbnQuc2l6ZSAhPT0gcHJldi5zaXplIHx8IFsuLi5jdXJyZW50XS5zb21lKG4gPT4gIXByZXYuaGFzKG4pKTtcbiAgICAgICAgaWYgKGNoYW5nZWQpIHZvaWQgdGhpcy50cmlnZ2VyUmVidWlsZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVhZFdpdGhSZXRyeTxSPihmbjogKCkgPT4gUHJvbWlzZTxSPik6IFByb21pc2U8Uj4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUluZGV4KCk7XG4gICAgICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyA7IGF0dGVtcHQrKykge1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gdGhpcy5yZWFkZXIuaW5kZXg7XG4gICAgICAgICAgICB0cnkgeyByZXR1cm4gYXdhaXQgZm4oKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgTWlzc2luZ0ZpbGVFcnJvcikgfHwgYXR0ZW1wdCA+PSBNQVhfSU5ERVhfUkVMT0FEX0FUVEVNUFRTKSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWRlci5pbmRleCA9PT0gYmVmb3JlKSBhd2FpdCB0aGlzLnRyaWdnZXJSZWJ1aWxkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDilIDilIAgY3Jvc3MtdGFiIHN5bmMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgcHJpdmF0ZSBzeW5jU2V0dXAgPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCFpc1N5bmNTdXBwb3J0ZWQoKSkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUluZGV4KCk7XG4gICAgICAgIGNvbnN0IHJlY2VudCA9IGF3YWl0IHN5bmNDb25uZWN0KHRoaXMubmFtZSwgdyA9PiB0aGlzLmFwcGx5UmVtb3RlKHcpLCAoKSA9PiB7IHRoaXMuc3RyZWFtRmlsZU5hbWUgPSB1bmRlZmluZWQ7IH0pO1xuICAgICAgICBmb3IgKGNvbnN0IHcgb2YgcmVjZW50KSB0aGlzLmFwcGx5UmVtb3RlKHcpO1xuICAgIH0pO1xuXG4gICAgcHJpdmF0ZSBhcHBseVJlbW90ZSh3cml0ZTogUmVtb3RlV3JpdGUpIHtcbiAgICAgICAgaWYgKHdyaXRlLnRpbWUgPD0gdGhpcy5yZWFkZXIubG9jYWxUaW1lKHdyaXRlLmtleSkpIHJldHVybjtcbiAgICAgICAgdGhpcy5kZXBzLmJhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh3cml0ZS5kZWxldGVkKSB0aGlzLnJlYWRlci5hcHBseURlbGV0ZSh3cml0ZS5rZXksIHdyaXRlLnRpbWUpO1xuICAgICAgICAgICAgZWxzZSB0aGlzLnJlYWRlci5hcHBseVdyaXRlKHdyaXRlLmtleSwgd3JpdGUudmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHdyaXRlLnRpbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgd3JpdGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIHB1YmxpYyBhc3luYyB3cml0ZShlbnRyeTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy53cml0ZUJhdGNoKFtlbnRyeV0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB3cml0ZUJhdGNoKGVudHJpZXM6IFRbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIWVudHJpZXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHZvaWQgdGhpcy5zeW5jU2V0dXAoKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IGVudHJpZXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICAgICAgICBjb25zdCBzdGFtcGVkID0gcm93cy5tYXAocm93ID0+ICh7IHRpbWU6IGdldFRpbWVVbmlxdWUoKSwgcm93IH0pKTtcbiAgICAgICAgY29uc3QgZnJhbWVkID0gZnJhbWVSb3dzKHN0YW1wZWQpO1xuXG4gICAgICAgIC8vIEJpZyBiYXRjaGVzIHNraXAgdGhlIHN0cmVhbSBhbmQgYmVjb21lIGEgYnVsayBmaWxlIGRpcmVjdGx5IOKAlCBzdHJlYW1pbmcgdGhvdXNhbmRzIG9mIHJvd3NcbiAgICAgICAgLy8gb25lIGZyYW1lIGF0IGEgdGltZSB3b3VsZCBqdXN0IGNodXJuLlxuICAgICAgICBpZiAoZW50cmllcy5sZW5ndGggPj0gUk9MTE9WRVJfUk9XUyB8fCBmcmFtZWQubGVuZ3RoID49IFJPTExPVkVSX0JZVEVTKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLndyaXRlQnVsa0ZpbGUocm93cyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRlcHMuYmF0Y2goKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCB7IHRpbWUsIHJvdyB9IG9mIHN0YW1wZWQpIHRoaXMucmVhZGVyLmFwcGx5V3JpdGUocm93LmtleSBhcyBzdHJpbmcsIHJvdywgdGltZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IHsgdGltZSwgcm93IH0gb2Ygc3RhbXBlZCkgc3luY0Jyb2FkY2FzdCh0aGlzLm5hbWUsIHsga2V5OiByb3cua2V5IGFzIHN0cmluZywgdGltZSwgdmFsdWU6IHJvdyB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5zdHJlYW1BcHBlbmQoZnJhbWVkLCBzdGFtcGVkLmxlbmd0aCk7XG4gICAgICAgIHZvaWQgdGhpcy5tYXliZU1lcmdlKHsgb25seUlmU3RyZWFtSGVhdnk6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRlbGV0ZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVCYXRjaChba2V5XSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRlbGV0ZUJhdGNoKGtleXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICgha2V5cy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdm9pZCB0aGlzLnN5bmNTZXR1cCgpO1xuICAgICAgICBjb25zdCBzdGFtcGVkID0ga2V5cy5tYXAoa2V5ID0+ICh7IHRpbWU6IGdldFRpbWVVbmlxdWUoKSwga2V5IH0pKTtcbiAgICAgICAgdGhpcy5kZXBzLmJhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyB0aW1lLCBrZXkgfSBvZiBzdGFtcGVkKSB0aGlzLnJlYWRlci5hcHBseURlbGV0ZShrZXksIHRpbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChjb25zdCB7IHRpbWUsIGtleSB9IG9mIHN0YW1wZWQpIHN5bmNCcm9hZGNhc3QodGhpcy5uYW1lLCB7IGtleSwgdGltZSwgZGVsZXRlZDogdHJ1ZSB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5zdHJlYW1BcHBlbmQoZnJhbWVEZWxldGVzKHN0YW1wZWQpLCBzdGFtcGVkLmxlbmd0aCk7XG4gICAgICAgIHZvaWQgdGhpcy5tYXliZU1lcmdlKHsgb25seUlmU3RyZWFtSGVhdnk6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29hbGVzY2Ugc3RyZWFtIGFwcGVuZHMgb24gYSByYW1waW5nIHBlci1jb2xsZWN0aW9uIHNjaGVkdWxlICh0aGUgYnJvd3NlciByZXdyaXRlcyB0aGUgd2hvbGVcbiAgICAvLyBmaWxlIHBlciBhcHBlbmQpLiBUaGUgZmlyc3Qgd3JpdGUgYWZ0ZXIgYSBsdWxsIGZsdXNoZXMgaW1tZWRpYXRlbHkgc28gYSBzaW5nbGUgZWRpdC10aGVuLWNsb3NlXG4gICAgLy8gaXMgc2F2ZWQgYXQgb25jZTsgc3VzdGFpbmVkIHdyaXRlcyByYW1wIHRvd2FyZCB3cml0ZUZsdXNoTWF4RGVsYXlNcy5cbiAgICBwcml2YXRlIGFzeW5jIHN0cmVhbUFwcGVuZChmcmFtZWQ6IEJ1ZmZlciwgcm93czogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMucGVuZGluZ0FwcGVuZHMucHVzaCh7IGZyYW1lZCwgcm93cyB9KTtcbiAgICAgICAgY29uc3QgbWF4ID0gYnVsa0RhdGFiYXNlMlRpbWluZy53cml0ZUZsdXNoTWF4RGVsYXlNcztcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKG1heCA8PSAwIHx8IHRoaXMuY3VycmVudEZsdXNoRGVsYXkgPD0gMCB8fCBub3cgLSB0aGlzLmxhc3RXcml0ZVRpbWUgPiBtYXgpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFdyaXRlVGltZSA9IG5vdztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZsdXNoRGVsYXkgPSBtYXggPiAwID8gTWF0aC5taW4obWF4LCBXUklURV9GTFVTSF9GSVJTVF9TVEVQX01TKSA6IDA7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZsdXNoUGVuZGluZygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGFzdFdyaXRlVGltZSA9IG5vdztcbiAgICAgICAgaWYgKHRoaXMuZmx1c2hUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZsdXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5mbHVzaFRpbWVyID0gdW5kZWZpbmVkOyB2b2lkIHRoaXMuZmx1c2hQZW5kaW5nKCk7IH0sIHRoaXMuY3VycmVudEZsdXNoRGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudEZsdXNoRGVsYXkgPSBNYXRoLm1pbihtYXgsIHRoaXMuY3VycmVudEZsdXNoRGVsYXkgKiAyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmx1c2hQZW5kaW5nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmbHVzaFBlbmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmZsdXNoVGltZXIgIT09IHVuZGVmaW5lZCkgeyBjbGVhclRpbWVvdXQodGhpcy5mbHVzaFRpbWVyKTsgdGhpcy5mbHVzaFRpbWVyID0gdW5kZWZpbmVkOyB9XG4gICAgICAgIHRoaXMuZmx1c2hDaGFpbiA9IHRoaXMuZmx1c2hDaGFpbi50aGVuKCgpID0+IHRoaXMuZG9GbHVzaCgpKS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLm5hbWV9OiBzdHJlYW0gZmx1c2ggZmFpbGVkLCB3aWxsIHJldHJ5OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmx1c2hDaGFpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGRvRmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5wZW5kaW5nQXBwZW5kcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgY29uc3QgYmF0Y2ggPSB0aGlzLnBlbmRpbmdBcHBlbmRzLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkID0gQnVmZmVyLmNvbmNhdChiYXRjaC5tYXAocCA9PiBwLmZyYW1lZCkpO1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gYXdhaXQgdGhpcy5zdG9yYWdlKCk7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5nZXRTdHJlYW1GaWxlTmFtZSgpO1xuICAgICAgICBpZiAoZmlsZU5hbWUgIT09IHRoaXMuY3VycmVudFN0cmVhbUZpbGVOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdHJlYW1GaWxlTmFtZSA9IGZpbGVOYW1lO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RyZWFtRmlsZUJ5dGVzID0gMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBPbiBmYWlsdXJlIHRoZSB0aHJvdyBsZWF2ZXMgcGVuZGluZ0FwcGVuZHMgaW50YWN0IHNvIGEgbGF0ZXIgZmx1c2ggcmV0cmllcy5cbiAgICAgICAgYXdhaXQgc3RvcmFnZS5hcHBlbmQoZmlsZU5hbWUsIGNvbWJpbmVkKTtcbiAgICAgICAgLy8gTmV3IGVudHJpZXMgYXBwZW5kZWQgZHVyaW5nIHRoZSBhd2FpdCBhcmUgYWZ0ZXIgYGJhdGNoYCDigJQgcmVtb3ZpbmcgdGhlIGZyb250IGlzIGV4YWN0bHkgdGhlXG4gICAgICAgIC8vIGZsdXNoZWQgc2V0LlxuICAgICAgICB0aGlzLnBlbmRpbmdBcHBlbmRzLnNwbGljZSgwLCBiYXRjaC5sZW5ndGgpO1xuICAgICAgICB0aGlzLnN0cmVhbUJ5dGVzT25EaXNrICs9IGNvbWJpbmVkLmxlbmd0aDtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGJhdGNoKSB0aGlzLnN0cmVhbVJvd3NPbkRpc2sgKz0gcC5yb3dzO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdHJlYW1GaWxlQnl0ZXMgKz0gY29tYmluZWQubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RyZWFtRmlsZUJ5dGVzID49IGJ1bGtEYXRhYmFzZTJUaW1pbmcuc3RyZWFtRmlsZU1heEJ5dGVzKSB7XG4gICAgICAgICAgICB0aGlzLnN0cmVhbUZpbGVOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RyZWFtRmlsZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdHJlYW1GaWxlQnl0ZXMgPSAwO1xuICAgICAgICAgICAgdm9pZCB0aGlzLmZvbGRPd25TdHJlYW0oZmlsZU5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdHJlYW1GaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICAvLyBTZWFsIG91ciBjdXJyZW50IGZpbGUgb25jZSBpdCBhZ2VzIHBhc3QgdGhlIHNlYWwgdGhyZXNob2xkIOKAlCBubyBmaWxlIGlzIGV2ZXIgYXBwZW5kZWQgdG8gcGFzdFxuICAgICAgICAvLyBpdHMgc2VhbCBhZ2UsIHdoaWNoIGxldHMgYSBjb25zb2xpZGF0aW9uIHNhZmVseSBmb2xkIGl0IG9uY2UgYWdlZC5cbiAgICAgICAgaWYgKHRoaXMuc3RyZWFtRmlsZU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBwYXJzZVN0cmVhbUZpbGVOYW1lKHRoaXMuc3RyZWFtRmlsZU5hbWUpO1xuICAgICAgICAgICAgaWYgKGluZm8gJiYgRGF0ZS5ub3coKSAtIGluZm8udGltZXN0YW1wID49IGJ1bGtEYXRhYmFzZTJUaW1pbmcuc3RyZWFtU2VhbEFnZU1zKSB0aGlzLnN0cmVhbUZpbGVOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zdHJlYW1GaWxlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5zdHJlYW1GaWxlTmFtZSA9IGBzdHJlYW1fJHtEYXRlLm5vdygpfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX0ke1NUUkVBTV9FWFRFTlNJT059YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW1GaWxlTmFtZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZvbGRPd25TdHJlYW0oZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpbmZvID0gcGFyc2VTdHJlYW1GaWxlTmFtZShmaWxlTmFtZSk7XG4gICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5tZXJnZUZpbGVTZXQoW10sIFtpbmZvXSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5uYW1lfTogZm9sZGluZyBvd24gc3RyZWFtICR7ZmlsZU5hbWV9IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB1cGRhdGUoZW50cnk6IFBhcnRpYWw8VD4gJiB7IGtleTogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQmF0Y2goW2VudHJ5XSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZUJhdGNoKGVudHJpZXM6IChQYXJ0aWFsPFQ+ICYgeyBrZXk6IHN0cmluZyB9KVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghZW50cmllcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdm9pZCB0aGlzLnN5bmNTZXR1cCgpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGF3YWl0IHRoaXMuZW5zdXJlSW5kZXgoKTtcbiAgICAgICAgY29uc3QgcHJlc2VudDogVFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmxheUVudHJ5ID0gdGhpcy5yZWFkZXIub3ZlcmxheS5nZXQoZW50cnkua2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IG92ZXJsYXlFbnRyeSA/IG92ZXJsYXlFbnRyeS52YWx1ZSAhPT0gREVMRVRFRCA6IGluZGV4LmtleXMuaGFzKGVudHJ5LmtleSk7XG4gICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLm5hbWV9LnVwZGF0ZToga2V5ICR7SlNPTi5zdHJpbmdpZnkoZW50cnkua2V5KX0gaXMgbm90IGluIHRoZSBjb2xsZWN0aW9uLCBpZ25vcmluZ2ApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJlc2VudC5wdXNoKGVudHJ5IGFzIHVua25vd24gYXMgVCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXNlbnQubGVuZ3RoKSBhd2FpdCB0aGlzLndyaXRlQmF0Y2gocHJlc2VudCk7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIGZpbGUgbGlzdGluZ3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgcHJpdmF0ZSBhc3luYyBsaXN0RmlsZXMoKTogUHJvbWlzZTx7IGJ1bGtGaWxlczogQnVsa0ZpbGVJbmZvW107IHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdIH0+IHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IGF3YWl0IHRoaXMuc3RvcmFnZSgpO1xuICAgICAgICBjb25zdCBuYW1lcyA9IGF3YWl0IHN0b3JhZ2UuZ2V0S2V5cygpO1xuICAgICAgICAvLyBBIGNvbnN1bWVkLW1lcmdlIGlucHV0IGlzIGhpZGRlbiBmcm9tIHJlYWRzIHRoZSBpbnN0YW50IGl0cyBkZWxldGlvbiBtYXJrZXIgZXhpc3RzIOKAlCB0aGF0J3NcbiAgICAgICAgLy8gd2hhdCBzdG9wcyBpdCBmcm9tIGJlaW5nIHJlLXJlYWQgYW5kIHJlLW1lcmdlZC4gUGh5c2ljYWwgZGVsZXRpb24gKyBtYXJrZXIgY2xlYW51cCBydW5zIG9uIGFcbiAgICAgICAgLy8gdGhyb3R0bGUgKG5vdCBpbmxpbmUpIHNvIGEgcmVhZCBpc24ndCBzbG93ZWQgYnkgaXQuXG4gICAgICAgIGNvbnN0IG1hcmtlcnMgPSBhd2FpdCByZWFkRGVsZXRlTWFya2VycyhzdG9yYWdlLCBuYW1lcyk7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkID0gbWFya2VyRXhjbHVzaW9ucyhtYXJrZXJzKTtcbiAgICAgICAgaWYgKG1hcmtlcnMubGVuZ3RoKSB2b2lkIHRoaXMucHJvY2Vzc01hcmtlcnMoKTtcbiAgICAgICAgY29uc3QgYnVsa0ZpbGVzOiBCdWxrRmlsZUluZm9bXSA9IFtdO1xuICAgICAgICBjb25zdCBzdHJlYW1GaWxlczogU3RyZWFtRmlsZUluZm9bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgbmFtZXMpIHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlZC5oYXMobikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKG4uZW5kc1dpdGgoRklMRV9FWFRFTlNJT04pKSB7IGNvbnN0IHAgPSBwYXJzZUZpbGVOYW1lKG4pOyBpZiAocCkgYnVsa0ZpbGVzLnB1c2gocCk7IH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG4uZW5kc1dpdGgoU1RSRUFNX0VYVEVOU0lPTikpIHsgY29uc3QgcCA9IHBhcnNlU3RyZWFtRmlsZU5hbWUobik7IGlmIChwKSBzdHJlYW1GaWxlcy5wdXNoKHApOyB9XG4gICAgICAgIH1cbiAgICAgICAgYnVsa0ZpbGVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGlmIChhLnRpbWVzdGFtcCAhPT0gYi50aW1lc3RhbXApIHJldHVybiBiLnRpbWVzdGFtcCAtIGEudGltZXN0YW1wO1xuICAgICAgICAgICAgcmV0dXJuIGEuZmlsZU5hbWUgPCBiLmZpbGVOYW1lICYmIDEgfHwgYS5maWxlTmFtZSA+IGIuZmlsZU5hbWUgJiYgLTEgfHwgMDtcbiAgICAgICAgfSk7XG4gICAgICAgIHNvcnQoc3RyZWFtRmlsZXMsIGYgPT4gZi50aW1lc3RhbXApO1xuICAgICAgICByZXR1cm4geyBidWxrRmlsZXMsIHN0cmVhbUZpbGVzIH07XG4gICAgfVxuXG4gICAgLy8gVGhyb3R0bGVkIG1hcmtlciBob3VzZWtlZXBpbmc6IGRlbGV0ZSBpbnB1dHMgd2hvc2UgcmVwbGFjZW1lbnQgb3V0cHV0cyBoYXZlIGxhbmRlZCAob3Igd2hvc2VcbiAgICAvLyBtYXJrZXIgaGFzIGFnZWQgb3V0KSBhbmQgcmV0aXJlIGZ1bGZpbGxlZCBtYXJrZXJzLiBUcmlnZ2VyZWQgZnJvbSBsaXN0RmlsZXMsIHNvIGl0J3MgZ2F0ZWQgdG9cbiAgICAvLyBhdm9pZCBhIGRlbGV0ZSBzdG9ybSB1bmRlciBoZWF2eSByZWFkcy5cbiAgICBwcml2YXRlIHByb2Nlc3NNYXJrZXJzID0gdGhyb3R0bGVGdW5jdGlvbigzMCAqIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IGF3YWl0IHRoaXMuc3RvcmFnZSgpO1xuICAgICAgICBjb25zdCBuYW1lcyA9IGF3YWl0IHN0b3JhZ2UuZ2V0S2V5cygpO1xuICAgICAgICBjb25zdCBtYXJrZXJzID0gYXdhaXQgcmVhZERlbGV0ZU1hcmtlcnMoc3RvcmFnZSwgbmFtZXMpO1xuICAgICAgICBpZiAobWFya2Vycy5sZW5ndGgpIGF3YWl0IHByb2Nlc3NEZWxldGVNYXJrZXJzKHRoaXMubmFtZSwgc3RvcmFnZSwgbWFya2VycywgbmFtZXMpO1xuICAgIH0pO1xuXG4gICAgcHJpdmF0ZSBhc3luYyB3cml0ZUJ1bGtGaWxlKHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IGF3YWl0IHRoaXMuc3RvcmFnZSgpO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXh0RmlsZVRpbWUoKTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgdGltZXMgPSByb3dzLm1hcCgoKSA9PiBub3cpO1xuICAgICAgICBmb3IgKGNvbnN0IGJ1aWx0IG9mIGJ1aWxkRmlsZUJ1ZmZlcihyb3dzLCB0aW1lcykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBuZXdGaWxlTmFtZSh0aW1lc3RhbXApO1xuICAgICAgICAgICAgYXdhaXQgc3RvcmFnZS5zZXQobmFtZSwgZW5jb2RlQ29tcHJlc3NlZEJsb2NrcyhidWlsdC5idWZmZXIpKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnRyaWdnZXJSZWJ1aWxkKCk7XG4gICAgICAgIHZvaWQgdGhpcy5tYXliZU1lcmdlKCk7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIG1lcmdlIHBvbGljeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAvLyBDYWxsZWQgYm90aCBwZXJpb2RpY2FsbHkgKHZpc2liaWxpdHkgdGltZXIpIGFuZCBvbiB3cml0ZXMgKHdpdGggdGhlIHN0cmVhbU5lZWRzRm9sZCBnYXRlIHNvIGFcbiAgICAvLyBzbWFsbCB3cml0ZSBkb2Vzbid0IGRyYWcgdGhlIG1lcmdlIHRocm91Z2gpLiBUaGUgbWVyZ2VJbkZsaWdodCBjaGVjayBpbiB0cnlNZXJnZU5vdyBza2lwcyBhbnlcbiAgICAvLyBjYWxsIHRoYXQgYXJyaXZlcyB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyBzdGlsbCBydW5uaW5nIOKAlCBzbyA1LW1pbiB0aW1lciB0aWNrcyBkb24ndCBwaWxlIHVwLlxuICAgIHByaXZhdGUgYXN5bmMgbWF5YmVNZXJnZShvcHRzOiB7IG9ubHlJZlN0cmVhbUhlYXZ5PzogYm9vbGVhbiB9ID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCFhd2FpdCB0aGlzLmF1dG9tYXRpY0NvbXBhY3Rpb25BbGxvd2VkKCkpIHJldHVybjtcbiAgICAgICAgaWYgKG9wdHMub25seUlmU3RyZWFtSGVhdnkgJiYgIXRoaXMuc3RyZWFtTmVlZHNGb2xkKCkpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudHJ5TWVyZ2VUaHJvdHRsZWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGAke3RoaXMubmFtZX06IGJhY2tncm91bmQgbWVyZ2UgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgdGhlIFwid2UgZGlkbid0IG1lcmdlXCIgcmVzdWx0IGFuZCBsb2cgaXQgKHRocm90dGxlZCDigJQgc2VlIE1FUkdFX1NLSVBfTE9HX0lOVEVSVkFMX01TKS4gRm9yXG4gICAgLy8gbG9jayByZWFzb25zIHRoZSBsb2cgYW5kIHJlc3VsdCBpbmNsdWRlIHRoZSBob2xkZXIgYW5kIHRpbWUgdW50aWwgdGhlIGxvY2sgZ29lcyBzdGFsZS5cbiAgICBwcml2YXRlIGFzeW5jIG1lcmdlU2tpcChyZWFzb246IE1lcmdlU2tpcFJlYXNvbik6IFByb21pc2U8TWVyZ2VBdHRlbXB0UmVzdWx0PiB7XG4gICAgICAgIGxldCBsb2NrOiBNZXJnZUxvY2tJbmZvIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAocmVhc29uID09PSBcInRhYkxvY2tIZWxkXCIpIHtcbiAgICAgICAgICAgIGxvY2sgPSBwZWVrTWVyZ2VMb2NrKHRoaXMubmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVhc29uID09PSBcImZpbGVMb2NrSGVsZFwiKSB7XG4gICAgICAgICAgICBsb2NrID0gYXdhaXQgcGVla01lcmdlRmlsZUxvY2soYXdhaXQgdGhpcy5zdG9yYWdlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5sYXN0TWVyZ2VTa2lwTG9nTXMgPj0gTUVSR0VfU0tJUF9MT0dfSU5URVJWQUxfTVMpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdE1lcmdlU2tpcExvZ01zID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IGRldGFpbCA9IGxvY2sgJiYgYCAoaGVsZCBieSAke2xvY2suaG9sZGVySWR9LCBleHBpcmVzIGluICR7Zm9ybWF0VGltZShNYXRoLm1heCgwLCBsb2NrLmV4cGlyZXNJbk1zKSl9KWAgfHwgXCJcIjtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke2JsdWUodGhpcy5uYW1lKX0gJHttYWdlbnRhKFwibWVyZ2VcIil9IHNraXBwZWQ6ICR7cmVhc29ufSR7ZGV0YWlsfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG1lcmdlZDogZmFsc2UsIHNraXBSZWFzb246IHJlYXNvbiwgbG9ja0hvbGRlcklkOiBsb2NrPy5ob2xkZXJJZCwgbG9ja0V4cGlyZXNJbk1zOiBsb2NrPy5leHBpcmVzSW5NcyB9O1xuICAgIH1cblxuICAgIC8vIEFjcXVpcmUgYm90aCBtZXJnZSBsb2NrcyAoc2FtZS10YWIgbWVyZ2VJbkZsaWdodCwgY3Jvc3MtdGFiIGxvY2FsU3RvcmFnZSwgY3Jvc3MtcHJvY2VzcyBmaWxlKSxcbiAgICAvLyBydW4gdGhlIHBhc3MsIHJlbGVhc2UuIFNraXBzICh3aXRoIHRoZSByZWFzb24pIGluc3RlYWQgb2Ygd2FpdGluZyB3aGVuIGFueSBvZiB0aGVtIGlzIGhlbGQuXG4gICAgcHJpdmF0ZSBhc3luYyBydW5Mb2NrZWRNZXJnZShydW46ICgpID0+IFByb21pc2U8TWVyZ2VBdHRlbXB0UmVzdWx0Pik6IFByb21pc2U8TWVyZ2VBdHRlbXB0UmVzdWx0PiB7XG4gICAgICAgIGlmICh0aGlzLm1lcmdlSW5GbGlnaHQpIHJldHVybiBhd2FpdCB0aGlzLm1lcmdlU2tpcChcIm1lcmdlSW5GbGlnaHRcIik7XG4gICAgICAgIGlmICghdHJ5QWNxdWlyZU1lcmdlTG9jayh0aGlzLm5hbWUsIHdyaXRlcklkKSkgcmV0dXJuIGF3YWl0IHRoaXMubWVyZ2VTa2lwKFwidGFiTG9ja0hlbGRcIik7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCB0aGlzLnN0b3JhZ2UoKTtcbiAgICAgICAgY29uc3QgaGF2ZUZpbGVMb2NrID0gYXdhaXQgdHJ5QWNxdWlyZU1lcmdlRmlsZUxvY2soc3RvcmFnZSwgd3JpdGVySWQpO1xuICAgICAgICBpZiAoIWhhdmVGaWxlTG9jaykge1xuICAgICAgICAgICAgcmVsZWFzZU1lcmdlTG9jayh0aGlzLm5hbWUsIHdyaXRlcklkKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1lcmdlU2tpcChcImZpbGVMb2NrSGVsZFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lcmdlSW5GbGlnaHQgPSB0cnVlO1xuICAgICAgICBjb25zdCBzdG9wSGVhcnRiZWF0ID0gc3RhcnRNZXJnZUZpbGVMb2NrSGVhcnRiZWF0KHN0b3JhZ2UsIHdyaXRlcklkKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBydW4oKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHN0b3BIZWFydGJlYXQoKTtcbiAgICAgICAgICAgIGF3YWl0IHJlbGVhc2VNZXJnZUZpbGVMb2NrKHN0b3JhZ2UsIHdyaXRlcklkKTtcbiAgICAgICAgICAgIHJlbGVhc2VNZXJnZUxvY2sodGhpcy5uYW1lLCB3cml0ZXJJZCk7XG4gICAgICAgICAgICB0aGlzLm1lcmdlSW5GbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBiYWNrZ3JvdW5kIHBhdGggKG1heWJlTWVyZ2UpIGdvZXMgdGhyb3VnaCB0aGlzIHNvIHdyaXRlIGJ1cnN0cyBjb2FsZXNjZTsgZXhwbGljaXQgY2FsbGVycyB1c2VcbiAgICAvLyB0cnlNZXJnZU5vdyBkaXJlY3RseSBhbmQgZ2V0IHRoZSBwZXItY2FsbCByZXN1bHQuXG4gICAgcHJpdmF0ZSB0cnlNZXJnZVRocm90dGxlZCA9IHRocm90dGxlRnVuY3Rpb24oMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnRyeU1lcmdlTm93KCk7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgYXN5bmMgdHJ5TWVyZ2VOb3coKTogUHJvbWlzZTxNZXJnZUF0dGVtcHRSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuTG9ja2VkTWVyZ2UoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0gYXdhaXQgdGhpcy50ZXN0TWVyZ2VJTlRFUk5BTF9ET19OT1RfQ0FMTCgpO1xuICAgICAgICAgICAgcmV0dXJuIHsgbWVyZ2VkIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21wYWN0KCk6IFByb21pc2U8TWVyZ2VBdHRlbXB0UmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJ1bkxvY2tlZE1lcmdlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmx1c2hQZW5kaW5nKCk7XG4gICAgICAgICAgICBzeW5jQnJvYWRjYXN0U2VhbCh0aGlzLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5zdHJlYW1GaWxlTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHsgYnVsa0ZpbGVzLCBzdHJlYW1GaWxlcyB9ID0gYXdhaXQgdGhpcy5saXN0RmlsZXMoKTtcbiAgICAgICAgICAgIGlmIChidWxrRmlsZXMubGVuZ3RoICsgc3RyZWFtRmlsZXMubGVuZ3RoIDwgMSkgcmV0dXJuIGF3YWl0IHRoaXMubWVyZ2VTa2lwKFwibm90aGluZ1RvTWVyZ2VcIik7XG4gICAgICAgICAgICAvLyBjb21wYWN0KCkgZm9sZHMgZXZlcnkgZmlsZSDihpIgbm8gb2xkZXIgZGF0YSBzdXJ2aXZlcyBvdXRzaWRlIGl0IOKGkiBzdXJ2aXZpbmcgdG9tYnN0b25lc1xuICAgICAgICAgICAgLy8gY2FuIGJlIGRyb3BwZWQgKG5vdGhpbmcgbGVmdCB0byBzdXBwcmVzcykuXG4gICAgICAgICAgICBjb25zdCBtZXJnZWQgPSBhd2FpdCB0aGlzLm1lcmdlRmlsZVNldChidWxrRmlsZXMsIHN0cmVhbUZpbGVzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1lcmdlZCB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbWVyZ2UodGltZUxvOiBudW1iZXIsIHRpbWVIaTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aW1lSGkgPj0gRGF0ZS5ub3coKSkgeyBzeW5jQnJvYWRjYXN0U2VhbCh0aGlzLm5hbWUpOyB0aGlzLnN0cmVhbUZpbGVOYW1lID0gdW5kZWZpbmVkOyB9XG4gICAgICAgIGNvbnN0IHsgYnVsa0ZpbGVzLCBzdHJlYW1GaWxlcyB9ID0gYXdhaXQgdGhpcy5saXN0RmlsZXMoKTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IGF3YWl0IFByb21pc2UuYWxsKGJ1bGtGaWxlcy5tYXAoZiA9PiB0aGlzLnJlYWRCdWxrSGVhZGVyKGYuZmlsZU5hbWUpKSk7XG4gICAgICAgIGNvbnN0IHNlbEJ1bGsgPSBidWxrRmlsZXMuZmlsdGVyKChmLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoID0gaGVhZGVyc1tpXTtcbiAgICAgICAgICAgIGlmICghaCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFoLm1heFRpbWUgJiYgIWgubWluVGltZSkgcmV0dXJuIHRpbWVMbyA8PSAwO1xuICAgICAgICAgICAgcmV0dXJuIGgubWluVGltZSA8PSB0aW1lSGkgJiYgaC5tYXhUaW1lID49IHRpbWVMbztcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNlbFN0cmVhbSA9IHN0cmVhbUZpbGVzLmZpbHRlcihmID0+XG4gICAgICAgICAgICBmLnRpbWVzdGFtcCA8PSB0aW1lSGkgJiYgZi50aW1lc3RhbXAgKyBidWxrRGF0YWJhc2UyVGltaW5nLnN0cmVhbVNlYWxBZ2VNcyA+PSB0aW1lTG8pO1xuICAgICAgICBpZiAoc2VsQnVsay5sZW5ndGggKyBzZWxTdHJlYW0ubGVuZ3RoIDwgMikgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLm1lcmdlRmlsZVNldChzZWxCdWxrLCBzZWxTdHJlYW0sIHRpbWVMbyA8PSAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlYWRCdWxrSGVhZGVyKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEJ1bGtIZWFkZXJJbmZvIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlID0gYXdhaXQgdGhpcy5zdG9yYWdlKCk7XG4gICAgICAgICAgICBjb25zdCByYXcgPSBhd2FpdCBtYWtlUmF3R2V0UmFuZ2Uoc3RvcmFnZSwgZmlsZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgZmlsZUlkID0gbnVsbEpvaW4odGhpcy5uYW1lLCBmaWxlTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCBibG9ja0NhY2hlLm9wZW4oZmlsZUlkLCByYXcuc2l6ZSwgcmF3LnJhd0dldFJhbmdlKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBsb2FkQnVsa0hlYWRlcihvcGVuZWQuZ2V0UmFuZ2UsIG9wZW5lZC51bmNvbXByZXNzZWRTaXplKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaWxlTG9naWNhbFNpemUoZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlID0gYXdhaXQgdGhpcy5zdG9yYWdlKCk7XG4gICAgICAgICAgICBjb25zdCByYXcgPSBhd2FpdCBtYWtlUmF3R2V0UmFuZ2Uoc3RvcmFnZSwgZmlsZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgZmlsZUlkID0gbnVsbEpvaW4odGhpcy5uYW1lLCBmaWxlTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCBibG9ja0NhY2hlLm9wZW4oZmlsZUlkLCByYXcuc2l6ZSwgcmF3LnJhd0dldFJhbmdlKTtcbiAgICAgICAgICAgIHJldHVybiBvcGVuZWQudW5jb21wcmVzc2VkU2l6ZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQSBidWxrIGZpbGUgdGhhdCB3b24ndCBsb2FkIGlzIGVpdGhlciBhbiBpbi1wcm9ncmVzcyB3cml0ZSAocmVjZW50KSBvciBhIGNyYXNoZWQgcGFydGlhbCB3cml0ZVxuICAgIC8vIChzdGFsZSkuIFdhcm4gd2hpbGUgcmVjZW50LCBkZWxldGUgb25jZSBjbGVhcmx5IGFiYW5kb25lZCDigJQgZGVsZXRpbmcgaXMgc2FmZSBiZWNhdXNlIHRoZSB3cml0ZVxuICAgIC8vIHByb3RvY29sIGFsd2F5cyBsYW5kcyB0aGUgcmVwbGFjZW1lbnQgYmVmb3JlIHJlbW92aW5nIHRoZSBmaWxlIGl0IHN1cGVyc2VkZXMuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVVbnJlYWRhYmxlRmlsZShmaWxlOiBCdWxrRmlsZUluZm8sIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBhZ2VNcyA9IERhdGUubm93KCkgLSBmaWxlLnRpbWVzdGFtcDtcbiAgICAgICAgaWYgKGFnZU1zID4gU1RBTEVfREVMRVRFX01TKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5uYW1lfTogZGVsZXRpbmcgc3RhbGUgdW5yZWFkYWJsZSBidWxrIGZpbGUgJHtmaWxlLmZpbGVOYW1lfSAoJHtNYXRoLnJvdW5kKGFnZU1zIC8gODY0MDAwMDApfWQgb2xkKTogJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yYWdlID0gYXdhaXQgdGhpcy5zdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgc3RvcmFnZS5yZW1vdmUoZmlsZS5maWxlTmFtZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChyZW1vdmVFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLm5hbWV9OiBmYWlsZWQgdG8gZGVsZXRlICR7ZmlsZS5maWxlTmFtZX06ICR7KHJlbW92ZUVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLm5hbWV9OiBza2lwcGluZyB1bnJlYWRhYmxlIGJ1bGsgZmlsZSAke2ZpbGUuZmlsZU5hbWV9IChyZWNlbnQgLSBtYXkgYmUgaW4tcHJvZ3Jlc3MpOiAke21lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIG9uZSBtZXJnZSBwcmltaXRpdmUuIFJlYWRzICsgcGxhbnMgKyB3cml0ZXMgb3V0cHV0cyBiZWZvcmUgZGVsZXRpbmcgYW55IGlucHV0LCBzbyBhIGNyYXNoXG4gICAgLy8gbGVhdmVzIGR1cGxpY2F0ZXMgKG5leHQgbWVyZ2UgZGVkdXBlcykgcmF0aGVyIHRoYW4gYSBnYXAuIEFmdGVyIHRoZSBmaWxlIHNldCBjaGFuZ2VzIG9uIGRpc2ssXG4gICAgLy8gd2UgdHJpZ2dlciBhbiBpbmRleCByZWJ1aWxkICsgYXRvbWljIHN3YXA7IG9uY2Ugc3dhcCBjb21wbGV0ZXMsIHRoZSBjb25zdW1lZCBmaWxlcycgYmxvY2stY2FjaGVcbiAgICAvLyBlbnRyaWVzIGFyZSBldmljdGVkIChubyBjb25zdW1lciBjYW4gYXNrIGZvciB0aGVtIG5vdykuXG4gICAgLy9cbiAgICAvLyBTZXJpYWxpemVkOiBmb2xkT3duU3RyZWFtICsgbWVyZ2UodGltZUxvLCB0aW1lSGkpICsgdGVzdE1lcmdlJ3MgcnVuTWVyZ2UgYWxsIGhpdCB0aGlzOyB0aGUgbG9ja1xuICAgIC8vIGNvdmVycyB0cnlNZXJnZU5vdy9jb21wYWN0IGJ1dCB0aG9zZSB0d28gcGF0aHMgYnlwYXNzIGl0LiBydW5JblNlcmlhbCBxdWV1ZXMgc28gdGhleSBuZXZlclxuICAgIC8vIGNvbGxpZGUgb24gdGhlIGZpbGUgc2V0LlxuICAgIHByaXZhdGUgbWVyZ2VGaWxlU2V0ID0gcnVuSW5TZXJpYWwoYXN5bmMgKGJ1bGtGaWxlczogQnVsa0ZpbGVJbmZvW10sIHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdLCBpbmNsdWRlc09sZGVzdCA9IGZhbHNlLCBmb3JjZURlbGV0ZVN0cmVhbXMgPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICB0aGlzLnJlYWRlci5iZWdpbkNvbXBhY3Rpb24oKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1lcmdlRmlsZVNldElubmVyKGJ1bGtGaWxlcywgc3RyZWFtRmlsZXMsIGluY2x1ZGVzT2xkZXN0LCBmb3JjZURlbGV0ZVN0cmVhbXMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5yZWFkZXIuZW5kQ29tcGFjdGlvbigpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIGFzeW5jIG1lcmdlRmlsZVNldElubmVyKGJ1bGtGaWxlczogQnVsa0ZpbGVJbmZvW10sIHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdLCBpbmNsdWRlc09sZGVzdDogYm9vbGVhbiwgZm9yY2VEZWxldGVTdHJlYW1zOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCB0aGlzLnN0b3JhZ2UoKTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gbmV4dEZpbGVUaW1lKCk7XG5cbiAgICAgICAgLy8gVGhlIGNhbGxlcidzIGJ1bGtGaWxlcyBjYW1lIGZyb20gYSBgbGlzdEZpbGVzKClgIHNuYXBzaG90LiBCZXR3ZWVuIHRoZW4gYW5kIG5vdyBhbnkgZmlsZVxuICAgICAgICAvLyBjb3VsZCBiZSBnb25lIChhbm90aGVyIHRhYidzIGRlZmVycmVkIGRlbGV0ZSwgbWFudWFsIGNsZWFudXApLiBUaGUgc3ViQ2FjaGVzIHJlYWRlciBmb3IgYVxuICAgICAgICAvLyBkZWxldGVkIGZpbGUgaXMgc2lsZW50bHkgc3RhbGUg4oCUIGl0cyBpbi1tZW1vcnkgbWV0YWRhdGEgc3RpbGwgcmVzb2x2ZXMsIGJ1dCB0aGUgdmVyeSBuZXh0XG4gICAgICAgIC8vIGdldFJhbmdlIGFnYWluc3QgZGlzayB0aHJvd3MuIFJlLXZlcmlmeSBleGlzdGVuY2UgdXAtZnJvbnQgYW5kIGRyb3AgdGhlIGNhY2hlIGVudHJ5IGZvclxuICAgICAgICAvLyBhbnl0aGluZyB0aGF0IHZhbmlzaGVkLCBzbyB3ZSBkb24ndCBldmVuIHRyeSB0byBwbGFuIGFyb3VuZCBhIGdob3N0IGZpbGUuXG4gICAgICAgIGNvbnN0IHZlcmlmaWVkQnVsa0ZpbGVzID0gKGF3YWl0IFByb21pc2UuYWxsKGJ1bGtGaWxlcy5tYXAoYXN5bmMgZiA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBzdG9yYWdlLmdldEluZm8oZi5maWxlTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbmZvKSB7IHRoaXMuc3ViQ2FjaGVzLmJ1bGsuZGVsZXRlKGYuZmlsZU5hbWUpOyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YkNhY2hlcy5idWxrLmRlbGV0ZShmLmZpbGVOYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSkpLmZpbHRlcigoZik6IGYgaXMgQnVsa0ZpbGVJbmZvID0+IGYgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGJ1bGtGaWxlcyA9IHZlcmlmaWVkQnVsa0ZpbGVzO1xuXG4gICAgICAgIGNvbnN0IGNvbnN1bWVkQnVsazogQnVsa0ZpbGVJbmZvW10gPSBbXTtcbiAgICAgICAgY29uc3QgYnVsa1JlYWRlcnM6IEJhc2VCdWxrRGF0YWJhc2VSZWFkZXJbXSA9IFtdO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChidWxrRmlsZXMubWFwKGFzeW5jIGYgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gYXdhaXQgbG9hZEZpbGVSZWFkZXIodGhpcy5uYW1lLCBzdG9yYWdlLCBmLCB0aGlzLnN1YkNhY2hlcy5idWxrKTtcbiAgICAgICAgICAgICAgICBidWxrUmVhZGVycy5wdXNoKHIpO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVkQnVsay5wdXNoKGYpO1xuICAgICAgICAgICAgfSBjYXRjaCB7IC8qIG1pc3Npbmcgb3IgY29ycnVwdCDigJQgc2tpcDsgaXRzIGRhdGEgbGl2ZXMgaW4gYW5vdGhlciBmaWxlICovIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IHN0cmVhbURhdGEgPSBhd2FpdCBsb2FkU3RyZWFtRW50cmllcyh0aGlzLm5hbWUsIHN0b3JhZ2UsIHN0cmVhbUZpbGVzLCB0aGlzLnN1YkNhY2hlcy5zdHJlYW0pO1xuICAgICAgICBjb25zdCBvcmRlcmVkID0gb3JkZXJTdHJlYW1FbnRyaWVzKHN0cmVhbURhdGEuZW50cmllcyk7XG4gICAgICAgIGNvbnN0IHN0cmVhbVJlYWRlciA9IG9yZGVyZWQubGVuZ3RoID8gc3RyZWFtUmVhZGVyRnJvbUVudHJpZXMob3JkZXJlZCwgMCkucmVhZGVyIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IHJlYWRlcnMgPSBzdHJlYW1SZWFkZXIgPyBbc3RyZWFtUmVhZGVyLCAuLi5idWxrUmVhZGVyc10gOiBidWxrUmVhZGVycztcbiAgICAgICAgY29uc3QgcmVhZGVyTmFtZXMgPSBzdHJlYW1SZWFkZXIgPyBbXCIoc3RyZWFtcylcIiwgLi4uY29uc3VtZWRCdWxrLm1hcChmID0+IGYuZmlsZU5hbWUpXSA6IGNvbnN1bWVkQnVsay5tYXAoZiA9PiBmLmZpbGVOYW1lKTtcbiAgICAgICAgaWYgKCFyZWFkZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGlucHV0cyA9IFtcbiAgICAgICAgICAgIC4uLmF3YWl0IFByb21pc2UuYWxsKGNvbnN1bWVkQnVsay5tYXAoYXN5bmMgZiA9PiAoeyBuYW1lOiBmLmZpbGVOYW1lLCBzaXplOiAoYXdhaXQgc3RvcmFnZS5nZXRJbmZvKGYuZmlsZU5hbWUpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCkpPy5zaXplID8/IDAgfSkpKSxcbiAgICAgICAgICAgIC4uLnN0cmVhbUZpbGVzLm1hcChmID0+ICh7IG5hbWU6IGYuZmlsZU5hbWUsIHNpemU6IHN0cmVhbURhdGEuc2l6ZXMuZ2V0KGYuZmlsZU5hbWUpID8/IDAgfSkpLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBpblRvdGFsID0gaW5wdXRzLnJlZHVjZSgoYSwgZikgPT4gYSArIGYuc2l6ZSwgMCk7XG4gICAgICAgIGNvbnN0IG1lcmdlU3RhcnRNcyA9IERhdGUubm93KCk7XG4gICAgICAgIC8vIENvbGxlY3QgZWFjaCBzdGVwIGluc3RlYWQgb2YgbG9nZ2luZyBpdCBsaXZlOyBlbWl0dGVkIGF0IHRoZSBlbmQgYXMgb25lXG4gICAgICAgIC8vIGV4cGFuZGVkIGNvbnNvbGUuZ3JvdXAgc28gYSBtZXJnZSB0YWtlcyBvbmUgY29sbGFwc2libGUgYmxvY2ssIG5vdCBhXG4gICAgICAgIC8vIHNjcmVlbmZ1bCAoYW5kIG5ldmVyIHRoZSBwZXItZmlsZSBuYW1lIGR1bXAgaXQgdXNlZCB0byBzcGV3KS5cbiAgICAgICAgY29uc3Qgc3RlcHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIC8vIEVhY2ggc3RlcCByZWNvcmRzIHRoZSB0aW1lIHNwZW50IHNpbmNlIHRoZSBwcmV2aW91cyBzdGVwIGluIGJsdWUgYXQgdGhlIGZyb250LCBzbyBjYWxsZXJzIGNhblxuICAgICAgICAvLyBqdXN0IGRlc2NyaWJlIHdoYXQgdGhleSBkaWQgYW5kIG5vdCBib3RoZXIgbWVhc3VyaW5nL2Zvcm1hdHRpbmcgZWxhcHNlZCB0aW1lcyB0aGVtc2VsdmVzLlxuICAgICAgICBsZXQgbGFzdFN0ZXBNcyA9IG1lcmdlU3RhcnRNcztcbiAgICAgICAgY29uc3QgbG9nID0gKGxpbmU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBsaW5lRm9ybWF0dGVkID0gYCR7Ymx1ZShmb3JtYXRUaW1lKG5vdyAtIGxhc3RTdGVwTXMpKX0gJHtsaW5lfWA7XG4gICAgICAgICAgICAvLyBETyBOT1QgUkVNT1ZFIFRISVMgTE9HISBPYnZpb3VzbHksIHdlIHNob3VsZCBiZSBsb2dnaW5nIGFzIHdlIHJ1biwgb3IgZWxzZSB3ZSBkb24ndCBnZXQgcHJvZ3Jlc3MuIFdoeSB3b3VsZCB3ZSBzdG9wIGdldHRpbmcgcHJvZ3Jlc3M/IFByb2dyZXNzIGlzIGFsbW9zdCBtb3JlIGltcG9ydGFudCB0aGFuIHNob3dpbmcgYSBzdW1tYXJ5IGF0IHRoZSBlbmQuLi5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGxpbmVGb3JtYXR0ZWQpO1xuICAgICAgICAgICAgc3RlcHMucHVzaChsaW5lRm9ybWF0dGVkKTtcbiAgICAgICAgICAgIGxhc3RTdGVwTXMgPSBub3c7XG4gICAgICAgIH07XG4gICAgICAgIGxvZyhgJHttYWdlbnRhKFwicmVhZFwiKX06ICR7aW5wdXRzLmxlbmd0aH0gaW5wdXQgZmlsZShzKSwgJHtmbXRCeXRlcyhpblRvdGFsKX1gKTtcblxuICAgICAgICBjb25zdCBuZXdOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgbWVyZ2VSZXN1bHQgPSBhd2FpdCBydW5QbGFubmVkTWVyZ2Uoe1xuICAgICAgICAgICAgc291cmNlczogcmVhZGVycyxcbiAgICAgICAgICAgIHNvdXJjZU5hbWVzOiByZWFkZXJOYW1lcyxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25OYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsb2csXG4gICAgICAgICAgICB3cml0ZUZpbGU6IGFzeW5jIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm5hbWUgPSBuZXdGaWxlTmFtZSh0aW1lc3RhbXApO1xuICAgICAgICAgICAgICAgIGF3YWl0IHN0b3JhZ2Uuc2V0KGZuYW1lLCBlbmNvZGVDb21wcmVzc2VkQmxvY2tzKGRhdGEpKTtcbiAgICAgICAgICAgICAgICBuZXdOYW1lcy5wdXNoKGZuYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaXplID0gKGF3YWl0IHN0b3JhZ2UuZ2V0SW5mbyhmbmFtZSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKSk/LnNpemUgPz8gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBuYW1lOiBmbmFtZSwgc2l6ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY2FycmllZERlbGV0ZXMgPSBpbmNsdWRlc09sZGVzdCA/IDAgOiBtZXJnZVJlc3VsdC5jYXJyaWVkRGVsZXRlcy5zaXplO1xuICAgICAgICBjb25zdCBvdXROYW1lcyA9IFsuLi5uZXdOYW1lc107XG4gICAgICAgIGlmIChjYXJyaWVkRGVsZXRlcykge1xuICAgICAgICAgICAgY29uc3QgY2FycnlOYW1lID0gYHN0cmVhbV8ke0RhdGUubm93KCl9XyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApfSR7U1RSRUFNX0VYVEVOU0lPTn1gO1xuICAgICAgICAgICAgYXdhaXQgc3RvcmFnZS5zZXQoY2FycnlOYW1lLCBmcmFtZURlbGV0ZXMoWy4uLm1lcmdlUmVzdWx0LmNhcnJpZWREZWxldGVzXS5tYXAoKFtrZXksIHRpbWVdKSA9PiAoeyB0aW1lLCBrZXkgfSkpKSk7XG4gICAgICAgICAgICBvdXROYW1lcy5wdXNoKGNhcnJ5TmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdXRwdXRzID0gYXdhaXQgUHJvbWlzZS5hbGwob3V0TmFtZXMubWFwKGFzeW5jIG4gPT4gKHsgbmFtZTogbiwgc2l6ZTogKGF3YWl0IHN0b3JhZ2UuZ2V0SW5mbyhuKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpKT8uc2l6ZSA/PyAwIH0pKSk7XG4gICAgICAgIGNvbnN0IG91dFRvdGFsID0gb3V0cHV0cy5yZWR1Y2UoKGEsIGYpID0+IGEgKyBmLnNpemUsIDApO1xuICAgICAgICBsb2coYCR7bWFnZW50YShcIndyb3RlXCIpfTogJHtvdXRwdXRzLmxlbmd0aH0gb3V0cHV0IGZpbGUocyksICR7Zm10Qnl0ZXMob3V0VG90YWwpfSR7Y2FycmllZERlbGV0ZXMgPyBgLCAke2NhcnJpZWREZWxldGVzfSB0b21ic3RvbmVzIGNhcnJpZWRgIDogXCJcIn1gKTtcblxuICAgICAgICBjb25zb2xlLmdyb3VwKGAke2JsdWUodGhpcy5uYW1lKX0gJHttYWdlbnRhKFwibWVyZ2VcIil9OiAke2ZtdEJ5dGVzKGluVG90YWwpfSAtPiAke2ZtdEJ5dGVzKG91dFRvdGFsKX0gKCR7aW5wdXRzLmxlbmd0aH0tPiR7b3V0cHV0cy5sZW5ndGh9IGZpbGVzKSBpbiAke2Zvcm1hdFRpbWUoRGF0ZS5ub3coKSAtIG1lcmdlU3RhcnRNcyl9YCk7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBzdGVwcykgY29uc29sZS5sb2cobGluZSk7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcblxuICAgICAgICAvLyBPbmx5IHRoZSBzb3VyY2VzIHJ1blBsYW5uZWRNZXJnZSBhY3R1YWxseSB1c2VkIGNhbiBiZSByZXRpcmVkIOKAlCBhIHNvdXJjZSBpdCBkcm9wcGVkIG1pZC1wbGFuXG4gICAgICAgIC8vIChmaWxlIGdvbmUsIGNvcnJ1cHRpb24pIHN0aWxsIGhvbGRzIGRhdGEgd2UgY291bGRuJ3QgbWVyZ2UgaW4sIHNvIGxlYXZlIGl0IG9uIGRpc2sgYW5kIGxldCBhXG4gICAgICAgIC8vIGZ1dHVyZSBtZXJnZSByZS1hdHRlbXB0IGl0LlxuICAgICAgICBjb25zdCB1c2VkQ29uc3VtZWRCdWxrID0gY29uc3VtZWRCdWxrLmZpbHRlcihmID0+IG1lcmdlUmVzdWx0LnVzZWRTb3VyY2VOYW1lcy5oYXMoZi5maWxlTmFtZSkpO1xuICAgICAgICBjb25zdCB1c2VkU3RyZWFtRmlsZXMgPSBzdHJlYW1GaWxlcy5maWx0ZXIoZiA9PiBtZXJnZVJlc3VsdC51c2VkU291cmNlTmFtZXMuaGFzKGYuZmlsZU5hbWUpIHx8IG1lcmdlUmVzdWx0LnVzZWRTb3VyY2VOYW1lcy5oYXMoXCIoc3RyZWFtcylcIikpO1xuICAgICAgICAvLyBBIHN0cmVhbSBtYXkgc3RpbGwgYmUgYXBwZW5kZWQgdG8gYWZ0ZXIgd2UgcmVhZCBpdCAodGhlIHdyaXRlciBoYXNuJ3Qgc2VhbGVkL21vdmVkIG9uKTsgb25seVxuICAgICAgICAvLyByZXRpcmUgc3RyZWFtcyBjYW5EZWxldGVTdHJlYW0gY2xlYXJzIOKAlCB0aGUgcmVzdCBzdGF5IGxpdmUgYW5kIGEgbGF0ZXIgbWVyZ2UgcmUtZm9sZHMgdGhlbVxuICAgICAgICAvLyBvbmNlIHNlYWxlZC4gQnVsayBmaWxlcyBhcmUgaW1tdXRhYmxlLCBzbyBhIHVzZWQgb25lIGlzIGFsd2F5cyBzYWZlIHRvIHJldGlyZS5cbiAgICAgICAgY29uc3QgZGVsZXRhYmxlU3RyZWFtczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIHVzZWRTdHJlYW1GaWxlcykge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHRoaXMuY2FuRGVsZXRlU3RyZWFtKGYsIERhdGUubm93KCksIHN0cmVhbURhdGEuc2l6ZXMsIGZvcmNlRGVsZXRlU3RyZWFtcykpIGRlbGV0YWJsZVN0cmVhbXMucHVzaChmLmZpbGVOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWxldGVGaWxlcyA9IFsuLi51c2VkQ29uc3VtZWRCdWxrLm1hcChmID0+IGYuZmlsZU5hbWUpLCAuLi5kZWxldGFibGVTdHJlYW1zXTtcblxuICAgICAgICAvLyBXcml0ZSBhIGRlbGV0aW9uIG1hcmtlciBpbnN0ZWFkIG9mIGRlbGV0aW5nIGlubGluZS4gRnJvbSB0aGUgbmV4dCByZWFkIG9uLCBsaXN0RmlsZXMgaGlkZXNcbiAgICAgICAgLy8gdGhlc2UgaW5wdXRzIChzbyB0aGV5J3JlIG5ldmVyIHJlLW1lcmdlZCDigJQgdGhlIGxvb3AgZml4KSwgYW5kIHByb2Nlc3NNYXJrZXJzIHJlbW92ZXMgdGhlbVxuICAgICAgICAvLyBwaHlzaWNhbGx5IG9uY2UgdGhlIG91dHB1dHMgaGF2ZSBsYW5kZWQgb3IgdGhlIG1hcmtlciBhZ2VzIG91dC4gTWFya2VyIEJFRk9SRSB0aGUgcmVidWlsZCBzb1xuICAgICAgICAvLyB0aGUgZnJlc2hseS1zd2FwcGVkIGluZGV4IGFscmVhZHkgZXhjbHVkZXMgdGhlIHJldGlyZWQgaW5wdXRzLlxuICAgICAgICBpZiAoZGVsZXRlRmlsZXMubGVuZ3RoKSBhd2FpdCB3cml0ZURlbGV0ZU1hcmtlcihzdG9yYWdlLCB7IGRlbGV0ZUZpbGVzLCByZXBsYWNlZEJ5OiBvdXROYW1lcyB9KTtcblxuICAgICAgICAvLyBSZWJ1aWxkICsgc3dhcCBzbyB0aGUgaW5kZXggc2VlcyB0aGUgbmV3IG91dHB1dHMgYW5kIGRyb3BzIHRoZSByZXRpcmVkIGlucHV0cy4gQmxvY2stY2FjaGVcbiAgICAgICAgLy8gZXZpY3Rpb24gZm9yIHRoZSBkcm9wcGVkIGlucHV0cyBoYXBwZW5zIGhlcmUgKHRoZXkncmUgbm8gbG9uZ2VyIGluIHRoZSBuZXcgaW5kZXgncyBmaWxlU2V0KS5cbiAgICAgICAgYXdhaXQgdGhpcy50cmlnZ2VyUmVidWlsZCgpO1xuICAgICAgICByZXR1cm4gbmV3TmFtZXMubGVuZ3RoID4gMCB8fCBjYXJyaWVkRGVsZXRlcyA+IDA7XG4gICAgfVxuXG4gICAgLy8gQSBzdHJlYW0gaXMgc2FmZSB0byBkZWxldGUgaWZmIG5vIHdyaXRlciB3aWxsIGFwcGVuZCB0byBpdCBhZ2FpbjogaXQncyBhZ2VkIHBhc3QgdGhlIHNlYWwgYWdlXG4gICAgLy8gKHdyaXRlciBoYXMgcHJvdmFibHkgc3dpdGNoZWQgZmlsZXMpIE9SIGNyb3NzLXRhYiBzeW5jIGlzIG9uIEFORCBpdHMgc2l6ZSBkaWRuJ3QgY2hhbmdlIHdoaWxlXG4gICAgLy8gd2UgcmVhZCBpdC4gRWxzZSBsZWF2ZSBpdCDigJQgdGhlIGRhdGEgaXMgYWxzbyBpbiB0aGUgbmV3IGJ1bGsgZmlsZTsgYSBsYXRlciBtZXJnZSBkZWxldGVzIGl0XG4gICAgLy8gb25jZSBhZ2VkLlxuICAgIHByaXZhdGUgYXN5bmMgY2FuRGVsZXRlU3RyZWFtKGY6IFN0cmVhbUZpbGVJbmZvLCBub3c6IG51bWJlciwgc2l6ZXM6IE1hcDxzdHJpbmcsIG51bWJlcj4sIGZvcmNlID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKG5vdyAtIGYudGltZXN0YW1wID49IGJ1bGtEYXRhYmFzZTJUaW1pbmcuc3RyZWFtU2VhbEFnZU1zKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKCFpc1N5bmNTdXBwb3J0ZWQoKSAmJiAhZm9yY2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVhZFNpemUgPSBzaXplcy5nZXQoZi5maWxlTmFtZSk7XG4gICAgICAgIGlmIChyZWFkU2l6ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGxldCBpbmZvO1xuICAgICAgICB0cnkgeyBpbmZvID0gYXdhaXQgKGF3YWl0IHRoaXMuc3RvcmFnZSgpKS5nZXRJbmZvKGYuZmlsZU5hbWUpOyB9IGNhdGNoIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHJldHVybiAhIWluZm8gJiYgaW5mby5zaXplID09PSByZWFkU2l6ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG1lcmdlU3BhY2luZ0RlbGF5KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGJ1bGtEYXRhYmFzZTJUaW1pbmcubWVyZ2VTcGFjaW5nTXM7XG4gICAgICAgIGlmICh0b3RhbCA8PSAwKSByZXR1cm4gdHJ5QWNxdWlyZU1lcmdlTG9jayh0aGlzLm5hbWUsIHdyaXRlcklkKTtcbiAgICAgICAgY29uc3Qgc3RlcCA9IDE1ICogMTAwMDtcbiAgICAgICAgbGV0IHdhaXRlZCA9IDA7XG4gICAgICAgIHdoaWxlICh3YWl0ZWQgPCB0b3RhbCkge1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ociA9PiBzZXRUaW1lb3V0KHIsIE1hdGgubWluKHN0ZXAsIHRvdGFsIC0gd2FpdGVkKSkpO1xuICAgICAgICAgICAgd2FpdGVkICs9IHN0ZXA7XG4gICAgICAgICAgICBpZiAoIXRyeUFjcXVpcmVNZXJnZUxvY2sodGhpcy5uYW1lLCB3cml0ZXJJZCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUaGUgbWVyZ2UgcG9saWN5ICh0d28gcGFzc2VzLCBzcGFjZWQgYnkgbWVyZ2VTcGFjaW5nTXMpOlxuICAgIC8vICAgMSkgQ29uc29saWRhdGUgcmVjZW50IGZyYWdtZW50YXRpb246IHRha2UgbmV3ZXN0IGZpbGVzIHVwIHRvIH5GSVJTVF9NRVJHRV9CWVRFUzsgbWVyZ2UgdGhlbVxuICAgIC8vICAgICAgaW50byBvbmUgd2hlbiB0aGV5IGZyYWdtZW50IG9yIHNwYW4gdG9vIHdpZGUgYSB0aW1lIHJhbmdlLlxuICAgIC8vICAgMikgS2V5LXN0cmF0aWZ5OiB3YWxrIGFsbCBrZXlzIGluIH5LRVlfR1JPVVBfQllURVMgZ3JvdXBzOyByZXdyaXRlIGdyb3VwcyB3aG9zZSBkdXBsaWNhdGUta2V5XG4gICAgLy8gICAgICBmcmFjdGlvbiBwYXNzZXMgRFVQX1RIUkVTSE9MRCwgaGlnaGVzdCBmaXJzdC5cbiAgICAvLyBVc2UgdHJ5TWVyZ2UgaW5zdGVhZFxuICAgIHByaXZhdGUgYXN5bmMgdGVzdE1lcmdlSU5URVJOQUxfRE9fTk9UX0NBTEwoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGxldCBtZXJnZWQgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgdGhpcy5mbHVzaFBlbmRpbmcoKTtcbiAgICAgICAgY29uc3QgcnVuTWVyZ2UgPSBhc3luYyAoYnVsazogQnVsa0ZpbGVJbmZvW10sIHN0cmVhbTogU3RyZWFtRmlsZUluZm9bXSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICAgICAgaWYgKG1lcmdlZCAmJiAhYXdhaXQgdGhpcy5tZXJnZVNwYWNpbmdEZWxheSgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5tZXJnZUZpbGVTZXQoYnVsaywgc3RyZWFtKSkgbWVyZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEhhcmQgc3RyZWFtIGxpbWl0OiBhIHN0cmVhbSB0aGlzIGJpZyBtYWtlcyBldmVyeSByZWFkIHB1bGwgYSBodWdlIGZpbGUg4oaSIGZvbGQgQUxMIG9mIGl0IG5vdyxcbiAgICAgICAgLy8gZm9yY2UtZGVsZXRlIChjYW5EZWxldGVTdHJlYW0gc3RpbGwgcmVxdWlyZXMgc2l6ZS1zdGFibGUsIHNvIGFuIGFjdGl2ZSB3cml0ZXIgbmV2ZXIgbG9zZXMgZGF0YSkuXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RyZWFtRmlsZXMgfSA9IGF3YWl0IHRoaXMubGlzdEZpbGVzKCk7XG4gICAgICAgICAgICBpZiAoc3RyZWFtRmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmFnZSA9IGF3YWl0IHRoaXMuc3RvcmFnZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemVzID0gYXdhaXQgUHJvbWlzZS5hbGwoc3RyZWFtRmlsZXMubWFwKGFzeW5jIGYgPT4geyB0cnkgeyByZXR1cm4gKGF3YWl0IHN0b3JhZ2UuZ2V0SW5mbyhmLmZpbGVOYW1lKSk/LnNpemUgPz8gMDsgfSBjYXRjaCB7IHJldHVybiAwOyB9IH0pKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbFN0cmVhbUJ5dGVzID0gc2l6ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsU3RyZWFtQnl0ZXMgPiBidWxrRGF0YWJhc2UyVGltaW5nLnN0cmVhbUZvbGRIYXJkTGltaXRCeXRlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtibHVlKHRoaXMubmFtZSl9ICR7bWFnZW50YShcImZvbGRcIil9IHN0cmVhbSB0aWVyICR7Zm10Qnl0ZXModG90YWxTdHJlYW1CeXRlcyl9IG92ZXIgaGFyZCBsaW1pdCAke2ZtdEJ5dGVzKGJ1bGtEYXRhYmFzZTJUaW1pbmcuc3RyZWFtRm9sZEhhcmRMaW1pdEJ5dGVzKX0gLSBmb2xkaW5nIGFsbCBzdHJlYW1zIG5vd2ApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5tZXJnZUZpbGVTZXQoW10sIHN0cmVhbUZpbGVzLCBmYWxzZSwgdHJ1ZSkpIG1lcmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFzcyAxOiBjb25zb2xpZGF0ZSByZWNlbnQuIE9ubHkgc2VhbCB3aGVuIGNyb3NzLXRhYiBzeW5jIGNhbiBmb2xkIHJlY2VudCBzdHJlYW1zIOKAlCBpbiBOb2RlXG4gICAgICAgIC8vIGNhbkRlbGV0ZVN0cmVhbSBuZWVkcyB0aGVtIGFnZWQgYW55d2F5LCBzbyBzZWFsaW5nIHdvdWxkIGp1c3QgZnJhZ21lbnQgc3RyZWFtcyBldmVyeSBwYXNzLlxuICAgICAgICBjb25zdCBmb2xkUmVjZW50U3RyZWFtcyA9IGlzU3luY1N1cHBvcnRlZCgpO1xuICAgICAgICBpZiAoZm9sZFJlY2VudFN0cmVhbXMpIHtcbiAgICAgICAgICAgIHN5bmNCcm9hZGNhc3RTZWFsKHRoaXMubmFtZSk7XG4gICAgICAgICAgICB0aGlzLnN0cmVhbUZpbGVOYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHsgYnVsa0ZpbGVzLCBzdHJlYW1GaWxlcyB9ID0gYXdhaXQgdGhpcy5saXN0RmlsZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1bGtNZXRhID0gYXdhaXQgUHJvbWlzZS5hbGwoYnVsa0ZpbGVzLm1hcChhc3luYyBmID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbc2l6ZSwgaGVhZGVyXSA9IGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmZpbGVMb2dpY2FsU2l6ZShmLmZpbGVOYW1lKSwgdGhpcy5yZWFkQnVsa0hlYWRlcihmLmZpbGVOYW1lKV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGtpbmQ6IFwiYnVsa1wiIGFzIGNvbnN0LCBmaWxlOiBmLCBieXRlczogc2l6ZSA/PyAwLCB0aW1lOiBoZWFkZXI/Lm1heFRpbWUgfHwgZi50aW1lc3RhbXAgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHN0cmVhbU1ldGE6IHsga2luZDogXCJzdHJlYW1cIjsgZmlsZTogU3RyZWFtRmlsZUluZm87IGJ5dGVzOiBudW1iZXI7IHRpbWU6IG51bWJlciB9W10gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBzdHJlYW1GaWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFnZWQgPSBEYXRlLm5vdygpIC0gZi50aW1lc3RhbXAgPj0gYnVsa0RhdGFiYXNlMlRpbWluZy5zdHJlYW1TZWFsQWdlTXM7XG4gICAgICAgICAgICAgICAgaWYgKCFmb2xkUmVjZW50U3RyZWFtcyAmJiAhYWdlZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IGJ5dGVzID0gMDtcbiAgICAgICAgICAgICAgICB0cnkgeyBjb25zdCBpbmZvID0gYXdhaXQgKGF3YWl0IHRoaXMuc3RvcmFnZSgpKS5nZXRJbmZvKGYuZmlsZU5hbWUpOyBieXRlcyA9IGluZm8/LnNpemUgPz8gMDsgfSBjYXRjaCB7IGJ5dGVzID0gMDsgfVxuICAgICAgICAgICAgICAgIHN0cmVhbU1ldGEucHVzaCh7IGtpbmQ6IFwic3RyZWFtXCIsIGZpbGU6IGYsIGJ5dGVzLCB0aW1lOiBmLnRpbWVzdGFtcCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLmJ1bGtNZXRhLCAuLi5zdHJlYW1NZXRhXS5zb3J0KChhLCBiKSA9PiBiLnRpbWUgLSBhLnRpbWUpO1xuICAgICAgICAgICAgY29uc3QgcmVjZW50OiB0eXBlb2YgaXRlbXMgPSBbXTtcbiAgICAgICAgICAgIGxldCByZWNlbnRCeXRlcyA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgcmVjZW50LnB1c2goaXQpO1xuICAgICAgICAgICAgICAgIHJlY2VudEJ5dGVzICs9IGl0LmJ5dGVzO1xuICAgICAgICAgICAgICAgIGlmIChyZWNlbnRCeXRlcyA+PSBGSVJTVF9NRVJHRV9CWVRFUykgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGFuID0gcmVjZW50Lmxlbmd0aCA/IHJlY2VudFswXS50aW1lIC0gcmVjZW50W3JlY2VudC5sZW5ndGggLSAxXS50aW1lIDogMDtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VudFN0cmVhbUJ5dGVzID0gcmVjZW50LnJlZHVjZSgoYSwgaXQpID0+IGEgKyAoaXQua2luZCA9PT0gXCJzdHJlYW1cIiA/IGl0LmJ5dGVzIDogMCksIDApO1xuICAgICAgICAgICAgY29uc3QgaGVhdnlTdHJlYW0gPSByZWNlbnRTdHJlYW1CeXRlcyA+IGJ1bGtEYXRhYmFzZTJUaW1pbmcuc3RyZWFtRm9sZFRyaWdnZXJCeXRlcztcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJlZCA9XG4gICAgICAgICAgICAgICAgcmVjZW50Lmxlbmd0aCA+PSAyICYmIChyZWNlbnQubGVuZ3RoID4gYnVsa0RhdGFiYXNlMlRpbWluZy5maXJzdE1lcmdlVHJpZ2dlckZpbGVzIHx8IHNwYW4gPiBidWxrRGF0YWJhc2UyVGltaW5nLmZpcnN0TWVyZ2VUcmlnZ2VyUmFuZ2VNcylcbiAgICAgICAgICAgICAgICB8fCBoZWF2eVN0cmVhbTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYiA9IHJlY2VudC5maWx0ZXIoaSA9PiBpLmtpbmQgPT09IFwiYnVsa1wiKS5tYXAoaSA9PiAoaS5maWxlIGFzIEJ1bGtGaWxlSW5mbykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJzID0gcmVjZW50LmZpbHRlcihpID0+IGkua2luZCA9PT0gXCJzdHJlYW1cIikubWFwKGkgPT4gKGkuZmlsZSBhcyBTdHJlYW1GaWxlSW5mbykpO1xuICAgICAgICAgICAgICAgIGlmICghYXdhaXQgcnVuTWVyZ2UocmIsIHJzKSkgcmV0dXJuIG1lcmdlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdob2xlLXRpZXIgZGVkdXAgc2hvcnQtY2lyY3VpdCAoYmV0d2VlbiBQYXNzIDEgYW5kIHRoZSBwZXItZ3JvdXAgUGFzcyAyKTogd2hlbiB0aGUgYnVsayB0aWVyXG4gICAgICAgIC8vIGlzIGJpZyBlbm91Z2ggQU5EIG1vc3RseSBkdXBsaWNhdGVzLCBmb2xkIGV2ZXJ5IGJ1bGsgZmlsZSBpbiBvbmUgbWVyZ2UuIEF2b2lkcyB0aGUgcGVyLWdyb3VwXG4gICAgICAgIC8vIHdhbGsncyA1LW1pbiBzcGFjaW5nIMOXIE4tZ3JvdXBzIGxhdGVuY3kuXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHsgYnVsa0ZpbGVzIH0gPSBhd2FpdCB0aGlzLmxpc3RGaWxlcygpO1xuICAgICAgICAgICAgaWYgKGJ1bGtGaWxlcy5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCB0aGlzLnN0b3JhZ2UoKTtcbiAgICAgICAgICAgICAgICBsZXQgdG90YWxCeXRlcyA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsU2xvdHMgPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgYnVsa0ZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBhd2FpdCBsb2FkRmlsZVJlYWRlcih0aGlzLm5hbWUsIHN0b3JhZ2UsIGYsIHRoaXMuc3ViQ2FjaGVzLmJ1bGspO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxCeXRlcyArPSByZWFkZXIudG90YWxCeXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsU2xvdHMgKz0gcmVhZGVyLmtleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIHJlYWRlci5rZXlzKSB1bmlxdWVLZXlzLmFkZChrKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7IC8qIHNraXAgdW5yZWFkYWJsZSAqLyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGR1cEZyYWN0aW9uID0gdG90YWxTbG90cyA/ICh0b3RhbFNsb3RzIC0gdW5pcXVlS2V5cy5zaXplKSAvIHRvdGFsU2xvdHMgOiAwO1xuICAgICAgICAgICAgICAgIGlmICh0b3RhbEJ5dGVzID4gREVEVVBfVFJJR0dFUl9CWVRFUyAmJiBkdXBGcmFjdGlvbiA+IERFRFVQX1RSSUdHRVJfRlJBQ1RJT04pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7Ymx1ZSh0aGlzLm5hbWUpfSAke21hZ2VudGEoXCJkZWR1cFwiKX06ICR7Zm10Qnl0ZXModG90YWxCeXRlcyl9IGFjcm9zcyAke2J1bGtGaWxlcy5sZW5ndGh9IGJ1bGsgZmlsZShzKSwgJHtNYXRoLnJvdW5kKGR1cEZyYWN0aW9uICogMTAwKX0lIGR1cGxpY2F0ZSBrZXktc2xvdHMgLSBmb2xkaW5nIGFsbCBhdCBvbmNlYCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXdhaXQgcnVuTWVyZ2UoYnVsa0ZpbGVzLCBbXSkpIHJldHVybiBtZXJnZWQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFzcyAyOiBrZXktc3RyYXRpZmllZCBkZWR1cGxpY2F0aW9uLiBEaXNqb2ludCBrZXkgcmFuZ2VzIOKGkiBvbmUgZ3JvdXAncyBtZXJnZSBkb2Vzbid0XG4gICAgICAgIC8vIGNoYW5nZSBhbm90aGVyJ3MgZHVwbGljYXRpb247IHJlLXNlbGVjdCBlYWNoIGdyb3VwJ3MgZmlsZXMgYXQgbWVyZ2UgdGltZSAoc2V0IHNoaWZ0cykuXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IGF3YWl0IHRoaXMuZmluZER1cGxpY2F0ZUdyb3VwcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGcgb2YgZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGJ1bGtGaWxlcyB9ID0gYXdhaXQgdGhpcy5saXN0RmlsZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChidWxrRmlsZXMubWFwKGYgPT4gdGhpcy5yZWFkQnVsa0hlYWRlcihmLmZpbGVOYW1lKSkpO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBGaWxlcyA9IGJ1bGtGaWxlcy5maWx0ZXIoKGYsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBoID0gaGVhZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIWgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoaC5taW5LZXkgPT09IHVuZGVmaW5lZCB8fCBoLm1heEtleSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaC5taW5LZXkgPD0gZy5oaSAmJiBoLm1heEtleSA+PSBnLmxvO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZ3JvdXBGaWxlcy5sZW5ndGggPj0gMikgeyBpZiAoIWF3YWl0IHJ1bk1lcmdlKGdyb3VwRmlsZXMsIFtdKSkgcmV0dXJuIG1lcmdlZDsgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZpbmREdXBsaWNhdGVHcm91cHMoKTogUHJvbWlzZTx7IGxvOiBzdHJpbmc7IGhpOiBzdHJpbmc7IGR1cDogbnVtYmVyIH1bXT4ge1xuICAgICAgICBjb25zdCB7IGJ1bGtGaWxlcyB9ID0gYXdhaXQgdGhpcy5saXN0RmlsZXMoKTtcbiAgICAgICAgaWYgKGJ1bGtGaWxlcy5sZW5ndGggPCAyKSByZXR1cm4gW107XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCB0aGlzLnN0b3JhZ2UoKTtcbiAgICAgICAgY29uc3QgaW5mb3MgPSBhd2FpdCBQcm9taXNlLmFsbChidWxrRmlsZXMubWFwKGFzeW5jIGYgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBhd2FpdCBsb2FkRmlsZVJlYWRlcih0aGlzLm5hbWUsIHN0b3JhZ2UsIGYsIHRoaXMuc3ViQ2FjaGVzLmJ1bGspO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGtleXM6IHJlYWRlci5rZXlzLCBieXRlczogcmVhZGVyLnRvdGFsQnl0ZXMgfTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGtleXM6IFtdIGFzIHN0cmluZ1tdLCBieXRlczogMCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGtleUNvdW50ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgbGV0IHRvdGFsU2xvdHMgPSAwLCB0b3RhbEJ5dGVzID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIGluZm9zKSB7XG4gICAgICAgICAgICB0b3RhbEJ5dGVzICs9IGkuYnl0ZXM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgaS5rZXlzKSB7IGtleUNvdW50LnNldChrLCAoa2V5Q291bnQuZ2V0KGspIHx8IDApICsgMSk7IHRvdGFsU2xvdHMrKzsgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0b3RhbFNsb3RzID09PSAwKSByZXR1cm4gW107XG4gICAgICAgIGNvbnN0IGJ5dGVzUGVyU2xvdCA9IHRvdGFsQnl0ZXMgLyB0b3RhbFNsb3RzO1xuICAgICAgICBjb25zdCBzb3J0ZWRLZXlzID0gWy4uLmtleUNvdW50LmtleXMoKV0uc29ydCgpO1xuICAgICAgICBjb25zdCBncm91cHM6IHsgbG86IHN0cmluZzsgaGk6IHN0cmluZzsgZHVwOiBudW1iZXIgfVtdID0gW107XG4gICAgICAgIGxldCBnU3RhcnQgPSAwLCBnQnl0ZXMgPSAwLCBnU2xvdHMgPSAwLCBnVW5pcXVlID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0ga2V5Q291bnQuZ2V0KHNvcnRlZEtleXNbaV0pID8/IDA7XG4gICAgICAgICAgICBnQnl0ZXMgKz0gYyAqIGJ5dGVzUGVyU2xvdDsgZ1Nsb3RzICs9IGM7IGdVbmlxdWUgKz0gMTtcbiAgICAgICAgICAgIGlmIChnQnl0ZXMgPj0gS0VZX0dST1VQX0JZVEVTIHx8IGkgPT09IHNvcnRlZEtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGR1cCA9IChnU2xvdHMgLSBnVW5pcXVlKSAvIGdTbG90cztcbiAgICAgICAgICAgICAgICBpZiAoZHVwID4gRFVQX1RIUkVTSE9MRCkgZ3JvdXBzLnB1c2goeyBsbzogc29ydGVkS2V5c1tnU3RhcnRdLCBoaTogc29ydGVkS2V5c1tpXSwgZHVwIH0pO1xuICAgICAgICAgICAgICAgIGdTdGFydCA9IGkgKyAxOyBnQnl0ZXMgPSAwOyBnU2xvdHMgPSAwOyBnVW5pcXVlID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBncm91cHMuc29ydCgoYSwgYikgPT4gYi5kdXAgLSBhLmR1cCk7XG4gICAgICAgIHJldHVybiBncm91cHM7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIHJlYWRzIOKAlCBmb3J3YXJkZWQgdG8gQnVsa0RhdGFiYXNlUmVhZGVyLCB3aXRoIHJlYnVpbGQtb24tbWlzc2luZyByZXRyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBwdWJsaWMgYXN5bmMgZ2V0U2luZ2xlRmllbGQ8QyBleHRlbmRzIGtleW9mIFQ+KGtleTogc3RyaW5nLCBjb2x1bW46IEMpOiBQcm9taXNlPFRbQ10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdm9pZCB0aGlzLnN5bmNTZXR1cCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkV2l0aFJldHJ5KCgpID0+IHRoaXMucmVhZGVyLmdldFNpbmdsZUZpZWxkKGtleSwgY29sdW1uKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFNpbmdsZUZpZWxkT2JqPEMgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IHN0cmluZywgY29sdW1uOiBDKTogUHJvbWlzZTx7IGtleTogc3RyaW5nOyB2YWx1ZTogVFtDXTsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdm9pZCB0aGlzLnN5bmNTZXR1cCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkV2l0aFJldHJ5KCgpID0+IHRoaXMucmVhZGVyLmdldFNpbmdsZUZpZWxkT2JqKGtleSwgY29sdW1uKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldENvbHVtbjxDIGV4dGVuZHMga2V5b2YgVD4oY29sdW1uOiBDKTogUHJvbWlzZTx7IGtleTogc3RyaW5nOyB2YWx1ZTogVFtDXTsgdGltZTogbnVtYmVyIH1bXT4ge1xuICAgICAgICB2b2lkIHRoaXMuc3luY1NldHVwKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRXaXRoUmV0cnkoKCkgPT4gdGhpcy5yZWFkZXIuZ2V0Q29sdW1uKGNvbHVtbikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRLZXlzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgdm9pZCB0aGlzLnN5bmNTZXR1cCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkV2l0aFJldHJ5KCgpID0+IHRoaXMucmVhZGVyLmdldEtleXMoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNpbmdsZUZpZWxkU3luYzxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IFRbQ10gfCB1bmRlZmluZWQge1xuICAgICAgICB2b2lkIHRoaXMuc3luY1NldHVwKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRlci5nZXRTaW5nbGVGaWVsZFN5bmMoa2V5LCBjb2x1bW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTaW5nbGVGaWVsZE9ialN5bmM8QyBleHRlbmRzIGtleW9mIFQ+KGtleTogc3RyaW5nLCBjb2x1bW46IEMpOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogVFtDXTsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgICAgICB2b2lkIHRoaXMuc3luY1NldHVwKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRlci5nZXRTaW5nbGVGaWVsZE9ialN5bmMoa2V5LCBjb2x1bW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5TeW5jPEMgZXh0ZW5kcyBrZXlvZiBUPihjb2x1bW46IEMpOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogVFtDXTsgdGltZTogbnVtYmVyIH1bXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHZvaWQgdGhpcy5zeW5jU2V0dXAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZGVyLmdldENvbHVtblN5bmMoY29sdW1uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNGaWVsZExvYWRlZFN5bmM8QyBleHRlbmRzIGtleW9mIFQ+KGtleTogc3RyaW5nLCBjb2x1bW46IEMpOiBib29sZWFuIHtcbiAgICAgICAgdm9pZCB0aGlzLnN5bmNTZXR1cCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkZXIuaXNGaWVsZExvYWRlZFN5bmMoa2V5LCBjb2x1bW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0NvbHVtbkxvYWRlZFN5bmM8QyBleHRlbmRzIGtleW9mIFQ+KGNvbHVtbjogQyk6IGJvb2xlYW4ge1xuICAgICAgICB2b2lkIHRoaXMuc3luY1NldHVwKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRlci5pc0NvbHVtbkxvYWRlZFN5bmMoY29sdW1uKTtcbiAgICB9XG5cbiAgICAvLyBSZWFjdGl2ZTogdHJ1ZSB3aGlsZSBhIG1lcmdlIGlzIHJld3JpdGluZyB0aGlzIGNvbGxlY3Rpb24ncyBmaWxlcy4gVXNlIHRoaXMgaW4gVUkgdG8gc2hvdyBhXG4gICAgLy8gXCJjb21wYWN0aW5n4oCmXCIgaW5kaWNhdG9yLiBDb3VudHMgYm90aCBiYWNrZ3JvdW5kIG1lcmdlcyAobWF5YmVNZXJnZSkgYW5kIGV4cGxpY2l0IGNvbXBhY3QvbWVyZ2VcbiAgICAvLyBjYWxscy4gQmVjb21lcyBmYWxzZSBvbmNlIHRoZSBuZXcgaW5kZXggaXMgc3dhcHBlZCBpbiAodGhlIGRlZmVycmVkLWRlbGV0ZSB3aW5kb3cgaXMgTk9UIGNvdW50ZWQpLlxuICAgIHB1YmxpYyBpc0NvbXBhY3RpbmdTeW5jKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkZXIuaXNDb21wYWN0aW5nU3luYygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb2x1bW5JbmZvKCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGF3YWl0IHRoaXMuZW5zdXJlSW5kZXgoKTtcbiAgICAgICAgcmV0dXJuIGluZGV4LnJlYWRlci5jb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRLZXlTdGF0cygpOiBQcm9taXNlPHsgcmF3S2V5czogbnVtYmVyOyBmaW5hbEtleXM6IG51bWJlcjsgd2FzdGVkS2V5czogbnVtYmVyOyBkdXBsaWNhdGlvbjogbnVtYmVyOyByZWFkZXJzOiBudW1iZXIgfT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGF3YWl0IHRoaXMuZW5zdXJlSW5kZXgoKTtcbiAgICAgICAgY29uc3QgcmF3S2V5cyA9IGluZGV4LnJlYWRlci5yYXdLZXlDb3VudDtcbiAgICAgICAgY29uc3QgZmluYWxLZXlzID0gaW5kZXgucmVhZGVyLmtleXMubGVuZ3RoO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmF3S2V5cyxcbiAgICAgICAgICAgIGZpbmFsS2V5cyxcbiAgICAgICAgICAgIHdhc3RlZEtleXM6IHJhd0tleXMgLSBmaW5hbEtleXMsXG4gICAgICAgICAgICBkdXBsaWNhdGlvbjogZmluYWxLZXlzID8gcmF3S2V5cyAvIGZpbmFsS2V5cyA6IDAsXG4gICAgICAgICAgICByZWFkZXJzOiBpbmRleC5yZWFkZXIucmVhZGVyQ291bnQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFJlYWRlckluZm8oKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXdhaXQgdGhpcy5lbnN1cmVJbmRleCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm93Q291bnQ6IGluZGV4LnJlYWRlci5yb3dDb3VudCxcbiAgICAgICAgICAgIHRvdGFsQnl0ZXM6IGluZGV4LnJlYWRlci50b3RhbEJ5dGVzLFxuICAgICAgICAgICAga2V5Q291bnQ6IGluZGV4LnJlYWRlci5rZXlzLmxlbmd0aCxcbiAgICAgICAgICAgIHNhbXBsZUtleTogaW5kZXgucmVhZGVyLmtleXNbMF0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29sdW1uczogaW5kZXgucmVhZGVyLmNvbHVtbnMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbGVJbmZvKCk6IFByb21pc2U8QnVsa0ZpbGVJbmZvTGlzdGluZz4ge1xuICAgICAgICBjb25zdCB7IGJ1bGtGaWxlcywgc3RyZWFtRmlsZXMgfSA9IGF3YWl0IHRoaXMubGlzdEZpbGVzKCk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBhd2FpdCB0aGlzLnN0b3JhZ2UoKTtcbiAgICAgICAgY29uc3Qgc3RhdE9mID0gYXN5bmMgKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgc3RvcmFnZS5nZXRJbmZvKG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGJ5dGVzOiBpbmZvPy5zaXplID8/IDAsIGxhc3RNb2RpZmllZDogaW5mbz8ubGFzdE1vZGlmaWVkID8/IDAgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggeyByZXR1cm4geyBieXRlczogMCwgbGFzdE1vZGlmaWVkOiAwIH07IH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYnVsa0luZm9zID0gYXdhaXQgUHJvbWlzZS5hbGwoYnVsa0ZpbGVzLm1hcChhc3luYyBmID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBzdGF0T2YoZi5maWxlTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGYuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJidWxrXCIgYXMgY29uc3QsXG4gICAgICAgICAgICAgICAgYnl0ZXM6IHN0YXQuYnl0ZXMsXG4gICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBzdGF0Lmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICBnZXREZXRhaWxzOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJ1bGs6IHJlYWRlciBoYXMga2V5cyArIHBlci1yb3cga2V5VGltZXMgKyBoZWFkZXIgbWluVGltZS9tYXhUaW1lLiBDYWNoZWQsIHNvIGNoZWFwLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBhd2FpdCBsb2FkRmlsZVJlYWRlcih0aGlzLm5hbWUsIHN0b3JhZ2UsIGYsIHRoaXMuc3ViQ2FjaGVzLmJ1bGspO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBrZXlzOiByZWFkZXIua2V5cywgbWluVGltZTogcmVhZGVyLm1pblRpbWUsIG1heFRpbWU6IHJlYWRlci5tYXhUaW1lIH07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3Qgc3RyZWFtSW5mb3MgPSBhd2FpdCBQcm9taXNlLmFsbChzdHJlYW1GaWxlcy5tYXAoYXN5bmMgZiA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgc3RhdE9mKGYuZmlsZU5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmLmZpbGVOYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyZWFtXCIgYXMgY29uc3QsXG4gICAgICAgICAgICAgICAgYnl0ZXM6IHN0YXQuYnl0ZXMsXG4gICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBzdGF0Lmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICBnZXREZXRhaWxzOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0cmVhbTogbXVzdCBwYXJzZSB0aGUgZmlsZSB0byB3YWxrIGV2ZXJ5IGVudHJ5IOKAlCBoZWFkZXIgaGFzIG5vIGtleS90aW1lIGJvdW5kcy4gQ2FjaGVkLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgbG9hZFN0cmVhbUVudHJpZXModGhpcy5uYW1lLCBzdG9yYWdlLCBbZl0sIHRoaXMuc3ViQ2FjaGVzLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1pblRpbWUgPSBJbmZpbml0eSwgbWF4VGltZSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGRhdGEuZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUudGltZSA8IG1pblRpbWUpIG1pblRpbWUgPSBlLnRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS50aW1lID4gbWF4VGltZSkgbWF4VGltZSA9IGUudGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmVudHJ5LnJvdykga2V5cy5hZGQoZS5lbnRyeS5yb3cua2V5IGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmVudHJ5LmRlbGV0ZWRLZXkgIT09IHVuZGVmaW5lZCkga2V5cy5hZGQoZS5lbnRyeS5kZWxldGVkS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogWy4uLmtleXNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluVGltZTogbWluVGltZSA9PT0gSW5maW5pdHkgPyAwIDogbWluVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFRpbWU6IG1heFRpbWUgPT09IC1JbmZpbml0eSA/IDAgOiBtYXhUaW1lLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gWy4uLmJ1bGtJbmZvcywgLi4uc3RyZWFtSW5mb3NdO1xuICAgICAgICByZXR1cm4geyBmaWxlcywgY291bnQ6IGZpbGVzLmxlbmd0aCwgdG90YWxCeXRlczogZmlsZXMucmVkdWNlKChhLCBmKSA9PiBhICsgZi5ieXRlcywgMCkgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIEJ1bGtGaWxlRGV0YWlscyA9IHsga2V5czogc3RyaW5nW107IG1pblRpbWU6IG51bWJlcjsgbWF4VGltZTogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBCdWxrRmlsZUVudHJ5ID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBcImJ1bGtcIiB8IFwic3RyZWFtXCI7XG4gICAgYnl0ZXM6IG51bWJlcjtcbiAgICAvLyBGaWxlc3lzdGVtIG10aW1lIChtcyBzaW5jZSBlcG9jaCkg4oCUIDAgaWYgdGhlIHN0b3JhZ2UgbGF5ZXIgZGlkbid0IHJldHVybiBvbmUuXG4gICAgbGFzdE1vZGlmaWVkOiBudW1iZXI7XG4gICAgLy8gTGF6eTogcHVsbGVkIGZyb20gdGhlIGNhY2hlZCBzdWItcmVhZGVyIGZvciBidWxrIChmcmVlIGlmIGxvYWRlZCksIG9yIGZyb20gYSBwYXJzZSBvZiB0aGUgc3RyZWFtXG4gICAgLy8gZmlsZSAoc21hbGwg4oCUIHRpZXItMCBzaXplLWNhcHBlZCwgYWxzbyBjYWNoZWQpLiBDYWxsIG9ubHkgd2hlbiB5b3UgbmVlZCB0aGUgcGVyLWZpbGUgZGV0YWlsLlxuICAgIGdldERldGFpbHM6ICgpID0+IFByb21pc2U8QnVsa0ZpbGVEZXRhaWxzPjtcbn07XG5leHBvcnQgdHlwZSBCdWxrRmlsZUluZm9MaXN0aW5nID0geyBmaWxlczogQnVsa0ZpbGVFbnRyeVtdOyBjb3VudDogbnVtYmVyOyB0b3RhbEJ5dGVzOiBudW1iZXIgfTtcblxuIl19
1242
- /* _JS_SOURCE_HASH = "ef5f66046bc0509d546f9bee9eecb29c121087404f7a2a22182046161f48c827"; */
1242
+ /* _JS_SOURCE_HASH = "3b6d62958a073ea311c58075d9cba03308b546ab7e3884788c293653d91d8c95"; */
@@ -1,4 +1,4 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
1
+ "use strict";
2
2
  // File format (all integers little-endian):
3
3
  // u32 headerLength, then headerLength bytes of JSON: { rowCount, columns: [{ name, offset, length }] }, where offset is relative to the end of the header.
4
4
  // Each column blob is: u32 offsets[rowCount + 1] (byte offsets into the column's data section), u8 types[rowCount], then the data section (each value's bytes, concatenated).
@@ -510,4 +510,4 @@ async function loadBulkDatabase(config) {
510
510
  }
511
511
  exports.loadBulkDatabase = loadBulkDatabase;
512
512
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlRm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQnVsa0RhdGFiYXNlRm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBNEM7QUFDNUMsNkpBQTZKO0FBQzdKLGdMQUFnTDtBQUNoTCxnSUFBZ0k7OztBQUVuSCxRQUFBLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFFaEMsNEtBQTRLO0FBQzVLLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLHFHQUFxRztBQUNyRyxzR0FBc0c7QUFDdEcsK0RBQStEO0FBQy9ELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUV2QixNQUFNLGlCQUFpQixHQUFxSDtJQUN4SSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtJQUMxQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0lBQzVDLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLElB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LENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1RCxNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUMxRCxJQUFJLEtBQUssR0FBRyxvQkFBWSxDQUFDO1lBQ3pCLElBQUksR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO2dCQUNkLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssRUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDdEUsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsSUFBSSxLQUFLLEtBQUssY0FBTTtnQkFBRSxPQUFPLGNBQU0sQ0FBQztZQUNwQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QyxDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUM7QUE5SEQsNENBOEhDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRmlsZSBmb3JtYXQgKGFsbCBpbnRlZ2VycyBsaXR0bGUtZW5kaWFuKTpcbi8vICAgdTMyIGhlYWRlckxlbmd0aCwgdGhlbiBoZWFkZXJMZW5ndGggYnl0ZXMgb2YgSlNPTjogeyByb3dDb3VudCwgY29sdW1uczogW3sgbmFtZSwgb2Zmc2V0LCBsZW5ndGggfV0gfSwgd2hlcmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGhlYWRlci5cbi8vICAgRWFjaCBjb2x1bW4gYmxvYiBpczogdTMyIG9mZnNldHNbcm93Q291bnQgKyAxXSAoYnl0ZSBvZmZzZXRzIGludG8gdGhlIGNvbHVtbidzIGRhdGEgc2VjdGlvbiksIHU4IHR5cGVzW3Jvd0NvdW50XSwgdGhlbiB0aGUgZGF0YSBzZWN0aW9uIChlYWNoIHZhbHVlJ3MgYnl0ZXMsIGNvbmNhdGVuYXRlZCkuXG4vLyBWYWx1ZXMgYXJlIGVuY29kZWQgd2l0aCBhbiBleHBsaWNpdCB0eXBlIHRhZyBwZXIgdmFsdWUgKHNlZSB0aGUgVFlQRV8gY29uc3RhbnRzKS4gUmVhZHMgb25seSBmZXRjaCB0aGUgYnl0ZSByYW5nZXMgdGhleSBuZWVkLlxuXG5leHBvcnQgY29uc3QgS0VZX0NPTFVNTiA9IFwia2V5XCI7XG5cbi8vIEV2ZXJ5IHRhZyBpcyBhbiBleHBsaWNpdCBjb25zdGFudCBiYWtlZCBpbnRvIGZpbGVzIG9uIGRpc2suIE5FVkVSIHJlbnVtYmVyIGFuIGV4aXN0aW5nIHRhZyDigJQgb25seSBhZGQgbmV3IG9uZXMg4oCUIG9yIGV2ZXJ5IHByZXZpb3VzbHkgd3JpdHRlbiBmaWxlIHNpbGVudGx5IGRlY29kZXMgd3JvbmcuXG5jb25zdCBUWVBFX1VOREVGSU5FRCA9IDA7XG5jb25zdCBUWVBFX1NUUklORyA9IDE7XG5jb25zdCBUWVBFX05VTUJFUiA9IDI7XG5jb25zdCBUWVBFX0JPT0xFQU4gPSAzO1xuY29uc3QgVFlQRV9PQkpFQ1QgPSA0O1xuY29uc3QgVFlQRV9JTlQ4X0FSUkFZID0gNTtcbmNvbnN0IFRZUEVfVUlOVDhfQVJSQVkgPSA2O1xuY29uc3QgVFlQRV9VSU5UOF9DTEFNUEVEX0FSUkFZID0gNztcbmNvbnN0IFRZUEVfSU5UMTZfQVJSQVkgPSA4O1xuY29uc3QgVFlQRV9VSU5UMTZfQVJSQVkgPSA5O1xuY29uc3QgVFlQRV9JTlQzMl9BUlJBWSA9IDEwO1xuY29uc3QgVFlQRV9VSU5UMzJfQVJSQVkgPSAxMTtcbmNvbnN0IFRZUEVfRkxPQVQzMl9BUlJBWSA9IDEyO1xuY29uc3QgVFlQRV9GTE9BVDY0X0FSUkFZID0gMTM7XG4vLyBBIGNlbGwgd2hvc2Ugcm93IG5ldmVyIHNldCB0aGlzIGNvbHVtbiBhdCBhbGwg4oCUIGFzIG9wcG9zZWQgdG8gVFlQRV9VTkRFRklORUQsIGFuIGV4cGxpY2l0bHkgc3RvcmVkXG4vLyB1bmRlZmluZWQuIE9uIHJlYWQsIEFCU0VOVCBmYWxscyB0aHJvdWdoIHRvIG9sZGVyIHJlYWRlcnMgZm9yIHRoYXQgY29sdW1uOyBhIHN0b3JlZCB1bmRlZmluZWQgc3RvcHNcbi8vIHRoZSBmYWxsLXRocm91Z2ggKGl0J3MgYSByZWFsIHZhbHVlIHRoYXQgY2xlYXJzIHRoZSBjb2x1bW4pLlxuY29uc3QgVFlQRV9BQlNFTlQgPSAxNDtcblxuY29uc3QgVFlQRURfQVJSQVlfVFlQRVM6IHsgdHlwZTogbnVtYmVyOyBjdG9yOiB7IG5ldyhidWZmZXI6IEFycmF5QnVmZmVyKTogQXJyYXlCdWZmZXJWaWV3OyBCWVRFU19QRVJfRUxFTUVOVDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfSB9W10gPSBbXG4gICAgeyB0eXBlOiBUWVBFX0lOVDhfQVJSQVksIGN0b3I6IEludDhBcnJheSB9LFxuICAgIHsgdHlwZTogVFlQRV9VSU5UOF9BUlJBWSwgY3RvcjogVWludDhBcnJheSB9LFxuICAgIHsgdHlwZTogVFlQRV9VSU5UOF9DTEFNUEVEX0FSUkFZLCBjdG9yOiBVaW50OENsYW1wZWRBcnJheSB9LFxuICAgIHsgdHlwZTogVFlQRV9JTlQxNl9BUlJBWSwgY3RvcjogSW50MTZBcnJheSB9LFxuICAgIHsgdHlwZTogVFlQRV9VSU5UMTZfQVJSQVksIGN0b3I6IFVpbnQxNkFycmF5IH0sXG4gICAgeyB0eXBlOiBUWVBFX0lOVDMyX0FSUkFZLCBjdG9yOiBJbnQzMkFycmF5IH0sXG4gICAgeyB0eXBlOiBUWVBFX1VJTlQzMl9BUlJBWSwgY3RvcjogVWludDMyQXJyYXkgfSxcbiAgICB7IHR5cGU6IFRZUEVfRkxPQVQzMl9BUlJBWSwgY3RvcjogRmxvYXQzMkFycmF5IH0sXG4gICAgeyB0eXBlOiBUWVBFX0ZMT0FUNjRfQVJSQVksIGN0b3I6IEZsb2F0NjRBcnJheSB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX0JVRkZFUiA9IEJ1ZmZlci5hbGxvYygwKSBhcyBCdWZmZXI7XG5cbi8vIFNlbnRpbmVsIGEgcmVhZGVyIHJldHVybnMgZm9yIGEgY2VsbCB3aG9zZSByb3cgbmV2ZXIgc2V0IHRoaXMgY29sdW1uLCBzbyB0aGUgam9pbiBjYW4gZmFsbCB0aHJvdWdoXG4vLyB0byBhbiBvbGRlciByZWFkZXIgZm9yIHRoYXQgY29sdW1uLiBEaXN0aW5jdCBmcm9tIGEgc3RvcmVkIHVuZGVmaW5lZCwgd2hpY2ggaXMgYSByZWFsIGNsZWFyaW5nIHZhbHVlLlxuZXhwb3J0IGNvbnN0IEFCU0VOVCA9IFN5bWJvbChcImFic2VudFwiKTtcblxuLy8gT25lIHZhbHVlIGV4YWN0bHkgYXMgaXQgc2l0cyBvbiBkaXNrOiBpdHMgdHlwZSB0YWcgKyByYXcgYnl0ZXMuIEEgY2VsbCdzIGVuY29kaW5nIGlzIHBvc2l0aW9uLVxuLy8gaW5kZXBlbmRlbnQgKG5vdGhpbmcgYWJvdXQgaXQgZGVwZW5kcyBvbiB3aGljaCByb3cvZmlsZSBpdCBsaXZlcyBpbiksIHNvIGEgbWVyZ2UgY29waWVzIHRoZSB3aW5uaW5nXG4vLyBSYXdDZWxsIHN0cmFpZ2h0IGZyb20gYW4gaW5wdXQgY29sdW1uIGludG8gdGhlIG91dHB1dCDigJQgbmV2ZXIgZGVjb2RpbmcgaXQgdG8gYSBKUyB2YWx1ZSBhbmRcbi8vIHJlLWVuY29kaW5nLiBUaGF0J3MgZmFyIGxlc3MgbWVtb3J5IChubyBvYmplY3QgbWF0ZXJpYWxpemF0aW9uKSBhbmQgbXVjaCBmYXN0ZXIgKGEgYnl0ZSBjb3B5LCBub3QgYVxuLy8gSlBFRy90eXBlZC1hcnJheSBkZWNvZGUgKyByZS1lbmNvZGUpLlxuZXhwb3J0IHR5cGUgUmF3Q2VsbCA9IHsgdHlwZTogbnVtYmVyOyBieXRlczogQnVmZmVyIH07XG5cbi8vIFRoZSB0eXBlIHRhZyBhIGNlbGwgY2FycmllcyB3aGVuIGl0cyByb3cgbmV2ZXIgc2V0IHRoaXMgY29sdW1uIOKAlCByZWFkIGl0IGZyb20gdGhlIGNvbHVtbidzIGB0eXBlc2Bcbi8vIGFycmF5IHRvIGRldGVjdCBBQlNFTlQgd2l0aG91dCBkZWNvZGluZy4gUmUtZXhwb3J0ZWQgc28gdGhlIG1lcmdlIHBsYW5uZXIgKHdoaWNoIHdvcmtzIGF0IHRoZVxuLy8gY29sdW1uLWluZGV4IGxldmVsLCBubyB2YWx1ZSBtYXRlcmlhbGl6YXRpb24pIGNhbiBjaGVjayBpdC5cbmV4cG9ydCBjb25zdCBUWVBFX0FCU0VOVF9UQUcgPSBUWVBFX0FCU0VOVDtcblxuLy8gQSBjb2x1bW4ncyBpbmRleCBhbG9uZSAob2Zmc2V0cyArIHR5cGVzIOKAlCBzbWFsbCwgfjUgYnl0ZXMvcm93KSBwbHVzIGEgcHJpbWl0aXZlIHRvIHJlYWQgYSBDT05USUdVT1VTXG4vLyByb3cgcmFuZ2UncyByYXcgdmFsdWUgYnl0ZXMuIFVzZWQgYnkgdGhlIHBsYW5uZWQgbWVyZ2U6IGl0IGxvYWRzIHRoZSBpbmRleCBhY3Jvc3MgZXZlcnkgKHNvdXJjZSxcbi8vIGNvbHVtbikgb25jZSAoY2hlYXApLCB1c2VzIHR5cGVzIHRvIGRldGVjdCBBQlNFTlQgYW5kIG9mZnNldHMgdG8gc2l6ZSBlYWNoIGNlbGwsIHBsYW5zIHRoZSBieXRlXG4vLyBsYXlvdXQgb2YgZXZlcnkgb3V0cHV0IGZpbGUgZnJvbSB0aG9zZSDigJQgdGhlbiBpbiB0aGUgZXhlY3V0ZSBwaGFzZSByZWFkcyBvbmx5IHRoZSBydW5zIG9mIGJ5dGVzIGl0XG4vLyBhY3R1YWxseSBuZWVkcywgY29weWluZyB0aGVtIHN0cmFpZ2h0IGludG8gcHJlLWxhaWQtb3V0IG91dHB1dCBidWZmZXJzLiBObyBjZWxsIHZhbHVlIGlzIGV2ZXJcbi8vIG1hdGVyaWFsaXplZCBhcyBhIEpTIG9iamVjdC5cbmV4cG9ydCB0eXBlIENvbHVtbkluZGV4ID0ge1xuICAgIC8vIG9mZnNldHNbaV0uLm9mZnNldHNbaSsxXSBpcyByb3cgaSdzIHZhbHVlIGJ5dGUgcmFuZ2Ugd2l0aGluIHRoZSBjb2x1bW4ncyBkYXRhIHNlY3Rpb24uXG4gICAgb2Zmc2V0czogVWludDMyQXJyYXk7XG4gICAgLy8gUGVyLXJvdyB0eXBlIHRhZzsgVFlQRV9BQlNFTlRfVEFHIG1hcmtzIFwidGhpcyByb3cgbmV2ZXIgc2V0IHRoaXMgY29sdW1uXCIgKGZhbGwtdGhyb3VnaCkuXG4gICAgdHlwZXM6IFVpbnQ4QXJyYXk7XG4gICAgLy8gUmVhZCB0aGUgY29udGlndW91cyBieXRlcyBvZiB2YWx1ZShzKSBmb3Igcm93cyBbc3RhcnRSb3csIGVuZFJvdykuIExlbmd0aCBpcyBleGFjdGx5XG4gICAgLy8gb2Zmc2V0c1tlbmRSb3ddIC0gb2Zmc2V0c1tzdGFydFJvd10g4oCUIHRoZSBjZWxscyBpbiB0aGF0IHJhbmdlIGNvbmNhdGVuYXRlZC4gVGhlIGNhbGxlciBjb21wb3Nlc1xuICAgIC8vIGxhcmdlciByZWFkcyBmcm9tIGNvbnNlY3V0aXZlIHJvd3MgKG9uZSBzb3VyY2Utc2lkZSBnZXRSYW5nZSBwZXIgcnVuKS5cbiAgICByZWFkVmFsdWVCeXRlczogKHN0YXJ0Um93OiBudW1iZXIsIGVuZFJvdzogbnVtYmVyKSA9PiBQcm9taXNlPEJ1ZmZlcj47XG59O1xuXG4vLyBIaWRkZW4gcGVyLXJvdyBjb2x1bW4gaG9sZGluZyBlYWNoIHJvdydzIHdyaXRlLXRpbWUgKHNvIHJlYWRzIGNhbiByZXNvbHZlIGEga2V5IHRvIGl0cyBsYXRlc3QgdmFsdWVcbi8vIGJ5IGFjdHVhbCB0aW1lKS4gTlVMLXByZWZpeGVkIHNvIGl0IGNhbid0IGNvbGxpZGUgd2l0aCBhIHVzZXIgY29sdW1uOyBleGNsdWRlZCBmcm9tIGBjb2x1bW5zYC5cbmNvbnN0IFRJTUVfQ09MVU1OID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKSArIFwidFwiO1xuXG50eXBlIEZpbGVIZWFkZXIgPSB7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICBjb2x1bW5zOiB7IG5hbWU6IHN0cmluZzsgb2Zmc2V0OiBudW1iZXI7IGxlbmd0aDogbnVtYmVyIH1bXTtcbiAgICAvLyBPbGRlc3QvbmV3ZXN0IHdyaXRlLXRpbWUgb2YgdGhlIGRhdGEgaW4gdGhpcyBmaWxlIChmcm9tIHRoZSBzdHJlYW0gZW50cmllcyBpdCB3YXMgZm9sZGVkIGZyb20sXG4gICAgLy8gY2FycmllZCB0aHJvdWdoIG1lcmdlcykuIExldHMgdGhlIG1lcmdlIHBsYW5uZXIgcGljayBmaWxlcyBvdmVybGFwcGluZyBhIHRpbWUgcmFuZ2UuIEFic2VudCAoMClcbiAgICAvLyBpbiBmaWxlcyB3cml0dGVuIGJlZm9yZSB0aGlzIGV4aXN0ZWQuXG4gICAgbWluVGltZT86IG51bWJlcjtcbiAgICBtYXhUaW1lPzogbnVtYmVyO1xuICAgIC8vIExleGljb2dyYXBoaWNhbGx5IHNtYWxsZXN0L2xhcmdlc3Qga2V5IGluIHRoaXMgZmlsZSAocm93cyBhcmUgc3RvcmVkIGtleS1zb3J0ZWQpLiBMZXRzIHRoZSBtZXJnZVxuICAgIC8vIHBsYW5uZXIgZ3JvdXAvZGVkdXAgYnkga2V5IHJhbmdlIGFuZCBsZXRzIGEgc2luZ2xlLWtleSByZWFkIHNraXAgZmlsZXMgd2hvc2UgcmFuZ2UgZXhjbHVkZXMgdGhlXG4gICAgLy8ga2V5LiBBYnNlbnQgKHVuZGVmaW5lZCkgaW4gZmlsZXMgd3JpdHRlbiBiZWZvcmUgdGhpcyBleGlzdGVkIOKAlCB0cmVhdGVkIGFzIFwic3BhbnMgYWxsIGtleXNcIi5cbiAgICBtaW5LZXk/OiBzdHJpbmc7XG4gICAgbWF4S2V5Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVZhbHVlKHZhbHVlOiB1bmtub3duKTogeyB0eXBlOiBudW1iZXI7IGJ5dGVzOiBCdWZmZXIgfSB7XG4gICAgaWYgKHZhbHVlID09PSBBQlNFTlQpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogVFlQRV9BQlNFTlQsIGJ5dGVzOiBFTVBUWV9CVUZGRVIgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogVFlQRV9VTkRFRklORUQsIGJ5dGVzOiBFTVBUWV9CVUZGRVIgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBUWVBFX1NUUklORywgYnl0ZXM6IEJ1ZmZlci5mcm9tKHZhbHVlLCBcInV0ZjhcIikgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICAgICAgYnl0ZXMud3JpdGVEb3VibGVMRSh2YWx1ZSwgMCk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFRZUEVfTlVNQkVSLCBieXRlcyB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBUWVBFX0JPT0xFQU4sIGJ5dGVzOiBCdWZmZXIuZnJvbShbdmFsdWUgJiYgMSB8fCAwXSkgfTtcbiAgICB9XG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YVZpZXcgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVkLCBzdG9yZSBhIHR5cGVkIGFycmF5IGluc3RlYWRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRyeSA9IFRZUEVEX0FSUkFZX1RZUEVTLmZpbmQodCA9PiB2YWx1ZSBpbnN0YW5jZW9mIHQuY3Rvcik7XG4gICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZWQgYXJyYXkgdHlwZSAke3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICAgICAgICBieXRlczogQnVmZmVyLmZyb20odmFsdWUuYnVmZmVyLCB2YWx1ZS5ieXRlT2Zmc2V0LCB2YWx1ZS5ieXRlTGVuZ3RoKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHZhbHVlIHR5cGUgJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IHR5cGU6IFRZUEVfT0JKRUNULCBieXRlczogQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBcInV0ZjhcIikgfTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlVmFsdWUodHlwZTogbnVtYmVyLCBieXRlczogQnVmZmVyKTogdW5rbm93biB7XG4gICAgaWYgKHR5cGUgPT09IFRZUEVfVU5ERUZJTkVEKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlID09PSBUWVBFX1NUUklORykgcmV0dXJuIGJ5dGVzLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICBpZiAodHlwZSA9PT0gVFlQRV9OVU1CRVIpIHtcbiAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gOCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCA4IGJ5dGVzIGZvciBhIG51bWJlciwgd2FzICR7Ynl0ZXMubGVuZ3RofWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBieXRlcy5yZWFkRG91YmxlTEUoMCk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBUWVBFX0JPT0xFQU4pIHtcbiAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAxIGJ5dGUgZm9yIGEgYm9vbGVhbiwgd2FzICR7Ynl0ZXMubGVuZ3RofWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBieXRlc1swXSA9PT0gMTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IFRZUEVfT0JKRUNUKSByZXR1cm4gSlNPTi5wYXJzZShieXRlcy50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgIGlmICh0eXBlID09PSBUWVBFX0FCU0VOVCkgcmV0dXJuIEFCU0VOVDtcbiAgICBjb25zdCBlbnRyeSA9IFRZUEVEX0FSUkFZX1RZUEVTLmZpbmQodCA9PiB0LnR5cGUgPT09IHR5cGUpO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHZhbGlkIHR5cGUgdGFnLCB3YXMgJHt0eXBlfWApO1xuICAgIH1cbiAgICBjb25zdCBjdG9yID0gZW50cnkuY3RvcjtcbiAgICBpZiAodHlwZSA9PT0gVFlQRV9VSU5UOF9BUlJBWSkgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ5dGVzKTtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoICUgY3Rvci5CWVRFU19QRVJfRUxFTUVOVCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJ5dGUgbGVuZ3RoIGRpdmlzaWJsZSBieSAke2N0b3IuQllURVNfUEVSX0VMRU1FTlR9IGZvciAke2N0b3IubmFtZX0sIHdhcyAke2J5dGVzLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgLy8gQ29weSB0byBhIGZyZXNoIEFycmF5QnVmZmVyIHNvIHRoZSB0eXBlZCBhcnJheSB2aWV3IGlzIGFsaWduZWQgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUgYnl0ZXMgbGFuZGVkIGluIHRoZSBzb3VyY2UgYnVmZmVyLlxuICAgIGNvbnN0IGFsaWduZWQgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZXMubGVuZ3RoKTtcbiAgICBuZXcgVWludDhBcnJheShhbGlnbmVkKS5zZXQoYnl0ZXMpO1xuICAgIHJldHVybiBuZXcgY3RvcihhbGlnbmVkKTtcbn1cblxuZnVuY3Rpb24gZW5jb2RlQnVsa0RhdGEoZGF0YTogdW5rbm93bltdKTogQnVmZmVyIHtcbiAgICBjb25zdCBuID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3Qgb2Zmc2V0cyA9IEJ1ZmZlci5hbGxvYyg0ICogKG4gKyAxKSk7XG4gICAgY29uc3QgdHlwZXMgPSBCdWZmZXIuYWxsb2Mobik7XG4gICAgY29uc3QgcGFydHM6IEJ1ZmZlcltdID0gW107XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeyB0eXBlLCBieXRlcyB9ID0gZW5jb2RlVmFsdWUoZGF0YVtpXSk7XG4gICAgICAgIG9mZnNldHMud3JpdGVVSW50MzJMRShwb3MsIDQgKiBpKTtcbiAgICAgICAgdHlwZXNbaV0gPSB0eXBlO1xuICAgICAgICBwYXJ0cy5wdXNoKGJ5dGVzKTtcbiAgICAgICAgcG9zICs9IGJ5dGVzLmxlbmd0aDtcbiAgICB9XG4gICAgb2Zmc2V0cy53cml0ZVVJbnQzMkxFKHBvcywgNCAqIG4pO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtvZmZzZXRzLCB0eXBlcywgLi4ucGFydHNdKTtcbn1cblxuLy8gTGlrZSBlbmNvZGVCdWxrRGF0YSBidXQgdGhlIHZhbHVlcyBhcmUgYWxyZWFkeSBlbmNvZGVkIChhIG1lcmdlIHN1cHBsaWVzIHRoZSB3aW5uaW5nIGNlbGxzJyByYXcgYnl0ZXNcbi8vIHN0cmFpZ2h0IGZyb20gdGhlIGlucHV0IGZpbGVzKS4gTGF5cyBvdXQgdGhlIHNhbWUgb2Zmc2V0cyAvIHR5cGVzIC8gZGF0YSBzZWN0aW9uIHdpdGhvdXQgdG91Y2hpbmcgdGhlXG4vLyB2YWx1ZXMgdGhlbXNlbHZlcy5cbmZ1bmN0aW9uIGVuY29kZUJ1bGtEYXRhUmF3KGNlbGxzOiBSYXdDZWxsW10pOiBCdWZmZXIge1xuICAgIGNvbnN0IG4gPSBjZWxscy5sZW5ndGg7XG4gICAgY29uc3Qgb2Zmc2V0cyA9IEJ1ZmZlci5hbGxvYyg0ICogKG4gKyAxKSk7XG4gICAgY29uc3QgdHlwZXMgPSBCdWZmZXIuYWxsb2Mobik7XG4gICAgY29uc3QgcGFydHM6IEJ1ZmZlcltdID0gW107XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeyB0eXBlLCBieXRlcyB9ID0gY2VsbHNbaV07XG4gICAgICAgIG9mZnNldHMud3JpdGVVSW50MzJMRShwb3MsIDQgKiBpKTtcbiAgICAgICAgdHlwZXNbaV0gPSB0eXBlO1xuICAgICAgICBwYXJ0cy5wdXNoKGJ5dGVzKTtcbiAgICAgICAgcG9zICs9IGJ5dGVzLmxlbmd0aDtcbiAgICB9XG4gICAgb2Zmc2V0cy53cml0ZVVJbnQzMkxFKHBvcywgNCAqIG4pO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtvZmZzZXRzLCB0eXBlcywgLi4ucGFydHNdKTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlQnVsa0RhdGEoYmxvYjogQnVmZmVyLCByb3dDb3VudDogbnVtYmVyKTogdW5rbm93bltdIHtcbiAgICBjb25zdCBpbmRleFNpemUgPSA0ICogKHJvd0NvdW50ICsgMSkgKyByb3dDb3VudDtcbiAgICBjb25zdCB2YWx1ZXM6IHVua25vd25bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBzdGFydCA9IGJsb2IucmVhZFVJbnQzMkxFKDQgKiBpKTtcbiAgICAgICAgY29uc3QgZW5kID0gYmxvYi5yZWFkVUludDMyTEUoNCAqIChpICsgMSkpO1xuICAgICAgICBjb25zdCB0eXBlID0gYmxvYls0ICogKHJvd0NvdW50ICsgMSkgKyBpXTtcbiAgICAgICAgdmFsdWVzLnB1c2goZGVjb2RlVmFsdWUodHlwZSwgYmxvYi5zdWJhcnJheShpbmRleFNpemUgKyBzdGFydCwgaW5kZXhTaXplICsgZW5kKSkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xufVxuXG4vLyBUYXJnZXQgbG9naWNhbCAodW5jb21wcmVzc2VkKSBzaXplIG9mIG9uZSBidWxrIGZpbGUuIEEgcm93cyBhcnJheSBiaWdnZXIgdGhhbiB0aGlzIGlzIHNwbGl0IGFjcm9zc1xuLy8gbXVsdGlwbGUga2V5LWNvbnRpZ3VvdXMgZmlsZXMsIHNvIGZpbGVzIHN0YXkgYXJvdW5kIHRoaXMgc2l6ZSAodGhlIG1lcmdlIHBvbGljeSdzIHRhcmdldCkgYW5kIG5vXG4vLyBzaW5nbGUgY29sdW1uIGJsb2IgLyBCdWZmZXIuY29uY2F0IGV2ZXIgYXBwcm9hY2hlcyB0aGUgfjJHQiBCdWZmZXIgbGVuZ3RoIGxpbWl0LiBUaGUgZXN0aW1hdGUgaXNcbi8vIHJvdWdoIG9uIHB1cnBvc2Ug4oCUIGl0IG9ubHkgbmVlZHMgdG8ga2VlcCBlYWNoIGNodW5rIG5lYXIgdGhlIHRhcmdldCwgbm90IGJlIGV4YWN0LiBBIHNpbmdsZSByb3dcbi8vIGJpZ2dlciB0aGFuIHRoZSB0YXJnZXQgc3RpbGwgYmVjb21lcyBpdHMgb3duIChvdmVyc2l6ZWQpIGZpbGUsIHNpbmNlIHdlIG5ldmVyIHNwbGl0IHdpdGhpbiBhIGtleS5cbmV4cG9ydCBjb25zdCBUQVJHRVRfRklMRV9CWVRFUyA9IDI1NiAqIDEwMjQgKiAxMDI0O1xuXG4vLyBQZXItdmFsdWUgb24tZGlzayBvdmVyaGVhZDogYSA0LWJ5dGUgb2Zmc2V0IGVudHJ5IHBsdXMgYSAxLWJ5dGUgdHlwZSB0YWcuXG5jb25zdCBQRVJfVkFMVUVfT1ZFUkhFQUQgPSA1O1xuXG5mdW5jdGlvbiBlc3RpbWF0ZVZhbHVlQnl0ZXModmFsdWU6IHVua25vd24pOiBudW1iZXIge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSByZXR1cm4gdmFsdWUubGVuZ3RoICogMjtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gODtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIDE7XG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHJldHVybiB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkubGVuZ3RoO1xuICAgIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZVJvd0J5dGVzKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBudW1iZXIge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKHJvdykpIHtcbiAgICAgICAgdG90YWwgKz0gZXN0aW1hdGVWYWx1ZUJ5dGVzKHZhbHVlKSArIFBFUl9WQUxVRV9PVkVSSEVBRDtcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuXG4vLyBDb25jYXRlbmF0ZXMgYWxyZWFkeS1lbmNvZGVkIGNvbHVtbiBibG9icyBpbnRvIGEgY29tcGxldGUgZmlsZSAoNC1ieXRlIGhlYWRlciBsZW5ndGggKyBoZWFkZXIgSlNPTiArXG4vLyBibG9icyksIGNvbXB1dGluZyB0aGUgaGVhZGVyJ3MgdGltZSArIGtleSBib3VuZHMgZnJvbSB0aGUgcGVyLXJvdyB0aW1lcyBhbmQga2V5cy4gU2hhcmVkIGJ5IHRoZVxuLy8gb2JqZWN0LWJhc2VkIGJ1aWxkZXIgKGJ1aWxkT25lRmlsZSkgYW5kIHRoZSByYXctc3BsaWNlIGJ1aWxkZXIgKGJ1aWxkT25lRmlsZVJhdykuXG5mdW5jdGlvbiBhc3NlbWJsZUZpbGUoY29sdW1uTmFtZXM6IHN0cmluZ1tdLCBibG9iczogQnVmZmVyW10sIHJvd0NvdW50OiBudW1iZXIsIHRpbWVzOiBudW1iZXJbXSwga2V5czogc3RyaW5nW10pOiBCdWZmZXIge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGNvbnN0IGNvbHVtbnMgPSBjb2x1bW5OYW1lcy5tYXAoKG5hbWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7IG5hbWUsIG9mZnNldCwgbGVuZ3RoOiBibG9ic1tpXS5sZW5ndGggfTtcbiAgICAgICAgb2Zmc2V0ICs9IGJsb2JzW2ldLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH0pO1xuICAgIGxldCBtaW5UaW1lID0gdGltZXMubGVuZ3RoID8gdGltZXNbMF0gOiAwO1xuICAgIGxldCBtYXhUaW1lID0gbWluVGltZTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgdGltZXMpIHsgaWYgKHQgPCBtaW5UaW1lKSBtaW5UaW1lID0gdDsgaWYgKHQgPiBtYXhUaW1lKSBtYXhUaW1lID0gdDsgfVxuICAgIGxldCBtaW5LZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgbWF4S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAobWluS2V5ID09PSB1bmRlZmluZWQgfHwga2V5IDwgbWluS2V5KSBtaW5LZXkgPSBrZXk7XG4gICAgICAgIGlmIChtYXhLZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPiBtYXhLZXkpIG1heEtleSA9IGtleTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyOiBGaWxlSGVhZGVyID0geyByb3dDb3VudCwgY29sdW1ucywgbWluVGltZSwgbWF4VGltZSwgbWluS2V5LCBtYXhLZXkgfTtcbiAgICBjb25zdCBoZWFkZXJCdWYgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShoZWFkZXIpLCBcInV0ZjhcIik7XG4gICAgY29uc3QgbGVuZ3RoUHJlZml4ID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgIGxlbmd0aFByZWZpeC53cml0ZVVJbnQzMkxFKGhlYWRlckJ1Zi5sZW5ndGgsIDApO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtsZW5ndGhQcmVmaXgsIGhlYWRlckJ1ZiwgLi4uYmxvYnNdKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRPbmVGaWxlKHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIHRpbWVzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gICAgY29uc3QgY29sdW1uTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29sdW1uU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIE9iamVjdC5rZXlzKHJvdykpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW5TZXQuaGFzKGZpZWxkKSkgY29udGludWU7XG4gICAgICAgICAgICBjb2x1bW5TZXQuYWRkKGZpZWxkKTtcbiAgICAgICAgICAgIGNvbHVtbk5hbWVzLnB1c2goZmllbGQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEEgcm93IHRoYXQgZG9lc24ndCBpbmNsdWRlIGEgY29sdW1uIHN0b3JlcyBBQlNFTlQgKGZhbGwtdGhyb3VnaCksIG5vdCB1bmRlZmluZWQgKGEgcmVhbCB2YWx1ZSkuXG4gICAgY29uc3QgYmxvYnMgPSBjb2x1bW5OYW1lcy5tYXAoY29sID0+IGVuY29kZUJ1bGtEYXRhKHJvd3MubWFwKHJvdyA9PiBjb2wgaW4gcm93ID8gcm93W2NvbF0gOiBBQlNFTlQpKSk7XG4gICAgLy8gVGhlIGhpZGRlbiBwZXItcm93IHRpbWUgY29sdW1uLlxuICAgIGNvbHVtbk5hbWVzLnB1c2goVElNRV9DT0xVTU4pO1xuICAgIGJsb2JzLnB1c2goZW5jb2RlQnVsa0RhdGEodGltZXMpKTtcbiAgICByZXR1cm4gYXNzZW1ibGVGaWxlKGNvbHVtbk5hbWVzLCBibG9icywgcm93cy5sZW5ndGgsIHRpbWVzLCByb3dzLm1hcChyID0+IHJbS0VZX0NPTFVNTl0gYXMgc3RyaW5nKSk7XG59XG5cbi8vIEEgcmVzb2x2ZWQgb3V0cHV0IHJvdyBmb3IgdGhlIHJhdy1zcGxpY2UgbWVyZ2U6IGl0cyBrZXksIHdyaXRlLXRpbWUsIGFuZCB0aGUgd2lubmluZyByYXcgY2VsbCBmb3IgZWFjaFxuLy8gY29sdW1uIGl0IGhhcyAoYSBjb2x1bW4gaXQgbGFja3MgaXMgd3JpdHRlbiBBQlNFTlQg4oCUIGZhbGwtdGhyb3VnaCkuIFRoZSBjZWxsIGJ5dGVzIGFyZSBjb3BpZWQgc3RyYWlnaHRcbi8vIGZyb20gdGhlIGlucHV0IGZpbGVzOyBubyB2YWx1ZSBpcyBldmVyIGRlY29kZWQuXG5leHBvcnQgdHlwZSBSYXdSb3cgPSB7IGtleTogc3RyaW5nOyB0aW1lOiBudW1iZXI7IGNlbGxzOiBNYXA8c3RyaW5nLCBSYXdDZWxsPiB9O1xuXG4vLyBTaXplIG9mIGEgY29sdW1uIGJsb2IncyBJTkRFWCBzZWN0aW9uIChvZmZzZXRzIGFycmF5ICsgdHlwZXMgYXJyYXkpIGZvciBhIGNvbHVtbiBvZiBOIHJvd3MuIFRoZSBkYXRhXG4vLyBzZWN0aW9uIGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIuIFRoZSBwbGFubmVkIG1lcmdlIHVzZXMgdGhpcyB0byBzaXplIG91dHB1dCBidWZmZXJzIGV4YWN0bHkuXG5leHBvcnQgZnVuY3Rpb24gY29sdW1uSW5kZXhCeXRlTGVuZ3RoKHJvd0NvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiA0ICogKHJvd0NvdW50ICsgMSkgKyByb3dDb3VudDtcbn1cblxuLy8gQXNzZW1ibGVzIGEgY29tcGxldGUgYnVsayBmaWxlIGZyb20gYSBzZXQgb2YgcHJlLWJ1aWx0IHZhbHVlIGNvbHVtbiBibG9icyBwbHVzIHRoZSBrZXlzICsgdGltZXMuIEF1dG8tXG4vLyBhZGRzIHRoZSBLRVlfQ09MVU1OIChrZXlzKSBhbmQgaGlkZGVuIFRJTUVfQ09MVU1OICh0aW1lcykg4oCUIHRoZXkncmUgc21hbGwgZW5vdWdoIHRvIGVuY29kZSBpbiBvbmUgc2hvdFxuLy8gaGVyZS4gVXNlZCBieSB0aGUgcGxhbm5lZCBtZXJnZTogaXQgYnVpbGRzIGVhY2ggdmFsdWUgY29sdW1uJ3MgYmxvYiBieS1oYW5kIChvZmZzZXRzL3R5cGVzICsgcmF3IGJ5dGVzXG4vLyBjb3BpZWQgZGlyZWN0bHkgZnJvbSBpbnB1dHMsIG5vIHZhbHVlIG1hdGVyaWFsaXphdGlvbikgYW5kIGhhbmRzIHRoZSByZXN1bHQgaGVyZSBmb3IgaGVhZGVyICsgYm91bmRzLlxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VtYmxlUGxhbm5lZEZpbGUoY29uZmlnOiB7XG4gICAgdmFsdWVDb2x1bW5zOiB7IG5hbWU6IHN0cmluZzsgYmxvYjogQnVmZmVyIH1bXTtcbiAgICBrZXlzOiBzdHJpbmdbXTtcbiAgICB0aW1lczogbnVtYmVyW107XG59KTogQnVmZmVyIHtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IFtLRVlfQ09MVU1OLCAuLi5jb25maWcudmFsdWVDb2x1bW5zLm1hcChjID0+IGMubmFtZSksIFRJTUVfQ09MVU1OXTtcbiAgICBjb25zdCBibG9icyA9IFtcbiAgICAgICAgZW5jb2RlQnVsa0RhdGEoY29uZmlnLmtleXMpLFxuICAgICAgICAuLi5jb25maWcudmFsdWVDb2x1bW5zLm1hcChjID0+IGMuYmxvYiksXG4gICAgICAgIGVuY29kZUJ1bGtEYXRhKGNvbmZpZy50aW1lcyksXG4gICAgXTtcbiAgICByZXR1cm4gYXNzZW1ibGVGaWxlKGNvbHVtbk5hbWVzLCBibG9icywgY29uZmlnLmtleXMubGVuZ3RoLCBjb25maWcudGltZXMsIGNvbmZpZy5rZXlzKTtcbn1cblxuY29uc3QgQUJTRU5UX0NFTEw6IFJhd0NlbGwgPSB7IHR5cGU6IFRZUEVfQUJTRU5ULCBieXRlczogRU1QVFlfQlVGRkVSIH07XG5cbmZ1bmN0aW9uIGJ1aWxkT25lRmlsZVJhdyhyb3dzOiBSYXdSb3dbXSk6IEJ1ZmZlciB7XG4gICAgLy8gQ29sdW1ucyBwcmVzZW50IGluIHRoaXMgY2h1bmssIGluIGZpcnN0LXNlZW4gb3JkZXIgKG1hdGNoZXMgYnVpbGRPbmVGaWxlLCB3aGljaCBvbmx5IGVtaXRzIGNvbHVtbnNcbiAgICAvLyBzb21lIHJvdyBhY3R1YWxseSBoYXMpLlxuICAgIGNvbnN0IHZhbHVlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykgZm9yIChjb25zdCBjb2wgb2Ygcm93LmNlbGxzLmtleXMoKSkge1xuICAgICAgICBpZiAoc2Vlbi5oYXMoY29sKSkgY29udGludWU7XG4gICAgICAgIHNlZW4uYWRkKGNvbCk7XG4gICAgICAgIHZhbHVlQ29sdW1ucy5wdXNoKGNvbCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gW0tFWV9DT0xVTU4sIC4uLnZhbHVlQ29sdW1ucywgVElNRV9DT0xVTU5dO1xuICAgIGNvbnN0IHRpbWVzID0gcm93cy5tYXAociA9PiByLnRpbWUpO1xuICAgIGNvbnN0IGJsb2JzID0gW1xuICAgICAgICBlbmNvZGVCdWxrRGF0YShyb3dzLm1hcChyID0+IHIua2V5KSksXG4gICAgICAgIC4uLnZhbHVlQ29sdW1ucy5tYXAoY29sID0+IGVuY29kZUJ1bGtEYXRhUmF3KHJvd3MubWFwKHIgPT4gci5jZWxscy5nZXQoY29sKSA/PyBBQlNFTlRfQ0VMTCkpKSxcbiAgICAgICAgZW5jb2RlQnVsa0RhdGEodGltZXMpLFxuICAgIF07XG4gICAgcmV0dXJuIGFzc2VtYmxlRmlsZShjb2x1bW5OYW1lcywgYmxvYnMsIHJvd3MubGVuZ3RoLCB0aW1lcywgcm93cy5tYXAociA9PiByLmtleSkpO1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZVJhd1Jvd0J5dGVzKHJvdzogUmF3Um93KTogbnVtYmVyIHtcbiAgICBsZXQgdG90YWwgPSByb3cua2V5Lmxlbmd0aCAqIDIgKyBQRVJfVkFMVUVfT1ZFUkhFQUQ7XG4gICAgZm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscy52YWx1ZXMoKSkgdG90YWwgKz0gY2VsbC5ieXRlcy5sZW5ndGggKyBQRVJfVkFMVUVfT1ZFUkhFQUQ7XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuXG4vLyBPbmUgY29tcGxldGUsIGluZGVwZW5kZW50IGZpbGU6IHRoZSBlbmNvZGVkIGJ1ZmZlciBwbHVzIGl0cyBrZXkgcmFuZ2UgKyByb3cgY291bnQgKHRoZSBjYWxsZXIgbG9ncyB0aGVcbi8vIHJhbmdlIHdoZW4gYSBtZXJnZSBzcGxpdHMgYWNyb3NzIHNldmVyYWwgZmlsZXMpLlxuZXhwb3J0IGludGVyZmFjZSBCdWlsdEZpbGUgeyBidWZmZXI6IEJ1ZmZlcjsgbWluS2V5OiBzdHJpbmc7IG1heEtleTogc3RyaW5nOyByb3dDb3VudDogbnVtYmVyOyB9XG5cbi8vIFJldHVybnMgb25lIGNvbXBsZXRlLCBpbmRlcGVuZGVudCBmaWxlIHBlciBjaHVuayBvZiByb3dzLiBSb3dzIGFyZSBmaXJzdCBzb3J0ZWQgYnkga2V5LCB0aGVuXG4vLyBwYXJ0aXRpb25lZCBpbnRvIGtleS1jb250aWd1b3VzIGNodW5rcyBvZiB+dGFyZ2V0Qnl0ZXMgZWFjaCDigJQgc28gZXZlcnkgcmV0dXJuZWQgZmlsZSBpcyBrZXktc29ydGVkXG4vLyAodGlnaHQgbWluS2V5L21heEtleSBmb3IgdGhlIHJlYWQtc2tpcCArIG1lcmdlIHBsYW5uZXIpIGFuZCBzdGF5cyBuZWFyIHRoZSB0YXJnZXQgc2l6ZSwgYW5kIG5vXG4vLyBzaW5nbGUgY29sdW1uIGJsb2IgLyBCdWZmZXIuY29uY2F0IGFwcHJvYWNoZXMgdGhlIH4yR0IgbGltaXQuIFRoZSBjaHVua3MgaGF2ZSBkaXNqb2ludCBrZXkgcmFuZ2VzLFxuLy8gc28gdGhlIGNhbGxlciBqdXN0IHdyaXRlcyBlYWNoIGFzIGl0cyBvd24gZmlsZS4gQSBub3JtYWwtc2l6ZWQgd3JpdGUgcmV0dXJucyBhIHNpbmdsZSBmaWxlLlxuLy8gYHRpbWVzW2ldYCBpcyByb3cgaSdzIHdyaXRlLXRpbWUsIHN0b3JlZCBwZXIgcm93IHNvIHJlYWRzIHJlc29sdmUgYSBrZXkgdG8gaXRzIGxhdGVzdCB2YWx1ZSBieSB0aW1lLlxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRmlsZUJ1ZmZlcihyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB0aW1lczogbnVtYmVyW10sIHRhcmdldEJ5dGVzID0gVEFSR0VUX0ZJTEVfQllURVMpOiBCdWlsdEZpbGVbXSB7XG4gICAgLy8gQSBjaHVuayBpcyBhbHJlYWR5IGtleS1zb3J0ZWQsIHNvIGl0cyBmaXJzdC9sYXN0IHJvdyBhcmUgaXRzIG1pbi9tYXgga2V5LlxuICAgIGNvbnN0IG1ha2UgPSAocnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIHRzOiBudW1iZXJbXSk6IEJ1aWx0RmlsZSA9PiAoe1xuICAgICAgICBidWZmZXI6IGJ1aWxkT25lRmlsZShycywgdHMpLFxuICAgICAgICBtaW5LZXk6IHJzLmxlbmd0aCA/IChyc1swXVtLRVlfQ09MVU1OXSBhcyBzdHJpbmcpIDogXCJcIixcbiAgICAgICAgbWF4S2V5OiBycy5sZW5ndGggPyAocnNbcnMubGVuZ3RoIC0gMV1bS0VZX0NPTFVNTl0gYXMgc3RyaW5nKSA6IFwiXCIsXG4gICAgICAgIHJvd0NvdW50OiBycy5sZW5ndGgsXG4gICAgfSk7XG4gICAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gW21ha2UoW10sIFtdKV07XG4gICAgLy8gU29ydCByb3dzICsgdGhlaXIgdGltZXMgdG9nZXRoZXIgYnkga2V5IHNvIGVhY2ggb3V0cHV0IGZpbGUgaXMga2V5LWNvbnRpZ3VvdXMuXG4gICAgY29uc3Qgb3JkZXIgPSByb3dzLm1hcCgoXywgaSkgPT4gaSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBrYSA9IHJvd3NbYV1bS0VZX0NPTFVNTl0gYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBrYiA9IHJvd3NbYl1bS0VZX0NPTFVNTl0gYXMgc3RyaW5nO1xuICAgICAgICByZXR1cm4ga2EgPCBrYiA/IC0xIDoga2EgPiBrYiA/IDEgOiAwO1xuICAgIH0pO1xuICAgIGNvbnN0IHNvcnRlZFJvd3MgPSBvcmRlci5tYXAoaSA9PiByb3dzW2ldKTtcbiAgICBjb25zdCBzb3J0ZWRUaW1lcyA9IG9yZGVyLm1hcChpID0+IHRpbWVzW2ldKTtcbiAgICBjb25zdCByZXN1bHQ6IEJ1aWx0RmlsZVtdID0gW107XG4gICAgbGV0IGNodW5rU3RhcnQgPSAwO1xuICAgIGxldCBjaHVua0J5dGVzID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgcm93Qnl0ZXMgPSBlc3RpbWF0ZVJvd0J5dGVzKHNvcnRlZFJvd3NbaV0pO1xuICAgICAgICBpZiAoaSA+IGNodW5rU3RhcnQgJiYgY2h1bmtCeXRlcyArIHJvd0J5dGVzID4gdGFyZ2V0Qnl0ZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG1ha2Uoc29ydGVkUm93cy5zbGljZShjaHVua1N0YXJ0LCBpKSwgc29ydGVkVGltZXMuc2xpY2UoY2h1bmtTdGFydCwgaSkpKTtcbiAgICAgICAgICAgIGNodW5rU3RhcnQgPSBpO1xuICAgICAgICAgICAgY2h1bmtCeXRlcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY2h1bmtCeXRlcyArPSByb3dCeXRlcztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2gobWFrZShzb3J0ZWRSb3dzLnNsaWNlKGNodW5rU3RhcnQpLCBzb3J0ZWRUaW1lcy5zbGljZShjaHVua1N0YXJ0KSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFRoZSByYXctc3BsaWNlIGNvdW50ZXJwYXJ0IG9mIGJ1aWxkRmlsZUJ1ZmZlciwgdXNlZCBieSBtZXJnZXM6IHRoZSByb3dzIGFscmVhZHkgY2FycnkgdGhlaXIgd2lubmluZ1xuLy8gY2VsbHMgYXMgcmF3IG9uLWRpc2sgYnl0ZXMgKG5vIEpTIHZhbHVlcyksIHNvIHRoaXMganVzdCBzb3J0cyBieSBrZXksIGNodW5rcyB0byB+dGFyZ2V0Qnl0ZXMsIGFuZFxuLy8gY29uY2F0ZW5hdGVzIHRoZSBieXRlcy4gU2FtZSBvdXRwdXQgZ3VhcmFudGVlczoga2V5LWNvbnRpZ3VvdXMsIGRpc2pvaW50LCBhc2NlbmRpbmcgZmlsZXMuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGaWxlQnVmZmVyUmF3KHJvd3M6IFJhd1Jvd1tdLCB0YXJnZXRCeXRlcyA9IFRBUkdFVF9GSUxFX0JZVEVTKTogQnVpbHRGaWxlW10ge1xuICAgIGNvbnN0IG1ha2UgPSAocnM6IFJhd1Jvd1tdKTogQnVpbHRGaWxlID0+ICh7XG4gICAgICAgIGJ1ZmZlcjogYnVpbGRPbmVGaWxlUmF3KHJzKSxcbiAgICAgICAgbWluS2V5OiBycy5sZW5ndGggPyByc1swXS5rZXkgOiBcIlwiLFxuICAgICAgICBtYXhLZXk6IHJzLmxlbmd0aCA/IHJzW3JzLmxlbmd0aCAtIDFdLmtleSA6IFwiXCIsXG4gICAgICAgIHJvd0NvdW50OiBycy5sZW5ndGgsXG4gICAgfSk7XG4gICAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gW21ha2UoW10pXTtcbiAgICBjb25zdCBzb3J0ZWQgPSByb3dzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gYS5rZXkgPCBiLmtleSA/IC0xIDogYS5rZXkgPiBiLmtleSA/IDEgOiAwKTtcbiAgICBjb25zdCByZXN1bHQ6IEJ1aWx0RmlsZVtdID0gW107XG4gICAgbGV0IGNodW5rU3RhcnQgPSAwO1xuICAgIGxldCBjaHVua0J5dGVzID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByb3dCeXRlcyA9IGVzdGltYXRlUmF3Um93Qnl0ZXMoc29ydGVkW2ldKTtcbiAgICAgICAgaWYgKGkgPiBjaHVua1N0YXJ0ICYmIGNodW5rQnl0ZXMgKyByb3dCeXRlcyA+IHRhcmdldEJ5dGVzKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChtYWtlKHNvcnRlZC5zbGljZShjaHVua1N0YXJ0LCBpKSkpO1xuICAgICAgICAgICAgY2h1bmtTdGFydCA9IGk7XG4gICAgICAgICAgICBjaHVua0J5dGVzID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjaHVua0J5dGVzICs9IHJvd0J5dGVzO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChtYWtlKHNvcnRlZC5zbGljZShjaHVua1N0YXJ0KSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB0eXBlIEJhc2VCdWxrRGF0YWJhc2VSZWFkZXIgPSB7XG4gICAgLy8gSWRlbnRpZmllcyB0aGUgc291cmNlIHRoaXMgcmVhZGVyIGNhbWUgZnJvbSAodGhlIGJ1bGsgZmlsZSBuYW1lLCBvciBcIihzdHJlYW1zKVwiKSBzbyB0aGUgam9pbiBjYW5cbiAgICAvLyBuYW1lIHRoZSBvZmZlbmRpbmcgZmlsZSB3aGVuIG9uZSBvZiBpdHMgcmVhZHMgZmFpbHMuIFVuZGVmaW5lZCBmb3IgcmVhZGVycyBidWlsdCB3aXRob3V0IG9uZS5cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHJvd0NvdW50OiBudW1iZXI7XG4gICAgdG90YWxCeXRlczogbnVtYmVyO1xuICAgIC8vIFdyaXRlLXRpbWUgYm91bmRzIG9mIHRoaXMgcmVhZGVyJ3MgZGF0YSAoMCBpZiB1bmtub3duIOKAlCBvbGQgYnVsayBmaWxlcykuXG4gICAgbWluVGltZTogbnVtYmVyO1xuICAgIG1heFRpbWU6IG51bWJlcjtcbiAgICAvLyBLZXktcmFuZ2UgYm91bmRzICh1bmRlZmluZWQgZm9yIG9sZCBmaWxlcyAvIHRoZSBzdHJlYW0gcmVhZGVyIOKAlCB0cmVhdCBhcyBcInNwYW5zIGFsbCBrZXlzXCIpLlxuICAgIG1pbktleT86IHN0cmluZztcbiAgICBtYXhLZXk/OiBzdHJpbmc7XG4gICAgLy8gS2V5cyBpcyBzcGVjaWFsLCBpdCdzIGFsd2F5cyBhdXRvbWF0aWNhbGx5IGRlY29kZWQsIGV2ZW4gdGhvdWdoIGl0IGlzIHN0b3JlZCBhcyBhIG5vcm1hbCBjb2x1bW5cbiAgICBrZXlzOiBzdHJpbmdbXTtcbiAgICBjb2x1bW5zOiB7IGNvbHVtbjogc3RyaW5nOyBieXRlU2l6ZTogbnVtYmVyIH1bXTtcbiAgICAvLyBFYWNoIGtleSdzIHJvdyB3cml0ZS10aW1lICh0aGUgdGltZSBvZiBpdHMgbmV3ZXN0IHdyaXRlIGluIHRoaXMgcmVhZGVyKS4gVGhlIGpvaW4gY29tcGFyZXMgdGhlc2VcbiAgICAvLyBhY3Jvc3MgcmVhZGVycyB0byByZXNvbHZlIGEga2V5IHRvIGl0cyBsYXRlc3QgdmFsdWUuXG4gICAga2V5VGltZXM6IE1hcDxzdHJpbmcsIG51bWJlcj47XG4gICAgLy8gUGVyLWtleSB0b21ic3RvbmUgdGltZTogdGhlIGtleSB3YXMgZGVsZXRlZCBhdCB0aGlzIHRpbWUuIFRoZSBqb2luIHRyZWF0cyBhIGRlbGV0ZSBsaWtlIGFueSBvdGhlclxuICAgIC8vIGV2ZW50IOKAlCBhIGRlbGV0ZSBvbmx5IHdpbnMgaWYgaXQncyBuZXdlciB0aGFuIGV2ZXJ5IHNldCBmb3IgdGhlIGtleS4gT25seSB0aGUgc3RyZWFtIHJlYWRlciBzZXRzIGl0LlxuICAgIGRlbGV0ZVRpbWVzPzogTWFwPHN0cmluZywgbnVtYmVyPjtcbiAgICAvLyBFYWNoIGtleSdzIHZhbHVlIGZvciB0aGUgY29sdW1uIHBsdXMgdGhlIHJvdydzIHdyaXRlLXRpbWUuIHZhbHVlIG1heSBiZSBBQlNFTlQgKHRoZSByb3cgbmV2ZXIgc2V0XG4gICAgLy8gdGhpcyBjb2x1bW4g4oCUIHRoZSBqb2luIHRoZW4gZmFsbHMgdGhyb3VnaCB0byBhbiBvbGRlciByZWFkZXIgZm9yIHRoYXQga2V5L2NvbHVtbikuXG4gICAgZ2V0Q29sdW1uOiAoY29sdW1uOiBzdHJpbmcpID0+IFByb21pc2U8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9W10+O1xuICAgIC8vIExpa2UgZ2V0Q29sdW1uIGJ1dCByZXR1cm5zIGVhY2ggY2VsbCdzIHJhdyBvbi1kaXNrIGVuY29kaW5nICh0eXBlIHRhZyArIGJ5dGVzKSBrZXllZCBieSBrZXksIFdJVEhPVVRcbiAgICAvLyBkZWNvZGluZyB0aGUgdmFsdWUg4oCUIGZvciBtZXJnZXMsIHdoaWNoIHNwbGljZSB0aGUgd2lubmluZyBieXRlcyBzdHJhaWdodCBpbnRvIHRoZSBvdXRwdXQuIEFCU0VOVFxuICAgIC8vIGNlbGxzIGFyZSBvbWl0dGVkIChhIG1pc3Npbmcga2V5IG1lYW5zIHRoaXMgcmVhZGVyIGRpZG4ndCBzZXQgdGhpcyBjb2x1bW4sIHNvIHRoZSBtZXJnZSBmYWxsc1xuICAgIC8vIHRocm91Z2ggdG8gYW4gb2xkZXIgcmVhZGVyKS4gRWFjaCBjZWxsJ3Mgd3JpdGUtdGltZSBpcyB0aGUgcmVhZGVyJ3Mga2V5VGltZXMgdmFsdWUgZm9yIHRoYXQga2V5LlxuICAgIGdldFJhd0NvbHVtbjogKGNvbHVtbjogc3RyaW5nKSA9PiBQcm9taXNlPE1hcDxzdHJpbmcsIFJhd0NlbGw+PjtcbiAgICAvLyBSZXR1cm5zIHRoZSBjb2x1bW4ncyBJTkRFWCAob2Zmc2V0cyArIHR5cGVzKSBwbHVzIGEgY29udGlndW91cyByb3ctcmFuZ2UgYnl0ZSByZWFkZXIuIFRoZSBwbGFubmVkXG4gICAgLy8gbWVyZ2UgbG9hZHMgdGhpcyBmb3IgZXZlcnkgKHNvdXJjZSwgY29sdW1uKSBvbmNlIOKAlCBzbWFsbCAofjVCL3JvdyksIG5vIHZhbHVlIGJ5dGVzIHB1bGxlZCDigJQgYW5kXG4gICAgLy8gdXNlcyB0eXBlcy9vZmZzZXRzIHRvIHBsYW4gdGhlIG91dHB1dCdzIGJ5dGUgbGF5b3V0LiBFeGVjdXRlIHRoZW4gcmVhZHMgb25seSB0aGUgbmVlZGVkIHJ1bnMuXG4gICAgZ2V0Q29sdW1uSW5kZXg6IChjb2x1bW46IHN0cmluZykgPT4gUHJvbWlzZTxDb2x1bW5JbmRleD47XG4gICAgLy8gTWFwcyBhIGtleSB0byBpdHMgcm93IGluZGV4IGluIHRoaXMgcmVhZGVyIChhbmQgdW5kZWZpbmVkIGlmIGFic2VudCkuIFRoZSBwbGFubmVkIG1lcmdlIHVzZXMgdGhpc1xuICAgIC8vIHRvIGxvb2sgdXAgYSB3aW5uaW5nIGNlbGwncyBzb3VyY2Ugcm93IHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBhIGNvbHVtbiByZWFkLlxuICAgIHJvd09mS2V5OiAoa2V5OiBzdHJpbmcpID0+IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAvLyBUaGUgdmFsdWUgKyB3cml0ZS10aW1lIGZvciAoa2V5LCBjb2x1bW4pLCBvciBBQlNFTlQgaWYgdGhpcyByZWFkZXIgaGFzIG5vIHN1Y2ggY2VsbC5cbiAgICBnZXRTaW5nbGVGaWVsZDogKGtleTogc3RyaW5nLCBjb2x1bW46IHN0cmluZykgPT4gUHJvbWlzZTx7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfSB8IHR5cGVvZiBBQlNFTlQ+O1xufTtcblxuLy8gUmVhZHMganVzdCB0aGUgZmlsZSBoZWFkZXIgKHRoZSA0LWJ5dGUgbGVuZ3RoICsgaGVhZGVyIEpTT04pIOKAlCBubyBjb2x1bW4gZGF0YS4gVXNlZCBieSB0aGUgbWVyZ2Vcbi8vIHBsYW5uZXIgdG8gZ2V0IGVhY2ggZmlsZSdzIHJvdyBjb3VudCwgdGltZSByYW5nZSwgYW5kIGtleSByYW5nZSBjaGVhcGx5IGFjcm9zcyBtYW55IGZpbGVzLlxuZXhwb3J0IHR5cGUgQnVsa0hlYWRlckluZm8gPSB7IHJvd0NvdW50OiBudW1iZXI7IG1pblRpbWU6IG51bWJlcjsgbWF4VGltZTogbnVtYmVyOyBtaW5LZXk/OiBzdHJpbmc7IG1heEtleT86IHN0cmluZzsgY29sdW1uczogeyBjb2x1bW46IHN0cmluZzsgYnl0ZVNpemU6IG51bWJlciB9W10gfTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQnVsa0hlYWRlcihnZXRSYW5nZTogKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSA9PiBQcm9taXNlPEJ1ZmZlcj4sIHRvdGFsQnl0ZXM6IG51bWJlcik6IFByb21pc2U8QnVsa0hlYWRlckluZm8+IHtcbiAgICBjb25zdCBoZWFkZXJMZW5ndGggPSAoYXdhaXQgZ2V0UmFuZ2UoMCwgNCkpLnJlYWRVSW50MzJMRSgwKTtcbiAgICBpZiAoaGVhZGVyTGVuZ3RoIDw9IDAgfHwgaGVhZGVyTGVuZ3RoID4gdG90YWxCeXRlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGhlYWRlciBsZW5ndGggaW4gKDAsICR7dG90YWxCeXRlc31dLCB3YXMgJHtoZWFkZXJMZW5ndGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlciA9IEpTT04ucGFyc2UoKGF3YWl0IGdldFJhbmdlKDQsIDQgKyBoZWFkZXJMZW5ndGgpKS50b1N0cmluZyhcInV0ZjhcIikpIGFzIEZpbGVIZWFkZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcm93Q291bnQ6IGhlYWRlci5yb3dDb3VudCxcbiAgICAgICAgbWluVGltZTogaGVhZGVyLm1pblRpbWUgfHwgMCxcbiAgICAgICAgbWF4VGltZTogaGVhZGVyLm1heFRpbWUgfHwgMCxcbiAgICAgICAgbWluS2V5OiBoZWFkZXIubWluS2V5LFxuICAgICAgICBtYXhLZXk6IGhlYWRlci5tYXhLZXksXG4gICAgICAgIGNvbHVtbnM6IGhlYWRlci5jb2x1bW5zLmZpbHRlcihjID0+IGMubmFtZSAhPT0gVElNRV9DT0xVTU4pLm1hcChjID0+ICh7IGNvbHVtbjogYy5uYW1lLCBieXRlU2l6ZTogYy5sZW5ndGggfSkpLFxuICAgIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQnVsa0RhdGFiYXNlKGNvbmZpZzoge1xuICAgIHRvdGFsQnl0ZXM6IG51bWJlcjtcbiAgICBnZXRSYW5nZTogKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSA9PiBQcm9taXNlPEJ1ZmZlcj47XG4gICAgbmFtZT86IHN0cmluZztcbn0pOiBQcm9taXNlPEJhc2VCdWxrRGF0YWJhc2VSZWFkZXI+IHtcbiAgICBjb25zdCBoZWFkZXJMZW5ndGggPSAoYXdhaXQgY29uZmlnLmdldFJhbmdlKDAsIDQpKS5yZWFkVUludDMyTEUoMCk7XG4gICAgaWYgKGhlYWRlckxlbmd0aCA8PSAwIHx8IGhlYWRlckxlbmd0aCA+IGNvbmZpZy50b3RhbEJ5dGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgaGVhZGVyIGxlbmd0aCBpbiAoMCwgJHtjb25maWcudG90YWxCeXRlc31dLCB3YXMgJHtoZWFkZXJMZW5ndGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlciA9IEpTT04ucGFyc2UoKGF3YWl0IGNvbmZpZy5nZXRSYW5nZSg0LCA0ICsgaGVhZGVyTGVuZ3RoKSkudG9TdHJpbmcoXCJ1dGY4XCIpKSBhcyBGaWxlSGVhZGVyO1xuICAgIGNvbnN0IGRhdGFCYXNlID0gNCArIGhlYWRlckxlbmd0aDtcbiAgICBjb25zdCByb3dDb3VudCA9IGhlYWRlci5yb3dDb3VudDtcbiAgICBjb25zdCBjb2xCeU5hbWUgPSBuZXcgTWFwKGhlYWRlci5jb2x1bW5zLm1hcChjID0+IFtjLm5hbWUsIGNdKSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWFkV2hvbGVDb2x1bW4oY29sdW1uOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd25bXT4ge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2xCeU5hbWUuZ2V0KGNvbHVtbik7XG4gICAgICAgIGlmICghY29sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGNvbHVtbiAke2NvbHVtbn0sIGZpbGUgb25seSBoYXM6ICR7aGVhZGVyLmNvbHVtbnMubWFwKGMgPT4gYy5uYW1lKS5qb2luKFwiLCBcIil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IGNvbmZpZy5nZXRSYW5nZShkYXRhQmFzZSArIGNvbC5vZmZzZXQsIGRhdGFCYXNlICsgY29sLm9mZnNldCArIGNvbC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gZGVjb2RlQnVsa0RhdGEoYmxvYiwgcm93Q291bnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSAoYXdhaXQgcmVhZFdob2xlQ29sdW1uKEtFWV9DT0xVTU4pKS5tYXAodiA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBzdHJpbmcga2V5LCB3YXMgJHt0eXBlb2Ygdn06ICR7SlNPTi5zdHJpbmdpZnkodik/LnNsaWNlKDAsIDUwMCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfSk7XG4gICAgY29uc3Qga2V5SW5kZXggPSBuZXcgTWFwKGtleXMubWFwKChrZXksIGkpID0+IFtrZXksIGldKSk7XG5cbiAgICAvLyBQZXItcm93IHdyaXRlLXRpbWVzLiBPbGQgZmlsZXMgKHdyaXR0ZW4gYmVmb3JlIHRoaXMgY29sdW1uIGV4aXN0ZWQpIGZhbGwgYmFjayB0byB0aGUgZmlsZSdzIGhlYWRlclxuICAgIC8vIHRpbWUgKG9yIDApIGZvciBldmVyeSByb3cg4oCUIGZpbmUsIHNpbmNlIHN1Y2ggZmlsZXMgcHJlZGF0ZSBjb25jdXJyZW50LXRpbWUgcmVzb2x1dGlvbi5cbiAgICBjb25zdCB0aW1lczogbnVtYmVyW10gPSBjb2xCeU5hbWUuaGFzKFRJTUVfQ09MVU1OKVxuICAgICAgICA/IChhd2FpdCByZWFkV2hvbGVDb2x1bW4oVElNRV9DT0xVTU4pKS5tYXAodiA9PiB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIiA/IHYgOiAwKVxuICAgICAgICA6IGtleXMubWFwKCgpID0+IGhlYWRlci5tYXhUaW1lIHx8IDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgICB0b3RhbEJ5dGVzOiBjb25maWcudG90YWxCeXRlcyxcbiAgICAgICAgbWluVGltZTogaGVhZGVyLm1pblRpbWUgfHwgMCxcbiAgICAgICAgbWF4VGltZTogaGVhZGVyLm1heFRpbWUgfHwgMCxcbiAgICAgICAgbWluS2V5OiBoZWFkZXIubWluS2V5LFxuICAgICAgICBtYXhLZXk6IGhlYWRlci5tYXhLZXksXG4gICAgICAgIGtleXMsXG4gICAgICAgIGtleVRpbWVzOiBuZXcgTWFwKGtleXMubWFwKChrZXksIGkpID0+IFtrZXksIHRpbWVzW2ldXSkpLFxuICAgICAgICBjb2x1bW5zOiBoZWFkZXIuY29sdW1ucy5maWx0ZXIoYyA9PiBjLm5hbWUgIT09IFRJTUVfQ09MVU1OKS5tYXAoYyA9PiAoeyBjb2x1bW46IGMubmFtZSwgYnl0ZVNpemU6IGMubGVuZ3RoIH0pKSxcbiAgICAgICAgYXN5bmMgZ2V0Q29sdW1uKGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgcmVhZFdob2xlQ29sdW1uKGNvbHVtbik7XG4gICAgICAgICAgICByZXR1cm4ga2V5cy5tYXAoKGtleSwgaSkgPT4gKHsga2V5LCB2YWx1ZTogdmFsdWVzW2ldLCB0aW1lOiB0aW1lc1tpXSB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGdldFJhd0NvbHVtbihjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBSYXdDZWxsPigpO1xuICAgICAgICAgICAgY29uc3QgY29sID0gY29sQnlOYW1lLmdldChjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKCFjb2wpIHJldHVybiBtYXA7IC8vIGZpbGUgbGFja3MgdGhpcyBjb2x1bW4g4oaSIGV2ZXJ5IGNlbGwgQUJTRU5UIChmYWxsIHRocm91Z2gpXG4gICAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgY29uZmlnLmdldFJhbmdlKGRhdGFCYXNlICsgY29sLm9mZnNldCwgZGF0YUJhc2UgKyBjb2wub2Zmc2V0ICsgY29sLmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBpbmRleFNpemUgPSA0ICogKHJvd0NvdW50ICsgMSkgKyByb3dDb3VudDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9iWzQgKiAocm93Q291bnQgKyAxKSArIGldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBUWVBFX0FCU0VOVCkgY29udGludWU7IC8vIG9taXQgQUJTRU5UIHNvIHRoZSBqb2luIGZhbGxzIHRocm91Z2hcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGJsb2IucmVhZFVJbnQzMkxFKDQgKiBpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBibG9iLnJlYWRVSW50MzJMRSg0ICogKGkgKyAxKSk7XG4gICAgICAgICAgICAgICAgbWFwLnNldChrZXlzW2ldLCB7IHR5cGUsIGJ5dGVzOiBibG9iLnN1YmFycmF5KGluZGV4U2l6ZSArIHN0YXJ0LCBpbmRleFNpemUgKyBlbmQpIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgZ2V0Q29sdW1uSW5kZXgoY29sdW1uKSB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xCeU5hbWUuZ2V0KGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoIWNvbCkge1xuICAgICAgICAgICAgICAgIC8vIEZpbGUgbGFja3MgdGhpcyBjb2x1bW4g4oCUIHByZXNlbnQgYW4gYWxsLUFCU0VOVCBpbmRleCBzbyB0aGUgcGxhbm5lciBjYW4gdHJlYXQgaXRcbiAgICAgICAgICAgICAgICAvLyB1bmlmb3JtbHkgd2l0aCBmaWxlcyB0aGF0IGhhdmUgdGhlIGNvbHVtbi5cbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gbmV3IFVpbnQzMkFycmF5KHJvd0NvdW50ICsgMSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgVWludDhBcnJheShyb3dDb3VudCkuZmlsbChUWVBFX0FCU0VOVCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZXMsXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIHJlYWRWYWx1ZUJ5dGVzKCkgeyByZXR1cm4gRU1QVFlfQlVGRkVSOyB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb2xCYXNlID0gZGF0YUJhc2UgKyBjb2wub2Zmc2V0O1xuICAgICAgICAgICAgY29uc3QgaW5kZXhTaXplID0gNCAqIChyb3dDb3VudCArIDEpICsgcm93Q291bnQ7XG4gICAgICAgICAgICAvLyBPbmUgcmVhZCBwdWxscyBvZmZzZXRzICsgdHlwZXMgKHNtYWxsIOKAlCB+NSBCL3JvdykuIEJsb2NrIGNhY2hlIG1ha2VzIHN1YnNlcXVlbnQgdmFsdWUgcmVhZHNcbiAgICAgICAgICAgIC8vIG9mIG5lYXJieSByb3dzIGNoZWFwLiBEZWNvZGVkIGludG8gYWxpZ25lZCB0eXBlZCBhcnJheXMgc28gdGhlIGV4ZWN1dG9yIGNhbiBkbyBPKDEpIGxvb2t1cHMuXG4gICAgICAgICAgICBjb25zdCBpbmRleEJ1ZiA9IGF3YWl0IGNvbmZpZy5nZXRSYW5nZShjb2xCYXNlLCBjb2xCYXNlICsgaW5kZXhTaXplKTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBuZXcgVWludDMyQXJyYXkocm93Q291bnQgKyAxKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHJvd0NvdW50OyBpKyspIG9mZnNldHNbaV0gPSBpbmRleEJ1Zi5yZWFkVUludDMyTEUoNCAqIGkpO1xuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgVWludDhBcnJheShyb3dDb3VudCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHR5cGVzW2ldID0gaW5kZXhCdWZbNCAqIChyb3dDb3VudCArIDEpICsgaV07XG4gICAgICAgICAgICBjb25zdCBkYXRhU3RhcnQgPSBjb2xCYXNlICsgaW5kZXhTaXplO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgICAgIGFzeW5jIHJlYWRWYWx1ZUJ5dGVzKHN0YXJ0Um93LCBlbmRSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFJvdyA8PSBzdGFydFJvdykgcmV0dXJuIEVNUFRZX0JVRkZFUjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBvZmZzZXRzW3N0YXJ0Um93XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gb2Zmc2V0c1tlbmRSb3ddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kIDw9IHN0YXJ0KSByZXR1cm4gRU1QVFlfQlVGRkVSO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmdldFJhbmdlKGRhdGFTdGFydCArIHN0YXJ0LCBkYXRhU3RhcnQgKyBlbmQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICByb3dPZktleShrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBrZXlJbmRleC5nZXQoa2V5KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgZ2V0U2luZ2xlRmllbGQoa2V5LCBjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IGtleUluZGV4LmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHJvdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gQUJTRU5UO1xuICAgICAgICAgICAgY29uc3QgY29sID0gY29sQnlOYW1lLmdldChjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKCFjb2wpIHJldHVybiBBQlNFTlQ7XG4gICAgICAgICAgICBjb25zdCBjb2xCYXNlID0gZGF0YUJhc2UgKyBjb2wub2Zmc2V0O1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0c0J1ZiA9IGF3YWl0IGNvbmZpZy5nZXRSYW5nZShjb2xCYXNlICsgNCAqIHJvdywgY29sQmFzZSArIDQgKiByb3cgKyA4KTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gb2Zmc2V0c0J1Zi5yZWFkVUludDMyTEUoMCk7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBvZmZzZXRzQnVmLnJlYWRVSW50MzJMRSg0KTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVQb3MgPSBjb2xCYXNlICsgNCAqIChyb3dDb3VudCArIDEpICsgcm93O1xuICAgICAgICAgICAgY29uc3QgdHlwZUJ1ZiA9IGF3YWl0IGNvbmZpZy5nZXRSYW5nZSh0eXBlUG9zLCB0eXBlUG9zICsgMSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhU3RhcnQgPSBjb2xCYXNlICsgNCAqIChyb3dDb3VudCArIDEpICsgcm93Q291bnQ7XG4gICAgICAgICAgICBsZXQgYnl0ZXMgPSBFTVBUWV9CVUZGRVI7XG4gICAgICAgICAgICBpZiAoZW5kID4gc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBieXRlcyA9IGF3YWl0IGNvbmZpZy5nZXRSYW5nZShkYXRhU3RhcnQgKyBzdGFydCwgZGF0YVN0YXJ0ICsgZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGVjb2RlVmFsdWUodHlwZUJ1ZlswXSwgYnl0ZXMpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBBQlNFTlQpIHJldHVybiBBQlNFTlQ7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgdGltZTogdGltZXNbcm93XSB9O1xuICAgICAgICB9LFxuICAgIH07XG59XG4iXX0=
513
- /* _JS_SOURCE_HASH = "eb82a25b173617ed8a4a1814aa99444502e4d56e363c8bb8b80d2ea1f6aa5e1f"; */
513
+ /* _JS_SOURCE_HASH = "9a6ef16155eeef797edef47467ace2aa8a3c9b5493e6be9fbb76a7c57b83b8b5"; */