@ngtools/webpack 17.0.0-next.3 → 17.0.0-next.5

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.
@@ -33,6 +33,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
33
33
  exports.TypeScriptPathsPlugin = void 0;
34
34
  const path = __importStar(require("path"));
35
35
  class TypeScriptPathsPlugin {
36
+ baseUrl;
37
+ patterns;
36
38
  constructor(options) {
37
39
  if (options) {
38
40
  this.update(options);
@@ -63,7 +65,7 @@ class TypeScriptPathsPlugin {
63
65
  suffix = pattern.slice(starIndex + 1);
64
66
  }
65
67
  }
66
- this.patterns ?? (this.patterns = []);
68
+ this.patterns ??= [];
67
69
  this.patterns.push({
68
70
  starIndex,
69
71
  prefix,
@@ -123,10 +125,14 @@ class TypeScriptPathsPlugin {
123
125
  callback();
124
126
  return;
125
127
  }
128
+ // Absolute requests are not mapped
129
+ if (path.isAbsolute(originalRequest)) {
130
+ callback();
131
+ return;
132
+ }
126
133
  switch (originalRequest[0]) {
127
134
  case '.':
128
- case '/':
129
- // Relative or absolute requests are not mapped
135
+ // Relative requests are not mapped
130
136
  callback();
131
137
  return;
132
138
  case '!':
@@ -236,4 +242,4 @@ class TypeScriptPathsPlugin {
236
242
  }
237
243
  }
238
244
  exports.TypeScriptPathsPlugin = TypeScriptPathsPlugin;
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy9wYXRocy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCwyQ0FBNkI7QUF3QjdCLE1BQWEscUJBQXFCO0lBSWhDLFlBQVksT0FBc0M7UUFDaEQsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxPQUFxQztRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFFMUIsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2pCLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakUsNERBQTREO2dCQUM1RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUMsRUFBRTtvQkFDakYsU0FBUztpQkFDVjtnQkFFRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUM7Z0JBQ3JCLElBQUksTUFBTSxDQUFDO2dCQUNYLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNsQixNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUs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SSxPQUFPLEVBQUU7b0JBQ1gsV0FBVyxJQUFJLE9BQU8sQ0FBQztvQkFDdkIsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsV0FBVyxJQUFJLE1BQU0sQ0FBQztxQkFDdkI7aUJBQ0Y7Z0JBRUQsTUFBTSxXQUFXLENBQUM7YUFDbkI7U0FDRjtJQUNILENBQUM7SUFFRCxDQUFDLHlCQUF5QixDQUN4QixPQUFrQyxFQUNsQyxlQUF1QjtRQUV2QixLQUFLLE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUNoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pFLDJFQUEyRTtZQUMzRSwwQ0FBMEM7WUFDMUMsTUFBTTtnQkFDSixHQUFHLE9BQU87Z0JBQ1YsT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLG9CQUFvQixFQUFFLElBQUk7YUFDM0IsQ0FBQztZQUVGLDBFQUEwRTtZQUMxRSxnRUFBZ0U7WUFDaEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEQsSUFBSSxXQUFXLEVBQUU7Z0JBQ2Ysc0VBQXNFO2dCQUN0RSwyRUFBMkU7Z0JBQzNFLHdEQUF3RDtnQkFDeEQsTUFBTTtvQkFDSixHQUFHLE9BQU87b0JBQ1YsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLG9CQUFvQixFQUFFLElBQUk7aUJBQzNCLENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQztDQUNGO0FBdFBELHNEQXNQQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ29tcGlsZXJPcHRpb25zIH0gZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgdHlwZSB7IFJlc29sdmVyIH0gZnJvbSAnd2VicGFjayc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVTY3JpcHRQYXRoc1BsdWdpbk9wdGlvbnMgZXh0ZW5kcyBQaWNrPENvbXBpbGVyT3B0aW9ucywgJ3BhdGhzJyB8ICdiYXNlVXJsJz4ge31cblxuLy8gRXh0cmFjdCBSZXNvbHZlclJlcXVlc3QgdHlwZSBmcm9tIFdlYnBhY2sgdHlwZXMgc2luY2UgaXQgaXMgbm90IGRpcmVjdGx5IGV4cG9ydGVkXG50eXBlIFJlc29sdmVyUmVxdWVzdCA9IE5vbk51bGxhYmxlPFBhcmFtZXRlcnM8UGFyYW1ldGVyczxSZXNvbHZlclsncmVzb2x2ZSddPls0XT5bMl0+O1xuXG5pbnRlcmZhY2UgUGF0aFBsdWdpblJlc29sdmVyUmVxdWVzdCBleHRlbmRzIFJlc29sdmVyUmVxdWVzdCB7XG4gIGNvbnRleHQ/OiB7XG4gICAgaXNzdWVyPzogc3RyaW5nO1xuICB9O1xuICB0eXBlc2NyaXB0UGF0aE1hcHBlZD86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQYXRoUGF0dGVybiB7XG4gIHN0YXJJbmRleDogbnVtYmVyO1xuICBwcmVmaXg6IHN0cmluZztcbiAgc3VmZml4Pzogc3RyaW5nO1xuICBwb3RlbnRpYWxzOiB7IGhhc1N0YXI6IGJvb2xlYW47IHByZWZpeDogc3RyaW5nOyBzdWZmaXg/OiBzdHJpbmcgfVtdO1xufVxuXG5leHBvcnQgY2xhc3MgVHlwZVNjcmlwdFBhdGhzUGx1Z2luIHtcbiAgcHJpdmF0ZSBiYXNlVXJsPzogc3RyaW5nO1xuICBwcml2YXRlIHBhdHRlcm5zPzogUGF0aFBhdHRlcm5bXTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogVHlwZVNjcmlwdFBhdGhzUGx1Z2luT3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnVwZGF0ZShvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBwbHVnaW4gd2l0aCBuZXcgcGF0aCBtYXBwaW5nIG9wdGlvbiB2YWx1ZXMuXG4gICAqIFRoZSBvcHRpb25zIHdpbGwgYWxzbyBiZSBwcmVwcm9jZXNzZWQgdG8gcmVkdWNlIHRoZSBvdmVyaGVhZCBvZiBpbmRpdmlkdWFsIHJlc29sdmUgYWN0aW9uc1xuICAgKiBkdXJpbmcgYSBidWlsZC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGBwYXRoc2AgYW5kIGBiYXNlVXJsYCBvcHRpb25zIGZyb20gVHlwZVNjcmlwdCdzIGBDb21waWxlck9wdGlvbnNgLlxuICAgKi9cbiAgdXBkYXRlKG9wdGlvbnM6IFR5cGVTY3JpcHRQYXRoc1BsdWdpbk9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgdGhpcy5wYXR0ZXJucyA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChvcHRpb25zLnBhdGhzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCBwb3RlbnRpYWxzXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zLnBhdGhzKSkge1xuICAgICAgICAvLyBJZ25vcmUgYW55IGVudHJpZXMgdGhhdCB3b3VsZCBub3QgcmVzdWx0IGluIGEgbmV3IG1hcHBpbmdcbiAgICAgICAgaWYgKHBvdGVudGlhbHMubGVuZ3RoID09PSAwIHx8IHBvdGVudGlhbHMuZXZlcnkoKHBvdGVudGlhbCkgPT4gcG90ZW50aWFsID09PSAnKicpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGFySW5kZXggPSBwYXR0ZXJuLmluZGV4T2YoJyonKTtcbiAgICAgICAgbGV0IHByZWZpeCA9IHBhdHRlcm47XG4gICAgICAgIGxldCBzdWZmaXg7XG4gICAgICAgIGlmIChzdGFySW5kZXggPiAtMSkge1xuICAgICAgICAgIHByZWZpeCA9IHBhdHRlcm4uc2xpY2UoMCwgc3RhckluZGV4KTtcbiAgICAgICAgICBpZiAoc3RhckluZGV4IDwgcGF0dGVybi5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBzdWZmaXggPSBwYXR0ZXJuLnNsaWNlKHN0YXJJbmRleCArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGF0dGVybnMgPz89IFtdO1xuICAgICAgICB0aGlzLnBhdHRlcm5zLnB1c2goe1xuICAgICAgICAgIHN0YXJJbmRleCxcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgc3VmZml4LFxuICAgICAgICAgIHBvdGVudGlhbHM6IHBvdGVudGlhbHMubWFwKChwb3RlbnRpYWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvdGVudGlhbFN0YXJJbmRleCA9IHBvdGVudGlhbC5pbmRleE9mKCcqJyk7XG4gICAgICAgICAgICBpZiAocG90ZW50aWFsU3RhckluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4geyBoYXNTdGFyOiBmYWxzZSwgcHJlZml4OiBwb3RlbnRpYWwgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaGFzU3RhcjogdHJ1ZSxcbiAgICAgICAgICAgICAgcHJlZml4OiBwb3RlbnRpYWwuc2xpY2UoMCwgcG90ZW50aWFsU3RhckluZGV4KSxcbiAgICAgICAgICAgICAgc3VmZml4OlxuICAgICAgICAgICAgICAgIHBvdGVudGlhbFN0YXJJbmRleCA8IHBvdGVudGlhbC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICA/IHBvdGVudGlhbC5zbGljZShwb3RlbnRpYWxTdGFySW5kZXggKyAxKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gU29ydCBwYXR0ZXJucyBzbyB0aGF0IGV4YWN0IG1hdGNoZXMgdGFrZSBwcmlvcml0eSB0aGVuIGxhcmdlc3QgcHJlZml4IG1hdGNoXG4gICAgICB0aGlzLnBhdHRlcm5zPy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChhLnN0YXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAoYi5zdGFySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGIuc3RhckluZGV4IC0gYS5zdGFySW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5KHJlc29sdmVyOiBSZXNvbHZlcik6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IHJlc29sdmVyLmVuc3VyZUhvb2soJ3Jlc29sdmUnKTtcblxuICAgIC8vIFRvIHN1cHBvcnQgc3luY2hyb25vdXMgcmVzb2x2ZXJzIHRoaXMgaG9vayBjYW5ub3QgYmUgcHJvbWlzZSBiYXNlZC5cbiAgICAvLyBXZWJwYWNrIHN1cHBvcnRzIHN5bmNocm9ub3VzIHJlc29sdXRpb24gd2l0aCBgdGFwYCBhbmQgYHRhcEFzeW5jYCBob29rcy5cbiAgICByZXNvbHZlclxuICAgICAgLmdldEhvb2soJ2Rlc2NyaWJlZC1yZXNvbHZlJylcbiAgICAgIC50YXBBc3luYyhcbiAgICAgICAgJ1R5cGVTY3JpcHRQYXRoc1BsdWdpbicsXG4gICAgICAgIChyZXF1ZXN0OiBQYXRoUGx1Z2luUmVzb2x2ZXJSZXF1ZXN0LCByZXNvbHZlQ29udGV4dCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAvLyBQcmVwcm9jZXNzaW5nIG9mIHRoZSBvcHRpb25zIHdpbGwgZW5zdXJlIHRoYXQgYHBhdHRlcm5zYCBpcyBlaXRoZXIgdW5kZWZpbmVkIG9yIGhhcyBlbGVtZW50cyB0byBjaGVja1xuICAgICAgICAgIGlmICghdGhpcy5wYXR0ZXJucykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnR5cGVzY3JpcHRQYXRoTWFwcGVkKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1ZXN0ID0gcmVxdWVzdC5yZXF1ZXN0IHx8IHJlcXVlc3QucGF0aDtcbiAgICAgICAgICBpZiAoIW9yaWdpbmFsUmVxdWVzdCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE9ubHkgd29yayBvbiBKYXZhc2NyaXB0L1R5cGVTY3JpcHQgaXNzdWVycy5cbiAgICAgICAgICBpZiAoIXJlcXVlc3Q/LmNvbnRleHQ/Lmlzc3Vlcj8ubWF0Y2goL1xcLltjbV0/W2p0XXN4PyQvKSkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAob3JpZ2luYWxSZXF1ZXN0WzBdKSB7XG4gICAgICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgIGNhc2UgJy8nOlxuICAgICAgICAgICAgICAvLyBSZWxhdGl2ZSBvciBhYnNvbHV0ZSByZXF1ZXN0cyBhcmUgbm90IG1hcHBlZFxuICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgJyEnOlxuICAgICAgICAgICAgICAvLyBJZ25vcmUgYWxsIHdlYnBhY2sgc3BlY2lhbCByZXF1ZXN0c1xuICAgICAgICAgICAgICBpZiAob3JpZ2luYWxSZXF1ZXN0Lmxlbmd0aCA+IDEgJiYgb3JpZ2luYWxSZXF1ZXN0WzFdID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEEgZ2VuZXJhdG9yIGlzIHVzZWQgdG8gbGltaXQgdGhlIGFtb3VudCBvZiByZXBsYWNlbWVudHMgcmVxdWVzdHMgdGhhdCBuZWVkIHRvIGJlIGNyZWF0ZWQuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGlmIHRoZSBmaXJzdCBvbmUgcmVzb2x2ZXMsIGFueSBvdGhlcnMgYXJlIG5vdCBuZWVkZWQgYW5kIGRvIG5vdCBuZWVkXG4gICAgICAgICAgLy8gdG8gYmUgY3JlYXRlZC5cbiAgICAgICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVwbGFjZW1lbnRSZXF1ZXN0cyhyZXF1ZXN0LCBvcmlnaW5hbFJlcXVlc3QpO1xuXG4gICAgICAgICAgY29uc3QgdHJ5UmVzb2x2ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSByZXF1ZXN0cy5uZXh0KCk7XG4gICAgICAgICAgICBpZiAobmV4dC5kb25lKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlci5kb1Jlc29sdmUoXG4gICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSxcbiAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgIHJlc29sdmVDb250ZXh0LFxuICAgICAgICAgICAgICAoZXJyb3I6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgcmVzdWx0OiBSZXNvbHZlclJlcXVlc3QgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdHJ5UmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRyeVJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICAqZmluZFJlcGxhY2VtZW50cyhvcmlnaW5hbFJlcXVlc3Q6IHN0cmluZyk6IEl0ZXJhYmxlSXRlcmF0b3I8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLnBhdHRlcm5zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgYW55IHBhdGggbWFwcGluZyBydWxlcyBhcmUgcmVsZXZhbnRcbiAgICBmb3IgKGNvbnN0IHsgc3RhckluZGV4LCBwcmVmaXgsIHN1ZmZpeCwgcG90ZW50aWFscyB9IG9mIHRoaXMucGF0dGVybnMpIHtcbiAgICAgIGxldCBwYXJ0aWFsO1xuXG4gICAgICBpZiAoc3RhckluZGV4ID09PSAtMSkge1xuICAgICAgICAvLyBObyBzdGFyIG1lYW5zIGFuIGV4YWN0IG1hdGNoIGlzIHJlcXVpcmVkXG4gICAgICAgIGlmIChwcmVmaXggPT09IG9yaWdpbmFsUmVxdWVzdCkge1xuICAgICAgICAgIHBhcnRpYWwgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGFySW5kZXggPT09IDAgJiYgIXN1ZmZpeCkge1xuICAgICAgICAvLyBFdmVyeXRoaW5nIG1hdGNoZXMgYSBzaW5nbGUgd2lsZGNhcmQgcGF0dGVybiAoXCIqXCIpXG4gICAgICAgIHBhcnRpYWwgPSBvcmlnaW5hbFJlcXVlc3Q7XG4gICAgICB9IGVsc2UgaWYgKCFzdWZmaXgpIHtcbiAgICAgICAgLy8gTm8gc3VmZml4IG1lYW5zIHRoZSBzdGFyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm5cbiAgICAgICAgaWYgKG9yaWdpbmFsUmVxdWVzdC5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgICBwYXJ0aWFsID0gb3JpZ2luYWxSZXF1ZXN0LnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdGFyIHdhcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYXR0ZXJuXG4gICAgICAgIGlmIChvcmlnaW5hbFJlcXVlc3Quc3RhcnRzV2l0aChwcmVmaXgpICYmIG9yaWdpbmFsUmVxdWVzdC5lbmRzV2l0aChzdWZmaXgpKSB7XG4gICAgICAgICAgcGFydGlhbCA9IG9yaWdpbmFsUmVxdWVzdC5zdWJzdHJpbmcoXG4gICAgICAgICAgICBwcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgb3JpZ2luYWxSZXF1ZXN0Lmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiByZXF1ZXN0IHdhcyBub3QgbWF0Y2hlZCwgbW92ZSBvbiB0byB0aGUgbmV4dCBwYXR0ZXJuXG4gICAgICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgdGhlIGZ1bGwgcmVwbGFjZW1lbnQgdmFsdWVzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGFuZCB0aGUgcG90ZW50aWFsc1xuICAgICAgLy8gZm9yIHRoZSBzdWNjZXNzZnVsbHkgbWF0Y2hlZCBwYXR0ZXJuLlxuICAgICAgZm9yIChjb25zdCB7IGhhc1N0YXIsIHByZWZpeCwgc3VmZml4IH0gb2YgcG90ZW50aWFscykge1xuICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSBwcmVmaXg7XG5cbiAgICAgICAgaWYgKGhhc1N0YXIpIHtcbiAgICAgICAgICByZXBsYWNlbWVudCArPSBwYXJ0aWFsO1xuICAgICAgICAgIGlmIChzdWZmaXgpIHtcbiAgICAgICAgICAgIHJlcGxhY2VtZW50ICs9IHN1ZmZpeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB5aWVsZCByZXBsYWNlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAqY3JlYXRlUmVwbGFjZW1lbnRSZXF1ZXN0cyhcbiAgICByZXF1ZXN0OiBQYXRoUGx1Z2luUmVzb2x2ZXJSZXF1ZXN0LFxuICAgIG9yaWdpbmFsUmVxdWVzdDogc3RyaW5nLFxuICApOiBJdGVyYWJsZUl0ZXJhdG9yPFBhdGhQbHVnaW5SZXNvbHZlclJlcXVlc3Q+IHtcbiAgICBmb3IgKGNvbnN0IHJlcGxhY2VtZW50IG9mIHRoaXMuZmluZFJlcGxhY2VtZW50cyhvcmlnaW5hbFJlcXVlc3QpKSB7XG4gICAgICBjb25zdCB0YXJnZXRQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZVVybCA/PyAnJywgcmVwbGFjZW1lbnQpO1xuICAgICAgLy8gUmVzb2x1dGlvbiBpbiB0aGUgb3JpZ2luYWwgY2FsbGVlIGxvY2F0aW9uLCBidXQgd2l0aCB0aGUgdXBkYXRlZCByZXF1ZXN0XG4gICAgICAvLyB0byBwb2ludCB0byB0aGUgbWFwcGVkIHRhcmdldCBsb2NhdGlvbi5cbiAgICAgIHlpZWxkIHtcbiAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgcmVxdWVzdDogdGFyZ2V0UGF0aCxcbiAgICAgICAgdHlwZXNjcmlwdFBhdGhNYXBwZWQ6IHRydWUsXG4gICAgICB9O1xuXG4gICAgICAvLyBJZiB0aGVyZSBpcyBubyBleHRlbnNpb24uIGkuZS4gdGhlIHRhcmdldCBkb2VzIG5vdCByZWZlciB0byBhbiBleHBsaWNpdFxuICAgICAgLy8gZmlsZSwgdGhlbiB0aGlzIGlzIGEgY2FuZGlkYXRlIGZvciBtb2R1bGUvcGFja2FnZSByZXNvbHV0aW9uLlxuICAgICAgY29uc3QgY2FuQmVNb2R1bGUgPSBwYXRoLmV4dG5hbWUodGFyZ2V0UGF0aCkgPT09ICcnO1xuICAgICAgaWYgKGNhbkJlTW9kdWxlKSB7XG4gICAgICAgIC8vIFJlc29sdXRpb24gaW4gdGhlIHRhcmdldCBsb2NhdGlvbiwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgcmVxdWVzdC5cbiAgICAgICAgLy8gVGhpcyB3aWxsIHdvcmsgd2l0aCB0aGUgYHJlc29sdmUtaW4tcGFja2FnZWAgcmVzb2x1dGlvbiBob29rLCBzdXBwb3J0aW5nXG4gICAgICAgIC8vIHBhY2thZ2UgZXhwb3J0cyBmb3IgZS5nLiBsb2NhbGx5LWJ1aWx0IEFQRiBsaWJyYXJpZXMuXG4gICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAuLi5yZXF1ZXN0LFxuICAgICAgICAgIHBhdGg6IHRhcmdldFBhdGgsXG4gICAgICAgICAgdHlwZXNjcmlwdFBhdGhNYXBwZWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy9wYXRocy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCwyQ0FBNkI7QUF3QjdCLE1BQWEscUJBQXFCO0lBQ3hCLE9BQU8sQ0FBVTtJQUNqQixRQUFRLENBQWlCO0lBRWpDLFlBQVksT0FBc0M7UUFDaEQsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxPQUFxQztRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFFMUIsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2pCLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakUsNERBQTREO2dCQUM1RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUMsRUFBRTtvQkFDakYsU0FBUztpQkFDVjtnQkFFRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUM7Z0JBQ3JCLElBQUksTUFBTSxDQUFDO2dCQUNYLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNsQixNQUFNLEdB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LE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksVUFBVSxFQUFFO2dCQUNwRCxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBRXpCLElBQUksT0FBTyxFQUFFO29CQUNYLFdBQVcsSUFBSSxPQUFPLENBQUM7b0JBQ3ZCLElBQUksTUFBTSxFQUFFO3dCQUNWLFdBQVcsSUFBSSxNQUFNLENBQUM7cUJBQ3ZCO2lCQUNGO2dCQUVELE1BQU0sV0FBVyxDQUFDO2FBQ25CO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsQ0FBQyx5QkFBeUIsQ0FDeEIsT0FBa0MsRUFDbEMsZUFBdUI7UUFFdkIsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDaEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNqRSwyRUFBMkU7WUFDM0UsMENBQTBDO1lBQzFDLE1BQU07Z0JBQ0osR0FBRyxPQUFPO2dCQUNWLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixvQkFBb0IsRUFBRSxJQUFJO2FBQzNCLENBQUM7WUFFRiwwRUFBMEU7WUFDMUUsZ0VBQWdFO1lBQ2hFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BELElBQUksV0FBVyxFQUFFO2dCQUNmLHNFQUFzRTtnQkFDdEUsMkVBQTJFO2dCQUMzRSx3REFBd0Q7Z0JBQ3hELE1BQU07b0JBQ0osR0FBRyxPQUFPO29CQUNWLElBQUksRUFBRSxVQUFVO29CQUNoQixvQkFBb0IsRUFBRSxJQUFJO2lCQUMzQixDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7Q0FDRjtBQTVQRCxzREE0UEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbXBpbGVyT3B0aW9ucyB9IGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZlciB9IGZyb20gJ3dlYnBhY2snO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBUeXBlU2NyaXB0UGF0aHNQbHVnaW5PcHRpb25zIGV4dGVuZHMgUGljazxDb21waWxlck9wdGlvbnMsICdwYXRocycgfCAnYmFzZVVybCc+IHt9XG5cbi8vIEV4dHJhY3QgUmVzb2x2ZXJSZXF1ZXN0IHR5cGUgZnJvbSBXZWJwYWNrIHR5cGVzIHNpbmNlIGl0IGlzIG5vdCBkaXJlY3RseSBleHBvcnRlZFxudHlwZSBSZXNvbHZlclJlcXVlc3QgPSBOb25OdWxsYWJsZTxQYXJhbWV0ZXJzPFBhcmFtZXRlcnM8UmVzb2x2ZXJbJ3Jlc29sdmUnXT5bNF0+WzJdPjtcblxuaW50ZXJmYWNlIFBhdGhQbHVnaW5SZXNvbHZlclJlcXVlc3QgZXh0ZW5kcyBSZXNvbHZlclJlcXVlc3Qge1xuICBjb250ZXh0Pzoge1xuICAgIGlzc3Vlcj86IHN0cmluZztcbiAgfTtcbiAgdHlwZXNjcmlwdFBhdGhNYXBwZWQ/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGF0aFBhdHRlcm4ge1xuICBzdGFySW5kZXg6IG51bWJlcjtcbiAgcHJlZml4OiBzdHJpbmc7XG4gIHN1ZmZpeD86IHN0cmluZztcbiAgcG90ZW50aWFsczogeyBoYXNTdGFyOiBib29sZWFuOyBwcmVmaXg6IHN0cmluZzsgc3VmZml4Pzogc3RyaW5nIH1bXTtcbn1cblxuZXhwb3J0IGNsYXNzIFR5cGVTY3JpcHRQYXRoc1BsdWdpbiB7XG4gIHByaXZhdGUgYmFzZVVybD86IHN0cmluZztcbiAgcHJpdmF0ZSBwYXR0ZXJucz86IFBhdGhQYXR0ZXJuW107XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IFR5cGVTY3JpcHRQYXRoc1BsdWdpbk9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy51cGRhdGUob3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcGx1Z2luIHdpdGggbmV3IHBhdGggbWFwcGluZyBvcHRpb24gdmFsdWVzLlxuICAgKiBUaGUgb3B0aW9ucyB3aWxsIGFsc28gYmUgcHJlcHJvY2Vzc2VkIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2YgaW5kaXZpZHVhbCByZXNvbHZlIGFjdGlvbnNcbiAgICogZHVyaW5nIGEgYnVpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBgcGF0aHNgIGFuZCBgYmFzZVVybGAgb3B0aW9ucyBmcm9tIFR5cGVTY3JpcHQncyBgQ29tcGlsZXJPcHRpb25zYC5cbiAgICovXG4gIHVwZGF0ZShvcHRpb25zOiBUeXBlU2NyaXB0UGF0aHNQbHVnaW5PcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuICAgIHRoaXMucGF0dGVybnMgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAob3B0aW9ucy5wYXRocykge1xuICAgICAgZm9yIChjb25zdCBbcGF0dGVybiwgcG90ZW50aWFsc10gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucy5wYXRocykpIHtcbiAgICAgICAgLy8gSWdub3JlIGFueSBlbnRyaWVzIHRoYXQgd291bGQgbm90IHJlc3VsdCBpbiBhIG5ldyBtYXBwaW5nXG4gICAgICAgIGlmIChwb3RlbnRpYWxzLmxlbmd0aCA9PT0gMCB8fCBwb3RlbnRpYWxzLmV2ZXJ5KChwb3RlbnRpYWwpID0+IHBvdGVudGlhbCA9PT0gJyonKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhckluZGV4ID0gcGF0dGVybi5pbmRleE9mKCcqJyk7XG4gICAgICAgIGxldCBwcmVmaXggPSBwYXR0ZXJuO1xuICAgICAgICBsZXQgc3VmZml4O1xuICAgICAgICBpZiAoc3RhckluZGV4ID4gLTEpIHtcbiAgICAgICAgICBwcmVmaXggPSBwYXR0ZXJuLnNsaWNlKDAsIHN0YXJJbmRleCk7XG4gICAgICAgICAgaWYgKHN0YXJJbmRleCA8IHBhdHRlcm4ubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgc3VmZml4ID0gcGF0dGVybi5zbGljZShzdGFySW5kZXggKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBhdHRlcm5zID8/PSBbXTtcbiAgICAgICAgdGhpcy5wYXR0ZXJucy5wdXNoKHtcbiAgICAgICAgICBzdGFySW5kZXgsXG4gICAgICAgICAgcHJlZml4LFxuICAgICAgICAgIHN1ZmZpeCxcbiAgICAgICAgICBwb3RlbnRpYWxzOiBwb3RlbnRpYWxzLm1hcCgocG90ZW50aWFsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb3RlbnRpYWxTdGFySW5kZXggPSBwb3RlbnRpYWwuaW5kZXhPZignKicpO1xuICAgICAgICAgICAgaWYgKHBvdGVudGlhbFN0YXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgaGFzU3RhcjogZmFsc2UsIHByZWZpeDogcG90ZW50aWFsIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGhhc1N0YXI6IHRydWUsXG4gICAgICAgICAgICAgIHByZWZpeDogcG90ZW50aWFsLnNsaWNlKDAsIHBvdGVudGlhbFN0YXJJbmRleCksXG4gICAgICAgICAgICAgIHN1ZmZpeDpcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxTdGFySW5kZXggPCBwb3RlbnRpYWwubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgPyBwb3RlbnRpYWwuc2xpY2UocG90ZW50aWFsU3RhckluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNvcnQgcGF0dGVybnMgc28gdGhhdCBleGFjdCBtYXRjaGVzIHRha2UgcHJpb3JpdHkgdGhlbiBsYXJnZXN0IHByZWZpeCBtYXRjaFxuICAgICAgdGhpcy5wYXR0ZXJucz8uc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYS5zdGFySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKGIuc3RhckluZGV4ID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBiLnN0YXJJbmRleCAtIGEuc3RhckluZGV4O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhcHBseShyZXNvbHZlcjogUmVzb2x2ZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSByZXNvbHZlci5lbnN1cmVIb29rKCdyZXNvbHZlJyk7XG5cbiAgICAvLyBUbyBzdXBwb3J0IHN5bmNocm9ub3VzIHJlc29sdmVycyB0aGlzIGhvb2sgY2Fubm90IGJlIHByb21pc2UgYmFzZWQuXG4gICAgLy8gV2VicGFjayBzdXBwb3J0cyBzeW5jaHJvbm91cyByZXNvbHV0aW9uIHdpdGggYHRhcGAgYW5kIGB0YXBBc3luY2AgaG9va3MuXG4gICAgcmVzb2x2ZXJcbiAgICAgIC5nZXRIb29rKCdkZXNjcmliZWQtcmVzb2x2ZScpXG4gICAgICAudGFwQXN5bmMoXG4gICAgICAgICdUeXBlU2NyaXB0UGF0aHNQbHVnaW4nLFxuICAgICAgICAocmVxdWVzdDogUGF0aFBsdWdpblJlc29sdmVyUmVxdWVzdCwgcmVzb2x2ZUNvbnRleHQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgLy8gUHJlcHJvY2Vzc2luZyBvZiB0aGUgb3B0aW9ucyB3aWxsIGVuc3VyZSB0aGF0IGBwYXR0ZXJuc2AgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBoYXMgZWxlbWVudHMgdG8gY2hlY2tcbiAgICAgICAgICBpZiAoIXRoaXMucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC50eXBlc2NyaXB0UGF0aE1hcHBlZCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWVzdCA9IHJlcXVlc3QucmVxdWVzdCB8fCByZXF1ZXN0LnBhdGg7XG4gICAgICAgICAgaWYgKCFvcmlnaW5hbFJlcXVlc3QpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBPbmx5IHdvcmsgb24gSmF2YXNjcmlwdC9UeXBlU2NyaXB0IGlzc3VlcnMuXG4gICAgICAgICAgaWYgKCFyZXF1ZXN0Py5jb250ZXh0Py5pc3N1ZXI/Lm1hdGNoKC9cXC5bY21dP1tqdF1zeD8kLykpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBYnNvbHV0ZSByZXF1ZXN0cyBhcmUgbm90IG1hcHBlZFxuICAgICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUob3JpZ2luYWxSZXF1ZXN0KSkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAob3JpZ2luYWxSZXF1ZXN0WzBdKSB7XG4gICAgICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgICAgLy8gUmVsYXRpdmUgcmVxdWVzdHMgYXJlIG5vdCBtYXBwZWRcbiAgICAgICAgICAgICAgY2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICchJzpcbiAgICAgICAgICAgICAgLy8gSWdub3JlIGFsbCB3ZWJwYWNrIHNwZWNpYWwgcmVxdWVzdHNcbiAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsUmVxdWVzdC5sZW5ndGggPiAxICYmIG9yaWdpbmFsUmVxdWVzdFsxXSA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBIGdlbmVyYXRvciBpcyB1c2VkIHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgcmVwbGFjZW1lbnRzIHJlcXVlc3RzIHRoYXQgbmVlZCB0byBiZSBjcmVhdGVkLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBpZiB0aGUgZmlyc3Qgb25lIHJlc29sdmVzLCBhbnkgb3RoZXJzIGFyZSBub3QgbmVlZGVkIGFuZCBkbyBub3QgbmVlZFxuICAgICAgICAgIC8vIHRvIGJlIGNyZWF0ZWQuXG4gICAgICAgICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcGxhY2VtZW50UmVxdWVzdHMocmVxdWVzdCwgb3JpZ2luYWxSZXF1ZXN0KTtcblxuICAgICAgICAgIGNvbnN0IHRyeVJlc29sdmUgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gcmVxdWVzdHMubmV4dCgpO1xuICAgICAgICAgICAgaWYgKG5leHQuZG9uZSkge1xuICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZXIuZG9SZXNvbHZlKFxuICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgIG5leHQudmFsdWUsXG4gICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICByZXNvbHZlQ29udGV4dCxcbiAgICAgICAgICAgICAgKGVycm9yOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsIHJlc3VsdDogUmVzb2x2ZXJSZXF1ZXN0IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRyeVJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0cnlSZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgKmZpbmRSZXBsYWNlbWVudHMob3JpZ2luYWxSZXF1ZXN0OiBzdHJpbmcpOiBJdGVyYWJsZUl0ZXJhdG9yPHN0cmluZz4ge1xuICAgIGlmICghdGhpcy5wYXR0ZXJucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIGFueSBwYXRoIG1hcHBpbmcgcnVsZXMgYXJlIHJlbGV2YW50XG4gICAgZm9yIChjb25zdCB7IHN0YXJJbmRleCwgcHJlZml4LCBzdWZmaXgsIHBvdGVudGlhbHMgfSBvZiB0aGlzLnBhdHRlcm5zKSB7XG4gICAgICBsZXQgcGFydGlhbDtcblxuICAgICAgaWYgKHN0YXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgLy8gTm8gc3RhciBtZWFucyBhbiBleGFjdCBtYXRjaCBpcyByZXF1aXJlZFxuICAgICAgICBpZiAocHJlZml4ID09PSBvcmlnaW5hbFJlcXVlc3QpIHtcbiAgICAgICAgICBwYXJ0aWFsID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RhckluZGV4ID09PSAwICYmICFzdWZmaXgpIHtcbiAgICAgICAgLy8gRXZlcnl0aGluZyBtYXRjaGVzIGEgc2luZ2xlIHdpbGRjYXJkIHBhdHRlcm4gKFwiKlwiKVxuICAgICAgICBwYXJ0aWFsID0gb3JpZ2luYWxSZXF1ZXN0O1xuICAgICAgfSBlbHNlIGlmICghc3VmZml4KSB7XG4gICAgICAgIC8vIE5vIHN1ZmZpeCBtZWFucyB0aGUgc3RhciBpcyBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuXG4gICAgICAgIGlmIChvcmlnaW5hbFJlcXVlc3Quc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgcGFydGlhbCA9IG9yaWdpbmFsUmVxdWVzdC5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU3RhciB3YXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcGF0dGVyblxuICAgICAgICBpZiAob3JpZ2luYWxSZXF1ZXN0LnN0YXJ0c1dpdGgocHJlZml4KSAmJiBvcmlnaW5hbFJlcXVlc3QuZW5kc1dpdGgoc3VmZml4KSkge1xuICAgICAgICAgIHBhcnRpYWwgPSBvcmlnaW5hbFJlcXVlc3Quc3Vic3RyaW5nKFxuICAgICAgICAgICAgcHJlZml4Lmxlbmd0aCxcbiAgICAgICAgICAgIG9yaWdpbmFsUmVxdWVzdC5sZW5ndGggLSBzdWZmaXgubGVuZ3RoLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgcmVxdWVzdCB3YXMgbm90IG1hdGNoZWQsIG1vdmUgb24gdG8gdGhlIG5leHQgcGF0dGVyblxuICAgICAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHRoZSBmdWxsIHJlcGxhY2VtZW50IHZhbHVlcyBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgcmVxdWVzdCBhbmQgdGhlIHBvdGVudGlhbHNcbiAgICAgIC8vIGZvciB0aGUgc3VjY2Vzc2Z1bGx5IG1hdGNoZWQgcGF0dGVybi5cbiAgICAgIGZvciAoY29uc3QgeyBoYXNTdGFyLCBwcmVmaXgsIHN1ZmZpeCB9IG9mIHBvdGVudGlhbHMpIHtcbiAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gcHJlZml4O1xuXG4gICAgICAgIGlmIChoYXNTdGFyKSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgKz0gcGFydGlhbDtcbiAgICAgICAgICBpZiAoc3VmZml4KSB7XG4gICAgICAgICAgICByZXBsYWNlbWVudCArPSBzdWZmaXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgeWllbGQgcmVwbGFjZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgKmNyZWF0ZVJlcGxhY2VtZW50UmVxdWVzdHMoXG4gICAgcmVxdWVzdDogUGF0aFBsdWdpblJlc29sdmVyUmVxdWVzdCxcbiAgICBvcmlnaW5hbFJlcXVlc3Q6IHN0cmluZyxcbiAgKTogSXRlcmFibGVJdGVyYXRvcjxQYXRoUGx1Z2luUmVzb2x2ZXJSZXF1ZXN0PiB7XG4gICAgZm9yIChjb25zdCByZXBsYWNlbWVudCBvZiB0aGlzLmZpbmRSZXBsYWNlbWVudHMob3JpZ2luYWxSZXF1ZXN0KSkge1xuICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmJhc2VVcmwgPz8gJycsIHJlcGxhY2VtZW50KTtcbiAgICAgIC8vIFJlc29sdXRpb24gaW4gdGhlIG9yaWdpbmFsIGNhbGxlZSBsb2NhdGlvbiwgYnV0IHdpdGggdGhlIHVwZGF0ZWQgcmVxdWVzdFxuICAgICAgLy8gdG8gcG9pbnQgdG8gdGhlIG1hcHBlZCB0YXJnZXQgbG9jYXRpb24uXG4gICAgICB5aWVsZCB7XG4gICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgIHJlcXVlc3Q6IHRhcmdldFBhdGgsXG4gICAgICAgIHR5cGVzY3JpcHRQYXRoTWFwcGVkOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZXh0ZW5zaW9uLiBpLmUuIHRoZSB0YXJnZXQgZG9lcyBub3QgcmVmZXIgdG8gYW4gZXhwbGljaXRcbiAgICAgIC8vIGZpbGUsIHRoZW4gdGhpcyBpcyBhIGNhbmRpZGF0ZSBmb3IgbW9kdWxlL3BhY2thZ2UgcmVzb2x1dGlvbi5cbiAgICAgIGNvbnN0IGNhbkJlTW9kdWxlID0gcGF0aC5leHRuYW1lKHRhcmdldFBhdGgpID09PSAnJztcbiAgICAgIGlmIChjYW5CZU1vZHVsZSkge1xuICAgICAgICAvLyBSZXNvbHV0aW9uIGluIHRoZSB0YXJnZXQgbG9jYXRpb24sIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgIC8vIFRoaXMgd2lsbCB3b3JrIHdpdGggdGhlIGByZXNvbHZlLWluLXBhY2thZ2VgIHJlc29sdXRpb24gaG9vaywgc3VwcG9ydGluZ1xuICAgICAgICAvLyBwYWNrYWdlIGV4cG9ydHMgZm9yIGUuZy4gbG9jYWxseS1idWlsdCBBUEYgbGlicmFyaWVzLlxuICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgICBwYXRoOiB0YXJnZXRQYXRoLFxuICAgICAgICAgIHR5cGVzY3JpcHRQYXRoTWFwcGVkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -43,12 +43,15 @@ const paths_1 = require("./ivy/paths");
43
43
  const inline_resource_1 = require("./loaders/inline-resource");
44
44
  const replace_resources_1 = require("./transformers/replace_resources");
45
45
  class WebpackResourceLoader {
46
+ _parentCompilation;
47
+ _fileDependencies = new Map();
48
+ _reverseDependencies = new Map();
49
+ fileCache;
50
+ assetCache;
51
+ modifiedResources = new Set();
52
+ outputPathCounter = 1;
53
+ inlineDataLoaderPath = inline_resource_1.InlineAngularResourceLoaderPath;
46
54
  constructor(shouldCache) {
47
- this._fileDependencies = new Map();
48
- this._reverseDependencies = new Map();
49
- this.modifiedResources = new Set();
50
- this.outputPathCounter = 1;
51
- this.inlineDataLoaderPath = inline_resource_1.InlineAngularResourceLoaderPath;
52
55
  if (shouldCache) {
53
56
  this.fileCache = new Map();
54
57
  this.assetCache = new Map();
@@ -305,4 +308,4 @@ class WebpackResourceLoader {
305
308
  }
306
309
  }
307
310
  exports.WebpackResourceLoader = WebpackResourceLoader;
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VfbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy9yZXNvdXJjZV9sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw4REFBaUM7QUFDakMsNkNBQXFDO0FBQ3JDLGdEQUFrQztBQUNsQyw0Q0FBOEI7QUFFOUIsbURBQTZDO0FBQzdDLHVDQUE0QztBQUM1QywrREFJbUM7QUFDbkMsd0VBQStFO0FBUS9FLE1BQWEscUJBQXFCO0lBYWhDLFlBQVksV0FBb0I7UUFYeEIsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDbkQseUJBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFLdEQsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN0QyxzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFFYix5QkFBb0IsR0FBRyxpREFBK0IsQ0FBQztRQUd0RSxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUE4QixFQUFFLFlBQStCO1FBQ3BFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztRQUU1QywrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRS9CLElBQUksWUFBWSxFQUFFO1lBQ2hCLEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFO2dCQUN0QyxNQUFNLHFCQUFxQixHQUFHLElBQUEscUJBQWEsRUFBQyxXQUFXLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFFL0MsS0FBSyxNQUFNLGdCQUFnQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDckUsTUFBTSwwQkFBMEIsR0FBRyxJQUFBLHFCQUFhLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDbkUsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUU3QyxLQUFLLE1BQU0sb0JBQW9CLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUM3RCwwQkFBMEIsQ0FDM0IsRUFBRTt3QkFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFBLHFCQUFhLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3FCQUM5RDtpQkFDRjthQUNGO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMxQjtRQUVELDJDQUEyQztRQUMzQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUN4RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDdkQ7U0FDRjtJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxRQUFnQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVksRUFBRSxTQUEyQjtRQUM1RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxrREFBa0Q7SUFDMUMsS0FBSyxDQUFDLFFBQVEsQ0FDcEIsUUFBaUIsRUFDakIsSUFBYSxFQUNiLGFBQXNCLEVBQ3RCLFlBQW1DLEVBQ25DLGNBQXVCO1FBRXZCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1NBQ25GO1FBRUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDO1FBQzlELE1BQU0sRUFDSixXQUFXLEVBQ1gsWUFBWSxFQUNaLE9BQU8sRUFDUCxJQUFJLEVBQ0osT0FBTyxFQUNQLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUNyQixHQUFHLE9BQU8sQ0FBQztRQUVaLE1BQU0sUUFBUSxHQUFHLEdBQVcsRUFBRTtZQUM1QixJQUFJLFFBQVEsRUFBRTtnQkFDWixPQUFPLEdBQUcsUUFBUSxJQUFJLCtDQUEyQixFQUFFLENBQUM7YUFDckQ7aUJBQU0sSUFBSSxZQUFZLEVBQUU7Z0JBQ3ZCLE9BQU87Z0JBQ0wsdUdBQXVHO2dCQUN2RyxHQUFHLGNBQWMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksYUFBYSxFQUFFO29CQUM5RCxJQUFJLCtDQUEyQixNQUFNLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxjQUFjLEVBQUUsQ0FDbkYsQ0FBQzthQUNIO2lCQUFNLElBQUksSUFBSSxFQUFFO2dCQUNmLDREQUE0RDtnQkFDNUQsT0FBTyxvQkFBb0IsWUFBWSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUM7cUJBQzlELE1BQU0sQ0FBQyxJQUFJLENBQUM7cUJBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7YUFDcEI7WUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFFekIsdUJBQXVCO1FBQ3ZCLElBQUksUUFBUSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUNiLCtDQUErQyxRQUFRLDhDQUE4QyxDQUN0RyxDQUFDO1NBQ0g7UUFFRCxNQUFNLGNBQWMsR0FDbEIsUUFBUTtZQUNSLEdBQUcsY0FBYyxvQkFBb0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQzNELFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FDekMsRUFBRSxDQUFDO1FBQ0wsTUFBTSxhQUFhLEdBQUc7WUFDcEIsUUFBUSxFQUFFLGNBQWM7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxLQUFLO2dCQUNYLElBQUksRUFBRSxVQUFVO2FBQ2pCO1NBQ0YsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FDL0QsMkJBQTJCLEVBQzNCLGFBQWEsRUFDYjtZQUNFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzNCLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDckQsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1NBQ3ZDLENBQ0YsQ0FBQztRQUVGLGFBQWEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FDckMsa0JBQWtCLEVBQ2xCLENBQUMsV0FBVyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxFQUFFO1lBQ3ZDLHdFQUF3RTtZQUN4RSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQ3RCLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7cUJBQ3ZDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztxQkFDdkIsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7b0JBQ3hDLElBQUksUUFBUSxFQUFFO3dCQUNaLFlBQVksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO3dCQUM3QixZQUFZLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztxQkFDbEM7b0JBRUQsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztxQkFDMUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO3FCQUM3QyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRXRDLFdBQW9ELENBQUMsNkNBQTJCLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDM0Y7WUFFRCxXQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7Z0JBQzlELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsT0FBTztpQkFDUjtnQkFFRCxJQUFJO29CQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUV6RSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTt3QkFDOUIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3BFO2lCQUNGO2dCQUFDLE9BQU8sS0FBSyxFQUFFO29CQUNkLElBQUEscUJBQU0sRUFBQyxLQUFLLFlBQVksS0FBSyxFQUFFLGdEQUFnRCxDQUFDLENBQUM7b0JBQ2pGLDBEQUEwRDtvQkFDMUQsSUFBQSxzQkFBUSxFQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3RDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQ0YsQ0FBQztRQUVGLElBQUksWUFBZ0MsQ0FBQztRQUNyQyxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQzNFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUN0QyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsRUFBRSxFQUNwRixHQUFHLEVBQUU7Z0JBQ0gsWUFBWSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFNUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFO29CQUMvQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTt3QkFDeEIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNwQztpQkFDRjtZQUNILENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksT0FBTyxDQUFvQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN4RCxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO2dCQUN0RCxJQUFJLEtBQUssRUFBRTtvQkFDVCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRWQsT0FBTztpQkFDUjtxQkFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQzVCLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUM7b0JBRXJELE9BQU87aUJBQ1I7Z0JBRUQsc0VBQXNFO2dCQUN0RSx1RkFBdUY7Z0JBQ3ZGLDBDQUEwQztnQkFDMUMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLGlCQUFpQixDQUFDO2dCQUMvQyxJQUFJLE1BQU0sRUFBRTtvQkFDVixNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxnQkFBeUMsQ0FBQztvQkFFOUMsS0FBSyxNQUFNLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRTt3QkFDMUQsaUVBQWlFO3dCQUNqRSwwRUFBMEU7d0JBQzFFLGtEQUFrRDt3QkFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7NEJBQzdCLFNBQVM7eUJBQ1Y7d0JBRUQsSUFBSSxJQUFJLElBQUksY0FBYyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ3hELGlEQUFpRDs0QkFDakQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQzt5QkFDN0M7NkJBQU07NEJBQ0wsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDekM7d0JBRUQsMkNBQTJDO3dCQUMzQyxJQUFJLFFBQVEsRUFBRTs0QkFDWixNQUFNLFlBQVksR0FBRyxJQUFBLHFCQUFhLEVBQUMsVUFBVSxDQUFDLENBQUM7NEJBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQzFELElBQUksS0FBSyxFQUFFO2dDQUNULEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7NkJBQ3JCO2lDQUFNO2dDQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUNsRTs0QkFFRCxJQUFJLGdCQUFnQixFQUFFO2dDQUNwQixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7NkJBQ2xDO2lDQUFNO2dDQUNMLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQ0FDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzs2QkFDeEQ7eUJBQ0Y7cUJBQ0Y7b0JBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUN4RSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7b0JBQ3hFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFFcEUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDbkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFL0MsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO3dCQUNuQixLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxFQUFFOzRCQUNqRSx1REFBdUQ7NEJBQ3ZELDhEQUE4RDs0QkFDOUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxpQkFBaUIsSUFBSSxFQUFFLENBQUM7NEJBRWhFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQzt5QkFDdkQ7cUJBQ0Y7aUJBQ0Y7Z0JBRUQsT0FBTyxDQUFDO29CQUNOLE9BQU8sRUFBRSxZQUFZLElBQUksRUFBRTtvQkFDM0IsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUssQ0FBQztpQkFDL0MsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxTQUFTLENBQUMsUUFBZ0IsRUFBRSxNQUFjO1FBQ2hELGdCQUFnQjtRQUVoQix5RkFBeUY7UUFDekYsTUFBTSxPQUFPLEdBQWtGO1lBQzdGLElBQUksQ0FBQyxLQUFLO2dCQUNSLE9BQU8sb0JBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLENBQUM7U0FDRixDQUFDO1FBRUYsSUFBSTtZQUNGLEVBQUUsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDbkQ7UUFBQyxNQUFNO1lBQ04sc0RBQXNEO1lBQ3RELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDeEMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDO1NBQ3pCO2FBQU0sSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUN4RCxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1NBQ2pDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLFFBQVEsMkJBQTJCLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFnQjtRQUN4QixNQUFNLGNBQWMsR0FBRyxJQUFBLHFCQUFhLEVBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU1RCxJQUFJLGlCQUFpQixLQUFLLFNBQVMsRUFBRTtZQUNuQyxpQ0FBaUM7WUFDakMsaUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRWxELDJDQUEyQztZQUMzQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksaUJBQWlCLENBQUMsT0FBTyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzthQUN2RDtTQUNGO1FBRUQsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQ1gsSUFBWSxFQUNaLGFBQWlDLEVBQ2pDLFlBQWtDLEVBQ2xDLGNBQXVCO1FBRXZCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUMzQyxTQUFTLEVBQ1QsSUFBSSxFQUNKLGFBQWEsRUFDYixZQUFZLEVBQ1osY0FBYyxDQUNmLENBQUM7UUFFRixPQUFPLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFoV0Qsc0RBZ1dDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnbm9kZTpidWZmZXInO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgdm0gZnJvbSAnbm9kZTp2bSc7XG5pbXBvcnQgdHlwZSB7IEFzc2V0LCBDb21waWxhdGlvbiB9IGZyb20gJ3dlYnBhY2snO1xuaW1wb3J0IHsgYWRkRXJyb3IgfSBmcm9tICcuL2l2eS9kaWFnbm9zdGljcyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9pdnkvcGF0aHMnO1xuaW1wb3J0IHtcbiAgQ29tcGlsYXRpb25XaXRoSW5saW5lQW5ndWxhclJlc291cmNlLFxuICBJbmxpbmVBbmd1bGFyUmVzb3VyY2VMb2FkZXJQYXRoLFxuICBJbmxpbmVBbmd1bGFyUmVzb3VyY2VTeW1ib2wsXG59IGZyb20gJy4vbG9hZGVycy9pbmxpbmUtcmVzb3VyY2UnO1xuaW1wb3J0IHsgTkdfQ09NUE9ORU5UX1JFU09VUkNFX1FVRVJZIH0gZnJvbSAnLi90cmFuc2Zvcm1lcnMvcmVwbGFjZV9yZXNvdXJjZXMnO1xuXG5pbnRlcmZhY2UgQ29tcGlsYXRpb25PdXRwdXQge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIG1hcD86IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFdlYnBhY2tSZXNvdXJjZUxvYWRlciB7XG4gIHByaXZhdGUgX3BhcmVudENvbXBpbGF0aW9uPzogQ29tcGlsYXRpb247XG4gIHByaXZhdGUgX2ZpbGVEZXBlbmRlbmNpZXMgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gIHByaXZhdGUgX3JldmVyc2VEZXBlbmRlbmNpZXMgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG5cbiAgcHJpdmF0ZSBmaWxlQ2FjaGU/OiBNYXA8c3RyaW5nLCBDb21waWxhdGlvbk91dHB1dD47XG4gIHByaXZhdGUgYXNzZXRDYWNoZT86IE1hcDxzdHJpbmcsIEFzc2V0PjtcblxuICBwcml2YXRlIG1vZGlmaWVkUmVzb3VyY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgb3V0cHV0UGF0aENvdW50ZXIgPSAxO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5saW5lRGF0YUxvYWRlclBhdGggPSBJbmxpbmVBbmd1bGFyUmVzb3VyY2VMb2FkZXJQYXRoO1xuXG4gIGNvbnN0cnVjdG9yKHNob3VsZENhY2hlOiBib29sZWFuKSB7XG4gICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICB0aGlzLmZpbGVDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgIHRoaXMuYXNzZXRDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGUocGFyZW50Q29tcGlsYXRpb246IENvbXBpbGF0aW9uLCBjaGFuZ2VkRmlsZXM/OiBJdGVyYWJsZTxzdHJpbmc+KSB7XG4gICAgdGhpcy5fcGFyZW50Q29tcGlsYXRpb24gPSBwYXJlbnRDb21waWxhdGlvbjtcblxuICAgIC8vIFVwZGF0ZSByZXNvdXJjZSBjYWNoZSBhbmQgbW9kaWZpZWQgcmVzb3VyY2VzXG4gICAgdGhpcy5tb2RpZmllZFJlc291cmNlcy5jbGVhcigpO1xuXG4gICAgaWYgKGNoYW5nZWRGaWxlcykge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkRmlsZSBvZiBjaGFuZ2VkRmlsZXMpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlZEZpbGVOb3JtYWxpemVkID0gbm9ybWFsaXplUGF0aChjaGFuZ2VkRmlsZSk7XG4gICAgICAgIHRoaXMuYXNzZXRDYWNoZT8uZGVsZXRlKGNoYW5nZWRGaWxlTm9ybWFsaXplZCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBhZmZlY3RlZFJlc291cmNlIG9mIHRoaXMuZ2V0QWZmZWN0ZWRSZXNvdXJjZXMoY2hhbmdlZEZpbGUpKSB7XG4gICAgICAgICAgY29uc3QgYWZmZWN0ZWRSZXNvdXJjZU5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKGFmZmVjdGVkUmVzb3VyY2UpO1xuICAgICAgICAgIHRoaXMuZmlsZUNhY2hlPy5kZWxldGUoYWZmZWN0ZWRSZXNvdXJjZU5vcm1hbGl6ZWQpO1xuICAgICAgICAgIHRoaXMubW9kaWZpZWRSZXNvdXJjZXMuYWRkKGFmZmVjdGVkUmVzb3VyY2UpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBlZmZlY3RlZERlcGVuZGVuY2llcyBvZiB0aGlzLmdldFJlc291cmNlRGVwZW5kZW5jaWVzKFxuICAgICAgICAgICAgYWZmZWN0ZWRSZXNvdXJjZU5vcm1hbGl6ZWQsXG4gICAgICAgICAgKSkge1xuICAgICAgICAgICAgdGhpcy5hc3NldENhY2hlPy5kZWxldGUobm9ybWFsaXplUGF0aChlZmZlY3RlZERlcGVuZGVuY2llcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbGVDYWNoZT8uY2xlYXIoKTtcbiAgICAgIHRoaXMuYXNzZXRDYWNoZT8uY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBSZS1lbWl0IGFsbCBhc3NldHMgZm9yIHVuLWVmZmVjdGVkIGZpbGVzXG4gICAgaWYgKHRoaXMuYXNzZXRDYWNoZSkge1xuICAgICAgZm9yIChjb25zdCBbLCB7IG5hbWUsIHNvdXJjZSwgaW5mbyB9XSBvZiB0aGlzLmFzc2V0Q2FjaGUpIHtcbiAgICAgICAgdGhpcy5fcGFyZW50Q29tcGlsYXRpb24uZW1pdEFzc2V0KG5hbWUsIHNvdXJjZSwgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYXJQYXJlbnRDb21waWxhdGlvbigpIHtcbiAgICB0aGlzLl9wYXJlbnRDb21waWxhdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldE1vZGlmaWVkUmVzb3VyY2VGaWxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RpZmllZFJlc291cmNlcztcbiAgfVxuXG4gIGdldFJlc291cmNlRGVwZW5kZW5jaWVzKGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZURlcGVuZGVuY2llcy5nZXQoZmlsZVBhdGgpIHx8IFtdO1xuICB9XG5cbiAgZ2V0QWZmZWN0ZWRSZXNvdXJjZXMoZmlsZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldmVyc2VEZXBlbmRlbmNpZXMuZ2V0KGZpbGUpIHx8IFtdO1xuICB9XG5cbiAgc2V0QWZmZWN0ZWRSZXNvdXJjZXMoZmlsZTogc3RyaW5nLCByZXNvdXJjZXM6IEl0ZXJhYmxlPHN0cmluZz4pIHtcbiAgICB0aGlzLl9yZXZlcnNlRGVwZW5kZW5jaWVzLnNldChmaWxlLCBuZXcgU2V0KHJlc291cmNlcykpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1saW5lcy1wZXItZnVuY3Rpb25cbiAgcHJpdmF0ZSBhc3luYyBfY29tcGlsZShcbiAgICBmaWxlUGF0aD86IHN0cmluZyxcbiAgICBkYXRhPzogc3RyaW5nLFxuICAgIGZpbGVFeHRlbnNpb24/OiBzdHJpbmcsXG4gICAgcmVzb3VyY2VUeXBlPzogJ3N0eWxlJyB8ICd0ZW1wbGF0ZScsXG4gICAgY29udGFpbmluZ0ZpbGU/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8Q29tcGlsYXRpb25PdXRwdXQ+IHtcbiAgICBpZiAoIXRoaXMuX3BhcmVudENvbXBpbGF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYnBhY2tSZXNvdXJjZUxvYWRlciBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHBhcmVudENvbXBpbGF0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjb250ZXh0LCB3ZWJwYWNrIH0gPSB0aGlzLl9wYXJlbnRDb21waWxhdGlvbi5jb21waWxlcjtcbiAgICBjb25zdCB7XG4gICAgICBFbnRyeVBsdWdpbixcbiAgICAgIE5vcm1hbE1vZHVsZSxcbiAgICAgIGxpYnJhcnksXG4gICAgICBub2RlLFxuICAgICAgc291cmNlcyxcbiAgICAgIHV0aWw6IHsgY3JlYXRlSGFzaCB9LFxuICAgIH0gPSB3ZWJwYWNrO1xuXG4gICAgY29uc3QgZ2V0RW50cnkgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gYCR7ZmlsZVBhdGh9PyR7TkdfQ09NUE9ORU5UX1JFU09VUkNFX1FVRVJZfWA7XG4gICAgICB9IGVsc2UgaWYgKHJlc291cmNlVHlwZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIC8vIGFwcC5jb21wb25lbnQudHMtMi5jc3M/bmdSZXNvdXJjZSE9IUBuZ3Rvb2xzL3dlYnBhY2svc3JjL2xvYWRlcnMvaW5saW5lLXJlc291cmNlLmpzIWFwcC5jb21wb25lbnQudHNcbiAgICAgICAgICBgJHtjb250YWluaW5nRmlsZX0tJHt0aGlzLm91dHB1dFBhdGhDb3VudGVyfS4ke2ZpbGVFeHRlbnNpb259YCArXG4gICAgICAgICAgYD8ke05HX0NPTVBPTkVOVF9SRVNPVVJDRV9RVUVSWX0hPSEke3RoaXMuaW5saW5lRGF0YUxvYWRlclBhdGh9ISR7Y29udGFpbmluZ0ZpbGV9YFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHNwZWNpYWwgVVJMIGZvciByZWFkaW5nIHRoZSByZXNvdXJjZSBmcm9tIG1lbW9yeVxuICAgICAgICByZXR1cm4gYGFuZ3VsYXItcmVzb3VyY2U6JHtyZXNvdXJjZVR5cGV9LCR7Y3JlYXRlSGFzaCgneHhoYXNoNjQnKVxuICAgICAgICAgIC51cGRhdGUoZGF0YSlcbiAgICAgICAgICAuZGlnZXN0KCdoZXgnKX1gO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiZmlsZVBhdGhcIiwgXCJyZXNvdXJjZVR5cGVcIiBvciBcImRhdGFcIiBtdXN0IGJlIHNwZWNpZmllZC5gKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW50cnkgPSBnZXRFbnRyeSgpO1xuXG4gICAgLy8gU2ltcGxlIHNhbml0eSBjaGVjay5cbiAgICBpZiAoZmlsZVBhdGg/Lm1hdGNoKC9cXC5banRdcyQvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHVzZSBhIEphdmFTY3JpcHQgb3IgVHlwZVNjcmlwdCBmaWxlICgke2ZpbGVQYXRofSkgaW4gYSBjb21wb25lbnQncyBzdHlsZVVybHMgb3IgdGVtcGxhdGVVcmwuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0RmlsZVBhdGggPVxuICAgICAgZmlsZVBhdGggfHxcbiAgICAgIGAke2NvbnRhaW5pbmdGaWxlfS1hbmd1bGFyLWlubGluZS0tJHt0aGlzLm91dHB1dFBhdGhDb3VudGVyKyt9LiR7XG4gICAgICAgIHJlc291cmNlVHlwZSA9PT0gJ3RlbXBsYXRlJyA/ICdodG1sJyA6ICdjc3MnXG4gICAgICB9YDtcbiAgICBjb25zdCBvdXRwdXRPcHRpb25zID0ge1xuICAgICAgZmlsZW5hbWU6IG91dHB1dEZpbGVQYXRoLFxuICAgICAgbGlicmFyeToge1xuICAgICAgICB0eXBlOiAndmFyJyxcbiAgICAgICAgbmFtZTogJ3Jlc291cmNlJyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGNoaWxkQ29tcGlsZXIgPSB0aGlzLl9wYXJlbnRDb21waWxhdGlvbi5jcmVhdGVDaGlsZENvbXBpbGVyKFxuICAgICAgJ2FuZ3VsYXItY29tcGlsZXI6cmVzb3VyY2UnLFxuICAgICAgb3V0cHV0T3B0aW9ucyxcbiAgICAgIFtcbiAgICAgICAgbmV3IG5vZGUuTm9kZVRlbXBsYXRlUGx1Z2luKCksXG4gICAgICAgIG5ldyBub2RlLk5vZGVUYXJnZXRQbHVnaW4oKSxcbiAgICAgICAgbmV3IEVudHJ5UGx1Z2luKGNvbnRleHQsIGVudHJ5LCB7IG5hbWU6ICdyZXNvdXJjZScgfSksXG4gICAgICAgIG5ldyBsaWJyYXJ5LkVuYWJsZUxpYnJhcnlQbHVnaW4oJ3ZhcicpLFxuICAgICAgXSxcbiAgICApO1xuXG4gICAgY2hpbGRDb21waWxlci5ob29rcy50aGlzQ29tcGlsYXRpb24udGFwKFxuICAgICAgJ2FuZ3VsYXItY29tcGlsZXInLFxuICAgICAgKGNvbXBpbGF0aW9uLCB7IG5vcm1hbE1vZHVsZUZhY3RvcnkgfSkgPT4ge1xuICAgICAgICAvLyBJZiBubyBkYXRhIGlzIHByb3ZpZGVkLCB0aGUgcmVzb3VyY2Ugd2lsbCBiZSByZWFkIGZyb20gdGhlIGZpbGVzeXN0ZW1cbiAgICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vcm1hbE1vZHVsZUZhY3RvcnkuaG9va3MucmVzb2x2ZUZvclNjaGVtZVxuICAgICAgICAgICAgLmZvcignYW5ndWxhci1yZXNvdXJjZScpXG4gICAgICAgICAgICAudGFwKCdhbmd1bGFyLWNvbXBpbGVyJywgKHJlc291cmNlRGF0YSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZURhdGEucGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgIHJlc291cmNlRGF0YS5yZXNvdXJjZSA9IGZpbGVQYXRoO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBOb3JtYWxNb2R1bGUuZ2V0Q29tcGlsYXRpb25Ib29rcyhjb21waWxhdGlvbilcbiAgICAgICAgICAgIC5yZWFkUmVzb3VyY2VGb3JTY2hlbWUuZm9yKCdhbmd1bGFyLXJlc291cmNlJylcbiAgICAgICAgICAgIC50YXAoJ2FuZ3VsYXItY29tcGlsZXInLCAoKSA9PiBkYXRhKTtcblxuICAgICAgICAgIChjb21waWxhdGlvbiBhcyBDb21waWxhdGlvbldpdGhJbmxpbmVBbmd1bGFyUmVzb3VyY2UpW0lubGluZUFuZ3VsYXJSZXNvdXJjZVN5bWJvbF0gPSBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tcGlsYXRpb24uaG9va3MuYWRkaXRpb25hbEFzc2V0cy50YXAoJ2FuZ3VsYXItY29tcGlsZXInLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXNzZXQgPSBjb21waWxhdGlvbi5hc3NldHNbb3V0cHV0RmlsZVBhdGhdO1xuICAgICAgICAgIGlmICghYXNzZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5fZXZhbHVhdGUob3V0cHV0RmlsZVBhdGgsIGFzc2V0LnNvdXJjZSgpLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG91dHB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgY29tcGlsYXRpb24uYXNzZXRzW291dHB1dEZpbGVQYXRoXSA9IG5ldyBzb3VyY2VzLlJhd1NvdXJjZShvdXRwdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBhc3NlcnQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciwgJ2NhdGNoIGNsYXVzZSB2YXJpYWJsZSBpcyBub3QgYW4gRXJyb3IgaW5zdGFuY2UnKTtcbiAgICAgICAgICAgIC8vIFVzZSBjb21waWxhdGlvbiBlcnJvcnMsIGFzIG90aGVyd2lzZSB3ZWJwYWNrIHdpbGwgY2hva2VcbiAgICAgICAgICAgIGFkZEVycm9yKGNvbXBpbGF0aW9uLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgbGV0IGZpbmFsQ29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNoaWxkQ29tcGlsZXIuaG9va3MuY29tcGlsYXRpb24udGFwKCdhbmd1bGFyLWNvbXBpbGVyJywgKGNoaWxkQ29tcGlsYXRpb24pID0+IHtcbiAgICAgIGNoaWxkQ29tcGlsYXRpb24uaG9va3MucHJvY2Vzc0Fzc2V0cy50YXAoXG4gICAgICAgIHsgbmFtZTogJ2FuZ3VsYXItY29tcGlsZXInLCBzdGFnZTogd2VicGFjay5Db21waWxhdGlvbi5QUk9DRVNTX0FTU0VUU19TVEFHRV9SRVBPUlQgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGZpbmFsQ29udGVudCA9IGNoaWxkQ29tcGlsYXRpb24uYXNzZXRzW291dHB1dEZpbGVQYXRoXT8uc291cmNlKCkudG9TdHJpbmcoKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgeyBmaWxlcyB9IG9mIGNoaWxkQ29tcGlsYXRpb24uY2h1bmtzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgICAgY2hpbGRDb21waWxhdGlvbi5kZWxldGVBc3NldChmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPENvbXBpbGF0aW9uT3V0cHV0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjaGlsZENvbXBpbGVyLnJ1bkFzQ2hpbGQoKGVycm9yLCBfLCBjaGlsZENvbXBpbGF0aW9uKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoIWNoaWxkQ29tcGlsYXRpb24pIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdVbmtub3duIGNoaWxkIGNvbXBpbGF0aW9uIGVycm9yJykpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV29ya2Fyb3VuZCB0byBhdHRlbXB0IHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2Ugb2YgY2hpbGQgY29tcGlsYXRpb25zLlxuICAgICAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIGNoaWxkIGNvbXBpbGF0aW9uIGZyb20gdGhlIG1haW4gY29tcGlsYXRpb24gYW5kIG1hbnVhbGx5IHByb3BhZ2F0ZXNcbiAgICAgICAgLy8gYWxsIGRlcGVuZGVuY2llcywgd2FybmluZ3MsIGFuZCBlcnJvcnMuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkQ29tcGlsZXIucGFyZW50Q29tcGlsYXRpb247XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQgIT09IGNoaWxkQ29tcGlsYXRpb24pO1xuICAgICAgICAgIGxldCBmaWxlRGVwZW5kZW5jaWVzOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBjaGlsZENvbXBpbGF0aW9uLmZpbGVEZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgIC8vIFNraXAgcGF0aHMgdGhhdCBkbyBub3QgYXBwZWFyIHRvIGJlIGZpbGVzIChoYXZlIG5vIGV4dGVuc2lvbikuXG4gICAgICAgICAgICAvLyBgZmlsZURlcGVuZGVuY2llc2AgY2FuIGNvbnRhaW4gZGlyZWN0b3JpZXMgYW5kIG5vdCBqdXN0IGZpbGVzIHdoaWNoIGNhblxuICAgICAgICAgICAgLy8gY2F1c2UgaW5jb3JyZWN0IGNhY2hlIGludmFsaWRhdGlvbiBvbiByZWJ1aWxkcy5cbiAgICAgICAgICAgIGlmICghcGF0aC5leHRuYW1lKGRlcGVuZGVuY3kpKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBjb250YWluaW5nRmlsZSAmJiBkZXBlbmRlbmN5LmVuZHNXaXRoKGVudHJ5KSkge1xuICAgICAgICAgICAgICAvLyB1c2UgY29udGFpbmluZyBmaWxlIGlmIHRoZSByZXNvdXJjZSB3YXMgaW5saW5lXG4gICAgICAgICAgICAgIHBhcmVudC5maWxlRGVwZW5kZW5jaWVzLmFkZChjb250YWluaW5nRmlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJlbnQuZmlsZURlcGVuZGVuY2llcy5hZGQoZGVwZW5kZW5jeSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCkge1xuICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZEZpbGUgPSBub3JtYWxpemVQYXRoKGRlcGVuZGVuY3kpO1xuICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuX3JldmVyc2VEZXBlbmRlbmNpZXMuZ2V0KHJlc29sdmVkRmlsZSk7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5LmFkZChmaWxlUGF0aCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZURlcGVuZGVuY2llcy5zZXQocmVzb2x2ZWRGaWxlLCBuZXcgU2V0KFtmaWxlUGF0aF0pKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChmaWxlRGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgZmlsZURlcGVuZGVuY2llcy5hZGQoZGVwZW5kZW5jeSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmlsZURlcGVuZGVuY2llcyA9IG5ldyBTZXQoW2RlcGVuZGVuY3ldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlRGVwZW5kZW5jaWVzLnNldChmaWxlUGF0aCwgZmlsZURlcGVuZGVuY2llcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJlbnQuY29udGV4dERlcGVuZGVuY2llcy5hZGRBbGwoY2hpbGRDb21waWxhdGlvbi5jb250ZXh0RGVwZW5kZW5jaWVzKTtcbiAgICAgICAgICBwYXJlbnQubWlzc2luZ0RlcGVuZGVuY2llcy5hZGRBbGwoY2hpbGRDb21waWxhdGlvbi5taXNzaW5nRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgICBwYXJlbnQuYnVpbGREZXBlbmRlbmNpZXMuYWRkQWxsKGNoaWxkQ29tcGlsYXRpb24uYnVpbGREZXBlbmRlbmNpZXMpO1xuXG4gICAgICAgICAgcGFyZW50Lndhcm5pbmdzLnB1c2goLi4uY2hpbGRDb21waWxhdGlvbi53YXJuaW5ncyk7XG4gICAgICAgICAgcGFyZW50LmVycm9ycy5wdXNoKC4uLmNoaWxkQ29tcGlsYXRpb24uZXJyb3JzKTtcblxuICAgICAgICAgIGlmICh0aGlzLmFzc2V0Q2FjaGUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBpbmZvLCBuYW1lLCBzb3VyY2UgfSBvZiBjaGlsZENvbXBpbGF0aW9uLmdldEFzc2V0cygpKSB7XG4gICAgICAgICAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYXRpbmcgZmlsZSBhcyB0aGUgY2FjaGUga2V5IGlmIHByZXNlbnRcbiAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBnZW5lcmF0ZSBhIGNhY2hlIGtleSBiYXNlZCBvbiB0aGUgZ2VuZXJhdGVkIG5hbWVcbiAgICAgICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBpbmZvLnNvdXJjZUZpbGVuYW1lID8/IGAhIVtHRU5FUkFURURdOiR7bmFtZX1gO1xuXG4gICAgICAgICAgICAgIHRoaXMuYXNzZXRDYWNoZS5zZXQoY2FjaGVLZXksIHsgaW5mbywgbmFtZSwgc291cmNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIGNvbnRlbnQ6IGZpbmFsQ29udGVudCA/PyAnJyxcbiAgICAgICAgICBzdWNjZXNzOiBjaGlsZENvbXBpbGF0aW9uLmVycm9ycz8ubGVuZ3RoID09PSAwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXZhbHVhdGUoZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAvLyBFdmFsdWF0ZSBjb2RlXG5cbiAgICAvLyBjc3MtbG9hZGVyIHJlcXVpcmVzIHRoZSBidG9hIGZ1bmN0aW9uIHRvIGV4aXN0IHRvIGNvcnJlY3RseSBnZW5lcmF0ZSBpbmxpbmUgc291cmNlbWFwc1xuICAgIGNvbnN0IGNvbnRleHQ6IHsgYnRvYTogKGlucHV0OiBzdHJpbmcpID0+IHN0cmluZzsgcmVzb3VyY2U/OiBzdHJpbmcgfCB7IGRlZmF1bHQ/OiBzdHJpbmcgfSB9ID0ge1xuICAgICAgYnRvYShpbnB1dCkge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICB2bS5ydW5Jbk5ld0NvbnRleHQoc291cmNlLCBjb250ZXh0LCB7IGZpbGVuYW1lIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRXJyb3IgYXJlIHByb3BhZ2F0ZWQgdGhyb3VnaCB0aGUgY2hpbGQgY29tcGlsYXRpb24uXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbnRleHQucmVzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gY29udGV4dC5yZXNvdXJjZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZXh0LnJlc291cmNlPy5kZWZhdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNvbnRleHQucmVzb3VyY2UuZGVmYXVsdDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBsb2FkZXIgXCIke2ZpbGVuYW1lfVwiIGRpZG4ndCByZXR1cm4gYSBzdHJpbmcuYCk7XG4gIH1cblxuICBhc3luYyBnZXQoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBub3JtYWxpemVQYXRoKGZpbGVQYXRoKTtcbiAgICBsZXQgY29tcGlsYXRpb25SZXN1bHQgPSB0aGlzLmZpbGVDYWNoZT8uZ2V0KG5vcm1hbGl6ZWRGaWxlKTtcblxuICAgIGlmIChjb21waWxhdGlvblJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBjYWNoZSBtaXNzIHNvIGNvbXBpbGUgcmVzb3VyY2VcbiAgICAgIGNvbXBpbGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5fY29tcGlsZShmaWxlUGF0aCk7XG5cbiAgICAgIC8vIE9ubHkgY2FjaGUgaWYgY29tcGlsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcbiAgICAgIGlmICh0aGlzLmZpbGVDYWNoZSAmJiBjb21waWxhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuZmlsZUNhY2hlLnNldChub3JtYWxpemVkRmlsZSwgY29tcGlsYXRpb25SZXN1bHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb21waWxhdGlvblJlc3VsdC5jb250ZW50O1xuICB9XG5cbiAgYXN5bmMgcHJvY2VzcyhcbiAgICBkYXRhOiBzdHJpbmcsXG4gICAgZmlsZUV4dGVuc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHJlc291cmNlVHlwZTogJ3RlbXBsYXRlJyB8ICdzdHlsZScsXG4gICAgY29udGFpbmluZ0ZpbGU/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKGRhdGEudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBpbGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5fY29tcGlsZShcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGRhdGEsXG4gICAgICBmaWxlRXh0ZW5zaW9uLFxuICAgICAgcmVzb3VyY2VUeXBlLFxuICAgICAgY29udGFpbmluZ0ZpbGUsXG4gICAgKTtcblxuICAgIHJldHVybiBjb21waWxhdGlvblJlc3VsdC5jb250ZW50O1xuICB9XG59XG4iXX0=
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VfbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy9yZXNvdXJjZV9sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw4REFBaUM7QUFDakMsNkNBQXFDO0FBQ3JDLGdEQUFrQztBQUNsQyw0Q0FBOEI7QUFFOUIsbURBQTZDO0FBQzdDLHVDQUE0QztBQUM1QywrREFJbUM7QUFDbkMsd0VBQStFO0FBUS9FLE1BQWEscUJBQXFCO0lBQ3hCLGtCQUFrQixDQUFlO0lBQ2pDLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO0lBQ25ELG9CQUFvQixHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO0lBRXRELFNBQVMsQ0FBa0M7SUFDM0MsVUFBVSxDQUFzQjtJQUVoQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ3RDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUViLG9CQUFvQixHQUFHLGlEQUErQixDQUFDO0lBRXhFLFlBQVksV0FBb0I7UUFDOUIsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBOEIsRUFBRSxZQUErQjtRQUNwRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUM7UUFFNUMsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUvQixJQUFJLFlBQVksRUFBRTtZQUNoQixLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRTtnQkFDdEMsTUFBTSxxQkFB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aFdELHNEQWdXQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHZtIGZyb20gJ25vZGU6dm0nO1xuaW1wb3J0IHR5cGUgeyBBc3NldCwgQ29tcGlsYXRpb24gfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCB7IGFkZEVycm9yIH0gZnJvbSAnLi9pdnkvZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vaXZ5L3BhdGhzJztcbmltcG9ydCB7XG4gIENvbXBpbGF0aW9uV2l0aElubGluZUFuZ3VsYXJSZXNvdXJjZSxcbiAgSW5saW5lQW5ndWxhclJlc291cmNlTG9hZGVyUGF0aCxcbiAgSW5saW5lQW5ndWxhclJlc291cmNlU3ltYm9sLFxufSBmcm9tICcuL2xvYWRlcnMvaW5saW5lLXJlc291cmNlJztcbmltcG9ydCB7IE5HX0NPTVBPTkVOVF9SRVNPVVJDRV9RVUVSWSB9IGZyb20gJy4vdHJhbnNmb3JtZXJzL3JlcGxhY2VfcmVzb3VyY2VzJztcblxuaW50ZXJmYWNlIENvbXBpbGF0aW9uT3V0cHV0IHtcbiAgY29udGVudDogc3RyaW5nO1xuICBtYXA/OiBzdHJpbmc7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBXZWJwYWNrUmVzb3VyY2VMb2FkZXIge1xuICBwcml2YXRlIF9wYXJlbnRDb21waWxhdGlvbj86IENvbXBpbGF0aW9uO1xuICBwcml2YXRlIF9maWxlRGVwZW5kZW5jaWVzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICBwcml2YXRlIF9yZXZlcnNlRGVwZW5kZW5jaWVzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuXG4gIHByaXZhdGUgZmlsZUNhY2hlPzogTWFwPHN0cmluZywgQ29tcGlsYXRpb25PdXRwdXQ+O1xuICBwcml2YXRlIGFzc2V0Q2FjaGU/OiBNYXA8c3RyaW5nLCBBc3NldD47XG5cbiAgcHJpdmF0ZSBtb2RpZmllZFJlc291cmNlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIG91dHB1dFBhdGhDb3VudGVyID0gMTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlubGluZURhdGFMb2FkZXJQYXRoID0gSW5saW5lQW5ndWxhclJlc291cmNlTG9hZGVyUGF0aDtcblxuICBjb25zdHJ1Y3RvcihzaG91bGRDYWNoZTogYm9vbGVhbikge1xuICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgdGhpcy5maWxlQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICB0aGlzLmFzc2V0Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKHBhcmVudENvbXBpbGF0aW9uOiBDb21waWxhdGlvbiwgY2hhbmdlZEZpbGVzPzogSXRlcmFibGU8c3RyaW5nPikge1xuICAgIHRoaXMuX3BhcmVudENvbXBpbGF0aW9uID0gcGFyZW50Q29tcGlsYXRpb247XG5cbiAgICAvLyBVcGRhdGUgcmVzb3VyY2UgY2FjaGUgYW5kIG1vZGlmaWVkIHJlc291cmNlc1xuICAgIHRoaXMubW9kaWZpZWRSZXNvdXJjZXMuY2xlYXIoKTtcblxuICAgIGlmIChjaGFuZ2VkRmlsZXMpIHtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZEZpbGUgb2YgY2hhbmdlZEZpbGVzKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRGaWxlTm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgoY2hhbmdlZEZpbGUpO1xuICAgICAgICB0aGlzLmFzc2V0Q2FjaGU/LmRlbGV0ZShjaGFuZ2VkRmlsZU5vcm1hbGl6ZWQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgYWZmZWN0ZWRSZXNvdXJjZSBvZiB0aGlzLmdldEFmZmVjdGVkUmVzb3VyY2VzKGNoYW5nZWRGaWxlKSkge1xuICAgICAgICAgIGNvbnN0IGFmZmVjdGVkUmVzb3VyY2VOb3JtYWxpemVkID0gbm9ybWFsaXplUGF0aChhZmZlY3RlZFJlc291cmNlKTtcbiAgICAgICAgICB0aGlzLmZpbGVDYWNoZT8uZGVsZXRlKGFmZmVjdGVkUmVzb3VyY2VOb3JtYWxpemVkKTtcbiAgICAgICAgICB0aGlzLm1vZGlmaWVkUmVzb3VyY2VzLmFkZChhZmZlY3RlZFJlc291cmNlKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgZWZmZWN0ZWREZXBlbmRlbmNpZXMgb2YgdGhpcy5nZXRSZXNvdXJjZURlcGVuZGVuY2llcyhcbiAgICAgICAgICAgIGFmZmVjdGVkUmVzb3VyY2VOb3JtYWxpemVkLFxuICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDYWNoZT8uZGVsZXRlKG5vcm1hbGl6ZVBhdGgoZWZmZWN0ZWREZXBlbmRlbmNpZXMpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWxlQ2FjaGU/LmNsZWFyKCk7XG4gICAgICB0aGlzLmFzc2V0Q2FjaGU/LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gUmUtZW1pdCBhbGwgYXNzZXRzIGZvciB1bi1lZmZlY3RlZCBmaWxlc1xuICAgIGlmICh0aGlzLmFzc2V0Q2FjaGUpIHtcbiAgICAgIGZvciAoY29uc3QgWywgeyBuYW1lLCBzb3VyY2UsIGluZm8gfV0gb2YgdGhpcy5hc3NldENhY2hlKSB7XG4gICAgICAgIHRoaXMuX3BhcmVudENvbXBpbGF0aW9uLmVtaXRBc3NldChuYW1lLCBzb3VyY2UsIGluZm8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyUGFyZW50Q29tcGlsYXRpb24oKSB7XG4gICAgdGhpcy5fcGFyZW50Q29tcGlsYXRpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRNb2RpZmllZFJlc291cmNlRmlsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kaWZpZWRSZXNvdXJjZXM7XG4gIH1cblxuICBnZXRSZXNvdXJjZURlcGVuZGVuY2llcyhmaWxlUGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVEZXBlbmRlbmNpZXMuZ2V0KGZpbGVQYXRoKSB8fCBbXTtcbiAgfVxuXG4gIGdldEFmZmVjdGVkUmVzb3VyY2VzKGZpbGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9yZXZlcnNlRGVwZW5kZW5jaWVzLmdldChmaWxlKSB8fCBbXTtcbiAgfVxuXG4gIHNldEFmZmVjdGVkUmVzb3VyY2VzKGZpbGU6IHN0cmluZywgcmVzb3VyY2VzOiBJdGVyYWJsZTxzdHJpbmc+KSB7XG4gICAgdGhpcy5fcmV2ZXJzZURlcGVuZGVuY2llcy5zZXQoZmlsZSwgbmV3IFNldChyZXNvdXJjZXMpKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGluZXMtcGVyLWZ1bmN0aW9uXG4gIHByaXZhdGUgYXN5bmMgX2NvbXBpbGUoXG4gICAgZmlsZVBhdGg/OiBzdHJpbmcsXG4gICAgZGF0YT86IHN0cmluZyxcbiAgICBmaWxlRXh0ZW5zaW9uPzogc3RyaW5nLFxuICAgIHJlc291cmNlVHlwZT86ICdzdHlsZScgfCAndGVtcGxhdGUnLFxuICAgIGNvbnRhaW5pbmdGaWxlPzogc3RyaW5nLFxuICApOiBQcm9taXNlPENvbXBpbGF0aW9uT3V0cHV0PiB7XG4gICAgaWYgKCF0aGlzLl9wYXJlbnRDb21waWxhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJwYWNrUmVzb3VyY2VMb2FkZXIgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBwYXJlbnRDb21waWxhdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY29udGV4dCwgd2VicGFjayB9ID0gdGhpcy5fcGFyZW50Q29tcGlsYXRpb24uY29tcGlsZXI7XG4gICAgY29uc3Qge1xuICAgICAgRW50cnlQbHVnaW4sXG4gICAgICBOb3JtYWxNb2R1bGUsXG4gICAgICBsaWJyYXJ5LFxuICAgICAgbm9kZSxcbiAgICAgIHNvdXJjZXMsXG4gICAgICB1dGlsOiB7IGNyZWF0ZUhhc2ggfSxcbiAgICB9ID0gd2VicGFjaztcblxuICAgIGNvbnN0IGdldEVudHJ5ID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGAke2ZpbGVQYXRofT8ke05HX0NPTVBPTkVOVF9SRVNPVVJDRV9RVUVSWX1gO1xuICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAvLyBhcHAuY29tcG9uZW50LnRzLTIuY3NzP25nUmVzb3VyY2UhPSFAbmd0b29scy93ZWJwYWNrL3NyYy9sb2FkZXJzL2lubGluZS1yZXNvdXJjZS5qcyFhcHAuY29tcG9uZW50LnRzXG4gICAgICAgICAgYCR7Y29udGFpbmluZ0ZpbGV9LSR7dGhpcy5vdXRwdXRQYXRoQ291bnRlcn0uJHtmaWxlRXh0ZW5zaW9ufWAgK1xuICAgICAgICAgIGA/JHtOR19DT01QT05FTlRfUkVTT1VSQ0VfUVVFUll9IT0hJHt0aGlzLmlubGluZURhdGFMb2FkZXJQYXRofSEke2NvbnRhaW5pbmdGaWxlfWBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAvLyBDcmVhdGUgYSBzcGVjaWFsIFVSTCBmb3IgcmVhZGluZyB0aGUgcmVzb3VyY2UgZnJvbSBtZW1vcnlcbiAgICAgICAgcmV0dXJuIGBhbmd1bGFyLXJlc291cmNlOiR7cmVzb3VyY2VUeXBlfSwke2NyZWF0ZUhhc2goJ3h4aGFzaDY0JylcbiAgICAgICAgICAudXBkYXRlKGRhdGEpXG4gICAgICAgICAgLmRpZ2VzdCgnaGV4Jyl9YDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImZpbGVQYXRoXCIsIFwicmVzb3VyY2VUeXBlXCIgb3IgXCJkYXRhXCIgbXVzdCBiZSBzcGVjaWZpZWQuYCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVudHJ5ID0gZ2V0RW50cnkoKTtcblxuICAgIC8vIFNpbXBsZSBzYW5pdHkgY2hlY2suXG4gICAgaWYgKGZpbGVQYXRoPy5tYXRjaCgvXFwuW2p0XXMkLykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCB1c2UgYSBKYXZhU2NyaXB0IG9yIFR5cGVTY3JpcHQgZmlsZSAoJHtmaWxlUGF0aH0pIGluIGEgY29tcG9uZW50J3Mgc3R5bGVVcmxzIG9yIHRlbXBsYXRlVXJsLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dEZpbGVQYXRoID1cbiAgICAgIGZpbGVQYXRoIHx8XG4gICAgICBgJHtjb250YWluaW5nRmlsZX0tYW5ndWxhci1pbmxpbmUtLSR7dGhpcy5vdXRwdXRQYXRoQ291bnRlcisrfS4ke1xuICAgICAgICByZXNvdXJjZVR5cGUgPT09ICd0ZW1wbGF0ZScgPyAnaHRtbCcgOiAnY3NzJ1xuICAgICAgfWA7XG4gICAgY29uc3Qgb3V0cHV0T3B0aW9ucyA9IHtcbiAgICAgIGZpbGVuYW1lOiBvdXRwdXRGaWxlUGF0aCxcbiAgICAgIGxpYnJhcnk6IHtcbiAgICAgICAgdHlwZTogJ3ZhcicsXG4gICAgICAgIG5hbWU6ICdyZXNvdXJjZScsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjaGlsZENvbXBpbGVyID0gdGhpcy5fcGFyZW50Q29tcGlsYXRpb24uY3JlYXRlQ2hpbGRDb21waWxlcihcbiAgICAgICdhbmd1bGFyLWNvbXBpbGVyOnJlc291cmNlJyxcbiAgICAgIG91dHB1dE9wdGlvbnMsXG4gICAgICBbXG4gICAgICAgIG5ldyBub2RlLk5vZGVUZW1wbGF0ZVBsdWdpbigpLFxuICAgICAgICBuZXcgbm9kZS5Ob2RlVGFyZ2V0UGx1Z2luKCksXG4gICAgICAgIG5ldyBFbnRyeVBsdWdpbihjb250ZXh0LCBlbnRyeSwgeyBuYW1lOiAncmVzb3VyY2UnIH0pLFxuICAgICAgICBuZXcgbGlicmFyeS5FbmFibGVMaWJyYXJ5UGx1Z2luKCd2YXInKSxcbiAgICAgIF0sXG4gICAgKTtcblxuICAgIGNoaWxkQ29tcGlsZXIuaG9va3MudGhpc0NvbXBpbGF0aW9uLnRhcChcbiAgICAgICdhbmd1bGFyLWNvbXBpbGVyJyxcbiAgICAgIChjb21waWxhdGlvbiwgeyBub3JtYWxNb2R1bGVGYWN0b3J5IH0pID0+IHtcbiAgICAgICAgLy8gSWYgbm8gZGF0YSBpcyBwcm92aWRlZCwgdGhlIHJlc291cmNlIHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBmaWxlc3lzdGVtXG4gICAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub3JtYWxNb2R1bGVGYWN0b3J5Lmhvb2tzLnJlc29sdmVGb3JTY2hlbWVcbiAgICAgICAgICAgIC5mb3IoJ2FuZ3VsYXItcmVzb3VyY2UnKVxuICAgICAgICAgICAgLnRhcCgnYW5ndWxhci1jb21waWxlcicsIChyZXNvdXJjZURhdGEpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2VEYXRhLnBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgICByZXNvdXJjZURhdGEucmVzb3VyY2UgPSBmaWxlUGF0aDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgTm9ybWFsTW9kdWxlLmdldENvbXBpbGF0aW9uSG9va3MoY29tcGlsYXRpb24pXG4gICAgICAgICAgICAucmVhZFJlc291cmNlRm9yU2NoZW1lLmZvcignYW5ndWxhci1yZXNvdXJjZScpXG4gICAgICAgICAgICAudGFwKCdhbmd1bGFyLWNvbXBpbGVyJywgKCkgPT4gZGF0YSk7XG5cbiAgICAgICAgICAoY29tcGlsYXRpb24gYXMgQ29tcGlsYXRpb25XaXRoSW5saW5lQW5ndWxhclJlc291cmNlKVtJbmxpbmVBbmd1bGFyUmVzb3VyY2VTeW1ib2xdID0gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBpbGF0aW9uLmhvb2tzLmFkZGl0aW9uYWxBc3NldHMudGFwKCdhbmd1bGFyLWNvbXBpbGVyJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzc2V0ID0gY29tcGlsYXRpb24uYXNzZXRzW291dHB1dEZpbGVQYXRoXTtcbiAgICAgICAgICBpZiAoIWFzc2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHRoaXMuX2V2YWx1YXRlKG91dHB1dEZpbGVQYXRoLCBhc3NldC5zb3VyY2UoKS50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGNvbXBpbGF0aW9uLmFzc2V0c1tvdXRwdXRGaWxlUGF0aF0gPSBuZXcgc291cmNlcy5SYXdTb3VyY2Uob3V0cHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgYXNzZXJ0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IsICdjYXRjaCBjbGF1c2UgdmFyaWFibGUgaXMgbm90IGFuIEVycm9yIGluc3RhbmNlJyk7XG4gICAgICAgICAgICAvLyBVc2UgY29tcGlsYXRpb24gZXJyb3JzLCBhcyBvdGhlcndpc2Ugd2VicGFjayB3aWxsIGNob2tlXG4gICAgICAgICAgICBhZGRFcnJvcihjb21waWxhdGlvbiwgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGxldCBmaW5hbENvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjaGlsZENvbXBpbGVyLmhvb2tzLmNvbXBpbGF0aW9uLnRhcCgnYW5ndWxhci1jb21waWxlcicsIChjaGlsZENvbXBpbGF0aW9uKSA9PiB7XG4gICAgICBjaGlsZENvbXBpbGF0aW9uLmhvb2tzLnByb2Nlc3NBc3NldHMudGFwKFxuICAgICAgICB7IG5hbWU6ICdhbmd1bGFyLWNvbXBpbGVyJywgc3RhZ2U6IHdlYnBhY2suQ29tcGlsYXRpb24uUFJPQ0VTU19BU1NFVFNfU1RBR0VfUkVQT1JUIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBmaW5hbENvbnRlbnQgPSBjaGlsZENvbXBpbGF0aW9uLmFzc2V0c1tvdXRwdXRGaWxlUGF0aF0/LnNvdXJjZSgpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHsgZmlsZXMgfSBvZiBjaGlsZENvbXBpbGF0aW9uLmNodW5rcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICAgIGNoaWxkQ29tcGlsYXRpb24uZGVsZXRlQXNzZXQoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxDb21waWxhdGlvbk91dHB1dD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2hpbGRDb21waWxlci5ydW5Bc0NoaWxkKChlcnJvciwgXywgY2hpbGRDb21waWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKCFjaGlsZENvbXBpbGF0aW9uKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVW5rbm93biBjaGlsZCBjb21waWxhdGlvbiBlcnJvcicpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdvcmthcm91bmQgdG8gYXR0ZW1wdCB0byByZWR1Y2UgbWVtb3J5IHVzYWdlIG9mIGNoaWxkIGNvbXBpbGF0aW9ucy5cbiAgICAgICAgLy8gVGhpcyByZW1vdmVzIHRoZSBjaGlsZCBjb21waWxhdGlvbiBmcm9tIHRoZSBtYWluIGNvbXBpbGF0aW9uIGFuZCBtYW51YWxseSBwcm9wYWdhdGVzXG4gICAgICAgIC8vIGFsbCBkZXBlbmRlbmNpZXMsIHdhcm5pbmdzLCBhbmQgZXJyb3JzLlxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZENvbXBpbGVyLnBhcmVudENvbXBpbGF0aW9uO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgcGFyZW50LmNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkICE9PSBjaGlsZENvbXBpbGF0aW9uKTtcbiAgICAgICAgICBsZXQgZmlsZURlcGVuZGVuY2llczogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgY2hpbGRDb21waWxhdGlvbi5maWxlRGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAvLyBTa2lwIHBhdGhzIHRoYXQgZG8gbm90IGFwcGVhciB0byBiZSBmaWxlcyAoaGF2ZSBubyBleHRlbnNpb24pLlxuICAgICAgICAgICAgLy8gYGZpbGVEZXBlbmRlbmNpZXNgIGNhbiBjb250YWluIGRpcmVjdG9yaWVzIGFuZCBub3QganVzdCBmaWxlcyB3aGljaCBjYW5cbiAgICAgICAgICAgIC8vIGNhdXNlIGluY29ycmVjdCBjYWNoZSBpbnZhbGlkYXRpb24gb24gcmVidWlsZHMuXG4gICAgICAgICAgICBpZiAoIXBhdGguZXh0bmFtZShkZXBlbmRlbmN5KSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgY29udGFpbmluZ0ZpbGUgJiYgZGVwZW5kZW5jeS5lbmRzV2l0aChlbnRyeSkpIHtcbiAgICAgICAgICAgICAgLy8gdXNlIGNvbnRhaW5pbmcgZmlsZSBpZiB0aGUgcmVzb3VyY2Ugd2FzIGlubGluZVxuICAgICAgICAgICAgICBwYXJlbnQuZmlsZURlcGVuZGVuY2llcy5hZGQoY29udGFpbmluZ0ZpbGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyZW50LmZpbGVEZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY3kpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcmVzb3VyY2UuXG4gICAgICAgICAgICBpZiAoZmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRGaWxlID0gbm9ybWFsaXplUGF0aChkZXBlbmRlbmN5KTtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLl9yZXZlcnNlRGVwZW5kZW5jaWVzLmdldChyZXNvbHZlZEZpbGUpO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeS5hZGQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JldmVyc2VEZXBlbmRlbmNpZXMuc2V0KHJlc29sdmVkRmlsZSwgbmV3IFNldChbZmlsZVBhdGhdKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZmlsZURlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgIGZpbGVEZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY3kpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbGVEZXBlbmRlbmNpZXMgPSBuZXcgU2V0KFtkZXBlbmRlbmN5XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsZURlcGVuZGVuY2llcy5zZXQoZmlsZVBhdGgsIGZpbGVEZXBlbmRlbmNpZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyZW50LmNvbnRleHREZXBlbmRlbmNpZXMuYWRkQWxsKGNoaWxkQ29tcGlsYXRpb24uY29udGV4dERlcGVuZGVuY2llcyk7XG4gICAgICAgICAgcGFyZW50Lm1pc3NpbmdEZXBlbmRlbmNpZXMuYWRkQWxsKGNoaWxkQ29tcGlsYXRpb24ubWlzc2luZ0RlcGVuZGVuY2llcyk7XG4gICAgICAgICAgcGFyZW50LmJ1aWxkRGVwZW5kZW5jaWVzLmFkZEFsbChjaGlsZENvbXBpbGF0aW9uLmJ1aWxkRGVwZW5kZW5jaWVzKTtcblxuICAgICAgICAgIHBhcmVudC53YXJuaW5ncy5wdXNoKC4uLmNoaWxkQ29tcGlsYXRpb24ud2FybmluZ3MpO1xuICAgICAgICAgIHBhcmVudC5lcnJvcnMucHVzaCguLi5jaGlsZENvbXBpbGF0aW9uLmVycm9ycyk7XG5cbiAgICAgICAgICBpZiAodGhpcy5hc3NldENhY2hlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgaW5mbywgbmFtZSwgc291cmNlIH0gb2YgY2hpbGRDb21waWxhdGlvbi5nZXRBc3NldHMoKSkge1xuICAgICAgICAgICAgICAvLyBVc2UgdGhlIG9yaWdpbmF0aW5nIGZpbGUgYXMgdGhlIGNhY2hlIGtleSBpZiBwcmVzZW50XG4gICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgZ2VuZXJhdGUgYSBjYWNoZSBrZXkgYmFzZWQgb24gdGhlIGdlbmVyYXRlZCBuYW1lXG4gICAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gaW5mby5zb3VyY2VGaWxlbmFtZSA/PyBgISFbR0VORVJBVEVEXToke25hbWV9YDtcblxuICAgICAgICAgICAgICB0aGlzLmFzc2V0Q2FjaGUuc2V0KGNhY2hlS2V5LCB7IGluZm8sIG5hbWUsIHNvdXJjZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBjb250ZW50OiBmaW5hbENvbnRlbnQgPz8gJycsXG4gICAgICAgICAgc3VjY2VzczogY2hpbGRDb21waWxhdGlvbi5lcnJvcnM/Lmxlbmd0aCA9PT0gMCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2V2YWx1YXRlKGZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gRXZhbHVhdGUgY29kZVxuXG4gICAgLy8gY3NzLWxvYWRlciByZXF1aXJlcyB0aGUgYnRvYSBmdW5jdGlvbiB0byBleGlzdCB0byBjb3JyZWN0bHkgZ2VuZXJhdGUgaW5saW5lIHNvdXJjZW1hcHNcbiAgICBjb25zdCBjb250ZXh0OiB7IGJ0b2E6IChpbnB1dDogc3RyaW5nKSA9PiBzdHJpbmc7IHJlc291cmNlPzogc3RyaW5nIHwgeyBkZWZhdWx0Pzogc3RyaW5nIH0gfSA9IHtcbiAgICAgIGJ0b2EoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0KS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgdm0ucnVuSW5OZXdDb250ZXh0KHNvdXJjZSwgY29udGV4dCwgeyBmaWxlbmFtZSB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEVycm9yIGFyZSBwcm9wYWdhdGVkIHRocm91Z2ggdGhlIGNoaWxkIGNvbXBpbGF0aW9uLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LnJlc291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNvbnRleHQucmVzb3VyY2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5yZXNvdXJjZT8uZGVmYXVsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LnJlc291cmNlLmRlZmF1bHQ7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgbG9hZGVyIFwiJHtmaWxlbmFtZX1cIiBkaWRuJ3QgcmV0dXJuIGEgc3RyaW5nLmApO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlID0gbm9ybWFsaXplUGF0aChmaWxlUGF0aCk7XG4gICAgbGV0IGNvbXBpbGF0aW9uUmVzdWx0ID0gdGhpcy5maWxlQ2FjaGU/LmdldChub3JtYWxpemVkRmlsZSk7XG5cbiAgICBpZiAoY29tcGlsYXRpb25SZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gY2FjaGUgbWlzcyBzbyBjb21waWxlIHJlc291cmNlXG4gICAgICBjb21waWxhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMuX2NvbXBpbGUoZmlsZVBhdGgpO1xuXG4gICAgICAvLyBPbmx5IGNhY2hlIGlmIGNvbXBpbGF0aW9uIHdhcyBzdWNjZXNzZnVsXG4gICAgICBpZiAodGhpcy5maWxlQ2FjaGUgJiYgY29tcGlsYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aGlzLmZpbGVDYWNoZS5zZXQobm9ybWFsaXplZEZpbGUsIGNvbXBpbGF0aW9uUmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGlsYXRpb25SZXN1bHQuY29udGVudDtcbiAgfVxuXG4gIGFzeW5jIHByb2Nlc3MoXG4gICAgZGF0YTogc3RyaW5nLFxuICAgIGZpbGVFeHRlbnNpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICByZXNvdXJjZVR5cGU6ICd0ZW1wbGF0ZScgfCAnc3R5bGUnLFxuICAgIGNvbnRhaW5pbmdGaWxlPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmIChkYXRhLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBjb21waWxhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMuX2NvbXBpbGUoXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBkYXRhLFxuICAgICAgZmlsZUV4dGVuc2lvbixcbiAgICAgIHJlc291cmNlVHlwZSxcbiAgICAgIGNvbnRhaW5pbmdGaWxlLFxuICAgICk7XG5cbiAgICByZXR1cm4gY29tcGlsYXRpb25SZXN1bHQuY29udGVudDtcbiAgfVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import * as ts from 'typescript';
9
+ export declare function findImageDomains(imageDomains: Set<string>): ts.TransformerFactory<ts.SourceFile>;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * @license
4
+ * Copyright Google LLC All Rights Reserved.
5
+ *
6
+ * Use of this source code is governed by an MIT-style license that can be
7
+ * found in the LICENSE file at https://angular.io/license
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || function (mod) {
26
+ if (mod && mod.__esModule) return mod;
27
+ var result = {};
28
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
+ __setModuleDefault(result, mod);
30
+ return result;
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.findImageDomains = void 0;
34
+ const ts = __importStar(require("typescript"));
35
+ const TARGET_TEXT = '@NgModule';
36
+ const BUILTIN_LOADERS = new Set([
37
+ 'provideCloudflareLoader',
38
+ 'provideCloudinaryLoader',
39
+ 'provideImageKitLoader',
40
+ 'provideImgixLoader',
41
+ ]);
42
+ const URL_REGEX = /(https?:\/\/[^/]*)\//g;
43
+ function findImageDomains(imageDomains) {
44
+ return (context) => {
45
+ return (sourceFile) => {
46
+ const isBuiltinImageLoader = (node) => {
47
+ return BUILTIN_LOADERS.has(node.expression.getText());
48
+ };
49
+ const findDomainString = (node) => {
50
+ if (ts.isStringLiteral(node) ||
51
+ ts.isTemplateHead(node) ||
52
+ ts.isTemplateMiddle(node) ||
53
+ ts.isTemplateTail(node)) {
54
+ const domain = node.text.match(URL_REGEX);
55
+ if (domain && domain[0]) {
56
+ imageDomains.add(domain[0]);
57
+ return node;
58
+ }
59
+ }
60
+ ts.visitEachChild(node, findDomainString, context);
61
+ return node;
62
+ };
63
+ function isImageProviderKey(property) {
64
+ return (ts.isPropertyAssignment(property) &&
65
+ property.name.getText() === 'provide' &&
66
+ property.initializer.getText() === 'IMAGE_LOADER');
67
+ }
68
+ function isImageProviderValue(property) {
69
+ return ts.isPropertyAssignment(property) && property.name.getText() === 'useValue';
70
+ }
71
+ function checkForDomain(node) {
72
+ if (node.properties.find(isImageProviderKey)) {
73
+ const value = node.properties.find(isImageProviderValue);
74
+ if (value && ts.isPropertyAssignment(value)) {
75
+ if (ts.isArrowFunction(value.initializer) ||
76
+ ts.isFunctionExpression(value.initializer)) {
77
+ ts.visitEachChild(node, findDomainString, context);
78
+ }
79
+ }
80
+ }
81
+ }
82
+ function findImageLoaders(node) {
83
+ if (ts.isCallExpression(node)) {
84
+ if (isBuiltinImageLoader(node)) {
85
+ const firstArg = node.arguments[0];
86
+ if (ts.isStringLiteralLike(firstArg)) {
87
+ imageDomains.add(firstArg.text);
88
+ }
89
+ }
90
+ }
91
+ else if (ts.isObjectLiteralExpression(node)) {
92
+ checkForDomain(node);
93
+ }
94
+ return node;
95
+ }
96
+ function findPropertyAssignment(node) {
97
+ if (ts.isPropertyAssignment(node)) {
98
+ if (ts.isIdentifier(node.name) && node.name.escapedText === 'providers') {
99
+ ts.visitEachChild(node.initializer, findImageLoaders, context);
100
+ }
101
+ }
102
+ return node;
103
+ }
104
+ function findPropertyDeclaration(node) {
105
+ if (ts.isPropertyDeclaration(node) &&
106
+ ts.isIdentifier(node.name) &&
107
+ node.name.escapedText === 'ɵinj' &&
108
+ node.initializer &&
109
+ ts.isCallExpression(node.initializer) &&
110
+ node.initializer.arguments[0]) {
111
+ ts.visitEachChild(node.initializer.arguments[0], findPropertyAssignment, context);
112
+ }
113
+ return node;
114
+ }
115
+ // Continue traversal if node is ClassDeclaration and has name "AppModule"
116
+ function findClassDeclaration(node) {
117
+ if (ts.isClassDeclaration(node)) {
118
+ ts.visitEachChild(node, findPropertyDeclaration, context);
119
+ }
120
+ return node;
121
+ }
122
+ ts.visitEachChild(sourceFile, findClassDeclaration, context);
123
+ return sourceFile;
124
+ };
125
+ };
126
+ }
127
+ exports.findImageDomains = findImageDomains;
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZF9pbWFnZV9kb21haW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy90cmFuc2Zvcm1lcnMvZmluZF9pbWFnZV9kb21haW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsK0NBQWlDO0FBRWpDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNoQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUM5Qix5QkFBeUI7SUFDekIseUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2QixvQkFBb0I7Q0FDckIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxTQUFTLEdBQUcsdUJBQXVCLENBQUM7QUFFMUMsU0FBZ0IsZ0JBQWdCLENBQUMsWUFBeUI7SUFDeEQsT0FBTyxDQUFDLE9BQWlDLEVBQUUsRUFBRTtRQUMzQyxPQUFPLENBQUMsVUFBeUIsRUFBRSxFQUFFO1lBQ25DLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUF1QixFQUFXLEVBQUU7Z0JBQ2hFLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDO1lBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFO2dCQUN6QyxJQUNFLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO29CQUN4QixFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztvQkFDdkIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztvQkFDekIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDdkI7b0JBQ0EsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7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LElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU07b0JBQ2hDLElBQUksQ0FBQyxXQUFXO29CQUNoQixFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztvQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQzdCO29CQUNBLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQ25GO2dCQUVELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELDBFQUEwRTtZQUMxRSxTQUFTLG9CQUFvQixDQUFDLElBQWE7Z0JBQ3pDLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMvQixFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDM0Q7Z0JBRUQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsRUFBRSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFN0QsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQTFHRCw0Q0EwR0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmNvbnN0IFRBUkdFVF9URVhUID0gJ0BOZ01vZHVsZSc7XG5jb25zdCBCVUlMVElOX0xPQURFUlMgPSBuZXcgU2V0KFtcbiAgJ3Byb3ZpZGVDbG91ZGZsYXJlTG9hZGVyJyxcbiAgJ3Byb3ZpZGVDbG91ZGluYXJ5TG9hZGVyJyxcbiAgJ3Byb3ZpZGVJbWFnZUtpdExvYWRlcicsXG4gICdwcm92aWRlSW1naXhMb2FkZXInLFxuXSk7XG5jb25zdCBVUkxfUkVHRVggPSAvKGh0dHBzPzpcXC9cXC9bXi9dKilcXC8vZztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRJbWFnZURvbWFpbnMoaW1hZ2VEb21haW5zOiBTZXQ8c3RyaW5nPik6IHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPiB7XG4gIHJldHVybiAoY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0KSA9PiB7XG4gICAgcmV0dXJuIChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKSA9PiB7XG4gICAgICBjb25zdCBpc0J1aWx0aW5JbWFnZUxvYWRlciA9IChub2RlOiB0cy5DYWxsRXhwcmVzc2lvbik6IEJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gQlVJTFRJTl9MT0FERVJTLmhhcyhub2RlLmV4cHJlc3Npb24uZ2V0VGV4dCgpKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbmREb21haW5TdHJpbmcgPSAobm9kZTogdHMuTm9kZSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHMuaXNTdHJpbmdMaXRlcmFsKG5vZGUpIHx8XG4gICAgICAgICAgdHMuaXNUZW1wbGF0ZUhlYWQobm9kZSkgfHxcbiAgICAgICAgICB0cy5pc1RlbXBsYXRlTWlkZGxlKG5vZGUpIHx8XG4gICAgICAgICAgdHMuaXNUZW1wbGF0ZVRhaWwobm9kZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZG9tYWluID0gbm9kZS50ZXh0Lm1hdGNoKFVSTF9SRUdFWCk7XG4gICAgICAgICAgaWYgKGRvbWFpbiAmJiBkb21haW5bMF0pIHtcbiAgICAgICAgICAgIGltYWdlRG9tYWlucy5hZGQoZG9tYWluWzBdKTtcblxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRzLnZpc2l0RWFjaENoaWxkKG5vZGUsIGZpbmREb21haW5TdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfTtcblxuICAgICAgZnVuY3Rpb24gaXNJbWFnZVByb3ZpZGVyS2V5KHByb3BlcnR5OiB0cy5PYmplY3RMaXRlcmFsRWxlbWVudExpa2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wZXJ0eSkgJiZcbiAgICAgICAgICBwcm9wZXJ0eS5uYW1lLmdldFRleHQoKSA9PT0gJ3Byb3ZpZGUnICYmXG4gICAgICAgICAgcHJvcGVydHkuaW5pdGlhbGl6ZXIuZ2V0VGV4dCgpID09PSAnSU1BR0VfTE9BREVSJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBpc0ltYWdlUHJvdmlkZXJWYWx1ZShwcm9wZXJ0eTogdHMuT2JqZWN0TGl0ZXJhbEVsZW1lbnRMaWtlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wZXJ0eSkgJiYgcHJvcGVydHkubmFtZS5nZXRUZXh0KCkgPT09ICd1c2VWYWx1ZSc7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yRG9tYWluKG5vZGU6IHRzLk9iamVjdExpdGVyYWxFeHByZXNzaW9uKSB7XG4gICAgICAgIGlmIChub2RlLnByb3BlcnRpZXMuZmluZChpc0ltYWdlUHJvdmlkZXJLZXkpKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBub2RlLnByb3BlcnRpZXMuZmluZChpc0ltYWdlUHJvdmlkZXJWYWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHRzLmlzUHJvcGVydHlBc3NpZ25tZW50KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0cy5pc0Fycm93RnVuY3Rpb24odmFsdWUuaW5pdGlhbGl6ZXIpIHx8XG4gICAgICAgICAgICAgIHRzLmlzRnVuY3Rpb25FeHByZXNzaW9uKHZhbHVlLmluaXRpYWxpemVyKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRzLnZpc2l0RWFjaENoaWxkKG5vZGUsIGZpbmREb21haW5TdHJpbmcsIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmaW5kSW1hZ2VMb2FkZXJzKG5vZGU6IHRzLk5vZGUpIHtcbiAgICAgICAgaWYgKHRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICAgICAgICBpZiAoaXNCdWlsdGluSW1hZ2VMb2FkZXIobm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QXJnID0gbm9kZS5hcmd1bWVudHNbMF07XG4gICAgICAgICAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsTGlrZShmaXJzdEFyZykpIHtcbiAgICAgICAgICAgICAgaW1hZ2VEb21haW5zLmFkZChmaXJzdEFyZy50ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihub2RlKSkge1xuICAgICAgICAgIGNoZWNrRm9yRG9tYWluKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGZpbmRQcm9wZXJ0eUFzc2lnbm1lbnQobm9kZTogdHMuTm9kZSkge1xuICAgICAgICBpZiAodHMuaXNQcm9wZXJ0eUFzc2lnbm1lbnQobm9kZSkpIHtcbiAgICAgICAgICBpZiAodHMuaXNJZGVudGlmaWVyKG5vZGUubmFtZSkgJiYgbm9kZS5uYW1lLmVzY2FwZWRUZXh0ID09PSAncHJvdmlkZXJzJykge1xuICAgICAgICAgICAgdHMudmlzaXRFYWNoQ2hpbGQobm9kZS5pbml0aWFsaXplciwgZmluZEltYWdlTG9hZGVycywgY29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGZpbmRQcm9wZXJ0eURlY2xhcmF0aW9uKG5vZGU6IHRzLk5vZGUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRzLmlzUHJvcGVydHlEZWNsYXJhdGlvbihub2RlKSAmJlxuICAgICAgICAgIHRzLmlzSWRlbnRpZmllcihub2RlLm5hbWUpICYmXG4gICAgICAgICAgbm9kZS5uYW1lLmVzY2FwZWRUZXh0ID09PSAnybVpbmonICYmXG4gICAgICAgICAgbm9kZS5pbml0aWFsaXplciAmJlxuICAgICAgICAgIHRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZS5pbml0aWFsaXplcikgJiZcbiAgICAgICAgICBub2RlLmluaXRpYWxpemVyLmFyZ3VtZW50c1swXVxuICAgICAgICApIHtcbiAgICAgICAgICB0cy52aXNpdEVhY2hDaGlsZChub2RlLmluaXRpYWxpemVyLmFyZ3VtZW50c1swXSwgZmluZFByb3BlcnR5QXNzaWdubWVudCwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29udGludWUgdHJhdmVyc2FsIGlmIG5vZGUgaXMgQ2xhc3NEZWNsYXJhdGlvbiBhbmQgaGFzIG5hbWUgXCJBcHBNb2R1bGVcIlxuICAgICAgZnVuY3Rpb24gZmluZENsYXNzRGVjbGFyYXRpb24obm9kZTogdHMuTm9kZSkge1xuICAgICAgICBpZiAodHMuaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICAgICAgdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgZmluZFByb3BlcnR5RGVjbGFyYXRpb24sIGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG5cbiAgICAgIHRzLnZpc2l0RWFjaENoaWxkKHNvdXJjZUZpbGUsIGZpbmRDbGFzc0RlY2xhcmF0aW9uLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHNvdXJjZUZpbGU7XG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==