sliftutils 1.7.138 → 1.7.140

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.
@@ -172,7 +172,7 @@ class SourceWrapper {
172
172
  let waiting = await remote.waitingForAccess();
173
173
  this.accessCache = { hasAccess: !waiting, time: Date.now() };
174
174
  if (waiting) {
175
- console.warn(`No access to storage account for ${this.config.url} (our machine ${waiting.machineId}, ip ${waiting.ip}). ${waiting.reason} Reading via the public URL form where possible. ${waiting.addMachineCommand}`);
175
+ console.warn(`No access to storage account for ${this.config.url}. ${waiting.reason} Reading via the public URL form where possible.`);
176
176
  }
177
177
  return !waiting;
178
178
  }
@@ -305,5 +305,5 @@ class SourceWrapper {
305
305
  }
306
306
  }
307
307
  exports.SourceWrapper = SourceWrapper;
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlV3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNvdXJjZVdyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQXdEO0FBQ3hELGtFQUErRTtBQUMvRSwyREFBcUQ7QUFDckQsb0RBQWlEO0FBRWpELGlEQUFxSDtBQUNySCxxREFBa0Q7QUFDbEQsK0NBQTRDO0FBQzVDLDRDQUFpRDtBQUNqRCxxREFBc0Q7QUFFekMsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQUEsZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFFBQUEsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFNLHVCQUF1QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQywrSEFBK0g7QUFDL0gsTUFBTSw0QkFBNEIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sYUFBYSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBRXhCLEtBQUssVUFBVSxpQkFBaUI7SUFDNUIsSUFBSSxDQUFDLElBQUEsYUFBTSxHQUFFO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUIsSUFBSSxDQUFDO1FBQ0QsTUFBTSxJQUFBLHFCQUFTLEVBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNuRCxNQUFNLElBQUEscUJBQVMsRUFBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFBQyxXQUFNLENBQUM7UUFDTCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQztBQUVELHNqQkFBc2pCO0FBQ3RqQixNQUFhLGFBQWE7SUFTdEIsWUFDVyxNQUFvQjtJQUMzQixvRkFB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QUFDLEtBQUssQ0FBSSxHQUF3QztRQUMxRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUN6RCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQS9RRCxzQ0ErUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGUsIHNvcnQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBmb3JtYXREYXRlVGltZURldGFpbGVkIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IGdldFNlY3JldCB9IGZyb20gXCIuLi8uLi9taXNjL2dldFNlY3JldFwiO1xuaW1wb3J0IHsgSUFyY2hpdmVzLCBTb3VyY2VDb25maWcsIFJlbW90ZUNvbmZpZyB9IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IFJPVVRJTkdfRklMRSwgZ2V0QnVja2V0QmFzZVVybCwgcGFyc2VIb3N0ZWRVcmwsIHBhcnNlQmFja2JsYXplVXJsLCBwYXJzZVJvdXRpbmdEYXRhIH0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5pbXBvcnQgeyBBcmNoaXZlc1JlbW90ZSB9IGZyb20gXCIuL0FyY2hpdmVzUmVtb3RlXCI7XG5pbXBvcnQgeyBBcmNoaXZlc1VybCB9IGZyb20gXCIuL0FyY2hpdmVzVXJsXCI7XG5pbXBvcnQgeyBBcmNoaXZlc0JhY2tibGF6ZSB9IGZyb20gXCIuLi9iYWNrYmxhemVcIjtcbmltcG9ydCB7IHNob3dDZXJ0VHJ1c3RNb2RhbCB9IGZyb20gXCIuL2NlcnRUcnVzdE1vZGFsXCI7XG5cbmV4cG9ydCBjb25zdCBSRVRSWV9TVEFSVF9ERUxBWSA9IDIgKiAxMDAwO1xuZXhwb3J0IGNvbnN0IFJFVFJZX01BWF9ERUxBWSA9IDUgKiA2MCAqIDEwMDA7XG5leHBvcnQgY29uc3QgUkVUUllfR1JPV1RIID0gMS41O1xuY29uc3QgQUNDRVNTX1JFQ0hFQ0tfSU5URVJWQUwgPSA2MCAqIDEwMDA7XG5jb25zdCBTT1VSQ0VfRkFJTFVSRV9DT09MRE9XTiA9IDMwICogNjAgKiAxMDAwO1xuLy8gQWRkZWQgdG8gYSBkaXNjb25uZWN0ZWQgc291cmNlJ3MgbGF0ZW5jeTogaXQgc3RpbGwgc29ydHMgYW5kIGNhbiBzdGlsbCBiZSBwaWNrZWQsIGl0IGp1c3QgbGFuZHMgYWZ0ZXIgZXZlcnkgY29ubmVjdGVkIHNvdXJjZVxuY29uc3QgRElTQ09OTkVDVEVEX0xBVEVOQ1lfUEVOQUxUWSA9IDEwICogMTAwMDtcbmNvbnN0IFBJTkdfSU5URVJWQUwgPSA2MCAqIDEwMDA7XG5jb25zdCBQSU5HX0hJU1RPUlkgPSAxMDtcblxuYXN5bmMgZnVuY3Rpb24gaGFzQmFja2JsYXplQ3JlZHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFpc05vZGUoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGdldFNlY3JldChcImJhY2tibGF6ZS5qc29uLmFwcGxpY2F0aW9uS2V5SWRcIik7XG4gICAgICAgIGF3YWl0IGdldFNlY3JldChcImJhY2tibGF6ZS5qc29uLmFwcGxpY2F0aW9uS2V5XCIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLy8gT25lIHNvdXJjZSBvZiBhIFJlbW90ZUNvbmZpZywgYXMgYSB1c2FibGUgSUFyY2hpdmVzLiBSZWFkcyBmYWxsIGJhY2sgdG8gdGhlIHB1YmxpYy1VUkwgZm9ybSB3aGVuIHdlIGRvbid0IGhhdmUgQVBJIGFjY2Vzczsgd3JpdGVzIGFsd2F5cyBhdHRlbXB0IHRoZSBBUEkgKHNvIGFjY2VzcyBncmFudGVkIGxhdGVyIGlzIHBpY2tlZCB1cCBvbiB0aGUgbmV4dCB3cml0ZSkuIFdoZW4gYSBjYWxsIGZhaWxzIHdoaWxlIHRoZSBXZWJTb2NrZXQgaXMgZG93biwgbm90ZUZhaWx1cmUgc3RhcnRzIGEgYmFja2dyb3VuZCByZWNvbm5lY3QgbG9vcCB3aXRoIGEgcmFtcGluZyBkZWxheSAtIGl0IG5ldmVyIGJsb2NrcyBjYWxsZXJzLCBpdCBqdXN0IGtlZXBzIHRyeWluZyBzbyB0aGUgY29ubmVjdGlvbiBldmVudHVhbGx5IGNvbWVzIGJhY2suIFNvdXJjZXMgd2l0aG91dCBhIFdlYlNvY2tldCAoYmFja2JsYXplLCBVUkwtZm9ybSwgb3VyIG93biBsb2NhbCBzZXJ2ZXIpIHJlcG9ydCBhbHdheXMtY29ubmVjdGVkOiB0aGV5J3JlIGxhc3QtcmVzb3J0IHNvdXJjZXMgd2hlcmUgdGhyb3dpbmcgaXMgZmluZS5cbmV4cG9ydCBjbGFzcyBTb3VyY2VXcmFwcGVyIHtcbiAgICBwdWJsaWMgYXBpPzogSUFyY2hpdmVzO1xuICAgIHB1YmxpYyB1cmw/OiBBcmNoaXZlc1VybDtcbiAgICBwdWJsaWMgd3JpdGVCbG9ja2VkPzogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVtb3RlPzogQXJjaGl2ZXNSZW1vdGU7XG4gICAgcHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgcmVjb25uZWN0UnVubmluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgYWNjZXNzQ2FjaGU/OiB7IGhhc0FjY2VzczogYm9vbGVhbjsgdGltZTogbnVtYmVyIH07XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY29uZmlnOiBTb3VyY2VDb25maWcsXG4gICAgICAgIC8vIGZhbHNlIGZvciBzaG9ydC1saXZlZCBwcm9iZSBpbnN0YW5jZXMsIHdoaWNoIG11c3QgbmV2ZXIgbGVhdmUgYSByZXRyeSBsb29wIGJlaGluZFxuICAgICAgICBwcml2YXRlIGJhY2tncm91bmQ6IGJvb2xlYW4sXG4gICAgKSB7IH1cblxuICAgIC8qKiBDb25maWcgdXBkYXRlcyByb3V0aW5lbHkganVzdCBtb3ZlIGEgc291cmNlJ3MgdmFsaWQgd2luZG93ICh0aGUgbGFzdCB3aW5kb3cgZXh0ZW5kcyBmb3JldmVyLCB0aGVuIGdldHMgcmVkdWNlZCB3aGVuIGEgbmV3IGVudHJ5IGlzIGFwcGVuZGVkKS4gVGhlIHdyYXBwZXIgc3Vydml2ZXMgdGhhdDogb25seSB0aGUgd2luZG93IGNoYW5nZXMsIGtlZXBpbmcgdGhlIGNvbm5lY3Rpb24sIHBpbmdzLCBhbmQgbGF0ZW5jeSBoaXN0b3J5LiAqL1xuICAgIHB1YmxpYyB1cGRhdGVWYWxpZFdpbmRvdyh2YWxpZFdpbmRvdzogW251bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICBsZXQgb2xkID0gdGhpcy5jb25maWcudmFsaWRXaW5kb3c7XG4gICAgICAgIGlmIChvbGRbMF0gPT09IHZhbGlkV2luZG93WzBdICYmIG9sZFsxXSA9PT0gdmFsaWRXaW5kb3dbMV0pIHJldHVybjtcbiAgICAgICAgY29uc29sZS5sb2coYFZhbGlkIHdpbmRvdyBjaGFuZ2VkIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiBbJHtvbGQuam9pbihcIiwgXCIpfV0gLT4gWyR7dmFsaWRXaW5kb3cuam9pbihcIiwgXCIpfV1gKTtcbiAgICAgICAgdGhpcy5jb25maWcudmFsaWRXaW5kb3cgPSB2YWxpZFdpbmRvdztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIGNyZWF0ZShjb25maWc6IFNvdXJjZUNvbmZpZywgb3B0aW9ucz86IHsgYmFja2dyb3VuZD86IGJvb2xlYW47IHJlYWRPbmx5PzogYm9vbGVhbiB9KTogUHJvbWlzZTxTb3VyY2VXcmFwcGVyPiB7XG4gICAgICAgIGxldCB3cmFwcGVyID0gbmV3IFNvdXJjZVdyYXBwZXIoY29uZmlnLCBvcHRpb25zPy5iYWNrZ3JvdW5kICE9PSBmYWxzZSk7XG4gICAgICAgIC8vIEEgcHVibGljIGJ1Y2tldCBzZXJ2ZXMgZXZlcnl0aGluZyB3ZSBjYW4gcmVhZCBvdmVyIHBsYWluIEhUVFBTIEdFVHMsIHNvIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBvcGVuIGFuIEFQSSBjb25uZWN0aW9uICh3aGljaCBjb3N0cyBhIFdlYlNvY2tldCwgYW5kIGFuIGFjY2VzcyBncmFudCB3ZSBsaWtlbHkgZG9uJ3QgaGF2ZSkganVzdCB0byByZWFkIGl0XG4gICAgICAgIGlmIChvcHRpb25zPy5yZWFkT25seSAmJiBjb25maWcucHVibGljICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgd3JhcHBlci51cmwgPSBuZXcgQXJjaGl2ZXNVcmwoZ2V0QnVja2V0QmFzZVVybChjb25maWcudXJsKSk7XG4gICAgICAgICAgICB3cmFwcGVyLndyaXRlQmxvY2tlZCA9IGAke2NvbmZpZy51cmx9IGlzIGJlaW5nIHJlYWQgaW4gcmVhZC1vbmx5IG1vZGUgKHB1YmxpYyBidWNrZXQsIGFuZCB3ZSBhcmUgbm90IGluIG5vZGUpLCBzbyBpdCBpcyBkb3dubG9hZGVkIG92ZXIgcGxhaW4gVVJMcyBhbmQgY2Fubm90IGJlIHdyaXR0ZW4uIFBhc3MgZGlyZWN0Q29ubmVjdCB0byBjcmVhdGVBcmNoaXZlcyB0byB1c2UgdGhlIEFQSSBpbnN0ZWFkLmA7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLnR5cGUgPT09IFwiYmFja2JsYXplXCIpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBoYXNCYWNrYmxhemVDcmVkcygpKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5hcGkgPSBuZXcgQXJjaGl2ZXNCYWNrYmxhemUoeyBidWNrZXROYW1lOiBwYXJzZUJhY2tibGF6ZVVybChjb25maWcudXJsKS5idWNrZXROYW1lLCBwdWJsaWM6IGNvbmZpZy5wdWJsaWMsIGltbXV0YWJsZTogY29uZmlnLmltbXV0YWJsZSwgYWxsb3dlZE9yaWdpbnM6IGNvbmZpZy5hbGxvd2VkT3JpZ2lucyB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKCkpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyLndyaXRlQmxvY2tlZCA9IGBObyBiYWNrYmxhemUgY3JlZGVudGlhbHMgZm9yICR7Y29uZmlnLnVybH0uIFByb3ZpZGUgYmFja2JsYXplLmpzb24uYXBwbGljYXRpb25LZXlJZCBhbmQgYmFja2JsYXplLmpzb24uYXBwbGljYXRpb25LZXkgdmlhIGdldFNlY3JldCB0byBlbmFibGUgQVBJIGFjY2Vzcy5gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyLndyaXRlQmxvY2tlZCA9IGBCcm93c2VycyBjYW5ub3Qgd3JpdGUgdG8gYmFja2JsYXplIChidWNrZXQgJHtjb25maWcudXJsfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF3cmFwcGVyLmFwaSAmJiBjb25maWcucHVibGljICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHdyYXBwZXIudXJsID0gbmV3IEFyY2hpdmVzVXJsKGdldEJ1Y2tldEJhc2VVcmwoY29uZmlnLnVybCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQSBidWNrZXQgaG9zdGVkIGJ5IG91ciBvd24gcHJvY2VzcyBpcyByZWFjaGVkIHRoZSBzYW1lIHdheSBhcyBhbnkgb3RoZXI6IG92ZXIgdGhlIEFQSSwgdG8gb3VyIG93biBwb3J0XG4gICAgICAgIHdyYXBwZXIucmVtb3RlID0gbmV3IEFyY2hpdmVzUmVtb3RlKHsgdXJsOiBjb25maWcudXJsLCB3YWl0Rm9yQWNjZXNzOiBmYWxzZSwgc291cmNlQ29uZmlnOiBjb25maWcgfSk7XG4gICAgICAgIHdyYXBwZXIuYXBpID0gd3JhcHBlci5yZW1vdGU7XG4gICAgICAgIGlmIChjb25maWcucHVibGljICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgd3JhcHBlci51cmwgPSBuZXcgQXJjaGl2ZXNVcmwoZ2V0QnVja2V0QmFzZVVybChjb25maWcudXJsKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlYnVnTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICAvLyBUaGUgc2FtZSBVUkwgY2FuIGFwcGVhciBhcyBtdWx0aXBsZSBzb3VyY2VzIChkaWZmZXJlbnQgcm91dGVzIC8gdmFsaWQgd2luZG93cyksIHNvIHRoZSBkaXN0aW5ndWlzaGluZyBzbGljZSBpcyBwYXJ0IG9mIHRoZSBuYW1lXG4gICAgICAgIGxldCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgbGV0IHJvdXRlID0gdGhpcy5jb25maWcucm91dGU7XG4gICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgcGFydHMucHVzaChgcm91dGUgWyR7cm91dGVbMF19LCAke3JvdXRlWzFdfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgW3N0YXJ0LCBlbmRdID0gdGhpcy5jb25maWcudmFsaWRXaW5kb3c7XG4gICAgICAgIGlmIChzdGFydCAhPT0gMCB8fCBlbmQgIT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnRUZXh0ID0gc3RhcnQgPT09IDAgJiYgXCIwXCIgfHwgZm9ybWF0RGF0ZVRpbWVEZXRhaWxlZChzdGFydCk7XG4gICAgICAgICAgICBsZXQgZW5kVGV4dCA9IGVuZCA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgJiYgXCJmb3JldmVyXCIgfHwgZm9ybWF0RGF0ZVRpbWVEZXRhaWxlZChlbmQpO1xuICAgICAgICAgICAgcGFydHMucHVzaChgdmFsaWRXaW5kb3cgWyR7c3RhcnRUZXh0fSwgJHtlbmRUZXh0fV1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYHNvdXJjZSAke3RoaXMuY29uZmlnLnVybH0ke3BhcnRzLmxlbmd0aCAmJiBgICgke3BhcnRzLmpvaW4oXCIsIFwiKX0pYCB8fCBcIlwifWA7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29ubmVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMucmVtb3RlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlLmlzQ29ubmVjdGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIEEgc291cmNlIHdob3NlIHdpbmRvdyBoYXMgcGFzc2VkIGlzIG5ldmVyIHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIChzZWUgdGhlIHdpbmRvdyBjaGVja3MgaW4gQXJjaGl2ZXNDaGFpbiksIGFuZCBhbiBpbnRlcm1lZGlhdGUgb25seSBleGlzdHMgZm9yIHRoZSBtaW51dGVzIG9mIGEgZGVwbG95IHN3aXRjaG92ZXIgLSBvbiBlaXRoZXIsIGJlaW5nIHVucmVhY2hhYmxlIGlzIGV4cGVjdGVkLCBub3QgYSBwcm9ibGVtIHRvIHJlcG9ydC4gKi9cbiAgICBwcml2YXRlIGlzQ29ubmVjdGlvblByb2JsZW1Xb3J0aFJlcG9ydGluZygpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmludGVybWVkaWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcudmFsaWRXaW5kb3dbMV0gPiBEYXRlLm5vdygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29vbGRvd25VbnRpbCA9IDA7XG4gICAgLyoqIEEgc291cmNlIHRoYXQgZmFpbGVkIHdoaWxlIGRpc2Nvbm5lY3RlZCBpcyBza2lwcGVkIGJ5IGNhbGxlcnMgZm9yIFNPVVJDRV9GQUlMVVJFX0NPT0xET1dOIC0gYnV0IG9ubHkgd2hpbGUgc29tZSBvdGhlciBzb3VyY2UgY2FuIHNlcnZlIHRoZSByZXF1ZXN0LiBXaGVuIG5vdGhpbmcgZWxzZSBpcyB1c2FibGUsIGNhbGxlcnMgaWdub3JlIHRoaXMgYW5kIHRyeSBpdCBhbnl3YXksIHNvIGEgdG90YWwgb3V0YWdlIHN0aWxsIHJldHJpZXMgZXZlcnkgdGltZS4gKi9cbiAgICBwdWJsaWMgaXNPbkNvb2xkb3duKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSA8IHRoaXMuY29vbGRvd25VbnRpbDtcbiAgICB9XG5cbiAgICAvKiogQ2FsbCBhZnRlciBhIHJlcXVlc3QgZmFpbGVkIHdoaWxlIGlzQ29ubmVjdGVkKCkgd2FzIGZhbHNlOiBwdXRzIHRoZSBzb3VyY2Ugb24gY29vbGRvd24gYW5kIHN0YXJ0cyAoaWYgbm90IGFscmVhZHkgcnVubmluZykgdGhlIGJhY2tncm91bmQgcmVjb25uZWN0IGxvb3AuIE5ldmVyIGJsb2NrcyAtIHRoZSBmYWlsZWQgcmVxdWVzdCBzdGlsbCB0aHJvd3MuICovXG4gICAgcHVibGljIG5vdGVGYWlsdXJlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCB8fCB0aGlzLmlzQ29ubmVjdGVkKCkpIHJldHVybjtcbiAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChub3cgPj0gdGhpcy5jb29sZG93blVudGlsICYmIHRoaXMuaXNDb25uZWN0aW9uUHJvYmxlbVdvcnRoUmVwb3J0aW5nKCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBjb25uZWN0IHRvIHN0b3JhZ2UgJHt0aGlzLmdldERlYnVnTmFtZSgpfTsgc2tpcHBpbmcgaXQgdW50aWwgJHtmb3JtYXREYXRlVGltZURldGFpbGVkKG5vdyArIFNPVVJDRV9GQUlMVVJFX0NPT0xET1dOKX0gKG5vdyAke2Zvcm1hdERhdGVUaW1lRGV0YWlsZWQobm93KX0pIHVubGVzcyBubyBvdGhlciBzb3VyY2UgY2FuIHNlcnZlIHRoZSByZXF1ZXN0YCk7XG4gICAgICAgICAgICAvLyBJbiBhIGJyb3dzZXIgdGhpcyBpcyBvZnRlbiBhbiB1bnRydXN0ZWQgKHNlbGYtc2lnbmVkKSBjZXJ0aWZpY2F0ZSB0aGUgdXNlciBoYXNuJ3QgYWNjZXB0ZWQgeWV0IC0gb2ZmZXIgdGhlbSB0aGUgdHJ1c3QgZmxvdyAoYSBuby1vcCBpbiBOb2RlLCBhbmQgc2hvd24gYXQgbW9zdCBvbmNlIHBlciBzZXJ2ZXIpXG4gICAgICAgICAgICBzaG93Q2VydFRydXN0TW9kYWwodGhpcy5jb25maWcudXJsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvb2xkb3duVW50aWwgPSBub3cgKyBTT1VSQ0VfRkFJTFVSRV9DT09MRE9XTjtcbiAgICAgICAgaWYgKCF0aGlzLmJhY2tncm91bmQgfHwgdGhpcy5yZWNvbm5lY3RSdW5uaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMucmVjb25uZWN0UnVubmluZyA9IHRydWU7XG4gICAgICAgIHZvaWQgdGhpcy5yZWNvbm5lY3RMb29wKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZWNvbm5lY3RMb29wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgcmV0cnlEZWxheSA9IFJFVFJZX1NUQVJUX0RFTEFZO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgYXdhaXQgZGVsYXkocmV0cnlEZWxheSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIGJyZWFrO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBBbnkgY2FsbCByZS1lc3RhYmxpc2hlcyB0aGUgV2ViU29ja2V0OyB0aGUgcmVzdWx0IGRvZXNuJ3QgbWF0dGVyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdGU/LmdldEluZm8oUk9VVElOR19GSUxFKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBFdmVuIGEgZmFpbGluZyBjYWxsIChlLmcuIGFjY2VzcyBkZW5pZWQpIHByb3ZlcyB0aGUgY29ubmVjdGlvbiBpcyBiYWNrXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0aW9uUHJvYmxlbVdvcnRoUmVwb3J0aW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogSW4gdGhpcyBjYXNlLCBJJ20ganVzdCBzaG93aW5nIHRoZSBtZXNzYWdlIGJlY2F1c2UgdGhlIGNhbGwgc3RhY2sgaXMgYWxtb3N0IGFsd2F5cyBjb21wbGV0ZWx5IHVuaW50ZXJlc3RpbmcuXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBjb25uZWN0IHRvIHN0b3JhZ2UgJHt0aGlzLmdldERlYnVnTmFtZSgpfSwgcmV0cnlpbmcgaW4gJHtNYXRoLnJvdW5kKHJldHJ5RGVsYXkgLyAxMDAwKX1zLiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlID8/IGV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0cnlEZWxheSA9IE1hdGgubWluKFJFVFJZX01BWF9ERUxBWSwgcmV0cnlEZWxheSAqIFJFVFJZX0dST1dUSCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWNvbm5lY3RSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29vbGRvd25VbnRpbCA9IDA7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZWNvbm5lY3RlZCB0byBzdG9yYWdlICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0sIGNsZWFyaW5nIGl0cyBjb29sZG93bmApO1xuICAgIH1cblxuICAgIC8vIEZvciBob3N0ZWQgc291cmNlczogY2FjaGVkIGFjY2VzcyBjaGVjaywgc28gcmVhZHMga25vdyB3aGV0aGVyIHRvIHVzZSB0aGUgQVBJIG9yIHRoZSBwdWJsaWMgVVJMIGZvcm0uIEFjY2Vzcywgb25jZSBzZWVuLCBpcyBhc3N1bWVkIHRvIHN0aWNrOyBuby1hY2Nlc3MgaXMgcmUtY2hlY2tlZCBwZXJpb2RpY2FsbHkgKHRoZSBjaGVjayBhbHNvIHJlZ2lzdGVycyBvdXIgYWNjZXNzIHJlcXVlc3Qgc2VydmVyLXNpZGUsIHdoaWNoIGxvZ3MgdGhlIGdyYW50IGxpbmspLlxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tBY2Nlc3MoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGxldCByZW1vdGUgPSB0aGlzLnJlbW90ZTtcbiAgICAgICAgaWYgKCFyZW1vdGUpIHJldHVybiAhIXRoaXMuYXBpO1xuICAgICAgICBsZXQgY2FjaGVkID0gdGhpcy5hY2Nlc3NDYWNoZTtcbiAgICAgICAgaWYgKGNhY2hlZCAmJiAoY2FjaGVkLmhhc0FjY2VzcyB8fCBEYXRlLm5vdygpIC0gY2FjaGVkLnRpbWUgPCBBQ0NFU1NfUkVDSEVDS19JTlRFUlZBTCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQuaGFzQWNjZXNzO1xuICAgICAgICB9XG4gICAgICAgIGxldCB3YWl0aW5nID0gYXdhaXQgcmVtb3RlLndhaXRpbmdGb3JBY2Nlc3MoKTtcbiAgICAgICAgdGhpcy5hY2Nlc3NDYWNoZSA9IHsgaGFzQWNjZXNzOiAhd2FpdGluZywgdGltZTogRGF0ZS5ub3coKSB9O1xuICAgICAgICBpZiAod2FpdGluZykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBObyBhY2Nlc3MgdG8gc3RvcmFnZSBhY2NvdW50IGZvciAke3RoaXMuY29uZmlnLnVybH0gKG91ciBtYWNoaW5lICR7d2FpdGluZy5tYWNoaW5lSWR9LCBpcCAke3dhaXRpbmcuaXB9KS4gJHt3YWl0aW5nLnJlYXNvbn0gUmVhZGluZyB2aWEgdGhlIHB1YmxpYyBVUkwgZm9ybSB3aGVyZSBwb3NzaWJsZS4gJHt3YWl0aW5nLmFkZE1hY2hpbmVDb21tYW5kfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhd2FpdGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVhZDxUPihydW46IChhcmNoaXZlczogSUFyY2hpdmVzKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGlmICh0aGlzLmFwaSAmJiBhd2FpdCB0aGlzLmNoZWNrQWNjZXNzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBydW4odGhpcy5hcGkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVybCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bih0aGlzLnVybCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXBpKSB7XG4gICAgICAgICAgICAvLyBObyBwdWJsaWMgVVJMIGZvcm0gLSBsZXQgdGhlIEFQSSBjYWxsIHRocm93IGl0cyBvd24gZXJyb3IgKHdoaWNoIGluY2x1ZGVzIHRoZSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zIGZvciBob3N0ZWQgc291cmNlcylcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBydW4odGhpcy5hcGkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIGhhcyBubyBBUEkgYWNjZXNzIGFuZCBubyBwdWJsaWMgVVJMIGZvcm0gKHB1YmxpYzogZmFsc2UpOiAke3RoaXMuY29uZmlnLnVybH1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVhZFJvdXRpbmdDb25maWcoKTogUHJvbWlzZTxSZW1vdGVDb25maWcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLnJlYWQoYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZ2V0KFJPVVRJTkdfRklMRSkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBwYXJzZVJvdXRpbmdEYXRhKGRhdGEpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFzV3JpdGVBY2Nlc3MoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGlmICh0aGlzLndyaXRlQmxvY2tlZCB8fCAhdGhpcy5hcGkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBpLmhhc1dyaXRlQWNjZXNzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwaW5nczogbnVtYmVyW10gPSBbXTtcbiAgICBwcml2YXRlIHBpbmdUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgbG9nZ2VkQ29ubmVjdGVkID0gZmFsc2U7XG5cbiAgICAvKiogU3RhcnRzIG1lYXN1cmluZyB0aGlzIHNvdXJjZSdzIGxhdGVuY3ksIHdoaWNoIGRlY2lkZXMgd2hpY2ggaG9zdHMgcmVhZHMgYW5kIHZhcmlhYmxlLXNoYXJkIHdyaXRlcyBwcmVmZXIuIEhvc3RlZCByZW1vdGVzIHBpbmcgb3ZlciB0aGVpciBBUEkgY29ubmVjdGlvbjsgVVJMLW9ubHkgc291cmNlcyAocmVhZC1vbmx5IG1vZGUsIGJhY2tibGF6ZSB3aXRob3V0IGNyZWRlbnRpYWxzKSBwcm9iZSBvdmVyIHBsYWluIEhUVFBTIGluc3RlYWQgLSB0aGUgY2xpZW50IE5FRURTIHRoZWlyIGxhdGVuY3kgdG9vLCBvciBpdCBjYW5ub3QgcmFuayB0aGUgaG9zdHMgaXQgcmVhZHMgZnJvbS4gT3VyIG93biBsb2NhbCBzZXJ2ZXIgY291bnRzIGFzIDA7IG9ubHkgc291cmNlcyB3aXRoIG5laXRoZXIgZm9ybSBzdGF5IEluZmluaXR5LiAqL1xuICAgIHB1YmxpYyBzdGFydFBpbmdpbmcoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBpbmdUaW1lciB8fCB0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG4gICAgICAgIC8vIEEgc291cmNlIHdob3NlIHdpbmRvdyBoYXMgcGFzc2VkIG5ldmVyIHJlY2VpdmVzIHJlYWRzIG9yIHdyaXRlcyAtIG1lYXN1cmluZyBpdCBpcyBwb2ludGxlc3MgdHJhZmZpY1xuICAgICAgICBpZiAodGhpcy5jb25maWcudmFsaWRXaW5kb3dbMV0gPD0gRGF0ZS5ub3coKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCByZW1vdGUgPSB0aGlzLnJlbW90ZTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG4gICAgICAgIGxldCBwcm9iZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgaWYgKHJlbW90ZSkge1xuICAgICAgICAgICAgcHJvYmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVtb3RlLnBpbmcoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodXJsKSB7XG4gICAgICAgICAgICAvLyBBIDEtYnl0ZSByYW5nZWQgcmVhZCBvZiB0aGUgcm91dGluZyBmaWxlIHRyYW5zZmVycyBlc3NlbnRpYWxseSBub3RoaW5nLCBhbmQgdW5saWtlIGFuIGV4cGxpY2l0IE9QVElPTlMgcmVxdWVzdCBpdCBuZWVkcyBubyBDT1JTIHByZWZsaWdodCAoYmFja2JsYXplJ3MgQ09SUyBydWxlcyBvbmx5IGFsbG93IGRvd25sb2FkIG9wZXJhdGlvbnMpIC0gc28gaXQgd29ya3MgZnJvbSB0aGUgYnJvd3Nlciwgd2hpY2ggaXMgZXhhY3RseSB3aGVyZSBVUkwtb25seSBtb2RlIHJ1bnNcbiAgICAgICAgICAgIHByb2JlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHVybC5nZXRJbmZvKFJPVVRJTkdfRklMRSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtZWFzdXJlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcHJvYmUoKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIEEgZmFpbGVkIHBpbmcgaXMgYWxzbyBvdXIgZWFybGllc3QgZG93bi1kZXRlY3Rpb25cbiAgICAgICAgICAgICAgICB0aGlzLm5vdGVGYWlsdXJlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2dlZENvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VkQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29ubmVjdGVkIHRvIHN0b3JhZ2UgJHt0aGlzLmdldERlYnVnTmFtZSgpfSAoJHtEYXRlLm5vdygpIC0gc3RhcnR9bXMpYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBpbmdzLnB1c2goRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBpbmdzLmxlbmd0aCA+IFBJTkdfSElTVE9SWSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGluZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdm9pZCBtZWFzdXJlKCk7XG4gICAgICAgIHRoaXMucGluZ1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdm9pZCBtZWFzdXJlKCk7XG4gICAgICAgIH0sIFBJTkdfSU5URVJWQUwpO1xuICAgICAgICAodGhpcy5waW5nVGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgIH1cblxuICAgIC8qKiBTZWVkcyB0aGUgbGF0ZW5jeSBlc3RpbWF0ZSBiZWZvcmUgdGhlIGZpcnN0IHBpbmcgbGFuZHMgKGUuZy4gZnJvbSB0aGUgaW5pdGlhbCByb3V0aW5nIGZldGNoKSwgc28gdmFyaWFibGUtc2hhcmQgcGlja2luZyBoYXMgc29tZXRoaW5nIGltbWVkaWF0ZWx5LiBSZWFsIHBpbmdzIHRha2Ugb3ZlciBmcm9tIHRoZSBmaXJzdCBtZWFzdXJlbWVudCBvbi4gKi9cbiAgICBwdWJsaWMgc2VlZExhdGVuY3kobXM6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5waW5ncy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5waW5ncy5wdXNoKG1zKTtcbiAgICB9XG5cbiAgICAvKiogTWVkaWFuIG9mIHRoZSByZWNlbnQgcGluZ3MgKEFQSSBvciBVUkwtZm9ybSwgd2hpY2hldmVyIHRoaXMgc291cmNlIG1lYXN1cmVzKSwgcGx1cyBESVNDT05ORUNURURfTEFURU5DWV9QRU5BTFRZIHdoaWxlIHRoZSBzb3VyY2UgaXMgZGlzY29ubmVjdGVkIC0gc28gYSBkb3duIHNvdXJjZSBzdGlsbCBzb3J0cyBhbmQgY2FuIHN0aWxsIGJlIHBpY2tlZCwganVzdCBhZnRlciBldmVyeSBjb25uZWN0ZWQgb25lLiBTb3VyY2VzIHdpdGggbm8gbWVhc3VyZW1lbnRzIHlldCBzb3J0IGxhc3QgKEluZmluaXR5KSwgZXhjZXB0IG91ciBvd24gaW4tcHJvY2VzcyBzZXJ2ZXIsIHdoaWNoIGlzIHRoZSBiZXN0IHBvc3NpYmxlIHRhcmdldCAoMCkuICovXG4gICAgcHVibGljIGdldExhdGVuY3koKTogbnVtYmVyIHtcbiAgICAgICAgLy8gT3VyIG93biBpbi1wcm9jZXNzIHNlcnZlcjogaG9zdGVkICh0eXBlIHJlbW90ZSksIGFwaSBwcmVzZW50LCBidXQgbm8gcmVtb3RlIGNvbm5lY3Rpb24gLSBpdCBJUyB1c1xuICAgICAgICBpZiAoIXRoaXMucmVtb3RlICYmIHRoaXMuY29uZmlnLnR5cGUgPT09IFwicmVtb3RlXCIgJiYgdGhpcy5hcGkpIHJldHVybiAwO1xuICAgICAgICBpZiAoIXRoaXMucGluZ3MubGVuZ3RoKSByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIGxldCBzb3J0ZWQgPSBbLi4udGhpcy5waW5nc107XG4gICAgICAgIHNvcnQoc29ydGVkLCB4ID0+IHgpO1xuICAgICAgICBsZXQgbWVkaWFuID0gc29ydGVkW01hdGguZmxvb3Ioc29ydGVkLmxlbmd0aCAvIDIpXTtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtZWRpYW4gKyBESVNDT05ORUNURURfTEFURU5DWV9QRU5BTFRZO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZWRpYW47XG4gICAgfVxuXG4gICAgLyoqIHdyaXRlQmxvY2tlZCBmcm9tIG1pc3NpbmcgYmFja2JsYXplIGNyZWRlbnRpYWxzIGlzIHJlLWNoZWNrZWQgb24gZXZlcnkgd3JpdGUgYXR0ZW1wdDogdGhlIHNlY3JldCBsb2FkIGNhbiBmYWlsIFRSQU5TSUVOVExZIChlYXJseSBzdGFydHVwLCBhIGZpbGUtcmVhZCBoaWNjdXApLCBhbmQgb25lIGZhaWxlZCBsb2FkIG11c3QgbmV2ZXIgcGVybWFuZW50bHkgc3RvcCB0aGlzIHByb2Nlc3MgZnJvbSB3cml0aW5nIHRvIHRoZSBidWNrZXQuIFRoZSBvdGhlciB3cml0ZUJsb2NrZWQgcmVhc29ucyAocmVhZC1vbmx5IG1vZGUsIGJyb3dzZXJzKSBhcmUgc3RhdGljIHByb3BlcnRpZXMgb2YgdGhlIHByb2Nlc3MsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmUtY2hlY2suICovXG4gICAgcHVibGljIGFzeW5jIHJlY2hlY2tXcml0ZUJsb2NrZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy53cml0ZUJsb2NrZWQgfHwgdGhpcy5hcGkgfHwgdGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5jb25maWcudHlwZSAhPT0gXCJiYWNrYmxhemVcIikgcmV0dXJuO1xuICAgICAgICBpZiAoIWF3YWl0IGhhc0JhY2tibGF6ZUNyZWRzKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5hcGkgPSBuZXcgQXJjaGl2ZXNCYWNrYmxhemUoeyBidWNrZXROYW1lOiBwYXJzZUJhY2tibGF6ZVVybCh0aGlzLmNvbmZpZy51cmwpLmJ1Y2tldE5hbWUsIHB1YmxpYzogdGhpcy5jb25maWcucHVibGljLCBpbW11dGFibGU6IHRoaXMuY29uZmlnLmltbXV0YWJsZSwgYWxsb3dlZE9yaWdpbnM6IHRoaXMuY29uZmlnLmFsbG93ZWRPcmlnaW5zIH0pO1xuICAgICAgICBjb25zb2xlLmxvZyhgQmFja2JsYXplIGNyZWRlbnRpYWxzIGFyZSBub3cgYXZhaWxhYmxlIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9LCB1bmJsb2NraW5nIHdyaXRlcyAod2FzIGJsb2NrZWQ6ICR7dGhpcy53cml0ZUJsb2NrZWR9KWApO1xuICAgICAgICB0aGlzLndyaXRlQmxvY2tlZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogV3JpdGVzIGFsd2F5cyBnbyB0aHJvdWdoIHRoZSBBUEksIHNvIGEgcGVybWlzc2lvbiBlcnJvciB0aHJvd3MgdG8gdGhlIGNhbGxlciBvbiBldmVyeSB3cml0ZSAoYW5kIGFjY2VzcyBncmFudGVkIGluIHRoZSBtZWFudGltZSBpcyBwaWNrZWQgdXAgYXV0b21hdGljYWxseSkuICovXG4gICAgcHVibGljIGFzeW5jIHdyaXRlPFQ+KHJ1bjogKGFyY2hpdmVzOiBJQXJjaGl2ZXMpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgaWYgKHRoaXMud3JpdGVCbG9ja2VkKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tXcml0ZUJsb2NrZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53cml0ZUJsb2NrZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JpdGVzIGFyZSBibG9ja2VkIG9uIHRoaXMgc291cmNlOiAke3RoaXMud3JpdGVCbG9ja2VkfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhcGkgPSB0aGlzLmFwaTtcbiAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIGhhcyBubyBBUEkgYWNjZXNzLCBzbyBpdCBjYW5ub3QgYWNjZXB0IHdyaXRlczogJHt0aGlzLmNvbmZpZy51cmx9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHJ1bihhcGkpO1xuICAgICAgICB0aGlzLmFjY2Vzc0NhY2hlID0geyBoYXNBY2Nlc3M6IHRydWUsIHRpbWU6IERhdGUubm93KCkgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnBpbmdUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBpbmdUaW1lcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
309
- /* _JS_SOURCE_HASH = "3e1e750769ca3f76960719327abdc7b27ec201067b8bfe8df4afea5ddb7a18a2"; */
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlV3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNvdXJjZVdyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQXdEO0FBQ3hELGtFQUErRTtBQUMvRSwyREFBcUQ7QUFDckQsb0RBQWlEO0FBRWpELGlEQUFxSDtBQUNySCxxREFBa0Q7QUFDbEQsK0NBQTRDO0FBQzVDLDRDQUFpRDtBQUNqRCxxREFBc0Q7QUFFekMsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQUEsZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFFBQUEsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFNLHVCQUF1QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQywrSEFBK0g7QUFDL0gsTUFBTSw0QkFBNEIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sYUFBYSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBRXhCLEtBQUssVUFBVSxpQkFBaUI7SUFDNUIsSUFBSSxDQUFDLElBQUEsYUFBTSxHQUFFO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUIsSUFBSSxDQUFDO1FBQ0QsTUFBTSxJQUFBLHFCQUFTLEVBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNuRCxNQUFNLElBQUEscUJBQVMsRUFBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFBQyxXQUFNLENBQUM7UUFDTCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQztBQUVELHNqQkFBc2pCO0FBQ3RqQixNQUFhLGFBQWE7SUFTdEIsWUFDVyxNQUFvQjtJQUMzQixvRkFB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QU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDckMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ3pELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxPQUFPO1FBQ1YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBL1FELHNDQStRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTm9kZSwgc29ydCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGZvcm1hdERhdGVUaW1lRGV0YWlsZWQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2Zvcm1hdFwiO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuaW1wb3J0IHsgZ2V0U2VjcmV0IH0gZnJvbSBcIi4uLy4uL21pc2MvZ2V0U2VjcmV0XCI7XG5pbXBvcnQgeyBJQXJjaGl2ZXMsIFNvdXJjZUNvbmZpZywgUmVtb3RlQ29uZmlnIH0gZnJvbSBcIi4uL0lBcmNoaXZlc1wiO1xuaW1wb3J0IHsgUk9VVElOR19GSUxFLCBnZXRCdWNrZXRCYXNlVXJsLCBwYXJzZUhvc3RlZFVybCwgcGFyc2VCYWNrYmxhemVVcmwsIHBhcnNlUm91dGluZ0RhdGEgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7IEFyY2hpdmVzUmVtb3RlIH0gZnJvbSBcIi4vQXJjaGl2ZXNSZW1vdGVcIjtcbmltcG9ydCB7IEFyY2hpdmVzVXJsIH0gZnJvbSBcIi4vQXJjaGl2ZXNVcmxcIjtcbmltcG9ydCB7IEFyY2hpdmVzQmFja2JsYXplIH0gZnJvbSBcIi4uL2JhY2tibGF6ZVwiO1xuaW1wb3J0IHsgc2hvd0NlcnRUcnVzdE1vZGFsIH0gZnJvbSBcIi4vY2VydFRydXN0TW9kYWxcIjtcblxuZXhwb3J0IGNvbnN0IFJFVFJZX1NUQVJUX0RFTEFZID0gMiAqIDEwMDA7XG5leHBvcnQgY29uc3QgUkVUUllfTUFYX0RFTEFZID0gNSAqIDYwICogMTAwMDtcbmV4cG9ydCBjb25zdCBSRVRSWV9HUk9XVEggPSAxLjU7XG5jb25zdCBBQ0NFU1NfUkVDSEVDS19JTlRFUlZBTCA9IDYwICogMTAwMDtcbmNvbnN0IFNPVVJDRV9GQUlMVVJFX0NPT0xET1dOID0gMzAgKiA2MCAqIDEwMDA7XG4vLyBBZGRlZCB0byBhIGRpc2Nvbm5lY3RlZCBzb3VyY2UncyBsYXRlbmN5OiBpdCBzdGlsbCBzb3J0cyBhbmQgY2FuIHN0aWxsIGJlIHBpY2tlZCwgaXQganVzdCBsYW5kcyBhZnRlciBldmVyeSBjb25uZWN0ZWQgc291cmNlXG5jb25zdCBESVNDT05ORUNURURfTEFURU5DWV9QRU5BTFRZID0gMTAgKiAxMDAwO1xuY29uc3QgUElOR19JTlRFUlZBTCA9IDYwICogMTAwMDtcbmNvbnN0IFBJTkdfSElTVE9SWSA9IDEwO1xuXG5hc3luYyBmdW5jdGlvbiBoYXNCYWNrYmxhemVDcmVkcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIWlzTm9kZSgpKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZ2V0U2VjcmV0KFwiYmFja2JsYXplLmpzb24uYXBwbGljYXRpb25LZXlJZFwiKTtcbiAgICAgICAgYXdhaXQgZ2V0U2VjcmV0KFwiYmFja2JsYXplLmpzb24uYXBwbGljYXRpb25LZXlcIik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBPbmUgc291cmNlIG9mIGEgUmVtb3RlQ29uZmlnLCBhcyBhIHVzYWJsZSBJQXJjaGl2ZXMuIFJlYWRzIGZhbGwgYmFjayB0byB0aGUgcHVibGljLVVSTCBmb3JtIHdoZW4gd2UgZG9uJ3QgaGF2ZSBBUEkgYWNjZXNzOyB3cml0ZXMgYWx3YXlzIGF0dGVtcHQgdGhlIEFQSSAoc28gYWNjZXNzIGdyYW50ZWQgbGF0ZXIgaXMgcGlja2VkIHVwIG9uIHRoZSBuZXh0IHdyaXRlKS4gV2hlbiBhIGNhbGwgZmFpbHMgd2hpbGUgdGhlIFdlYlNvY2tldCBpcyBkb3duLCBub3RlRmFpbHVyZSBzdGFydHMgYSBiYWNrZ3JvdW5kIHJlY29ubmVjdCBsb29wIHdpdGggYSByYW1waW5nIGRlbGF5IC0gaXQgbmV2ZXIgYmxvY2tzIGNhbGxlcnMsIGl0IGp1c3Qga2VlcHMgdHJ5aW5nIHNvIHRoZSBjb25uZWN0aW9uIGV2ZW50dWFsbHkgY29tZXMgYmFjay4gU291cmNlcyB3aXRob3V0IGEgV2ViU29ja2V0IChiYWNrYmxhemUsIFVSTC1mb3JtLCBvdXIgb3duIGxvY2FsIHNlcnZlcikgcmVwb3J0IGFsd2F5cy1jb25uZWN0ZWQ6IHRoZXkncmUgbGFzdC1yZXNvcnQgc291cmNlcyB3aGVyZSB0aHJvd2luZyBpcyBmaW5lLlxuZXhwb3J0IGNsYXNzIFNvdXJjZVdyYXBwZXIge1xuICAgIHB1YmxpYyBhcGk/OiBJQXJjaGl2ZXM7XG4gICAgcHVibGljIHVybD86IEFyY2hpdmVzVXJsO1xuICAgIHB1YmxpYyB3cml0ZUJsb2NrZWQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZW1vdGU/OiBBcmNoaXZlc1JlbW90ZTtcbiAgICBwcml2YXRlIGRpc3Bvc2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSByZWNvbm5lY3RSdW5uaW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhY2Nlc3NDYWNoZT86IHsgaGFzQWNjZXNzOiBib29sZWFuOyB0aW1lOiBudW1iZXIgfTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjb25maWc6IFNvdXJjZUNvbmZpZyxcbiAgICAgICAgLy8gZmFsc2UgZm9yIHNob3J0LWxpdmVkIHByb2JlIGluc3RhbmNlcywgd2hpY2ggbXVzdCBuZXZlciBsZWF2ZSBhIHJldHJ5IGxvb3AgYmVoaW5kXG4gICAgICAgIHByaXZhdGUgYmFja2dyb3VuZDogYm9vbGVhbixcbiAgICApIHsgfVxuXG4gICAgLyoqIENvbmZpZyB1cGRhdGVzIHJvdXRpbmVseSBqdXN0IG1vdmUgYSBzb3VyY2UncyB2YWxpZCB3aW5kb3cgKHRoZSBsYXN0IHdpbmRvdyBleHRlbmRzIGZvcmV2ZXIsIHRoZW4gZ2V0cyByZWR1Y2VkIHdoZW4gYSBuZXcgZW50cnkgaXMgYXBwZW5kZWQpLiBUaGUgd3JhcHBlciBzdXJ2aXZlcyB0aGF0OiBvbmx5IHRoZSB3aW5kb3cgY2hhbmdlcywga2VlcGluZyB0aGUgY29ubmVjdGlvbiwgcGluZ3MsIGFuZCBsYXRlbmN5IGhpc3RvcnkuICovXG4gICAgcHVibGljIHVwZGF0ZVZhbGlkV2luZG93KHZhbGlkV2luZG93OiBbbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XG4gICAgICAgIGxldCBvbGQgPSB0aGlzLmNvbmZpZy52YWxpZFdpbmRvdztcbiAgICAgICAgaWYgKG9sZFswXSA9PT0gdmFsaWRXaW5kb3dbMF0gJiYgb2xkWzFdID09PSB2YWxpZFdpbmRvd1sxXSkgcmV0dXJuO1xuICAgICAgICBjb25zb2xlLmxvZyhgVmFsaWQgd2luZG93IGNoYW5nZWQgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IFske29sZC5qb2luKFwiLCBcIil9XSAtPiBbJHt2YWxpZFdpbmRvdy5qb2luKFwiLCBcIil9XWApO1xuICAgICAgICB0aGlzLmNvbmZpZy52YWxpZFdpbmRvdyA9IHZhbGlkV2luZG93O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgY3JlYXRlKGNvbmZpZzogU291cmNlQ29uZmlnLCBvcHRpb25zPzogeyBiYWNrZ3JvdW5kPzogYm9vbGVhbjsgcmVhZE9ubHk/OiBib29sZWFuIH0pOiBQcm9taXNlPFNvdXJjZVdyYXBwZXI+IHtcbiAgICAgICAgbGV0IHdyYXBwZXIgPSBuZXcgU291cmNlV3JhcHBlcihjb25maWcsIG9wdGlvbnM/LmJhY2tncm91bmQgIT09IGZhbHNlKTtcbiAgICAgICAgLy8gQSBwdWJsaWMgYnVja2V0IHNlcnZlcyBldmVyeXRoaW5nIHdlIGNhbiByZWFkIG92ZXIgcGxhaW4gSFRUUFMgR0VUcywgc28gdGhlcmUgaXMgbm8gcmVhc29uIHRvIG9wZW4gYW4gQVBJIGNvbm5lY3Rpb24gKHdoaWNoIGNvc3RzIGEgV2ViU29ja2V0LCBhbmQgYW4gYWNjZXNzIGdyYW50IHdlIGxpa2VseSBkb24ndCBoYXZlKSBqdXN0IHRvIHJlYWQgaXRcbiAgICAgICAgaWYgKG9wdGlvbnM/LnJlYWRPbmx5ICYmIGNvbmZpZy5wdWJsaWMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB3cmFwcGVyLnVybCA9IG5ldyBBcmNoaXZlc1VybChnZXRCdWNrZXRCYXNlVXJsKGNvbmZpZy51cmwpKTtcbiAgICAgICAgICAgIHdyYXBwZXIud3JpdGVCbG9ja2VkID0gYCR7Y29uZmlnLnVybH0gaXMgYmVpbmcgcmVhZCBpbiByZWFkLW9ubHkgbW9kZSAocHVibGljIGJ1Y2tldCwgYW5kIHdlIGFyZSBub3QgaW4gbm9kZSksIHNvIGl0IGlzIGRvd25sb2FkZWQgb3ZlciBwbGFpbiBVUkxzIGFuZCBjYW5ub3QgYmUgd3JpdHRlbi4gUGFzcyBkaXJlY3RDb25uZWN0IHRvIGNyZWF0ZUFyY2hpdmVzIHRvIHVzZSB0aGUgQVBJIGluc3RlYWQuYDtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcudHlwZSA9PT0gXCJiYWNrYmxhemVcIikge1xuICAgICAgICAgICAgaWYgKGF3YWl0IGhhc0JhY2tibGF6ZUNyZWRzKCkpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyLmFwaSA9IG5ldyBBcmNoaXZlc0JhY2tibGF6ZSh7IGJ1Y2tldE5hbWU6IHBhcnNlQmFja2JsYXplVXJsKGNvbmZpZy51cmwpLmJ1Y2tldE5hbWUsIHB1YmxpYzogY29uZmlnLnB1YmxpYywgaW1tdXRhYmxlOiBjb25maWcuaW1tdXRhYmxlLCBhbGxvd2VkT3JpZ2luczogY29uZmlnLmFsbG93ZWRPcmlnaW5zIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGUoKSkge1xuICAgICAgICAgICAgICAgIHdyYXBwZXIud3JpdGVCbG9ja2VkID0gYE5vIGJhY2tibGF6ZSBjcmVkZW50aWFscyBmb3IgJHtjb25maWcudXJsfS4gUHJvdmlkZSBiYWNrYmxhemUuanNvbi5hcHBsaWNhdGlvbktleUlkIGFuZCBiYWNrYmxhemUuanNvbi5hcHBsaWNhdGlvbktleSB2aWEgZ2V0U2VjcmV0IHRvIGVuYWJsZSBBUEkgYWNjZXNzLmA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyYXBwZXIud3JpdGVCbG9ja2VkID0gYEJyb3dzZXJzIGNhbm5vdCB3cml0ZSB0byBiYWNrYmxhemUgKGJ1Y2tldCAke2NvbmZpZy51cmx9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXdyYXBwZXIuYXBpICYmIGNvbmZpZy5wdWJsaWMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlci51cmwgPSBuZXcgQXJjaGl2ZXNVcmwoZ2V0QnVja2V0QmFzZVVybChjb25maWcudXJsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBBIGJ1Y2tldCBob3N0ZWQgYnkgb3VyIG93biBwcm9jZXNzIGlzIHJlYWNoZWQgdGhlIHNhbWUgd2F5IGFzIGFueSBvdGhlcjogb3ZlciB0aGUgQVBJLCB0byBvdXIgb3duIHBvcnRcbiAgICAgICAgd3JhcHBlci5yZW1vdGUgPSBuZXcgQXJjaGl2ZXNSZW1vdGUoeyB1cmw6IGNvbmZpZy51cmwsIHdhaXRGb3JBY2Nlc3M6IGZhbHNlLCBzb3VyY2VDb25maWc6IGNvbmZpZyB9KTtcbiAgICAgICAgd3JhcHBlci5hcGkgPSB3cmFwcGVyLnJlbW90ZTtcbiAgICAgICAgaWYgKGNvbmZpZy5wdWJsaWMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB3cmFwcGVyLnVybCA9IG5ldyBBcmNoaXZlc1VybChnZXRCdWNrZXRCYXNlVXJsKGNvbmZpZy51cmwpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVidWdOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIC8vIFRoZSBzYW1lIFVSTCBjYW4gYXBwZWFyIGFzIG11bHRpcGxlIHNvdXJjZXMgKGRpZmZlcmVudCByb3V0ZXMgLyB2YWxpZCB3aW5kb3dzKSwgc28gdGhlIGRpc3Rpbmd1aXNoaW5nIHNsaWNlIGlzIHBhcnQgb2YgdGhlIG5hbWVcbiAgICAgICAgbGV0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBsZXQgcm91dGUgPSB0aGlzLmNvbmZpZy5yb3V0ZTtcbiAgICAgICAgaWYgKHJvdXRlKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGByb3V0ZSBbJHtyb3V0ZVswXX0sICR7cm91dGVbMV19KWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBbc3RhcnQsIGVuZF0gPSB0aGlzLmNvbmZpZy52YWxpZFdpbmRvdztcbiAgICAgICAgaWYgKHN0YXJ0ICE9PSAwIHx8IGVuZCAhPT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgIGxldCBzdGFydFRleHQgPSBzdGFydCA9PT0gMCAmJiBcIjBcIiB8fCBmb3JtYXREYXRlVGltZURldGFpbGVkKHN0YXJ0KTtcbiAgICAgICAgICAgIGxldCBlbmRUZXh0ID0gZW5kID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAmJiBcImZvcmV2ZXJcIiB8fCBmb3JtYXREYXRlVGltZURldGFpbGVkKGVuZCk7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGB2YWxpZFdpbmRvdyBbJHtzdGFydFRleHR9LCAke2VuZFRleHR9XWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgc291cmNlICR7dGhpcy5jb25maWcudXJsfSR7cGFydHMubGVuZ3RoICYmIGAgKCR7cGFydHMuam9pbihcIiwgXCIpfSlgIHx8IFwiXCJ9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5yZW1vdGUpIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGUuaXNDb25uZWN0ZWQoKTtcbiAgICB9XG5cbiAgICAvKiogQSBzb3VyY2Ugd2hvc2Ugd2luZG93IGhhcyBwYXNzZWQgaXMgbmV2ZXIgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gKHNlZSB0aGUgd2luZG93IGNoZWNrcyBpbiBBcmNoaXZlc0NoYWluKSwgYW5kIGFuIGludGVybWVkaWF0ZSBvbmx5IGV4aXN0cyBmb3IgdGhlIG1pbnV0ZXMgb2YgYSBkZXBsb3kgc3dpdGNob3ZlciAtIG9uIGVpdGhlciwgYmVpbmcgdW5yZWFjaGFibGUgaXMgZXhwZWN0ZWQsIG5vdCBhIHByb2JsZW0gdG8gcmVwb3J0LiAqL1xuICAgIHByaXZhdGUgaXNDb25uZWN0aW9uUHJvYmxlbVdvcnRoUmVwb3J0aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jb25maWcuaW50ZXJtZWRpYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy52YWxpZFdpbmRvd1sxXSA+IERhdGUubm93KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb29sZG93blVudGlsID0gMDtcbiAgICAvKiogQSBzb3VyY2UgdGhhdCBmYWlsZWQgd2hpbGUgZGlzY29ubmVjdGVkIGlzIHNraXBwZWQgYnkgY2FsbGVycyBmb3IgU09VUkNFX0ZBSUxVUkVfQ09PTERPV04gLSBidXQgb25seSB3aGlsZSBzb21lIG90aGVyIHNvdXJjZSBjYW4gc2VydmUgdGhlIHJlcXVlc3QuIFdoZW4gbm90aGluZyBlbHNlIGlzIHVzYWJsZSwgY2FsbGVycyBpZ25vcmUgdGhpcyBhbmQgdHJ5IGl0IGFueXdheSwgc28gYSB0b3RhbCBvdXRhZ2Ugc3RpbGwgcmV0cmllcyBldmVyeSB0aW1lLiAqL1xuICAgIHB1YmxpYyBpc09uQ29vbGRvd24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIDwgdGhpcy5jb29sZG93blVudGlsO1xuICAgIH1cblxuICAgIC8qKiBDYWxsIGFmdGVyIGEgcmVxdWVzdCBmYWlsZWQgd2hpbGUgaXNDb25uZWN0ZWQoKSB3YXMgZmFsc2U6IHB1dHMgdGhlIHNvdXJjZSBvbiBjb29sZG93biBhbmQgc3RhcnRzIChpZiBub3QgYWxyZWFkeSBydW5uaW5nKSB0aGUgYmFja2dyb3VuZCByZWNvbm5lY3QgbG9vcC4gTmV2ZXIgYmxvY2tzIC0gdGhlIGZhaWxlZCByZXF1ZXN0IHN0aWxsIHRocm93cy4gKi9cbiAgICBwdWJsaWMgbm90ZUZhaWx1cmUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkIHx8IHRoaXMuaXNDb25uZWN0ZWQoKSkgcmV0dXJuO1xuICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKG5vdyA+PSB0aGlzLmNvb2xkb3duVW50aWwgJiYgdGhpcy5pc0Nvbm5lY3Rpb25Qcm9ibGVtV29ydGhSZXBvcnRpbmcoKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IGNvbm5lY3QgdG8gc3RvcmFnZSAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OyBza2lwcGluZyBpdCB1bnRpbCAke2Zvcm1hdERhdGVUaW1lRGV0YWlsZWQobm93ICsgU09VUkNFX0ZBSUxVUkVfQ09PTERPV04pfSAobm93ICR7Zm9ybWF0RGF0ZVRpbWVEZXRhaWxlZChub3cpfSkgdW5sZXNzIG5vIG90aGVyIHNvdXJjZSBjYW4gc2VydmUgdGhlIHJlcXVlc3RgKTtcbiAgICAgICAgICAgIC8vIEluIGEgYnJvd3NlciB0aGlzIGlzIG9mdGVuIGFuIHVudHJ1c3RlZCAoc2VsZi1zaWduZWQpIGNlcnRpZmljYXRlIHRoZSB1c2VyIGhhc24ndCBhY2NlcHRlZCB5ZXQgLSBvZmZlciB0aGVtIHRoZSB0cnVzdCBmbG93IChhIG5vLW9wIGluIE5vZGUsIGFuZCBzaG93biBhdCBtb3N0IG9uY2UgcGVyIHNlcnZlcilcbiAgICAgICAgICAgIHNob3dDZXJ0VHJ1c3RNb2RhbCh0aGlzLmNvbmZpZy51cmwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29vbGRvd25VbnRpbCA9IG5vdyArIFNPVVJDRV9GQUlMVVJFX0NPT0xET1dOO1xuICAgICAgICBpZiAoIXRoaXMuYmFja2dyb3VuZCB8fCB0aGlzLnJlY29ubmVjdFJ1bm5pbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RSdW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgdm9pZCB0aGlzLnJlY29ubmVjdExvb3AoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlY29ubmVjdExvb3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCByZXRyeURlbGF5ID0gUkVUUllfU1RBUlRfREVMQVk7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBhd2FpdCBkZWxheShyZXRyeURlbGF5KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSkgYnJlYWs7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIEFueSBjYWxsIHJlLWVzdGFibGlzaGVzIHRoZSBXZWJTb2NrZXQ7IHRoZSByZXN1bHQgZG9lc24ndCBtYXR0ZXJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW90ZT8uZ2V0SW5mbyhST1VUSU5HX0ZJTEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIEV2ZW4gYSBmYWlsaW5nIGNhbGwgKGUuZy4gYWNjZXNzIGRlbmllZCkgcHJvdmVzIHRoZSBjb25uZWN0aW9uIGlzIGJhY2tcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSBicmVhaztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3Rpb25Qcm9ibGVtV29ydGhSZXBvcnRpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBJbiB0aGlzIGNhc2UsIEknbSBqdXN0IHNob3dpbmcgdGhlIG1lc3NhZ2UgYmVjYXVzZSB0aGUgY2FsbCBzdGFjayBpcyBhbG1vc3QgYWx3YXlzIGNvbXBsZXRlbHkgdW5pbnRlcmVzdGluZy5cbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IGNvbm5lY3QgdG8gc3RvcmFnZSAke3RoaXMuZ2V0RGVidWdOYW1lKCl9LCByZXRyeWluZyBpbiAke01hdGgucm91bmQocmV0cnlEZWxheSAvIDEwMDApfXMuICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2UgPz8gZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRyeURlbGF5ID0gTWF0aC5taW4oUkVUUllfTUFYX0RFTEFZLCByZXRyeURlbGF5ICogUkVUUllfR1JPV1RIKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlY29ubmVjdFJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb29sZG93blVudGlsID0gMDtcbiAgICAgICAgY29uc29sZS5sb2coYFJlY29ubmVjdGVkIHRvIHN0b3JhZ2UgJHt0aGlzLmdldERlYnVnTmFtZSgpfSwgY2xlYXJpbmcgaXRzIGNvb2xkb3duYCk7XG4gICAgfVxuXG4gICAgLy8gRm9yIGhvc3RlZCBzb3VyY2VzOiBjYWNoZWQgYWNjZXNzIGNoZWNrLCBzbyByZWFkcyBrbm93IHdoZXRoZXIgdG8gdXNlIHRoZSBBUEkgb3IgdGhlIHB1YmxpYyBVUkwgZm9ybS4gQWNjZXNzLCBvbmNlIHNlZW4sIGlzIGFzc3VtZWQgdG8gc3RpY2s7IG5vLWFjY2VzcyBpcyByZS1jaGVja2VkIHBlcmlvZGljYWxseSAodGhlIGNoZWNrIGFsc28gcmVnaXN0ZXJzIG91ciBhY2Nlc3MgcmVxdWVzdCBzZXJ2ZXItc2lkZSwgd2hpY2ggbG9ncyB0aGUgZ3JhbnQgbGluaykuXG4gICAgcHJpdmF0ZSBhc3luYyBjaGVja0FjY2VzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IHJlbW90ZSA9IHRoaXMucmVtb3RlO1xuICAgICAgICBpZiAoIXJlbW90ZSkgcmV0dXJuICEhdGhpcy5hcGk7XG4gICAgICAgIGxldCBjYWNoZWQgPSB0aGlzLmFjY2Vzc0NhY2hlO1xuICAgICAgICBpZiAoY2FjaGVkICYmIChjYWNoZWQuaGFzQWNjZXNzIHx8IERhdGUubm93KCkgLSBjYWNoZWQudGltZSA8IEFDQ0VTU19SRUNIRUNLX0lOVEVSVkFMKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5oYXNBY2Nlc3M7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHdhaXRpbmcgPSBhd2FpdCByZW1vdGUud2FpdGluZ0ZvckFjY2VzcygpO1xuICAgICAgICB0aGlzLmFjY2Vzc0NhY2hlID0geyBoYXNBY2Nlc3M6ICF3YWl0aW5nLCB0aW1lOiBEYXRlLm5vdygpIH07XG4gICAgICAgIGlmICh3YWl0aW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIGFjY2VzcyB0byBzdG9yYWdlIGFjY291bnQgZm9yICR7dGhpcy5jb25maWcudXJsfS4gJHt3YWl0aW5nLnJlYXNvbn0gUmVhZGluZyB2aWEgdGhlIHB1YmxpYyBVUkwgZm9ybSB3aGVyZSBwb3NzaWJsZS5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXdhaXRpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlYWQ8VD4ocnVuOiAoYXJjaGl2ZXM6IElBcmNoaXZlcykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBpZiAodGhpcy5hcGkgJiYgYXdhaXQgdGhpcy5jaGVja0FjY2VzcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcnVuKHRoaXMuYXBpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51cmwpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBydW4odGhpcy51cmwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFwaSkge1xuICAgICAgICAgICAgLy8gTm8gcHVibGljIFVSTCBmb3JtIC0gbGV0IHRoZSBBUEkgY2FsbCB0aHJvdyBpdHMgb3duIGVycm9yICh3aGljaCBpbmNsdWRlcyB0aGUgYWNjZXNzIGluc3RydWN0aW9ucyBmb3IgaG9zdGVkIHNvdXJjZXMpXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcnVuKHRoaXMuYXBpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBoYXMgbm8gQVBJIGFjY2VzcyBhbmQgbm8gcHVibGljIFVSTCBmb3JtIChwdWJsaWM6IGZhbHNlKTogJHt0aGlzLmNvbmZpZy51cmx9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlYWRSb3V0aW5nQ29uZmlnKCk6IFByb21pc2U8UmVtb3RlQ29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5yZWFkKGFyY2hpdmVzID0+IGFyY2hpdmVzLmdldChST1VUSU5HX0ZJTEUpKTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgcGFyc2VSb3V0aW5nRGF0YShkYXRhKSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhhc1dyaXRlQWNjZXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAodGhpcy53cml0ZUJsb2NrZWQgfHwgIXRoaXMuYXBpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFwaS5oYXNXcml0ZUFjY2VzcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGluZ3M6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSBwaW5nVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGxvZ2dlZENvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFN0YXJ0cyBtZWFzdXJpbmcgdGhpcyBzb3VyY2UncyBsYXRlbmN5LCB3aGljaCBkZWNpZGVzIHdoaWNoIGhvc3RzIHJlYWRzIGFuZCB2YXJpYWJsZS1zaGFyZCB3cml0ZXMgcHJlZmVyLiBIb3N0ZWQgcmVtb3RlcyBwaW5nIG92ZXIgdGhlaXIgQVBJIGNvbm5lY3Rpb247IFVSTC1vbmx5IHNvdXJjZXMgKHJlYWQtb25seSBtb2RlLCBiYWNrYmxhemUgd2l0aG91dCBjcmVkZW50aWFscykgcHJvYmUgb3ZlciBwbGFpbiBIVFRQUyBpbnN0ZWFkIC0gdGhlIGNsaWVudCBORUVEUyB0aGVpciBsYXRlbmN5IHRvbywgb3IgaXQgY2Fubm90IHJhbmsgdGhlIGhvc3RzIGl0IHJlYWRzIGZyb20uIE91ciBvd24gbG9jYWwgc2VydmVyIGNvdW50cyBhcyAwOyBvbmx5IHNvdXJjZXMgd2l0aCBuZWl0aGVyIGZvcm0gc3RheSBJbmZpbml0eS4gKi9cbiAgICBwdWJsaWMgc3RhcnRQaW5naW5nKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5waW5nVGltZXIgfHwgdGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgICAvLyBBIHNvdXJjZSB3aG9zZSB3aW5kb3cgaGFzIHBhc3NlZCBuZXZlciByZWNlaXZlcyByZWFkcyBvciB3cml0ZXMgLSBtZWFzdXJpbmcgaXQgaXMgcG9pbnRsZXNzIHRyYWZmaWNcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnZhbGlkV2luZG93WzFdIDw9IERhdGUubm93KCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgcmVtb3RlID0gdGhpcy5yZW1vdGU7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuICAgICAgICBsZXQgcHJvYmU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gICAgICAgIGlmIChyZW1vdGUpIHtcbiAgICAgICAgICAgIHByb2JlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlbW90ZS5waW5nKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHVybCkge1xuICAgICAgICAgICAgLy8gQSAxLWJ5dGUgcmFuZ2VkIHJlYWQgb2YgdGhlIHJvdXRpbmcgZmlsZSB0cmFuc2ZlcnMgZXNzZW50aWFsbHkgbm90aGluZywgYW5kIHVubGlrZSBhbiBleHBsaWNpdCBPUFRJT05TIHJlcXVlc3QgaXQgbmVlZHMgbm8gQ09SUyBwcmVmbGlnaHQgKGJhY2tibGF6ZSdzIENPUlMgcnVsZXMgb25seSBhbGxvdyBkb3dubG9hZCBvcGVyYXRpb25zKSAtIHNvIGl0IHdvcmtzIGZyb20gdGhlIGJyb3dzZXIsIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgVVJMLW9ubHkgbW9kZSBydW5zXG4gICAgICAgICAgICBwcm9iZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB1cmwuZ2V0SW5mbyhST1VUSU5HX0ZJTEUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWVhc3VyZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHByb2JlKCk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAvLyBBIGZhaWxlZCBwaW5nIGlzIGFsc28gb3VyIGVhcmxpZXN0IGRvd24tZGV0ZWN0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5sb2dnZWRDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlZENvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENvbm5lY3RlZCB0byBzdG9yYWdlICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0gKCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zKWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5waW5ncy5wdXNoKERhdGUubm93KCkgLSBzdGFydCk7XG4gICAgICAgICAgICBpZiAodGhpcy5waW5ncy5sZW5ndGggPiBQSU5HX0hJU1RPUlkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpbmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZvaWQgbWVhc3VyZSgpO1xuICAgICAgICB0aGlzLnBpbmdUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHZvaWQgbWVhc3VyZSgpO1xuICAgICAgICB9LCBQSU5HX0lOVEVSVkFMKTtcbiAgICAgICAgKHRoaXMucGluZ1RpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICB9XG5cbiAgICAvKiogU2VlZHMgdGhlIGxhdGVuY3kgZXN0aW1hdGUgYmVmb3JlIHRoZSBmaXJzdCBwaW5nIGxhbmRzIChlLmcuIGZyb20gdGhlIGluaXRpYWwgcm91dGluZyBmZXRjaCksIHNvIHZhcmlhYmxlLXNoYXJkIHBpY2tpbmcgaGFzIHNvbWV0aGluZyBpbW1lZGlhdGVseS4gUmVhbCBwaW5ncyB0YWtlIG92ZXIgZnJvbSB0aGUgZmlyc3QgbWVhc3VyZW1lbnQgb24uICovXG4gICAgcHVibGljIHNlZWRMYXRlbmN5KG1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGluZ3MubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMucGluZ3MucHVzaChtcyk7XG4gICAgfVxuXG4gICAgLyoqIE1lZGlhbiBvZiB0aGUgcmVjZW50IHBpbmdzIChBUEkgb3IgVVJMLWZvcm0sIHdoaWNoZXZlciB0aGlzIHNvdXJjZSBtZWFzdXJlcyksIHBsdXMgRElTQ09OTkVDVEVEX0xBVEVOQ1lfUEVOQUxUWSB3aGlsZSB0aGUgc291cmNlIGlzIGRpc2Nvbm5lY3RlZCAtIHNvIGEgZG93biBzb3VyY2Ugc3RpbGwgc29ydHMgYW5kIGNhbiBzdGlsbCBiZSBwaWNrZWQsIGp1c3QgYWZ0ZXIgZXZlcnkgY29ubmVjdGVkIG9uZS4gU291cmNlcyB3aXRoIG5vIG1lYXN1cmVtZW50cyB5ZXQgc29ydCBsYXN0IChJbmZpbml0eSksIGV4Y2VwdCBvdXIgb3duIGluLXByb2Nlc3Mgc2VydmVyLCB3aGljaCBpcyB0aGUgYmVzdCBwb3NzaWJsZSB0YXJnZXQgKDApLiAqL1xuICAgIHB1YmxpYyBnZXRMYXRlbmN5KCk6IG51bWJlciB7XG4gICAgICAgIC8vIE91ciBvd24gaW4tcHJvY2VzcyBzZXJ2ZXI6IGhvc3RlZCAodHlwZSByZW1vdGUpLCBhcGkgcHJlc2VudCwgYnV0IG5vIHJlbW90ZSBjb25uZWN0aW9uIC0gaXQgSVMgdXNcbiAgICAgICAgaWYgKCF0aGlzLnJlbW90ZSAmJiB0aGlzLmNvbmZpZy50eXBlID09PSBcInJlbW90ZVwiICYmIHRoaXMuYXBpKSByZXR1cm4gMDtcbiAgICAgICAgaWYgKCF0aGlzLnBpbmdzLmxlbmd0aCkgcmV0dXJuIEluZmluaXR5O1xuICAgICAgICBsZXQgc29ydGVkID0gWy4uLnRoaXMucGluZ3NdO1xuICAgICAgICBzb3J0KHNvcnRlZCwgeCA9PiB4KTtcbiAgICAgICAgbGV0IG1lZGlhbiA9IHNvcnRlZFtNYXRoLmZsb29yKHNvcnRlZC5sZW5ndGggLyAyKV07XG4gICAgICAgIGlmICghdGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVkaWFuICsgRElTQ09OTkVDVEVEX0xBVEVOQ1lfUEVOQUxUWTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVkaWFuO1xuICAgIH1cblxuICAgIC8qKiB3cml0ZUJsb2NrZWQgZnJvbSBtaXNzaW5nIGJhY2tibGF6ZSBjcmVkZW50aWFscyBpcyByZS1jaGVja2VkIG9uIGV2ZXJ5IHdyaXRlIGF0dGVtcHQ6IHRoZSBzZWNyZXQgbG9hZCBjYW4gZmFpbCBUUkFOU0lFTlRMWSAoZWFybHkgc3RhcnR1cCwgYSBmaWxlLXJlYWQgaGljY3VwKSwgYW5kIG9uZSBmYWlsZWQgbG9hZCBtdXN0IG5ldmVyIHBlcm1hbmVudGx5IHN0b3AgdGhpcyBwcm9jZXNzIGZyb20gd3JpdGluZyB0byB0aGUgYnVja2V0LiBUaGUgb3RoZXIgd3JpdGVCbG9ja2VkIHJlYXNvbnMgKHJlYWQtb25seSBtb2RlLCBicm93c2VycykgYXJlIHN0YXRpYyBwcm9wZXJ0aWVzIG9mIHRoZSBwcm9jZXNzLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIHJlLWNoZWNrLiAqL1xuICAgIHB1YmxpYyBhc3luYyByZWNoZWNrV3JpdGVCbG9ja2VkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMud3JpdGVCbG9ja2VkIHx8IHRoaXMuYXBpIHx8IHRoaXMuZGlzcG9zZWQpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnR5cGUgIT09IFwiYmFja2JsYXplXCIpIHJldHVybjtcbiAgICAgICAgaWYgKCFhd2FpdCBoYXNCYWNrYmxhemVDcmVkcygpKSByZXR1cm47XG4gICAgICAgIHRoaXMuYXBpID0gbmV3IEFyY2hpdmVzQmFja2JsYXplKHsgYnVja2V0TmFtZTogcGFyc2VCYWNrYmxhemVVcmwodGhpcy5jb25maWcudXJsKS5idWNrZXROYW1lLCBwdWJsaWM6IHRoaXMuY29uZmlnLnB1YmxpYywgaW1tdXRhYmxlOiB0aGlzLmNvbmZpZy5pbW11dGFibGUsIGFsbG93ZWRPcmlnaW5zOiB0aGlzLmNvbmZpZy5hbGxvd2VkT3JpZ2lucyB9KTtcbiAgICAgICAgY29uc29sZS5sb2coYEJhY2tibGF6ZSBjcmVkZW50aWFscyBhcmUgbm93IGF2YWlsYWJsZSBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfSwgdW5ibG9ja2luZyB3cml0ZXMgKHdhcyBibG9ja2VkOiAke3RoaXMud3JpdGVCbG9ja2VkfSlgKTtcbiAgICAgICAgdGhpcy53cml0ZUJsb2NrZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIFdyaXRlcyBhbHdheXMgZ28gdGhyb3VnaCB0aGUgQVBJLCBzbyBhIHBlcm1pc3Npb24gZXJyb3IgdGhyb3dzIHRvIHRoZSBjYWxsZXIgb24gZXZlcnkgd3JpdGUgKGFuZCBhY2Nlc3MgZ3JhbnRlZCBpbiB0aGUgbWVhbnRpbWUgaXMgcGlja2VkIHVwIGF1dG9tYXRpY2FsbHkpLiAqL1xuICAgIHB1YmxpYyBhc3luYyB3cml0ZTxUPihydW46IChhcmNoaXZlczogSUFyY2hpdmVzKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGlmICh0aGlzLndyaXRlQmxvY2tlZCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWNoZWNrV3JpdGVCbG9ja2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JpdGVCbG9ja2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdyaXRlcyBhcmUgYmxvY2tlZCBvbiB0aGlzIHNvdXJjZTogJHt0aGlzLndyaXRlQmxvY2tlZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXBpID0gdGhpcy5hcGk7XG4gICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBoYXMgbm8gQVBJIGFjY2Vzcywgc28gaXQgY2Fubm90IGFjY2VwdCB3cml0ZXM6ICR7dGhpcy5jb25maWcudXJsfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBydW4oYXBpKTtcbiAgICAgICAgdGhpcy5hY2Nlc3NDYWNoZSA9IHsgaGFzQWNjZXNzOiB0cnVlLCB0aW1lOiBEYXRlLm5vdygpIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5waW5nVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5waW5nVGltZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
309
+ /* _JS_SOURCE_HASH = "e5b81497fc8d404365e0e1ff04ba4c2527d27279097699ed26b2ad67830e6c6d"; */
@@ -96,7 +96,7 @@ async function requireAccess(account) {
96
96
  let verdict = await (0, machines_1.isMachineAccepted)({ machineId, ip, domain: rootDomain });
97
97
  if (!verdict.accepted) {
98
98
  throw new Error(`${exports.STORAGE_ACCESS_DENIED} ${verdict.reason}`
99
- + ` Machine ${machineId}, address ${ip}, account ${JSON.stringify(account)}.`);
99
+ + ` Machine ${machineId} was calling from ${ip}, for account ${JSON.stringify(account)}.`);
100
100
  }
