sliftutils 1.7.103 → 1.7.105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliftutils",
3
- "version": "1.7.103",
3
+ "version": "1.7.105",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -57,7 +57,7 @@
57
57
  "node-forge": "https://github.com/sliftist/forge#e618181b469b07bdc70b968b0391beb8ef5fecd6",
58
58
  "preact-old-types": "^10.28.1",
59
59
  "shell-quote": "^1.8.3",
60
- "socket-function": "^1.2.30",
60
+ "socket-function": "^1.2.31",
61
61
  "typenode": "^6.6.1",
62
62
  "typesafecss": "*",
63
63
  "ws": "^8.18.3",
@@ -54,7 +54,8 @@ type ParsedName = {
54
54
  };
55
55
 
56
56
  function parseLogFileName(name: string): ParsedName | undefined {
57
- let match = /^pid(\d+)_born(\d+)_thread([\w-]+?)_from(\d+)(?:_to(\d+)_count(\d+)_id([a-z0-9]+))?\.jsonl(\.lz4)?$/.exec(name);
57
+ // The time fields accept a fractional part: hosts that shim Date.now to a true-time clock return fractional milliseconds, and files written before the writer rounded them are already on disk everywhere - they must stay listable (and maintainable, or they would never be compressed or cleaned).
58
+ let match = /^pid(\d+)_born(\d+)_thread([\w-]+?)_from(\d+(?:\.\d+)?)(?:_to(\d+(?:\.\d+)?)_count(\d+)_id([a-z0-9]+))?\.jsonl(\.lz4)?$/.exec(name);
58
59
  if (!match) return undefined;
59
60
  let compressed = !!match[8];
60
61
  // A compressed file without its compression fields (or the reverse) is not one of ours
@@ -207,7 +208,8 @@ export class StreamingLogs {
207
208
  try {
208
209
  if (!this.currentPath) {
209
210
  await fs.promises.mkdir(this.config.folder, { recursive: true });
210
- this.currentPath = path.join(this.config.folder, `pid${process.pid}_born${this.processStartTime}_thread${this.threadId}_from${Date.now()}${UNCOMPRESSED_EXT}`);
211
+ // Rounded, as a shimmed Date.now can return fractional milliseconds, and a "." in the name breaks name parsing for any reader without the fractional-tolerant regex
212
+ this.currentPath = path.join(this.config.folder, `pid${process.pid}_born${this.processStartTime}_thread${this.threadId}_from${Math.round(Date.now())}${UNCOMPRESSED_EXT}`);
211
213
  this.currentBytes = 0;
212
214
  }
213
215
  await fs.promises.appendFile(this.currentPath, data);
@@ -245,7 +247,7 @@ export class StreamingLogs {
245
247
  }
246
248
  let compressed = LZ4.compress(raw);
247
249
  let id = Math.random().toString(36).slice(2, 10);
248
- let finalName = `${parsed.originKey}_to${Date.now()}_count${entryCount}_id${id}${COMPRESSED_EXT}`;
250
+ let finalName = `${parsed.originKey}_to${Math.round(Date.now())}_count${entryCount}_id${id}${COMPRESSED_EXT}`;
249
251
  let tempDir = path.join(this.config.folder, ".tmp");
250
252
  await fs.promises.mkdir(tempDir, { recursive: true });
251
253
  let tempPath = path.join(tempDir, finalName);
@@ -58,5 +58,5 @@ exports.bufferChunkStream = bufferChunkStream;
58
58
  // Re-exported for the existing importers - the implementations (and moveArchiveFile) live in archiveHelpers.ts, beside this interface rather than in it
59
59
  var archiveHelpers_1 = require("./archiveHelpers");
60
60
  Object.defineProperty(exports, "copyArchiveFile", { enumerable: true, get: function () { return archiveHelpers_1.copyArchiveFile; } , configurable: true});
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUFyY2hpdmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiSUFyY2hpdmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx3S0FBd0s7OztBQUV4SyxzSkFBc0o7QUFDekksUUFBQSx3QkFBd0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUV2RCx5TEFBeUw7QUFDNUssUUFBQSxvQkFBb0IsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pELFNBQWdCLHVCQUF1QixDQUFDLFlBQW9CO0lBQ3hELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxnQ0FBd0IsQ0FBQztJQUNoRCxJQUFJLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxZQUFZLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFHLENBQUM7QUFDTCxDQUFDO0FBTEQsMERBS0M7QUF1RlksUUFBQSxpQkFBaUIsR0FBcUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFtSWhGLHdYQUF3WDtBQUMzVyxRQUFBLDBCQUEwQixHQUFHLDRDQUE0QyxDQUFDO0FBRXZGLDhMQUE4TDtBQUNqTCxRQUFBLG1CQUFtQixHQUFHLHFDQUFxQyxDQUFDO0FBRXpFLHVXQUF1VztBQUMxVixRQUFBLHNCQUFzQixHQUFHLHdDQUF3QyxDQUFDO0FBRWxFLFFBQUEsVUFBVSxHQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVuRCwyUkFBMlI7QUFDOVEsUUFBQSxjQUFjLEdBQUcsNkNBQTZDLENBQUM7QUFDNUUsb0xBQW9MO0FBQ3BMLDhKQUE4SjtBQUM5SixTQUFnQixtQkFBbUIsQ0FBQyxXQUF5QztJQUN6RSxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzlCLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBSEQsa0RBR0M7QUFDRCxpTkFBaU47QUFDak4sU0FBZ0IsbUJBQW1CLENBQUMsWUFBZ0M7SUFDaEUsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUZELGtEQUVDO0FBRUQsd0tBQXdLO0FBQzNKLFFBQUEsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFbkQsbVJBQW1SO0FBQ25SLFNBQWdCLGlCQUFpQixDQUFDLElBQVk7SUFDMUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsT0FBTztRQUNILFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNwQixJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUM1QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsMkJBQW1CLENBQUMsQ0FBQztZQUNoRSxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBQ0QsYUFBYSxFQUFFLEdBQUcsRUFBRTtZQUNoQixNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBYkQsOENBYUM7QUFFRCx3SkFBd0o7QUFDeEosbURBQW1EO0FBQTFDLGlIQUFBLGVBQWUsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBpbXBvcnRhbnQgb3BlcmF0aW9ucyBvZiBhbiBhcmNoaXZlIGJ1Y2tldCAoZXh0cmFjdGVkIGZyb20gQXJjaGl2ZXNCYWNrYmxhemUpLCBzbyBvdGhlciBiYWNrZW5kcyAoZS5nLiBvdXIgb3duIHJlbW90ZSBzdG9yYWdlIHNlcnZlcikgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5LlxuXG4vLyBBIHdyaXRlIG1heSBub3QgYmUgc3RhbXBlZCBtb3JlIHRoYW4gdGhpcyBmYXIgaW4gdGhlIGZ1dHVyZSwgb3IgY2xvY2sgc2tldyBiZXR3ZWVuIG1hY2hpbmVzIHdvdWxkIGxldCBhIGJhZCB0aW1lc3RhbXAgYmxvY2sgd3JpdGVzIGZvciBhIGxvbmcgdGltZS5cbmV4cG9ydCBjb25zdCBNQVhfTEFTVF9NT0RJRklFRF9GVVRVUkUgPSAxNSAqIDYwICogMTAwMDtcblxuLy8gSG93IGxvbmcgYnJvd3NlcnMgbWF5IGNhY2hlIGZpbGVzIGZyb20gaW1tdXRhYmxlIGJ1Y2tldHMgKHRoZSBDYWNoZS1Db250cm9sIG1heC1hZ2UpLCBzaGFyZWQgYnkgZXZlcnkgaG9zdGluZyBwYXRoIChiYWNrYmxhemUgYnVja2V0IHNldHRpbmdzIGFuZCBvdXIgb3duIHN0b3JhZ2Ugc2VydmVyJ3MgSFRUUCByb3V0ZSlcbmV4cG9ydCBjb25zdCBJTU1VVEFCTEVfQ0FDSEVfVElNRSA9IDg2NDAwICogMTAwMDtcbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZExhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBtYXggPSBEYXRlLm5vdygpICsgTUFYX0xBU1RfTU9ESUZJRURfRlVUVVJFO1xuICAgIGlmIChsYXN0TW9kaWZpZWQgPiBtYXgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsYXN0TW9kaWZpZWQgaXMgdG9vIGZhciBpbiB0aGUgZnV0dXJlOiAke2xhc3RNb2RpZmllZH0gPiAke21heH0gKG5vdyArIDE1IG1pbnV0ZXMpYCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCB0eXBlIFJlbW90ZUNvbmZpZyA9IHtcbiAgICAvLyBOT1RFOiBWZXJzaW9uIGlzIHVzZWQgd2hlbiB1cGRhdGluZyB0aGUgY29uZmlndXJhdGlvbi4gVGhlIG5ld2VyIHZlcnNpb24gaXMgYWx3YXlzIHRha2VuLiBBIG1pc3NpbmcgdmVyc2lvbiBjb3VudHMgYXMgdmVyc2lvbiAtMS5cbiAgICB2ZXJzaW9uPzogbnVtYmVyO1xuICAgIHNvdXJjZXM6IFJlbW90ZUNvbmZpZ0Jhc2VbXTtcbn07XG5cbi8qKlxuICAgIHN0cmluZyBhcmd1bWVudHMgd2lsbCBiZSBhIHVybCwgbG9va2luZyBsaWtlOlxuICAgICAgICBodHRwczovL3N0b3JhZ2UyLnZpZGdyaWR3ZWIuY29tOjQ0NDUvZmlsZS9leGFtcGxlYWNjb3VudC9leGFtcGxlYnVja2V0L3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuICAgICAgICBodHRwczovL2YwMDIuYmFja2JsYXplYjIuY29tL2ZpbGUvcXVlcnlzdWJ0ZXN0LWNvbS1wdWJsaWMtaW1tdXRhYmxlL3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuICAgICAgICAtIFRoZXNlIG1hcCB0byB7IHVybCB9LCB3aXRoIHRoZSB0eXBlIGluZmVycmVkIGZyb20gdGhlIHVybFxuICAgICAgICAtIEhvc3RlZCB1cmxzIGFyZSAvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+Ly4uLiwgYmFja2JsYXplIHVybHMgYXJlIC9maWxlLzxidWNrZXROYW1lPi8uLi5cblxuICAgIE5PVEU6IElmIHdlIGRvIG5vdCBoYXZlIHJpZ2h0IGFjY2VzcyB0byB0aGVzZSwgdGhlbiBpdCBiZWNvbWVzIGEgcmVhZC1vbmx5IElBcmNoaXZlcywgd2hlcmUgd2Ugc29sZWx5IHJlYWQgdXNpbmcgdGhlIHVybCBmb3JtICh3aGljaCBtaWdodCB0aHJvdyBkdWUgdG8gbm90IGhhdmluZyBhY2Nlc3MgYXMgd2VsbCkuIFVOTEVTUyBPdXIgY29uZmlndXJhdGlvbiBleHBsaWNpdGx5IGhhcyBwdWJsaWM6IGZhbHNlLCBpbiB3aGljaCBjYXNlLCB3ZSBkb24ndCBldmVuIGhpdCB0aGUgVVJMIGFuZCB3ZSB0aHJvdyBvbiBhY2Nlc3MuXG5cbiAgICBOT1RFOiBJZiB3ZSdyZSBpbiB0aGUgYnJvd3Nlciwgd2Ugc2hvdWxkIGFsbG93IGRvd25sb2FkaW5nIHRoZSBmaWxlcyB2aWEgdGhlIFVSTCBmb3JtIChpZiBpdCdzIGEgcHVibGljIGJ1Y2tldCksIGhvd2V2ZXIsIHdlIHdvbid0IGFsbG93IHdyaXRpbmcsIGJlY2F1c2UgdGhlaXIgc2VydmVycyBkbyBub3QgYWxsb3cgc2VjdXJlIGJyb3dzZXIgd3JpdGVzLlxuKi9cbmV4cG9ydCB0eXBlIFJlbW90ZUNvbmZpZ0Jhc2UgPSBzdHJpbmcgfCBTb3VyY2VDb25maWc7XG5cbi8qKiBPbmUgY29uZmlndXJlZCBzb3VyY2UgaW4gYSByb3V0aW5nIGNvbmZpZzogYSBob3N0ZWQgKG91ciBzdG9yYWdlIHNlcnZlcikgb3IgYmFja2JsYXplIGVudHJ5LiBSZXF1ZXN0cyBjYXJyeSB0aGUgZXhhY3QgU291cmNlQ29uZmlnIHRoZXkgc2VsZWN0ZWQsIGFuZCB0aGUgc2VydmVyIG1hdGNoZXMgaXQgYWdhaW5zdCBpdHMgb3duIGVudHJpZXMgdG8gcGljayB0aGUgYmFja2luZyBzdG9yZS4gKi9cbmV4cG9ydCB0eXBlIFNvdXJjZUNvbmZpZyA9IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZztcblxuZXhwb3J0IHR5cGUgQ29tbW9uQ29uZmlnID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdG9yYWdlIHRoaXMgZW50cnkgbmFtZXMsIGFzIG9wcG9zZWQgdG8gdGhlIHJ1bGVzIGZvciB1c2luZyBpdC4gRXZlcnkgZW50cnkgd2l0aCB0aGUgc2FtZVxuICAgICAqIG5hbWUgKGZvciB0aGUgc2FtZSBhY2NvdW50IGFuZCBidWNrZXQpIElTIHRoZSBzYW1lIHN0b3JhZ2U6IG9uZSBmb2xkZXIgb24gdGhlIHNlcnZlciwgb25lXG4gICAgICogc3RvcmUsIG9uZSBpbmRleCAtIGhvd2V2ZXIgbWFueSBlbnRyaWVzIHRoZXJlIGFyZSBhbmQgd2hhdGV2ZXIgdGhlaXIgd2luZG93cyBhbmQgcm91dGVzIHNheS5cbiAgICAgKiBFdmVyeXRoaW5nIGFib3V0IFdIRU4gYW5kIFdISUNIIEtFWVMgKHZhbGlkV2luZG93LCByb3V0ZSkgaXMgcG9saWN5IGxheWVyZWQgb24gdG9wIG9mIGl0LCBhbmRcbiAgICAgKiBjaGFuZ2luZyB0aGF0IHBvbGljeSBuZXZlciBtb3ZlcyBkYXRhLlxuICAgICAqXG4gICAgICogTGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZSwgZGFzaCBhbmQgcGVyaW9kcywgdXAgdG8gNjQgY2hhcmFjdGVycyAtIHNvIGEgaG9zdCBvciBhIHZlcnNpb25cbiAgICAgKiBjYW4gYmUgdXNlZCBhcy1pcy4gSXQgaXMgdGhlIGZvbGRlciBuYW1lLCBzbyBpdCBtdXN0IHN0YXkgdW5pcXVlIGFuZCBtdXN0IG5ldmVyIGJlIHJldXNlZCBmb3JcbiAgICAgKiBkaWZmZXJlbnQgc3RvcmFnZTpcbiAgICAgKiBwb2ludGluZyB0d28gdW5yZWxhdGVkIGVudHJpZXMgYXQgb25lIG5hbWUgbWVyZ2VzIHRoZWlyIGRhdGEsIGFuZCByZS11c2luZyBhIHJldGlyZWQgbmFtZVxuICAgICAqIGhhbmRzIHRoZSBuZXcgZW50cnkgdGhlIHJldGlyZWQgb25lJ3MgZmlsZXMuIERlY2lkaW5nIHRoYXQgaXMgdGhlIGRldmVsb3BlcidzIGpvYiAtIHRoZSBzZXJ2ZXJcbiAgICAgKiBvbmx5IGV2ZXIgZG9lcyB3aGF0IHRoZSBuYW1lIHNheXMuXG4gICAgICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBCeSBkZWZhdWx0IGEgc2VydmVyIGhvc3RpbmcgdGhpcyBidWNrZXQgZWFnZXJseSBjb3BpZXMgdGhpcyBzb3VyY2UncyBmdWxsIGNvbnRlbnRzIG9udG8gaXRzIG93biBkaXNrIChvbiB0b3Agb2YgdGhlIGxhenkgcmVhZC10aHJvdWdoIGNhY2hpbmcpLiBTZXQgdGhpcyB0byBiZSBhIGZyb250IGVuZCBmb3IgYSB2ZXJ5IGxhcmdlIGRhdGFiYXNlIHdpdGhvdXQgY29weWluZyB0aGUgZnVsbCBkYXRhYmFzZSAtIHJlYWRzIHN0aWxsIGRvd24tY2FjaGUgaW5kaXZpZHVhbCBmaWxlcyBvbiBkZW1hbmQuICovXG4gICAgbm9GdWxsU3luYz86IGJvb2xlYW47XG4gICAgLyoqIEJ5dGVzIG9mIHJlYWQtY2FjaGUgdGhpcyBzZXJ2ZXIncyBkaXNrIG1heSBob2xkOyBsZWFzdC1yZWNlbnRseS11c2VkIGZpbGVzIGFyZSBkZWxldGVkIGZyb20gZGlzayB0byBzdGF5IHVuZGVyIGl0IChvbmx5IGV2ZXIgd2hlbiBhbm90aGVyIHNvdXJjZSB2ZXJpZmlhYmx5IGhvbGRzIHRoZSBmaWxlIC0gdGhlIG9ubHkgY29weSBpcyBuZXZlciBkZWxldGVkKS4gUmVxdWlyZXMgbm9GdWxsU3luYyAoYSBmdWxsIGNvcHkgY2FuJ3QgYmUgYm91bmRlZCkuICovXG4gICAgcmVhZGVyRGlza0xpbWl0PzogbnVtYmVyO1xuICAgIC8qKiBUaGUgd3JpdGUgdGltZXMgKFtzdGFydE1zLCBlbmRNc10pIHRoaXMgc291cmNlIGlzIHZhbGlkIGZvciAoc2VlIEFyY2hpdmVzU291cmNlLnZhbGlkV2luZG93IGZvciB0aGUgc3luY2hyb25pemF0aW9uIHNlbWFudGljcykuIFJlcXVpcmVkIG9uIG9iamVjdCBjb25maWdzOiBjb25maWd1cmF0aW9uIGNoYW5nZXMgbXVzdCBiZSBTQ0hFRFVMRUQgKGEgbmV3IHNvdXJjZSBiZWNvbWVzIHZhbGlkIGF0IGEgZnV0dXJlIHRpbWUgd2hpbGUgdGhlIG9sZCBvbmUncyB3aW5kb3cgZW5kcyksIG5vdCBmbGlwcGVkIGluc3RhbnRseS4gUGxhaW4gVVJMLXN0cmluZyBzb3VyY2VzIGRlZmF1bHQgdG8gRlVMTF9WQUxJRF9XSU5ET1cgLSBvbmNlIHlvdSdyZSB3cml0aW5nIG9iamVjdCBjb25maWdzLCB5b3UncmUgZG9pbmcgc29tZXRoaW5nIGNvbXBsaWNhdGVkIGVub3VnaCB0byB0aGluayBhYm91dCB3aGVuIHRoaW5ncyBjaGFuZ2UuICovXG4gICAgdmFsaWRXaW5kb3c6IFtudW1iZXIsIG51bWJlcl07XG4gICAgLyoqIFNoYXJkaW5nOiB0aGUgZnJhY3Rpb24gb2YgdGhlIGtleSBzcGFjZSB0aGlzIHNvdXJjZSBoYW5kbGVzLCBhcyBbc3RhcnQsIGVuZCkgb3ZlciBbMCwgMSkgKGtleXMgYXJlIHJvdXRlZCBieSBnZXRSb3V0ZSBpbiByZW1vdGVDb25maWcudHMpLiBEZWZhdWx0cyB0byBGVUxMX1JPVVRFICh1bnNoYXJkZWQpLiBBdCBldmVyeSBwb2ludCBpbiB0aW1lIHRoZSBzb3VyY2VzJyByb3V0ZXMgbXVzdCBmdWxseSBjb3ZlciBbMCwgMSksIG9yIHNvbWUga2V5cyBjb3VsZCBuZXZlciBiZSByZWFkLiAqL1xuICAgIHJvdXRlPzogW251bWJlciwgbnVtYmVyXTtcbiAgICAvKiogU2V0IG9uIGVudHJpZXMgaW5qZWN0ZWQgaW50byB0aGUgaW4tbWVtb3J5IGNvbmZpZyBieSBhbiBvdmVybGF5IChhIGRlcGxveSBzd2l0Y2hvdmVyJ3MgYWx0ZXJuYXRlLXBvcnQgd2luZG93KS4gTmV2ZXIgd3JpdHRlbiB0byBkaXNrOiByZXNvbHZlSW50ZXJtZWRpYXRlU291cmNlcyBzdHJpcHMgdGhlc2UgYW5kIHJlam9pbnMgdGhlIHdpbmRvd3MgYXJvdW5kIHRoZW0sIHdoaWNoIGlzIGFsc28gaG93IGEgY2xpZW50IHRlbGxzIHdoZXRoZXIgYW4gdXBkYXRlIGlzIGEgcmVhbCBjb25maWd1cmF0aW9uIGNoYW5nZSBvciBqdXN0IGFuIG92ZXJsYXkuIFRoZSBWQUxVRSBpcyB0aGUgdXJsIG9mIHRoZSBzb3VyY2UgdGhpcyBpbnRlcm1lZGlhdGUgd2FzIHNwbGl0IG91dCBvZiAoaXRzIGFsdGVybmF0ZS1wb3J0IHZpZXcpIC0gc28gYSByZXF1ZXN0IG5hbWluZyB0aGUgaW50ZXJtZWRpYXRlIHN0aWxsIHJlc29sdmVzIHRvIHRoZSBPUklHSU5BTCBzb3VyY2UsIGV2ZW4gYWZ0ZXIgdGhlIGludGVybWVkaWF0ZSByZWpvaW5zIGFuZCB0aGUgZW50cnkgaXMgZ29uZS4gKi9cbiAgICBpbnRlcm1lZGlhdGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBIb3N0ZWRDb25maWcgPSBDb21tb25Db25maWcgJiB7XG4gICAgdHlwZTogXCJyZW1vdGVcIjtcblxuICAgIC8vIEV4OiBodHRwczovLzk5LTI1MC0xMjQtOTEucXVlcnlzdWJ0ZXN0LmNvbTo1MjMzL2ZpbGUvcm9vdC91bmlxdWVidWNrZXRuYW1lL3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuICAgIC8vIE5PVEU6IFRoZSBhY2NvdW50IGFuZCBidWNrZXQgbmFtZSBhcmUgb2J0YWluZWQgZnJvbSB0aGUgVVJMLlxuICAgIHVybDogc3RyaW5nO1xuXG4gICAgLy8gTk9URTogQXV0aGVudGljYXRpb24gaXMgaGFuZGxlZCBieSBjZXJ0LnRzLCB2aWEgaGF2aW5nIHlvdXIgbWFjaGluZSB0cnVzdGVkIHRvIGFjY2VzcyB0aGlzIGFjY291bnQuIFxuXG4gICAgcHVibGljPzogYm9vbGVhbjtcbiAgICAvLyBGYXN0IG1vZGU6IHRoZSBzZXJ2ZXIgYWNrbm93bGVkZ2VzIHdyaXRlcyBvbmNlIHRoZXkgYXJlIGluIG1lbW9yeSwgZmx1c2hpbmcgdG8gZGlzayBhZnRlciB3cml0ZURlbGF5IChkZWZhdWx0IDUgbWludXRlcykgYW5kIGNvYWxlc2Npbmcgd3JpdGVzIHRvIHRoZSBzYW1lIGZpbGUuIEEgc2VydmVyIGNyYXNoIGxvc2VzIHdyaXRlcyB0aGF0IGhhdmVuJ3QgZmx1c2hlZCB5ZXQuXG4gICAgZmFzdD86IGJvb2xlYW47XG4gICAgd3JpdGVEZWxheT86IG51bWJlcjtcbiAgICAvLyBXcml0ZXMgdG8gcGF0aHMgdGhhdCBhbHJlYWR5IGV4aXN0IGFyZSBkaXNhbGxvd2VkIChkZWxldGVzIHN0aWxsIHdvcmspLlxuICAgIGltbXV0YWJsZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCYWNrYmxhemVDb25maWcgPSBDb21tb25Db25maWcgJiB7XG4gICAgdHlwZTogXCJiYWNrYmxhemVcIjtcbiAgICAvLyBFeDogaHR0cHM6Ly9mMDAyLmJhY2tibGF6ZWIyLmNvbS9maWxlL3F1ZXJ5c3VidGVzdC1jb20tcHVibGljLWltbXV0YWJsZS9zdG9yYWdlL3N0b3JhZ2Vyb3V0aW5nLmpzb25cbiAgICAvLyBOT1RFOiBUaGUgYnVja2V0IG5hbWUgaXMgb2J0YWluZWQgZnJvbSB0aGUgVVJMLlxuICAgIHVybDogc3RyaW5nO1xuICAgIC8vIFB1YmxpYyBidWNrZXRzIGFyZSBzZXJ2ZWQgb3ZlciBwbGFpbiBIVFRQUyBHRVRzIChnZXRVUkwpLiBQcml2YXRlIGJ1Y2tldHMgYXJlIEFQSS1hY2Nlc3Mgb25seS5cbiAgICBwdWJsaWM/OiBib29sZWFuO1xuICAgIC8vIE5PVEU6IFRoaXMgaXNuJ3QgZW5mb3JjZWQgb24gdGhlIGJhY2tibGF6ZSBsZXZlbCwgc28gdGhpcyBpcyBqdXN0IGEgY2xpZW50LXNpZGUgZ3VhcmFudGVlLiBUaGlzIGNhbiBjaGFuZ2UgaG93IHdlIGNhY2hlIGZpbGVzLlxuICAgIC8vICAtIEJhY2tibGF6ZSBkb2VzIHN1cHBvcnQgaW1tdXRhYmlsaXR5LiBIb3dldmVyLCBhcHBhcmVudGx5LCBvbmNlIHdlIGVuYWJsZSBpdCBvbiBhIGJ1Y2tldCwgd2UgY2FuJ3QgZGlzYWJsZSBpdCwgd2hpY2ggaXMgcmVhbGx5IGJhZCwgYXMgaXQgbWVhbnMgaWYgb3VyIGNvZGUgY291bGQgZXZlciBlbmFibGUgaXQgYW5kIHdlIGFjY2lkZW50YWxseSBlbmFibGUgaXQgb24gYW4gaW1wb3J0YW50IGJ1Y2tldCwgd2UgZXNzZW50aWFsbHkganVzdCBicmlja2VkIHRoYXQgYnVja2V0LiBTbyB3ZSBzaG91bGQgbmV2ZXIgd3JpdGUgYW55IGNvZGUgdGhhdCBldmVyIHRyaWVzIHRvIHVzZSBiYWNrYmxhemUgdG8gbWFrZSB0aGluZ3MgaW1tdXRhYmxlLiBcbiAgICBpbW11dGFibGU/OiBib29sZWFuO1xuICAgIC8vIENPUlMgb3JpZ2lucyBhbGxvd2VkIHRvIGNvbnN1bWUgdGhlIGJ1Y2tldCdzIGZpbGVzIGluIGEgYnJvd3Nlci4gTm90IGEgc2VjdXJpdHkgYm91bmRhcnkgKGFjY2VzcyBpcyBnYXRlZCBieSB0aGUgQVBJIGtleSAvIHNpZ25lZCBVUkxzLCBuZWl0aGVyIG9mIHdoaWNoIHJpZGVzIGluIGNvb2tpZXMpIC0gaXQgb25seSBjb250cm9scyB3aGljaCBzaXRlcycgaW4tcGFnZSBKYXZhU2NyaXB0IGNhbiByZWFkIHJlc3BvbnNlcy4gRGVmYXVsdHMgdG8gYW55IEhUVFBTIG9yaWdpbi5cbiAgICBhbGxvd2VkT3JpZ2lucz86IHN0cmluZ1tdO1xuXG4gICAgLy8gTk9URTogV2Ugd2lsbCBhY2Nlc3MgdGhlIGFwaSBrZXkgZnJvbSBnZXRTZWNyZXQsIHNlZSBiYWNrYmxhemUudHMgZm9yIHRoZSBzcGVjaWZpYyBrZXlzLlxufTtcblxuXG5leHBvcnQgY29uc3QgRlVMTF9WQUxJRF9XSU5ET1c6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJdO1xuXG5cblxuXG5leHBvcnQgdHlwZSBHZXRDb25maWcgPSB7XG4gICAgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH07XG4gICAgLyoqIFJlYWQgT05MWSBmcm9tIHRoZSBwcmltYXJ5IHNvdXJjZSAtIHRoZSBvbmUgd3JpdGVzIHdvdWxkIHRhcmdldCAtIGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIGFjcm9zcyB0aGUgcmVkdW5kYW50IHNvdXJjZXMuIFVzZSB0aGlzIHdoZW4geW91IHdhbnQgeW91ciByZWFkcyBhbmQgd3JpdGVzIHRvIGJlIHNvbWV3aGF0IGF0b21pYzogdGhlcmUgd2lsbCBzdGlsbCBiZSBpc3N1ZXMgd2l0aCB0aGUgcm91bmQgdHJpcCwgYnV0IHdpdGhvdXQgaXQgeW91IGNvdWxkIHRhbGsgdG8gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBub2RlIGFuZCBnZXQgYSBtdWNoIG9sZGVyIHZhbHVlLiBNb3N0IHJlYWRzIGFyZW4ndCBmb2xsb3dlZCBieSBhIHdyaXRlIHRob3VnaCwgc28gZm9yIG1vc3QgY2FzZXMgaXQncyBiZXR0ZXIgdG8gZ2V0IGEgdmFsdWUgdGhhbiB0byBoYXZlIHRvIHdhaXQgKG9yIGV2ZW4gdGhyb3cpIHdoZW4gdGhlIHByaW1hcnkgbm9kZSBpcyBub3QgYXZhaWxhYmxlLiAqL1xuICAgIG5vRmFsbGJhY2tzPzogYm9vbGVhbjtcbiAgICAvKiogU3RvcmUtdG8tc3RvcmUgY2FsbDogdGhlIHNlcnZpbmcgbm9kZSBhbnN3ZXJzIHB1cmVseSBmcm9tIGl0cyBvd24gZGlzaywgY29tcGxldGVseSBzaG9ydC1jaXJjdWl0aW5nIGl0cyBpbmRleCBob2xkZXJzIC0gY2hhc2luZyBpdHMgb3duIHJlbW90ZSBob2xkZXJzIHdoaWxlIGFuc3dlcmluZyBhbm90aGVyIHN0b3JlIGlzIGhvdyBpbmZpbml0ZSBnZXQgbG9vcHMgYmV0d2VlbiBzdG9yZXMgZm9ybSAoQSBhc2tzIEIsIEIncyBpbmRleCBwb2ludHMgYmFjayBhdCBBLCAuLi4pLiBObyB3aW5kb3cgb3Igcm91dGUgY2hlY2tzIG9uIHJlYWRzOiBpZiB0aGUgYnl0ZXMgYXJlIG9uIGl0cyBkaXNrLCB0aGUgY2FsbGVyIG1heSBoYXZlIHRoZW0uICovXG4gICAgaW50ZXJuYWw/OiBib29sZWFuO1xuICAgIC8qKiBBbHNvIHJldHVybiBzaXplLTAgcmVzdWx0cyAodG9tYnN0b25lcyAtIGFuIGVtcHR5IGZpbGUgSVMgYSBtaXNzaW5nIGZpbGUpIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlbSBhcyBhYnNlbnQuIE9mZiBieSBkZWZhdWx0LCBtYXRjaGluZyBnZXRJbmZvJ3MgZmxhZyBvZiB0aGUgc2FtZSBuYW1lLiBTeW5jaHJvbml6YXRpb24gcGFzc2VzIHRoaXMgc28gYSBERUxFVEVEIGZpbGUgKHdpdGggaXRzIHdyaXRlIHRpbWUpIGlzIGRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgZmlsZSB0aGF0IG5ldmVyIGV4aXN0ZWQuICovXG4gICAgaW5jbHVkZVRvbWJzdG9uZXM/OiBib29sZWFuO1xuICAgIC8qKiBSZWFkcyBmaWxlcyB0aGF0IGFyZSBNQVJLRUQgZm9yIGRlbGV0aW9uIChkZWxldGVkLCBidXQgd2l0aCB0aGVpciBieXRlcyBzdGlsbCBpbiB0aGUgZGVsZXRpb24gaGlzdG9yeSAtIHNlZSBTZXRDb25maWcudW5kZWxldGUgZm9yIHJlc3RvcmluZyB0aGVtKS4gVGhlIGFjdHVhbCBjb250ZW50IGNvbWVzIGJhY2ssIHVubGlrZSBpbmNsdWRlVG9tYnN0b25lcywgd2hpY2ggb25seSByZXBvcnRzIHRoYXQgYSBkZWxldGlvbiBoYXBwZW5lZC4gKi9cbiAgICBpbmNsdWRlTWFya2VkPzogYm9vbGVhbjtcbiAgICAvKiogSG93IG1hbnkgZXh0cmEgdGltZXMgdGhlIFdIT0xFIG9wZXJhdGlvbiBpcyByZXRyaWVkIGFmdGVyIGV2ZXJ5IHNvdXJjZSBpbiBhIHBhc3MgZmFpbGVkIC0gYW55IGVycm9yIGNvdW50cyAodGhlIHdyb25nLXdpbmRvdy9yb3V0ZSBtYXJrZXJzIHN0aWxsIGdldCB0aGVpciBjb25maWcgcmUtcmVzb2x2ZSBmaXJzdCkuIE9ubHkgYXBwbGllcyB0byBmYWxsYmFjayBkaXNwYXRjaCAobXVsdGktc291cmNlLCBub3Qgbm9GYWxsYmFja3MpLCB3aGVyZSBpdCBkZWZhdWx0cyB0byAzOyB0aGUgbm9GYWxsYmFja3Mvd3JpdGUtbm9kZSBwYXRoIGFscmVhZHkgcmV0cmllcyBvbiBpdHMgb3duIGRlYWRsaW5lLiBNdWx0aS1wYXJ0IHVwbG9hZHMgYWRkaXRpb25hbGx5IHJldHJ5IHBlciBwYXJ0IHJlZ2FyZGxlc3Mgb2YgdGhpcy4gKi9cbiAgICByZXRyaWVzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRmluZENvbmZpZyA9IHtcbiAgICBzaGFsbG93PzogYm9vbGVhbjtcbiAgICB0eXBlPzogXCJmaWxlc1wiIHwgXCJmb2xkZXJzXCI7XG4gICAgLyoqIEFsc28gbGlzdCBmaWxlcyBNQVJLRUQgZm9yIGRlbGV0aW9uIChzZWUgR2V0Q29uZmlnLmluY2x1ZGVNYXJrZWQpLiAqL1xuICAgIGluY2x1ZGVNYXJrZWQ/OiBib29sZWFuO1xuICAgIC8qKiBMaXN0aW5ncyBub3JtYWxseSBjb21lIE9OTFkgZnJvbSB0aGUgYXV0aG9yaXRhdGl2ZSBzb3VyY2VzICh0aGUgc2FtZSBub2RlcyB3cml0ZXMgZ28gdG8gLSByZWFkLXlvdXItd3JpdGVzKS4gV2l0aCBmYWxsYmFja3MsIGEgZmFpbGluZyBzaGFyZCdzIHJvdXRlcyBhcmUgY292ZXJlZCBieSB0aGUgbmV4dCBzb3VyY2UgaG9sZGluZyB0aGVtIChlLmcuIGEgd2lkZSByZWFkIHJlcGxpY2EpIGluc3RlYWQgb2YgdGhlIGNhbGwgZmFpbGluZyAtIGhpZ2ggYXZhaWxhYmlsaXR5IGF0IHRoZSBjb3N0IG9mIHBvc3NpYmx5IG1pc3NpbmcganVzdC13cml0dGVuIGRhdGEuIFNpbmdsZS1zb3VyY2UgYXJjaGl2ZXMgaWdub3JlIHRoZSBmbGFnLiAqL1xuICAgIGZhbGxiYWNrcz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEZWxDb25maWcgPSB7XG4gICAgLyoqIFN0YW1wcyB0aGUgZGVsZXRpb24gKGl0cyB0b21ic3RvbmUpIHdpdGggdGhpcyB3cml0ZSB0aW1lIGluc3RlYWQgb2Ygbm93LiBTeW5jaHJvbml6YXRpb24gcGFzc2VzIHRoZSBPUklHSU5BTCBkZWxldGlvbiB0aW1lLCBzbyBkZWxldGlvbiBvcmRlcmluZyBzdXJ2aXZlcyBwcm9wYWdhdGlvbiBleGFjdGx5IGxpa2UgYW55IG90aGVyIHdyaXRlJ3Mgb3JkZXJpbmcuICovXG4gICAgbGFzdE1vZGlmaWVkPzogbnVtYmVyO1xuICAgIC8qKiBTZWUgU2V0Q29uZmlnLmludGVybmFsLiAqL1xuICAgIGludGVybmFsPzogYm9vbGVhbjtcbiAgICAvKiogU2VlIFNldENvbmZpZy5ub0NoZWNrcy4gKi9cbiAgICBub0NoZWNrcz86IGJvb2xlYW47XG4gICAgLyoqIFNlZSBTZXRDb25maWcuZmFsbGJhY2tzLiAqL1xuICAgIGZhbGxiYWNrcz86IGJvb2xlYW47XG4gICAgLyoqIFNlZSBHZXRDb25maWcucmV0cmllcy4gKi9cbiAgICByZXRyaWVzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgR2V0SW5mb0NvbmZpZyA9IHtcbiAgICAvKiogQWxzbyByZXBvcnQgc2l6ZS0wIGVudHJpZXMgKHRvbWJzdG9uZXMgLSBhbiBlbXB0eSBmaWxlIElTIGEgbWlzc2luZyBmaWxlKS4gT2ZmIGJ5IGRlZmF1bHQsIHNvIGEgZGVsZXRlZCBrZXkgcmVwb3J0cyB1bmRlZmluZWQsIG1hdGNoaW5nIGdldC4gU3luY2hyb25pemF0aW9uLXN0eWxlIGNhbGxlcnMgcGFzcyB0aGlzIHdoZW4gdGhleSBuZWVkIGEgZGVsZXRpb24ncyB3cml0ZSB0aW1lIChlLmcuIHRvIGNvbXBhcmUgaXQgYWdhaW5zdCBhIHdyaXRlIHRoZXkgYXJlIGFib3V0IHRvIG1ha2UpLiAqL1xuICAgIGluY2x1ZGVUb21ic3RvbmVzPzogYm9vbGVhbjtcbiAgICAvKiogU2VlIEdldENvbmZpZy5ub0ZhbGxiYWNrczogYW5zd2VyIE9OTFkgZnJvbSB0aGUgcHJpbWFyeSBzb3VyY2UgKHRoZSBvbmUgd3JpdGVzIHdvdWxkIHRhcmdldCkgaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgYWNyb3NzIHRoZSByZWR1bmRhbnQgc291cmNlcy4gKi9cbiAgICBub0ZhbGxiYWNrcz86IGJvb2xlYW47XG4gICAgLyoqIFNlZSBHZXRDb25maWcucmV0cmllcy4gKi9cbiAgICByZXRyaWVzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhbmdlc0FmdGVyQ29uZmlnID0ge1xuICAgIHRpbWU6IG51bWJlcjtcbiAgICAvKiogT25seSBrZXlzIHJvdXRpbmcgaW50byBvbmUgb2YgdGhlc2UgW3N0YXJ0LCBlbmQpIHJhbmdlcy4gT25seSBzY2FubmluZyBwYXNzZXMgdGhpcyAtIGl0IGxldHMgYSBzdG9yZSBzeW5jaW5nIGEgcGFydGlhbCBzaGFyZCBhc2sgZm9yIGp1c3QgaXRzIHNsaWNlLiAqL1xuICAgIHJvdXRlcz86IFtudW1iZXIsIG51bWJlcl1bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNldENvbmZpZyA9IHtcbiAgICBsYXN0TW9kaWZpZWQ/OiBudW1iZXI7XG4gICAgLyoqIE1ha2VzIHRoZSB3cml0ZSBhY2NlcHRhYmxlIG9uIGltbXV0YWJsZSB0YXJnZXRzOiBhbiBleGlzdGluZyBwYXRoIGlzIHNpbXBseSBrZXB0IChpbW11dGFiaWxpdHkgd2lucyAtIG5vdGhpbmcgaXMgb3ZlcndyaXR0ZW4pIGluc3RlYWQgb2YgdGhlIHdyaXRlIHRocm93aW5nLiBSZXF1aXJlcyBsYXN0TW9kaWZpZWQuIFN5bmNocm9uaXphdGlvbiBNVVNUIHBhc3MgdGhpcyBvbiBldmVyeSBwdXNoIC0gYSBwbGFpbiBzZXQgdGhyb3dzIG9uIGltbXV0YWJsZSB0YXJnZXRzLCB3aGljaCB3b3VsZCBhYm9ydCByZWNvbmNpbGlhdGlvbiB3aGVuZXZlciBvbmUgc291cmNlIGluIGEgY2hhaW4gaXMgaW1tdXRhYmxlLiAqL1xuICAgIGZvcmNlU2V0SW1tdXRhYmxlPzogYm9vbGVhbjtcbiAgICAvKiogU2tpcHMgUkVEVU5EQU5UIHRhcmdldC1zaWRlIHNhZmV0eSByZWFkcyBhcm91bmQgdGhlIHdyaXRlIChiYWNrYmxhemU6IHRoZSBwb3N0LXVwbG9hZCBleGlzdGVuY2UgcG9sbCkuIEl0IGRvZXMgTk9UIHNraXAgY2hlY2tzIHRoYXQgYXJlIHRoZSB0YXJnZXQncyBvbmx5IG9yZGVyaW5nIGd1YXJkOiBiYWNrYmxhemUncyBwcmUtd3JpdGUgY29tcGFyaXNvbiBzdGF5cywgYmVjYXVzZSBiMiBoYXMgbm8gc2VydmVyIG9mIG91cnMgZW5mb3JjaW5nIG9ubHktdGFrZS10aGUtbGF0ZXN0IC0gd2l0aG91dCBpdCBhIHN0YWxlIHB1c2ggbGFuZHMgb3ZlciBhIG5ld2VyIHZhbHVlIG9yIHRvbWJzdG9uZSBhbmQgYjIncyBzZWxmLXN0YW1wZWQgdXBsb2FkIHRpbWUgbGF1bmRlcnMgaXQgaW50byB0aGUgbmV3ZXN0IGNvcHkgaW4gdGhlIHN5c3RlbSAoZ2xvYmFsIHJlc3VycmVjdGlvbikuIEhvc3RlZCB0YXJnZXRzIHJlLWNoZWNrIHNlcnZlci1zaWRlLCBzbyB0aGVpciBjbGllbnQtc2lkZSBzaG9ydGN1dHMgYXJlIHNhZmUuICovXG4gICAgbm9DaGVja3M/OiBib29sZWFuO1xuICAgIC8qKiBTdG9yZS10by1zdG9yZSBwdXNoOiB0aGUgcmVjZWl2aW5nIG5vZGUgd3JpdGVzIHB1cmVseSB0byBpdHMgb3duIGRpc2sgYW5kIGluZGV4LCB3aXRoIE5PIGRvd25zdHJlYW0gZmFuLW91dCAodGhlIHB1c2hpbmcgc3RvcmUgb3ducyBwcm9wYWdhdGlvbiAtIGZhbm5pbmcgaXRzIHB1c2hlcyBiYWNrIG91dCBpcyBob3cgd3JpdGUgbG9vcHMgYmV0d2VlbiBzdG9yZXMgZm9ybSkuIFdpbmRvdyBhbmQgcm91dGUgQVJFIHN0aWxsIGNoZWNrZWQ6IHRoZSBzdGFtcCBtdXN0IGZhbGwgaW5zaWRlIG9uZSBvZiB0aGUgcmVjZWl2ZXIncyBjb25maWd1cmVkIHdpbmRvd3MgYW5kIHJvdXRlcywgc28gYSBjb25mdXNlZCBwZWVyIGNhbm5vdCBzdHVmZiBkYXRhIG9udG8gYSBub2RlIHRoYXQgd2FzIG5ldmVyIG1lYW50IHRvIGhvbGQgaXQuIFJlcXVpcmVzIGxhc3RNb2RpZmllZC4gKi9cbiAgICBpbnRlcm5hbD86IGJvb2xlYW47XG4gICAgLyoqIFdyaXRlcyBub3JtYWxseSBnbyBPTkxZIHRvIHRoZSB3cml0ZSBub2RlICh0aGUgZmlyc3QgY3VycmVudC13aW5kb3cgc291cmNlIGNvdmVyaW5nIHRoZSBrZXkpLCByZXRyeWluZyBpdCBldmVuIHdoaWxlIGl0IGlzIGRvd24gLSBjb25zaXN0ZW50LCBidXQgdW5hdmFpbGFibGUgd2hlbiB0aGF0IG5vZGUgaXMuIFdpdGggZmFsbGJhY2tzLCB0aGUgd3JpdGUgbm9kZSBpcyBzdGlsbCB0cmllZCBmaXJzdCwgYnV0IG9uIGZhaWx1cmUgdGhlIHdyaXRlIGxhbmRzIG9uIHRoZSBuZXh0IGN1cnJlbnQtd2luZG93IHNvdXJjZSBjb3ZlcmluZyB0aGUga2V5IChzeW5jaHJvbml6YXRpb24gbW92ZXMgaXQgdG8gdGhlIHdyaXRlIG5vZGUgbGF0ZXIpIC0gYXZhaWxhYmlsaXR5IGF0IHRoZSBjb3N0IG9mIHJlYWRzIHBvc3NpYmx5IG1pc3NpbmcgdGhlIHdyaXRlIHVudGlsIGl0IHByb3BhZ2F0ZXMuIFNpbmdsZS1zb3VyY2UgYXJjaGl2ZXMgaWdub3JlIHRoZSBmbGFnLiAqL1xuICAgIGZhbGxiYWNrcz86IGJvb2xlYW47XG4gICAgLyoqIFNlZSBHZXRDb25maWcucmV0cmllcy4gKi9cbiAgICByZXRyaWVzPzogbnVtYmVyO1xuICAgIC8qKiBUaGUgc2V0IGlzIG5vdCBhIHdyaXRlIGF0IGFsbDogaXQgUkVTVE9SRVMgYSBmaWxlIG1hcmtlZCBmb3IgZGVsZXRpb24sIGZsaXBwaW5nIGl0cyBpbmRleCBlbnRyeSBiYWNrIHRvIGxpdmUgKHdpdGggYSBmcmVzaCB3cml0ZSB0aW1lLCBzbyB0aGUgcmVzdG9yZSBvdXRyYW5rcyB0aGUgZGVsZXRpb24gZXZlcnl3aGVyZSBpdCBwcm9wYWdhdGVkKSAtIHRoZSBieXRlcyBuZXZlciBsZWZ0IHRoZSBkaXNrLCBzbyByZWFkcyBqdXN0IHdvcmsgYWdhaW4uIFRoZSBkYXRhIGJ1ZmZlciBpcyBpZ25vcmVkIChhIDEtYnl0ZSBwbGFjZWhvbGRlciBzYXRpc2ZpZXMgdGhlIGVtcHR5LWJ1ZmZlciBydWxlKTsgdXNlIElBcmNoaXZlcy51bmRlbGV0ZSByYXRoZXIgdGhhbiBwYXNzaW5nIHRoaXMgeW91cnNlbGYuIFRocm93cyB3aGVuIHRoZSBrZXkgaGFzIG5vIG1hcmtlZCBkZWxldGlvbiB0byByZXN0b3JlIChpdHMgaGlzdG9yeSB3YXMgZHJvcHBlZCwgb3IgaXQgd2FzIG5ldmVyIGRlbGV0ZWQpLiAqL1xuICAgIHVuZGVsZXRlPzogYm9vbGVhbjtcbn07XG5cbi8qKiBzZXRMYXJnZUZpbGUncyBjb25maWc6IGEgU2V0Q29uZmlnIChpdCBJUyBhIHNldCAtIHRoZSBzYW1lIGltbXV0YWJpbGl0eSwgb3JkZXJpbmcsIGludGVybmFsLCBhbmQgZmFsbGJhY2tzIHJ1bGVzIGFwcGx5KSBwbHVzIHRoZSBzdHJlYW0gY2FycnlpbmcgdGhlIGJ5dGVzLiAqL1xuZXhwb3J0IHR5cGUgU2V0TGFyZ2VGaWxlQ29uZmlnID0gU2V0Q29uZmlnICYge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBnZXROZXh0RGF0YSgpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD47XG4gICAgLyoqIFJld2luZHMgdGhlIHN0cmVhbSB0byBpdHMgZmlyc3QgYnl0ZS4gV2l0aG91dCBpdCB0aGUgd3JpdGUgZ2V0cyBleGFjdGx5IE9ORSBhdHRlbXB0OiBhIHJldHJ5IChhIGZhbGxiYWNrIHNvdXJjZSwgb3IgdGhlIHdyaXRlIG5vZGUgY29taW5nIGJhY2spIHdvdWxkIHVwbG9hZCB3aGF0ZXZlciBpcyBsZWZ0IG9mIGFuIGFscmVhZHktY29uc3VtZWQgc3RyZWFtIGFzIGlmIGl0IHdlcmUgdGhlIHdob2xlIGZpbGUuIENhbGxlcnMgaG9sZGluZyB0aGUgZGF0YSAoYSBidWZmZXIsIG9yIGEgc291cmNlIHRoZXkgY2FuIHJlLXJlYWQpIGFsd2F5cyBwYXNzIGl0IC0gYSBsYXJnZSBzZXQgd2l0aCBmYWxsYmFja3MgaXMgb25seSBhcyBhdmFpbGFibGUgYXMgdGhpcy4gKi9cbiAgICByZXN0YXJ0U3RyZWFtPygpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn07XG5cbi8vIGNyZWF0ZVRpbWUgaXMgYSBtaXNub21lciBrZXB0IGZvciBjb21wYXRpYmlsaXR5IOKAlCBpdCBpcyByZWFsbHkgdGhlIExBU1QtV1JJVEUgdGltZSwgc2FtZSBhcyBnZXRJbmZvJ3Mgd3JpdGVUaW1lLiBOZWl0aGVyIEJhY2tibGF6ZSBub3Igb3VyIHJlbW90ZSBzdG9yYWdlIHRyYWNrcyBhIGRpc3RpbmN0IGNyZWF0aW9uIGRhdGU6IGVhY2ggd3JpdGUgc3RhbXBzIGEgZnJlc2ggdGltZXN0YW1wIG9uIHRoZSBjdXJyZW50IHZlcnNpb24sIHNvIGJvdGggZmllbGRzIGFyZSBqdXN0IFwid2hlbiB0aGUgYnl0ZXMgc2VydmVkIGJ5IGdldCgpIHdlcmUgbW9zdCByZWNlbnRseSB3cml0dGVuXCIuXG5leHBvcnQgdHlwZSBBcmNoaXZlRmlsZUluZm8gPSB7IHBhdGg6IHN0cmluZzsgY3JlYXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfTtcblxuLy8gQW4gaW4tcHJvZ3Jlc3MgYmFja2dyb3VuZCBzeW5jaHJvbml6YXRpb24gdGFzayAoc2VlIEFyY2hpdmVzQ29uZmlnLnN5bmNpbmcpXG5leHBvcnQgdHlwZSBTeW5jQWN0aXZpdHkgPSB7XG4gICAgLy8gQSBtZXRhZGF0YSBzY2FuIGlzIGEgc2luZ2xlIGxpc3RpbmcgY2FsbCwgc28gaXQgaGFzIG5vIGluY3JlbWVudGFsIHByb2dyZXNzIC0ganVzdCB0aGF0IGl0J3MgcnVubmluZyBhbmQgc2luY2Ugd2hlbi4gQSBmdWxsIHN5bmMga25vd3MgaXRzIGV4YWN0IGZpbGUvYnl0ZSBwcm9ncmVzcy5cbiAgICB0eXBlOiBcIm1ldGFkYXRhU2NhblwiIHwgXCJmdWxsU3luY1wiO1xuICAgIHNvdXJjZURlYnVnTmFtZTogc3RyaW5nO1xuICAgIHN0YXJ0VGltZTogbnVtYmVyO1xuICAgIGRvbmVGaWxlcz86IG51bWJlcjtcbiAgICB0b3RhbEZpbGVzPzogbnVtYmVyO1xuICAgIGRvbmVCeXRlcz86IG51bWJlcjtcbiAgICB0b3RhbEJ5dGVzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQXJjaGl2ZXNDb25maWcgPSB7XG4gICAgLy8gV2hldGhlciBnZXRDaGFuZ2VzQWZ0ZXIyIGlzIG5hdGl2ZWx5IGluZGV4LWJhY2tlZCAoZmFzdCBjaGFuZ2UgcG9sbGluZzsgZXZlcnkgYmFja2VuZCBzdGlsbCBzZXJ2ZXMgaXQsIGJ1dCB0aGUgb3RoZXJzIGVtdWxhdGUgaXQgd2l0aCBhIGZ1bGwgbGlzdGluZylcbiAgICBzdXBwb3J0c0NoYW5nZXNBZnRlcj86IGJvb2xlYW47XG4gICAgLy8gVGhlIGJ1Y2tldCdzIGZ1bGwgcm91dGluZyBjb25maWcgKFJPVVRJTkdfRklMRSkuIEFic2VudCBmb3Igc291cmNlcyB0aGF0IGRvbid0IGhhdmUgb25lIChhIGJhcmUgZGlzayBzb3VyY2UsIG9yIGEgYnVja2V0IHRoYXQgZG9lc24ndCBleGlzdCB5ZXQpLlxuICAgIHJlbW90ZUNvbmZpZz86IFJlbW90ZUNvbmZpZztcbiAgICAvLyBMaXZlIGluZGV4IHRvdGFscyAodG9tYnN0b25lcyBleGNsdWRlZCksIGtlcHQgdXAgdG8gZGF0ZSBpbiBtZW1vcnkgb24gZXZlcnkgbXV0YXRpb24gYW5kIHJlY29tcHV0ZWQgb24gbG9hZCAtIHNvIGFueSBkcmlmdCBoZWFscyBvbiByZXN0YXJ0XG4gICAgaW5kZXg/OiB7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlciB9O1xuICAgIC8qKiBGaWxlcyBNQVJLRUQgZm9yIGRlbGV0aW9uIChkZWxldGVkLCBieXRlcyBzdGlsbCBrZXB0IGFzIGhpc3RvcnkgLSBzZWUgU2V0Q29uZmlnLnVuZGVsZXRlKTogaG93IG1hbnksIGhvdyBiaWcsIGFuZCB0aGUgZGVsZXRlIHRpbWUgb2YgdGhlIG9sZGVzdCBvbmUgLSB3aGljaCBpcyBob3cgZmFyIGJhY2sgdGhlIGRlbGV0aW9uIGhpc3RvcnkgcmVhY2hlcy4gKi9cbiAgICBtYXJrZWRJbmRleD86IHsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyOyBvbGRlc3REZWxldGVUaW1lPzogbnVtYmVyIH07XG4gICAgLy8gVGhlIHNhbWUgdG90YWxzIGJyb2tlbiBkb3duIGJ5IHdoaWNoIHNvdXJjZSBjdXJyZW50bHkgaG9sZHMgZWFjaCBmaWxlJ3MgYnl0ZXMgKHRoZSBmaXJzdCBlbnRyeSBpcyB0aGUgc2VydmVyJ3Mgb3duIGRpc2spXG4gICAgaW5kZXhTb3VyY2VzPzogeyBkZWJ1Z05hbWU6IHN0cmluZzsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyIH1bXTtcbiAgICAvLyBUaGUgc2VydmVyJ3MgY29uZmlndXJlZCByZWFkZXJEaXNrTGltaXQsIHdoZW4gaXQgcnVucyBhcyBhIGJvdW5kZWQgcmVhZCBjYWNoZVxuICAgIHJlYWRlckRpc2tMaW1pdD86IG51bWJlcjtcbiAgICAvLyBCYWNrZ3JvdW5kIHN5bmNocm9uaXphdGlvbiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKGVtcHR5IHdoZW4gaWRsZSlcbiAgICBzeW5jaW5nPzogU3luY0FjdGl2aXR5W107XG59O1xuXG4vLyBBIHN5bmNocm9uaXphdGlvbiBzb3VyY2Ugb2YgYSBCbG9iU3RvcmUgKHdoaWNoIHN5bmNocm9uaXplcyBhbiBpbmRleCArIGxvY2FsIGNhY2hlIGZyb20gdGhlbSlcbmV4cG9ydCB0eXBlIEFyY2hpdmVzU291cmNlID0ge1xuICAgIHNvdXJjZTogSUFyY2hpdmVzO1xuICAgIC8qKiBUaGUgcGVyc2lzdGVudCBpZGVudGl0eSBvZiB0aGUgZW5kcG9pbnQ6IGl0cyByb3V0aW5nIFVSTCAoaG9zdGVkL2JhY2tibGF6ZSksIG9yIHRoZSBkaXNrIGZvbGRlciBwYXRoIGZvciB0aGUgYmFzZSBkaXNrIHNvdXJjZS4gVGhlIHN0b3JlIHBlcnNpc3RzIHRoaXMgKHZpYSBpdHMgYXBwZW5kLW9ubHkgc291cmNlcyBsaXN0KSBhcyBJbmRleEVudHJ5LnNvdXJjZXNMaXN0SW5kZXgsIHNvIGl0IG11c3QgbWVhbiB0aGUgc2FtZSBlbmRwb2ludCBmb3JldmVyLiAqL1xuICAgIHVybDogc3RyaW5nO1xuICAgIC8vIEZyb20gdGhlIHNvdXJjZSdzIENvbW1vbkNvbmZpZywgYnV0IEFMTCBvZiB0aGVtOiB0aGUgc2FtZSBlbmRwb2ludCAoc2FtZSB1cmwrcm91dGUsIGlnbm9yaW5nIHRoZSB3aW5kb3cpIGNhbiBhcHBlYXIgaW4gdGhlIHJvdXRpbmcgY29uZmlnIHVuZGVyIHNldmVyYWwgd2luZG93cyBhdCBvbmNlIC0gbW9zdCBjb21tb25seSB3aGVuIGEgZGVwbG95IHN3aXRjaG92ZXIgaGFzIHNwbGl0IG9uZSB3aW5kb3cgaW4gdHdvIGFyb3VuZCBhbiBpbnRlcm1lZGlhdGUuIEl0IGlzIE9ORSBzb3VyY2UgdGhhdCBrbm93cyBhbGwgaXRzIHdpbmRvd3MsIG5ldmVyIHNldmVyYWwgc291cmNlcy4gVGhlIHdpbmRvdyByb3V0ZXMgV1JJVEVTOiB0aGUgc291cmNlIHJlY2VpdmVzIHdyaXRlcyB3aGlsZSBBTlkgb2YgaXRzIHdpbmRvd3MgaXMgc3RpbGwgb3BlbiAoc2VlIHdpbmRvd3NBY2NlcHRXcml0ZXMpLiBXaW5kb3dzIGRvIE5PVCBmaWx0ZXIgc2Nhbm5pbmc6IGEgc2NhbiBpcyB1cyBhc2tpbmcgdGhlIHNvdXJjZSB3aGF0IGl0IGFscmVhZHkgaG9sZHMsIGFuZCBleGlzdGluZyB2YWx1ZXMgc3luY2hyb25pemUgcmVnYXJkbGVzcyBvZiB0aGVpciB3cml0ZSB0aW1lcyAodGhlIHNhbWUgcmVhc29uaW5nIHRoYXQgbGV0cyBzeW5jaHJvbml6YXRpb24gaWdub3JlIHRoZSBpbW11dGFibGUgZmxhZykuXG4gICAgdmFsaWRXaW5kb3dzOiBbbnVtYmVyLCBudW1iZXJdW107XG4gICAgLy8gRnJvbSB0aGUgc291cmNlJ3MgQ29tbW9uQ29uZmlnIChpbnRlcnNlY3RlZCB3aXRoIHRoZSBvd25pbmcgc3RvcmUncyBvd24gcm91dGUpOiBvbmx5IGtleXMgcm91dGluZyBpbnRvIFtzdGFydCwgZW5kKSBhcmUgYWNjZXB0ZWQgZnJvbSB0aGlzIHNvdXJjZSdzIHNjYW5zIGFuZCBzZW50IHRvIGl0IGluIHdyaXRlcy9yZWNvbmNpbGlhdGlvbi4gVGhlIHJvdXRpbmcgZmlsZSBpcyBleGVtcHQgLSBjb25maWcgZmxvd3MgZXZlcnl3aGVyZS4gQWJzZW50ID0gYWxsIGtleXMuXG4gICAgcm91dGU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIC8vIEZyb20gdGhlIHNvdXJjZSdzIENvbW1vbkNvbmZpZzsgc2VlIHRoZXJlLlxuICAgIG5vRnVsbFN5bmM/OiBib29sZWFuO1xuICAgIC8vIEZyb20gdGhlIHNvdXJjZSdzIENvbW1vbkNvbmZpZzogYSBkZXBsb3kgc3dpdGNob3ZlcidzIHRlbXBvcmFyeSBhbHRlcm5hdGUtcG9ydCBlbnRyeSAodGhlIHZhbHVlIGlzIHRoZSB1cmwgb2YgdGhlIHNvdXJjZSBpdCB3YXMgc3BsaXQgb3V0IG9mKS4gT25jZSBpdHMgd2luZG93IGlzIHBhc3QsIHRoZSBwb3J0IGl0IHBvaW50cyBhdCBpcyBnb25lIGZvciBnb29kIC0gc28gaXQgaXMgbmV2ZXIgc2Nhbm5lZCB0aGVuLCBhbmQgc2NhbiBmYWlsdXJlcyBhcmUgbmV2ZXIgcmV0cmllZC5cbiAgICBpbnRlcm1lZGlhdGU/OiBzdHJpbmc7XG4gICAgLy8gVGhlIHJvdXRpbmctY29uZmlnIGVudHJ5IHRoaXMgc291cmNlIHdhcyBidWlsdCBmcm9tIChhYnNlbnQgZm9yIHRoZSBiYXNlIGRpc2sgc291cmNlKS4gSXRzIGB0eXBlYCBkZWNpZGVzIGZhc3Qtd3JpdGUgZmx1c2ggdGltaW5nOiB0eXBlLVwicmVtb3RlXCIgZG93bnN0cmVhbSBzb3VyY2VzIChvdXIgb3duIHN0b3JhZ2Ugc2VydmVycykgZmx1c2ggcXVpY2tseSAoY2hlYXAsIGFuZCB3ZSB3YW50IGNyb3NzLW5vZGUgcmVkdW5kYW5jeSBmYXN0KSwgd2hpbGUgb3RoZXJzIChlLmcuIGJhY2tibGF6ZSkga2VlcCB0aGUgZnVsbCB3cml0ZURlbGF5IHNvIGV4cGVuc2l2ZSBleHRlcm5hbCB3cml0ZXMgc3RheSBjb2FsZXNjZWQuIFRoZSB3aW5kb3cvcm91dGUgT04gdGhpcyBjb25maWcgYXJlIHRoZSBTT1VSQ0UncyBvd247IEFyY2hpdmVzU291cmNlLnZhbGlkV2luZG93L3JvdXRlIGFyZSB3aGF0IHRoZSBvd25pbmcgc3RvcmUgYWN0dWFsbHkgdXNlcyAocm91dGUgaXMgaW50ZXJzZWN0ZWQgd2l0aCB0aGUgc3RvcmUncyByb3V0ZSkuXG4gICAgc291cmNlQ29uZmlnPzogU291cmNlQ29uZmlnO1xuICAgIC8vIFN0YWJsZSBpZGVudGl0eSBvZiB0aGUgdW5kZXJseWluZyBlbmRwb2ludCAoaXRzIGNvbmZpZyB3aXRoIHdpbmRvd3Mvcm91dGVzIHN0cmlwcGVkKSAtIGhvdyBCbG9iU3RvcmUudXBkYXRlU291cmNlcyByZWNvZ25pemVzIGEgc291cmNlIGFjcm9zcyBjb25maWcgY2hhbmdlcyBzbyBpdCBjYW4gdXBkYXRlIGl0IGluIHBsYWNlIGluc3RlYWQgb2YgcmVtb3ZpbmcgYW5kIHJlLWFkZGluZyBpdFxuICAgIGlkZW50aXR5Pzogc3RyaW5nO1xufTtcblxuLy8gRXJyb3IgbWFya2VyIGEgc2VydmVyIGluY2x1ZGVzIHdoZW4gYSBmcmVzaGx5LXN0YW1wZWQgd3JpdGUgcmVhY2hlcyBpdCBvdXRzaWRlIGl0cyB2YWxpZCB3aW5kb3dzICh0aGUgY2xpZW50IHJlc29sdmVkIGl0cyB0YXJnZXQsIHRoZW4gdGltZSBjcm9zc2VkIGEgd2luZG93IGJvdW5kYXJ5IGJlZm9yZSB0aGUgd3JpdGUgbGFuZGVkKS4gQ2xpZW50cyBkZXRlY3QgdGhpcyBtYXJrZXIgYW5kIHJlLXJlc29sdmUgdGhlIGN1cnJlbnRseS12YWxpZCBzb3VyY2UsIHJldHJ5aW5nIE9OQ0UgLSBib3VuZGFyaWVzIGFyZSBmYXIgYXBhcnQsIHNvIGhpdHRpbmcgaXQgdHdpY2UgaW4gb25lIGF0dGVtcHQgbWVhbnMgc29tZXRoaW5nIGlzIGFjdHVhbGx5IHdyb25nLlxuZXhwb3J0IGNvbnN0IFNUT1JBR0VfV1JPTkdfVkFMSURfV0lORE9XID0gXCJSRU1PVEVfU1RPUkFHRV9XUk9OR19WQUxJRF9XSU5ET1dfYTdjMWYwNGVcIjtcblxuLy8gRXJyb3IgbWFya2VyIGEgc2VydmVyIGluY2x1ZGVzIHdoZW4gYSBmcmVzaGx5LXN0YW1wZWQgd3JpdGUncyBrZXkgcm91dGVzIG91dHNpZGUgdGhlIHNoYXJkcyB0aGlzIHNlcnZlciBoYW5kbGVzICh0aGUgY2xpZW50J3MgY29uZmlnIGRpc2FncmVlcyB3aXRoIHRoZSBzZXJ2ZXIncyAtIGNsaWVudHMgcmUtcmVzb2x2ZSBvbmNlKVxuZXhwb3J0IGNvbnN0IFNUT1JBR0VfV1JPTkdfUk9VVEUgPSBcIlJFTU9URV9TVE9SQUdFX1dST05HX1JPVVRFX2M5NGQyZTE3XCI7XG5cbi8vIEVycm9yIG1hcmtlciBhIHNlcnZlciBpbmNsdWRlcyB3aGVuIGEgd3JpdGUgcmVhY2hlcyBhIHN0b3JlIHdob3NlIG93biByb3V0aW5nIGNvbmZpZyBoYXMgTk8gZW50cnkgZm9yIGl0IG9uIHRoYXQgc2VydmVyIChvciB0aGF0IGhhcyBubyByb3V0aW5nIGNvbmZpZyBhdCBhbGwpIC0gYWNjZXB0aW5nIHRoZSB3cml0ZSB3b3VsZCBzdG9yZSBkYXRhIG5vdGhpbmcgc2NhbnMgb3IgcmVjb25jaWxlcy4gQ2xpZW50cyByZS1yZXNvbHZlIG9uY2UsIGV4YWN0bHkgbGlrZSB0aGUgbWFya2VycyBhYm92ZTogdGhlIHVzdWFsIGNhdXNlIGlzIHRoZSBjbGllbnQgcnVubmluZyBhIGRpZmZlcmVudCBjb25maWcgdGhhbiB0aGUgc3RvcmUuXG5leHBvcnQgY29uc3QgU1RPUkFHRV9OT1RfQ09ORklHVVJFRCA9IFwiUkVNT1RFX1NUT1JBR0VfTk9UX0NPTkZJR1VSRURfZTUxYjdkOTJcIjtcblxuZXhwb3J0IGNvbnN0IEZVTExfUk9VVEU6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMV07XG5cbi8vIEEga2V5IGNvbnRhaW5pbmcgdGhpcyBzZW50aW5lbCBkb2Vzbid0IGhhdmUgYSBmaXhlZCBzaGFyZDogc2V0VmFyaWFibGVTaGFyZCBwaWNrcyB0aGUgKGxvd2VzdCBsYXRlbmN5LCB1cCkgd3JpdGUgc2hhcmQsIGFwcGVuZHMgXCJfPHZhbHVlIGluIHRoZSBzaGFyZCdzIHJvdXRlPlwiIGRpcmVjdGx5IGFmdGVyIHRoZSBzZW50aW5lbCwgYW5kIHJldHVybnMgdGhlIG1hdGVyaWFsaXplZCBrZXkuIGdldFJvdXRlIHRyZWF0cyB0aGF0IHN1ZmZpeCBhcyBhIGNvbXBsZXRlIHJvdXRlIG92ZXJyaWRlLlxuZXhwb3J0IGNvbnN0IFZBUklBQkxFX1NIQVJEID0gXCJWQVJJQUJMRV9TSEFSRF9mMDIzNGpmYWgwOGZneWhmZ3lzc2Rkczgzbm1wXCI7XG4vLyBObyBncmFjZSBwYXN0IHRoZSBlbmQ6IGEgd2luZG93IGJvdW5kYXJ5IGlzIGEgaGFyZCBoYW5kb2ZmIChjbGllbnRzIHJldHJ5IGEgcmVqZWN0ZWQgd3JpdGUgYWdhaW5zdCB0aGUgbmV3bHktdmFsaWQgc291cmNlLCBzbyBsZW5pZW5jeSBoZXJlIHdvdWxkIG9ubHkgZGVzeW5jaHJvbml6ZSB0aGUgaGFuZG9mZilcbi8vICAtIFdyaXRpbmcgdG8gb2xkZXIgdmFsaWQgc3RhdGUgd2luZG93cyBpcyBmaW5lLCB0aG91Z2guIFdlIG5lZWQgdGhpcyB0byBpbmdlc3QgdGhlIG9sZCBkYXRhIHdoZW4gd2UncmUgc3luY2hyb25pemluZyBub2RlcyB0byBnZXQgdGhlbSB1cCB0byBkYXRlIGFueXdheS4gXG5leHBvcnQgZnVuY3Rpb24gd2luZG93QWNjZXB0c1dyaXRlcyh2YWxpZFdpbmRvdzogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsaWRXaW5kb3cpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB2YWxpZFdpbmRvd1sxXSA+IERhdGUubm93KCk7XG59XG4vLyBBIHNvdXJjZSAod2hpY2ggY2FuIGhvbGQgc2V2ZXJhbCB3aW5kb3dzKSBhY2NlcHRzIHdyaXRlcyB3aGlsZSBBTlkgb2YgaXRzIHdpbmRvd3MgaXMgc3RpbGwgb3Blbi4gTm8gd2luZG93cyA9IHRoZSBiYXNlIGRpc2sgb2YgYW4gaW5lcnQgc3RvcmUgKG5vdCBpbiB0aGUgY29uZmlnKSwgd2hpY2ggbmV2ZXIgcmVjZWl2ZXMgZmFuLW91dCB3cml0ZXMgYW55d2F5LlxuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd3NBY2NlcHRXcml0ZXModmFsaWRXaW5kb3dzOiBbbnVtYmVyLCBudW1iZXJdW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsaWRXaW5kb3dzLnNvbWUod2luZG93QWNjZXB0c1dyaXRlcyk7XG59XG5cbi8vIEFib3ZlIHRoaXMsIHNldCB0cmFuc3BhcmVudGx5IHN0cmVhbXMgdGhyb3VnaCBzZXRMYXJnZUZpbGU6IG9uZSBnaWFudCB3aXJlIG1lc3NhZ2Ugd291bGQgZXhjZWVkIHRoZSB0cmFuc3BvcnQgbGltaXQgYW5kIGxhZyBldmVyeSBvdGhlciBjbGllbnQgc2hhcmluZyB0aGUgY29ubmVjdGlvblxuZXhwb3J0IGNvbnN0IExBUkdFX1NFVF9USFJFU0hPTEQgPSA4ICogMTAyNCAqIDEwMjQ7XG5cbi8qKiBUaGUgc2V0TGFyZ2VGaWxlIHN0cmVhbSBvdmVyIGFuIGluLW1lbW9yeSBidWZmZXIsIGluIExBUkdFX1NFVF9USFJFU0hPTEQgc2xpY2VzIC0gaG93IHNldCB0cmFuc3BhcmVudGx5IGJlY29tZXMgc2V0TGFyZ2VGaWxlIGZvciBsYXJnZSBidWZmZXJzLiBTcHJlYWQgaW50byB0aGUgY29uZmlnOiBpdCBwcm92aWRlcyBib3RoIGdldE5leHREYXRhIGFuZCByZXN0YXJ0U3RyZWFtICh0aGUgYnVmZmVyIGlzIHN0aWxsIGhlbGQsIHNvIGEgcmV0cnkgY29zdHMgbm90aGluZykuICovXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyQ2h1bmtTdHJlYW0oZGF0YTogQnVmZmVyKTogeyBnZXROZXh0RGF0YSgpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD47IHJlc3RhcnRTdHJlYW0oKTogdm9pZCB9IHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXROZXh0RGF0YTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBkYXRhLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBjaHVuayA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBMQVJHRV9TRVRfVEhSRVNIT0xEKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gY2h1bms7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc3RhcnRTdHJlYW06ICgpID0+IHtcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gUmUtZXhwb3J0ZWQgZm9yIHRoZSBleGlzdGluZyBpbXBvcnRlcnMgLSB0aGUgaW1wbGVtZW50YXRpb25zIChhbmQgbW92ZUFyY2hpdmVGaWxlKSBsaXZlIGluIGFyY2hpdmVIZWxwZXJzLnRzLCBiZXNpZGUgdGhpcyBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gaW4gaXRcbmV4cG9ydCB7IGNvcHlBcmNoaXZlRmlsZSB9IGZyb20gXCIuL2FyY2hpdmVIZWxwZXJzXCI7XG5cbi8qKiBtb3ZlJ3MgY29uZmlnLiBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gbGFzdE1vZGlmaWVkOiB0aGUgZGVzdGluYXRpb24gaXMgQUxXQVlTIHN0YW1wZWQgZnJlc2ggKHNlZSBJQXJjaGl2ZXMubW92ZSkgLSBhIG1vdmUgaXMgYSBuZXcgd3JpdGUgYXQgdGhlIG5ldyBwYXRoLCBhbmQgYSBwcmVzZXJ2ZWQgb2xkIHN0YW1wIGlzIGhvdyBhIG1vdmVkIGZpbGUgbG9zZXMgdG8gYSBzdGFsZSB0b21ic3RvbmUgdGhlcmUgYW5kIHZhbmlzaGVzLiAqL1xuZXhwb3J0IHR5cGUgTW92ZUZpbGVDb25maWcgPSB7XG4gICAgZnJvbVBhdGg6IHN0cmluZztcbiAgICB0b1BhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFyY2hpdmVzU3luY1NvdXJjZVN0YXR1cyA9IHtcbiAgICBkZWJ1Z05hbWU6IHN0cmluZztcbiAgICB2YWxpZFdpbmRvd3M6IFtudW1iZXIsIG51bWJlcl1bXTtcbiAgICByb3V0ZT86IFtudW1iZXIsIG51bWJlcl07XG4gICAgbm9GdWxsU3luYz86IGJvb2xlYW47XG4gICAgc3VwcG9ydHNDaGFuZ2VzQWZ0ZXI6IGJvb2xlYW47XG4gICAgaW5pdGlhbFNjYW5Db21wbGV0ZTogYm9vbGVhbjtcbiAgICAvLyBGaWxlcyBzZWVuIGluIHRoaXMgc291cmNlJ3Mgc2NhbnMgLyBjaGFuZ2UgcG9sbHMgc28gZmFyXG4gICAgc2Nhbm5lZENvdW50OiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgQXJjaGl2ZXNTeW5jU3RhdHVzID0ge1xuICAgIGFsbFNjYW5zQ29tcGxldGU6IGJvb2xlYW47XG4gICAgLy8gTnVtYmVyIG9mIGZpbGVzIGluIHRoZSBpbmRleFxuICAgIGluZGV4U2l6ZTogbnVtYmVyO1xuICAgIHNvdXJjZXM6IEFyY2hpdmVzU3luY1NvdXJjZVN0YXR1c1tdO1xufTtcblxuLy8gTk9URTogV2UgZG9uJ3QgcHJlc2VudGx5IGhhdmUgYW4gYXBwZW5kIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBhIHN1cnByaXNpbmcgbnVtYmVyIG9mIHN0b3JhZ2Ugc3lzdGVtcyBkb24ndCBzdXBwb3J0IGl0IChiYWNrYmxhemUsIGZpbGUgc3lzdGVtIGFwaSkuIEl0IHdvdWxkIGFsc28gY29tcGxpY2F0ZSB0aGluZ3MgYXMgbm93IHRoZXJlIG5lZWRzIHRvIGJlIHJlYWxseSBhIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggb2YgYSBmaWxlLCBhbmQgaWYgeW91IGFwcGVuZCB0byB0aGUgd3Jvbmcgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCwgdGhpbmdzIGp1c3QgYmVjb21lIHZlcnkgY29tcGxpY2F0ZWQuIFxuZXhwb3J0IGludGVyZmFjZSBJQXJjaGl2ZXMge1xuICAgIGdldERlYnVnTmFtZSgpOiBzdHJpbmc7XG4gICAgLyoqIFdoZXRoZXIgd3JpdGVzIHdvdWxkIGJlIGFjY2VwdGVkIChjcmVkZW50aWFscyBleGlzdCwgdGhlIGFjY291bnQgdHJ1c3RzIHRoaXMgbWFjaGluZSwgZXRjKS4gQ2hlY2tlZCB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmcuICovXG4gICAgaGFzV3JpdGVBY2Nlc3MoKTogUHJvbWlzZTxib29sZWFuPjtcbiAgICAvKipcbiAgICAgKiBSZWFkcyBhdXRvbWF0aWNhbGx5IGZhbGwgYmFjayBhY3Jvc3MgdGhlIHJlZHVuZGFudCBzb3VyY2VzIHVubGVzcyBjb25maWcubm9GYWxsYmFja3MgaXMgc2V0LlxuICAgICAqIEEgZmFsbGJhY2sgY29weSBjYW4gbGFnIHRoZSB3cml0ZSB0YXJnZXQsIHNvIGEgY2FsbGVyIHJlYWRpbmcgc3RhdGUgaW4gb3JkZXIgdG8gbXV0YXRlIGl0XG4gICAgICogKGUuZy4geCsrKSwgd2hlcmUgYWN0aW5nIG9uIHByZXZpb3VzIHN0YXRlIHdvdWxkIGNhdXNlIGJpZyBpc3N1ZXMsIHNob3VsZCBwYXNzIG5vRmFsbGJhY2tzIC1cbiAgICAgKiBhbmQgdHJ5L2NhdGNoIHRoZSByZWFkLCBoYW5kbGluZyB0aGUgY2F0Y2ggY2FzZSAoYSBkb3duIHByaW1hcnkgaXMgcmV0cmllZCBmb3IgYSB3aGlsZSwgdGhlblxuICAgICAqIHRocm93cyBpbnN0ZWFkIG9mIGRlZ3JhZGluZyB0byBhIHN0YWxlIGNvcHkpLlxuICAgICAqL1xuICAgIGdldChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBHZXRDb25maWcpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD47XG4gICAgLyoqIFNlZSBnZXQgZm9yIHRoZSBmYWxsYmFjayBzZW1hbnRpY3MgKGFuZCB3aGVuIHRvIHBhc3Mgbm9GYWxsYmFja3MpLiB1cmwgaXMgdGhlIGNvbmZpZyBVUkwgb2YgdGhlIHNvdXJjZSB0aGF0IGFuc3dlcmVkIC0gdGhlIGF1dGhvcml0eSB0aGUgZGF0YSAob3IgdGhlIFwiZG9lcyBub3QgZXhpc3RcIikgY2FtZSBmcm9tLiBNdWx0aS1zb3VyY2UgaW1wbGVtZW50YXRpb25zIChBcmNoaXZlc0NoYWluKSBBTFdBWVMgcmV0dXJuIGFuIG9iamVjdDogd2hlbiB0aGUgdmFsdWUgZG9lc24ndCBleGlzdCB0aGVyZSBpcyBzdGlsbCBhIHNlcnZlciBzYXlpbmcgaXQgZG9lc24ndCBleGlzdCwgc28gdGhleSByZXR1cm4geyB1cmwgfSBhbG9uZSByYXRoZXIgdGhhbiB1bmRlZmluZWQuIFNpbmdsZS1zb3VyY2UgYmFja2VuZHMgcmV0dXJuIHVuZGVmaW5lZCBmb3IgYWJzZW50ICh0aGV5IEFSRSB0aGUgYXV0aG9yaXR5KS4gKi9cbiAgICBnZXQyKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXI7IHVybD86IHN0cmluZyB9IHwgeyBkYXRhPzogdW5kZWZpbmVkOyB3cml0ZVRpbWU/OiB1bmRlZmluZWQ7IHNpemU/OiB1bmRlZmluZWQ7IHVybDogc3RyaW5nIH0gfCB1bmRlZmluZWQ+O1xuICAgIC8qKlxuICAgICAqIGxhc3RNb2RpZmllZCBzdGFtcHMgdGhlIHdyaXRlIHdpdGggdGhhdCBsYXN0LXdyaXRlIHRpbWUgaW5zdGVhZCBvZiBub3cuIElmIGl0IGlzIE9MREVSIHRoYW5cbiAgICAgKiB0aGUgZmlsZSdzIGN1cnJlbnQgbGFzdC13cml0ZSB0aW1lIHRoZSB3cml0ZSBuby1vcHMgKHNvIGRlbGF5ZWQgLyBzeW5jaHJvbml6ZWQgd3JpdGVzIGNhblxuICAgICAqIG5ldmVyIGNsb2JiZXIgbmV3ZXIgZGF0YSkuIFRpbWVzIG1vcmUgdGhhbiAxNSBtaW51dGVzIGluIHRoZSBmdXR1cmUgYXJlIHJlamVjdGVkLlxuICAgICAqXG4gICAgICogUmV0dXJucyB0aGUgZnVsbCBrZXkgYWN0dWFsbHkgd3JpdHRlbiAtIGlkZW50aWNhbCB0byBmaWxlTmFtZSwgRVhDRVBUIGZvciBrZXlzIGNvbnRhaW5pbmdcbiAgICAgKiBWQVJJQUJMRV9TSEFSRCwgd2hlcmUgdGhlIHNoYXJkIHZhbHVlIGlzIG1hdGVyaWFsaXplZCBpbnRvIHRoZSBrZXkgKHBpY2tlZCBieSBzaGFyZCBsYXRlbmN5LFxuICAgICAqIHNlZSBBcmNoaXZlc0NoYWluKSBhbmQgdGhlIGNhbGxlciBuZWVkcyB0aGUgcmV0dXJuZWQga2V5IHRvIGV2ZXIgcmVhZCB0aGUgdmFsdWUgYmFjay5cbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBUSFJPV1Mgb24gYW4gZW1wdHkgYnVmZmVyOiBhbiBlbXB0eSBmaWxlIElTIGEgZGVsZXRpb24gaW4gdGhpcyBzeXN0ZW0gKHRoZSB0b21ic3RvbmUpLCBzbyBhXG4gICAgICogc2V0LWVtcHR5IHdvdWxkIHJlYWQgYmFjayBhcyBcInRoZSBmaWxlIGlzIGdvbmVcIiAtIHdoaWNoIGlzIGp1c3QgYXNraW5nIGZvciBwcm9ibGVtcy4gSWYgeW91XG4gICAgICogd2FudCB0aGUgZmlsZSBkZWxldGVkLCBjYWxsIGRlbDsgZGVsZXRpb25zIHRha2UgdGhlaXIgb3duIHBhdGguXG4gICAgICovXG4gICAgc2V0KGZpbGVOYW1lOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogU2V0Q29uZmlnKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIGRlbChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBEZWxDb25maWcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKiBNb3ZlcyBhIGZpbGUgdG8gYSBuZXcgcGF0aCB3aXRoaW4gVEhJUyBhcmNoaXZlcywgYmFja2VuZC1zaWRlIHdoZXJlIHRoZSBiYWNrZW5kIGNhbiAoYmFja2JsYXplIGNvcGllcyBzZXJ2ZXItc2lkZSwgZGlzayByZW5hbWVzLCB0aGUgc3RvcmFnZSBzZXJ2ZXIgcmVsb2NhdGVzIG5vZGUtc2lkZSkgLSB0aGUgYnl0ZXMgbmV2ZXIgdHJhdmVsIHRocm91Z2ggdGhlIGNhbGxlci4gVGhlIGRlc3RpbmF0aW9uIGlzIHN0YW1wZWQgd2l0aCBhIEZSRVNIIHdyaXRlIHRpbWUsIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBvcGVyYXRpb24gKGEgcmVuYW1lKSB3b3VsZCBwcmVzZXJ2ZSB0aGUgb2xkIG9uZSwgc28gdGhlIG1vdmVkIGZpbGUgY2Fubm90IGltbWVkaWF0ZWx5IGxvc2UgdG8gc29tZXRoaW5nIG5ld2VyIHNpdHRpbmcgYXQgaXRzIG5ldyBwYXRoIChlLmcuIHRoZSB0b21ic3RvbmUgb2YgYW4gZWFybGllciBkZWxldGlvbiB0aGVyZSk7IHRoZSBzb3VyY2UgaXMgdGhlbiBkZWxldGVkLCBleGFjdGx5IGxpa2UgZGVsLiBUSFJPV1Mgd2hlbiB0aGUgc291cmNlIGZpbGUgZG9lcyBub3QgZXhpc3QuIE9wdGlvbmFsIC0gY2FsbGVycyBnbyB0aHJvdWdoIG1vdmVBcmNoaXZlRmlsZSAoYXJjaGl2ZUhlbHBlcnMudHMpLCB3aGljaCBmYWxscyBiYWNrIHRvIGNvcHkgKyBjb25maXJtICsgZGVsZXRlLiAqL1xuICAgIG1vdmU/KGNvbmZpZzogTW92ZUZpbGVDb25maWcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKiBSZXN0b3JlcyBhIGRlbGV0ZWQgZmlsZSB3aG9zZSBieXRlcyBhcmUgc3RpbGwgaW4gdGhlIGRlbGV0aW9uIGhpc3RvcnkgKHNlZSBTZXRDb25maWcudW5kZWxldGUsIHdoaWNoIHRoaXMgcmlkZXMgb24pLiBPbmx5IGluZGV4LWJhY2tlZCBzdG9yZXMga2VlcCBhIGRlbGV0aW9uIGhpc3RvcnksIHNvIG9ubHkgdGhleSBzdXBwb3J0IHRoaXMuIFRIUk9XUyB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVzdG9yZS4gKi9cbiAgICB1bmRlbGV0ZT8oZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIFN0cmVhbXMgYSBmaWxlIHRvbyBsYXJnZSB0byBob2xkIGluIG1lbW9yeS4gZ2V0TmV4dERhdGEgcmV0dXJucyB1bmRlZmluZWQgd2hlbiBkb25lLiBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIHdoZW4geW91IENBTk5PVCBtYXRlcmlhbGl6ZSB0aGUgZW50aXJlIGZpbGUgaW4gbWVtb3J5IC0gaWYgeW91IGNhbiwganVzdCBjYWxsIHNldDogYWJvdmUgTEFSR0VfU0VUX1RIUkVTSE9MRCBpdCBzdHJlYW1zIHRocm91Z2ggc2V0TGFyZ2VGaWxlIGludGVybmFsbHksIGtlZXBpbmcgdGhlIGNsaWVudCByZXNwb25zaXZlIGFuZCBub3Qgb3ZlcndoZWxtaW5nIHRoZSBzZXJ2ZXIuIFRoZSByZXN0IG9mIHRoZSBjb25maWcgaXMgYSBwbGFpbiBTZXRDb25maWcgYW5kIG1lYW5zIGV4YWN0bHkgd2hhdCBpdCBtZWFucyBvbiBzZXQgKHRoYXQgaXMgd2hhdCBtYWtlcyBhIGxhcmdlIHNldCBiZWhhdmUgbGlrZSBhIHNtYWxsIG9uZSBpbnN0ZWFkIG9mIHF1aWV0bHkgbG9zaW5nIGltbXV0YWJpbGl0eSwgb3JkZXJpbmcsIGludGVybmFsLCBvciBmYWxsYmFja3Mgc2VtYW50aWNzIGFzIHRoZSBmaWxlIGNyb3NzZXMgdGhlIHRocmVzaG9sZCk7IGJhY2tlbmRzIHRoYXQgc3RhbXAgdGhlaXIgb3duIHRpbWVzIChiYWNrYmxhemUpIGFjY2VwdCBhbmQgaWdub3JlIGxhc3RNb2RpZmllZC4gVEhST1dTIHdoZW4gdGhlIHN0cmVhbSBwcm9kdWNlcyBubyBkYXRhIGF0IGFsbCAtIHNhbWUgcnVsZSBhcyBzZXQ6IGFuIGVtcHR5IGZpbGUgSVMgYSBkZWxldGlvbiBhbmQgd291bGQgcmVhZCBiYWNrIGFzIG1pc3NpbmcuICovXG4gICAgc2V0TGFyZ2VGaWxlKGNvbmZpZzogU2V0TGFyZ2VGaWxlQ29uZmlnKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogd3JpdGVUaW1lIGlzIHRoZSBsYXN0LXdyaXRlIHRpbWUg4oCUIHNlZSBBcmNoaXZlRmlsZUluZm8uY3JlYXRlVGltZSwgd2hpY2ggaXMgdGhlIHNhbWUgdmFsdWUuIHVybCBhcyBpbiBnZXQyLiBTaXplLTAgZW50cmllcyAodG9tYnN0b25lcykgcmVwb3J0IHVuZGVmaW5lZCB1bmxlc3MgY29uZmlnLmluY2x1ZGVUb21ic3RvbmVzLiAqL1xuICAgIGdldEluZm8oZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0SW5mb0NvbmZpZyk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyOyB1cmw/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD47XG4gICAgLyoqXG4gICAgICogRW1wdHkgKHNpemUtMCkgZmlsZXMgYXJlIE5FVkVSIHJldHVybmVkIGJ5IGluZGV4LWJhY2tlZCBzdG9yZXMgKEJsb2JTdG9yZSwgYW5kIHRoZXJlZm9yZSB0aGVcbiAgICAgKiBjaGFpbik6IGFuIGVtcHR5IGZpbGUgSVMgYSBtaXNzaW5nIGZpbGUgLSB0aGUgdG9tYnN0b25lIG9mIGEgZGVsZXRpb24uIElmIHlvdSB3YW50IGEgbWFya2VyXG4gICAgICogZmlsZSB0aGF0IHNob3dzIHVwIGluIGxpc3RpbmdzLCBhZGQgc29tZSBjb250ZW50IHRvIGl0LiBSYXcgc291cmNlcyAoZGlzaywgYmFja2JsYXplKSBETyBsaXN0XG4gICAgICogdGhlaXIgZW1wdHkgZmlsZXMgLSB0aGF0IGlzIGhvdyBzY2FucyBsZWFybiBvZiBkZWxldGlvbnMgLSBidXQgbm90aGluZyBidWlsdCBvbiB0aGUgaW5kZXhcbiAgICAgKiBldmVyIHN1cmZhY2VzIHRoZW0uXG4gICAgICovXG4gICAgZmluZChwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8c3RyaW5nW10+O1xuICAgIC8qKiBTZWUgZmluZCBmb3IgdGhlIGVtcHR5LWZpbGUgKHRvbWJzdG9uZSkgcnVsZS4gKi9cbiAgICBmaW5kSW5mbyhwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+O1xuICAgIC8qKiBPbmx5IHdvcmtzIGZvciBwdWJsaWMgYnVja2V0cyAocHJpdmF0ZSBidWNrZXRzIGFyZSBBUEktYWNjZXNzIG9ubHkpLiAqL1xuICAgIGdldFVSTChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG4gICAgLyoqIFRoZSBidWNrZXQncyBjb25maWd1cmF0aW9uLCB3aGljaCB0ZWxscyB3aGV0aGVyIHRoZSBvcHRpb25hbCBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZC4gKi9cbiAgICBnZXRDb25maWcoKTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz47XG4gICAgLyoqXG4gICAgICogQWxsIGZpbGVzIGNoYW5nZWQgYWZ0ZXIgY29uZmlnLnRpbWUsIG9wdGlvbmFsbHkgcmVzdHJpY3RlZCB0byBrZXlzIHJvdXRpbmcgaW50byBvbmUgb2ZcbiAgICAgKiBjb25maWcucm91dGVzICh1c2VkIGJ5IHNjYW5uaW5nLCBzbyBwYXJ0aWFsbHktb3ZlcmxhcHBpbmcgc2hhcmRzIG9ubHkgcmVjZWl2ZSB0aGVpciBzbGljZSkuXG4gICAgICogV2hlbiBnZXRDb25maWcoKS5zdXBwb3J0c0NoYW5nZXNBZnRlciwgdGhpcyBpcyBiYWNrZWQgYnkgYW4gaW5kZXggKGZhc3QsIGFuZCBkZWxldGlvbnMgQVJFXG4gICAgICogcmVwb3J0ZWQsIGFzIHNpemUtMCB0b21ic3RvbmUgZW50cmllcykuIEV2ZXJ5IG90aGVyIGJhY2tlbmQgZW11bGF0ZXMgaXQ6IGEgZnVsbCBmaW5kSW5mb1xuICAgICAqIGxpc3RpbmcgZmlsdGVyZWQgaW4gbWVtb3J5IC0gY29ycmVjdCwgYnV0IG5vIGNoZWFwZXIgdGhhbiB0aGUgbGlzdGluZyBpdHNlbGYuXG4gICAgICovXG4gICAgZ2V0Q2hhbmdlc0FmdGVyMihjb25maWc6IENoYW5nZXNBZnRlckNvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+O1xuICAgIC8qKiBTeW5jaHJvbml6YXRpb24gaW50cm9zcGVjdGlvbiwgZm9yIGJhY2tlbmRzIHRoYXQgc3luY2hyb25pemUgZnJvbSBzb3VyY2VzIChzZWUgQmxvYlN0b3JlKS4gKi9cbiAgICBnZXRTeW5jU3RhdHVzPygpOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz47XG59XG4iXX0=
62
- /* _JS_SOURCE_HASH = "08fb4e4273414f316e863de46d2f1674c10c14c60cd1fe9048723848c8a2d250"; */
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUFyY2hpdmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiSUFyY2hpdmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx3S0FBd0s7OztBQUV4SyxzSkFBc0o7QUFDekksUUFBQSx3QkFBd0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUV2RCx5TEFBeUw7QUFDNUssUUFBQSxvQkFBb0IsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pELFNBQWdCLHVCQUF1QixDQUFDLFlBQW9CO0lBQ3hELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxnQ0FBd0IsQ0FBQztJQUNoRCxJQUFJLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxZQUFZLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFHLENBQUM7QUFDTCxDQUFDO0FBTEQsMERBS0M7QUF1RlksUUFBQSxpQkFBaUIsR0FBcUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUF1SWhGLHdYQUF3WDtBQUMzVyxRQUFBLDBCQUEwQixHQUFHLDRDQUE0QyxDQUFDO0FBRXZGLDhMQUE4TDtBQUNqTCxRQUFBLG1CQUFtQixHQUFHLHFDQUFxQyxDQUFDO0FBRXpFLHVXQUF1VztBQUMxVixRQUFBLHNCQUFzQixHQUFHLHdDQUF3QyxDQUFDO0FBRWxFLFFBQUEsVUFBVSxHQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVuRCwyUkFBMlI7QUFDOVEsUUFBQSxjQUFjLEdBQUcsNkNBQTZDLENBQUM7QUFDNUUsb0xBQW9MO0FBQ3BMLDhKQUE4SjtBQUM5SixTQUFnQixtQkFBbUIsQ0FBQyxXQUF5QztJQUN6RSxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzlCLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBSEQsa0RBR0M7QUFDRCxpTkFBaU47QUFDak4sU0FBZ0IsbUJBQW1CLENBQUMsWUFBZ0M7SUFDaEUsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUZELGtEQUVDO0FBRUQsd0tBQXdLO0FBQzNKLFFBQUEsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFbkQsbVJBQW1SO0FBQ25SLFNBQWdCLGlCQUFpQixDQUFDLElBQVk7SUFDMUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsT0FBTztRQUNILFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNwQixJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUM1QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsMkJBQW1CLENBQUMsQ0FBQztZQUNoRSxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBQ0QsYUFBYSxFQUFFLEdBQUcsRUFBRTtZQUNoQixNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBYkQsOENBYUM7QUFFRCx3SkFBd0o7QUFDeEosbURBQW1EO0FBQTFDLGlIQUFBLGVBQWUsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBpbXBvcnRhbnQgb3BlcmF0aW9ucyBvZiBhbiBhcmNoaXZlIGJ1Y2tldCAoZXh0cmFjdGVkIGZyb20gQXJjaGl2ZXNCYWNrYmxhemUpLCBzbyBvdGhlciBiYWNrZW5kcyAoZS5nLiBvdXIgb3duIHJlbW90ZSBzdG9yYWdlIHNlcnZlcikgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5LlxuXG4vLyBBIHdyaXRlIG1heSBub3QgYmUgc3RhbXBlZCBtb3JlIHRoYW4gdGhpcyBmYXIgaW4gdGhlIGZ1dHVyZSwgb3IgY2xvY2sgc2tldyBiZXR3ZWVuIG1hY2hpbmVzIHdvdWxkIGxldCBhIGJhZCB0aW1lc3RhbXAgYmxvY2sgd3JpdGVzIGZvciBhIGxvbmcgdGltZS5cbmV4cG9ydCBjb25zdCBNQVhfTEFTVF9NT0RJRklFRF9GVVRVUkUgPSAxNSAqIDYwICogMTAwMDtcblxuLy8gSG93IGxvbmcgYnJvd3NlcnMgbWF5IGNhY2hlIGZpbGVzIGZyb20gaW1tdXRhYmxlIGJ1Y2tldHMgKHRoZSBDYWNoZS1Db250cm9sIG1heC1hZ2UpLCBzaGFyZWQgYnkgZXZlcnkgaG9zdGluZyBwYXRoIChiYWNrYmxhemUgYnVja2V0IHNldHRpbmdzIGFuZCBvdXIgb3duIHN0b3JhZ2Ugc2VydmVyJ3MgSFRUUCByb3V0ZSlcbmV4cG9ydCBjb25zdCBJTU1VVEFCTEVfQ0FDSEVfVElNRSA9IDg2NDAwICogMTAwMDtcbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZExhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBtYXggPSBEYXRlLm5vdygpICsgTUFYX0xBU1RfTU9ESUZJRURfRlVUVVJFO1xuICAgIGlmIChsYXN0TW9kaWZpZWQgPiBtYXgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsYXN0TW9kaWZpZWQgaXMgdG9vIGZhciBpbiB0aGUgZnV0dXJlOiAke2xhc3RNb2RpZmllZH0gPiAke21heH0gKG5vdyArIDE1IG1pbnV0ZXMpYCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCB0eXBlIFJlbW90ZUNvbmZpZyA9IHtcbiAgICAvLyBOT1RFOiBWZXJzaW9uIGlzIHVzZWQgd2hlbiB1cGRhdGluZyB0aGUgY29uZmlndXJhdGlvbi4gVGhlIG5ld2VyIHZlcnNpb24gaXMgYWx3YXlzIHRha2VuLiBBIG1pc3NpbmcgdmVyc2lvbiBjb3VudHMgYXMgdmVyc2lvbiAtMS5cbiAgICB2ZXJzaW9uPzogbnVtYmVyO1xuICAgIHNvdXJjZXM6IFJlbW90ZUNvbmZpZ0Jhc2VbXTtcbn07XG5cbi8qKlxuICAgIHN0cmluZyBhcmd1bWVudHMgd2lsbCBiZSBhIHVybCwgbG9va2luZyBsaWtlOlxuICAgICAgICBodHRwczovL3N0b3JhZ2UyLnZpZGdyaWR3ZWIuY29tOjQ0NDUvZmlsZS9leGFtcGxlYWNjb3VudC9leGFtcGxlYnVja2V0L3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuICAgICAgICBodHRwczovL2YwMDIuYmFja2JsYXplYjIuY29tL2ZpbGUvcXVlcnlzdWJ0ZXN0LWNvbS1wdWJsaWMtaW1tdXRhYmxlL3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuICAgICAgICAtIFRoZXNlIG1hcCB0byB7IHVybCB9LCB3aXRoIHRoZSB0eXBlIGluZmVycmVkIGZyb20gdGhlIHVybFxuICAgICAgICAtIEhvc3RlZCB1cmxzIGFyZSAvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+Ly4uLiwgYmFja2JsYXplIHVybHMgYXJlIC9maWxlLzxidWNrZXROYW1lPi8uLi5cblxuICAgIE5PVEU6IElmIHdlIGRvIG5vdCBoYXZlIHJpZ2h0IGFjY2VzcyB0byB0aGVzZSwgdGhlbiBpdCBiZWNvbWVzIGEgcmVhZC1vbmx5IElBcmNoaXZlcywgd2hlcmUgd2Ugc29sZWx5IHJlYWQgdXNpbmcgdGhlIHVybCBmb3JtICh3aGljaCBtaWdodCB0aHJvdyBkdWUgdG8gbm90IGhhdmluZyBhY2Nlc3MgYXMgd2VsbCkuIFVOTEVTUyBPdXIgY29uZmlndXJhdGlvbiBleHBsaWNpdGx5IGhhcyBwdWJsaWM6IGZhbHNlLCBpbiB3aGljaCBjYXNlLCB3ZSBkb24ndCBldmVuIGhpdCB0aGUgVVJMIGFuZCB3ZSB0aHJvdyBvbiBhY2Nlc3MuXG5cbiAgICBOT1RFOiBJZiB3ZSdyZSBpbiB0aGUgYnJvd3Nlciwgd2Ugc2hvdWxkIGFsbG93IGRvd25sb2FkaW5nIHRoZSBmaWxlcyB2aWEgdGhlIFVSTCBmb3JtIChpZiBpdCdzIGEgcHVibGljIGJ1Y2tldCksIGhvd2V2ZXIsIHdlIHdvbid0IGFsbG93IHdyaXRpbmcsIGJlY2F1c2UgdGhlaXIgc2VydmVycyBkbyBub3QgYWxsb3cgc2VjdXJlIGJyb3dzZXIgd3JpdGVzLlxuKi9cbmV4cG9ydCB0eXBlIFJlbW90ZUNvbmZpZ0Jhc2UgPSBzdHJpbmcgfCBTb3VyY2VDb25maWc7XG5cbi8qKiBPbmUgY29uZmlndXJlZCBzb3VyY2UgaW4gYSByb3V0aW5nIGNvbmZpZzogYSBob3N0ZWQgKG91ciBzdG9yYWdlIHNlcnZlcikgb3IgYmFja2JsYXplIGVudHJ5LiBSZXF1ZXN0cyBjYXJyeSB0aGUgZXhhY3QgU291cmNlQ29uZmlnIHRoZXkgc2VsZWN0ZWQsIGFuZCB0aGUgc2VydmVyIG1hdGNoZXMgaXQgYWdhaW5zdCBpdHMgb3duIGVudHJpZXMgdG8gcGljayB0aGUgYmFja2luZyBzdG9yZS4gKi9cbmV4cG9ydCB0eXBlIFNvdXJjZUNvbmZpZyA9IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZztcblxuZXhwb3J0IHR5cGUgQ29tbW9uQ29uZmlnID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdG9yYWdlIHRoaXMgZW50cnkgbmFtZXMsIGFzIG9wcG9zZWQgdG8gdGhlIHJ1bGVzIGZvciB1c2luZyBpdC4gRXZlcnkgZW50cnkgd2l0aCB0aGUgc2FtZVxuICAgICAqIG5hbWUgKGZvciB0aGUgc2FtZSBhY2NvdW50IGFuZCBidWNrZXQpIElTIHRoZSBzYW1lIHN0b3JhZ2U6IG9uZSBmb2xkZXIgb24gdGhlIHNlcnZlciwgb25lXG4gICAgICogc3RvcmUsIG9uZSBpbmRleCAtIGhvd2V2ZXIgbWFueSBlbnRyaWVzIHRoZXJlIGFyZSBhbmQgd2hhdGV2ZXIgdGhlaXIgd2luZG93cyBhbmQgcm91dGVzIHNheS5cbiAgICAgKiBFdmVyeXRoaW5nIGFib3V0IFdIRU4gYW5kIFdISUNIIEtFWVMgKHZhbGlkV2luZG93LCByb3V0ZSkgaXMgcG9saWN5IGxheWVyZWQgb24gdG9wIG9mIGl0LCBhbmRcbiAgICAgKiBjaGFuZ2luZyB0aGF0IHBvbGljeSBuZXZlciBtb3ZlcyBkYXRhLlxuICAgICAqXG4gICAgICogTGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZSwgZGFzaCBhbmQgcGVyaW9kcywgdXAgdG8gNjQgY2hhcmFjdGVycyAtIHNvIGEgaG9zdCBvciBhIHZlcnNpb25cbiAgICAgKiBjYW4gYmUgdXNlZCBhcy1pcy4gSXQgaXMgdGhlIGZvbGRlciBuYW1lLCBzbyBpdCBtdXN0IHN0YXkgdW5pcXVlIGFuZCBtdXN0IG5ldmVyIGJlIHJldXNlZCBmb3JcbiAgICAgKiBkaWZmZXJlbnQgc3RvcmFnZTpcbiAgICAgKiBwb2ludGluZyB0d28gdW5yZWxhdGVkIGVudHJpZXMgYXQgb25lIG5hbWUgbWVyZ2VzIHRoZWlyIGRhdGEsIGFuZCByZS11c2luZyBhIHJldGlyZWQgbmFtZVxuICAgICAqIGhhbmRzIHRoZSBuZXcgZW50cnkgdGhlIHJldGlyZWQgb25lJ3MgZmlsZXMuIERlY2lkaW5nIHRoYXQgaXMgdGhlIGRldmVsb3BlcidzIGpvYiAtIHRoZSBzZXJ2ZXJcbiAgICAgKiBvbmx5IGV2ZXIgZG9lcyB3aGF0IHRoZSBuYW1lIHNheXMuXG4gICAgICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBCeSBkZWZhdWx0IGEgc2VydmVyIGhvc3RpbmcgdGhpcyBidWNrZXQgZWFnZXJseSBjb3BpZXMgdGhpcyBzb3VyY2UncyBmdWxsIGNvbnRlbnRzIG9udG8gaXRzIG93biBkaXNrIChvbiB0b3Agb2YgdGhlIGxhenkgcmVhZC10aHJvdWdoIGNhY2hpbmcpLiBTZXQgdGhpcyB0byBiZSBhIGZyb250IGVuZCBmb3IgYSB2ZXJ5IGxhcmdlIGRhdGFiYXNlIHdpdGhvdXQgY29weWluZyB0aGUgZnVsbCBkYXRhYmFzZSAtIHJlYWRzIHN0aWxsIGRvd24tY2FjaGUgaW5kaXZpZHVhbCBmaWxlcyBvbiBkZW1hbmQuICovXG4gICAgbm9GdWxsU3luYz86IGJvb2xlYW47XG4gICAgLyoqIEJ5dGVzIG9mIHJlYWQtY2FjaGUgdGhpcyBzZXJ2ZXIncyBkaXNrIG1heSBob2xkOyBsZWFzdC1yZWNlbnRseS11c2VkIGZpbGVzIGFyZSBkZWxldGVkIGZyb20gZGlzayB0byBzdGF5IHVuZGVyIGl0IChvbmx5IGV2ZXIgd2hlbiBhbm90aGVyIHNvdXJjZSB2ZXJpZmlhYmx5IGhvbGRzIHRoZSBmaWxlIC0gdGhlIG9ubHkgY29weSBpcyBuZXZlciBkZWxldGVkKS4gUmVxdWlyZXMgbm9GdWxsU3luYyAoYSBmdWxsIGNvcHkgY2FuJ3QgYmUgYm91bmRlZCkuICovXG4gICAgcmVhZGVyRGlza0xpbWl0PzogbnVtYmVyO1xuICAgIC8qKiBUaGUgd3JpdGUgdGltZXMgKFtzdGFydE1zLCBlbmRNc10pIHRoaXMgc291cmNlIGlzIHZhbGlkIGZvciAoc2VlIEFyY2hpdmVzU291cmNlLnZhbGlkV2luZG93IGZvciB0aGUgc3luY2hyb25pemF0aW9uIHNlbWFudGljcykuIFJlcXVpcmVkIG9uIG9iamVjdCBjb25maWdzOiBjb25maWd1cmF0aW9uIGNoYW5nZXMgbXVzdCBiZSBTQ0hFRFVMRUQgKGEgbmV3IHNvdXJjZSBiZWNvbWVzIHZhbGlkIGF0IGEgZnV0dXJlIHRpbWUgd2hpbGUgdGhlIG9sZCBvbmUncyB3aW5kb3cgZW5kcyksIG5vdCBmbGlwcGVkIGluc3RhbnRseS4gUGxhaW4gVVJMLXN0cmluZyBzb3VyY2VzIGRlZmF1bHQgdG8gRlVMTF9WQUxJRF9XSU5ET1cgLSBvbmNlIHlvdSdyZSB3cml0aW5nIG9iamVjdCBjb25maWdzLCB5b3UncmUgZG9pbmcgc29tZXRoaW5nIGNvbXBsaWNhdGVkIGVub3VnaCB0byB0aGluayBhYm91dCB3aGVuIHRoaW5ncyBjaGFuZ2UuICovXG4gICAgdmFsaWRXaW5kb3c6IFtudW1iZXIsIG51bWJlcl07XG4gICAgLyoqIFNoYXJkaW5nOiB0aGUgZnJhY3Rpb24gb2YgdGhlIGtleSBzcGFjZSB0aGlzIHNvdXJjZSBoYW5kbGVzLCBhcyBbc3RhcnQsIGVuZCkgb3ZlciBbMCwgMSkgKGtleXMgYXJlIHJvdXRlZCBieSBnZXRSb3V0ZSBpbiByZW1vdGVDb25maWcudHMpLiBEZWZhdWx0cyB0byBGVUxMX1JPVVRFICh1bnNoYXJkZWQpLiBBdCBldmVyeSBwb2ludCBpbiB0aW1lIHRoZSBzb3VyY2VzJyByb3V0ZXMgbXVzdCBmdWxseSBjb3ZlciBbMCwgMSksIG9yIHNvbWUga2V5cyBjb3VsZCBuZXZlciBiZSByZWFkLiAqL1xuICAgIHJvdXRlPzogW251bWJlciwgbnVtYmVyXTtcbiAgICAvKiogU2V0IG9uIGVudHJpZXMgaW5qZWN0ZWQgaW50byB0aGUgaW4tbWVtb3J5IGNvbmZpZyBieSBhbiBvdmVybGF5IChhIGRlcGxveSBzd2l0Y2hvdmVyJ3MgYWx0ZXJuYXRlLXBvcnQgd2luZG93KS4gTmV2ZXIgd3JpdHRlbiB0byBkaXNrOiByZXNvbHZlSW50ZXJtZWRpYXRlU291cmNlcyBzdHJpcHMgdGhlc2UgYW5kIHJlam9pbnMgdGhlIHdpbmRvd3MgYXJvdW5kIHRoZW0sIHdoaWNoIGlzIGFsc28gaG93IGEgY2xpZW50IHRlbGxzIHdoZXRoZXIgYW4gdXBkYXRlIGlzIGEgcmVhbCBjb25maWd1cmF0aW9uIGNoYW5nZSBvciBqdXN0IGFuIG92ZXJsYXkuIFRoZSBWQUxVRSBpcyB0aGUgdXJsIG9mIHRoZSBzb3VyY2UgdGhpcyBpbnRlcm1lZGlhdGUgd2FzIHNwbGl0IG91dCBvZiAoaXRzIGFsdGVybmF0ZS1wb3J0IHZpZXcpIC0gc28gYSByZXF1ZXN0IG5hbWluZyB0aGUgaW50ZXJtZWRpYXRlIHN0aWxsIHJlc29sdmVzIHRvIHRoZSBPUklHSU5BTCBzb3VyY2UsIGV2ZW4gYWZ0ZXIgdGhlIGludGVybWVkaWF0ZSByZWpvaW5zIGFuZCB0aGUgZW50cnkgaXMgZ29uZS4gKi9cbiAgICBpbnRlcm1lZGlhdGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBIb3N0ZWRDb25maWcgPSBDb21tb25Db25maWcgJiB7XG4gICAgdHlwZTogXCJyZW1vdGVcIjtcblxuICAgIC8vIEV4OiBodHRwczovLzk5LTI1MC0xMjQtOTEucXVlcnlzdWJ0ZXN0LmNvbTo1MjMzL2ZpbGUvcm9vdC91bmlxdWVidWNrZXRuYW1lL3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvblxuICAgIC8vIE5PVEU6IFRoZSBhY2NvdW50IGFuZCBidWNrZXQgbmFtZSBhcmUgb2J0YWluZWQgZnJvbSB0aGUgVVJMLlxuICAgIHVybDogc3RyaW5nO1xuXG4gICAgLy8gTk9URTogQXV0aGVudGljYXRpb24gaXMgaGFuZGxlZCBieSBjZXJ0LnRzLCB2aWEgaGF2aW5nIHlvdXIgbWFjaGluZSB0cnVzdGVkIHRvIGFjY2VzcyB0aGlzIGFjY291bnQuIFxuXG4gICAgcHVibGljPzogYm9vbGVhbjtcbiAgICAvLyBGYXN0IG1vZGU6IHRoZSBzZXJ2ZXIgYWNrbm93bGVkZ2VzIHdyaXRlcyBvbmNlIHRoZXkgYXJlIGluIG1lbW9yeSwgZmx1c2hpbmcgdG8gZGlzayBhZnRlciB3cml0ZURlbGF5IChkZWZhdWx0IDUgbWludXRlcykgYW5kIGNvYWxlc2Npbmcgd3JpdGVzIHRvIHRoZSBzYW1lIGZpbGUuIEEgc2VydmVyIGNyYXNoIGxvc2VzIHdyaXRlcyB0aGF0IGhhdmVuJ3QgZmx1c2hlZCB5ZXQuXG4gICAgZmFzdD86IGJvb2xlYW47XG4gICAgd3JpdGVEZWxheT86IG51bWJlcjtcbiAgICAvLyBXcml0ZXMgdG8gcGF0aHMgdGhhdCBhbHJlYWR5IGV4aXN0IGFyZSBkaXNhbGxvd2VkIChkZWxldGVzIHN0aWxsIHdvcmspLlxuICAgIGltbXV0YWJsZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCYWNrYmxhemVDb25maWcgPSBDb21tb25Db25maWcgJiB7XG4gICAgdHlwZTogXCJiYWNrYmxhemVcIjtcbiAgICAvLyBFeDogaHR0cHM6Ly9mMDAyLmJhY2tibGF6ZWIyLmNvbS9maWxlL3F1ZXJ5c3VidGVzdC1jb20tcHVibGljLWltbXV0YWJsZS9zdG9yYWdlL3N0b3JhZ2Vyb3V0aW5nLmpzb25cbiAgICAvLyBOT1RFOiBUaGUgYnVja2V0IG5hbWUgaXMgb2J0YWluZWQgZnJvbSB0aGUgVVJMLlxuICAgIHVybDogc3RyaW5nO1xuICAgIC8vIFB1YmxpYyBidWNrZXRzIGFyZSBzZXJ2ZWQgb3ZlciBwbGFpbiBIVFRQUyBHRVRzIChnZXRVUkwpLiBQcml2YXRlIGJ1Y2tldHMgYXJlIEFQSS1hY2Nlc3Mgb25seS5cbiAgICBwdWJsaWM/OiBib29sZWFuO1xuICAgIC8vIE5PVEU6IFRoaXMgaXNuJ3QgZW5mb3JjZWQgb24gdGhlIGJhY2tibGF6ZSBsZXZlbCwgc28gdGhpcyBpcyBqdXN0IGEgY2xpZW50LXNpZGUgZ3VhcmFudGVlLiBUaGlzIGNhbiBjaGFuZ2UgaG93IHdlIGNhY2hlIGZpbGVzLlxuICAgIC8vICAtIEJhY2tibGF6ZSBkb2VzIHN1cHBvcnQgaW1tdXRhYmlsaXR5LiBIb3dldmVyLCBhcHBhcmVudGx5LCBvbmNlIHdlIGVuYWJsZSBpdCBvbiBhIGJ1Y2tldCwgd2UgY2FuJ3QgZGlzYWJsZSBpdCwgd2hpY2ggaXMgcmVhbGx5IGJhZCwgYXMgaXQgbWVhbnMgaWYgb3VyIGNvZGUgY291bGQgZXZlciBlbmFibGUgaXQgYW5kIHdlIGFjY2lkZW50YWxseSBlbmFibGUgaXQgb24gYW4gaW1wb3J0YW50IGJ1Y2tldCwgd2UgZXNzZW50aWFsbHkganVzdCBicmlja2VkIHRoYXQgYnVja2V0LiBTbyB3ZSBzaG91bGQgbmV2ZXIgd3JpdGUgYW55IGNvZGUgdGhhdCBldmVyIHRyaWVzIHRvIHVzZSBiYWNrYmxhemUgdG8gbWFrZSB0aGluZ3MgaW1tdXRhYmxlLiBcbiAgICBpbW11dGFibGU/OiBib29sZWFuO1xuICAgIC8vIENPUlMgb3JpZ2lucyBhbGxvd2VkIHRvIGNvbnN1bWUgdGhlIGJ1Y2tldCdzIGZpbGVzIGluIGEgYnJvd3Nlci4gTm90IGEgc2VjdXJpdHkgYm91bmRhcnkgKGFjY2VzcyBpcyBnYXRlZCBieSB0aGUgQVBJIGtleSAvIHNpZ25lZCBVUkxzLCBuZWl0aGVyIG9mIHdoaWNoIHJpZGVzIGluIGNvb2tpZXMpIC0gaXQgb25seSBjb250cm9scyB3aGljaCBzaXRlcycgaW4tcGFnZSBKYXZhU2NyaXB0IGNhbiByZWFkIHJlc3BvbnNlcy4gRGVmYXVsdHMgdG8gYW55IEhUVFBTIG9yaWdpbi5cbiAgICBhbGxvd2VkT3JpZ2lucz86IHN0cmluZ1tdO1xuXG4gICAgLy8gTk9URTogV2Ugd2lsbCBhY2Nlc3MgdGhlIGFwaSBrZXkgZnJvbSBnZXRTZWNyZXQsIHNlZSBiYWNrYmxhemUudHMgZm9yIHRoZSBzcGVjaWZpYyBrZXlzLlxufTtcblxuXG5leHBvcnQgY29uc3QgRlVMTF9WQUxJRF9XSU5ET1c6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJdO1xuXG5cblxuXG5leHBvcnQgdHlwZSBHZXRDb25maWcgPSB7XG4gICAgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH07XG4gICAgLyoqIFJlYWQgT05MWSBmcm9tIHRoZSBwcmltYXJ5IHNvdXJjZSAtIHRoZSBvbmUgd3JpdGVzIHdvdWxkIHRhcmdldCAtIGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIGFjcm9zcyB0aGUgcmVkdW5kYW50IHNvdXJjZXMuIFVzZSB0aGlzIHdoZW4geW91IHdhbnQgeW91ciByZWFkcyBhbmQgd3JpdGVzIHRvIGJlIHNvbWV3aGF0IGF0b21pYzogdGhlcmUgd2lsbCBzdGlsbCBiZSBpc3N1ZXMgd2l0aCB0aGUgcm91bmQgdHJpcCwgYnV0IHdpdGhvdXQgaXQgeW91IGNvdWxkIHRhbGsgdG8gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBub2RlIGFuZCBnZXQgYSBtdWNoIG9sZGVyIHZhbHVlLiBNb3N0IHJlYWRzIGFyZW4ndCBmb2xsb3dlZCBieSBhIHdyaXRlIHRob3VnaCwgc28gZm9yIG1vc3QgY2FzZXMgaXQncyBiZXR0ZXIgdG8gZ2V0IGEgdmFsdWUgdGhhbiB0byBoYXZlIHRvIHdhaXQgKG9yIGV2ZW4gdGhyb3cpIHdoZW4gdGhlIHByaW1hcnkgbm9kZSBpcyBub3QgYXZhaWxhYmxlLiAqL1xuICAgIG5vRmFsbGJhY2tzPzogYm9vbGVhbjtcbiAgICAvKiogU3RvcmUtdG8tc3RvcmUgY2FsbDogdGhlIHNlcnZpbmcgbm9kZSBhbnN3ZXJzIHB1cmVseSBmcm9tIGl0cyBvd24gZGlzaywgY29tcGxldGVseSBzaG9ydC1jaXJjdWl0aW5nIGl0cyBpbmRleCBob2xkZXJzIC0gY2hhc2luZyBpdHMgb3duIHJlbW90ZSBob2xkZXJzIHdoaWxlIGFuc3dlcmluZyBhbm90aGVyIHN0b3JlIGlzIGhvdyBpbmZpbml0ZSBnZXQgbG9vcHMgYmV0d2VlbiBzdG9yZXMgZm9ybSAoQSBhc2tzIEIsIEIncyBpbmRleCBwb2ludHMgYmFjayBhdCBBLCAuLi4pLiBObyB3aW5kb3cgb3Igcm91dGUgY2hlY2tzIG9uIHJlYWRzOiBpZiB0aGUgYnl0ZXMgYXJlIG9uIGl0cyBkaXNrLCB0aGUgY2FsbGVyIG1heSBoYXZlIHRoZW0uICovXG4gICAgaW50ZXJuYWw/OiBib29sZWFuO1xuICAgIC8qKiBBbHNvIHJldHVybiBzaXplLTAgcmVzdWx0cyAodG9tYnN0b25lcyAtIGFuIGVtcHR5IGZpbGUgSVMgYSBtaXNzaW5nIGZpbGUpIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlbSBhcyBhYnNlbnQuIE9mZiBieSBkZWZhdWx0LCBtYXRjaGluZyBnZXRJbmZvJ3MgZmxhZyBvZiB0aGUgc2FtZSBuYW1lLiBTeW5jaHJvbml6YXRpb24gcGFzc2VzIHRoaXMgc28gYSBERUxFVEVEIGZpbGUgKHdpdGggaXRzIHdyaXRlIHRpbWUpIGlzIGRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgZmlsZSB0aGF0IG5ldmVyIGV4aXN0ZWQuICovXG4gICAgaW5jbHVkZVRvbWJzdG9uZXM/OiBib29sZWFuO1xuICAgIC8qKiBSZWFkcyBmaWxlcyB0aGF0IGFyZSBNQVJLRUQgZm9yIGRlbGV0aW9uIChkZWxldGVkLCBidXQgd2l0aCB0aGVpciBieXRlcyBzdGlsbCBpbiB0aGUgZGVsZXRpb24gaGlzdG9yeSAtIHNlZSBTZXRDb25maWcudW5kZWxldGUgZm9yIHJlc3RvcmluZyB0aGVtKS4gVGhlIGFjdHVhbCBjb250ZW50IGNvbWVzIGJhY2ssIHVubGlrZSBpbmNsdWRlVG9tYnN0b25lcywgd2hpY2ggb25seSByZXBvcnRzIHRoYXQgYSBkZWxldGlvbiBoYXBwZW5lZC4gKi9cbiAgICBpbmNsdWRlTWFya2VkPzogYm9vbGVhbjtcbiAgICAvKiogUmVhZCBmcm9tIEVYQUNUTFkgdGhpcyBzb3VyY2UgLSBpdHMgY29uZmlnIHVybCwgYXMgQXJjaGl2ZXNDaGFpbi5nZXRGaWxlU291cmNlcyBsaXN0cyB0aGVtIC0gd2l0aCBubyBmYWxsYmFjayB0byBhbnkgb3RoZXIuIEZvciBjb21wYXJpbmcgdGhlIGNvcGllcyBkaWZmZXJlbnQgc291cmNlcyBob2xkIChjb21iaW5lIHdpdGggaW50ZXJuYWwgdG8gcmVhZCBvbmx5IHRoYXQgc2VydmVyJ3Mgb3duIGRpc2ssIHNraXBwaW5nIGl0cyBob2xkZXIgcmVzb2x1dGlvbikuIE11bHRpLXNvdXJjZSBhcmNoaXZlcyBvbmx5OyB0aHJvd3Mgd2hlbiBubyBjb25maWd1cmVkIHNvdXJjZSBoYXMgdGhlIHVybC4gKi9cbiAgICBzb3VyY2VVcmw/OiBzdHJpbmc7XG4gICAgLyoqIEhvdyBtYW55IGV4dHJhIHRpbWVzIHRoZSBXSE9MRSBvcGVyYXRpb24gaXMgcmV0cmllZCBhZnRlciBldmVyeSBzb3VyY2UgaW4gYSBwYXNzIGZhaWxlZCAtIGFueSBlcnJvciBjb3VudHMgKHRoZSB3cm9uZy13aW5kb3cvcm91dGUgbWFya2VycyBzdGlsbCBnZXQgdGhlaXIgY29uZmlnIHJlLXJlc29sdmUgZmlyc3QpLiBPbmx5IGFwcGxpZXMgdG8gZmFsbGJhY2sgZGlzcGF0Y2ggKG11bHRpLXNvdXJjZSwgbm90IG5vRmFsbGJhY2tzKSwgd2hlcmUgaXQgZGVmYXVsdHMgdG8gMzsgdGhlIG5vRmFsbGJhY2tzL3dyaXRlLW5vZGUgcGF0aCBhbHJlYWR5IHJldHJpZXMgb24gaXRzIG93biBkZWFkbGluZS4gTXVsdGktcGFydCB1cGxvYWRzIGFkZGl0aW9uYWxseSByZXRyeSBwZXIgcGFydCByZWdhcmRsZXNzIG9mIHRoaXMuICovXG4gICAgcmV0cmllcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbmRDb25maWcgPSB7XG4gICAgc2hhbGxvdz86IGJvb2xlYW47XG4gICAgdHlwZT86IFwiZmlsZXNcIiB8IFwiZm9sZGVyc1wiO1xuICAgIC8qKiBBbHNvIGxpc3QgZmlsZXMgTUFSS0VEIGZvciBkZWxldGlvbiAoc2VlIEdldENvbmZpZy5pbmNsdWRlTWFya2VkKS4gKi9cbiAgICBpbmNsdWRlTWFya2VkPzogYm9vbGVhbjtcbiAgICAvKiogTGlzdGluZ3Mgbm9ybWFsbHkgY29tZSBPTkxZIGZyb20gdGhlIGF1dGhvcml0YXRpdmUgc291cmNlcyAodGhlIHNhbWUgbm9kZXMgd3JpdGVzIGdvIHRvIC0gcmVhZC15b3VyLXdyaXRlcykuIFdpdGggZmFsbGJhY2tzLCBhIGZhaWxpbmcgc2hhcmQncyByb3V0ZXMgYXJlIGNvdmVyZWQgYnkgdGhlIG5leHQgc291cmNlIGhvbGRpbmcgdGhlbSAoZS5nLiBhIHdpZGUgcmVhZCByZXBsaWNhKSBpbnN0ZWFkIG9mIHRoZSBjYWxsIGZhaWxpbmcgLSBoaWdoIGF2YWlsYWJpbGl0eSBhdCB0aGUgY29zdCBvZiBwb3NzaWJseSBtaXNzaW5nIGp1c3Qtd3JpdHRlbiBkYXRhLiBTaW5nbGUtc291cmNlIGFyY2hpdmVzIGlnbm9yZSB0aGUgZmxhZy4gKi9cbiAgICBmYWxsYmFja3M/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRGVsQ29uZmlnID0ge1xuICAgIC8qKiBTdGFtcHMgdGhlIGRlbGV0aW9uIChpdHMgdG9tYnN0b25lKSB3aXRoIHRoaXMgd3JpdGUgdGltZSBpbnN0ZWFkIG9mIG5vdy4gU3luY2hyb25pemF0aW9uIHBhc3NlcyB0aGUgT1JJR0lOQUwgZGVsZXRpb24gdGltZSwgc28gZGVsZXRpb24gb3JkZXJpbmcgc3Vydml2ZXMgcHJvcGFnYXRpb24gZXhhY3RseSBsaWtlIGFueSBvdGhlciB3cml0ZSdzIG9yZGVyaW5nLiAqL1xuICAgIGxhc3RNb2RpZmllZD86IG51bWJlcjtcbiAgICAvKiogU2VlIFNldENvbmZpZy5pbnRlcm5hbC4gKi9cbiAgICBpbnRlcm5hbD86IGJvb2xlYW47XG4gICAgLyoqIFNlZSBTZXRDb25maWcubm9DaGVja3MuICovXG4gICAgbm9DaGVja3M/OiBib29sZWFuO1xuICAgIC8qKiBTZWUgU2V0Q29uZmlnLmZhbGxiYWNrcy4gKi9cbiAgICBmYWxsYmFja3M/OiBib29sZWFuO1xuICAgIC8qKiBTZWUgR2V0Q29uZmlnLnJldHJpZXMuICovXG4gICAgcmV0cmllcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEdldEluZm9Db25maWcgPSB7XG4gICAgLyoqIEFsc28gcmVwb3J0IHNpemUtMCBlbnRyaWVzICh0b21ic3RvbmVzIC0gYW4gZW1wdHkgZmlsZSBJUyBhIG1pc3NpbmcgZmlsZSkuIE9mZiBieSBkZWZhdWx0LCBzbyBhIGRlbGV0ZWQga2V5IHJlcG9ydHMgdW5kZWZpbmVkLCBtYXRjaGluZyBnZXQuIFN5bmNocm9uaXphdGlvbi1zdHlsZSBjYWxsZXJzIHBhc3MgdGhpcyB3aGVuIHRoZXkgbmVlZCBhIGRlbGV0aW9uJ3Mgd3JpdGUgdGltZSAoZS5nLiB0byBjb21wYXJlIGl0IGFnYWluc3QgYSB3cml0ZSB0aGV5IGFyZSBhYm91dCB0byBtYWtlKS4gKi9cbiAgICBpbmNsdWRlVG9tYnN0b25lcz86IGJvb2xlYW47XG4gICAgLyoqIFNlZSBHZXRDb25maWcubm9GYWxsYmFja3M6IGFuc3dlciBPTkxZIGZyb20gdGhlIHByaW1hcnkgc291cmNlICh0aGUgb25lIHdyaXRlcyB3b3VsZCB0YXJnZXQpIGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIGFjcm9zcyB0aGUgcmVkdW5kYW50IHNvdXJjZXMuICovXG4gICAgbm9GYWxsYmFja3M/OiBib29sZWFuO1xuICAgIC8qKiBTZWUgR2V0Q29uZmlnLnJldHJpZXMuICovXG4gICAgcmV0cmllcz86IG51bWJlcjtcbiAgICAvKiogU2VlIEdldENvbmZpZy5zb3VyY2VVcmw6IGFuc3dlciBmcm9tIEVYQUNUTFkgdGhpcyBzb3VyY2UuICovXG4gICAgc291cmNlVXJsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhbmdlc0FmdGVyQ29uZmlnID0ge1xuICAgIHRpbWU6IG51bWJlcjtcbiAgICAvKiogT25seSBrZXlzIHJvdXRpbmcgaW50byBvbmUgb2YgdGhlc2UgW3N0YXJ0LCBlbmQpIHJhbmdlcy4gT25seSBzY2FubmluZyBwYXNzZXMgdGhpcyAtIGl0IGxldHMgYSBzdG9yZSBzeW5jaW5nIGEgcGFydGlhbCBzaGFyZCBhc2sgZm9yIGp1c3QgaXRzIHNsaWNlLiAqL1xuICAgIHJvdXRlcz86IFtudW1iZXIsIG51bWJlcl1bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNldENvbmZpZyA9IHtcbiAgICBsYXN0TW9kaWZpZWQ/OiBudW1iZXI7XG4gICAgLyoqIE1ha2VzIHRoZSB3cml0ZSBhY2NlcHRhYmxlIG9uIGltbXV0YWJsZSB0YXJnZXRzOiBhbiBleGlzdGluZyBwYXRoIGlzIHNpbXBseSBrZXB0IChpbW11dGFiaWxpdHkgd2lucyAtIG5vdGhpbmcgaXMgb3ZlcndyaXR0ZW4pIGluc3RlYWQgb2YgdGhlIHdyaXRlIHRocm93aW5nLiBSZXF1aXJlcyBsYXN0TW9kaWZpZWQuIFN5bmNocm9uaXphdGlvbiBNVVNUIHBhc3MgdGhpcyBvbiBldmVyeSBwdXNoIC0gYSBwbGFpbiBzZXQgdGhyb3dzIG9uIGltbXV0YWJsZSB0YXJnZXRzLCB3aGljaCB3b3VsZCBhYm9ydCByZWNvbmNpbGlhdGlvbiB3aGVuZXZlciBvbmUgc291cmNlIGluIGEgY2hhaW4gaXMgaW1tdXRhYmxlLiAqL1xuICAgIGZvcmNlU2V0SW1tdXRhYmxlPzogYm9vbGVhbjtcbiAgICAvKiogU2tpcHMgUkVEVU5EQU5UIHRhcmdldC1zaWRlIHNhZmV0eSByZWFkcyBhcm91bmQgdGhlIHdyaXRlIChiYWNrYmxhemU6IHRoZSBwb3N0LXVwbG9hZCBleGlzdGVuY2UgcG9sbCkuIEl0IGRvZXMgTk9UIHNraXAgY2hlY2tzIHRoYXQgYXJlIHRoZSB0YXJnZXQncyBvbmx5IG9yZGVyaW5nIGd1YXJkOiBiYWNrYmxhemUncyBwcmUtd3JpdGUgY29tcGFyaXNvbiBzdGF5cywgYmVjYXVzZSBiMiBoYXMgbm8gc2VydmVyIG9mIG91cnMgZW5mb3JjaW5nIG9ubHktdGFrZS10aGUtbGF0ZXN0IC0gd2l0aG91dCBpdCBhIHN0YWxlIHB1c2ggbGFuZHMgb3ZlciBhIG5ld2VyIHZhbHVlIG9yIHRvbWJzdG9uZSBhbmQgYjIncyBzZWxmLXN0YW1wZWQgdXBsb2FkIHRpbWUgbGF1bmRlcnMgaXQgaW50byB0aGUgbmV3ZXN0IGNvcHkgaW4gdGhlIHN5c3RlbSAoZ2xvYmFsIHJlc3VycmVjdGlvbikuIEhvc3RlZCB0YXJnZXRzIHJlLWNoZWNrIHNlcnZlci1zaWRlLCBzbyB0aGVpciBjbGllbnQtc2lkZSBzaG9ydGN1dHMgYXJlIHNhZmUuICovXG4gICAgbm9DaGVja3M/OiBib29sZWFuO1xuICAgIC8qKiBTdG9yZS10by1zdG9yZSBwdXNoOiB0aGUgcmVjZWl2aW5nIG5vZGUgd3JpdGVzIHB1cmVseSB0byBpdHMgb3duIGRpc2sgYW5kIGluZGV4LCB3aXRoIE5PIGRvd25zdHJlYW0gZmFuLW91dCAodGhlIHB1c2hpbmcgc3RvcmUgb3ducyBwcm9wYWdhdGlvbiAtIGZhbm5pbmcgaXRzIHB1c2hlcyBiYWNrIG91dCBpcyBob3cgd3JpdGUgbG9vcHMgYmV0d2VlbiBzdG9yZXMgZm9ybSkuIFdpbmRvdyBhbmQgcm91dGUgQVJFIHN0aWxsIGNoZWNrZWQ6IHRoZSBzdGFtcCBtdXN0IGZhbGwgaW5zaWRlIG9uZSBvZiB0aGUgcmVjZWl2ZXIncyBjb25maWd1cmVkIHdpbmRvd3MgYW5kIHJvdXRlcywgc28gYSBjb25mdXNlZCBwZWVyIGNhbm5vdCBzdHVmZiBkYXRhIG9udG8gYSBub2RlIHRoYXQgd2FzIG5ldmVyIG1lYW50IHRvIGhvbGQgaXQuIFJlcXVpcmVzIGxhc3RNb2RpZmllZC4gKi9cbiAgICBpbnRlcm5hbD86IGJvb2xlYW47XG4gICAgLyoqIFdyaXRlcyBub3JtYWxseSBnbyBPTkxZIHRvIHRoZSB3cml0ZSBub2RlICh0aGUgZmlyc3QgY3VycmVudC13aW5kb3cgc291cmNlIGNvdmVyaW5nIHRoZSBrZXkpLCByZXRyeWluZyBpdCBldmVuIHdoaWxlIGl0IGlzIGRvd24gLSBjb25zaXN0ZW50LCBidXQgdW5hdmFpbGFibGUgd2hlbiB0aGF0IG5vZGUgaXMuIFdpdGggZmFsbGJhY2tzLCB0aGUgd3JpdGUgbm9kZSBpcyBzdGlsbCB0cmllZCBmaXJzdCwgYnV0IG9uIGZhaWx1cmUgdGhlIHdyaXRlIGxhbmRzIG9uIHRoZSBuZXh0IGN1cnJlbnQtd2luZG93IHNvdXJjZSBjb3ZlcmluZyB0aGUga2V5IChzeW5jaHJvbml6YXRpb24gbW92ZXMgaXQgdG8gdGhlIHdyaXRlIG5vZGUgbGF0ZXIpIC0gYXZhaWxhYmlsaXR5IGF0IHRoZSBjb3N0IG9mIHJlYWRzIHBvc3NpYmx5IG1pc3NpbmcgdGhlIHdyaXRlIHVudGlsIGl0IHByb3BhZ2F0ZXMuIFNpbmdsZS1zb3VyY2UgYXJjaGl2ZXMgaWdub3JlIHRoZSBmbGFnLiAqL1xuICAgIGZhbGxiYWNrcz86IGJvb2xlYW47XG4gICAgLyoqIFNlZSBHZXRDb25maWcucmV0cmllcy4gKi9cbiAgICByZXRyaWVzPzogbnVtYmVyO1xuICAgIC8qKiBUaGUgc2V0IGlzIG5vdCBhIHdyaXRlIGF0IGFsbDogaXQgUkVTVE9SRVMgYSBmaWxlIG1hcmtlZCBmb3IgZGVsZXRpb24sIGZsaXBwaW5nIGl0cyBpbmRleCBlbnRyeSBiYWNrIHRvIGxpdmUgKHdpdGggYSBmcmVzaCB3cml0ZSB0aW1lLCBzbyB0aGUgcmVzdG9yZSBvdXRyYW5rcyB0aGUgZGVsZXRpb24gZXZlcnl3aGVyZSBpdCBwcm9wYWdhdGVkKSAtIHRoZSBieXRlcyBuZXZlciBsZWZ0IHRoZSBkaXNrLCBzbyByZWFkcyBqdXN0IHdvcmsgYWdhaW4uIFRoZSBkYXRhIGJ1ZmZlciBpcyBpZ25vcmVkIChhIDEtYnl0ZSBwbGFjZWhvbGRlciBzYXRpc2ZpZXMgdGhlIGVtcHR5LWJ1ZmZlciBydWxlKTsgdXNlIElBcmNoaXZlcy51bmRlbGV0ZSByYXRoZXIgdGhhbiBwYXNzaW5nIHRoaXMgeW91cnNlbGYuIFRocm93cyB3aGVuIHRoZSBrZXkgaGFzIG5vIG1hcmtlZCBkZWxldGlvbiB0byByZXN0b3JlIChpdHMgaGlzdG9yeSB3YXMgZHJvcHBlZCwgb3IgaXQgd2FzIG5ldmVyIGRlbGV0ZWQpLiAqL1xuICAgIHVuZGVsZXRlPzogYm9vbGVhbjtcbn07XG5cbi8qKiBzZXRMYXJnZUZpbGUncyBjb25maWc6IGEgU2V0Q29uZmlnIChpdCBJUyBhIHNldCAtIHRoZSBzYW1lIGltbXV0YWJpbGl0eSwgb3JkZXJpbmcsIGludGVybmFsLCBhbmQgZmFsbGJhY2tzIHJ1bGVzIGFwcGx5KSBwbHVzIHRoZSBzdHJlYW0gY2FycnlpbmcgdGhlIGJ5dGVzLiAqL1xuZXhwb3J0IHR5cGUgU2V0TGFyZ2VGaWxlQ29uZmlnID0gU2V0Q29uZmlnICYge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBnZXROZXh0RGF0YSgpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD47XG4gICAgLyoqIFJld2luZHMgdGhlIHN0cmVhbSB0byBpdHMgZmlyc3QgYnl0ZS4gV2l0aG91dCBpdCB0aGUgd3JpdGUgZ2V0cyBleGFjdGx5IE9ORSBhdHRlbXB0OiBhIHJldHJ5IChhIGZhbGxiYWNrIHNvdXJjZSwgb3IgdGhlIHdyaXRlIG5vZGUgY29taW5nIGJhY2spIHdvdWxkIHVwbG9hZCB3aGF0ZXZlciBpcyBsZWZ0IG9mIGFuIGFscmVhZHktY29uc3VtZWQgc3RyZWFtIGFzIGlmIGl0IHdlcmUgdGhlIHdob2xlIGZpbGUuIENhbGxlcnMgaG9sZGluZyB0aGUgZGF0YSAoYSBidWZmZXIsIG9yIGEgc291cmNlIHRoZXkgY2FuIHJlLXJlYWQpIGFsd2F5cyBwYXNzIGl0IC0gYSBsYXJnZSBzZXQgd2l0aCBmYWxsYmFja3MgaXMgb25seSBhcyBhdmFpbGFibGUgYXMgdGhpcy4gKi9cbiAgICByZXN0YXJ0U3RyZWFtPygpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn07XG5cbi8vIGNyZWF0ZVRpbWUgaXMgYSBtaXNub21lciBrZXB0IGZvciBjb21wYXRpYmlsaXR5IOKAlCBpdCBpcyByZWFsbHkgdGhlIExBU1QtV1JJVEUgdGltZSwgc2FtZSBhcyBnZXRJbmZvJ3Mgd3JpdGVUaW1lLiBOZWl0aGVyIEJhY2tibGF6ZSBub3Igb3VyIHJlbW90ZSBzdG9yYWdlIHRyYWNrcyBhIGRpc3RpbmN0IGNyZWF0aW9uIGRhdGU6IGVhY2ggd3JpdGUgc3RhbXBzIGEgZnJlc2ggdGltZXN0YW1wIG9uIHRoZSBjdXJyZW50IHZlcnNpb24sIHNvIGJvdGggZmllbGRzIGFyZSBqdXN0IFwid2hlbiB0aGUgYnl0ZXMgc2VydmVkIGJ5IGdldCgpIHdlcmUgbW9zdCByZWNlbnRseSB3cml0dGVuXCIuXG5leHBvcnQgdHlwZSBBcmNoaXZlRmlsZUluZm8gPSB7IHBhdGg6IHN0cmluZzsgY3JlYXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfTtcblxuLy8gQW4gaW4tcHJvZ3Jlc3MgYmFja2dyb3VuZCBzeW5jaHJvbml6YXRpb24gdGFzayAoc2VlIEFyY2hpdmVzQ29uZmlnLnN5bmNpbmcpXG5leHBvcnQgdHlwZSBTeW5jQWN0aXZpdHkgPSB7XG4gICAgLy8gQSBtZXRhZGF0YSBzY2FuIGlzIGEgc2luZ2xlIGxpc3RpbmcgY2FsbCwgc28gaXQgaGFzIG5vIGluY3JlbWVudGFsIHByb2dyZXNzIC0ganVzdCB0aGF0IGl0J3MgcnVubmluZyBhbmQgc2luY2Ugd2hlbi4gQSBmdWxsIHN5bmMga25vd3MgaXRzIGV4YWN0IGZpbGUvYnl0ZSBwcm9ncmVzcy5cbiAgICB0eXBlOiBcIm1ldGFkYXRhU2NhblwiIHwgXCJmdWxsU3luY1wiO1xuICAgIHNvdXJjZURlYnVnTmFtZTogc3RyaW5nO1xuICAgIHN0YXJ0VGltZTogbnVtYmVyO1xuICAgIGRvbmVGaWxlcz86IG51bWJlcjtcbiAgICB0b3RhbEZpbGVzPzogbnVtYmVyO1xuICAgIGRvbmVCeXRlcz86IG51bWJlcjtcbiAgICB0b3RhbEJ5dGVzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQXJjaGl2ZXNDb25maWcgPSB7XG4gICAgLy8gV2hldGhlciBnZXRDaGFuZ2VzQWZ0ZXIyIGlzIG5hdGl2ZWx5IGluZGV4LWJhY2tlZCAoZmFzdCBjaGFuZ2UgcG9sbGluZzsgZXZlcnkgYmFja2VuZCBzdGlsbCBzZXJ2ZXMgaXQsIGJ1dCB0aGUgb3RoZXJzIGVtdWxhdGUgaXQgd2l0aCBhIGZ1bGwgbGlzdGluZylcbiAgICBzdXBwb3J0c0NoYW5nZXNBZnRlcj86IGJvb2xlYW47XG4gICAgLy8gVGhlIGJ1Y2tldCdzIGZ1bGwgcm91dGluZyBjb25maWcgKFJPVVRJTkdfRklMRSkuIEFic2VudCBmb3Igc291cmNlcyB0aGF0IGRvbid0IGhhdmUgb25lIChhIGJhcmUgZGlzayBzb3VyY2UsIG9yIGEgYnVja2V0IHRoYXQgZG9lc24ndCBleGlzdCB5ZXQpLlxuICAgIHJlbW90ZUNvbmZpZz86IFJlbW90ZUNvbmZpZztcbiAgICAvLyBMaXZlIGluZGV4IHRvdGFscyAodG9tYnN0b25lcyBleGNsdWRlZCksIGtlcHQgdXAgdG8gZGF0ZSBpbiBtZW1vcnkgb24gZXZlcnkgbXV0YXRpb24gYW5kIHJlY29tcHV0ZWQgb24gbG9hZCAtIHNvIGFueSBkcmlmdCBoZWFscyBvbiByZXN0YXJ0XG4gICAgaW5kZXg/OiB7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlciB9O1xuICAgIC8qKiBGaWxlcyBNQVJLRUQgZm9yIGRlbGV0aW9uIChkZWxldGVkLCBieXRlcyBzdGlsbCBrZXB0IGFzIGhpc3RvcnkgLSBzZWUgU2V0Q29uZmlnLnVuZGVsZXRlKTogaG93IG1hbnksIGhvdyBiaWcsIGFuZCB0aGUgZGVsZXRlIHRpbWUgb2YgdGhlIG9sZGVzdCBvbmUgLSB3aGljaCBpcyBob3cgZmFyIGJhY2sgdGhlIGRlbGV0aW9uIGhpc3RvcnkgcmVhY2hlcy4gKi9cbiAgICBtYXJrZWRJbmRleD86IHsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyOyBvbGRlc3REZWxldGVUaW1lPzogbnVtYmVyIH07XG4gICAgLy8gVGhlIHNhbWUgdG90YWxzIGJyb2tlbiBkb3duIGJ5IHdoaWNoIHNvdXJjZSBjdXJyZW50bHkgaG9sZHMgZWFjaCBmaWxlJ3MgYnl0ZXMgKHRoZSBmaXJzdCBlbnRyeSBpcyB0aGUgc2VydmVyJ3Mgb3duIGRpc2spXG4gICAgaW5kZXhTb3VyY2VzPzogeyBkZWJ1Z05hbWU6IHN0cmluZzsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyIH1bXTtcbiAgICAvLyBUaGUgc2VydmVyJ3MgY29uZmlndXJlZCByZWFkZXJEaXNrTGltaXQsIHdoZW4gaXQgcnVucyBhcyBhIGJvdW5kZWQgcmVhZCBjYWNoZVxuICAgIHJlYWRlckRpc2tMaW1pdD86IG51bWJlcjtcbiAgICAvLyBCYWNrZ3JvdW5kIHN5bmNocm9uaXphdGlvbiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKGVtcHR5IHdoZW4gaWRsZSlcbiAgICBzeW5jaW5nPzogU3luY0FjdGl2aXR5W107XG59O1xuXG4vLyBBIHN5bmNocm9uaXphdGlvbiBzb3VyY2Ugb2YgYSBCbG9iU3RvcmUgKHdoaWNoIHN5bmNocm9uaXplcyBhbiBpbmRleCArIGxvY2FsIGNhY2hlIGZyb20gdGhlbSlcbmV4cG9ydCB0eXBlIEFyY2hpdmVzU291cmNlID0ge1xuICAgIHNvdXJjZTogSUFyY2hpdmVzO1xuICAgIC8qKiBUaGUgcGVyc2lzdGVudCBpZGVudGl0eSBvZiB0aGUgZW5kcG9pbnQ6IGl0cyByb3V0aW5nIFVSTCAoaG9zdGVkL2JhY2tibGF6ZSksIG9yIHRoZSBkaXNrIGZvbGRlciBwYXRoIGZvciB0aGUgYmFzZSBkaXNrIHNvdXJjZS4gVGhlIHN0b3JlIHBlcnNpc3RzIHRoaXMgKHZpYSBpdHMgYXBwZW5kLW9ubHkgc291cmNlcyBsaXN0KSBhcyBJbmRleEVudHJ5LnNvdXJjZXNMaXN0SW5kZXgsIHNvIGl0IG11c3QgbWVhbiB0aGUgc2FtZSBlbmRwb2ludCBmb3JldmVyLiAqL1xuICAgIHVybDogc3RyaW5nO1xuICAgIC8vIEZyb20gdGhlIHNvdXJjZSdzIENvbW1vbkNvbmZpZywgYnV0IEFMTCBvZiB0aGVtOiB0aGUgc2FtZSBlbmRwb2ludCAoc2FtZSB1cmwrcm91dGUsIGlnbm9yaW5nIHRoZSB3aW5kb3cpIGNhbiBhcHBlYXIgaW4gdGhlIHJvdXRpbmcgY29uZmlnIHVuZGVyIHNldmVyYWwgd2luZG93cyBhdCBvbmNlIC0gbW9zdCBjb21tb25seSB3aGVuIGEgZGVwbG95IHN3aXRjaG92ZXIgaGFzIHNwbGl0IG9uZSB3aW5kb3cgaW4gdHdvIGFyb3VuZCBhbiBpbnRlcm1lZGlhdGUuIEl0IGlzIE9ORSBzb3VyY2UgdGhhdCBrbm93cyBhbGwgaXRzIHdpbmRvd3MsIG5ldmVyIHNldmVyYWwgc291cmNlcy4gVGhlIHdpbmRvdyByb3V0ZXMgV1JJVEVTOiB0aGUgc291cmNlIHJlY2VpdmVzIHdyaXRlcyB3aGlsZSBBTlkgb2YgaXRzIHdpbmRvd3MgaXMgc3RpbGwgb3BlbiAoc2VlIHdpbmRvd3NBY2NlcHRXcml0ZXMpLiBXaW5kb3dzIGRvIE5PVCBmaWx0ZXIgc2Nhbm5pbmc6IGEgc2NhbiBpcyB1cyBhc2tpbmcgdGhlIHNvdXJjZSB3aGF0IGl0IGFscmVhZHkgaG9sZHMsIGFuZCBleGlzdGluZyB2YWx1ZXMgc3luY2hyb25pemUgcmVnYXJkbGVzcyBvZiB0aGVpciB3cml0ZSB0aW1lcyAodGhlIHNhbWUgcmVhc29uaW5nIHRoYXQgbGV0cyBzeW5jaHJvbml6YXRpb24gaWdub3JlIHRoZSBpbW11dGFibGUgZmxhZykuXG4gICAgdmFsaWRXaW5kb3dzOiBbbnVtYmVyLCBudW1iZXJdW107XG4gICAgLy8gRnJvbSB0aGUgc291cmNlJ3MgQ29tbW9uQ29uZmlnIChpbnRlcnNlY3RlZCB3aXRoIHRoZSBvd25pbmcgc3RvcmUncyBvd24gcm91dGUpOiBvbmx5IGtleXMgcm91dGluZyBpbnRvIFtzdGFydCwgZW5kKSBhcmUgYWNjZXB0ZWQgZnJvbSB0aGlzIHNvdXJjZSdzIHNjYW5zIGFuZCBzZW50IHRvIGl0IGluIHdyaXRlcy9yZWNvbmNpbGlhdGlvbi4gVGhlIHJvdXRpbmcgZmlsZSBpcyBleGVtcHQgLSBjb25maWcgZmxvd3MgZXZlcnl3aGVyZS4gQWJzZW50ID0gYWxsIGtleXMuXG4gICAgcm91dGU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIC8vIEZyb20gdGhlIHNvdXJjZSdzIENvbW1vbkNvbmZpZzsgc2VlIHRoZXJlLlxuICAgIG5vRnVsbFN5bmM/OiBib29sZWFuO1xuICAgIC8vIEZyb20gdGhlIHNvdXJjZSdzIENvbW1vbkNvbmZpZzogYSBkZXBsb3kgc3dpdGNob3ZlcidzIHRlbXBvcmFyeSBhbHRlcm5hdGUtcG9ydCBlbnRyeSAodGhlIHZhbHVlIGlzIHRoZSB1cmwgb2YgdGhlIHNvdXJjZSBpdCB3YXMgc3BsaXQgb3V0IG9mKS4gT25jZSBpdHMgd2luZG93IGlzIHBhc3QsIHRoZSBwb3J0IGl0IHBvaW50cyBhdCBpcyBnb25lIGZvciBnb29kIC0gc28gaXQgaXMgbmV2ZXIgc2Nhbm5lZCB0aGVuLCBhbmQgc2NhbiBmYWlsdXJlcyBhcmUgbmV2ZXIgcmV0cmllZC5cbiAgICBpbnRlcm1lZGlhdGU/OiBzdHJpbmc7XG4gICAgLy8gVGhlIHJvdXRpbmctY29uZmlnIGVudHJ5IHRoaXMgc291cmNlIHdhcyBidWlsdCBmcm9tIChhYnNlbnQgZm9yIHRoZSBiYXNlIGRpc2sgc291cmNlKS4gSXRzIGB0eXBlYCBkZWNpZGVzIGZhc3Qtd3JpdGUgZmx1c2ggdGltaW5nOiB0eXBlLVwicmVtb3RlXCIgZG93bnN0cmVhbSBzb3VyY2VzIChvdXIgb3duIHN0b3JhZ2Ugc2VydmVycykgZmx1c2ggcXVpY2tseSAoY2hlYXAsIGFuZCB3ZSB3YW50IGNyb3NzLW5vZGUgcmVkdW5kYW5jeSBmYXN0KSwgd2hpbGUgb3RoZXJzIChlLmcuIGJhY2tibGF6ZSkga2VlcCB0aGUgZnVsbCB3cml0ZURlbGF5IHNvIGV4cGVuc2l2ZSBleHRlcm5hbCB3cml0ZXMgc3RheSBjb2FsZXNjZWQuIFRoZSB3aW5kb3cvcm91dGUgT04gdGhpcyBjb25maWcgYXJlIHRoZSBTT1VSQ0UncyBvd247IEFyY2hpdmVzU291cmNlLnZhbGlkV2luZG93L3JvdXRlIGFyZSB3aGF0IHRoZSBvd25pbmcgc3RvcmUgYWN0dWFsbHkgdXNlcyAocm91dGUgaXMgaW50ZXJzZWN0ZWQgd2l0aCB0aGUgc3RvcmUncyByb3V0ZSkuXG4gICAgc291cmNlQ29uZmlnPzogU291cmNlQ29uZmlnO1xuICAgIC8vIFN0YWJsZSBpZGVudGl0eSBvZiB0aGUgdW5kZXJseWluZyBlbmRwb2ludCAoaXRzIGNvbmZpZyB3aXRoIHdpbmRvd3Mvcm91dGVzIHN0cmlwcGVkKSAtIGhvdyBCbG9iU3RvcmUudXBkYXRlU291cmNlcyByZWNvZ25pemVzIGEgc291cmNlIGFjcm9zcyBjb25maWcgY2hhbmdlcyBzbyBpdCBjYW4gdXBkYXRlIGl0IGluIHBsYWNlIGluc3RlYWQgb2YgcmVtb3ZpbmcgYW5kIHJlLWFkZGluZyBpdFxuICAgIGlkZW50aXR5Pzogc3RyaW5nO1xufTtcblxuLy8gRXJyb3IgbWFya2VyIGEgc2VydmVyIGluY2x1ZGVzIHdoZW4gYSBmcmVzaGx5LXN0YW1wZWQgd3JpdGUgcmVhY2hlcyBpdCBvdXRzaWRlIGl0cyB2YWxpZCB3aW5kb3dzICh0aGUgY2xpZW50IHJlc29sdmVkIGl0cyB0YXJnZXQsIHRoZW4gdGltZSBjcm9zc2VkIGEgd2luZG93IGJvdW5kYXJ5IGJlZm9yZSB0aGUgd3JpdGUgbGFuZGVkKS4gQ2xpZW50cyBkZXRlY3QgdGhpcyBtYXJrZXIgYW5kIHJlLXJlc29sdmUgdGhlIGN1cnJlbnRseS12YWxpZCBzb3VyY2UsIHJldHJ5aW5nIE9OQ0UgLSBib3VuZGFyaWVzIGFyZSBmYXIgYXBhcnQsIHNvIGhpdHRpbmcgaXQgdHdpY2UgaW4gb25lIGF0dGVtcHQgbWVhbnMgc29tZXRoaW5nIGlzIGFjdHVhbGx5IHdyb25nLlxuZXhwb3J0IGNvbnN0IFNUT1JBR0VfV1JPTkdfVkFMSURfV0lORE9XID0gXCJSRU1PVEVfU1RPUkFHRV9XUk9OR19WQUxJRF9XSU5ET1dfYTdjMWYwNGVcIjtcblxuLy8gRXJyb3IgbWFya2VyIGEgc2VydmVyIGluY2x1ZGVzIHdoZW4gYSBmcmVzaGx5LXN0YW1wZWQgd3JpdGUncyBrZXkgcm91dGVzIG91dHNpZGUgdGhlIHNoYXJkcyB0aGlzIHNlcnZlciBoYW5kbGVzICh0aGUgY2xpZW50J3MgY29uZmlnIGRpc2FncmVlcyB3aXRoIHRoZSBzZXJ2ZXIncyAtIGNsaWVudHMgcmUtcmVzb2x2ZSBvbmNlKVxuZXhwb3J0IGNvbnN0IFNUT1JBR0VfV1JPTkdfUk9VVEUgPSBcIlJFTU9URV9TVE9SQUdFX1dST05HX1JPVVRFX2M5NGQyZTE3XCI7XG5cbi8vIEVycm9yIG1hcmtlciBhIHNlcnZlciBpbmNsdWRlcyB3aGVuIGEgd3JpdGUgcmVhY2hlcyBhIHN0b3JlIHdob3NlIG93biByb3V0aW5nIGNvbmZpZyBoYXMgTk8gZW50cnkgZm9yIGl0IG9uIHRoYXQgc2VydmVyIChvciB0aGF0IGhhcyBubyByb3V0aW5nIGNvbmZpZyBhdCBhbGwpIC0gYWNjZXB0aW5nIHRoZSB3cml0ZSB3b3VsZCBzdG9yZSBkYXRhIG5vdGhpbmcgc2NhbnMgb3IgcmVjb25jaWxlcy4gQ2xpZW50cyByZS1yZXNvbHZlIG9uY2UsIGV4YWN0bHkgbGlrZSB0aGUgbWFya2VycyBhYm92ZTogdGhlIHVzdWFsIGNhdXNlIGlzIHRoZSBjbGllbnQgcnVubmluZyBhIGRpZmZlcmVudCBjb25maWcgdGhhbiB0aGUgc3RvcmUuXG5leHBvcnQgY29uc3QgU1RPUkFHRV9OT1RfQ09ORklHVVJFRCA9IFwiUkVNT1RFX1NUT1JBR0VfTk9UX0NPTkZJR1VSRURfZTUxYjdkOTJcIjtcblxuZXhwb3J0IGNvbnN0IEZVTExfUk9VVEU6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMV07XG5cbi8vIEEga2V5IGNvbnRhaW5pbmcgdGhpcyBzZW50aW5lbCBkb2Vzbid0IGhhdmUgYSBmaXhlZCBzaGFyZDogc2V0VmFyaWFibGVTaGFyZCBwaWNrcyB0aGUgKGxvd2VzdCBsYXRlbmN5LCB1cCkgd3JpdGUgc2hhcmQsIGFwcGVuZHMgXCJfPHZhbHVlIGluIHRoZSBzaGFyZCdzIHJvdXRlPlwiIGRpcmVjdGx5IGFmdGVyIHRoZSBzZW50aW5lbCwgYW5kIHJldHVybnMgdGhlIG1hdGVyaWFsaXplZCBrZXkuIGdldFJvdXRlIHRyZWF0cyB0aGF0IHN1ZmZpeCBhcyBhIGNvbXBsZXRlIHJvdXRlIG92ZXJyaWRlLlxuZXhwb3J0IGNvbnN0IFZBUklBQkxFX1NIQVJEID0gXCJWQVJJQUJMRV9TSEFSRF9mMDIzNGpmYWgwOGZneWhmZ3lzc2Rkczgzbm1wXCI7XG4vLyBObyBncmFjZSBwYXN0IHRoZSBlbmQ6IGEgd2luZG93IGJvdW5kYXJ5IGlzIGEgaGFyZCBoYW5kb2ZmIChjbGllbnRzIHJldHJ5IGEgcmVqZWN0ZWQgd3JpdGUgYWdhaW5zdCB0aGUgbmV3bHktdmFsaWQgc291cmNlLCBzbyBsZW5pZW5jeSBoZXJlIHdvdWxkIG9ubHkgZGVzeW5jaHJvbml6ZSB0aGUgaGFuZG9mZilcbi8vICAtIFdyaXRpbmcgdG8gb2xkZXIgdmFsaWQgc3RhdGUgd2luZG93cyBpcyBmaW5lLCB0aG91Z2guIFdlIG5lZWQgdGhpcyB0byBpbmdlc3QgdGhlIG9sZCBkYXRhIHdoZW4gd2UncmUgc3luY2hyb25pemluZyBub2RlcyB0byBnZXQgdGhlbSB1cCB0byBkYXRlIGFueXdheS4gXG5leHBvcnQgZnVuY3Rpb24gd2luZG93QWNjZXB0c1dyaXRlcyh2YWxpZFdpbmRvdzogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsaWRXaW5kb3cpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB2YWxpZFdpbmRvd1sxXSA+IERhdGUubm93KCk7XG59XG4vLyBBIHNvdXJjZSAod2hpY2ggY2FuIGhvbGQgc2V2ZXJhbCB3aW5kb3dzKSBhY2NlcHRzIHdyaXRlcyB3aGlsZSBBTlkgb2YgaXRzIHdpbmRvd3MgaXMgc3RpbGwgb3Blbi4gTm8gd2luZG93cyA9IHRoZSBiYXNlIGRpc2sgb2YgYW4gaW5lcnQgc3RvcmUgKG5vdCBpbiB0aGUgY29uZmlnKSwgd2hpY2ggbmV2ZXIgcmVjZWl2ZXMgZmFuLW91dCB3cml0ZXMgYW55d2F5LlxuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd3NBY2NlcHRXcml0ZXModmFsaWRXaW5kb3dzOiBbbnVtYmVyLCBudW1iZXJdW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsaWRXaW5kb3dzLnNvbWUod2luZG93QWNjZXB0c1dyaXRlcyk7XG59XG5cbi8vIEFib3ZlIHRoaXMsIHNldCB0cmFuc3BhcmVudGx5IHN0cmVhbXMgdGhyb3VnaCBzZXRMYXJnZUZpbGU6IG9uZSBnaWFudCB3aXJlIG1lc3NhZ2Ugd291bGQgZXhjZWVkIHRoZSB0cmFuc3BvcnQgbGltaXQgYW5kIGxhZyBldmVyeSBvdGhlciBjbGllbnQgc2hhcmluZyB0aGUgY29ubmVjdGlvblxuZXhwb3J0IGNvbnN0IExBUkdFX1NFVF9USFJFU0hPTEQgPSA4ICogMTAyNCAqIDEwMjQ7XG5cbi8qKiBUaGUgc2V0TGFyZ2VGaWxlIHN0cmVhbSBvdmVyIGFuIGluLW1lbW9yeSBidWZmZXIsIGluIExBUkdFX1NFVF9USFJFU0hPTEQgc2xpY2VzIC0gaG93IHNldCB0cmFuc3BhcmVudGx5IGJlY29tZXMgc2V0TGFyZ2VGaWxlIGZvciBsYXJnZSBidWZmZXJzLiBTcHJlYWQgaW50byB0aGUgY29uZmlnOiBpdCBwcm92aWRlcyBib3RoIGdldE5leHREYXRhIGFuZCByZXN0YXJ0U3RyZWFtICh0aGUgYnVmZmVyIGlzIHN0aWxsIGhlbGQsIHNvIGEgcmV0cnkgY29zdHMgbm90aGluZykuICovXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyQ2h1bmtTdHJlYW0oZGF0YTogQnVmZmVyKTogeyBnZXROZXh0RGF0YSgpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD47IHJlc3RhcnRTdHJlYW0oKTogdm9pZCB9IHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXROZXh0RGF0YTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBkYXRhLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBjaHVuayA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBMQVJHRV9TRVRfVEhSRVNIT0xEKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gY2h1bms7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc3RhcnRTdHJlYW06ICgpID0+IHtcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLy8gUmUtZXhwb3J0ZWQgZm9yIHRoZSBleGlzdGluZyBpbXBvcnRlcnMgLSB0aGUgaW1wbGVtZW50YXRpb25zIChhbmQgbW92ZUFyY2hpdmVGaWxlKSBsaXZlIGluIGFyY2hpdmVIZWxwZXJzLnRzLCBiZXNpZGUgdGhpcyBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gaW4gaXRcbmV4cG9ydCB7IGNvcHlBcmNoaXZlRmlsZSB9IGZyb20gXCIuL2FyY2hpdmVIZWxwZXJzXCI7XG5cbi8qKiBtb3ZlJ3MgY29uZmlnLiBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gbGFzdE1vZGlmaWVkOiB0aGUgZGVzdGluYXRpb24gaXMgQUxXQVlTIHN0YW1wZWQgZnJlc2ggKHNlZSBJQXJjaGl2ZXMubW92ZSkgLSBhIG1vdmUgaXMgYSBuZXcgd3JpdGUgYXQgdGhlIG5ldyBwYXRoLCBhbmQgYSBwcmVzZXJ2ZWQgb2xkIHN0YW1wIGlzIGhvdyBhIG1vdmVkIGZpbGUgbG9zZXMgdG8gYSBzdGFsZSB0b21ic3RvbmUgdGhlcmUgYW5kIHZhbmlzaGVzLiAqL1xuZXhwb3J0IHR5cGUgTW92ZUZpbGVDb25maWcgPSB7XG4gICAgZnJvbVBhdGg6IHN0cmluZztcbiAgICB0b1BhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFyY2hpdmVzU3luY1NvdXJjZVN0YXR1cyA9IHtcbiAgICBkZWJ1Z05hbWU6IHN0cmluZztcbiAgICB2YWxpZFdpbmRvd3M6IFtudW1iZXIsIG51bWJlcl1bXTtcbiAgICByb3V0ZT86IFtudW1iZXIsIG51bWJlcl07XG4gICAgbm9GdWxsU3luYz86IGJvb2xlYW47XG4gICAgc3VwcG9ydHNDaGFuZ2VzQWZ0ZXI6IGJvb2xlYW47XG4gICAgaW5pdGlhbFNjYW5Db21wbGV0ZTogYm9vbGVhbjtcbiAgICAvLyBGaWxlcyBzZWVuIGluIHRoaXMgc291cmNlJ3Mgc2NhbnMgLyBjaGFuZ2UgcG9sbHMgc28gZmFyXG4gICAgc2Nhbm5lZENvdW50OiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgQXJjaGl2ZXNTeW5jU3RhdHVzID0ge1xuICAgIGFsbFNjYW5zQ29tcGxldGU6IGJvb2xlYW47XG4gICAgLy8gTnVtYmVyIG9mIGZpbGVzIGluIHRoZSBpbmRleFxuICAgIGluZGV4U2l6ZTogbnVtYmVyO1xuICAgIHNvdXJjZXM6IEFyY2hpdmVzU3luY1NvdXJjZVN0YXR1c1tdO1xufTtcblxuLy8gTk9URTogV2UgZG9uJ3QgcHJlc2VudGx5IGhhdmUgYW4gYXBwZW5kIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBhIHN1cnByaXNpbmcgbnVtYmVyIG9mIHN0b3JhZ2Ugc3lzdGVtcyBkb24ndCBzdXBwb3J0IGl0IChiYWNrYmxhemUsIGZpbGUgc3lzdGVtIGFwaSkuIEl0IHdvdWxkIGFsc28gY29tcGxpY2F0ZSB0aGluZ3MgYXMgbm93IHRoZXJlIG5lZWRzIHRvIGJlIHJlYWxseSBhIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggb2YgYSBmaWxlLCBhbmQgaWYgeW91IGFwcGVuZCB0byB0aGUgd3Jvbmcgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCwgdGhpbmdzIGp1c3QgYmVjb21lIHZlcnkgY29tcGxpY2F0ZWQuIFxuZXhwb3J0IGludGVyZmFjZSBJQXJjaGl2ZXMge1xuICAgIGdldERlYnVnTmFtZSgpOiBzdHJpbmc7XG4gICAgLyoqIFdoZXRoZXIgd3JpdGVzIHdvdWxkIGJlIGFjY2VwdGVkIChjcmVkZW50aWFscyBleGlzdCwgdGhlIGFjY291bnQgdHJ1c3RzIHRoaXMgbWFjaGluZSwgZXRjKS4gQ2hlY2tlZCB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmcuICovXG4gICAgaGFzV3JpdGVBY2Nlc3MoKTogUHJvbWlzZTxib29sZWFuPjtcbiAgICAvKipcbiAgICAgKiBSZWFkcyBhdXRvbWF0aWNhbGx5IGZhbGwgYmFjayBhY3Jvc3MgdGhlIHJlZHVuZGFudCBzb3VyY2VzIHVubGVzcyBjb25maWcubm9GYWxsYmFja3MgaXMgc2V0LlxuICAgICAqIEEgZmFsbGJhY2sgY29weSBjYW4gbGFnIHRoZSB3cml0ZSB0YXJnZXQsIHNvIGEgY2FsbGVyIHJlYWRpbmcgc3RhdGUgaW4gb3JkZXIgdG8gbXV0YXRlIGl0XG4gICAgICogKGUuZy4geCsrKSwgd2hlcmUgYWN0aW5nIG9uIHByZXZpb3VzIHN0YXRlIHdvdWxkIGNhdXNlIGJpZyBpc3N1ZXMsIHNob3VsZCBwYXNzIG5vRmFsbGJhY2tzIC1cbiAgICAgKiBhbmQgdHJ5L2NhdGNoIHRoZSByZWFkLCBoYW5kbGluZyB0aGUgY2F0Y2ggY2FzZSAoYSBkb3duIHByaW1hcnkgaXMgcmV0cmllZCBmb3IgYSB3aGlsZSwgdGhlblxuICAgICAqIHRocm93cyBpbnN0ZWFkIG9mIGRlZ3JhZGluZyB0byBhIHN0YWxlIGNvcHkpLlxuICAgICAqL1xuICAgIGdldChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBHZXRDb25maWcpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD47XG4gICAgLyoqIFNlZSBnZXQgZm9yIHRoZSBmYWxsYmFjayBzZW1hbnRpY3MgKGFuZCB3aGVuIHRvIHBhc3Mgbm9GYWxsYmFja3MpLiB1cmwgaXMgdGhlIGNvbmZpZyBVUkwgb2YgdGhlIHNvdXJjZSB0aGF0IGFuc3dlcmVkIC0gdGhlIGF1dGhvcml0eSB0aGUgZGF0YSAob3IgdGhlIFwiZG9lcyBub3QgZXhpc3RcIikgY2FtZSBmcm9tLiBNdWx0aS1zb3VyY2UgaW1wbGVtZW50YXRpb25zIChBcmNoaXZlc0NoYWluKSBBTFdBWVMgcmV0dXJuIGFuIG9iamVjdDogd2hlbiB0aGUgdmFsdWUgZG9lc24ndCBleGlzdCB0aGVyZSBpcyBzdGlsbCBhIHNlcnZlciBzYXlpbmcgaXQgZG9lc24ndCBleGlzdCwgc28gdGhleSByZXR1cm4geyB1cmwgfSBhbG9uZSByYXRoZXIgdGhhbiB1bmRlZmluZWQuIFNpbmdsZS1zb3VyY2UgYmFja2VuZHMgcmV0dXJuIHVuZGVmaW5lZCBmb3IgYWJzZW50ICh0aGV5IEFSRSB0aGUgYXV0aG9yaXR5KS4gKi9cbiAgICBnZXQyKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXI7IHVybD86IHN0cmluZyB9IHwgeyBkYXRhPzogdW5kZWZpbmVkOyB3cml0ZVRpbWU/OiB1bmRlZmluZWQ7IHNpemU/OiB1bmRlZmluZWQ7IHVybDogc3RyaW5nIH0gfCB1bmRlZmluZWQ+O1xuICAgIC8qKlxuICAgICAqIGxhc3RNb2RpZmllZCBzdGFtcHMgdGhlIHdyaXRlIHdpdGggdGhhdCBsYXN0LXdyaXRlIHRpbWUgaW5zdGVhZCBvZiBub3cuIElmIGl0IGlzIE9MREVSIHRoYW5cbiAgICAgKiB0aGUgZmlsZSdzIGN1cnJlbnQgbGFzdC13cml0ZSB0aW1lIHRoZSB3cml0ZSBuby1vcHMgKHNvIGRlbGF5ZWQgLyBzeW5jaHJvbml6ZWQgd3JpdGVzIGNhblxuICAgICAqIG5ldmVyIGNsb2JiZXIgbmV3ZXIgZGF0YSkuIFRpbWVzIG1vcmUgdGhhbiAxNSBtaW51dGVzIGluIHRoZSBmdXR1cmUgYXJlIHJlamVjdGVkLlxuICAgICAqXG4gICAgICogUmV0dXJucyB0aGUgZnVsbCBrZXkgYWN0dWFsbHkgd3JpdHRlbiAtIGlkZW50aWNhbCB0byBmaWxlTmFtZSwgRVhDRVBUIGZvciBrZXlzIGNvbnRhaW5pbmdcbiAgICAgKiBWQVJJQUJMRV9TSEFSRCwgd2hlcmUgdGhlIHNoYXJkIHZhbHVlIGlzIG1hdGVyaWFsaXplZCBpbnRvIHRoZSBrZXkgKHBpY2tlZCBieSBzaGFyZCBsYXRlbmN5LFxuICAgICAqIHNlZSBBcmNoaXZlc0NoYWluKSBhbmQgdGhlIGNhbGxlciBuZWVkcyB0aGUgcmV0dXJuZWQga2V5IHRvIGV2ZXIgcmVhZCB0aGUgdmFsdWUgYmFjay5cbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBUSFJPV1Mgb24gYW4gZW1wdHkgYnVmZmVyOiBhbiBlbXB0eSBmaWxlIElTIGEgZGVsZXRpb24gaW4gdGhpcyBzeXN0ZW0gKHRoZSB0b21ic3RvbmUpLCBzbyBhXG4gICAgICogc2V0LWVtcHR5IHdvdWxkIHJlYWQgYmFjayBhcyBcInRoZSBmaWxlIGlzIGdvbmVcIiAtIHdoaWNoIGlzIGp1c3QgYXNraW5nIGZvciBwcm9ibGVtcy4gSWYgeW91XG4gICAgICogd2FudCB0aGUgZmlsZSBkZWxldGVkLCBjYWxsIGRlbDsgZGVsZXRpb25zIHRha2UgdGhlaXIgb3duIHBhdGguXG4gICAgICovXG4gICAgc2V0KGZpbGVOYW1lOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogU2V0Q29uZmlnKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIGRlbChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBEZWxDb25maWcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKiBNb3ZlcyBhIGZpbGUgdG8gYSBuZXcgcGF0aCB3aXRoaW4gVEhJUyBhcmNoaXZlcywgYmFja2VuZC1zaWRlIHdoZXJlIHRoZSBiYWNrZW5kIGNhbiAoYmFja2JsYXplIGNvcGllcyBzZXJ2ZXItc2lkZSwgZGlzayByZW5hbWVzLCB0aGUgc3RvcmFnZSBzZXJ2ZXIgcmVsb2NhdGVzIG5vZGUtc2lkZSkgLSB0aGUgYnl0ZXMgbmV2ZXIgdHJhdmVsIHRocm91Z2ggdGhlIGNhbGxlci4gVGhlIGRlc3RpbmF0aW9uIGlzIHN0YW1wZWQgd2l0aCBhIEZSRVNIIHdyaXRlIHRpbWUsIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBvcGVyYXRpb24gKGEgcmVuYW1lKSB3b3VsZCBwcmVzZXJ2ZSB0aGUgb2xkIG9uZSwgc28gdGhlIG1vdmVkIGZpbGUgY2Fubm90IGltbWVkaWF0ZWx5IGxvc2UgdG8gc29tZXRoaW5nIG5ld2VyIHNpdHRpbmcgYXQgaXRzIG5ldyBwYXRoIChlLmcuIHRoZSB0b21ic3RvbmUgb2YgYW4gZWFybGllciBkZWxldGlvbiB0aGVyZSk7IHRoZSBzb3VyY2UgaXMgdGhlbiBkZWxldGVkLCBleGFjdGx5IGxpa2UgZGVsLiBUSFJPV1Mgd2hlbiB0aGUgc291cmNlIGZpbGUgZG9lcyBub3QgZXhpc3QuIE9wdGlvbmFsIC0gY2FsbGVycyBnbyB0aHJvdWdoIG1vdmVBcmNoaXZlRmlsZSAoYXJjaGl2ZUhlbHBlcnMudHMpLCB3aGljaCBmYWxscyBiYWNrIHRvIGNvcHkgKyBjb25maXJtICsgZGVsZXRlLiAqL1xuICAgIG1vdmU/KGNvbmZpZzogTW92ZUZpbGVDb25maWcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKiBSZXN0b3JlcyBhIGRlbGV0ZWQgZmlsZSB3aG9zZSBieXRlcyBhcmUgc3RpbGwgaW4gdGhlIGRlbGV0aW9uIGhpc3RvcnkgKHNlZSBTZXRDb25maWcudW5kZWxldGUsIHdoaWNoIHRoaXMgcmlkZXMgb24pLiBPbmx5IGluZGV4LWJhY2tlZCBzdG9yZXMga2VlcCBhIGRlbGV0aW9uIGhpc3RvcnksIHNvIG9ubHkgdGhleSBzdXBwb3J0IHRoaXMuIFRIUk9XUyB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVzdG9yZS4gKi9cbiAgICB1bmRlbGV0ZT8oZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIFN0cmVhbXMgYSBmaWxlIHRvbyBsYXJnZSB0byBob2xkIGluIG1lbW9yeS4gZ2V0TmV4dERhdGEgcmV0dXJucyB1bmRlZmluZWQgd2hlbiBkb25lLiBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIHdoZW4geW91IENBTk5PVCBtYXRlcmlhbGl6ZSB0aGUgZW50aXJlIGZpbGUgaW4gbWVtb3J5IC0gaWYgeW91IGNhbiwganVzdCBjYWxsIHNldDogYWJvdmUgTEFSR0VfU0VUX1RIUkVTSE9MRCBpdCBzdHJlYW1zIHRocm91Z2ggc2V0TGFyZ2VGaWxlIGludGVybmFsbHksIGtlZXBpbmcgdGhlIGNsaWVudCByZXNwb25zaXZlIGFuZCBub3Qgb3ZlcndoZWxtaW5nIHRoZSBzZXJ2ZXIuIFRoZSByZXN0IG9mIHRoZSBjb25maWcgaXMgYSBwbGFpbiBTZXRDb25maWcgYW5kIG1lYW5zIGV4YWN0bHkgd2hhdCBpdCBtZWFucyBvbiBzZXQgKHRoYXQgaXMgd2hhdCBtYWtlcyBhIGxhcmdlIHNldCBiZWhhdmUgbGlrZSBhIHNtYWxsIG9uZSBpbnN0ZWFkIG9mIHF1aWV0bHkgbG9zaW5nIGltbXV0YWJpbGl0eSwgb3JkZXJpbmcsIGludGVybmFsLCBvciBmYWxsYmFja3Mgc2VtYW50aWNzIGFzIHRoZSBmaWxlIGNyb3NzZXMgdGhlIHRocmVzaG9sZCk7IGJhY2tlbmRzIHRoYXQgc3RhbXAgdGhlaXIgb3duIHRpbWVzIChiYWNrYmxhemUpIGFjY2VwdCBhbmQgaWdub3JlIGxhc3RNb2RpZmllZC4gVEhST1dTIHdoZW4gdGhlIHN0cmVhbSBwcm9kdWNlcyBubyBkYXRhIGF0IGFsbCAtIHNhbWUgcnVsZSBhcyBzZXQ6IGFuIGVtcHR5IGZpbGUgSVMgYSBkZWxldGlvbiBhbmQgd291bGQgcmVhZCBiYWNrIGFzIG1pc3NpbmcuICovXG4gICAgc2V0TGFyZ2VGaWxlKGNvbmZpZzogU2V0TGFyZ2VGaWxlQ29uZmlnKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogd3JpdGVUaW1lIGlzIHRoZSBsYXN0LXdyaXRlIHRpbWUg4oCUIHNlZSBBcmNoaXZlRmlsZUluZm8uY3JlYXRlVGltZSwgd2hpY2ggaXMgdGhlIHNhbWUgdmFsdWUuIHVybCBhcyBpbiBnZXQyLiBTaXplLTAgZW50cmllcyAodG9tYnN0b25lcykgcmVwb3J0IHVuZGVmaW5lZCB1bmxlc3MgY29uZmlnLmluY2x1ZGVUb21ic3RvbmVzLiAqL1xuICAgIGdldEluZm8oZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0SW5mb0NvbmZpZyk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyOyB1cmw/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD47XG4gICAgLyoqXG4gICAgICogRW1wdHkgKHNpemUtMCkgZmlsZXMgYXJlIE5FVkVSIHJldHVybmVkIGJ5IGluZGV4LWJhY2tlZCBzdG9yZXMgKEJsb2JTdG9yZSwgYW5kIHRoZXJlZm9yZSB0aGVcbiAgICAgKiBjaGFpbik6IGFuIGVtcHR5IGZpbGUgSVMgYSBtaXNzaW5nIGZpbGUgLSB0aGUgdG9tYnN0b25lIG9mIGEgZGVsZXRpb24uIElmIHlvdSB3YW50IGEgbWFya2VyXG4gICAgICogZmlsZSB0aGF0IHNob3dzIHVwIGluIGxpc3RpbmdzLCBhZGQgc29tZSBjb250ZW50IHRvIGl0LiBSYXcgc291cmNlcyAoZGlzaywgYmFja2JsYXplKSBETyBsaXN0XG4gICAgICogdGhlaXIgZW1wdHkgZmlsZXMgLSB0aGF0IGlzIGhvdyBzY2FucyBsZWFybiBvZiBkZWxldGlvbnMgLSBidXQgbm90aGluZyBidWlsdCBvbiB0aGUgaW5kZXhcbiAgICAgKiBldmVyIHN1cmZhY2VzIHRoZW0uXG4gICAgICovXG4gICAgZmluZChwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8c3RyaW5nW10+O1xuICAgIC8qKiBTZWUgZmluZCBmb3IgdGhlIGVtcHR5LWZpbGUgKHRvbWJzdG9uZSkgcnVsZS4gKi9cbiAgICBmaW5kSW5mbyhwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+O1xuICAgIC8qKiBPbmx5IHdvcmtzIGZvciBwdWJsaWMgYnVja2V0cyAocHJpdmF0ZSBidWNrZXRzIGFyZSBBUEktYWNjZXNzIG9ubHkpLiAqL1xuICAgIGdldFVSTChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG4gICAgLyoqIFRoZSBidWNrZXQncyBjb25maWd1cmF0aW9uLCB3aGljaCB0ZWxscyB3aGV0aGVyIHRoZSBvcHRpb25hbCBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZC4gKi9cbiAgICBnZXRDb25maWcoKTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz47XG4gICAgLyoqXG4gICAgICogQWxsIGZpbGVzIGNoYW5nZWQgYWZ0ZXIgY29uZmlnLnRpbWUsIG9wdGlvbmFsbHkgcmVzdHJpY3RlZCB0byBrZXlzIHJvdXRpbmcgaW50byBvbmUgb2ZcbiAgICAgKiBjb25maWcucm91dGVzICh1c2VkIGJ5IHNjYW5uaW5nLCBzbyBwYXJ0aWFsbHktb3ZlcmxhcHBpbmcgc2hhcmRzIG9ubHkgcmVjZWl2ZSB0aGVpciBzbGljZSkuXG4gICAgICogV2hlbiBnZXRDb25maWcoKS5zdXBwb3J0c0NoYW5nZXNBZnRlciwgdGhpcyBpcyBiYWNrZWQgYnkgYW4gaW5kZXggKGZhc3QsIGFuZCBkZWxldGlvbnMgQVJFXG4gICAgICogcmVwb3J0ZWQsIGFzIHNpemUtMCB0b21ic3RvbmUgZW50cmllcykuIEV2ZXJ5IG90aGVyIGJhY2tlbmQgZW11bGF0ZXMgaXQ6IGEgZnVsbCBmaW5kSW5mb1xuICAgICAqIGxpc3RpbmcgZmlsdGVyZWQgaW4gbWVtb3J5IC0gY29ycmVjdCwgYnV0IG5vIGNoZWFwZXIgdGhhbiB0aGUgbGlzdGluZyBpdHNlbGYuXG4gICAgICovXG4gICAgZ2V0Q2hhbmdlc0FmdGVyMihjb25maWc6IENoYW5nZXNBZnRlckNvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+O1xuICAgIC8qKiBTeW5jaHJvbml6YXRpb24gaW50cm9zcGVjdGlvbiwgZm9yIGJhY2tlbmRzIHRoYXQgc3luY2hyb25pemUgZnJvbSBzb3VyY2VzIChzZWUgQmxvYlN0b3JlKS4gKi9cbiAgICBnZXRTeW5jU3RhdHVzPygpOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz47XG59XG4iXX0=
62
+ /* _JS_SOURCE_HASH = "0b3e021b1f014009d2c85fab8fe74c5e88a8677df59b205b248a8fd7806d8940"; */