101
101
  return machineId;
102
102
  }
@@ -154,7 +154,6 @@ class RemoteStorageControllerBase {
154
154
  ip,
155
155
  hasAccess: false,
156
156
  reason: verdict.reason,
157
- addMachineCommand: `yarn addmachine ${rootDomain} ${machineId} ${ip} git`,
158
157
  };
159
158
  }
160
159
  return { machineId, ip, hasAccess: true, trustedMachines: await (0, machines_1.getTrustedMachines)() };
@@ -543,5 +542,5 @@ exports.RemoteStorageController = SocketFunction_1.SocketFunction.register(expor
543
542
  noClientHooks: true,
544
543
  noDefaultHooks: true,
545
544
  }));
546
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxtRUFBZ0U7QUFFaEUsNkRBQTREO0FBQzVELHlFQUFrRztBQUNsRyxpRUFBbUU7QUFDbkUsaUZBQThFO0FBQzlFLG1EQUF3RDtBQUN4RCxrREFBbUg7QUFDbkgsNENBQW1JO0FBQ25JLGlEQUF1RTtBQUN2RSw2REFLOEI7QUFDOUIsK0NBQTREO0FBQzVELGlEQUE2RTtBQUM3RSwrREFBdUc7QUFFdkcsNkNBQW9EO0FBQ3BELHVFQUFvRTtBQUNwRSwrQ0FBOEo7QUFDOUosK0NBQXFGO0FBRXJGLDZDQUFpRjtBQUdwRSxRQUFBLHlCQUF5QixHQUFHLGtDQUFrQyxDQUFDO0FBQy9ELFFBQUEsb0JBQW9CLEdBQUcsc0JBQXNCLENBQUM7QUFDOUMsUUFBQSx5QkFBeUIsR0FBRywyQ0FBMkMsQ0FBQztBQUN4RSxRQUFBLHFCQUFxQixHQUFHLHVDQUF1QyxDQUFDO0FBRTdFLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQVksR0FBRyxFQUFFLENBQUM7QUFDM0MsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDbEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQXdCL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7QUFFM0Msd1pBQXdaO0FBQ3haLE1BQU0sYUFBYSxHQUE4QjtJQUM3QyxHQUFHLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxFQUFFLGlDQUFpQztJQUN2RSxHQUFHLEVBQUUsMkJBQTJCLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFdBQVc7SUFDM0csSUFBSSxFQUFFLFlBQVksRUFB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QUNoQixDQUFDLEVBQ0YsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNILGFBQWEsRUFBRSxJQUFJO0lBQ25CLGNBQWMsRUFBRSxJQUFJO0NBQ3ZCLENBQUMsQ0FDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBTb2NrZXRGdW5jdGlvbkhvb2sgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uVHlwZXNcIjtcbmltcG9ydCB7IGdldE5vZGVJZElQIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbm9kZUNhY2hlXCI7XG5pbXBvcnQgeyBzZXRIVFRQUmVzdWx0SGVhZGVycywgZ2V0Q3VycmVudEhUVFBSZXF1ZXN0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FsbEhUVFBIYW5kbGVyXCI7XG5pbXBvcnQgeyBwZXJmb3JtTG9jYWxDYWxsIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FsbE1hbmFnZXJcIjtcbmltcG9ydCB7IFJlcXVpcmVDb250cm9sbGVyIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9yZXF1aXJlL1JlcXVpcmVDb250cm9sbGVyXCI7XG5pbXBvcnQgeyB0aW1lSW5NaW51dGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBnZXRDb21tb25OYW1lLCBnZXRNYWNoaW5lSWQsIGdldE93bk1hY2hpbmVJZCwgdmFsaWRhdGVDZXJ0aWZpY2F0ZSwgdmVyaWZ5IH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvY2VydHNcIjtcbmltcG9ydCB7IEFyY2hpdmVGaWxlSW5mbywgQXJjaGl2ZXNDb25maWcsIEFyY2hpdmVzU3luY1N0YXR1cywgRmluZENvbmZpZywgU291cmNlQ29uZmlnLCBJTU1VVEFCTEVfQ0FDSEVfVElNRSB9IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IFJPVVRJTkdfRklMRSwgZ2V0Um91dGUsIHJvdXRlQ29udGFpbnMgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7XG4gICAgZmluZEJ1Y2tldFN0b3JlLCBnZXRTdG9yZSwgZ2V0QnVja2V0U3RvcmVzLCByZWFkQnVja2V0SW50ZXJuYWwsIHdyaXRlUm91dGluZ0NvbmZpZyxcbiAgICBnZXRCdWNrZXRBcmNoaXZlc0NvbmZpZywgYnVja2V0U3luY1N0YXR1cywgZGVidWdCdWNrZXRJbmRleFRvdGFscywgQWN0aXZlQnVja2V0SW5mbyxcbiAgICBkZWJ1Z0xpc3RBY2NvdW50QnVja2V0cywgU2VydmVyQnVja2V0SW5mbyxcbiAgICBkZWJ1Z0dldEFjdGl2ZUJ1Y2tldCwgYWN0aXZhdGVCdWNrZXQsIGdldEFjdGl2ZUJ1Y2tldEtleXMsXG59IGZyb20gXCIuL3N0b3JhZ2VTZXJ2ZXJTdGF0ZVwiO1xuaW1wb3J0IHsgZGVidWdDbGVhckFjY291bnRXcml0ZVN0YXRzIH0gZnJvbSBcIi4vYWNjZXNzU3RhdHNcIjtcbmltcG9ydCB7IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcsIGFzc2VydFdyaXRlc0FsbG93ZWQgfSBmcm9tIFwiLi9zZXJ2ZXJDb25maWdcIjtcbmltcG9ydCB7IGdldFRydXN0ZWRNYWNoaW5lcywgaXNNYWNoaW5lQWNjZXB0ZWQsIE1hY2hpbmVTdGF0ZSB9IGZyb20gXCIuLi8uLi9zZWN1cml0eS9tYWNoaW5lcy9tYWNoaW5lc1wiO1xuaW1wb3J0IHsgQmxvYlN0b3JlIH0gZnJvbSBcIi4vYmxvYlN0b3JlXCI7XG5pbXBvcnQgeyBnZXRSb3V0aW5nRmlsZVJlc3VsdCB9IGZyb20gXCIuL2J1Y2tldERpc2tcIjtcbmltcG9ydCB7IFN0b3JhZ2VDbGllbnRDb250cm9sbGVyIH0gZnJvbSBcIi4vc3RvcmFnZUNsaWVudENvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHRyYWNrQWNjZXNzLCB0cmFja0FjY2Vzc0NhbGwsIGdldEFjY2Vzc1RvdGFscywgcmVhZEFjY2Vzc1N1bW1hcmllcywgY2xlYXJBY2NvdW50QWNjZXNzU3RhdHMsIEFjY2Vzc1RvdGFscywgQWNjZXNzU3VtbWFyeVN0YXRlIH0gZnJvbSBcIi4vYWNjZXNzU3RhdHNcIjtcbmltcG9ydCB7IGxvZ011dGF0aW9uLCBsaXN0U3RvcmFnZUxvZ0ZpbGVzLCByZWFkU3RvcmFnZUxvZ0ZpbGUgfSBmcm9tIFwiLi9zdG9yYWdlTG9nc1wiO1xuaW1wb3J0IHsgTG9nRmlsZUluZm8gfSBmcm9tIFwiLi4vU3RyZWFtaW5nTG9nc1wiO1xuaW1wb3J0IHsgYXNzZXJ0VmFsaWROYW1lLCBhc3NlcnRWYWxpZFBhdGgsIGFzc2VydFZhbGlkQXJncyB9IGZyb20gXCIuL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgU3VtbWFyeUVudHJ5IH0gZnJvbSBcIi4uLy4uL3RyZWVTdW1tYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCBSRU1PVEVfU1RPUkFHRV9DTEFTU19HVUlEID0gXCJSZW1vdGVTdG9yYWdlQ29udHJvbGxlci1iN2U0MmE5MVwiO1xuZXhwb3J0IGNvbnN0IFNUT1JBR0VfQVVUSF9QVVJQT1NFID0gXCJyZW1vdGVTdG9yYWdlLWF1dGgtMVwiO1xuZXhwb3J0IGNvbnN0IFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQgPSBcIlJFTU9URV9TVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEX2NmMmY3YjFlXCI7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9BQ0NFU1NfREVOSUVEID0gXCJSRU1PVEVfU1RPUkFHRV9BQ0NFU1NfREVOSUVEXzlkODFhNGMwXCI7XG5cbmNvbnN0IEFVVEhfVElNRV9XSU5ET1cgPSB0aW1lSW5NaW51dGUgKiAxMDtcbmNvbnN0IEFDQ0VTU19DSEVDS19TTE9XX1RJTUUgPSA1MDtcbmNvbnN0IE1BWF9TRVNTSU9OUyA9IDEwMCAqIDEwMDA7XG5jb25zdCBNQVhfUkVRVUVTVFNfUEVSX0lQID0gNTA7XG5cbmV4cG9ydCB0eXBlIEF1dGhUb2tlbkRhdGEgPSB7XG4gICAgcHVycG9zZTogc3RyaW5nO1xuICAgIHRpbWU6IG51bWJlcjtcbiAgICBzZXJ2ZXI6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBBdXRoVG9rZW4gPSB7XG4gICAgY2VydFBlbTogc3RyaW5nO1xuICAgIGlzc3VlclBlbTogc3RyaW5nO1xuICAgIHNpZ25hdHVyZTogc3RyaW5nO1xuICAgIGRhdGE6IEF1dGhUb2tlbkRhdGE7XG59O1xuZXhwb3J0IHR5cGUgQWNjZXNzU3RhdGUgPSB7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICBoYXNBY2Nlc3M6IGJvb2xlYW47XG4gICAgLy8gV2h5IG5vdCwgYW5kIHdoYXQgdG8gcnVuIGFib3V0IGl0LCB3aGVuIHRoZXJlIGlzIG5vIGFjY2Vzcy5cbiAgICByZWFzb24/OiBzdHJpbmc7XG4gICAgYWRkTWFjaGluZUNvbW1hbmQ/OiBzdHJpbmc7XG4gICAgLy8gRXZlcnl0aGluZyB0aGUgcmVwbyB0cnVzdHMsIHdoZW4gdGhlcmUgaXMuXG4gICAgdHJ1c3RlZE1hY2hpbmVzPzogTWFjaGluZVN0YXRlW107XG59O1xuXG5jb25zdCBzZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbi8vIFdlIG11c3QgbmV2ZXIgc2VydmUgYW55dGhpbmcgdGhhdCBjYW4gYmUgZXZhbHVhdGVkIGFzIGNvZGUgKGh0bWwsIGpzIC0gYW5kIHN2Zywgd2hpY2ggY2FuIGVtYmVkIDxzY3JpcHQ+IGFuZCBydW5zIGl0IHdoZW4gdmlzaXRlZCBhcyBhIGRvY3VtZW50KS4gT3RoZXJ3aXNlIGEgdXNlciBjb3VsZCBob3N0IGEgZmlsZSBhbmQsIGJ5IHZpc2l0aW5nIGl0LCBydW4gaXQgb24gb3VyIGRvbWFpbiAtIGdpdmluZyB0aGVtIGFjY2VzcyB0byBhbGwgb2Ygb3VyIGtleXMgYW5kIGNvb2tpZXMuIFBERiBzdGF5czogYnJvd3NlciBQREYgdmlld2VycyBydW4gYW55IGVtYmVkZGVkIFBERiBzY3JpcHRpbmcgaW4gYSBzYW5kYm94IHdpdGggbm8gYWNjZXNzIHRvIHRoZSBzZXJ2aW5nIG9yaWdpbidzIGNvb2tpZXMgb3IgRE9NLlxuY29uc3QgQ09OVEVOVF9UWVBFUzogeyBbZXh0OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBjc3M6IFwidGV4dC9jc3M7IGNoYXJzZXQ9dXRmLThcIiwganNvbjogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgdHh0OiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIiwgcG5nOiBcImltYWdlL3BuZ1wiLCBqcGc6IFwiaW1hZ2UvanBlZ1wiLCBqcGVnOiBcImltYWdlL2pwZWdcIiwgZ2lmOiBcImltYWdlL2dpZlwiLFxuICAgIHdlYnA6IFwiaW1hZ2Uvd2VicFwiLCBtcDQ6IFwidmlkZW8vbXA0XCIsIHdlYm06IFwidmlkZW8vd2VibVwiLFxuICAgIG1wMzogXCJhdWRpby9tcGVnXCIsIHdhdjogXCJhdWRpby93YXZcIiwgcGRmOiBcImFwcGxpY2F0aW9uL3BkZlwiLFxufTtcblxuY29uc3QgY29ubmVjdGVkQ2xpZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuZnVuY3Rpb24gdHJhY2tDYWxsZXIoKTogdm9pZCB7XG4gICAgbGV0IG5vZGVJZCA9IFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpLm5vZGVJZDtcbiAgICBpZiAoY29ubmVjdGVkQ2xpZW50cy5oYXMobm9kZUlkKSkgcmV0dXJuO1xuICAgIGNvbm5lY3RlZENsaWVudHMuYWRkKG5vZGVJZCk7XG4gICAgU29ja2V0RnVuY3Rpb24ub25OZXh0RGlzY29ubmVjdChub2RlSWQsICgpID0+IHtcbiAgICAgICAgY29ubmVjdGVkQ2xpZW50cy5kZWxldGUobm9kZUlkKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyb2FkY2FzdFJvdXRpbmdDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGBCcm9hZGNhc3Rpbmcgcm91dGluZyBjb25maWcgY2hhbmdlIHRvICR7Y29ubmVjdGVkQ2xpZW50cy5zaXplfSBjb25uZWN0ZWQgY2xpZW50c2ApO1xuICAgIGZvciAobGV0IG5vZGVJZCBvZiBbLi4uY29ubmVjdGVkQ2xpZW50c10pIHtcbiAgICAgICAgdm9pZCBTdG9yYWdlQ2xpZW50Q29udHJvbGxlci5ub2Rlc1tub2RlSWRdLnJvdXRpbmdDb25maWdDaGFuZ2VkKCkuY2F0Y2goKCkgPT4geyB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldENhbGxlck1hY2hpbmVJZCgpOiBzdHJpbmcge1xuICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICBsZXQgbWFjaGluZUlkID0gc2Vzc2lvbnMuZ2V0KGNhbGxlci5ub2RlSWQpO1xuICAgIGlmICghbWFjaGluZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEfSBDYWxsIGF1dGhlbnRpY2F0ZSBmaXJzdCAoY29ubmVjdGlvbiAke2NhbGxlci5ub2RlSWR9KWApO1xuICAgIH1cbiAgICByZXR1cm4gbWFjaGluZUlkO1xufVxuZnVuY3Rpb24gZ2V0Q2FsbGVySVAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0Tm9kZUlkSVAoU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCkubm9kZUlkKTtcbn1cbmZ1bmN0aW9uIGlzQWRtaW4obWFjaGluZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWFjaGluZUlkID09PSBnZXRPd25NYWNoaW5lSWQoZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpLnJvb3REb21haW4pO1xufVxuZnVuY3Rpb24gcmVxdWlyZUFkbWluKCk6IHN0cmluZyB7XG4gICAgbGV0IG1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgIGlmICghaXNBZG1pbihtYWNoaW5lSWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX0FDQ0VTU19ERU5JRUR9IEFkbWluIGNvbW1hbmRzIG11c3QgYmUgcnVuIGZyb20gdGhlIHN0b3JhZ2UgbWFjaGluZSBpdHNlbGYgKGNhbGxlciBtYWNoaW5lICR7bWFjaGluZUlkfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cbi8qKiBXaG8gbWF5IHRhbGsgdG8gdGhpcyBzZXJ2ZXIsIGRlY2lkZWQgYnkgdGhlIHNpZ25lZCBhdXRob3JpemVkX2tleXMgcmVwbyByYXRoZXIgdGhhbiBieSBhbnl0aGluZ1xuICAgIHRoaXMgc2VydmVyIGtlZXBzIGZvciBpdHNlbGYuXG5cbiAgICBUaGUgaWRlbnRpdHkgaXMgdGhlIHNhbWUgbWFjaGluZSBpZCBpdCBhbHdheXMgd2FzIC0gYSBtYWNoaW5lIHRoYXQgd2FzIHRydXN0ZWQgaGVyZSBiZWZvcmUgaXNcbiAgICB0cnVzdGVkIHRoZSBtb21lbnQgaXRzIGlkIGlzIGluIHRoZSByZXBvIC0gYnV0IHRoZSByZWNvcmQgb2Ygd2hvIGlzIHRydXN0ZWQgbm93IGxpdmVzIGluIG9uZVxuICAgIHNpZ25lZCBwbGFjZSBzaGFyZWQgYnkgZXZlcnkgbWFjaGluZSwgd2l0aCByZXZvY2F0aW9uIGFuZCBldmVyeXRoaW5nIGVsc2UgdGhhdCBjb21lcyB3aXRoIGl0LlxuICAgIFRoZSBhZGRyZXNzIGlzIGNoZWNrZWQgdG9vLCB3aGljaCB0aGUgdHJ1c3Qgc3RvcmUgaGVyZSBuZXZlciBkaWQuICovXG5hc3luYyBmdW5jdGlvbiByZXF1aXJlQWNjZXNzKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgaWYgKGlzQWRtaW4obWFjaGluZUlkKSkgcmV0dXJuIG1hY2hpbmVJZDtcbiAgICBsZXQgeyByb290RG9tYWluIH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgbGV0IGlwID0gZ2V0Q2FsbGVySVAoKTtcbiAgICBsZXQgdmVyZGljdCA9IGF3YWl0IGlzTWFjaGluZUFjY2VwdGVkKHsgbWFjaGluZUlkLCBpcCwgZG9tYWluOiByb290RG9tYWluIH0pO1xuICAgIGlmICghdmVyZGljdC5hY2NlcHRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHtTVE9SQUdFX0FDQ0VTU19ERU5JRUR9ICR7dmVyZGljdC5yZWFzb259YFxuICAgICAgICAgICAgKyBgIE1hY2hpbmUgJHttYWNoaW5lSWR9LCBhZGRyZXNzICR7aXB9LCBhY2NvdW50ICR7SlNPTi5zdHJpbmdpZnkoYWNjb3VudCl9LmBcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cblxuY2xhc3MgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXJCYXNlIHtcbiAgICBhc3luYyBwaW5nKCk6IFByb21pc2U8e30+IHtcbiAgICAgICAgdHJhY2tDYWxsZXIoKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8vIFNlY3VyZSBiZWNhdXNlIGNvbm5lY3Rpb25zIHVzZSByZWFsIGNlcnRpZmljYXRlcyBvbiByZWFsIGRvbWFpbiBuYW1lcywgc28gVExTIGl0c2VsZiBzdG9wcyBhXG4gICAgLy8gbWFuLWluLXRoZS1taWRkbGUuIE90aGVyd2lzZSBvbmUgd291bGQgYmUgcG9zc2libGU6IHRoZSBzaWduZWQgdG9rZW4gb25seSBuYW1lcyB0aGUgc2VydmVyJ3NcbiAgICAvLyBkb21haW4sIHNvIGEgbWlkZGxlbWFuIG9uIHRoZSBwYXRoIHRvIHRoYXQgZG9tYWluIGNvdWxkIHJldXNlIGl0IGFnYWluc3QgdGhlIHJlYWwgc2VydmVyLlxuICAgIGFzeW5jIGF1dGhlbnRpY2F0ZSh0b2tlbjogQXV0aFRva2VuKTogUHJvbWlzZTx7IG1hY2hpbmVJZDogc3RyaW5nOyBpcDogc3RyaW5nIH0+IHtcbiAgICAgICAgbGV0IHsgZG9tYWluLCBwb3J0LCByb290RG9tYWluIH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICAgICAgdmVyaWZ5KHRva2VuLmNlcnRQZW0sIHRva2VuLnNpZ25hdHVyZSwgdG9rZW4uZGF0YSk7XG4gICAgICAgIGxldCB7IHB1cnBvc2UsIHRpbWUsIHNlcnZlciB9ID0gdG9rZW4uZGF0YTtcbiAgICAgICAgaWYgKHB1cnBvc2UgIT09IFNUT1JBR0VfQVVUSF9QVVJQT1NFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGggdG9rZW4gcHVycG9zZSBpcyAke0pTT04uc3RyaW5naWZ5KHB1cnBvc2UpfSwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShTVE9SQUdFX0FVVEhfUFVSUE9TRSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKERhdGUubm93KCkgLSB0aW1lKSA+IEFVVEhfVElNRV9XSU5ET1cpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXV0aCB0b2tlbiB0aW1lIGlzIHRvbyBmYXIgZnJvbSB0aGUgc2VydmVyIHRpbWUgKHRva2VuICR7dGltZX0sIHNlcnZlciAke0RhdGUubm93KCl9LCBhbGxvd2VkIGRyaWZ0ICR7QVVUSF9USU1FX1dJTkRPV31tcylgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG9rZW5Eb21haW4gPSBzZXJ2ZXIuc3BsaXQoXCI6XCIpWzBdO1xuICAgICAgICBpZiAodG9rZW5Eb21haW4gIT09IGRvbWFpbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoIHRva2VuIGlzIGZvciBzZXJ2ZXIgJHtKU09OLnN0cmluZ2lmeShzZXJ2ZXIpfSwgYnV0IHRoaXMgc2VydmVyIGlzICR7SlNPTi5zdHJpbmdpZnkoYCR7ZG9tYWlufToke3BvcnR9YCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVDZXJ0aWZpY2F0ZShyb290RG9tYWluLCB0b2tlbi5jZXJ0UGVtLCB0b2tlbi5pc3N1ZXJQZW0pO1xuICAgICAgICBsZXQgbWFjaGluZUlkID0gZ2V0TWFjaGluZUlkKGdldENvbW1vbk5hbWUodG9rZW4uaXNzdWVyUGVtKSwgcm9vdERvbWFpbik7XG4gICAgICAgIHNlc3Npb25zLnNldChjYWxsZXIubm9kZUlkLCBtYWNoaW5lSWQpO1xuICAgICAgICB3aGlsZSAoc2Vzc2lvbnMuc2l6ZSA+IE1BWF9TRVNTSU9OUykge1xuICAgICAgICAgICAgbGV0IG9sZGVzdCA9IHNlc3Npb25zLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgICAgICBpZiAob2xkZXN0ID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgICAgICAgc2Vzc2lvbnMuZGVsZXRlKG9sZGVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbWFjaGluZUlkLCBpcDogZ2V0Q2FsbGVySVAoKSB9O1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjYWxsZXIgbWF5IHVzZSB0aGlzIGFjY291bnQsIGFuZCBpZiBub3QsIGV4YWN0bHkgd2hhdCB0byBydW4gdG8gY2hhbmdlIHRoYXQuXG5cbiAgICAgICAgVGhlcmUgaXMgbm90aGluZyB0byByZXF1ZXN0IGFuZCBub3RoaW5nIHRvIGdyYW50IGhlcmUgYW55IG1vcmU6IHRydXN0IGxpdmVzIGluIHRoZSBzaWduZWRcbiAgICAgICAgYXV0aG9yaXplZF9rZXlzIHJlcG8sIHNvIHRoZSBhbnN3ZXIgaXMgXCJydW4gYWRkbWFjaGluZSBpbiB0aGF0IHJlcG9cIiwgd2hpY2ggb25seSBzb21lYm9keVxuICAgICAgICBob2xkaW5nIHRoZSBoYXJkd2FyZSBrZXkgY2FuIGRvLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBY2Nlc3NTdGF0ZShjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPEFjY2Vzc1N0YXRlPiB7XG4gICAgICAgIGFzc2VydFZhbGlkTmFtZShjb25maWcuYWNjb3VudCwgXCJhY2NvdW50XCIpO1xuICAgICAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgICAgIGxldCBpcCA9IGdldENhbGxlcklQKCk7XG4gICAgICAgIGxldCB7IHJvb3REb21haW4gfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICAgICAgaWYgKGlzQWRtaW4obWFjaGluZUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWFjaGluZUlkLCBpcCwgaGFzQWNjZXNzOiB0cnVlLCB0cnVzdGVkTWFjaGluZXM6IGF3YWl0IGdldFRydXN0ZWRNYWNoaW5lcygpIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZlcmRpY3QgPSBhd2FpdCBpc01hY2hpbmVBY2NlcHRlZCh7IG1hY2hpbmVJZCwgaXAsIGRvbWFpbjogcm9vdERvbWFpbiB9KTtcbiAgICAgICAgaWYgKCF2ZXJkaWN0LmFjY2VwdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1hY2hpbmVJZCxcbiAgICAgICAgICAgICAgICBpcCxcbiAgICAgICAgICAgICAgICBoYXNBY2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogdmVyZGljdC5yZWFzb24sXG4gICAgICAgICAgICAgICAgYWRkTWFjaGluZUNvbW1hbmQ6IGB5YXJuIGFkZG1hY2hpbmUgJHtyb290RG9tYWlufSAke21hY2hpbmVJZH0gJHtpcH0gZ2l0YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbWFjaGluZUlkLCBpcCwgaGFzQWNjZXNzOiB0cnVlLCB0cnVzdGVkTWFjaGluZXM6IGF3YWl0IGdldFRydXN0ZWRNYWNoaW5lcygpIH07XG4gICAgfVxuXG4gICAgLyoqIEFkbWluIChzbyBvbmx5IHRoaXMgbWFjaGluZSdzIG93biBwcm9jZXNzZXMgY2FuIGNhbGwgaXQpOiB0aGUgYnVja2V0cyB0aGlzIHByb2Nlc3MgaGFzIGxvYWRlZC4gQSBkZXBsb3kgc3VjY2Vzc29yIGFza3MgaXRzIHByZWRlY2Vzc29yIGZvciB0aGlzLCBzbyBpdCBhY3RpdmF0ZXMgZXhhY3RseSB0aGUgYnVja2V0cyB0aGF0IGFyZSBpbiB1c2UgaW5zdGVhZCBvZiBldmVyeSBidWNrZXQgb24gZGlzay4gKi9cbiAgICBhc3luYyBhZG1pbkxpc3RBY3RpdmVCdWNrZXRzKCk6IFByb21pc2U8eyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9W10+IHtcbiAgICAgICAgcmV0dXJuIGdldEFjdGl2ZUJ1Y2tldEtleXMoKTtcbiAgICB9XG5cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImdldFwiKVxuICAgIGFzeW5jIGdldDIoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnOyByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfTsgaW50ZXJuYWw/OiBib29sZWFuOyBpbmNsdWRlVG9tYnN0b25lcz86IGJvb2xlYW47IGluY2x1ZGVNYXJrZWQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKGNvbmZpZy5wYXRoID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIC8vIFRoZSByb3V0aW5nIGZpbGUgbGl2ZXMgb3V0c2lkZSBldmVyeSBzdG9yZSBhbmQgZXZlbiBvdXRzaWRlIHRoZSBidWNrZXQgKGl0IGlzIHdoYXQgQ1JFQVRFUyBpdCksIHNvIGl0IGlzIHJlYWQgc3RyYWlnaHQgb2ZmIHRoZSBkaXNrIC0gYWJzZW50IG1lYW5zIHVuZGVmaW5lZCwgZXhhY3RseSBsaWtlIGFueSBmaWxlIHJlYWRcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBnZXRSb3V0aW5nRmlsZVJlc3VsdChjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuaW50ZXJuYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZWFkQnVja2V0SW50ZXJuYWwoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5nZXQyKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcInNldFwiKVxuICAgIGFzeW5jIHNldChjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgZGF0YTogQnVmZmVyOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgbGFzdE1vZGlmaWVkPzogbnVtYmVyOyBmb3JjZVNldEltbXV0YWJsZT86IGJvb2xlYW47IGludGVybmFsPzogYm9vbGVhbjsgdW5kZWxldGU/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgY2FsbGVyID0gY2FsbGVySWQoKTtcbiAgICAgICAgLy8gQ29waWVkIGJlY2F1c2UgdGhlIHdpcmUgaGFuZHMgdXMgYSBwbGFpbiBVaW50OEFycmF5IHZpZXcsIG5vdCBhIHJlYWwgQnVmZmVyXG4gICAgICAgIGxldCBkYXRhID0gQnVmZmVyLmZyb20oY29uZmlnLmRhdGEpO1xuICAgICAgICBpZiAoY29uZmlnLnBhdGggPT09IFJPVVRJTkdfRklMRSkge1xuICAgICAgICAgICAgLy8gVGhlIHN0b3JlIHRoZSBjYWxsZXIgc2VsZWN0ZWQgb3ducyB0aGlzIGZpbGU6IGl0IGFwcGxpZXMgaXQsIGVuZm9yY2VzIHRoZSB2ZXJzaW9uIHJ1bGUsIGFuZCBpdHMgcGVlcnMgcHVsbCBpdCBmcm9tIHRoZXJlXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgd3JpdGVSb3V0aW5nQ29uZmlnKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSwgY29uZmlnLnNvdXJjZUNvbmZpZy5uYW1lLCBkYXRhLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLnNldCh7IC4uLmNvbmZpZywgZGF0YSB9KSk7XG4gICAgICAgIGxvZ011dGF0aW9uKHsgb3A6IGNvbmZpZy51bmRlbGV0ZSAmJiBcInVuZGVsZXRlXCIgfHwgXCJzZXRcIiwgYWNjb3VudDogY29uZmlnLmFjY291bnQsIGJ1Y2tldE5hbWU6IGNvbmZpZy5idWNrZXROYW1lLCBzdG9yZTogY29uZmlnLnNvdXJjZUNvbmZpZy5uYW1lLCBwYXRoOiBjb25maWcucGF0aCwgc2l6ZTogZGF0YS5sZW5ndGgsIHdyaXRlVGltZTogY29uZmlnLmxhc3RNb2RpZmllZCwgY2FsbGVySWQ6IGNhbGxlciwgaW50ZXJuYWw6IGNvbmZpZy5pbnRlcm5hbCB9KTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJkZWxcIilcbiAgICBhc3luYyBkZWwoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnOyBsYXN0TW9kaWZpZWQ/OiBudW1iZXI7IGludGVybmFsPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGNhbGxlciA9IGNhbGxlcklkKCk7XG4gICAgICAgIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLmRlbChjb25maWcpKTtcbiAgICAgICAgbG9nTXV0YXRpb24oeyBvcDogXCJkZWxcIiwgYWNjb3VudDogY29uZmlnLmFjY291bnQsIGJ1Y2tldE5hbWU6IGNvbmZpZy5idWNrZXROYW1lLCBzdG9yZTogY29uZmlnLnNvdXJjZUNvbmZpZy5uYW1lLCBwYXRoOiBjb25maWcucGF0aCwgd3JpdGVUaW1lOiBjb25maWcubGFzdE1vZGlmaWVkLCBjYWxsZXJJZDogY2FsbGVyLCBpbnRlcm5hbDogY29uZmlnLmludGVybmFsIH0pO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcIm1vdmVcIilcbiAgICBhc3luYyBtb3ZlKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgZnJvbVBhdGg6IHN0cmluZzsgdG9QYXRoOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgY2FsbGVyID0gY2FsbGVySWQoKTtcbiAgICAgICAgLy8gYXNzZXJ0VmFsaWRBcmdzIG9ubHkga25vd3MgdGhlIHdlbGwta25vd24gYHBhdGhgIGZpZWxkLCBzbyB0aGUgdHdvIHBhdGhzIG9mIGEgbW92ZSBhcmUgdmFsaWRhdGVkIGhlcmVcbiAgICAgICAgYXNzZXJ0VmFsaWRQYXRoKGNvbmZpZy5mcm9tUGF0aCk7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChjb25maWcudG9QYXRoKTtcbiAgICAgICAgYXdhaXQgd2l0aFN0b3JlKGNvbmZpZywgc3RvcmUgPT4gc3RvcmUubW92ZShjb25maWcpKTtcbiAgICAgICAgbG9nTXV0YXRpb24oeyBvcDogXCJtb3ZlXCIsIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSwgc3RvcmU6IGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgcGF0aDogY29uZmlnLmZyb21QYXRoLCB0b1BhdGg6IGNvbmZpZy50b1BhdGgsIGNhbGxlcklkOiBjYWxsZXIgfSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBAdHJhY2tBY2Nlc3NDYWxsKFwiZ2V0SW5mb1wiKVxuICAgIGFzeW5jIGdldEluZm8oY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnOyBpbmNsdWRlVG9tYnN0b25lcz86IGJvb2xlYW4gfSk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKGNvbmZpZy5wYXRoID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBnZXRSb3V0aW5nRmlsZVJlc3VsdChjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiB7IHdyaXRlVGltZTogcmVzdWx0LndyaXRlVGltZSwgc2l6ZTogcmVzdWx0LnNpemUgfSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLmdldEluZm8oY29uZmlnKSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBAdHJhY2tBY2Nlc3NDYWxsKFwiZmluZEluZm9cIilcbiAgICBhc3luYyBmaW5kSW5mbyhjb25maWc6IEZpbmRDb25maWcgJiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwcmVmaXg6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWcgfSk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLmZpbmRJbmZvKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImdldENoYW5nZXNBZnRlclwiKVxuICAgIGFzeW5jIGdldENoYW5nZXNBZnRlcjIoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgdGltZTogbnVtYmVyOyByb3V0ZXM/OiBbbnVtYmVyLCBudW1iZXJdW107IGludGVybmFsPzogYm9vbGVhbiB9KTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JlKGNvbmZpZywgc3RvcmUgPT4gc3RvcmUuZ2V0Q2hhbmdlc0FmdGVyMihjb25maWcpKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldEFyY2hpdmVzQ29uZmlnKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9KTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgZ2V0QnVja2V0QXJjaGl2ZXNDb25maWcoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGxpc3RCdWNrZXRzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8U2VydmVyQnVja2V0SW5mb1tdPiB7XG4gICAgICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZGVidWdMaXN0QWNjb3VudEJ1Y2tldHMoY29uZmlnLmFjY291bnQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gVGhlIGFjY2VzcyBob29rIChhbmQgdGhlIHN0b3JhZ2UgaXQgaW5pdGlhbGl6ZXMpIHJ1bnMgYmVmb3JlIHRoaXMsIHNvIGEgbGFyZ2UgZ2FwIGJldHdlZW4gdGhpcyBhbmQgdGhlIGNhbGxlcidzIHRpbWluZyBpcyB0aGUgaG9va1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGxpc3RCdWNrZXRzKCR7Y29uZmlnLmFjY291bnR9KSBjYWxsIGJvZHkgdG9vayAke0RhdGUubm93KCkgLSBzdGFydH1tc2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBUaGUgbGl2ZSwgaW4tbWVtb3J5IHN0YXRlIG9mIG9uZSBidWNrZXQsIG9yIGEgc3RyaW5nIHNheWluZyB3aHkgaXQgaXMgdW5hdmFpbGFibGUuIEFuc3dlcmVkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGRpc2ssIHNvIGl0IGlzIGNoZWFwIC0gYnV0IG9ubHkgd29ya3Mgd2hpbGUgdGhlIGJ1Y2tldCBpcyBsb2FkZWQgaGVyZS4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0QWN0aXZlQnVja2V0KGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9KTogUHJvbWlzZTxBY3RpdmVCdWNrZXRJbmZvIHwgc3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBkZWJ1Z0dldEFjdGl2ZUJ1Y2tldChjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgIH1cbiAgICAvKiogTG9hZHMgYSBidWNrZXQgdGhhdCBleGlzdHMgb24gdGhpcyBzZXJ2ZXIgaW50byBtZW1vcnkgKHN0YXJ0aW5nIGl0cyBzeW5jaHJvbml6YXRpb24pIGFuZCByZXR1cm5zIGl0cyBsaXZlIHN0YXRlLCBvciBhIHN0cmluZyBzYXlpbmcgd2h5IGl0IGNvdWxkIG5vdCBiZSBsb2FkZWQuICovXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGFjdGl2YXRlQnVja2V0KGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9KTogUHJvbWlzZTxBY3RpdmVCdWNrZXRJbmZvIHwgc3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBhY3RpdmF0ZUJ1Y2tldChjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgIH1cbiAgICAvKiogWmVyb2VzIHRoZSB3cml0ZSBzdGF0aXN0aWNzIGxpc3RCdWNrZXRzIHJlcG9ydHMgYW5kIHRoZSBpbi1tZW1vcnkgYWNjZXNzIHN0YXRpc3RpY3MsIGZvciBldmVyeSBidWNrZXQgaW4gdGhlIGFjY291bnQuICovXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGNsZWFyV3JpdGVTdGF0cyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPHsgY2xlYXJlZEJ1Y2tldHM6IG51bWJlciB9PiB7XG4gICAgICAgIGNsZWFyQWNjb3VudEFjY2Vzc1N0YXRzKGNvbmZpZy5hY2NvdW50KTtcbiAgICAgICAgcmV0dXJuIHsgY2xlYXJlZEJ1Y2tldHM6IGRlYnVnQ2xlYXJBY2NvdW50V3JpdGVTdGF0cyhjb25maWcuYWNjb3VudCkgfTtcbiAgICB9XG4gICAgLyoqIEluLW1lbW9yeSB0b3RhbHMgcGVyIG9wZXJhdGlvbiB0eXBlIHNpbmNlIHN0YXJ0dXAgKG9yIHRoZSBsYXN0IGNsZWFyV3JpdGVTdGF0cykuICovXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldEFjY2Vzc1N0YXRzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8QWNjZXNzVG90YWxzPiB7XG4gICAgICAgIHJldHVybiBnZXRBY2Nlc3NUb3RhbHMoY29uZmlnLmFjY291bnQpO1xuICAgIH1cbiAgICAvKiogQSBwYXRoIGJyZWFrZG93biBvZiBvbmUgb3BlcmF0aW9uJ3MgYWNjZXNzZXMgKG9wZXJhdGlvbiBuYW1lcyBjb21lIGZyb20gZ2V0QWNjZXNzU3RhdHMpLiBtYXhDb3VudCBpcyBwYXNzZWQgc3RyYWlnaHQgdG8gVHJlZVN1bW1hcnkuZ2V0U3VtbWFyaWVzLiB3ZWlnaHRCeVNpemUgaXMgaWdub3JlZCBmb3IgY291bnQtb25seSBvcGVyYXRpb25zLCB3aGljaCByZXR1cm4gdGhlaXIgY291bnQgYnJlYWtkb3duLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBY2Nlc3NTdW1tYXJpZXMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgb3BlcmF0aW9uOiBzdHJpbmc7IG1heENvdW50OiBudW1iZXI7IHdlaWdodEJ5U2l6ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8U3VtbWFyeUVudHJ5PEFjY2Vzc1N1bW1hcnlTdGF0ZT5bXT4ge1xuICAgICAgICByZXR1cm4gcmVhZEFjY2Vzc1N1bW1hcmllcyhjb25maWcpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0SW5kZXhJbmZvKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9KTogUHJvbWlzZTx7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlcjsgc291cmNlczogeyBkZWJ1Z05hbWU6IHN0cmluZzsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyIH1bXSB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBkZWJ1Z0J1Y2tldEluZGV4VG90YWxzKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRTeW5jU3RhdHVzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9KTogUHJvbWlzZTxBcmNoaXZlc1N5bmNTdGF0dXM+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJ1Y2tldFN5bmNTdGF0dXMoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIG9wZXJhdGlvbi1sb2cgZmlsZXMgVEhJUyBzZXJ2ZXIgaG9sZHMgKGV2ZXJ5IHNlcnZlciBsb2dzIGl0cyBvd24gb3BlcmF0aW9ucyAtIGFzayBlYWNoIG9uZTsgc2VlIGxpc3RBbGxTZXJ2ZXJMb2dGaWxlcyBpbiBjcmVhdGVBcmNoaXZlcykuICovXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGxpc3RMb2dGaWxlcyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPExvZ0ZpbGVJbmZvW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGxpc3RTdG9yYWdlTG9nRmlsZXMoKTtcbiAgICB9XG4gICAgLyoqIE9uZSBsb2cgZmlsZSdzIGJ5dGVzLCBhbHdheXMgTFo0LWNvbXByZXNzZWQgKGEgbGl2ZSBmaWxlIGlzIGZsdXNoZWQgYW5kIGNvbXByZXNzZWQgaW4gbWVtb3J5IGJlZm9yZSBzZW5kaW5nKS4gRGVjb2RlIHdpdGggZGVjb2RlTG9nRmlsZS4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0TG9nRmlsZShjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZWFkU3RvcmFnZUxvZ0ZpbGUoY29uZmlnLm5hbWUpO1xuICAgIH1cblxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBzdGFydExhcmdlRmlsZShjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuOyBub0NoZWNrcz86IGJvb2xlYW47IGludGVybmFsPzogYm9vbGVhbiB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgc3RvcmUgPSBmaW5kQnVja2V0U3RvcmUoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lLCBjb25maWcuc291cmNlQ29uZmlnKTtcbiAgICAgICAgLy8gVGhlIHN0b3JlIHZhbGlkYXRlcyB0aGUgd3JpdGUgaGVyZSwgYmVmb3JlIGFueSBieXRlcyBtb3ZlIChzZWUgQmxvYlN0b3JlLnN0YXJ0TGFyZ2VVcGxvYWQpIC0gYSBsYXJnZSBmaWxlIGlzIGEgc2V0LCBhbmQgaXRzIFNldENvbmZpZyBkZWNpZGVzIHdoZXRoZXIgaXQgaXMgZXZlbiBhbGxvd2VkXG4gICAgICAgIGxldCB3cml0ZSA9IHsgcGF0aDogY29uZmlnLnBhdGgsIGxhc3RNb2RpZmllZDogY29uZmlnLmxhc3RNb2RpZmllZCwgZm9yY2VTZXRJbW11dGFibGU6IGNvbmZpZy5mb3JjZVNldEltbXV0YWJsZSwgbm9DaGVja3M6IGNvbmZpZy5ub0NoZWNrcywgaW50ZXJuYWw6IGNvbmZpZy5pbnRlcm5hbCB9O1xuICAgICAgICBsZXQgaWQgPSBhd2FpdCBzdG9yZS5zdGFydExhcmdlVXBsb2FkKHdyaXRlKTtcbiAgICAgICAgLy8gVGhlIHN0b3JlIG5hbWUgcGlucyB0aGUgdXBsb2FkJ3MgcGFydHMgYW5kIGZpbmlzaCB0byB0aGUgc2FtZSBzdG9yZSB0aGUgc3RhcnQgcGlja2VkIChpbi1mbGlnaHQgdXBsb2FkcyBzdXJ2aXZlIGEgYnVja2V0IHJlYnVpbGQ6IHRoZSBwYXJ0IGRhdGEgbGl2ZXMgaW4gdGhhdCBzdG9yZSdzIGZvbGRlciwgd2hpY2ggYSByZWJ1aWx0IHN0b3JlIHN0aWxsIG9wZW5zKVxuICAgICAgICBsYXJnZVVwbG9hZEluZm8uc2V0KGlkLCB7IC4uLndyaXRlLCBhY2NvdW50OiBjb25maWcuYWNjb3VudCwgYnVja2V0TmFtZTogY29uZmlnLmJ1Y2tldE5hbWUsIHN0b3JlTmFtZTogY29uZmlnLnNvdXJjZUNvbmZpZy5uYW1lIH0pO1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICAgIC8qKiBvZmZzZXQgbWFrZXMgdGhlIHBhcnQgd3JpdGUgcG9zaXRpb25hbCAoc2VlIEFyY2hpdmVzRGlzay5hcHBlbmRMYXJnZVVwbG9hZCksIHdoaWNoIGlzIHdoYXQgbGV0cyB0aGUgY2xpZW50IFJFVFJZIGEgZmFpbGVkIHBhcnQgLSBhIHJlLXNlbnQgcGFydCBsYW5kcyBvbiB0aGUgc2FtZSBieXRlcyBpbnN0ZWFkIG9mIGFwcGVuZGluZyB0d2ljZS4gKi9cbiAgICBhc3luYyB1cGxvYWRQYXJ0KGNvbmZpZzogeyB1cGxvYWRJZDogc3RyaW5nOyBkYXRhOiBCdWZmZXI7IG9mZnNldD86IG51bWJlciB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGlmICghaW5mbykgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhcmdlIHVwbG9hZCAke2NvbmZpZy51cGxvYWRJZH1gKTtcbiAgICAgICAgdHJhY2tBY2Nlc3MoeyBhY2NvdW50OiBpbmZvLmFjY291bnQsIG9wZXJhdGlvbjogXCJ1cGxvYWRQYXJ0XCIsIHBhdGg6IGAke2luZm8uYnVja2V0TmFtZX0vJHtpbmZvLnBhdGh9YCwgc2l6ZTogY29uZmlnLmRhdGEubGVuZ3RoIH0pO1xuICAgICAgICBhd2FpdCBnZXRTdG9yZShpbmZvLmFjY291bnQsIGluZm8uYnVja2V0TmFtZSwgaW5mby5zdG9yZU5hbWUpLmFwcGVuZExhcmdlVXBsb2FkKHsgaWQ6IGNvbmZpZy51cGxvYWRJZCwgZGF0YTogQnVmZmVyLmZyb20oY29uZmlnLmRhdGEpLCBvZmZzZXQ6IGNvbmZpZy5vZmZzZXQgfSk7XG4gICAgfVxuICAgIGFzeW5jIGZpbmlzaExhcmdlRmlsZShjb25maWc6IHsgdXBsb2FkSWQ6IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGlmICghaW5mbykgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhcmdlIHVwbG9hZCAke2NvbmZpZy51cGxvYWRJZH1gKTtcbiAgICAgICAgbGFyZ2VVcGxvYWRJbmZvLmRlbGV0ZShjb25maWcudXBsb2FkSWQpO1xuICAgICAgICBsZXQgY2FsbGVyID0gY2FsbGVySWQoKTtcbiAgICAgICAgbGV0IHN0b3JlID0gZ2V0U3RvcmUoaW5mby5hY2NvdW50LCBpbmZvLmJ1Y2tldE5hbWUsIGluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgYXdhaXQgc3RvcmUuZmluaXNoTGFyZ2VVcGxvYWQoeyBpZDogY29uZmlnLnVwbG9hZElkLCBwYXRoOiBpbmZvLnBhdGgsIGxhc3RNb2RpZmllZDogaW5mby5sYXN0TW9kaWZpZWQsIGZvcmNlU2V0SW1tdXRhYmxlOiBpbmZvLmZvcmNlU2V0SW1tdXRhYmxlLCBub0NoZWNrczogaW5mby5ub0NoZWNrcywgaW50ZXJuYWw6IGluZm8uaW50ZXJuYWwgfSk7XG4gICAgICAgIGxldCB3cml0dGVuID0gYXdhaXQgc3RvcmUuZ2V0SW5mbyh7IHBhdGg6IGluZm8ucGF0aCB9KTtcbiAgICAgICAgbG9nTXV0YXRpb24oeyBvcDogXCJzZXRMYXJnZVwiLCBhY2NvdW50OiBpbmZvLmFjY291bnQsIGJ1Y2tldE5hbWU6IGluZm8uYnVja2V0TmFtZSwgc3RvcmU6IGluZm8uc3RvcmVOYW1lLCBwYXRoOiBpbmZvLnBhdGgsIHNpemU6IHdyaXR0ZW4/LnNpemUsIHdyaXRlVGltZTogd3JpdHRlbj8ud3JpdGVUaW1lLCBjYWxsZXJJZDogY2FsbGVyIH0pO1xuICAgIH1cbiAgICAvKiogQmVzdC1lZmZvcnQgY2xlYW51cDogYW4gdW5rbm93biB1cGxvYWQgaGFzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwuICovXG4gICAgYXN5bmMgY2FuY2VsTGFyZ2VGaWxlKGNvbmZpZzogeyB1cGxvYWRJZDogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xuICAgICAgICBsYXJnZVVwbG9hZEluZm8uZGVsZXRlKGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGF3YWl0IGdldFN0b3JlKGluZm8uYWNjb3VudCwgaW5mby5idWNrZXROYW1lLCBpbmZvLnN0b3JlTmFtZSkuY2FuY2VsTGFyZ2VVcGxvYWQoeyBpZDogY29uZmlnLnVwbG9hZElkIH0pO1xuICAgIH1cblxuICAgIC8vIElNUE9SVEFOVDogV2UgY2FuIG5ldmVyIGV4cG9zZSBlbnVtZXJhdGlvbiAobGlzdGluZywgcHJlZml4IHNlYXJjaCwgY2hhbmdlcyBmZWVkcykgb3ZlciB0aGlzIHB1YmxpYyBIVFRQIGVuZHBvaW50IC0gb25seSBleGFjdC1rZXkgcmVhZHMuIEVudW1lcmF0aW9uIHdvdWxkIGJlIGEgbWFzc2l2ZSBzZWN1cml0eSByaXNrIChwdWJsaWMgYnVja2V0cyByZWx5IG9uIHVuZ3Vlc3NhYmxlIGtleXMgc3RheWluZyB1bmd1ZXNzYWJsZSksIGFuZCBjb3VsZCBhbHNvIGNyYXNoIHRoZSBjbGllbnQgYnkgc2VuZGluZyB0aGVtIHRvbyBtdWNoIGRhdGEuIExpc3RpbmdzIGV4aXN0IG9ubHkgb24gdGhlIGF1dGhlbnRpY2F0ZWQgQVBJIChmaW5kSW5mbyBldGMsIGJlaGluZCBhY2NvdW50QWNjZXNzKS5cbiAgICBhc3luYyBodHRwRW50cnkoY29uZmlnPzogeyByZXF1aXJlQ2FsbHM/OiBzdHJpbmdbXTsgY2FjaGVUaW1lPzogbnVtYmVyIH0pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICBsZXQgY2FsbGVyID0gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gZ2V0Q3VycmVudEhUVFBSZXF1ZXN0KCk7XG4gICAgICAgIGxldCBwYXRobmFtZSA9IG5ldyBVUkwocmVxdWVzdD8udXJsIHx8IFwiL1wiLCBcImh0dHBzOi8vbG9jYWxob3N0XCIpLnBhdGhuYW1lO1xuICAgICAgICBpZiAoIXBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvZmlsZS9cIikpIHtcbiAgICAgICAgICAgIGxldCBodG1sID0gYXdhaXQgcGVyZm9ybUxvY2FsQ2FsbCh7XG4gICAgICAgICAgICAgICAgY2FsbGVyLFxuICAgICAgICAgICAgICAgIGNhbGw6IHsgbm9kZUlkOiBjYWxsZXIubm9kZUlkLCBjbGFzc0d1aWQ6IFJlcXVpcmVDb250cm9sbGVyLl9jbGFzc0d1aWQsIGZ1bmN0aW9uTmFtZTogXCJyZXF1aXJlSFRNTFwiLCBhcmdzOiBbY29uZmlnXSB9LFxuICAgICAgICAgICAgfSkgYXMgQnVmZmVyO1xuICAgICAgICAgICAgLy8gV2l0aG91dCB0aGlzIHRoZSBhY2Nlc3MgcGFnZSBpcyBzZXJ2ZWQgd2l0aCBubyBjb250ZW50IHR5cGUsIGFuZCBhIGJyb3dzZXIgdGhhdCBpcyB0b2xkIG5vdCB0byBzbmlmZiBzaW1wbHkgd2lsbCBub3QgcmVuZGVyIGl0XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoaHRtbCwgeyBcIkNvbnRlbnQtVHlwZVwiOiBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJ0cyA9IHBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoeCA9PiB4KS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KTtcbiAgICAgICAgbGV0IGFjY291bnQgPSBwYXJ0c1sxXTtcbiAgICAgICAgbGV0IGJ1Y2tldE5hbWUgPSBwYXJ0c1syXTtcbiAgICAgICAgbGV0IGZpbGVQYXRoID0gcGFydHMuc2xpY2UoMykuam9pbihcIi9cIik7XG4gICAgICAgIGlmICghYWNjb3VudCB8fCAhYnVja2V0TmFtZSB8fCAhZmlsZVBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGJ1Y2tldE5hbWUsIFwiYnVja2V0IG5hbWVcIik7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChmaWxlUGF0aCk7XG4gICAgICAgIGxldCBidWNrZXRTdG9yZXMgPSBhd2FpdCBnZXRCdWNrZXRTdG9yZXMoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0U3RvcmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFYWNoIHN0b3JlJ3MgcG9saWN5IGNvbWVzIGZyb20gaXRzIG93biBjb25maWcsIHdoaWNoIGl0IGhhcyBvbmx5IHJlYWQgb25jZSBpbml0IHJhblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChidWNrZXRTdG9yZXMubWFwKHggPT4geC5zdG9yZS5pbml0KCkpKTtcbiAgICAgICAgbGV0IHBvbGljaWVzID0gYnVja2V0U3RvcmVzLm1hcCh4ID0+ICh7IHN0b3JlOiB4LnN0b3JlLCBwb2xpY3k6IHguc3RvcmUuc3RvcmVDb25maWcuY3VycmVudCgpIH0pKTtcbiAgICAgICAgaWYgKCFwb2xpY2llcy5zb21lKHggPT4geC5wb2xpY3kucHVibGljKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdWNrZXQgaXMgbm90IHB1YmxpYywgc28gaXRzIGZpbGVzIGNhbm5vdCBiZSByZWFkIG92ZXIgcGxhaW4gVVJMczogJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQW5vbnltb3VzIFVSTCByZWFkcyBjYXJyeSBubyBzb3VyY2Ugc2VsZWN0aW9uIC0gdGhlIGZpbGUncyByb3V0ZSBwaWNrcyB0aGUgc3RvcmUsIGFuZCBhIHJvdXRlIG5vIHN0b3JlIGhlcmUgY292ZXJzIGlzIHNpbXBseSBub3QgZm91bmQgKHRoZSByb3V0aW5nIGZpbGUgaXRzZWxmIGxpdmVzIG91dHNpZGUgZXZlcnkgc3RvcmUpXG4gICAgICAgIGxldCBodHRwU3RvcmU6IEJsb2JTdG9yZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGltbXV0YWJsZSA9IGZhbHNlO1xuICAgICAgICBsZXQgaW5mbzogeyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChmaWxlUGF0aCAhPT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICBsZXQgcm91dGUgPSBnZXRSb3V0ZShmaWxlUGF0aCk7XG4gICAgICAgICAgICBsZXQgc2VydmluZyA9IHBvbGljaWVzLmZpbmQoeCA9PiB4LnBvbGljeS5wdWJsaWMgJiYgcm91dGVDb250YWlucyh4LnBvbGljeS5yb3V0ZSwgcm91dGUpKTtcbiAgICAgICAgICAgIGh0dHBTdG9yZSA9IHNlcnZpbmc/LnN0b3JlO1xuICAgICAgICAgICAgaW1tdXRhYmxlID0gISFzZXJ2aW5nPy5wb2xpY3kuaW1tdXRhYmxlO1xuICAgICAgICAgICAgaW5mbyA9IGh0dHBTdG9yZSAmJiBhd2FpdCBodHRwU3RvcmUuZ2V0SW5mbyh7IHBhdGg6IGZpbGVQYXRoIH0pIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZm8gPSBhd2FpdCBnZXRSb3V0aW5nRmlsZVJlc3VsdChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWluZm8gfHwgIWluZm8uc2l6ZSkge1xuICAgICAgICAgICAgdHJhY2tBY2Nlc3MoeyBhY2NvdW50LCBvcGVyYXRpb246IFwiaHR0cEdldFwiLCBwYXRoOiBgJHtidWNrZXROYW1lfS8ke2ZpbGVQYXRofWAsIHNpemU6IDAgfSk7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgc3RhdHVzOiBcIjQwNFwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBleHQgPSBmaWxlUGF0aC5zcGxpdChcIi5cIikucG9wKCkgfHwgXCJcIjtcbiAgICAgICAgbGV0IGhlYWRlcnM6IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBDT05URU5UX1RZUEVTW2V4dC50b0xvd2VyQ2FzZSgpXSB8fCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLFxuICAgICAgICAgICAgXCJMYXN0LU1vZGlmaWVkXCI6IG5ldyBEYXRlKGluZm8ud3JpdGVUaW1lKS50b1VUQ1N0cmluZygpLFxuICAgICAgICAgICAgXCJBY2NlcHQtUmFuZ2VzXCI6IFwiYnl0ZXNcIixcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVGhlIHNlcnZpbmcgc3RvcmUncyBvd24gcG9saWN5IC0gYW5kIG5ldmVyIGZvciB0aGUgcm91dGluZyBmaWxlLCB3aGljaCBjaGFuZ2luZyBpcyB0aGUgd2hvbGUgcG9pbnQgb2ZcbiAgICAgICAgaWYgKGltbXV0YWJsZSkge1xuICAgICAgICAgICAgaGVhZGVyc1tcIkNhY2hlLUNvbnRyb2xcIl0gPSBgbWF4LWFnZT0ke0lNTVVUQUJMRV9DQUNIRV9USU1FIC8gMTAwMH1gO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpZk1vZGlmaWVkU2luY2UgPSByZXF1ZXN0Py5oZWFkZXJzW1wiaWYtbW9kaWZpZWQtc2luY2VcIl07XG4gICAgICAgIGlmICh0eXBlb2YgaWZNb2RpZmllZFNpbmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBsZXQgc2luY2UgPSBuZXcgRGF0ZShpZk1vZGlmaWVkU2luY2UpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGlmIChzaW5jZSAmJiBNYXRoLmZsb29yKGluZm8ud3JpdGVUaW1lIC8gMTAwMCkgKiAxMDAwIDw9IHNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IC4uLmhlYWRlcnMsIHN0YXR1czogXCIzMDRcIiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmFuZ2U6IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJhbmdlSGVhZGVyID0gcmVxdWVzdD8uaGVhZGVyc1tcInJhbmdlXCJdO1xuICAgICAgICBpZiAodHlwZW9mIHJhbmdlSGVhZGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBsZXQgbWF0Y2ggPSAvXmJ5dGVzPShcXGQqKS0oXFxkKikkLy5leGVjKHJhbmdlSGVhZGVyLnRyaW0oKSk7XG4gICAgICAgICAgICBpZiAobWF0Y2ggJiYgKG1hdGNoWzFdIHx8IG1hdGNoWzJdKSkge1xuICAgICAgICAgICAgICAgIGxldCBzdGFydDogbnVtYmVyO1xuICAgICAgICAgICAgICAgIGxldCBlbmRJbmNsdXNpdmUgPSBpbmZvLnNpemUgLSAxO1xuICAgICAgICAgICAgICAgIGlmICghbWF0Y2hbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1heCgwLCBpbmZvLnNpemUgLSArbWF0Y2hbMl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gK21hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZEluY2x1c2l2ZSA9IE1hdGgubWluKCttYXRjaFsyXSwgaW5mby5zaXplIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IGluZm8uc2l6ZSB8fCBzdGFydCA+IGVuZEluY2x1c2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgLi4uaGVhZGVycywgXCJDb250ZW50LVJhbmdlXCI6IGBieXRlcyAqLyR7aW5mby5zaXplfWAsIHN0YXR1czogXCI0MTZcIiB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSB7IHN0YXJ0LCBlbmQ6IGVuZEluY2x1c2l2ZSArIDEgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0OiB7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaHR0cFN0b3JlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBodHRwU3RvcmUuZ2V0Mih7IHBhdGg6IGZpbGVQYXRoLCByYW5nZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGdldFJvdXRpbmdGaWxlUmVzdWx0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByYW5nZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHsgLi4ucmVzdWx0LCBkYXRhOiByZXN1bHQuZGF0YS5zdWJhcnJheShNYXRoLm1pbihyYW5nZS5zdGFydCwgcmVzdWx0LmRhdGEubGVuZ3RoKSwgTWF0aC5taW4ocmFuZ2UuZW5kLCByZXN1bHQuZGF0YS5sZW5ndGgpKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyYWNrQWNjZXNzKHsgYWNjb3VudCwgb3BlcmF0aW9uOiBcImh0dHBHZXRcIiwgcGF0aDogYCR7YnVja2V0TmFtZX0vJHtmaWxlUGF0aH1gLCBzaXplOiByZXN1bHQgJiYgcmVzdWx0LmRhdGEubGVuZ3RoIHx8IDAgfSk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgc3RhdHVzOiBcIjQwNFwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKHJlc3VsdC5kYXRhLCB7IC4uLmhlYWRlcnMsIFwiQ29udGVudC1SYW5nZVwiOiBgYnl0ZXMgJHtyYW5nZS5zdGFydH0tJHtyYW5nZS5lbmQgLSAxfS8ke2luZm8uc2l6ZX1gLCBzdGF0dXM6IFwiMjA2XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKHJlc3VsdC5kYXRhLCBoZWFkZXJzKTtcbiAgICB9XG59XG5cbi8qKiBUaGUgb25lIHJlc29sdXRpb24gZXZlcnkgZGF0YSBjYWxsIGRvZXM6IHRoZSBjbGllbnQncyBzZWxlY3RlZCBzb3VyY2VDb25maWcgTkFNRVMgZXhhY3RseSBvbmUgc3RvcmUgKGNyZWF0ZWQgb24gZmlyc3QgdXNlKSwgYW5kIGZuIHJ1bnMgb24gaXQuICovXG5hc3luYyBmdW5jdGlvbiB3aXRoU3RvcmU8VD4oY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZyB9LCBmbjogKHN0b3JlOiBCbG9iU3RvcmUpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gYXdhaXQgZm4oZmluZEJ1Y2tldFN0b3JlKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSwgY29uZmlnLnNvdXJjZUNvbmZpZykpO1xufVxuXG4vLyBUaGUgY2FsbGVyJ3Mgbm9kZSBpZCBmb3IgdGhlIG11dGF0aW9uIGxvZyAtIHJlYWQgc3luY2hyb25vdXNseSBhdCBtZXRob2QgZW50cnkgKHRoZSBjYWxsIGNvbnRleHQgZG9lcyBub3Qgc3Vydml2ZSBhd2FpdHMpLCBhbmQgdG9sZXJhbnQgb2YgdGhlcmUgYmVpbmcgbm9uZSAobG9jYWwgY2FsbHMpXG5mdW5jdGlvbiBjYWxsZXJJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKT8ubm9kZUlkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuY29uc3QgbGFyZ2VVcGxvYWRJbmZvID0gbmV3IE1hcDxzdHJpbmcsIHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgbGFzdE1vZGlmaWVkPzogbnVtYmVyOyBmb3JjZVNldEltbXV0YWJsZT86IGJvb2xlYW47IG5vQ2hlY2tzPzogYm9vbGVhbjsgaW50ZXJuYWw/OiBib29sZWFuOyBzdG9yZU5hbWU6IHN0cmluZyB9PigpO1xuXG5jb25zdCBhY2NvdW50QWNjZXNzOiBTb2NrZXRGdW5jdGlvbkhvb2sgPSBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGNvbmZpZyA9IGNvbnRleHQuY2FsbC5hcmdzWzBdIGFzIHsgYWNjb3VudD86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgIGF3YWl0IHJlcXVpcmVBY2Nlc3MoU3RyaW5nKGNvbmZpZz8uYWNjb3VudCkpO1xuICAgIGxldCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydDtcbiAgICBpZiAoZHVyYXRpb24gPiBBQ0NFU1NfQ0hFQ0tfU0xPV19USU1FKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBBY2Nlc3MgY2hlY2sgZm9yICR7Y29udGV4dC5jYWxsLmZ1bmN0aW9uTmFtZX0gdG9vayAke2R1cmF0aW9ufW1zYCk7XG4gICAgfVxufTtcbmNvbnN0IHVwbG9hZEFjY2VzczogU29ja2V0RnVuY3Rpb25Ib29rID0gYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICBsZXQgY29uZmlnID0gY29udGV4dC5jYWxsLmFyZ3NbMF0gYXMgeyB1cGxvYWRJZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgIGxldCBpbmZvID0gbGFyZ2VVcGxvYWRJbmZvLmdldChTdHJpbmcoY29uZmlnPy51cGxvYWRJZCkpO1xuICAgIGlmICghaW5mbykgcmV0dXJuO1xuICAgIGF3YWl0IHJlcXVpcmVBY2Nlc3MoaW5mby5hY2NvdW50KTtcbn07XG5jb25zdCBhZG1pbkFjY2VzczogU29ja2V0RnVuY3Rpb25Ib29rID0gYXN5bmMgKCkgPT4ge1xuICAgIHJlcXVpcmVBZG1pbigpO1xufTtcblxuZXhwb3J0IGNvbnN0IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyID0gU29ja2V0RnVuY3Rpb24ucmVnaXN0ZXIoXG4gICAgUkVNT1RFX1NUT1JBR0VfQ0xBU1NfR1VJRCxcbiAgICBuZXcgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXJCYXNlKCksXG4gICAgKCkgPT4gKHtcbiAgICAgICAgcGluZzoge30sXG4gICAgICAgIGF1dGhlbnRpY2F0ZToge30sXG4gICAgICAgIGdldEFjY2Vzc1N0YXRlOiB7fSxcbiAgICAgICAgYWRtaW5MaXN0QWN0aXZlQnVja2V0czogeyBob29rczogW2FkbWluQWNjZXNzXSB9LFxuICAgICAgICBnZXQyOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgc2V0OiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZGVsOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgbW92ZTogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEluZm86IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBmaW5kSW5mbzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldENoYW5nZXNBZnRlcjI6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRBcmNoaXZlc0NvbmZpZzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEluZGV4SW5mbzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGxpc3RCdWNrZXRzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0QWN0aXZlQnVja2V0OiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgYWN0aXZhdGVCdWNrZXQ6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBjbGVhcldyaXRlU3RhdHM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRBY2Nlc3NTdGF0czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEFjY2Vzc1N1bW1hcmllczogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldFN5bmNTdGF0dXM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBsaXN0TG9nRmlsZXM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRMb2dGaWxlOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgc3RhcnRMYXJnZUZpbGU6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICB1cGxvYWRQYXJ0OiB7IGhvb2tzOiBbdXBsb2FkQWNjZXNzXSB9LFxuICAgICAgICBmaW5pc2hMYXJnZUZpbGU6IHsgaG9va3M6IFt1cGxvYWRBY2Nlc3NdIH0sXG4gICAgICAgIGNhbmNlbExhcmdlRmlsZTogeyBob29rczogW3VwbG9hZEFjY2Vzc10gfSxcbiAgICAgICAgaHR0cEVudHJ5OiB7fSxcbiAgICB9KSxcbiAgICAoKSA9PiAoe1xuICAgICAgICBub0NsaWVudEhvb2tzOiB0cnVlLFxuICAgICAgICBub0RlZmF1bHRIb29rczogdHJ1ZSxcbiAgICB9KVxuKTtcbiJdfQ==
547
- /* _JS_SOURCE_HASH = "ea5562765e0e8ce235a985669f95824d28f965c6c55cd8c2ce98b1d1894cede0"; */
545
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxtRUFBZ0U7QUFFaEUsNkRBQTREO0FBQzVELHlFQUFrRztBQUNsRyxpRUFBbUU7QUFDbkUsaUZBQThFO0FBQzlFLG1EQUF3RDtBQUN4RCxrREFBbUg7QUFDbkgsNENBQW1JO0FBQ25JLGlEQUF1RTtBQUN2RSw2REFLOEI7QUFDOUIsK0NBQTREO0FBQzVELGlEQUE2RTtBQUM3RSwrREFBdUc7QUFFdkcsNkNBQW9EO0FBQ3BELHVFQUFvRTtBQUNwRSwrQ0FBOEo7QUFDOUosK0NBQXFGO0FBRXJGLDZDQUFpRjtBQUdwRSxRQUFBLHlCQUF5QixHQUFHLGtDQUFrQyxDQUFDO0FBQy9ELFFBQUEsb0JBQW9CLEdBQUcsc0JBQXNCLENBQUM7QUFDOUMsUUFBQSx5QkFBeUIsR0FBRywyQ0FBMkMsQ0FBQztBQUN4RSxRQUFBLHFCQUFxQixHQUFHLHVDQUF1QyxDQUFDO0FBRTdFLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQVksR0FBRyxFQUFFLENBQUM7QUFDM0MsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDbEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQXVCL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7QUFFM0Msd1pBQXdaO0FBQ3haLE1BQU0sYUFBYSxHQUE4QjtJQUM3QyxHQUFHLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxFQUFFLGlDQUFpQztJQUN2RSxHQUFHLEVBQUUsMkJBQTJCLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFdBQVc7SUFDM0csSUFBSSxFQUFFLFlBQVksRUFB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QUk7SUFDbkIsY0FBYyxFQUFFLElBQUk7Q0FDdkIsQ0FBQyxDQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb2NrZXRGdW5jdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25cIjtcbmltcG9ydCB7IFNvY2tldEZ1bmN0aW9uSG9vayB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25UeXBlc1wiO1xuaW1wb3J0IHsgZ2V0Tm9kZUlkSVAgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9ub2RlQ2FjaGVcIjtcbmltcG9ydCB7IHNldEhUVFBSZXN1bHRIZWFkZXJzLCBnZXRDdXJyZW50SFRUUFJlcXVlc3QgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWxsSFRUUEhhbmRsZXJcIjtcbmltcG9ydCB7IHBlcmZvcm1Mb2NhbENhbGwgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWxsTWFuYWdlclwiO1xuaW1wb3J0IHsgUmVxdWlyZUNvbnRyb2xsZXIgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3JlcXVpcmUvUmVxdWlyZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHRpbWVJbk1pbnV0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGdldENvbW1vbk5hbWUsIGdldE1hY2hpbmVJZCwgZ2V0T3duTWFjaGluZUlkLCB2YWxpZGF0ZUNlcnRpZmljYXRlLCB2ZXJpZnkgfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgQXJjaGl2ZUZpbGVJbmZvLCBBcmNoaXZlc0NvbmZpZywgQXJjaGl2ZXNTeW5jU3RhdHVzLCBGaW5kQ29uZmlnLCBTb3VyY2VDb25maWcsIElNTVVUQUJMRV9DQUNIRV9USU1FIH0gZnJvbSBcIi4uL0lBcmNoaXZlc1wiO1xuaW1wb3J0IHsgUk9VVElOR19GSUxFLCBnZXRSb3V0ZSwgcm91dGVDb250YWlucyB9IGZyb20gXCIuL3JlbW90ZUNvbmZpZ1wiO1xuaW1wb3J0IHtcbiAgICBmaW5kQnVja2V0U3RvcmUsIGdldFN0b3JlLCBnZXRCdWNrZXRTdG9yZXMsIHJlYWRCdWNrZXRJbnRlcm5hbCwgd3JpdGVSb3V0aW5nQ29uZmlnLFxuICAgIGdldEJ1Y2tldEFyY2hpdmVzQ29uZmlnLCBidWNrZXRTeW5jU3RhdHVzLCBkZWJ1Z0J1Y2tldEluZGV4VG90YWxzLCBBY3RpdmVCdWNrZXRJbmZvLFxuICAgIGRlYnVnTGlzdEFjY291bnRCdWNrZXRzLCBTZXJ2ZXJCdWNrZXRJbmZvLFxuICAgIGRlYnVnR2V0QWN0aXZlQnVja2V0LCBhY3RpdmF0ZUJ1Y2tldCwgZ2V0QWN0aXZlQnVja2V0S2V5cyxcbn0gZnJvbSBcIi4vc3RvcmFnZVNlcnZlclN0YXRlXCI7XG5pbXBvcnQgeyBkZWJ1Z0NsZWFyQWNjb3VudFdyaXRlU3RhdHMgfSBmcm9tIFwiLi9hY2Nlc3NTdGF0c1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZVNlcnZlckNvbmZpZywgYXNzZXJ0V3JpdGVzQWxsb3dlZCB9IGZyb20gXCIuL3NlcnZlckNvbmZpZ1wiO1xuaW1wb3J0IHsgZ2V0VHJ1c3RlZE1hY2hpbmVzLCBpc01hY2hpbmVBY2NlcHRlZCwgTWFjaGluZVN0YXRlIH0gZnJvbSBcIi4uLy4uL3NlY3VyaXR5L21hY2hpbmVzL21hY2hpbmVzXCI7XG5pbXBvcnQgeyBCbG9iU3RvcmUgfSBmcm9tIFwiLi9ibG9iU3RvcmVcIjtcbmltcG9ydCB7IGdldFJvdXRpbmdGaWxlUmVzdWx0IH0gZnJvbSBcIi4vYnVja2V0RGlza1wiO1xuaW1wb3J0IHsgU3RvcmFnZUNsaWVudENvbnRyb2xsZXIgfSBmcm9tIFwiLi9zdG9yYWdlQ2xpZW50Q29udHJvbGxlclwiO1xuaW1wb3J0IHsgdHJhY2tBY2Nlc3MsIHRyYWNrQWNjZXNzQ2FsbCwgZ2V0QWNjZXNzVG90YWxzLCByZWFkQWNjZXNzU3VtbWFyaWVzLCBjbGVhckFjY291bnRBY2Nlc3NTdGF0cywgQWNjZXNzVG90YWxzLCBBY2Nlc3NTdW1tYXJ5U3RhdGUgfSBmcm9tIFwiLi9hY2Nlc3NTdGF0c1wiO1xuaW1wb3J0IHsgbG9nTXV0YXRpb24sIGxpc3RTdG9yYWdlTG9nRmlsZXMsIHJlYWRTdG9yYWdlTG9nRmlsZSB9IGZyb20gXCIuL3N0b3JhZ2VMb2dzXCI7XG5pbXBvcnQgeyBMb2dGaWxlSW5mbyB9IGZyb20gXCIuLi9TdHJlYW1pbmdMb2dzXCI7XG5pbXBvcnQgeyBhc3NlcnRWYWxpZE5hbWUsIGFzc2VydFZhbGlkUGF0aCwgYXNzZXJ0VmFsaWRBcmdzIH0gZnJvbSBcIi4vdmFsaWRhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBTdW1tYXJ5RW50cnkgfSBmcm9tIFwiLi4vLi4vdHJlZVN1bW1hcnlcIjtcblxuZXhwb3J0IGNvbnN0IFJFTU9URV9TVE9SQUdFX0NMQVNTX0dVSUQgPSBcIlJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLWI3ZTQyYTkxXCI7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9BVVRIX1BVUlBPU0UgPSBcInJlbW90ZVN0b3JhZ2UtYXV0aC0xXCI7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRCA9IFwiUkVNT1RFX1NUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURURfY2YyZjdiMWVcIjtcbmV4cG9ydCBjb25zdCBTVE9SQUdFX0FDQ0VTU19ERU5JRUQgPSBcIlJFTU9URV9TVE9SQUdFX0FDQ0VTU19ERU5JRURfOWQ4MWE0YzBcIjtcblxuY29uc3QgQVVUSF9USU1FX1dJTkRPVyA9IHRpbWVJbk1pbnV0ZSAqIDEwO1xuY29uc3QgQUNDRVNTX0NIRUNLX1NMT1dfVElNRSA9IDUwO1xuY29uc3QgTUFYX1NFU1NJT05TID0gMTAwICogMTAwMDtcbmNvbnN0IE1BWF9SRVFVRVNUU19QRVJfSVAgPSA1MDtcblxuZXhwb3J0IHR5cGUgQXV0aFRva2VuRGF0YSA9IHtcbiAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgdGltZTogbnVtYmVyO1xuICAgIHNlcnZlcjogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEF1dGhUb2tlbiA9IHtcbiAgICBjZXJ0UGVtOiBzdHJpbmc7XG4gICAgaXNzdWVyUGVtOiBzdHJpbmc7XG4gICAgc2lnbmF0dXJlOiBzdHJpbmc7XG4gICAgZGF0YTogQXV0aFRva2VuRGF0YTtcbn07XG5leHBvcnQgdHlwZSBBY2Nlc3NTdGF0ZSA9IHtcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcDogc3RyaW5nO1xuICAgIGhhc0FjY2VzczogYm9vbGVhbjtcbiAgICAvLyBXaHkgbm90LCBpbmNsdWRpbmcgdGhlIGNvbW1hbmQgdGhhdCBncmFudHMgYWNjZXNzLCB3aGVuIHRoZXJlIGlzIG5vIGFjY2Vzcy5cbiAgICByZWFzb24/OiBzdHJpbmc7XG4gICAgLy8gRXZlcnl0aGluZyB0aGUgcmVwbyB0cnVzdHMsIHdoZW4gdGhlcmUgaXMuXG4gICAgdHJ1c3RlZE1hY2hpbmVzPzogTWFjaGluZVN0YXRlW107XG59O1xuXG5jb25zdCBzZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbi8vIFdlIG11c3QgbmV2ZXIgc2VydmUgYW55dGhpbmcgdGhhdCBjYW4gYmUgZXZhbHVhdGVkIGFzIGNvZGUgKGh0bWwsIGpzIC0gYW5kIHN2Zywgd2hpY2ggY2FuIGVtYmVkIDxzY3JpcHQ+IGFuZCBydW5zIGl0IHdoZW4gdmlzaXRlZCBhcyBhIGRvY3VtZW50KS4gT3RoZXJ3aXNlIGEgdXNlciBjb3VsZCBob3N0IGEgZmlsZSBhbmQsIGJ5IHZpc2l0aW5nIGl0LCBydW4gaXQgb24gb3VyIGRvbWFpbiAtIGdpdmluZyB0aGVtIGFjY2VzcyB0byBhbGwgb2Ygb3VyIGtleXMgYW5kIGNvb2tpZXMuIFBERiBzdGF5czogYnJvd3NlciBQREYgdmlld2VycyBydW4gYW55IGVtYmVkZGVkIFBERiBzY3JpcHRpbmcgaW4gYSBzYW5kYm94IHdpdGggbm8gYWNjZXNzIHRvIHRoZSBzZXJ2aW5nIG9yaWdpbidzIGNvb2tpZXMgb3IgRE9NLlxuY29uc3QgQ09OVEVOVF9UWVBFUzogeyBbZXh0OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBjc3M6IFwidGV4dC9jc3M7IGNoYXJzZXQ9dXRmLThcIiwganNvbjogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgdHh0OiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIiwgcG5nOiBcImltYWdlL3BuZ1wiLCBqcGc6IFwiaW1hZ2UvanBlZ1wiLCBqcGVnOiBcImltYWdlL2pwZWdcIiwgZ2lmOiBcImltYWdlL2dpZlwiLFxuICAgIHdlYnA6IFwiaW1hZ2Uvd2VicFwiLCBtcDQ6IFwidmlkZW8vbXA0XCIsIHdlYm06IFwidmlkZW8vd2VibVwiLFxuICAgIG1wMzogXCJhdWRpby9tcGVnXCIsIHdhdjogXCJhdWRpby93YXZcIiwgcGRmOiBcImFwcGxpY2F0aW9uL3BkZlwiLFxufTtcblxuY29uc3QgY29ubmVjdGVkQ2xpZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuZnVuY3Rpb24gdHJhY2tDYWxsZXIoKTogdm9pZCB7XG4gICAgbGV0IG5vZGVJZCA9IFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpLm5vZGVJZDtcbiAgICBpZiAoY29ubmVjdGVkQ2xpZW50cy5oYXMobm9kZUlkKSkgcmV0dXJuO1xuICAgIGNvbm5lY3RlZENsaWVudHMuYWRkKG5vZGVJZCk7XG4gICAgU29ja2V0RnVuY3Rpb24ub25OZXh0RGlzY29ubmVjdChub2RlSWQsICgpID0+IHtcbiAgICAgICAgY29ubmVjdGVkQ2xpZW50cy5kZWxldGUobm9kZUlkKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyb2FkY2FzdFJvdXRpbmdDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGBCcm9hZGNhc3Rpbmcgcm91dGluZyBjb25maWcgY2hhbmdlIHRvICR7Y29ubmVjdGVkQ2xpZW50cy5zaXplfSBjb25uZWN0ZWQgY2xpZW50c2ApO1xuICAgIGZvciAobGV0IG5vZGVJZCBvZiBbLi4uY29ubmVjdGVkQ2xpZW50c10pIHtcbiAgICAgICAgdm9pZCBTdG9yYWdlQ2xpZW50Q29udHJvbGxlci5ub2Rlc1tub2RlSWRdLnJvdXRpbmdDb25maWdDaGFuZ2VkKCkuY2F0Y2goKCkgPT4geyB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldENhbGxlck1hY2hpbmVJZCgpOiBzdHJpbmcge1xuICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICBsZXQgbWFjaGluZUlkID0gc2Vzc2lvbnMuZ2V0KGNhbGxlci5ub2RlSWQpO1xuICAgIGlmICghbWFjaGluZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEfSBDYWxsIGF1dGhlbnRpY2F0ZSBmaXJzdCAoY29ubmVjdGlvbiAke2NhbGxlci5ub2RlSWR9KWApO1xuICAgIH1cbiAgICByZXR1cm4gbWFjaGluZUlkO1xufVxuZnVuY3Rpb24gZ2V0Q2FsbGVySVAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0Tm9kZUlkSVAoU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCkubm9kZUlkKTtcbn1cbmZ1bmN0aW9uIGlzQWRtaW4obWFjaGluZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWFjaGluZUlkID09PSBnZXRPd25NYWNoaW5lSWQoZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpLnJvb3REb21haW4pO1xufVxuZnVuY3Rpb24gcmVxdWlyZUFkbWluKCk6IHN0cmluZyB7XG4gICAgbGV0IG1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgIGlmICghaXNBZG1pbihtYWNoaW5lSWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX0FDQ0VTU19ERU5JRUR9IEFkbWluIGNvbW1hbmRzIG11c3QgYmUgcnVuIGZyb20gdGhlIHN0b3JhZ2UgbWFjaGluZSBpdHNlbGYgKGNhbGxlciBtYWNoaW5lICR7bWFjaGluZUlkfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cbi8qKiBXaG8gbWF5IHRhbGsgdG8gdGhpcyBzZXJ2ZXIsIGRlY2lkZWQgYnkgdGhlIHNpZ25lZCBhdXRob3JpemVkX2tleXMgcmVwbyByYXRoZXIgdGhhbiBieSBhbnl0aGluZ1xuICAgIHRoaXMgc2VydmVyIGtlZXBzIGZvciBpdHNlbGYuXG5cbiAgICBUaGUgaWRlbnRpdHkgaXMgdGhlIHNhbWUgbWFjaGluZSBpZCBpdCBhbHdheXMgd2FzIC0gYSBtYWNoaW5lIHRoYXQgd2FzIHRydXN0ZWQgaGVyZSBiZWZvcmUgaXNcbiAgICB0cnVzdGVkIHRoZSBtb21lbnQgaXRzIGlkIGlzIGluIHRoZSByZXBvIC0gYnV0IHRoZSByZWNvcmQgb2Ygd2hvIGlzIHRydXN0ZWQgbm93IGxpdmVzIGluIG9uZVxuICAgIHNpZ25lZCBwbGFjZSBzaGFyZWQgYnkgZXZlcnkgbWFjaGluZSwgd2l0aCByZXZvY2F0aW9uIGFuZCBldmVyeXRoaW5nIGVsc2UgdGhhdCBjb21lcyB3aXRoIGl0LlxuICAgIFRoZSBhZGRyZXNzIGlzIGNoZWNrZWQgdG9vLCB3aGljaCB0aGUgdHJ1c3Qgc3RvcmUgaGVyZSBuZXZlciBkaWQuICovXG5hc3luYyBmdW5jdGlvbiByZXF1aXJlQWNjZXNzKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgaWYgKGlzQWRtaW4obWFjaGluZUlkKSkgcmV0dXJuIG1hY2hpbmVJZDtcbiAgICBsZXQgeyByb290RG9tYWluIH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgbGV0IGlwID0gZ2V0Q2FsbGVySVAoKTtcbiAgICBsZXQgdmVyZGljdCA9IGF3YWl0IGlzTWFjaGluZUFjY2VwdGVkKHsgbWFjaGluZUlkLCBpcCwgZG9tYWluOiByb290RG9tYWluIH0pO1xuICAgIGlmICghdmVyZGljdC5hY2NlcHRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHtTVE9SQUdFX0FDQ0VTU19ERU5JRUR9ICR7dmVyZGljdC5yZWFzb259YFxuICAgICAgICAgICAgKyBgIE1hY2hpbmUgJHttYWNoaW5lSWR9IHdhcyBjYWxsaW5nIGZyb20gJHtpcH0sIGZvciBhY2NvdW50ICR7SlNPTi5zdHJpbmdpZnkoYWNjb3VudCl9LmBcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cblxuY2xhc3MgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXJCYXNlIHtcbiAgICBhc3luYyBwaW5nKCk6IFByb21pc2U8e30+IHtcbiAgICAgICAgdHJhY2tDYWxsZXIoKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8vIFNlY3VyZSBiZWNhdXNlIGNvbm5lY3Rpb25zIHVzZSByZWFsIGNlcnRpZmljYXRlcyBvbiByZWFsIGRvbWFpbiBuYW1lcywgc28gVExTIGl0c2VsZiBzdG9wcyBhXG4gICAgLy8gbWFuLWluLXRoZS1taWRkbGUuIE90aGVyd2lzZSBvbmUgd291bGQgYmUgcG9zc2libGU6IHRoZSBzaWduZWQgdG9rZW4gb25seSBuYW1lcyB0aGUgc2VydmVyJ3NcbiAgICAvLyBkb21haW4sIHNvIGEgbWlkZGxlbWFuIG9uIHRoZSBwYXRoIHRvIHRoYXQgZG9tYWluIGNvdWxkIHJldXNlIGl0IGFnYWluc3QgdGhlIHJlYWwgc2VydmVyLlxuICAgIGFzeW5jIGF1dGhlbnRpY2F0ZSh0b2tlbjogQXV0aFRva2VuKTogUHJvbWlzZTx7IG1hY2hpbmVJZDogc3RyaW5nOyBpcDogc3RyaW5nIH0+IHtcbiAgICAgICAgbGV0IHsgZG9tYWluLCBwb3J0LCByb290RG9tYWluIH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICAgICAgdmVyaWZ5KHRva2VuLmNlcnRQZW0sIHRva2VuLnNpZ25hdHVyZSwgdG9rZW4uZGF0YSk7XG4gICAgICAgIGxldCB7IHB1cnBvc2UsIHRpbWUsIHNlcnZlciB9ID0gdG9rZW4uZGF0YTtcbiAgICAgICAgaWYgKHB1cnBvc2UgIT09IFNUT1JBR0VfQVVUSF9QVVJQT1NFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGggdG9rZW4gcHVycG9zZSBpcyAke0pTT04uc3RyaW5naWZ5KHB1cnBvc2UpfSwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShTVE9SQUdFX0FVVEhfUFVSUE9TRSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKERhdGUubm93KCkgLSB0aW1lKSA+IEFVVEhfVElNRV9XSU5ET1cpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXV0aCB0b2tlbiB0aW1lIGlzIHRvbyBmYXIgZnJvbSB0aGUgc2VydmVyIHRpbWUgKHRva2VuICR7dGltZX0sIHNlcnZlciAke0RhdGUubm93KCl9LCBhbGxvd2VkIGRyaWZ0ICR7QVVUSF9USU1FX1dJTkRPV31tcylgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG9rZW5Eb21haW4gPSBzZXJ2ZXIuc3BsaXQoXCI6XCIpWzBdO1xuICAgICAgICBpZiAodG9rZW5Eb21haW4gIT09IGRvbWFpbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoIHRva2VuIGlzIGZvciBzZXJ2ZXIgJHtKU09OLnN0cmluZ2lmeShzZXJ2ZXIpfSwgYnV0IHRoaXMgc2VydmVyIGlzICR7SlNPTi5zdHJpbmdpZnkoYCR7ZG9tYWlufToke3BvcnR9YCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVDZXJ0aWZpY2F0ZShyb290RG9tYWluLCB0b2tlbi5jZXJ0UGVtLCB0b2tlbi5pc3N1ZXJQZW0pO1xuICAgICAgICBsZXQgbWFjaGluZUlkID0gZ2V0TWFjaGluZUlkKGdldENvbW1vbk5hbWUodG9rZW4uaXNzdWVyUGVtKSwgcm9vdERvbWFpbik7XG4gICAgICAgIHNlc3Npb25zLnNldChjYWxsZXIubm9kZUlkLCBtYWNoaW5lSWQpO1xuICAgICAgICB3aGlsZSAoc2Vzc2lvbnMuc2l6ZSA+IE1BWF9TRVNTSU9OUykge1xuICAgICAgICAgICAgbGV0IG9sZGVzdCA9IHNlc3Npb25zLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgICAgICBpZiAob2xkZXN0ID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgICAgICAgc2Vzc2lvbnMuZGVsZXRlKG9sZGVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbWFjaGluZUlkLCBpcDogZ2V0Q2FsbGVySVAoKSB9O1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjYWxsZXIgbWF5IHVzZSB0aGlzIGFjY291bnQsIGFuZCBpZiBub3QsIGV4YWN0bHkgd2hhdCB0byBydW4gdG8gY2hhbmdlIHRoYXQuXG5cbiAgICAgICAgVGhlcmUgaXMgbm90aGluZyB0byByZXF1ZXN0IGFuZCBub3RoaW5nIHRvIGdyYW50IGhlcmUgYW55IG1vcmU6IHRydXN0IGxpdmVzIGluIHRoZSBzaWduZWRcbiAgICAgICAgYXV0aG9yaXplZF9rZXlzIHJlcG8sIHNvIHRoZSBhbnN3ZXIgaXMgXCJydW4gYWRkbWFjaGluZSBpbiB0aGF0IHJlcG9cIiwgd2hpY2ggb25seSBzb21lYm9keVxuICAgICAgICBob2xkaW5nIHRoZSBoYXJkd2FyZSBrZXkgY2FuIGRvLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBY2Nlc3NTdGF0ZShjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPEFjY2Vzc1N0YXRlPiB7XG4gICAgICAgIGFzc2VydFZhbGlkTmFtZShjb25maWcuYWNjb3VudCwgXCJhY2NvdW50XCIpO1xuICAgICAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgICAgIGxldCBpcCA9IGdldENhbGxlcklQKCk7XG4gICAgICAgIGxldCB7IHJvb3REb21haW4gfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICAgICAgaWYgKGlzQWRtaW4obWFjaGluZUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWFjaGluZUlkLCBpcCwgaGFzQWNjZXNzOiB0cnVlLCB0cnVzdGVkTWFjaGluZXM6IGF3YWl0IGdldFRydXN0ZWRNYWNoaW5lcygpIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZlcmRpY3QgPSBhd2FpdCBpc01hY2hpbmVBY2NlcHRlZCh7IG1hY2hpbmVJZCwgaXAsIGRvbWFpbjogcm9vdERvbWFpbiB9KTtcbiAgICAgICAgaWYgKCF2ZXJkaWN0LmFjY2VwdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1hY2hpbmVJZCxcbiAgICAgICAgICAgICAgICBpcCxcbiAgICAgICAgICAgICAgICBoYXNBY2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogdmVyZGljdC5yZWFzb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZCwgaXAsIGhhc0FjY2VzczogdHJ1ZSwgdHJ1c3RlZE1hY2hpbmVzOiBhd2FpdCBnZXRUcnVzdGVkTWFjaGluZXMoKSB9O1xuICAgIH1cblxuICAgIC8qKiBBZG1pbiAoc28gb25seSB0aGlzIG1hY2hpbmUncyBvd24gcHJvY2Vzc2VzIGNhbiBjYWxsIGl0KTogdGhlIGJ1Y2tldHMgdGhpcyBwcm9jZXNzIGhhcyBsb2FkZWQuIEEgZGVwbG95IHN1Y2Nlc3NvciBhc2tzIGl0cyBwcmVkZWNlc3NvciBmb3IgdGhpcywgc28gaXQgYWN0aXZhdGVzIGV4YWN0bHkgdGhlIGJ1Y2tldHMgdGhhdCBhcmUgaW4gdXNlIGluc3RlYWQgb2YgZXZlcnkgYnVja2V0IG9uIGRpc2suICovXG4gICAgYXN5bmMgYWRtaW5MaXN0QWN0aXZlQnVja2V0cygpOiBQcm9taXNlPHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfVtdPiB7XG4gICAgICAgIHJldHVybiBnZXRBY3RpdmVCdWNrZXRLZXlzKCk7XG4gICAgfVxuXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJnZXRcIilcbiAgICBhc3luYyBnZXQyKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH07IGludGVybmFsPzogYm9vbGVhbjsgaW5jbHVkZVRvbWJzdG9uZXM/OiBib29sZWFuOyBpbmNsdWRlTWFya2VkPzogYm9vbGVhbiB9KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChjb25maWcucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICAvLyBUaGUgcm91dGluZyBmaWxlIGxpdmVzIG91dHNpZGUgZXZlcnkgc3RvcmUgYW5kIGV2ZW4gb3V0c2lkZSB0aGUgYnVja2V0IChpdCBpcyB3aGF0IENSRUFURVMgaXQpLCBzbyBpdCBpcyByZWFkIHN0cmFpZ2h0IG9mZiB0aGUgZGlzayAtIGFic2VudCBtZWFucyB1bmRlZmluZWQsIGV4YWN0bHkgbGlrZSBhbnkgZmlsZSByZWFkXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmludGVybmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVhZEJ1Y2tldEludGVybmFsKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JlKGNvbmZpZywgc3RvcmUgPT4gc3RvcmUuZ2V0Mihjb25maWcpKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJzZXRcIilcbiAgICBhc3luYyBzZXQoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGRhdGE6IEJ1ZmZlcjsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuOyBpbnRlcm5hbD86IGJvb2xlYW47IHVuZGVsZXRlPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGNhbGxlciA9IGNhbGxlcklkKCk7XG4gICAgICAgIC8vIENvcGllZCBiZWNhdXNlIHRoZSB3aXJlIGhhbmRzIHVzIGEgcGxhaW4gVWludDhBcnJheSB2aWV3LCBub3QgYSByZWFsIEJ1ZmZlclxuICAgICAgICBsZXQgZGF0YSA9IEJ1ZmZlci5mcm9tKGNvbmZpZy5kYXRhKTtcbiAgICAgICAgaWYgKGNvbmZpZy5wYXRoID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIC8vIFRoZSBzdG9yZSB0aGUgY2FsbGVyIHNlbGVjdGVkIG93bnMgdGhpcyBmaWxlOiBpdCBhcHBsaWVzIGl0LCBlbmZvcmNlcyB0aGUgdmVyc2lvbiBydWxlLCBhbmQgaXRzIHBlZXJzIHB1bGwgaXQgZnJvbSB0aGVyZVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHdyaXRlUm91dGluZ0NvbmZpZyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUsIGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgZGF0YSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5zZXQoeyAuLi5jb25maWcsIGRhdGEgfSkpO1xuICAgICAgICBsb2dNdXRhdGlvbih7IG9wOiBjb25maWcudW5kZWxldGUgJiYgXCJ1bmRlbGV0ZVwiIHx8IFwic2V0XCIsIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSwgc3RvcmU6IGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgcGF0aDogY29uZmlnLnBhdGgsIHNpemU6IGRhdGEubGVuZ3RoLCB3cml0ZVRpbWU6IGNvbmZpZy5sYXN0TW9kaWZpZWQsIGNhbGxlcklkOiBjYWxsZXIsIGludGVybmFsOiBjb25maWcuaW50ZXJuYWwgfSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBAdHJhY2tBY2Nlc3NDYWxsKFwiZGVsXCIpXG4gICAgYXN5bmMgZGVsKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgbGFzdE1vZGlmaWVkPzogbnVtYmVyOyBpbnRlcm5hbD86IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGxldCBjYWxsZXIgPSBjYWxsZXJJZCgpO1xuICAgICAgICBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5kZWwoY29uZmlnKSk7XG4gICAgICAgIGxvZ011dGF0aW9uKHsgb3A6IFwiZGVsXCIsIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSwgc3RvcmU6IGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgcGF0aDogY29uZmlnLnBhdGgsIHdyaXRlVGltZTogY29uZmlnLmxhc3RNb2RpZmllZCwgY2FsbGVySWQ6IGNhbGxlciwgaW50ZXJuYWw6IGNvbmZpZy5pbnRlcm5hbCB9KTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJtb3ZlXCIpXG4gICAgYXN5bmMgbW92ZShjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IGZyb21QYXRoOiBzdHJpbmc7IHRvUGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGNhbGxlciA9IGNhbGxlcklkKCk7XG4gICAgICAgIC8vIGFzc2VydFZhbGlkQXJncyBvbmx5IGtub3dzIHRoZSB3ZWxsLWtub3duIGBwYXRoYCBmaWVsZCwgc28gdGhlIHR3byBwYXRocyBvZiBhIG1vdmUgYXJlIHZhbGlkYXRlZCBoZXJlXG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChjb25maWcuZnJvbVBhdGgpO1xuICAgICAgICBhc3NlcnRWYWxpZFBhdGgoY29uZmlnLnRvUGF0aCk7XG4gICAgICAgIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLm1vdmUoY29uZmlnKSk7XG4gICAgICAgIGxvZ011dGF0aW9uKHsgb3A6IFwibW92ZVwiLCBhY2NvdW50OiBjb25maWcuYWNjb3VudCwgYnVja2V0TmFtZTogY29uZmlnLmJ1Y2tldE5hbWUsIHN0b3JlOiBjb25maWcuc291cmNlQ29uZmlnLm5hbWUsIHBhdGg6IGNvbmZpZy5mcm9tUGF0aCwgdG9QYXRoOiBjb25maWcudG9QYXRoLCBjYWxsZXJJZDogY2FsbGVyIH0pO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImdldEluZm9cIilcbiAgICBhc3luYyBnZXRJbmZvKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgaW5jbHVkZVRvbWJzdG9uZXM/OiBib29sZWFuIH0pOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChjb25maWcucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgJiYgeyB3cml0ZVRpbWU6IHJlc3VsdC53cml0ZVRpbWUsIHNpemU6IHJlc3VsdC5zaXplIH0gfHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5nZXRJbmZvKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImZpbmRJbmZvXCIpXG4gICAgYXN5bmMgZmluZEluZm8oY29uZmlnOiBGaW5kQ29uZmlnICYgeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcHJlZml4OiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5maW5kSW5mbyhjb25maWcpKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJnZXRDaGFuZ2VzQWZ0ZXJcIilcbiAgICBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IHRpbWU6IG51bWJlcjsgcm91dGVzPzogW251bWJlciwgbnVtYmVyXVtdOyBpbnRlcm5hbD86IGJvb2xlYW4gfSk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLmdldENoYW5nZXNBZnRlcjIoY29uZmlnKSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBcmNoaXZlc0NvbmZpZyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEJ1Y2tldEFyY2hpdmVzQ29uZmlnKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBsaXN0QnVja2V0cyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPFNlcnZlckJ1Y2tldEluZm9bXT4ge1xuICAgICAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGRlYnVnTGlzdEFjY291bnRCdWNrZXRzKGNvbmZpZy5hY2NvdW50KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIFRoZSBhY2Nlc3MgaG9vayAoYW5kIHRoZSBzdG9yYWdlIGl0IGluaXRpYWxpemVzKSBydW5zIGJlZm9yZSB0aGlzLCBzbyBhIGxhcmdlIGdhcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBjYWxsZXIncyB0aW1pbmcgaXMgdGhlIGhvb2tcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBsaXN0QnVja2V0cygke2NvbmZpZy5hY2NvdW50fSkgY2FsbCBib2R5IHRvb2sgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogVGhlIGxpdmUsIGluLW1lbW9yeSBzdGF0ZSBvZiBvbmUgYnVja2V0LCBvciBhIHN0cmluZyBzYXlpbmcgd2h5IGl0IGlzIHVuYXZhaWxhYmxlLiBBbnN3ZXJlZCB3aXRob3V0IHRvdWNoaW5nIHRoZSBkaXNrLCBzbyBpdCBpcyBjaGVhcCAtIGJ1dCBvbmx5IHdvcmtzIHdoaWxlIHRoZSBidWNrZXQgaXMgbG9hZGVkIGhlcmUuICovXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldEFjdGl2ZUJ1Y2tldChjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8QWN0aXZlQnVja2V0SW5mbyB8IHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgZGVidWdHZXRBY3RpdmVCdWNrZXQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICB9XG4gICAgLyoqIExvYWRzIGEgYnVja2V0IHRoYXQgZXhpc3RzIG9uIHRoaXMgc2VydmVyIGludG8gbWVtb3J5IChzdGFydGluZyBpdHMgc3luY2hyb25pemF0aW9uKSBhbmQgcmV0dXJucyBpdHMgbGl2ZSBzdGF0ZSwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBjb3VsZCBub3QgYmUgbG9hZGVkLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBhY3RpdmF0ZUJ1Y2tldChjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8QWN0aXZlQnVja2V0SW5mbyB8IHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgYWN0aXZhdGVCdWNrZXQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICB9XG4gICAgLyoqIFplcm9lcyB0aGUgd3JpdGUgc3RhdGlzdGljcyBsaXN0QnVja2V0cyByZXBvcnRzIGFuZCB0aGUgaW4tbWVtb3J5IGFjY2VzcyBzdGF0aXN0aWNzLCBmb3IgZXZlcnkgYnVja2V0IGluIHRoZSBhY2NvdW50LiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBjbGVhcldyaXRlU3RhdHMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTx7IGNsZWFyZWRCdWNrZXRzOiBudW1iZXIgfT4ge1xuICAgICAgICBjbGVhckFjY291bnRBY2Nlc3NTdGF0cyhjb25maWcuYWNjb3VudCk7XG4gICAgICAgIHJldHVybiB7IGNsZWFyZWRCdWNrZXRzOiBkZWJ1Z0NsZWFyQWNjb3VudFdyaXRlU3RhdHMoY29uZmlnLmFjY291bnQpIH07XG4gICAgfVxuICAgIC8qKiBJbi1tZW1vcnkgdG90YWxzIHBlciBvcGVyYXRpb24gdHlwZSBzaW5jZSBzdGFydHVwIChvciB0aGUgbGFzdCBjbGVhcldyaXRlU3RhdHMpLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBY2Nlc3NTdGF0cyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPEFjY2Vzc1RvdGFscz4ge1xuICAgICAgICByZXR1cm4gZ2V0QWNjZXNzVG90YWxzKGNvbmZpZy5hY2NvdW50KTtcbiAgICB9XG4gICAgLyoqIEEgcGF0aCBicmVha2Rvd24gb2Ygb25lIG9wZXJhdGlvbidzIGFjY2Vzc2VzIChvcGVyYXRpb24gbmFtZXMgY29tZSBmcm9tIGdldEFjY2Vzc1N0YXRzKS4gbWF4Q291bnQgaXMgcGFzc2VkIHN0cmFpZ2h0IHRvIFRyZWVTdW1tYXJ5LmdldFN1bW1hcmllcy4gd2VpZ2h0QnlTaXplIGlzIGlnbm9yZWQgZm9yIGNvdW50LW9ubHkgb3BlcmF0aW9ucywgd2hpY2ggcmV0dXJuIHRoZWlyIGNvdW50IGJyZWFrZG93bi4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0QWNjZXNzU3VtbWFyaWVzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IG9wZXJhdGlvbjogc3RyaW5nOyBtYXhDb3VudDogbnVtYmVyOyB3ZWlnaHRCeVNpemU/OiBib29sZWFuIH0pOiBQcm9taXNlPFN1bW1hcnlFbnRyeTxBY2Nlc3NTdW1tYXJ5U3RhdGU+W10+IHtcbiAgICAgICAgcmV0dXJuIHJlYWRBY2Nlc3NTdW1tYXJpZXMoY29uZmlnKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldEluZGV4SW5mbyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8eyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXI7IHNvdXJjZXM6IHsgZGVidWdOYW1lOiBzdHJpbmc7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlciB9W10gfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgZGVidWdCdWNrZXRJbmRleFRvdGFscyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0U3luY1N0YXR1cyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8QXJjaGl2ZXNTeW5jU3RhdHVzPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBidWNrZXRTeW5jU3RhdHVzKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBvcGVyYXRpb24tbG9nIGZpbGVzIFRISVMgc2VydmVyIGhvbGRzIChldmVyeSBzZXJ2ZXIgbG9ncyBpdHMgb3duIG9wZXJhdGlvbnMgLSBhc2sgZWFjaCBvbmU7IHNlZSBsaXN0QWxsU2VydmVyTG9nRmlsZXMgaW4gY3JlYXRlQXJjaGl2ZXMpLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBsaXN0TG9nRmlsZXMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTxMb2dGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBsaXN0U3RvcmFnZUxvZ0ZpbGVzKCk7XG4gICAgfVxuICAgIC8qKiBPbmUgbG9nIGZpbGUncyBieXRlcywgYWx3YXlzIExaNC1jb21wcmVzc2VkIChhIGxpdmUgZmlsZSBpcyBmbHVzaGVkIGFuZCBjb21wcmVzc2VkIGluIG1lbW9yeSBiZWZvcmUgc2VuZGluZykuIERlY29kZSB3aXRoIGRlY29kZUxvZ0ZpbGUuICovXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldExvZ0ZpbGUoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZFN0b3JhZ2VMb2dGaWxlKGNvbmZpZy5uYW1lKTtcbiAgICB9XG5cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgc3RhcnRMYXJnZUZpbGUoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnOyBsYXN0TW9kaWZpZWQ/OiBudW1iZXI7IGZvcmNlU2V0SW1tdXRhYmxlPzogYm9vbGVhbjsgbm9DaGVja3M/OiBib29sZWFuOyBpbnRlcm5hbD86IGJvb2xlYW4gfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IHN0b3JlID0gZmluZEJ1Y2tldFN0b3JlKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSwgY29uZmlnLnNvdXJjZUNvbmZpZyk7XG4gICAgICAgIC8vIFRoZSBzdG9yZSB2YWxpZGF0ZXMgdGhlIHdyaXRlIGhlcmUsIGJlZm9yZSBhbnkgYnl0ZXMgbW92ZSAoc2VlIEJsb2JTdG9yZS5zdGFydExhcmdlVXBsb2FkKSAtIGEgbGFyZ2UgZmlsZSBpcyBhIHNldCwgYW5kIGl0cyBTZXRDb25maWcgZGVjaWRlcyB3aGV0aGVyIGl0IGlzIGV2ZW4gYWxsb3dlZFxuICAgICAgICBsZXQgd3JpdGUgPSB7IHBhdGg6IGNvbmZpZy5wYXRoLCBsYXN0TW9kaWZpZWQ6IGNvbmZpZy5sYXN0TW9kaWZpZWQsIGZvcmNlU2V0SW1tdXRhYmxlOiBjb25maWcuZm9yY2VTZXRJbW11dGFibGUsIG5vQ2hlY2tzOiBjb25maWcubm9DaGVja3MsIGludGVybmFsOiBjb25maWcuaW50ZXJuYWwgfTtcbiAgICAgICAgbGV0IGlkID0gYXdhaXQgc3RvcmUuc3RhcnRMYXJnZVVwbG9hZCh3cml0ZSk7XG4gICAgICAgIC8vIFRoZSBzdG9yZSBuYW1lIHBpbnMgdGhlIHVwbG9hZCdzIHBhcnRzIGFuZCBmaW5pc2ggdG8gdGhlIHNhbWUgc3RvcmUgdGhlIHN0YXJ0IHBpY2tlZCAoaW4tZmxpZ2h0IHVwbG9hZHMgc3Vydml2ZSBhIGJ1Y2tldCByZWJ1aWxkOiB0aGUgcGFydCBkYXRhIGxpdmVzIGluIHRoYXQgc3RvcmUncyBmb2xkZXIsIHdoaWNoIGEgcmVidWlsdCBzdG9yZSBzdGlsbCBvcGVucylcbiAgICAgICAgbGFyZ2VVcGxvYWRJbmZvLnNldChpZCwgeyAuLi53cml0ZSwgYWNjb3VudDogY29uZmlnLmFjY291bnQsIGJ1Y2tldE5hbWU6IGNvbmZpZy5idWNrZXROYW1lLCBzdG9yZU5hbWU6IGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSB9KTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgICAvKiogb2Zmc2V0IG1ha2VzIHRoZSBwYXJ0IHdyaXRlIHBvc2l0aW9uYWwgKHNlZSBBcmNoaXZlc0Rpc2suYXBwZW5kTGFyZ2VVcGxvYWQpLCB3aGljaCBpcyB3aGF0IGxldHMgdGhlIGNsaWVudCBSRVRSWSBhIGZhaWxlZCBwYXJ0IC0gYSByZS1zZW50IHBhcnQgbGFuZHMgb24gdGhlIHNhbWUgYnl0ZXMgaW5zdGVhZCBvZiBhcHBlbmRpbmcgdHdpY2UuICovXG4gICAgYXN5bmMgdXBsb2FkUGFydChjb25maWc6IHsgdXBsb2FkSWQ6IHN0cmluZzsgZGF0YTogQnVmZmVyOyBvZmZzZXQ/OiBudW1iZXIgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGxldCBpbmZvID0gbGFyZ2VVcGxvYWRJbmZvLmdldChjb25maWcudXBsb2FkSWQpO1xuICAgICAgICBpZiAoIWluZm8pIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsYXJnZSB1cGxvYWQgJHtjb25maWcudXBsb2FkSWR9YCk7XG4gICAgICAgIHRyYWNrQWNjZXNzKHsgYWNjb3VudDogaW5mby5hY2NvdW50LCBvcGVyYXRpb246IFwidXBsb2FkUGFydFwiLCBwYXRoOiBgJHtpbmZvLmJ1Y2tldE5hbWV9LyR7aW5mby5wYXRofWAsIHNpemU6IGNvbmZpZy5kYXRhLmxlbmd0aCB9KTtcbiAgICAgICAgYXdhaXQgZ2V0U3RvcmUoaW5mby5hY2NvdW50LCBpbmZvLmJ1Y2tldE5hbWUsIGluZm8uc3RvcmVOYW1lKS5hcHBlbmRMYXJnZVVwbG9hZCh7IGlkOiBjb25maWcudXBsb2FkSWQsIGRhdGE6IEJ1ZmZlci5mcm9tKGNvbmZpZy5kYXRhKSwgb2Zmc2V0OiBjb25maWcub2Zmc2V0IH0pO1xuICAgIH1cbiAgICBhc3luYyBmaW5pc2hMYXJnZUZpbGUoY29uZmlnOiB7IHVwbG9hZElkOiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGxldCBpbmZvID0gbGFyZ2VVcGxvYWRJbmZvLmdldChjb25maWcudXBsb2FkSWQpO1xuICAgICAgICBpZiAoIWluZm8pIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsYXJnZSB1cGxvYWQgJHtjb25maWcudXBsb2FkSWR9YCk7XG4gICAgICAgIGxhcmdlVXBsb2FkSW5mby5kZWxldGUoY29uZmlnLnVwbG9hZElkKTtcbiAgICAgICAgbGV0IGNhbGxlciA9IGNhbGxlcklkKCk7XG4gICAgICAgIGxldCBzdG9yZSA9IGdldFN0b3JlKGluZm8uYWNjb3VudCwgaW5mby5idWNrZXROYW1lLCBpbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgIGF3YWl0IHN0b3JlLmZpbmlzaExhcmdlVXBsb2FkKHsgaWQ6IGNvbmZpZy51cGxvYWRJZCwgcGF0aDogaW5mby5wYXRoLCBsYXN0TW9kaWZpZWQ6IGluZm8ubGFzdE1vZGlmaWVkLCBmb3JjZVNldEltbXV0YWJsZTogaW5mby5mb3JjZVNldEltbXV0YWJsZSwgbm9DaGVja3M6IGluZm8ubm9DaGVja3MsIGludGVybmFsOiBpbmZvLmludGVybmFsIH0pO1xuICAgICAgICBsZXQgd3JpdHRlbiA9IGF3YWl0IHN0b3JlLmdldEluZm8oeyBwYXRoOiBpbmZvLnBhdGggfSk7XG4gICAgICAgIGxvZ011dGF0aW9uKHsgb3A6IFwic2V0TGFyZ2VcIiwgYWNjb3VudDogaW5mby5hY2NvdW50LCBidWNrZXROYW1lOiBpbmZvLmJ1Y2tldE5hbWUsIHN0b3JlOiBpbmZvLnN0b3JlTmFtZSwgcGF0aDogaW5mby5wYXRoLCBzaXplOiB3cml0dGVuPy5zaXplLCB3cml0ZVRpbWU6IHdyaXR0ZW4/LndyaXRlVGltZSwgY2FsbGVySWQ6IGNhbGxlciB9KTtcbiAgICB9XG4gICAgLyoqIEJlc3QtZWZmb3J0IGNsZWFudXA6IGFuIHVua25vd24gdXBsb2FkIGhhcyBub3RoaW5nIGxlZnQgdG8gY2FuY2VsLiAqL1xuICAgIGFzeW5jIGNhbmNlbExhcmdlRmlsZShjb25maWc6IHsgdXBsb2FkSWQ6IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBpbmZvID0gbGFyZ2VVcGxvYWRJbmZvLmdldChjb25maWcudXBsb2FkSWQpO1xuICAgICAgICBpZiAoIWluZm8pIHJldHVybjtcbiAgICAgICAgbGFyZ2VVcGxvYWRJbmZvLmRlbGV0ZShjb25maWcudXBsb2FkSWQpO1xuICAgICAgICBhd2FpdCBnZXRTdG9yZShpbmZvLmFjY291bnQsIGluZm8uYnVja2V0TmFtZSwgaW5mby5zdG9yZU5hbWUpLmNhbmNlbExhcmdlVXBsb2FkKHsgaWQ6IGNvbmZpZy51cGxvYWRJZCB9KTtcbiAgICB9XG5cbiAgICAvLyBJTVBPUlRBTlQ6IFdlIGNhbiBuZXZlciBleHBvc2UgZW51bWVyYXRpb24gKGxpc3RpbmcsIHByZWZpeCBzZWFyY2gsIGNoYW5nZXMgZmVlZHMpIG92ZXIgdGhpcyBwdWJsaWMgSFRUUCBlbmRwb2ludCAtIG9ubHkgZXhhY3Qta2V5IHJlYWRzLiBFbnVtZXJhdGlvbiB3b3VsZCBiZSBhIG1hc3NpdmUgc2VjdXJpdHkgcmlzayAocHVibGljIGJ1Y2tldHMgcmVseSBvbiB1bmd1ZXNzYWJsZSBrZXlzIHN0YXlpbmcgdW5ndWVzc2FibGUpLCBhbmQgY291bGQgYWxzbyBjcmFzaCB0aGUgY2xpZW50IGJ5IHNlbmRpbmcgdGhlbSB0b28gbXVjaCBkYXRhLiBMaXN0aW5ncyBleGlzdCBvbmx5IG9uIHRoZSBhdXRoZW50aWNhdGVkIEFQSSAoZmluZEluZm8gZXRjLCBiZWhpbmQgYWNjb3VudEFjY2VzcykuXG4gICAgYXN5bmMgaHR0cEVudHJ5KGNvbmZpZz86IHsgcmVxdWlyZUNhbGxzPzogc3RyaW5nW107IGNhY2hlVGltZT86IG51bWJlciB9KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgbGV0IGNhbGxlciA9IFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpO1xuICAgICAgICBsZXQgcmVxdWVzdCA9IGdldEN1cnJlbnRIVFRQUmVxdWVzdCgpO1xuICAgICAgICBsZXQgcGF0aG5hbWUgPSBuZXcgVVJMKHJlcXVlc3Q/LnVybCB8fCBcIi9cIiwgXCJodHRwczovL2xvY2FsaG9zdFwiKS5wYXRobmFtZTtcbiAgICAgICAgaWYgKCFwYXRobmFtZS5zdGFydHNXaXRoKFwiL2ZpbGUvXCIpKSB7XG4gICAgICAgICAgICBsZXQgaHRtbCA9IGF3YWl0IHBlcmZvcm1Mb2NhbENhbGwoe1xuICAgICAgICAgICAgICAgIGNhbGxlcixcbiAgICAgICAgICAgICAgICBjYWxsOiB7IG5vZGVJZDogY2FsbGVyLm5vZGVJZCwgY2xhc3NHdWlkOiBSZXF1aXJlQ29udHJvbGxlci5fY2xhc3NHdWlkLCBmdW5jdGlvbk5hbWU6IFwicmVxdWlyZUhUTUxcIiwgYXJnczogW2NvbmZpZ10gfSxcbiAgICAgICAgICAgIH0pIGFzIEJ1ZmZlcjtcbiAgICAgICAgICAgIC8vIFdpdGhvdXQgdGhpcyB0aGUgYWNjZXNzIHBhZ2UgaXMgc2VydmVkIHdpdGggbm8gY29udGVudCB0eXBlLCBhbmQgYSBicm93c2VyIHRoYXQgaXMgdG9sZCBub3QgdG8gc25pZmYgc2ltcGx5IHdpbGwgbm90IHJlbmRlciBpdFxuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKGh0bWwsIHsgXCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFydHMgPSBwYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKHggPT4geCkubWFwKGRlY29kZVVSSUNvbXBvbmVudCk7XG4gICAgICAgIGxldCBhY2NvdW50ID0gcGFydHNbMV07XG4gICAgICAgIGxldCBidWNrZXROYW1lID0gcGFydHNbMl07XG4gICAgICAgIGxldCBmaWxlUGF0aCA9IHBhcnRzLnNsaWNlKDMpLmpvaW4oXCIvXCIpO1xuICAgICAgICBpZiAoIWFjY291bnQgfHwgIWJ1Y2tldE5hbWUgfHwgIWZpbGVQYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgc3RhdHVzOiBcIjQwNFwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydFZhbGlkTmFtZShhY2NvdW50LCBcImFjY291bnRcIik7XG4gICAgICAgIGFzc2VydFZhbGlkTmFtZShidWNrZXROYW1lLCBcImJ1Y2tldCBuYW1lXCIpO1xuICAgICAgICBhc3NlcnRWYWxpZFBhdGgoZmlsZVBhdGgpO1xuICAgICAgICBsZXQgYnVja2V0U3RvcmVzID0gYXdhaXQgZ2V0QnVja2V0U3RvcmVzKGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAoIWJ1Y2tldFN0b3Jlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRWFjaCBzdG9yZSdzIHBvbGljeSBjb21lcyBmcm9tIGl0cyBvd24gY29uZmlnLCB3aGljaCBpdCBoYXMgb25seSByZWFkIG9uY2UgaW5pdCByYW5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYnVja2V0U3RvcmVzLm1hcCh4ID0+IHguc3RvcmUuaW5pdCgpKSk7XG4gICAgICAgIGxldCBwb2xpY2llcyA9IGJ1Y2tldFN0b3Jlcy5tYXAoeCA9PiAoeyBzdG9yZTogeC5zdG9yZSwgcG9saWN5OiB4LnN0b3JlLnN0b3JlQ29uZmlnLmN1cnJlbnQoKSB9KSk7XG4gICAgICAgIGlmICghcG9saWNpZXMuc29tZSh4ID0+IHgucG9saWN5LnB1YmxpYykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQnVja2V0IGlzIG5vdCBwdWJsaWMsIHNvIGl0cyBmaWxlcyBjYW5ub3QgYmUgcmVhZCBvdmVyIHBsYWluIFVSTHM6ICR7YWNjb3VudH0vJHtidWNrZXROYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFub255bW91cyBVUkwgcmVhZHMgY2Fycnkgbm8gc291cmNlIHNlbGVjdGlvbiAtIHRoZSBmaWxlJ3Mgcm91dGUgcGlja3MgdGhlIHN0b3JlLCBhbmQgYSByb3V0ZSBubyBzdG9yZSBoZXJlIGNvdmVycyBpcyBzaW1wbHkgbm90IGZvdW5kICh0aGUgcm91dGluZyBmaWxlIGl0c2VsZiBsaXZlcyBvdXRzaWRlIGV2ZXJ5IHN0b3JlKVxuICAgICAgICBsZXQgaHR0cFN0b3JlOiBCbG9iU3RvcmUgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBpbW11dGFibGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGluZm86IHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZmlsZVBhdGggIT09IFJPVVRJTkdfRklMRSkge1xuICAgICAgICAgICAgbGV0IHJvdXRlID0gZ2V0Um91dGUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgbGV0IHNlcnZpbmcgPSBwb2xpY2llcy5maW5kKHggPT4geC5wb2xpY3kucHVibGljICYmIHJvdXRlQ29udGFpbnMoeC5wb2xpY3kucm91dGUsIHJvdXRlKSk7XG4gICAgICAgICAgICBodHRwU3RvcmUgPSBzZXJ2aW5nPy5zdG9yZTtcbiAgICAgICAgICAgIGltbXV0YWJsZSA9ICEhc2VydmluZz8ucG9saWN5LmltbXV0YWJsZTtcbiAgICAgICAgICAgIGluZm8gPSBodHRwU3RvcmUgJiYgYXdhaXQgaHR0cFN0b3JlLmdldEluZm8oeyBwYXRoOiBmaWxlUGF0aCB9KSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmZvID0gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbmZvIHx8ICFpbmZvLnNpemUpIHtcbiAgICAgICAgICAgIHRyYWNrQWNjZXNzKHsgYWNjb3VudCwgb3BlcmF0aW9uOiBcImh0dHBHZXRcIiwgcGF0aDogYCR7YnVja2V0TmFtZX0vJHtmaWxlUGF0aH1gLCBzaXplOiAwIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXh0ID0gZmlsZVBhdGguc3BsaXQoXCIuXCIpLnBvcCgpIHx8IFwiXCI7XG4gICAgICAgIGxldCBoZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogQ09OVEVOVF9UWVBFU1tleHQudG9Mb3dlckNhc2UoKV0gfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgICAgICAgIFwiTGFzdC1Nb2RpZmllZFwiOiBuZXcgRGF0ZShpbmZvLndyaXRlVGltZSkudG9VVENTdHJpbmcoKSxcbiAgICAgICAgICAgIFwiQWNjZXB0LVJhbmdlc1wiOiBcImJ5dGVzXCIsXG4gICAgICAgIH07XG4gICAgICAgIC8vIFRoZSBzZXJ2aW5nIHN0b3JlJ3Mgb3duIHBvbGljeSAtIGFuZCBuZXZlciBmb3IgdGhlIHJvdXRpbmcgZmlsZSwgd2hpY2ggY2hhbmdpbmcgaXMgdGhlIHdob2xlIHBvaW50IG9mXG4gICAgICAgIGlmIChpbW11dGFibGUpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gYG1heC1hZ2U9JHtJTU1VVEFCTEVfQ0FDSEVfVElNRSAvIDEwMDB9YDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaWZNb2RpZmllZFNpbmNlID0gcmVxdWVzdD8uaGVhZGVyc1tcImlmLW1vZGlmaWVkLXNpbmNlXCJdO1xuICAgICAgICBpZiAodHlwZW9mIGlmTW9kaWZpZWRTaW5jZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbGV0IHNpbmNlID0gbmV3IERhdGUoaWZNb2RpZmllZFNpbmNlKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBpZiAoc2luY2UgJiYgTWF0aC5mbG9vcihpbmZvLndyaXRlVGltZSAvIDEwMDApICogMTAwMCA8PSBzaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyAuLi5oZWFkZXJzLCBzdGF0dXM6IFwiMzA0XCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJhbmdlOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCByYW5nZUhlYWRlciA9IHJlcXVlc3Q/LmhlYWRlcnNbXCJyYW5nZVwiXTtcbiAgICAgICAgaWYgKHR5cGVvZiByYW5nZUhlYWRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbGV0IG1hdGNoID0gL15ieXRlcz0oXFxkKiktKFxcZCopJC8uZXhlYyhyYW5nZUhlYWRlci50cmltKCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoICYmIChtYXRjaFsxXSB8fCBtYXRjaFsyXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBsZXQgZW5kSW5jbHVzaXZlID0gaW5mby5zaXplIC0gMTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoMCwgaW5mby5zaXplIC0gK21hdGNoWzJdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9ICttYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRJbmNsdXNpdmUgPSBNYXRoLm1pbigrbWF0Y2hbMl0sIGluZm8uc2l6ZSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSBpbmZvLnNpemUgfHwgc3RhcnQgPiBlbmRJbmNsdXNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IC4uLmhlYWRlcnMsIFwiQ29udGVudC1SYW5nZVwiOiBgYnl0ZXMgKi8ke2luZm8uc2l6ZX1gLCBzdGF0dXM6IFwiNDE2XCIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJhbmdlID0geyBzdGFydCwgZW5kOiBlbmRJbmNsdXNpdmUgKyAxIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdDogeyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGh0dHBTdG9yZSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaHR0cFN0b3JlLmdldDIoeyBwYXRoOiBmaWxlUGF0aCwgcmFuZ2UgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBnZXRSb3V0aW5nRmlsZVJlc3VsdChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7IC4uLnJlc3VsdCwgZGF0YTogcmVzdWx0LmRhdGEuc3ViYXJyYXkoTWF0aC5taW4ocmFuZ2Uuc3RhcnQsIHJlc3VsdC5kYXRhLmxlbmd0aCksIE1hdGgubWluKHJhbmdlLmVuZCwgcmVzdWx0LmRhdGEubGVuZ3RoKSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmFja0FjY2Vzcyh7IGFjY291bnQsIG9wZXJhdGlvbjogXCJodHRwR2V0XCIsIHBhdGg6IGAke2J1Y2tldE5hbWV9LyR7ZmlsZVBhdGh9YCwgc2l6ZTogcmVzdWx0ICYmIHJlc3VsdC5kYXRhLmxlbmd0aCB8fCAwIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhyZXN1bHQuZGF0YSwgeyAuLi5oZWFkZXJzLCBcIkNvbnRlbnQtUmFuZ2VcIjogYGJ5dGVzICR7cmFuZ2Uuc3RhcnR9LSR7cmFuZ2UuZW5kIC0gMX0vJHtpbmZvLnNpemV9YCwgc3RhdHVzOiBcIjIwNlwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhyZXN1bHQuZGF0YSwgaGVhZGVycyk7XG4gICAgfVxufVxuXG4vKiogVGhlIG9uZSByZXNvbHV0aW9uIGV2ZXJ5IGRhdGEgY2FsbCBkb2VzOiB0aGUgY2xpZW50J3Mgc2VsZWN0ZWQgc291cmNlQ29uZmlnIE5BTUVTIGV4YWN0bHkgb25lIHN0b3JlIChjcmVhdGVkIG9uIGZpcnN0IHVzZSksIGFuZCBmbiBydW5zIG9uIGl0LiAqL1xuYXN5bmMgZnVuY3Rpb24gd2l0aFN0b3JlPFQ+KGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWcgfSwgZm46IChzdG9yZTogQmxvYlN0b3JlKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKGZpbmRCdWNrZXRTdG9yZShjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUsIGNvbmZpZy5zb3VyY2VDb25maWcpKTtcbn1cblxuLy8gVGhlIGNhbGxlcidzIG5vZGUgaWQgZm9yIHRoZSBtdXRhdGlvbiBsb2cgLSByZWFkIHN5bmNocm9ub3VzbHkgYXQgbWV0aG9kIGVudHJ5ICh0aGUgY2FsbCBjb250ZXh0IGRvZXMgbm90IHN1cnZpdmUgYXdhaXRzKSwgYW5kIHRvbGVyYW50IG9mIHRoZXJlIGJlaW5nIG5vbmUgKGxvY2FsIGNhbGxzKVxuZnVuY3Rpb24gY2FsbGVySWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCk/Lm5vZGVJZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbmNvbnN0IGxhcmdlVXBsb2FkSW5mbyA9IG5ldyBNYXA8c3RyaW5nLCB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuOyBub0NoZWNrcz86IGJvb2xlYW47IGludGVybmFsPzogYm9vbGVhbjsgc3RvcmVOYW1lOiBzdHJpbmcgfT4oKTtcblxuY29uc3QgYWNjb3VudEFjY2VzczogU29ja2V0RnVuY3Rpb25Ib29rID0gYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBjb25maWcgPSBjb250ZXh0LmNhbGwuYXJnc1swXSBhcyB7IGFjY291bnQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBhd2FpdCByZXF1aXJlQWNjZXNzKFN0cmluZyhjb25maWc/LmFjY291bnQpKTtcbiAgICBsZXQgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgaWYgKGR1cmF0aW9uID4gQUNDRVNTX0NIRUNLX1NMT1dfVElNRSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQWNjZXNzIGNoZWNrIGZvciAke2NvbnRleHQuY2FsbC5mdW5jdGlvbk5hbWV9IHRvb2sgJHtkdXJhdGlvbn1tc2ApO1xuICAgIH1cbn07XG5jb25zdCB1cGxvYWRBY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgbGV0IGNvbmZpZyA9IGNvbnRleHQuY2FsbC5hcmdzWzBdIGFzIHsgdXBsb2FkSWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoU3RyaW5nKGNvbmZpZz8udXBsb2FkSWQpKTtcbiAgICBpZiAoIWluZm8pIHJldHVybjtcbiAgICBhd2FpdCByZXF1aXJlQWNjZXNzKGluZm8uYWNjb3VudCk7XG59O1xuY29uc3QgYWRtaW5BY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jICgpID0+IHtcbiAgICByZXF1aXJlQWRtaW4oKTtcbn07XG5cbmV4cG9ydCBjb25zdCBSZW1vdGVTdG9yYWdlQ29udHJvbGxlciA9IFNvY2tldEZ1bmN0aW9uLnJlZ2lzdGVyKFxuICAgIFJFTU9URV9TVE9SQUdFX0NMQVNTX0dVSUQsXG4gICAgbmV3IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyQmFzZSgpLFxuICAgICgpID0+ICh7XG4gICAgICAgIHBpbmc6IHt9LFxuICAgICAgICBhdXRoZW50aWNhdGU6IHt9LFxuICAgICAgICBnZXRBY2Nlc3NTdGF0ZToge30sXG4gICAgICAgIGFkbWluTGlzdEFjdGl2ZUJ1Y2tldHM6IHsgaG9va3M6IFthZG1pbkFjY2Vzc10gfSxcbiAgICAgICAgZ2V0MjogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIHNldDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGRlbDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIG1vdmU6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRJbmZvOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZmluZEluZm86IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRDaGFuZ2VzQWZ0ZXIyOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0QXJjaGl2ZXNDb25maWc6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRJbmRleEluZm86IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBsaXN0QnVja2V0czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEFjdGl2ZUJ1Y2tldDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGFjdGl2YXRlQnVja2V0OiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgY2xlYXJXcml0ZVN0YXRzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0QWNjZXNzU3RhdHM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRBY2Nlc3NTdW1tYXJpZXM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRTeW5jU3RhdHVzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgbGlzdExvZ0ZpbGVzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0TG9nRmlsZTogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIHN0YXJ0TGFyZ2VGaWxlOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgdXBsb2FkUGFydDogeyBob29rczogW3VwbG9hZEFjY2Vzc10gfSxcbiAgICAgICAgZmluaXNoTGFyZ2VGaWxlOiB7IGhvb2tzOiBbdXBsb2FkQWNjZXNzXSB9LFxuICAgICAgICBjYW5jZWxMYXJnZUZpbGU6IHsgaG9va3M6IFt1cGxvYWRBY2Nlc3NdIH0sXG4gICAgICAgIGh0dHBFbnRyeToge30sXG4gICAgfSksXG4gICAgKCkgPT4gKHtcbiAgICAgICAgbm9DbGllbnRIb29rczogdHJ1ZSxcbiAgICAgICAgbm9EZWZhdWx0SG9va3M6IHRydWUsXG4gICAgfSlcbik7XG4iXX0=
546
+ /* _JS_SOURCE_HASH = "7f36a666cc29a7bcd881563b6b0c3e2a41bf856079ac39cbe0e32d8602f58fc2"; */