ember-scoped-css 0.21.2 → 0.21.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"template-transform-paths.d.ts","sourceRoot":"","sources":["../../../src/lib/path/template-transform-paths.js"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,sCAHW,MAAM,GACJ,MAAM,CA4ElB"}
1
+ {"version":3,"file":"template-transform-paths.d.ts","sourceRoot":"","sources":["../../../src/lib/path/template-transform-paths.js"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,sCAHW,MAAM,GACJ,MAAM,CA6ElB"}
@@ -292,9 +292,8 @@ async function app_css_loader_default(code) {
292
292
  const cssFileName = import_node_path2.default.basename(cssPath);
293
293
  const hbsPath = cssPath.replace(".css", ".hbs");
294
294
  const gjsPath = cssPath.replace(".css", ".js");
295
- const hbsExists = (0, import_node_fs2.existsSync)(hbsPath);
296
- const gjsExists = (0, import_node_fs2.existsSync)(gjsPath);
297
- if (hbsExists || gjsExists) {
295
+ const gtsPath = cssPath.replace(".css", ".ts");
296
+ if ((0, import_node_fs2.existsSync)(gjsPath) || (0, import_node_fs2.existsSync)(gtsPath) || (0, import_node_fs2.existsSync)(hbsPath)) {
298
297
  const postfix = hashFrom(cssPath);
299
298
  const rewrittenCss = rewriteCss(
300
299
  code,
@@ -306,4 +305,4 @@ async function app_css_loader_default(code) {
306
305
  }
307
306
  return code;
308
307
  }
309
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtbG9hZGVyLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyIsICIuLi8uLi9zcmMvbGliL3Jld3JpdGVDc3MuanMiLCAiLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSAgZnJvbSAndW5wbHVnaW4nO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb20sIGlzUmVsZXZhbnRGaWxlIH0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi4vbGliL3Jld3JpdGVDc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoY29kZSkge1xuICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG4gIGNvbnN0IGNzc1BhdGggPSB0aGlzLnJlc291cmNlUGF0aDtcblxuICBpZiAoIWlzUmVsZXZhbnRGaWxlKGNzc1BhdGgsIHsgLi4ub3B0aW9ucywgY3dkOiB0aGlzLnJvb3RDb250ZXh0IH0pKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBpZiAoIWNzc1BhdGguc3RhcnRzV2l0aCh0aGlzLnJvb3RDb250ZXh0KSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG5cbiAgY29uc3QgY3NzRmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGNzc1BhdGgpO1xuXG4gIGNvbnN0IGhic1BhdGggPSBjc3NQYXRoLnJlcGxhY2UoJy5jc3MnLCAnLmhicycpO1xuICBjb25zdCBnanNQYXRoID0gY3NzUGF0aC5yZXBsYWNlKCcuY3NzJywgJy5qcycpO1xuICBjb25zdCBoYnNFeGlzdHMgPSBleGlzdHNTeW5jKGhic1BhdGgpO1xuICBjb25zdCBnanNFeGlzdHMgPSBleGlzdHNTeW5jKGdqc1BhdGgpO1xuXG4gIGlmIChoYnNFeGlzdHMgfHwgZ2pzRXhpc3RzKSB7XG4gICAgY29uc3QgcG9zdGZpeCA9IGhhc2hGcm9tKGNzc1BhdGgpO1xuICAgIGNvbnN0IHJld3JpdHRlbkNzcyA9IHJld3JpdGVDc3MoXG4gICAgICBjb2RlLFxuICAgICAgcG9zdGZpeCxcbiAgICAgIGNzc0ZpbGVOYW1lLFxuICAgICAgb3B0aW9ucy5sYXllck5hbWUsXG4gICAgKTtcblxuICAgIHJldHVybiByZXdyaXR0ZW5Dc3M7XG4gIH1cblxuICByZXR1cm4gY29kZTtcbn1cbiIsICJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCBmc1N5bmMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuaW1wb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG5leHBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuZXhwb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG5jb25zdCBFTUJST0lERVJfRElSID0gJ25vZGVfbW9kdWxlcy8uZW1icm9pZGVyJztcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSCA9IGAke0VNQlJPSURFUl9ESVJ9L3Jld3JpdHRlbi1hcHBgO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9BU1NFVFMgPSBgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEh9L2Fzc2V0c2A7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fUEFDS0FHRVMgPSBgJHtFTUJST0lERVJfRElSfS9yZXdyaXR0ZW4tcGFja2FnZXNgO1xuY29uc3QgSVJSRUxFVkFOVF9QQVRIUyA9IFsnbm9kZV9tb2R1bGVzLy5wbnBtJ107XG5jb25zdCBVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUyA9IG5ldyBTZXQoWyd0ZXN0cyddKTtcblxuY29uc3QgQ1dEID0gcHJvY2Vzcy5jd2QoKTtcblxuLyoqXG4gKiBSZWdhcmRsZXNzIG9mIHdoYXQgdGhlIGZpbGVQYXRoIGZvcm1hdCBpcyxcbiAqIHRoaXMgd2lsbCB0cnkgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHBvc3RmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaEZyb20oZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBoYXNoRnJvbUFic29sdXRlUGF0aChmaWxlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gaGFzaEZyb21Nb2R1bGVQYXRoKGZpbGVQYXRoKTtcbn1cblxuLyoqXG4gKiBCYXNlZCBvbiBlbWJlcidzIGNvbXBvbmVudCBsb2NhdGlvbiBjb252ZW50aW9ucyxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm92aWRlIGEgcGF0aCBmb3Igd2hlcmUgd2VcbiAqIGV4cGVjdCB0aGUgQ1NTIHRvIGxpdmUuXG4gKlxuICogRm9yIGNvLWxvY2F0ZWQgc3RydWN0dXJlOlxuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50Lmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50LmNzc1xuICpcbiAqIEZvciBuZXN0ZWQgY28tbG9jYXRlZCBzdHJ1Y3R1cmVcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC9mb28uaGJzXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmNzc1xuICpcbiAqIEZvciBQb2RzIHJvdXRlcyBzdHJ1Y3R1cmVcbiAqICAgLSByb3V0ZXMvbXktcm91dGUvdGVtcGxhdGUue2hicyxqc31cbiAqICAgLSByb3V0ZXMvbXktcm91dGUvc3R5bGVzLmNzc1xuICpcbiAqIERlbGliZXJhdGVseSBub3Qgc3VwcG9ydGVkOlxuICogICAtIGNvbXBvbmVudHMgdy8gcG9kcyAtLSB0aGlzIGlzIGRlcHJlY2F0ZWQgaW4gNS4xMFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZSAtIHRoZSBoYnMsIGpzLCBnanMsIGd0cyBvciB3aGF0ZXZlciBjby1sb2NhdGVkIHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGV4cGVjdGVkIGNzcyBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NQYXRoRm9yKGZpbGVOYW1lKSB7XG4gIGxldCB3aXRob3V0RXh0ID0gd2l0aG91dEV4dGVuc2lvbihmaWxlTmFtZSk7XG4gIGxldCBjc3NQYXRoID0gd2l0aG91dEV4dCArICcuY3NzJztcblxuICBpZiAoaXNQb2QoZmlsZU5hbWUpKSB7XG4gICAgY3NzUGF0aCA9IGZpbGVOYW1lXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5qcyQvLCAnc3R5bGVzLmNzcycpXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5oYnMvLCAnc3R5bGVzLmNzcycpO1xuICB9XG5cbiAgcmV0dXJuIGNzc1BhdGg7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2RUZW1wbGF0ZShmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVQYXRoLmVuZHNXaXRoKCd0ZW1wbGF0ZS5qcycpIHx8IGZpbGVQYXRoLmVuZHNXaXRoKCd0ZW1wbGF0ZS5oYnMnKTtcbn1cblxuLyoqXG4gKiBOb3RlIHRoYXQgY29tcG9uZW50cyBpbiB0aGUgXCJwb2RzXCIgY29udmVudGlvbiB3aWxsXG4gKiBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBlbmRzIHdpdGhcbiAqIC0gdGVtcGxhdGUuanNcbiAqIC0gdGVtcGxhdGUuaGJzXG4gKiAtIHN0eWxlcy5jc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNQb2RUZW1wbGF0ZShmaWxlUGF0aCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEByZXR1cm5zIHRoZSBzYW1lIHBhdGgsIGJ1dCB3aXRob3V0IHRoZSBleHRlbnNpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhvdXRFeHRlbnNpb24oZmlsZVBhdGgpIHtcbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UoZmlsZVBhdGgpO1xuXG4gIHJldHVybiBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xufVxuXG4vKipcbiAqIEV4YW1wbGVzIGZvciBmaWxlTmFtZVxuICogLSBhYnNvbHV0ZSBvbi1kaXNrIHBhdGhcbiAqIC0gaW4gd2VicGFja1xuICogICAtIFVSTC1hYnNvbHV0ZSBwYXRoLCBzdGFydGluZyB3aXRoIC9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEBwYXJhbSB7eyBhZGRpdGlvbmFsUm9vdHM/OiBzdHJpbmdbXTsgY3dkOiBzdHJpbmcgfX0gb3B0aW9uc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCB7IGFkZGl0aW9uYWxSb290cywgY3dkIH0pIHtcbiAgaWYgKGZpbGVOYW1lLnN0YXJ0c1dpdGgoJy9AZW1icm9pZGVyJykpIHJldHVybiBmYWxzZTtcbiAgaWYgKElSUkVMRVZBTlRfUEFUSFMuc29tZSgoaSkgPT4gZmlsZU5hbWUuaW5jbHVkZXMoaSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgLy8gaWYgYSBmaWxlIGlzIG5vdCB0aGUgZW1icm9pZGVyIGNhY2hlIGRpcmVjdG9yeVxuICAgIC8vIGFuZCBpcyBpbiBub2RlX21vZHVsZXMsIHNraXAgaXQuXG4gICAgaWYgKCFmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfRElSKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHJld3JpdHRlbiBwYWNrYWdlcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGF0IHRoZWlyIG93blxuICAgIC8vIHB1Ymxpc2ggdGltZVxuICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fUEFDS0FHRVMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgYXJlIGFscmVhZHkgdGhlIGJ1bmRsZWQgZmlsZXMuXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTKSkge1xuICAgICAgLy8gbm90IHN1cHBvcnRlZCwgbmV2ZXIgd2lsbCBiZVxuICAgICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKGAke0VNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTfS90ZXN0cy5qc2ApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWRlYWxseSwgd2UgbmV2ZXIgZ2V0IGhlcmUgLS0gaW5kaWNhdGVzIHdlJ3JlIG5vdCBmaWx0ZXJpbmcgZWZmZWN0aXZlbHkgaW4gYmFiZWxcbiAgICAgIC8vIE5PVEU6IGlmIHdlIGdldCBoZXJlLCB3ZSdyZSB0cnlpbmcgdG8gb3BlcmF0ZSBvbiBhIGZpbGUgdG9vIGxhdGUuXG4gICAgICAvLyAgICAgICB3ZSBuZWVkIFNjb3BlZENTUyB0byBvcGVyYXRlIGFzIGNsb3NlIHRvIG9yaWdpbmFsIHNvdXJjZSBhcyBwb3NzaWJsZSAtLSBub3Qgb3V0cHV0IGZpbGVzLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxldCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChmaWxlTmFtZSk7XG5cbiAgYXNzZXJ0KGN3ZCwgYGN3ZCB3YXMgbm90IHBhc3NlZCB0byBpc1JlbGV2YW50RmlsZWApO1xuXG4gIGxldCBvdXJXb3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChjd2QpO1xuXG4gIGlmICh3b3Jrc3BhY2UgIT09IG91cldvcmtzcGFjZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBsb2NhbCA9IGZpbGVOYW1lLnJlcGxhY2Uod29ya3NwYWNlLCAnJyk7XG4gIGxldCBbLCAuLi5wYXJ0c10gPSBsb2NhbC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcblxuICBpZiAoVU5TVVBQT1JURURfRElSRUNUT1JJRVMuaGFzKHBhcnRzWzBdKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3N0bHkgcG9kcyBzdXBwb3J0LlxuICAgKiBmb2xrcyBuZWVkIHRvIG9wdCBpbiB0byBwb2RzIChyb3V0ZXMpLCBiZWNhdXNlIGV2ZXJ5IHBvZHMgYXBwIGNhbiBiZSBjb25maWd1cmVkIGRpZmZlcmVudGx5XG4gICAqL1xuICBsZXQgcm9vdHMgPSBbJy9jb21wb25lbnRzLycsICcvdGVtcGxhdGVzLycsIC4uLihhZGRpdGlvbmFsUm9vdHMgfHwgW10pXTtcblxuICBpZiAoIXJvb3RzLnNvbWUoKHJvb3QpID0+IGZpbGVOYW1lLmluY2x1ZGVzKHJvb3QpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVNjb3BlZFBhdGgpIHtcbiAgLyoqXG4gICAqICpCeSBjb252ZW50aW9uKiwgYHNyY2AgaXMgb21pdHRlZCBmcm9tIGNvbXBvbmVudCBwYXRocy5cbiAgICogV2UgY2FuIHJlZmxlY3QgdGhlIHNhbWUgYmVoYXZpb3IgYnkgcmVwbGFjaW5nIHNyYy9cbiAgICogd2l0aCBhbiBlbXB0eSBzdHJpbmcuXG4gICAqXG4gICAqIENTUyBpc24ndCBlbWl0dGVkIGFzIGEgY28tbG9jYXRlZCBtb2R1bGUsIGJ1dFxuICAgKiB0byBrZWVwIGNvbnZlbnRpb25zIGNvbnNpc3RlbnQgYWNyb3NzIGxhbmd1YWdlcyxcbiAgICogd2UgY2FuIHByZXRlbmQgaXQgaXMuXG4gICAqXG4gICAqIEFueSBjdXN0b21pemF0aW9uIGJleW9uZCByZW1vdmluZyBgc3JjYCBhbmQgYGFwcGAgaXMgcG90ZW50aWFsbHkgY29uZnVzaW5nLlxuICAgKiBJZiB3ZSBuZWVkIGZ1cnRoZXIgY3VzdG9taXphdGlvbnMsIHdlJ2xsIHdhbnQgdG8gbWF0Y2ggb24gYGV4cG9ydHNgIGluIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHBhY2thZ2UuanNvblxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VTY29wZWRQYXRoLnJlcGxhY2UoL15cXC9zcmNcXC8vLCAnLycpO1xuXG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgaWYgKGlzUG9kKHBhY2thZ2VSZWxhdGl2ZSkpIHtcbiAgICAvKipcbiAgICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgICAqL1xuICAgIHJldHVybiBwYXJzZWQuZGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBpcyBwYXNzZWQsIHJlbW92ZSBpdC5cbiAgICogV2hlbiB1c2luZyBwYWNrYWdlcnMsIGZvbGtzIGFyZSB1c2VkIHRvIG5vdCBoYXZpbmcgdG8gc3BlY2lmeSBleHRlbnNpb25zIGZvciBmaWxlcy5cbiAgICogU2luY2Ugd2UgZG9uJ3QgZXZlbiBlbWl0IGNzcyBmaWxlcyBjby1sb2NhdGVkIHRvIGVhY2ggbW9kdWxlLFxuICAgKiB0aGlzIGhlbHBzIHVzIG5vdCBjb252ZXkgYSBsaWUgdGhhdCBhIGZpbGUgbWF5IGV4aXN0IGluIGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlIGA8bW9kdWxlLW5hbWU+L2NvbXBvbmVudHMvYnV0dG9uYC5cbiAgICogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgZXh0ZW5zaW9uIGlzLCBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBjc3MgZmlsZVxuICAgKiBmb3IgdGhlIGJ1dHRvbiBtb2R1bGUgYW55d2F5LlxuICAgKi9cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xuXG4gIHJldHVybiBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoO1xufVxuXG4vKipcbiAqIHJldHVybnMgdGhlIGFwcC1tb2R1bGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGVcbiAqXG4gKiBUaGlzIGFzc3VtZXMgbm9ybWFsIGVtYmVyIGFwcCBjb252ZW50aW9uc1xuICpcbiAqIHdoaWNoIGlzIGA8cGFja2FnZS5qc29uI25hbWU+L3BhdGgtdG8tZmlsZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgd29ya3NwYWNlUGF0aCA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBsZXQgbmFtZSA9IG1vZHVsZU5hbWUoc291cmNlUGF0aCk7XG5cbiAgLyoqXG4gICAqICBVbmRlciBlbWJyb2lkZXIgYnVpbGRzLCB0aGUgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiB0aGUgYXBwXG4gICAqIGhhcyBhbGwgdGhlIGZpbGVzIHVuZGVyIGEgZm9sZGVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHBhY2thZ2UgbmFtZSxcbiAgICogcmF0aGVyIHRoYW4gXCJhcHBcIi5cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBzb3VyY2VQYXRoLnJlcGxhY2Uod29ya3NwYWNlUGF0aCwgJycpO1xuXG4gIC8qKlxuICAgKiBCdXQgd2UgYWxzbyBkb24ndCB3YW50ICdhcHAnIC0tIHdoaWNoIGlzIHByZXNlbnQgaW4gdGhlIHYxIGFkZG9uIHBpcGVsaW5lXG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShgL2FwcC9gLCBgL2ApO1xuXG4gIC8qKlxuICAgKiBhbHNvIGFsc28sIHdlIGtub3cgdGhhdCB0aGUgcmUtd3JpdHRlbiBhcHAgc3RydWN0dXJlIGluIGVtYnJvaWRlckB2M1xuICAgKiBpcyBleHRyYW5lb3VzLCBhbmQgd2UgY2FuIGNvbGxhcHNlIGl0XG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShcbiAgICBgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEh9L2AsXG4gICAgJy8nLFxuICApO1xuXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVJlbGF0aXZlKTtcblxuICByZXR1cm4gYCR7bmFtZX0ke2xvY2FsUGFja2FnZXJTdHlsZVBhdGh9YDtcbn1cblxuLyoqXG4gKiBUbyBhdm9pZCBoaXR0aW5nIHRoZSBmaWxlc3lzZXRtLCB3ZSdsbCBzdG9yZSBhbGwgZm91bmRcbiAqIHByb2plY3QgcGF0aHMgYmVyZSwgc28gd2UgY2FuLCBpbiBtZW1vcnksXG4gKiBnZXQgdGhlIGZvbGRlciB3aGVyZSBhIHBhY2thZ2UuanNvbiBleGlzdHMsIHJhdGhlciB0aGFuXG4gKiBoaXQgdGhlIGZpbGUgc3lzdGVtIGV2ZXJ5IHRpbWUuXG4gKi9cbmNvbnN0IFNFRU4gPSBuZXcgU2V0KCk7XG5cbmZ1bmN0aW9uIGdldFNlZW4oc291cmNlUGF0aCkge1xuICBpZiAoU0VFTi5oYXMoc291cmNlUGF0aCkpIHJldHVybiBzb3VyY2VQYXRoO1xuXG4gIGxldCBwYXJ0cyA9IHNvdXJjZVBhdGguc3BsaXQoJy8nKTtcblxuICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+IDE7IGktLSkge1xuICAgIGxldCB0b0NoZWNrID0gcGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpO1xuXG4gICAgbGV0IHNlZW4gPSBTRUVOLmhhcyh0b0NoZWNrKTtcblxuICAgIGlmIChzZWVuKSB7XG4gICAgICByZXR1cm4gdG9DaGVjaztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgsIG9wdGlvbnMpIHtcbiAgbGV0IGN3ZCA9IG9wdGlvbnM/LmN3ZCA/PyBDV0Q7XG5cbiAgaWYgKHNvdXJjZVBhdGguaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIKSkge1xuICAgIHNvdXJjZVBhdGggPSBzb3VyY2VQYXRoLnNwbGl0KEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSClbMF07XG4gIH1cblxuICBpZiAoc291cmNlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgc291cmNlUGF0aCA9IHNvdXJjZVBhdGgucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgfVxuXG4gIGxldCBzZWVuID0gZ2V0U2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgbGV0IGNhbmRpZGF0ZVBhdGggPSBwYXRoLmpvaW4oc291cmNlUGF0aCwgJ3BhY2thZ2UuanNvbicpO1xuXG4gIGNvbnN0IGlzV29ya3NwYWNlID0gZnNTeW5jLmV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCk7XG5cbiAgaWYgKGlzV29ya3NwYWNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZVBhdGg7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBmaW5kUGFja2FnZUpzb25VcChzb3VyY2VQYXRoLCB7IGN3ZCB9KTtcblxuICBpZiAoIXBhY2thZ2VKc29uUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSBwcm9qZWN0IGZvciAke3NvdXJjZVBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCk7XG5cbiAgU0VFTi5hZGQod29ya3NwYWNlUGF0aCk7XG5cbiAgcmV0dXJuIHdvcmtzcGFjZVBhdGg7XG59XG5cbmZ1bmN0aW9uIGZpbmRQYWNrYWdlSnNvblVwKHN0YXJ0UGF0aCwgb3B0aW9ucykge1xuICBsZXQgY3dkID0gb3B0aW9ucz8uY3dkID8/IENXRDtcbiAgbGV0IHBhcnRzID0gc3RhcnRQYXRoLnNwbGl0KCcvJyk7XG5cbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICBsZXQgdG9DaGVjayA9IHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTtcblxuICAgIGxldCBwYWNrYWdlSnNvbiA9IHBhdGguam9pbih0b0NoZWNrLCAncGFja2FnZS5qc29uJyk7XG4gICAgbGV0IGV4aXN0cyA9IGZzU3luYy5leGlzdHNTeW5jKHBhY2thZ2VKc29uKTtcblxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHJldHVybiBwYWNrYWdlSnNvbjtcbiAgICB9XG5cbiAgICAvLyBEb24ndCB0cmF2ZXJzZSBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCBvZiB0aGUgZmlsZSBzeXN0ZW0uXG4gICAgaWYgKHRvQ2hlY2sgPT09IGN3ZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IE1BTklGRVNUX0NBQ0hFID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIHRoZSBwYWNrYWdlLmpzb24jbmFtZSwgb3IgY29uZmlnL2Vudmlyb25tZW50I21vdWRsZVByZWZpeCAoaWYgdjEgYXBwKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2R1bGVOYW1lKHNvdXJjZVBhdGgpIHtcbiAgY29uc3Qgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG4gIGNvbnN0IG1hbmlmZXN0ID0gZ2V0TWFuaWZlc3Qod29ya3NwYWNlKTtcblxuICBpZiAobWFuaWZlc3RbJ2VtYmVyLWFkZG9uJ10pIHtcbiAgICAvKipcbiAgICAgKiBMaWJyYXJpZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGN1c3RvbWl6ZSB0aGVpciBtb2R1bGUgbmFtZVxuICAgICAqIHRvIGJlIGRpZmZlcmVudCBmcm9tIHRoZWlyIHBhY2thZ2UgbmFtZS5cbiAgICAgKlxuICAgICAqIChJdCdzIGFsc28gYm9ua2VycyB0aGF0IHRoaXMgaXMgYWxsb3dlZCBmb3IgdjEgYXBwcylcbiAgICAgKi9cbiAgICByZXR1cm4gbWFuaWZlc3QubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgdjEgYXBwcywgd2UgbmVlZCB0byByZWZlcmVuY2UgdGhlIGNvbmZpZy9lbnZpcm9ubWVudC5qcyBmaWxlXG4gICAqIHRvIHNlZSBpZiB0aGUgbW9kdWxlUHJlZml4IHNldHRpbmcgZGlmZmVycyBmcm9tIG1hbmlmZXN0Lm5hbWU7XG4gICAqL1xuICBsZXQgZW52aXJvbm1lbnRKUyA9IHBhdGguam9pbih3b3Jrc3BhY2UsICdjb25maWcvZW52aXJvbm1lbnQuanMnKTtcblxuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50LmpzIGlzIGEgY29tbW9uSlMgZmlsZSwgc28gd2UgY2FuIHN5bmNocm9ub3VzbHkgcmVxdWlyZSBpdFxuICAgKlxuICAgKiBUT0RPOiBpZiB3ZSBoYXZlIGlzc3VlcyB3aXRoIGxvYWRpbmcgdGhpcyBmaWxlIGxhdGVyIHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IHJ1biBqc2NvZGVzaGlmdCBvbiBpdFxuICAgKiAgICAgICBidXQgdGhhdCBjb3VsZCBhbGxvdyB1cyB0byBiZSBicml0dGxlIGluIGRpZmZlcmVudCB3YXlzLCBsaWtlIGlmIGZvbGtzIHN0cmF5IGZyb20gdGhlIHdheSB0aGVcbiAgICogICAgICAgZmlsZSBpcyBsYWlkIG91dCBmcm9tIHRoZSBibHVlcHJpbnQgZGVmYXVsdHMuXG4gICAqL1xuICBpZiAoZnNTeW5jLmV4aXN0c1N5bmMoZW52aXJvbm1lbnRKUykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYgLS0gdGhpcyBleGlzdHNcbiAgICBjb25zdCBlbnZGbiA9IHJlcXVpcmUoZW52aXJvbm1lbnRKUyk7XG4gICAgY29uc3QgZW52ID0gZW52Rm4oJ2VtYmVyLXNjb3BlZC1jc3MnKTtcblxuICAgIHJldHVybiBlbnYubW9kdWxlUHJlZml4IHx8IG1hbmlmZXN0Lm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRmFsbGJhY2sgdG8gdGhlIHRydWVcdTIxMjIgbW9kdWxlXHUyMTIyIG5hbWUuXG4gICAqL1xuICByZXR1cm4gbWFuaWZlc3QubmFtZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gd29ya3NwYWNlXG4gKi9cbmZ1bmN0aW9uIGdldE1hbmlmZXN0KHdvcmtzcGFjZSkge1xuICBsZXQgZXhpc3RpbmcgPSBNQU5JRkVTVF9DQUNIRS5nZXQod29ya3NwYWNlKTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH1cblxuICBsZXQgYnVmZmVyID0gZnNTeW5jLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4od29ya3NwYWNlLCAncGFja2FnZS5qc29uJykpO1xuICBsZXQgY29udGVudCA9IGJ1ZmZlci50b1N0cmluZygpO1xuICBsZXQganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cbiAgTUFOSUZFU1RfQ0FDSEUuc2V0KHdvcmtzcGFjZSwganNvbik7XG5cbiAgcmV0dXJuIGpzb247XG59XG4iLCAiaW1wb3J0IG1kNSBmcm9tICdibHVlaW1wLW1kNSc7XG5cbi8qKlxuICogVGhlIGludGVudCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdlbmVyYXRlIHRoZSBzdWZmaXgvcG9zdGZpeCBmb3IgdGhlXG4gKiBjc3MgY2xhc3NlcywgYmFzZWQgb24gdGhlIG1vZHVsZS1zY29wZWQgcGF0aCBuYW1lLlxuICpcbiAqIGZvciBleGFtcGxlLFxuICogICAgaGFzaCgnbXktYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqICBpbnN0ZWFkIG9mXG4gKiAgICBoYXNoKCdhcHAvY29tcG9uZW50cy9mb28nKVxuICpcbiAqICAodW5sZXNzIHlvdXIgYXBwIG5hbWUgaXMgJ2FwcCcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZVBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKG1vZHVsZVBhdGgpIHtcbiAgcmV0dXJuICdlJyArIG1kNShtb2R1bGVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGhhc2hGcm9tTW9kdWxlUGF0aCA9IGhhc2g7XG4iLCAiaW1wb3J0IHsgaGFzaCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcbmltcG9ydCB7IGFwcFBhdGggfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IHsgaGFzaCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tQWJzb2x1dGVQYXRoKGFic29sdXRlUGF0aCkge1xuICAvKipcbiAgICogVGhlIHdob2xlIG9mIGBhcHBQYXRoYCB1bHRpbWF0ZWx5IHRyYW5zZm9ybXMgdGhlIGBhYnNvbHV0ZVBhdGhgXG4gICAqIGludG8gdGhlIGV4YWN0IHN0cmluZyB0aGF0IGZvbGtzIHdpbGwgcGFzcyB0byBgcmVsYXRpdmVQYXRoYFxuICAgKiBhdCBydW50aW1lLlxuICAgKi9cbiAgY29uc3QgbW9kdWxlUGF0aCA9IGFwcFBhdGgoYWJzb2x1dGVQYXRoKTtcbiAgY29uc3QgcG9zdGZpeCA9IGhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIHBvc3RmaXg7XG59XG4iLCAiaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IGlzSW5zaWRlR2xvYmFsIGZyb20gJy4vaXNJbnNpZGVHbG9iYWwuanMnO1xuXG5mdW5jdGlvbiByZXdyaXRlU2VsZWN0b3Ioc2VsLCBwb3N0Zml4KSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChzZWxlY3RvcnMpID0+IHtcbiAgICBzZWxlY3RvcnMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IudmFsdWUgKz0gJ18nICsgcG9zdGZpeDtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3RhZycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBzZWxlY3Rvci5yZXBsYWNlV2l0aChcbiAgICAgICAgICBwYXJzZXIudGFnKHsgdmFsdWU6IHNlbGVjdG9yLnZhbHVlIH0pLFxuICAgICAgICAgIHBhcnNlci5jbGFzc05hbWUoeyB2YWx1ZTogcG9zdGZpeCB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHJlbW92ZSA6Z2xvYmFsXG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3BzZXVkbycgJiYgc2VsZWN0b3IudmFsdWUgPT09ICc6Z2xvYmFsJykge1xuICAgICAgICBzZWxlY3Rvci5yZXBsYWNlV2l0aCguLi5zZWxlY3Rvci5ub2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gcGFyc2VyKHRyYW5zZm9ybSkucHJvY2Vzc1N5bmMoc2VsKTtcblxuICByZXR1cm4gdHJhbnNmb3JtZWQ7XG59XG5cbmZ1bmN0aW9uIGlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAnYXRydWxlJyAmJiBwYXJlbnQubmFtZSA9PT0gJ2tleWZyYW1lcycpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUtleWZyYW1lcyhwYXJlbnQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXdyaXRlQ3NzKGNzcywgcG9zdGZpeCwgZmlsZU5hbWUsIGxheWVyTmFtZSkge1xuICBjb25zdCBsYXllck5hbWVXaXRoRGVmYXVsdCA9IGxheWVyTmFtZSA/PyAnY29tcG9uZW50cyc7XG4gIGNvbnN0IGFzdCA9IHBvc3Rjc3MucGFyc2UoY3NzKTtcblxuICBhc3Qud2Fsaygobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdydWxlJyAmJiAhaXNJbnNpZGVLZXlmcmFtZXMobm9kZSkpIHtcbiAgICAgIG5vZGUuc2VsZWN0b3IgPSByZXdyaXRlU2VsZWN0b3Iobm9kZS5zZWxlY3RvciwgcG9zdGZpeCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCByZXdyaXR0ZW5Dc3MgPSBhc3QudG9TdHJpbmcoKTtcblxuICBpZiAoIWxheWVyTmFtZVdpdGhEZWZhdWx0KSB7XG4gICAgcmV0dXJuIGAvKiAke2ZpbGVOYW1lfSAqL1xcbiR7cmV3cml0dGVuQ3NzfVxcbmA7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGAvKiAke2ZpbGVOYW1lfSAqL1xcbkBsYXllciAke2xheWVyTmFtZVdpdGhEZWZhdWx0fSB7XFxuXFxuYCArXG4gICAgcmV3cml0dGVuQ3NzICtcbiAgICAnXFxufVxcbidcbiAgKTtcbn1cblxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzSW5zaWRlR2xvYmFsKG5vZGUsIGZ1bmMpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAncHNldWRvJyAmJiBwYXJlbnQudmFsdWUgPT09ICc6Z2xvYmFsJykgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzSW5zaWRlR2xvYmFsKHBhcmVudCwgZnVuYyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsSUFBQUEsa0JBQTJCO0FBQzNCLElBQUFDLG9CQUFpQjs7O0FDRmpCLHlCQUFtQjtBQUNuQixxQkFBbUI7QUFDbkIsdUJBQWlCOzs7QUNGakIseUJBQWdCO0FBZ0JULFNBQVMsS0FBSyxZQUFZO0FBQy9CLFNBQU8sVUFBTSxtQkFBQUMsU0FBSSxVQUFVLEVBQUUsVUFBVSxHQUFHLENBQUM7QUFDN0M7QUFHTyxJQUFNLHFCQUFxQjs7O0FDaEIzQixTQUFTLHFCQUFxQixjQUFjO0FBTWpELFFBQU0sYUFBYSxRQUFRLFlBQVk7QUFDdkMsUUFBTSxVQUFVLEtBQUssVUFBVTtB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LEdBQUc7QUFFckQsU0FBTztBQUNUO0FBRUEsU0FBUyxrQkFBa0IsTUFBTTtBQUMvQixRQUFNLFNBQVMsS0FBSztBQUVwQixNQUFJLENBQUMsT0FBUSxRQUFPO0FBQ3BCLE1BQUksT0FBTyxTQUFTLFlBQVksT0FBTyxTQUFTLFlBQWEsUUFBTztBQUVwRSxTQUFPLGtCQUFrQixNQUFNO0FBQ2pDO0FBRWUsU0FBUixXQUE0QixLQUFLLFNBQVMsVUFBVSxXQUFXO0FBQ3BFLFFBQU0sdUJBQXVCLGFBQWE7QUFDMUMsUUFBTSxNQUFNLGVBQUFDLFFBQVEsTUFBTSxHQUFHO0FBRTdCLE1BQUksS0FBSyxDQUFDLFNBQVM7QUFDakIsUUFBSSxLQUFLLFNBQVMsVUFBVSxDQUFDLGtCQUFrQixJQUFJLEdBQUc7QUFDcEQsV0FBSyxXQUFXLGdCQUFnQixLQUFLLFVBQVUsT0FBTztBQUFBLElBQ3hEO0FBQUEsRUFDRixDQUFDO0FBRUQsUUFBTSxlQUFlLElBQUksU0FBUztBQUVsQyxNQUFJLENBQUMsc0JBQXNCO0FBQ3pCLFdBQU8sTUFBTSxRQUFRO0FBQUEsRUFBUSxZQUFZO0FBQUE7QUFBQSxFQUMzQztBQUVBLFNBQ0UsTUFBTSxRQUFRO0FBQUEsU0FBZSxvQkFBb0I7QUFBQTtBQUFBLElBQ2pELGVBQ0E7QUFFSjs7O0FKckRBLGVBQU8sdUJBQXdCLE1BQU07QUFDbkMsUUFBTSxVQUFVLEtBQUssV0FBVztBQUNoQyxRQUFNLFVBQVUsS0FBSztBQUVyQixNQUFJLENBQUMsZUFBZSxTQUFTLEVBQUUsR0FBRyxTQUFTLEtBQUssS0FBSyxZQUFZLENBQUMsR0FBRztBQUNuRSxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksQ0FBQyxRQUFRLFdBQVcsS0FBSyxXQUFXLEdBQUc7QUFDekMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGNBQWMsa0JBQUFDLFFBQUssU0FBUyxPQUFPO0FBRXpDLFFBQU0sVUFBVSxRQUFRLFFBQVEsUUFBUSxNQUFNO0FBQzlDLFFBQU0sVUFBVSxRQUFRLFFBQVEsUUFBUSxLQUFLO0FBQzdDLFFBQU0sZ0JBQVksNEJBQVcsT0FBTztBQUNwQyxRQUFNLGdCQUFZLDRCQUFXLE9BQU87QUFFcEMsTUFBSSxhQUFhLFdBQVc7QUFDMUIsVUFBTSxVQUFVLFNBQVMsT0FBTztBQUNoQyxVQUFNLGVBQWU7QUFBQSxNQUNuQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxRQUFRO0FBQUEsSUFDVjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfbm9kZV9mcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgIm1kNSIsICJhc3NlcnQiLCAicGF0aCIsICJmc1N5bmMiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAicGF0aCJdCn0K
308
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtbG9hZGVyLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL3BhdGgvaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC9oYXNoLWZyb20tYWJzb2x1dGUtcGF0aC5qcyIsICIuLi8uLi9zcmMvbGliL3Jld3JpdGVDc3MuanMiLCAiLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSAgZnJvbSAndW5wbHVnaW4nO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb20sIGlzUmVsZXZhbnRGaWxlIH0gZnJvbSAnLi4vbGliL3BhdGgvdXRpbHMuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi4vbGliL3Jld3JpdGVDc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoY29kZSkge1xuICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG4gIGNvbnN0IGNzc1BhdGggPSB0aGlzLnJlc291cmNlUGF0aDtcblxuICBpZiAoIWlzUmVsZXZhbnRGaWxlKGNzc1BhdGgsIHsgLi4ub3B0aW9ucywgY3dkOiB0aGlzLnJvb3RDb250ZXh0IH0pKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBpZiAoIWNzc1BhdGguc3RhcnRzV2l0aCh0aGlzLnJvb3RDb250ZXh0KSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG5cbiAgY29uc3QgY3NzRmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGNzc1BhdGgpO1xuXG4gIGNvbnN0IGhic1BhdGggPSBjc3NQYXRoLnJlcGxhY2UoJy5jc3MnLCAnLmhicycpO1xuICBjb25zdCBnanNQYXRoID0gY3NzUGF0aC5yZXBsYWNlKCcuY3NzJywgJy5qcycpO1xuICBjb25zdCBndHNQYXRoID0gY3NzUGF0aC5yZXBsYWNlKCcuY3NzJywgJy50cycpO1xuXG4gIGlmIChleGlzdHNTeW5jKGdqc1BhdGgpIHx8IGV4aXN0c1N5bmMoZ3RzUGF0aCkgfHwgZXhpc3RzU3luYyhoYnNQYXRoKSkge1xuICAgIGNvbnN0IHBvc3RmaXggPSBoYXNoRnJvbShjc3NQYXRoKTtcbiAgICBjb25zdCByZXdyaXR0ZW5Dc3MgPSByZXdyaXRlQ3NzKFxuICAgICAgY29kZSxcbiAgICAgIHBvc3RmaXgsXG4gICAgICBjc3NGaWxlTmFtZSxcbiAgICAgIG9wdGlvbnMubGF5ZXJOYW1lLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuQ3NzO1xuICB9XG5cbiAgcmV0dXJuIGNvZGU7XG59XG4iLCAiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5pbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb21BYnNvbHV0ZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzJztcbmltcG9ydCB7IGhhc2hGcm9tTW9kdWxlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuZXhwb3J0IHsgaGFzaEZyb21BYnNvbHV0ZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzJztcbmV4cG9ydCB7IGhhc2hGcm9tTW9kdWxlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuY29uc3QgRU1CUk9JREVSX0RJUiA9ICdub2RlX21vZHVsZXMvLmVtYnJvaWRlcic7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEggPSBgJHtFTUJST0lERVJfRElSfS9yZXdyaXR0ZW4tYXBwYDtcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTID0gYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIfS9hc3NldHNgO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX1BBQ0tBR0VTID0gYCR7RU1CUk9JREVSX0RJUn0vcmV3cml0dGVuLXBhY2thZ2VzYDtcbmNvbnN0IElSUkVMRVZBTlRfUEFUSFMgPSBbJ25vZGVfbW9kdWxlcy8ucG5wbSddO1xuY29uc3QgVU5TVVBQT1JURURfRElSRUNUT1JJRVMgPSBuZXcgU2V0KFsndGVzdHMnXSk7XG5cbmNvbnN0IENXRCA9IHByb2Nlc3MuY3dkKCk7XG5cbi8qKlxuICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlUGF0aCBmb3JtYXQgaXMsXG4gKiB0aGlzIHdpbGwgdHJ5IHRvIHJldHVybiB0aGUgY29ycmVjdCBwb3N0Zml4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gaGFzaEZyb21BYnNvbHV0ZVBhdGgoZmlsZVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGhhc2hGcm9tTW9kdWxlUGF0aChmaWxlUGF0aCk7XG59XG5cbi8qKlxuICogQmFzZWQgb24gZW1iZXIncyBjb21wb25lbnQgbG9jYXRpb24gY29udmVudGlvbnMsXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBhIHBhdGggZm9yIHdoZXJlIHdlXG4gKiBleHBlY3QgdGhlIENTUyB0byBsaXZlLlxuICpcbiAqIEZvciBjby1sb2NhdGVkIHN0cnVjdHVyZTpcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5jc3NcbiAqXG4gKiBGb3IgbmVzdGVkIGNvLWxvY2F0ZWQgc3RydWN0dXJlXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5jc3NcbiAqXG4gKiBGb3IgUG9kcyByb3V0ZXMgc3RydWN0dXJlXG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3RlbXBsYXRlLntoYnMsanN9XG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3N0eWxlcy5jc3NcbiAqXG4gKiBEZWxpYmVyYXRlbHkgbm90IHN1cHBvcnRlZDpcbiAqICAgLSBjb21wb25lbnRzIHcvIHBvZHMgLS0gdGhpcyBpcyBkZXByZWNhdGVkIGluIDUuMTBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSB0aGUgaGJzLCBqcywgZ2pzLCBndHMgb3Igd2hhdGV2ZXIgY28tbG9jYXRlZCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gLSBleHBlY3RlZCBjc3MgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzUGF0aEZvcihmaWxlTmFtZSkge1xuICBsZXQgd2l0aG91dEV4dCA9IHdpdGhvdXRFeHRlbnNpb24oZmlsZU5hbWUpO1xuICBsZXQgY3NzUGF0aCA9IHdpdGhvdXRFeHQgKyAnLmNzcyc7XG5cbiAgaWYgKGlzUG9kKGZpbGVOYW1lKSkge1xuICAgIGNzc1BhdGggPSBmaWxlTmFtZVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuanMkLywgJ3N0eWxlcy5jc3MnKVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuaGJzLywgJ3N0eWxlcy5jc3MnKTtcbiAgfVxuXG4gIHJldHVybiBjc3NQYXRoO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSB8fCBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJyk7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIENoZWNrcyBpZiBhIGZpbGUgZW5kcyB3aXRoXG4gKiAtIHRlbXBsYXRlLmpzXG4gKiAtIHRlbXBsYXRlLmhic1xuICogLSBzdHlsZXMuY3NzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZChmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJucyB0aGUgc2FtZSBwYXRoLCBidXQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0RXh0ZW5zaW9uKGZpbGVQYXRoKSB7XG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICByZXR1cm4gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcbn1cblxuLyoqXG4gKiBFeGFtcGxlcyBmb3IgZmlsZU5hbWVcbiAqIC0gYWJzb2x1dGUgb24tZGlzayBwYXRoXG4gKiAtIGluIHdlYnBhY2tcbiAqICAgLSBVUkwtYWJzb2x1dGUgcGF0aCwgc3RhcnRpbmcgd2l0aCAvXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcGFyYW0ge3sgYWRkaXRpb25hbFJvb3RzPzogc3RyaW5nW107IGN3ZDogc3RyaW5nIH19IG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGV2YW50RmlsZShmaWxlTmFtZSwgeyBhZGRpdGlvbmFsUm9vdHMsIGN3ZCB9KSB7XG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCcvQGVtYnJvaWRlcicpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChJUlJFTEVWQU5UX1BBVEhTLnNvbWUoKGkpID0+IGZpbGVOYW1lLmluY2x1ZGVzKGkpKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChmaWxlTmFtZS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgIC8vIGlmIGEgZmlsZSBpcyBub3QgdGhlIGVtYnJvaWRlciBjYWNoZSBkaXJlY3RvcnlcbiAgICAvLyBhbmQgaXMgaW4gbm9kZV9tb2R1bGVzLCBza2lwIGl0LlxuICAgIGlmICghZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSX0RJUikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyByZXdyaXR0ZW4gcGFja2FnZXMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBhdCB0aGVpciBvd25cbiAgICAvLyBwdWJsaXNoIHRpbWVcbiAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX1BBQ0tBR0VTKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoZXNlIGFyZSBhbHJlYWR5IHRoZSBidW5kbGVkIGZpbGVzLlxuICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUUykpIHtcbiAgICAgIC8vIG5vdCBzdXBwb3J0ZWQsIG5ldmVyIHdpbGwgYmVcbiAgICAgIGlmIChmaWxlTmFtZS5lbmRzV2l0aChgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUU30vdGVzdHMuanNgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZWFsbHksIHdlIG5ldmVyIGdldCBoZXJlIC0tIGluZGljYXRlcyB3ZSdyZSBub3QgZmlsdGVyaW5nIGVmZmVjdGl2ZWx5IGluIGJhYmVsXG4gICAgICAvLyBOT1RFOiBpZiB3ZSBnZXQgaGVyZSwgd2UncmUgdHJ5aW5nIHRvIG9wZXJhdGUgb24gYSBmaWxlIHRvbyBsYXRlLlxuICAgICAgLy8gICAgICAgd2UgbmVlZCBTY29wZWRDU1MgdG8gb3BlcmF0ZSBhcyBjbG9zZSB0byBvcmlnaW5hbCBzb3VyY2UgYXMgcG9zc2libGUgLS0gbm90IG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsZXQgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoZmlsZU5hbWUpO1xuXG4gIGFzc2VydChjd2QsIGBjd2Qgd2FzIG5vdCBwYXNzZWQgdG8gaXNSZWxldmFudEZpbGVgKTtcblxuICBsZXQgb3VyV29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoY3dkKTtcblxuICBpZiAod29ya3NwYWNlICE9PSBvdXJXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbG9jYWwgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICBsZXQgWywgLi4ucGFydHNdID0gbG9jYWwuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTLmhhcyhwYXJ0c1swXSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTW9zdGx5IHBvZHMgc3VwcG9ydC5cbiAgICogZm9sa3MgbmVlZCB0byBvcHQgaW4gdG8gcG9kcyAocm91dGVzKSwgYmVjYXVzZSBldmVyeSBwb2RzIGFwcCBjYW4gYmUgY29uZmlndXJlZCBkaWZmZXJlbnRseVxuICAgKi9cbiAgbGV0IHJvb3RzID0gWycvY29tcG9uZW50cy8nLCAnL3RlbXBsYXRlcy8nLCAuLi4oYWRkaXRpb25hbFJvb3RzIHx8IFtdKV07XG5cbiAgaWYgKCFyb290cy5zb21lKChyb290KSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhyb290KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VTY29wZWRQYXRoKSB7XG4gIC8qKlxuICAgKiAqQnkgY29udmVudGlvbiosIGBzcmNgIGlzIG9taXR0ZWQgZnJvbSBjb21wb25lbnQgcGF0aHMuXG4gICAqIFdlIGNhbiByZWZsZWN0IHRoZSBzYW1lIGJlaGF2aW9yIGJ5IHJlcGxhY2luZyBzcmMvXG4gICAqIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBDU1MgaXNuJ3QgZW1pdHRlZCBhcyBhIGNvLWxvY2F0ZWQgbW9kdWxlLCBidXRcbiAgICogdG8ga2VlcCBjb252ZW50aW9ucyBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMsXG4gICAqIHdlIGNhbiBwcmV0ZW5kIGl0IGlzLlxuICAgKlxuICAgKiBBbnkgY3VzdG9taXphdGlvbiBiZXlvbmQgcmVtb3ZpbmcgYHNyY2AgYW5kIGBhcHBgIGlzIHBvdGVudGlhbGx5IGNvbmZ1c2luZy5cbiAgICogSWYgd2UgbmVlZCBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zLCB3ZSdsbCB3YW50IHRvIG1hdGNoIG9uIGBleHBvcnRzYCBpbiB0aGVcbiAgICogY29ycmVzcG9uZGluZyBwYWNrYWdlLmpzb25cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlU2NvcGVkUGF0aC5yZXBsYWNlKC9eXFwvc3JjXFwvLywgJy8nKTtcblxuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIGlmIChpc1BvZChwYWNrYWdlUmVsYXRpdmUpKSB7XG4gICAgLyoqXG4gICAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICAgKi9cbiAgICByZXR1cm4gcGFyc2VkLmRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBhbiBleHRlbnNpb24gaXMgcGFzc2VkLCByZW1vdmUgaXQuXG4gICAqIFdoZW4gdXNpbmcgcGFja2FnZXJzLCBmb2xrcyBhcmUgdXNlZCB0byBub3QgaGF2aW5nIHRvIHNwZWNpZnkgZXh0ZW5zaW9ucyBmb3IgZmlsZXMuXG4gICAqIFNpbmNlIHdlIGRvbid0IGV2ZW4gZW1pdCBjc3MgZmlsZXMgY28tbG9jYXRlZCB0byBlYWNoIG1vZHVsZSxcbiAgICogdGhpcyBoZWxwcyB1cyBub3QgY29udmV5IGEgbGllIHRoYXQgYSBmaWxlIG1heSBleGlzdCBpbiBhdCBydW50aW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSBgPG1vZHVsZS1uYW1lPi9jb21wb25lbnRzL2J1dHRvbmAuXG4gICAqIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGV4dGVuc2lvbiBpcywgYmVjYXVzZSB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgY3NzIGZpbGVcbiAgICogZm9yIHRoZSBidXR0b24gbW9kdWxlIGFueXdheS5cbiAgICovXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcblxuICByZXR1cm4gbG9jYWxQYWNrYWdlclN0eWxlUGF0aDtcbn1cblxuLyoqXG4gKiByZXR1cm5zIHRoZSBhcHAtbW9kdWxlIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlXG4gKlxuICogVGhpcyBhc3N1bWVzIG5vcm1hbCBlbWJlciBhcHAgY29udmVudGlvbnNcbiAqXG4gKiB3aGljaCBpcyBgPHBhY2thZ2UuanNvbiNuYW1lPi9wYXRoLXRvLWZpbGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSBtb2R1bGVOYW1lKHNvdXJjZVBhdGgpO1xuXG4gIC8qKlxuICAgKiAgVW5kZXIgZW1icm9pZGVyIGJ1aWxkcywgdGhlIHNwZWMtY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGFwcFxuICAgKiBoYXMgYWxsIHRoZSBmaWxlcyB1bmRlciBhIGZvbGRlciB3aGljaCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIG5hbWUsXG4gICAqIHJhdGhlciB0aGFuIFwiYXBwXCIuXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gc291cmNlUGF0aC5yZXBsYWNlKHdvcmtzcGFjZVBhdGgsICcnKTtcblxuICAvKipcbiAgICogQnV0IHdlIGFsc28gZG9uJ3Qgd2FudCAnYXBwJyAtLSB3aGljaCBpcyBwcmVzZW50IGluIHRoZSB2MSBhZGRvbiBwaXBlbGluZVxuICAgKi9cbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoYC9hcHAvYCwgYC9gKTtcblxuICAvKipcbiAgICogYWxzbyBhbHNvLCB3ZSBrbm93IHRoYXQgdGhlIHJlLXdyaXR0ZW4gYXBwIHN0cnVjdHVyZSBpbiBlbWJyb2lkZXJAdjNcbiAgICogaXMgZXh0cmFuZW91cywgYW5kIHdlIGNhbiBjb2xsYXBzZSBpdFxuICAgKi9cbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoXG4gICAgYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIfS9gLFxuICAgICcvJyxcbiAgKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbi8qKlxuICogVG8gYXZvaWQgaGl0dGluZyB0aGUgZmlsZXN5c2V0bSwgd2UnbGwgc3RvcmUgYWxsIGZvdW5kXG4gKiBwcm9qZWN0IHBhdGhzIGJlcmUsIHNvIHdlIGNhbiwgaW4gbWVtb3J5LFxuICogZ2V0IHRoZSBmb2xkZXIgd2hlcmUgYSBwYWNrYWdlLmpzb24gZXhpc3RzLCByYXRoZXIgdGhhblxuICogaGl0IHRoZSBmaWxlIHN5c3RlbSBldmVyeSB0aW1lLlxuICovXG5jb25zdCBTRUVOID0gbmV3IFNldCgpO1xuXG5mdW5jdGlvbiBnZXRTZWVuKHNvdXJjZVBhdGgpIHtcbiAgaWYgKFNFRU4uaGFzKHNvdXJjZVBhdGgpKSByZXR1cm4gc291cmNlUGF0aDtcblxuICBsZXQgcGFydHMgPSBzb3VyY2VQYXRoLnNwbGl0KCcvJyk7XG5cbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICBsZXQgdG9DaGVjayA9IHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTtcblxuICAgIGxldCBzZWVuID0gU0VFTi5oYXModG9DaGVjayk7XG5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gIGxldCBjd2QgPSBvcHRpb25zPy5jd2QgPz8gQ1dEO1xuXG4gIGlmIChzb3VyY2VQYXRoLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSCkpIHtcbiAgICBzb3VyY2VQYXRoID0gc291cmNlUGF0aC5zcGxpdChFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEgpWzBdO1xuICB9XG5cbiAgaWYgKHNvdXJjZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIHNvdXJjZVBhdGggPSBzb3VyY2VQYXRoLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIH1cblxuICBsZXQgc2VlbiA9IGdldFNlZW4oc291cmNlUGF0aCk7XG5cbiAgaWYgKHNlZW4pIHtcbiAgICByZXR1cm4gc2VlbjtcbiAgfVxuXG4gIGxldCBjYW5kaWRhdGVQYXRoID0gcGF0aC5qb2luKHNvdXJjZVBhdGgsICdwYWNrYWdlLmpzb24nKTtcblxuICBjb25zdCBpc1dvcmtzcGFjZSA9IGZzU3luYy5leGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpO1xuXG4gIGlmIChpc1dvcmtzcGFjZSkge1xuICAgIHJldHVybiBzb3VyY2VQYXRoO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFBhY2thZ2VKc29uVXAoc291cmNlUGF0aCwgeyBjd2QgfSk7XG5cbiAgaWYgKCFwYWNrYWdlSnNvblBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlcm1pbmUgcHJvamVjdCBmb3IgJHtzb3VyY2VQYXRofWApO1xuICB9XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIFNFRU4uYWRkKHdvcmtzcGFjZVBhdGgpO1xuXG4gIHJldHVybiB3b3Jrc3BhY2VQYXRoO1xufVxuXG5mdW5jdGlvbiBmaW5kUGFja2FnZUpzb25VcChzdGFydFBhdGgsIG9wdGlvbnMpIHtcbiAgbGV0IGN3ZCA9IG9wdGlvbnM/LmN3ZCA/PyBDV0Q7XG4gIGxldCBwYXJ0cyA9IHN0YXJ0UGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID4gMTsgaS0tKSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7XG5cbiAgICBsZXQgcGFja2FnZUpzb24gPSBwYXRoLmpvaW4odG9DaGVjaywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGxldCBleGlzdHMgPSBmc1N5bmMuZXhpc3RzU3luYyhwYWNrYWdlSnNvbik7XG5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gcGFja2FnZUpzb247XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgdHJhdmVyc2UgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3Qgb2YgdGhlIGZpbGUgc3lzdGVtLlxuICAgIGlmICh0b0NoZWNrID09PSBjd2QpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiB0aGUgcGFja2FnZS5qc29uI25hbWUsIG9yIGNvbmZpZy9lbnZpcm9ubWVudCNtb3VkbGVQcmVmaXggKGlmIHYxIGFwcClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGdldE1hbmlmZXN0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKG1hbmlmZXN0WydlbWJlci1hZGRvbiddKSB7XG4gICAgLyoqXG4gICAgICogTGlicmFyaWVzIGFyZSBub3QgYWxsb3dlZCB0byBjdXN0b21pemUgdGhlaXIgbW9kdWxlIG5hbWVcbiAgICAgKiB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGVpciBwYWNrYWdlIG5hbWUuXG4gICAgICpcbiAgICAgKiAoSXQncyBhbHNvIGJvbmtlcnMgdGhhdCB0aGlzIGlzIGFsbG93ZWQgZm9yIHYxIGFwcHMpXG4gICAgICovXG4gICAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRm9yIHYxIGFwcHMsIHdlIG5lZWQgdG8gcmVmZXJlbmNlIHRoZSBjb25maWcvZW52aXJvbm1lbnQuanMgZmlsZVxuICAgKiB0byBzZWUgaWYgdGhlIG1vZHVsZVByZWZpeCBzZXR0aW5nIGRpZmZlcnMgZnJvbSBtYW5pZmVzdC5uYW1lO1xuICAgKi9cbiAgbGV0IGVudmlyb25tZW50SlMgPSBwYXRoLmpvaW4od29ya3NwYWNlLCAnY29uZmlnL2Vudmlyb25tZW50LmpzJyk7XG5cbiAgLyoqXG4gICAqIE5PVEU6IHRoZSBlbnZpcm9ubWVudC5qcyBpcyBhIGNvbW1vbkpTIGZpbGUsIHNvIHdlIGNhbiBzeW5jaHJvbm91c2x5IHJlcXVpcmUgaXRcbiAgICpcbiAgICogVE9ETzogaWYgd2UgaGF2ZSBpc3N1ZXMgd2l0aCBsb2FkaW5nIHRoaXMgZmlsZSBsYXRlciB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBydW4ganNjb2Rlc2hpZnQgb24gaXRcbiAgICogICAgICAgYnV0IHRoYXQgY291bGQgYWxsb3cgdXMgdG8gYmUgYnJpdHRsZSBpbiBkaWZmZXJlbnQgd2F5cywgbGlrZSBpZiBmb2xrcyBzdHJheSBmcm9tIHRoZSB3YXkgdGhlXG4gICAqICAgICAgIGZpbGUgaXMgbGFpZCBvdXQgZnJvbSB0aGUgYmx1ZXByaW50IGRlZmF1bHRzLlxuICAgKi9cbiAgaWYgKGZzU3luYy5leGlzdHNTeW5jKGVudmlyb25tZW50SlMpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmIC0tIHRoaXMgZXhpc3RzXG4gICAgY29uc3QgZW52Rm4gPSByZXF1aXJlKGVudmlyb25tZW50SlMpO1xuICAgIGNvbnN0IGVudiA9IGVudkZuKCdlbWJlci1zY29wZWQtY3NzJyk7XG5cbiAgICByZXR1cm4gZW52Lm1vZHVsZVByZWZpeCB8fCBtYW5pZmVzdC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhbGxiYWNrIHRvIHRoZSB0cnVlXHUyMTIyIG1vZHVsZVx1MjEyMiBuYW1lLlxuICAgKi9cbiAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmtzcGFjZVxuICovXG5mdW5jdGlvbiBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpIHtcbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uO1xufVxuIiwgImltcG9ydCBtZDUgZnJvbSAnYmx1ZWltcC1tZDUnO1xuXG4vKipcbiAqIFRoZSBpbnRlbnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBnZW5lcmF0ZSB0aGUgc3VmZml4L3Bvc3RmaXggZm9yIHRoZVxuICogY3NzIGNsYXNzZXMsIGJhc2VkIG9uIHRoZSBtb2R1bGUtc2NvcGVkIHBhdGggbmFtZS5cbiAqXG4gKiBmb3IgZXhhbXBsZSxcbiAqICAgIGhhc2goJ215LWFwcC9jb21wb25lbnRzL2ZvbycpXG4gKiAgaW5zdGVhZCBvZlxuICogICAgaGFzaCgnYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqXG4gKiAgKHVubGVzcyB5b3VyIGFwcCBuYW1lIGlzICdhcHAnKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVQYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaChtb2R1bGVQYXRoKSB7XG4gIHJldHVybiAnZScgKyBtZDUobW9kdWxlUGF0aCkuc3Vic3RyaW5nKDAsIDgpO1xufVxuXG5cbmV4cG9ydCBjb25zdCBoYXNoRnJvbU1vZHVsZVBhdGggPSBoYXNoO1xuIiwgImltcG9ydCB7IGhhc2ggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5pbXBvcnQgeyBhcHBQYXRoIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCB7IGhhc2ggfSBmcm9tICcuL2hhc2gtZnJvbS1tb2R1bGUtcGF0aC5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoRnJvbUFic29sdXRlUGF0aChhYnNvbHV0ZVBhdGgpIHtcbiAgLyoqXG4gICAqIFRoZSB3aG9sZSBvZiBgYXBwUGF0aGAgdWx0aW1hdGVseSB0cmFuc2Zvcm1zIHRoZSBgYWJzb2x1dGVQYXRoYFxuICAgKiBpbnRvIHRoZSBleGFjdCBzdHJpbmcgdGhhdCBmb2xrcyB3aWxsIHBhc3MgdG8gYHJlbGF0aXZlUGF0aGBcbiAgICogYXQgcnVudGltZS5cbiAgICovXG4gIGNvbnN0IG1vZHVsZVBhdGggPSBhcHBQYXRoKGFic29sdXRlUGF0aCk7XG4gIGNvbnN0IHBvc3RmaXggPSBoYXNoKG1vZHVsZVBhdGgpO1xuXG4gIHJldHVybiBwb3N0Zml4O1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0luc2lkZUdsb2JhbChub2RlLCBmdW5jKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ3BzZXVkbycgJiYgcGFyZW50LnZhbHVlID09PSAnOmdsb2JhbCcpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUdsb2JhbChwYXJlbnQsIGZ1bmMpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLElBQUFBLGtCQUEyQjtBQUMzQixJQUFBQyxvQkFBaUI7OztBQ0ZqQix5QkFBbUI7QUFDbkIscUJBQW1CO0FBQ25CLHVCQUFpQjs7O0FDRmpCLHlCQUFnQjtBQWdCVCxTQUFTLEtBQUssWUFBWTtBQUMvQixTQUFPLFVBQU0sbUJBQUFDLFNBQUksVUFBVSxFQUFFLFVBQVUsR0FBRyxDQUFDO0FBQzdDO0FBR08sSUFBTSxxQkFBcUI7OztBQ2hCM0IsU0FBUyxxQkFBcUIsY0FBYztBQU1qRCxRQUFNLGFBQWEsUUFBUSxZQUFZO0FBQ3ZDLFFBQU0sVUFBVSxL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LEVBQUUsWUFBWSxHQUFHO0FBRXJELFNBQU87QUFDVDtBQUVBLFNBQVMsa0JBQWtCLE1BQU07QUFDL0IsUUFBTSxTQUFTLEtBQUs7QUFFcEIsTUFBSSxDQUFDLE9BQVEsUUFBTztBQUNwQixNQUFJLE9BQU8sU0FBUyxZQUFZLE9BQU8sU0FBUyxZQUFhLFFBQU87QUFFcEUsU0FBTyxrQkFBa0IsTUFBTTtBQUNqQztBQUVlLFNBQVIsV0FBNEIsS0FBSyxTQUFTLFVBQVUsV0FBVztBQUNwRSxRQUFNLHVCQUF1QixhQUFhO0FBQzFDLFFBQU0sTUFBTSxlQUFBQyxRQUFRLE1BQU0sR0FBRztBQUU3QixNQUFJLEtBQUssQ0FBQyxTQUFTO0FBQ2pCLFFBQUksS0FBSyxTQUFTLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxHQUFHO0FBQ3BELFdBQUssV0FBVyxnQkFBZ0IsS0FBSyxVQUFVLE9BQU87QUFBQSxJQUN4RDtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sZUFBZSxJQUFJLFNBQVM7QUFFbEMsTUFBSSxDQUFDLHNCQUFzQjtBQUN6QixXQUFPLE1BQU0sUUFBUTtBQUFBLEVBQVEsWUFBWTtBQUFBO0FBQUEsRUFDM0M7QUFFQSxTQUNFLE1BQU0sUUFBUTtBQUFBLFNBQWUsb0JBQW9CO0FBQUE7QUFBQSxJQUNqRCxlQUNBO0FBRUo7OztBSnJEQSxlQUFPLHVCQUF3QixNQUFNO0FBQ25DLFFBQU0sVUFBVSxLQUFLLFdBQVc7QUFDaEMsUUFBTSxVQUFVLEtBQUs7QUFFckIsTUFBSSxDQUFDLGVBQWUsU0FBUyxFQUFFLEdBQUcsU0FBUyxLQUFLLEtBQUssWUFBWSxDQUFDLEdBQUc7QUFDbkUsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLENBQUMsUUFBUSxXQUFXLEtBQUssV0FBVyxHQUFHO0FBQ3pDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLGtCQUFBQyxRQUFLLFNBQVMsT0FBTztBQUV6QyxRQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsTUFBTTtBQUM5QyxRQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsS0FBSztBQUM3QyxRQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsS0FBSztBQUU3QyxVQUFJLDRCQUFXLE9BQU8sU0FBSyw0QkFBVyxPQUFPLFNBQUssNEJBQVcsT0FBTyxHQUFHO0FBQ3JFLFVBQU0sVUFBVSxTQUFTLE9BQU87QUFDaEMsVUFBTSxlQUFlO0FBQUEsTUFDbkI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsUUFBUTtBQUFBLElBQ1Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsiaW1wb3J0X25vZGVfZnMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJtZDUiLCAiYXNzZXJ0IiwgInBhdGgiLCAiZnNTeW5jIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgInBhdGgiXQp9Cg==
@@ -273,15 +273,16 @@ function getManifest(workspace) {
273
273
  function fixFilename(filename) {
274
274
  let fileName = filename;
275
275
  let workspace = findWorkspacePath(fileName);
276
- let potentialModuleName = import_node_path2.default.basename(workspace);
276
+ let moduleName2 = moduleName(workspace);
277
+ let wrongModuleName = import_node_path2.default.basename(workspace);
277
278
  let deduped = fileName.replace(
278
- `${potentialModuleName}/${potentialModuleName}/`,
279
- `${potentialModuleName}/app/`
279
+ `${wrongModuleName}/${moduleName2}/`,
280
+ `${wrongModuleName}/app/`
280
281
  );
281
282
  if (deduped !== fileName) {
282
283
  return deduped;
283
284
  }
284
- if (!fileName.includes("/app/") && !fileName.includes("/node_modules/.embroider/")) {
285
+ if (!fileName.includes(import_node_path2.default.join(workspace, "app")) && !fileName.includes("/node_modules/.embroider/")) {
285
286
  let maybeModule = fileName.replace(workspace, "");
286
287
  let [maybeScope, ...rest] = maybeModule.split("/").filter(Boolean);
287
288
  let parts = rest;
@@ -465,4 +466,4 @@ function createPlugin(config) {
465
466
  0 && (module.exports = {
466
467
  createPlugin
467
468
  });
468
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL3RlbXBsYXRlLXBsdWdpbi5qcyIsICIuLi8uLi9zcmMvbGliL2Nzcy91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyIsICIuLi8uLi9zcmMvbGliL2lzSW5zaWRlR2xvYmFsLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC90ZW1wbGF0ZS10cmFuc2Zvcm0tcGF0aHMuanMiLCAiLi4vLi4vc3JjL2xpYi9wYXRoL3V0aWxzLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMiLCAiLi4vLi4vc3JjL2xpYi9yZXdyaXRlSGJzLmpzIiwgIi4uLy4uL3NyYy9saWIvcmVuYW1lQ2xhc3MuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGdsaW1tZXIvc3ludGF4JykuQVNUUGx1Z2lufSBBU1RQbHVnaW5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BnbGltbWVyL3N5bnRheCcpLkFTVFBsdWdpbkVudmlyb25tZW50fSBBU1RQbHVnaW5FbnZpcm9ubWVudFxuICpcbiAqL1xuXG5pbXBvcnQgeyBnZXRDU1NJbmZvIH0gZnJvbSAnLi4vbGliL2Nzcy91dGlscy5qcyc7XG5pbXBvcnQgeyBmaXhGaWxlbmFtZSB9IGZyb20gJy4uL2xpYi9wYXRoL3RlbXBsYXRlLXRyYW5zZm9ybS1wYXRocy5qcyc7XG5pbXBvcnQge1xuICBhcHBQYXRoLFxuICBjc3NQYXRoRm9yLFxuICBoYXNoRnJvbU1vZHVsZVBhdGgsXG4gIGlzUmVsZXZhbnRGaWxlLFxufSBmcm9tICcuLi9saWIvcGF0aC91dGlscy5qcyc7XG5pbXBvcnQgeyB0ZW1wbGF0ZVBsdWdpbiB9IGZyb20gJy4uL2xpYi9yZXdyaXRlSGJzLmpzJztcblxuY29uc3Qgbm9vcFBsdWdpbiA9IHtcbiAgbmFtZTogJ2VtYmVyLXNjb3BlZC1jc3M6bm9vcCcsXG4gIHZpc2l0b3I6IHt9LFxufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7QVNUUGx1Z2lufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGx1Z2luKGNvbmZpZykge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBU1RQbHVnaW5FbnZpcm9ubWVudH0gZW52XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gc2NvcGVkQ3NzKGVudikge1xuICAgIGxldCBpc1JlbGV2YW50ID0gaXNSZWxldmFudEZpbGUoZW52LmZpbGVuYW1lLCB7XG4gICAgICBhZGRpdGlvbmFsUm9vdHM6IGNvbmZpZy5hZGRpdGlvbmFsUm9vdHMsXG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSk7XG5cbiAgICBpZiAoIWlzUmVsZXZhbnQpIHtcbiAgICAgIHJldHVybiBub29wUGx1Z2luO1xuICAgIH1cblxuICAgIGxldCBhYnNvbHV0ZVBhdGggPSBmaXhGaWxlbmFtZShlbnYuZmlsZW5hbWUpO1xuICAgIGxldCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuXG4gICAgbGV0IGNzc1BhdGggPSBjc3NQYXRoRm9yKGFic29sdXRlUGF0aCk7XG4gICAgbGV0IGluZm8gPSBnZXRDU1NJbmZvKGNzc1BhdGgpO1xuICAgIGxldCBwb3N0Zml4ID0gaGFzaEZyb21Nb2R1bGVQYXRoKG1vZHVsZVBhdGgpO1xuXG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICByZXR1cm4gbm9vcFBsdWdpbjtcbiAgICB9XG5cbiAgICBsZXQgdmlzaXRvcnMgPSB0ZW1wbGF0ZVBsdWdpbih7XG4gICAgICBjbGFzc2VzOiBpbmZvLmNsYXNzZXMsXG4gICAgICB0YWdzOiBpbmZvLnRhZ3MsXG4gICAgICBwb3N0Zml4LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdlbWJlci1zY29wZWQtY3NzOnRlbXBsYXRlLXBsdWdpbicsXG4gICAgICB2aXNpdG9yOiB7XG4gICAgICAgIC8vIFN0YWNrIE1hbmFnZXJcbiAgICAgICAgLi4udmlzaXRvcnMsXG4gICAgICAgIC8vIFZpc2l0b3JzIGJyb2tlbiBvdXQgbGlrZSB0aGlzIHNvIHdlIGNhbiBjb25kaXRpb25hbGx5XG4gICAgICAgIC8vIGRlYnVnIGJhc2VkIG9uIGZpbGUgcGF0aC5cbiAgICAgICAgQXR0ck5vZGUoLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiB2aXNpdG9ycy5BdHRyTm9kZSguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgRWxlbWVudE5vZGUoLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiB2aXNpdG9ycy5FbGVtZW50Tm9kZSguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgTXVzdGFjaGVTdGF0ZW1lbnQoLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiB2aXNpdG9ycy5NdXN0YWNoZVN0YXRlbWVudCguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgU3ViRXhwcmVzc2lvbiguLi5hcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIHZpc2l0b3JzLlN1YkV4cHJlc3Npb24oLi4uYXJncyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuXG5pbXBvcnQgZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzIGZyb20gJy4uL2dldENsYXNzZXNUYWdzRnJvbUNzcyc7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNzc1BhdGggcGF0aCB0byBhIENTUyBmaWxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDU1NJbmZvKGNzc1BhdGgpIHtcbiAgaWYgKCFleGlzdHNTeW5jKGNzc1BhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgY3NzID0gcmVhZEZpbGVTeW5jKGNzc1BhdGgsICd1dGY4Jyk7XG4gIGxldCByZXN1bHQgPSBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gZ2V0Q2xhc3Nlc0FuZFRhZ3Moc2VsLCBjbGFzc2VzLCB0YWdzKSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChzbHMpID0+IHtcbiAgICBzbHMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgY2xhc3Nlcy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci50eXBlID09PSAndGFnJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHRhZ3MuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBwYXJzZXIodHJhbnNmb3JtKS5wcm9jZXNzU3luYyhzZWwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHRhZ3MgPSBuZXcgU2V0KCk7XG5cbiAgY29uc3QgYXN0ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuXG4gIGFzdC53YWxrKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3J1bGUnKSB7XG4gICAgICBnZXRDbGFzc2VzQW5kVGFncyhub2RlLnNlbGVjdG9yLCBjbGFzc2VzLCB0YWdzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7IGNsYXNzZXMsIHRhZ3MgfTtcbn1cblxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzSW5zaWRlR2xvYmFsKG5vZGUsIGZ1bmMpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAncHNldWRvJyAmJiBwYXJlbnQudmFsdWUgPT09ICc6Z2xvYmFsJykgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzSW5zaWRlR2xvYmFsKHBhcmVudCwgZnVuYyk7XG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgZmluZFdvcmtzcGFjZVBhdGggfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiB0ZW1wbGF0ZSBwbHVnaW5zIGRvIG5vdCBoYW5kIHVzIHRoZSBjb3JyZWN0IGZpbGUgcGF0aC5cbiAqIGFkZGl0aW9uYWxseSwgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIHJlbHkgb24gdGhpcyBkYXRhIGluIHRoZSBmdXR1cmUsXG4gKiBzbyB0aGlzIGZ1bmN0aW9ucyBhY3RzIGFzIGEgbWVhbnMgb2Ygbm9ybWFsaXppbmcgX3doYXRldmVyXyB3ZSdyZSBnaXZlblxuICogaW4gdGhlIGZ1dHVyZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXhGaWxlbmFtZShmaWxlbmFtZSkge1xuICBsZXQgZmlsZU5hbWUgPSBmaWxlbmFtZTtcbiAgbGV0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKGZpbGVOYW1lKTtcblxuICAvKipcbiAgICogRm9yIGEgc2ltcGxlIGNhc2UsIHRoZXJlIGFyZSBzb21ldGltZXMgZHVwbGljYXRlIG1vZHVsZSBwYXRocyBpbiB0aGUgZmlsZU5hbWVcbiAgICogbGV0J3MgY29sbGFwc2UgdGhhdCBhbmRcbiAgICovXG4gIGxldCBwb3RlbnRpYWxNb2R1bGVOYW1lID0gcGF0aC5iYXNlbmFtZSh3b3Jrc3BhY2UpO1xuICBsZXQgZGVkdXBlZCA9IGZpbGVOYW1lLnJlcGxhY2UoXG4gICAgYCR7cG90ZW50aWFsTW9kdWxlTmFtZX0vJHtwb3RlbnRpYWxNb2R1bGVOYW1lfS9gLFxuICAgIGAke3BvdGVudGlhbE1vZHVsZU5hbWV9L2FwcC9gLFxuICApO1xuXG4gIGlmIChkZWR1cGVkICE9PSBmaWxlTmFtZSkge1xuICAgIHJldHVybiBkZWR1cGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIGVtYmVyLXNvdXJjZSA1Ljg6XG4gICAqIC0gdGhlIGZpbGVuYW1lIGxvb2tzIGxpa2UgYW4gYWJzb2x1dGUgcGF0aCwgYnV0IHN3YXBwZWQgb3V0IHRoZSAnYXBwJyBwYXJ0IG9mIHRoZSBwYXRoXG4gICAqICAgd2l0aCB0aGUgbW9kdWxlIG5hbWUsIHNvIHRoZSBmaWxlIHBhdGhzIG5ldmVyIGV4aXN0IG9uIGRpc2tcbiAgICovXG4gIGlmIChcbiAgICAhZmlsZU5hbWUuaW5jbHVkZXMoJy9hcHAvJykgJiZcbiAgICAhZmlsZU5hbWUuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvLmVtYnJvaWRlci8nKVxuICApIHtcbiAgICBsZXQgbWF5YmVNb2R1bGUgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICAgIGxldCBbbWF5YmVTY29wZSwgLi4ucmVzdF0gPSBtYXliZU1vZHVsZS5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcbiAgICBsZXQgcGFydHMgPSByZXN0O1xuXG4gICAgaWYgKG1heWJlU2NvcGUuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICBsZXQgWywgLi4ucmVzdGVyXSA9IHJlc3Q7XG5cbiAgICAgIHBhcnRzID0gcmVzdGVyO1xuICAgIH1cblxuICAgIGxldCByZWxhdGl2ZSA9IHBhdGguam9pbiguLi5wYXJ0cyk7XG5cbiAgICAvKipcbiAgICAgKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IGlmIHRoaXMgZmlsZSBpcyBhbiBhcHAuXG4gICAgICogaXQgY291bGQgYmUgYW4gYWRkb24gKHYxIG9yIHYyKVxuICAgICAqXG4gICAgICogU28gaGVyZSB3ZSBsb2cgdG8gc2VlIGlmIHdlIGhhdmUgdW5oYW5kbGVkIHNpdHVhdGlvbnMuXG4gICAgICovXG4gICAgbGV0IGNhbmRpZGF0ZVBhdGggPSBwYXRoLmpvaW4od29ya3NwYWNlLCAnYXBwJywgcmVsYXRpdmUpO1xuXG4gICAgcmV0dXJuIGNhbmRpZGF0ZVBhdGg7XG4gIH1cblxuICAvKipcbiAgICogdW5kZXIgZW1icm9pZGVyQDMsIHRoZSBmaWxlTmFtZSB3aWxsIGJlIHRoZSBwYXRoIHRvIHRoZSByZXdyaXR0ZW4gZmlsZS5cbiAgICogd2UgZG9uJ3Qgd2FudCB0aGlzLlxuICAgKiB3ZSB3YW50IHRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gICAqIFRocm91Z2ggdGhlIHBvd2VycyBvZiBcdTI3MjggY29udmVudGlvbiBcdTI3MjgsIHdlIGNhbiBtYXAgYmFjayB0byBzb3VyY2UuXG4gICAqL1xuICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvLmVtYnJvaWRlci9yZXdyaXR0ZW4tYXBwLycpKSB7XG4gICAgbGV0IGNhbmRpZGF0ZVBhdGggPSBmaWxlTmFtZS5yZXBsYWNlKFxuICAgICAgJy9ub2RlX21vZHVsZXMvLmVtYnJvaWRlci9yZXdyaXR0ZW4tYXBwLycsXG4gICAgICAnL2FwcC8nLFxuICAgICk7XG5cbiAgICByZXR1cm4gY2FuZGlkYXRlUGF0aDtcbiAgfVxuXG4gIC8vIFRPRE86IHdoeSBhcmUgd2UgcGFzc2VkIGZpbGVzIHRvIG90aGVyIHByb2plY3RzP1xuICBpZiAoIWZpbGVOYW1lLmluY2x1ZGVzKHdvcmtzcGFjZSkpIHtcbiAgICByZXR1cm4gZmlsZU5hbWU7XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byB3aGF0IHRoZSBwbHVnaW4gc3lzdGVtIGdpdmVzIHVzLlxuICAvLyBUaGlzIG1heSBiZSB3cm9uZywgYW5kIGlmIHdyb25nLCByZXZlYWxzXG4gIC8vIHVuaGFuZGxlZCBzY2VuYXJpb3Mgd2l0aCB0aGUgZmlsZSBuYW1lcyBpbiB0aGUgcGx1Z2luIGluZnJhXG4gIHJldHVybiBmaWxlTmFtZTtcbn1cbiIsICJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCBmc1N5bmMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuaW1wb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG5leHBvcnQgeyBoYXNoRnJvbUFic29sdXRlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLWFic29sdXRlLXBhdGguanMnO1xuZXhwb3J0IHsgaGFzaEZyb21Nb2R1bGVQYXRoIH0gZnJvbSAnLi9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMnO1xuXG5jb25zdCBFTUJST0lERVJfRElSID0gJ25vZGVfbW9kdWxlcy8uZW1icm9pZGVyJztcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSCA9IGAke0VNQlJPSURFUl9ESVJ9L3Jld3JpdHRlbi1hcHBgO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9BU1NFVFMgPSBgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEh9L2Fzc2V0c2A7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fUEFDS0FHRVMgPSBgJHtFTUJST0lERVJfRElSfS9yZXdyaXR0ZW4tcGFja2FnZXNgO1xuY29uc3QgSVJSRUxFVkFOVF9QQVRIUyA9IFsnbm9kZV9tb2R1bGVzLy5wbnBtJ107XG5jb25zdCBVTlNVUFBPUlRFRF9ESVJFQ1RPUklFUyA9IG5ldyBTZXQoWyd0ZXN0cyddKTtcblxuY29uc3QgQ1dEID0gcHJvY2Vzcy5jd2QoKTtcblxuLyoqXG4gKiBSZWdhcmRsZXNzIG9mIHdoYXQgdGhlIGZpbGVQYXRoIGZvcm1hdCBpcyxcbiAqIHRoaXMgd2lsbCB0cnkgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHBvc3RmaXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaEZyb20oZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBoYXNoRnJvbUFic29sdXRlUGF0aChmaWxlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gaGFzaEZyb21Nb2R1bGVQYXRoKGZpbGVQYXRoKTtcbn1cblxuLyoqXG4gKiBCYXNlZCBvbiBlbWJlcidzIGNvbXBvbmVudCBsb2NhdGlvbiBjb252ZW50aW9ucyxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm92aWRlIGEgcGF0aCBmb3Igd2hlcmUgd2VcbiAqIGV4cGVjdCB0aGUgQ1NTIHRvIGxpdmUuXG4gKlxuICogRm9yIGNvLWxvY2F0ZWQgc3RydWN0dXJlOlxuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50Lmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50LmNzc1xuICpcbiAqIEZvciBuZXN0ZWQgY28tbG9jYXRlZCBzdHJ1Y3R1cmVcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC9mb28uaGJzXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmNzc1xuICpcbiAqIEZvciBQb2RzIHJvdXRlcyBzdHJ1Y3R1cmVcbiAqICAgLSByb3V0ZXMvbXktcm91dGUvdGVtcGxhdGUue2hicyxqc31cbiAqICAgLSByb3V0ZXMvbXktcm91dGUvc3R5bGVzLmNzc1xuICpcbiAqIERlbGliZXJhdGVseSBub3Qgc3VwcG9ydGVkOlxuICogICAtIGNvbXBvbmVudHMgdy8gcG9kcyAtLSB0aGlzIGlzIGRlcHJlY2F0ZWQgaW4gNS4xMFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZSAtIHRoZSBoYnMsIGpzLCBnanMsIGd0cyBvciB3aGF0ZXZlciBjby1sb2NhdGVkIHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGV4cGVjdGVkIGNzcyBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjc3NQYXRoRm9yKGZpbGVOYW1lKSB7XG4gIGxldCB3aXRob3V0RXh0ID0gd2l0aG91dEV4dGVuc2lvbihmaWxlTmFtZSk7XG4gIGxldCBjc3NQYXRoID0gd2l0aG91dEV4dCArICcuY3NzJztcblxuICBpZiAoaXNQb2QoZmlsZU5hbWUpKSB7XG4gICAgY3NzUGF0aCA9IGZpbGVOYW1lXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5qcyQvLCAnc3R5bGVzLmNzcycpXG4gICAgICAucmVwbGFjZSgvdGVtcGxhdGVcXC5oYnMvLCAnc3R5bGVzLmNzcycpO1xuICB9XG5cbiAgcmV0dXJuIGNzc1BhdGg7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2RUZW1wbGF0ZShmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVQYXRoLmVuZHNXaXRoKCd0ZW1wbGF0ZS5qcycpIHx8IGZpbGVQYXRoLmVuZHNXaXRoKCd0ZW1wbGF0ZS5oYnMnKTtcbn1cblxuLyoqXG4gKiBOb3RlIHRoYXQgY29tcG9uZW50cyBpbiB0aGUgXCJwb2RzXCIgY29udmVudGlvbiB3aWxsXG4gKiBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBlbmRzIHdpdGhcbiAqIC0gdGVtcGxhdGUuanNcbiAqIC0gdGVtcGxhdGUuaGJzXG4gKiAtIHN0eWxlcy5jc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNQb2RUZW1wbGF0ZShmaWxlUGF0aCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEByZXR1cm5zIHRoZSBzYW1lIHBhdGgsIGJ1dCB3aXRob3V0IHRoZSBleHRlbnNpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhvdXRFeHRlbnNpb24oZmlsZVBhdGgpIHtcbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UoZmlsZVBhdGgpO1xuXG4gIHJldHVybiBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xufVxuXG4vKipcbiAqIEV4YW1wbGVzIGZvciBmaWxlTmFtZVxuICogLSBhYnNvbHV0ZSBvbi1kaXNrIHBhdGhcbiAqIC0gaW4gd2VicGFja1xuICogICAtIFVSTC1hYnNvbHV0ZSBwYXRoLCBzdGFydGluZyB3aXRoIC9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEBwYXJhbSB7eyBhZGRpdGlvbmFsUm9vdHM/OiBzdHJpbmdbXTsgY3dkOiBzdHJpbmcgfX0gb3B0aW9uc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsZXZhbnRGaWxlKGZpbGVOYW1lLCB7IGFkZGl0aW9uYWxSb290cywgY3dkIH0pIHtcbiAgaWYgKGZpbGVOYW1lLnN0YXJ0c1dpdGgoJy9AZW1icm9pZGVyJykpIHJldHVybiBmYWxzZTtcbiAgaWYgKElSUkVMRVZBTlRfUEFUSFMuc29tZSgoaSkgPT4gZmlsZU5hbWUuaW5jbHVkZXMoaSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgLy8gaWYgYSBmaWxlIGlzIG5vdCB0aGUgZW1icm9pZGVyIGNhY2hlIGRpcmVjdG9yeVxuICAgIC8vIGFuZCBpcyBpbiBub2RlX21vZHVsZXMsIHNraXAgaXQuXG4gICAgaWYgKCFmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfRElSKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHJld3JpdHRlbiBwYWNrYWdlcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGF0IHRoZWlyIG93blxuICAgIC8vIHB1Ymxpc2ggdGltZVxuICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fUEFDS0FHRVMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgYXJlIGFscmVhZHkgdGhlIGJ1bmRsZWQgZmlsZXMuXG4gICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTKSkge1xuICAgICAgLy8gbm90IHN1cHBvcnRlZCwgbmV2ZXIgd2lsbCBiZVxuICAgICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKGAke0VNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTfS90ZXN0cy5qc2ApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWRlYWxseSwgd2UgbmV2ZXIgZ2V0IGhlcmUgLS0gaW5kaWNhdGVzIHdlJ3JlIG5vdCBmaWx0ZXJpbmcgZWZmZWN0aXZlbHkgaW4gYmFiZWxcbiAgICAgIC8vIE5PVEU6IGlmIHdlIGdldCBoZXJlLCB3ZSdyZSB0cnlpbmcgdG8gb3BlcmF0ZSBvbiBhIGZpbGUgdG9vIGxhdGUuXG4gICAgICAvLyAgICAgICB3ZSBuZWVkIFNjb3BlZENTUyB0byBvcGVyYXRlIGFzIGNsb3NlIHRvIG9yaWdpbmFsIHNvdXJjZSBhcyBwb3NzaWJsZSAtLSBub3Qgb3V0cHV0IGZpbGVzLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxldCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChmaWxlTmFtZSk7XG5cbiAgYXNzZXJ0KGN3ZCwgYGN3ZCB3YXMgbm90IHBhc3NlZCB0byBpc1JlbGV2YW50RmlsZWApO1xuXG4gIGxldCBvdXJXb3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChjd2QpO1xuXG4gIGlmICh3b3Jrc3BhY2UgIT09IG91cldvcmtzcGFjZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBsb2NhbCA9IGZpbGVOYW1lLnJlcGxhY2Uod29ya3NwYWNlLCAnJyk7XG4gIGxldCBbLCAuLi5wYXJ0c10gPSBsb2NhbC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcblxuICBpZiAoVU5TVVBQT1JURURfRElSRUNUT1JJRVMuaGFzKHBhcnRzWzBdKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3N0bHkgcG9kcyBzdXBwb3J0LlxuICAgKiBmb2xrcyBuZWVkIHRvIG9wdCBpbiB0byBwb2RzIChyb3V0ZXMpLCBiZWNhdXNlIGV2ZXJ5IHBvZHMgYXBwIGNhbiBiZSBjb25maWd1cmVkIGRpZmZlcmVudGx5XG4gICAqL1xuICBsZXQgcm9vdHMgPSBbJy9jb21wb25lbnRzLycsICcvdGVtcGxhdGVzLycsIC4uLihhZGRpdGlvbmFsUm9vdHMgfHwgW10pXTtcblxuICBpZiAoIXJvb3RzLnNvbWUoKHJvb3QpID0+IGZpbGVOYW1lLmluY2x1ZGVzKHJvb3QpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVNjb3BlZFBhdGgpIHtcbiAgLyoqXG4gICAqICpCeSBjb252ZW50aW9uKiwgYHNyY2AgaXMgb21pdHRlZCBmcm9tIGNvbXBvbmVudCBwYXRocy5cbiAgICogV2UgY2FuIHJlZmxlY3QgdGhlIHNhbWUgYmVoYXZpb3IgYnkgcmVwbGFjaW5nIHNyYy9cbiAgICogd2l0aCBhbiBlbXB0eSBzdHJpbmcuXG4gICAqXG4gICAqIENTUyBpc24ndCBlbWl0dGVkIGFzIGEgY28tbG9jYXRlZCBtb2R1bGUsIGJ1dFxuICAgKiB0byBrZWVwIGNvbnZlbnRpb25zIGNvbnNpc3RlbnQgYWNyb3NzIGxhbmd1YWdlcyxcbiAgICogd2UgY2FuIHByZXRlbmQgaXQgaXMuXG4gICAqXG4gICAqIEFueSBjdXN0b21pemF0aW9uIGJleW9uZCByZW1vdmluZyBgc3JjYCBhbmQgYGFwcGAgaXMgcG90ZW50aWFsbHkgY29uZnVzaW5nLlxuICAgKiBJZiB3ZSBuZWVkIGZ1cnRoZXIgY3VzdG9taXphdGlvbnMsIHdlJ2xsIHdhbnQgdG8gbWF0Y2ggb24gYGV4cG9ydHNgIGluIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHBhY2thZ2UuanNvblxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VTY29wZWRQYXRoLnJlcGxhY2UoL15cXC9zcmNcXC8vLCAnLycpO1xuXG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgaWYgKGlzUG9kKHBhY2thZ2VSZWxhdGl2ZSkpIHtcbiAgICAvKipcbiAgICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgICAqL1xuICAgIHJldHVybiBwYXJzZWQuZGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBpcyBwYXNzZWQsIHJlbW92ZSBpdC5cbiAgICogV2hlbiB1c2luZyBwYWNrYWdlcnMsIGZvbGtzIGFyZSB1c2VkIHRvIG5vdCBoYXZpbmcgdG8gc3BlY2lmeSBleHRlbnNpb25zIGZvciBmaWxlcy5cbiAgICogU2luY2Ugd2UgZG9uJ3QgZXZlbiBlbWl0IGNzcyBmaWxlcyBjby1sb2NhdGVkIHRvIGVhY2ggbW9kdWxlLFxuICAgKiB0aGlzIGhlbHBzIHVzIG5vdCBjb252ZXkgYSBsaWUgdGhhdCBhIGZpbGUgbWF5IGV4aXN0IGluIGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlIGA8bW9kdWxlLW5hbWU+L2NvbXBvbmVudHMvYnV0dG9uYC5cbiAgICogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgZXh0ZW5zaW9uIGlzLCBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBjc3MgZmlsZVxuICAgKiBmb3IgdGhlIGJ1dHRvbiBtb2R1bGUgYW55d2F5LlxuICAgKi9cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xuXG4gIHJldHVybiBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoO1xufVxuXG4vKipcbiAqIHJldHVybnMgdGhlIGFwcC1tb2R1bGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGVcbiAqXG4gKiBUaGlzIGFzc3VtZXMgbm9ybWFsIGVtYmVyIGFwcCBjb252ZW50aW9uc1xuICpcbiAqIHdoaWNoIGlzIGA8cGFja2FnZS5qc29uI25hbWU+L3BhdGgtdG8tZmlsZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgd29ya3NwYWNlUGF0aCA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBsZXQgbmFtZSA9IG1vZHVsZU5hbWUoc291cmNlUGF0aCk7XG5cbiAgLyoqXG4gICAqICBVbmRlciBlbWJyb2lkZXIgYnVpbGRzLCB0aGUgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiB0aGUgYXBwXG4gICAqIGhhcyBhbGwgdGhlIGZpbGVzIHVuZGVyIGEgZm9sZGVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHBhY2thZ2UgbmFtZSxcbiAgICogcmF0aGVyIHRoYW4gXCJhcHBcIi5cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBzb3VyY2VQYXRoLnJlcGxhY2Uod29ya3NwYWNlUGF0aCwgJycpO1xuXG4gIC8qKlxuICAgKiBCdXQgd2UgYWxzbyBkb24ndCB3YW50ICdhcHAnIC0tIHdoaWNoIGlzIHByZXNlbnQgaW4gdGhlIHYxIGFkZG9uIHBpcGVsaW5lXG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShgL2FwcC9gLCBgL2ApO1xuXG4gIC8qKlxuICAgKiBhbHNvIGFsc28sIHdlIGtub3cgdGhhdCB0aGUgcmUtd3JpdHRlbiBhcHAgc3RydWN0dXJlIGluIGVtYnJvaWRlckB2M1xuICAgKiBpcyBleHRyYW5lb3VzLCBhbmQgd2UgY2FuIGNvbGxhcHNlIGl0XG4gICAqL1xuICBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlUmVsYXRpdmUucmVwbGFjZShcbiAgICBgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEh9L2AsXG4gICAgJy8nLFxuICApO1xuXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVJlbGF0aXZlKTtcblxuICByZXR1cm4gYCR7bmFtZX0ke2xvY2FsUGFja2FnZXJTdHlsZVBhdGh9YDtcbn1cblxuLyoqXG4gKiBUbyBhdm9pZCBoaXR0aW5nIHRoZSBmaWxlc3lzZXRtLCB3ZSdsbCBzdG9yZSBhbGwgZm91bmRcbiAqIHByb2plY3QgcGF0aHMgYmVyZSwgc28gd2UgY2FuLCBpbiBtZW1vcnksXG4gKiBnZXQgdGhlIGZvbGRlciB3aGVyZSBhIHBhY2thZ2UuanNvbiBleGlzdHMsIHJhdGhlciB0aGFuXG4gKiBoaXQgdGhlIGZpbGUgc3lzdGVtIGV2ZXJ5IHRpbWUuXG4gKi9cbmNvbnN0IFNFRU4gPSBuZXcgU2V0KCk7XG5cbmZ1bmN0aW9uIGdldFNlZW4oc291cmNlUGF0aCkge1xuICBpZiAoU0VFTi5oYXMoc291cmNlUGF0aCkpIHJldHVybiBzb3VyY2VQYXRoO1xuXG4gIGxldCBwYXJ0cyA9IHNvdXJjZVBhdGguc3BsaXQoJy8nKTtcblxuICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+IDE7IGktLSkge1xuICAgIGxldCB0b0NoZWNrID0gcGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpO1xuXG4gICAgbGV0IHNlZW4gPSBTRUVOLmhhcyh0b0NoZWNrKTtcblxuICAgIGlmIChzZWVuKSB7XG4gICAgICByZXR1cm4gdG9DaGVjaztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgsIG9wdGlvbnMpIHtcbiAgbGV0IGN3ZCA9IG9wdGlvbnM/LmN3ZCA/PyBDV0Q7XG5cbiAgaWYgKHNvdXJjZVBhdGguaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIKSkge1xuICAgIHNvdXJjZVBhdGggPSBzb3VyY2VQYXRoLnNwbGl0KEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSClbMF07XG4gIH1cblxuICBpZiAoc291cmNlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgc291cmNlUGF0aCA9IHNvdXJjZVBhdGgucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgfVxuXG4gIGxldCBzZWVuID0gZ2V0U2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgbGV0IGNhbmRpZGF0ZVBhdGggPSBwYXRoLmpvaW4oc291cmNlUGF0aCwgJ3BhY2thZ2UuanNvbicpO1xuXG4gIGNvbnN0IGlzV29ya3NwYWNlID0gZnNTeW5jLmV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCk7XG5cbiAgaWYgKGlzV29ya3NwYWNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZVBhdGg7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBmaW5kUGFja2FnZUpzb25VcChzb3VyY2VQYXRoLCB7IGN3ZCB9KTtcblxuICBpZiAoIXBhY2thZ2VKc29uUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSBwcm9qZWN0IGZvciAke3NvdXJjZVBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCk7XG5cbiAgU0VFTi5hZGQod29ya3NwYWNlUGF0aCk7XG5cbiAgcmV0dXJuIHdvcmtzcGFjZVBhdGg7XG59XG5cbmZ1bmN0aW9uIGZpbmRQYWNrYWdlSnNvblVwKHN0YXJ0UGF0aCwgb3B0aW9ucykge1xuICBsZXQgY3dkID0gb3B0aW9ucz8uY3dkID8/IENXRDtcbiAgbGV0IHBhcnRzID0gc3RhcnRQYXRoLnNwbGl0KCcvJyk7XG5cbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICBsZXQgdG9DaGVjayA9IHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTtcblxuICAgIGxldCBwYWNrYWdlSnNvbiA9IHBhdGguam9pbih0b0NoZWNrLCAncGFja2FnZS5qc29uJyk7XG4gICAgbGV0IGV4aXN0cyA9IGZzU3luYy5leGlzdHNTeW5jKHBhY2thZ2VKc29uKTtcblxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHJldHVybiBwYWNrYWdlSnNvbjtcbiAgICB9XG5cbiAgICAvLyBEb24ndCB0cmF2ZXJzZSBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCBvZiB0aGUgZmlsZSBzeXN0ZW0uXG4gICAgaWYgKHRvQ2hlY2sgPT09IGN3ZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IE1BTklGRVNUX0NBQ0hFID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFdpbGwgcmV0dXJuIHRoZSBwYWNrYWdlLmpzb24jbmFtZSwgb3IgY29uZmlnL2Vudmlyb25tZW50I21vdWRsZVByZWZpeCAoaWYgdjEgYXBwKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2R1bGVOYW1lKHNvdXJjZVBhdGgpIHtcbiAgY29uc3Qgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG4gIGNvbnN0IG1hbmlmZXN0ID0gZ2V0TWFuaWZlc3Qod29ya3NwYWNlKTtcblxuICBpZiAobWFuaWZlc3RbJ2VtYmVyLWFkZG9uJ10pIHtcbiAgICAvKipcbiAgICAgKiBMaWJyYXJpZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGN1c3RvbWl6ZSB0aGVpciBtb2R1bGUgbmFtZVxuICAgICAqIHRvIGJlIGRpZmZlcmVudCBmcm9tIHRoZWlyIHBhY2thZ2UgbmFtZS5cbiAgICAgKlxuICAgICAqIChJdCdzIGFsc28gYm9ua2VycyB0aGF0IHRoaXMgaXMgYWxsb3dlZCBmb3IgdjEgYXBwcylcbiAgICAgKi9cbiAgICByZXR1cm4gbWFuaWZlc3QubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgdjEgYXBwcywgd2UgbmVlZCB0byByZWZlcmVuY2UgdGhlIGNvbmZpZy9lbnZpcm9ubWVudC5qcyBmaWxlXG4gICAqIHRvIHNlZSBpZiB0aGUgbW9kdWxlUHJlZml4IHNldHRpbmcgZGlmZmVycyBmcm9tIG1hbmlmZXN0Lm5hbWU7XG4gICAqL1xuICBsZXQgZW52aXJvbm1lbnRKUyA9IHBhdGguam9pbih3b3Jrc3BhY2UsICdjb25maWcvZW52aXJvbm1lbnQuanMnKTtcblxuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50LmpzIGlzIGEgY29tbW9uSlMgZmlsZSwgc28gd2UgY2FuIHN5bmNocm9ub3VzbHkgcmVxdWlyZSBpdFxuICAgKlxuICAgKiBUT0RPOiBpZiB3ZSBoYXZlIGlzc3VlcyB3aXRoIGxvYWRpbmcgdGhpcyBmaWxlIGxhdGVyIHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IHJ1biBqc2NvZGVzaGlmdCBvbiBpdFxuICAgKiAgICAgICBidXQgdGhhdCBjb3VsZCBhbGxvdyB1cyB0byBiZSBicml0dGxlIGluIGRpZmZlcmVudCB3YXlzLCBsaWtlIGlmIGZvbGtzIHN0cmF5IGZyb20gdGhlIHdheSB0aGVcbiAgICogICAgICAgZmlsZSBpcyBsYWlkIG91dCBmcm9tIHRoZSBibHVlcHJpbnQgZGVmYXVsdHMuXG4gICAqL1xuICBpZiAoZnNTeW5jLmV4aXN0c1N5bmMoZW52aXJvbm1lbnRKUykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYgLS0gdGhpcyBleGlzdHNcbiAgICBjb25zdCBlbnZGbiA9IHJlcXVpcmUoZW52aXJvbm1lbnRKUyk7XG4gICAgY29uc3QgZW52ID0gZW52Rm4oJ2VtYmVyLXNjb3BlZC1jc3MnKTtcblxuICAgIHJldHVybiBlbnYubW9kdWxlUHJlZml4IHx8IG1hbmlmZXN0Lm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRmFsbGJhY2sgdG8gdGhlIHRydWVcdTIxMjIgbW9kdWxlXHUyMTIyIG5hbWUuXG4gICAqL1xuICByZXR1cm4gbWFuaWZlc3QubmFtZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gd29ya3NwYWNlXG4gKi9cbmZ1bmN0aW9uIGdldE1hbmlmZXN0KHdvcmtzcGFjZSkge1xuICBsZXQgZXhpc3RpbmcgPSBNQU5JRkVTVF9DQUNIRS5nZXQod29ya3NwYWNlKTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH1cblxuICBsZXQgYnVmZmVyID0gZnNTeW5jLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4od29ya3NwYWNlLCAncGFja2FnZS5qc29uJykpO1xuICBsZXQgY29udGVudCA9IGJ1ZmZlci50b1N0cmluZygpO1xuICBsZXQganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cbiAgTUFOSUZFU1RfQ0FDSEUuc2V0KHdvcmtzcGFjZSwganNvbik7XG5cbiAgcmV0dXJuIGpzb247XG59XG4iLCAiaW1wb3J0IG1kNSBmcm9tICdibHVlaW1wLW1kNSc7XG5cbi8qKlxuICogVGhlIGludGVudCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdlbmVyYXRlIHRoZSBzdWZmaXgvcG9zdGZpeCBmb3IgdGhlXG4gKiBjc3MgY2xhc3NlcywgYmFzZWQgb24gdGhlIG1vZHVsZS1zY29wZWQgcGF0aCBuYW1lLlxuICpcbiAqIGZvciBleGFtcGxlLFxuICogICAgaGFzaCgnbXktYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqICBpbnN0ZWFkIG9mXG4gKiAgICBoYXNoKCdhcHAvY29tcG9uZW50cy9mb28nKVxuICpcbiAqICAodW5sZXNzIHlvdXIgYXBwIG5hbWUgaXMgJ2FwcCcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZVBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKG1vZHVsZVBhdGgpIHtcbiAgcmV0dXJuICdlJyArIG1kNShtb2R1bGVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGhhc2hGcm9tTW9kdWxlUGF0aCA9IGhhc2g7XG4iLCAiaW1wb3J0IHJlY2FzdCBmcm9tICdlbWJlci10ZW1wbGF0ZS1yZWNhc3QnO1xuXG5pbXBvcnQgeyByZW5hbWVDbGFzcyB9IGZyb20gJy4vcmVuYW1lQ2xhc3MuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVQbHVnaW4oeyBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4IH0pIHtcbiAgbGV0IHN0YWNrID0gW107XG4gIC8vIHNjb3BlZC1jbGFzcyBpcyBhIGdsb2JhbCB3ZSBhbGxvdyBpbiBoYnNcbiAgLy8gc2NvcGVkQ2xhc3MgaXMgaW1wb3J0YWJsZSwgYW5kIHdlJ2xsIGVycm9yIGlmIHNvbWVvbmUgdHJpZXMgdG8gcmVuYW1lIGl0XG4gIGxldCBzY29wZWRDbGFzc0NhbmRpZGF0ZXMgPSBbJ3Njb3BlZC1jbGFzcycsICdzY29wZWRDbGFzcyddO1xuXG4gIGZ1bmN0aW9uIGlzU2NvcGVkQ2xhc3Moc3RyKSB7XG4gICAgaWYgKCFzdHIpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiBzY29wZWRDbGFzc0NhbmRpZGF0ZXMuc29tZSgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUgPT09IHN0cik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKG5vZGUucGF0aD8ub3JpZ2luYWwpICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKG5vZGUucGF0aD8ucGF0aD8ub3JpZ2luYWwpICYmXG4gICAgICAgIG5vZGUucGF0aD8ucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhdGgucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3NzQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMudGV4dChyZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCkpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICdBdHRyTm9kZScpIHtcbiAgICAgICAgICBwYXJlbnQucXVvdGVUeXBlID0gJ1wiJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgU3ViRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzU2NvcGVkQ2xhc3Mobm9kZS5wYXRoPy5vcmlnaW5hbCkgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy5saXRlcmFsKFxuICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICByZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJld3JpdGVIYnMoaGJzLCBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4KSB7XG4gIGxldCBhc3QgPSByZWNhc3QucGFyc2UoaGJzKTtcblxuICByZWNhc3QudHJhdmVyc2UoYXN0LCB0ZW1wbGF0ZVBsdWdpbih7IGNsYXNzZXMsIHRhZ3MsIHBvc3RmaXggfSkpO1xuXG4gIGxldCByZXN1bHQgPSByZWNhc3QucHJpbnQoYXN0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3N0Zml4XG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbY2xhc3Nlc0luQ3NzXVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUNsYXNzKGNsYXNzTmFtZSwgcG9zdGZpeCwgY2xhc3Nlc0luQ3NzKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSBjbGFzc05hbWUuc3BsaXQoL1xccysvKTtcbiAgY29uc3QgcmVuYW1lZENsYXNzZXMgPSBjbGFzc2VzXG4gICAgLmZpbHRlcigoYykgPT4gYylcbiAgICAubWFwKChjKSA9PiBjLnRyaW0oKSlcbiAgICAubWFwKChjKSA9PiB7XG4gICAgICBpZiAoIWNsYXNzZXNJbkNzcyB8fCBjbGFzc2VzSW5Dc3MuaGFzKGMpKSB7XG4gICAgICAgIGlmIChjLmVuZHNXaXRoKHBvc3RmaXgpKSByZXR1cm4gYztcblxuICAgICAgICByZXR1cm4gYyArICdfJyArIHBvc3RmaXg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0pXG4gICAgLmpvaW4oJyAnKTtcblxuICBjb25zdCByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcyA9IGNsYXNzTmFtZS5yZXBsYWNlKFxuICAgIGNsYXNzTmFtZS50cmltU3RhcnQoKS50cmltRW5kKCksXG4gICAgcmVuYW1lZENsYXNzZXMsXG4gICk7XG5cbiAgcmV0dXJuIHJlbmFtZWRXaXRoUHJlc2VydmVkU3BhY2VzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsZ0JBQXlDOzs7QUNBekMscUJBQW9CO0FBQ3BCLHFDQUFtQjs7O0FDREosU0FBUixlQUFnQyxNQUFNLE1BQU07QUFDakQsUUFBTSxTQUFTLEtBQUs7QUFFcEIsTUFBSSxDQUFDLE9BQVEsUUFBTztBQUNwQixNQUFJLE9BQU8sU0FBUyxZQUFZLE9BQU8sVUFBVSxVQUFXLFFBQU87QUFFbkUsU0FBTyxlQUFlLFFBQVEsSUFBSTtBQUNwQzs7O0FERkEsU0FBUyxrQkFBa0IsS0FBSyxTQUFTLE1BQU07QUFDN0MsUUFBTSxZQUFZLENBQUMsUUFBUTtBQUN6QixRQUFJLEtBQUssQ0FBQyxhQUFhO0FBQ3JCLFVBQUksU0FBUyxTQUFTLFdBQVcsQ0FBQyxlQUFlLFFBQVEsR0FBRztBQUMxRCxnQkFBUSxJQUFJLFNBQVMsS0FBSztBQUFBLE1BQzVCLFdBQVcsU0FBUyxTQUFTLFNBQVMsQ0FBQyxlQUFlLFFBQVEsR0FBRztBQUMvRCxhQUFLLElBQUksU0FBUyxLQUFLO0FBQUEsTUFDekI7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBRUEscUNBQUFBLFNBQU8sU0FBUyxFQUFFLFlBQVksR0FBRztBQUNuQztBQUVlLFNBQVIsc0JBQXVDLEtBQUs7QUFDakQsUUFBTSxVQUFVLG9CQUFJ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LFFBQUksV0FBVyxlQUFlO0FBQUEsTUFDNUIsU0FBUyxLQUFLO0FBQUEsTUFDZCxNQUFNLEtBQUs7QUFBQSxNQUNYO0FBQUEsSUFDRixDQUFDO0FBRUQsV0FBTztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBO0FBQUEsUUFFUCxHQUFHO0FBQUE7QUFBQTtBQUFBLFFBR0gsWUFBWSxNQUFNO0FBQ2hCLGlCQUFPLFNBQVMsU0FBUyxHQUFHLElBQUk7QUFBQSxRQUNsQztBQUFBLFFBQ0EsZUFBZSxNQUFNO0FBQ25CLGlCQUFPLFNBQVMsWUFBWSxHQUFHLElBQUk7QUFBQSxRQUNyQztBQUFBLFFBQ0EscUJBQXFCLE1BQU07QUFDekIsaUJBQU8sU0FBUyxrQkFBa0IsR0FBRyxJQUFJO0FBQUEsUUFDM0M7QUFBQSxRQUNBLGlCQUFpQixNQUFNO0FBQ3JCLGlCQUFPLFNBQVMsY0FBYyxHQUFHLElBQUk7QUFBQSxRQUN2QztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJwYXJzZXIiLCAicG9zdGNzcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgIm1kNSIsICJwYXRoIiwgImFzc2VydCIsICJmc1N5bmMiLCAicGF0aCIsICJyZWNhc3QiLCAibm9kZSJdCn0K
469
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2J1aWxkL3RlbXBsYXRlLXBsdWdpbi5qcyIsICIuLi8uLi9zcmMvbGliL2Nzcy91dGlscy5qcyIsICIuLi8uLi9zcmMvbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyIsICIuLi8uLi9zcmMvbGliL2lzSW5zaWRlR2xvYmFsLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC90ZW1wbGF0ZS10cmFuc2Zvcm0tcGF0aHMuanMiLCAiLi4vLi4vc3JjL2xpYi9wYXRoL3V0aWxzLmpzIiwgIi4uLy4uL3NyYy9saWIvcGF0aC9oYXNoLWZyb20tbW9kdWxlLXBhdGguanMiLCAiLi4vLi4vc3JjL2xpYi9yZXdyaXRlSGJzLmpzIiwgIi4uLy4uL3NyYy9saWIvcmVuYW1lQ2xhc3MuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGdsaW1tZXIvc3ludGF4JykuQVNUUGx1Z2lufSBBU1RQbHVnaW5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BnbGltbWVyL3N5bnRheCcpLkFTVFBsdWdpbkVudmlyb25tZW50fSBBU1RQbHVnaW5FbnZpcm9ubWVudFxuICpcbiAqL1xuXG5pbXBvcnQgeyBnZXRDU1NJbmZvIH0gZnJvbSAnLi4vbGliL2Nzcy91dGlscy5qcyc7XG5pbXBvcnQgeyBmaXhGaWxlbmFtZSB9IGZyb20gJy4uL2xpYi9wYXRoL3RlbXBsYXRlLXRyYW5zZm9ybS1wYXRocy5qcyc7XG5pbXBvcnQge1xuICBhcHBQYXRoLFxuICBjc3NQYXRoRm9yLFxuICBoYXNoRnJvbU1vZHVsZVBhdGgsXG4gIGlzUmVsZXZhbnRGaWxlLFxufSBmcm9tICcuLi9saWIvcGF0aC91dGlscy5qcyc7XG5pbXBvcnQgeyB0ZW1wbGF0ZVBsdWdpbiB9IGZyb20gJy4uL2xpYi9yZXdyaXRlSGJzLmpzJztcblxuY29uc3Qgbm9vcFBsdWdpbiA9IHtcbiAgbmFtZTogJ2VtYmVyLXNjb3BlZC1jc3M6bm9vcCcsXG4gIHZpc2l0b3I6IHt9LFxufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7QVNUUGx1Z2lufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGx1Z2luKGNvbmZpZykge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBU1RQbHVnaW5FbnZpcm9ubWVudH0gZW52XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gc2NvcGVkQ3NzKGVudikge1xuICAgIGxldCBpc1JlbGV2YW50ID0gaXNSZWxldmFudEZpbGUoZW52LmZpbGVuYW1lLCB7XG4gICAgICBhZGRpdGlvbmFsUm9vdHM6IGNvbmZpZy5hZGRpdGlvbmFsUm9vdHMsXG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSk7XG5cbiAgICBpZiAoIWlzUmVsZXZhbnQpIHtcbiAgICAgIHJldHVybiBub29wUGx1Z2luO1xuICAgIH1cblxuICAgIGxldCBhYnNvbHV0ZVBhdGggPSBmaXhGaWxlbmFtZShlbnYuZmlsZW5hbWUpO1xuICAgIGxldCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuXG4gICAgbGV0IGNzc1BhdGggPSBjc3NQYXRoRm9yKGFic29sdXRlUGF0aCk7XG4gICAgbGV0IGluZm8gPSBnZXRDU1NJbmZvKGNzc1BhdGgpO1xuICAgIGxldCBwb3N0Zml4ID0gaGFzaEZyb21Nb2R1bGVQYXRoKG1vZHVsZVBhdGgpO1xuXG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICByZXR1cm4gbm9vcFBsdWdpbjtcbiAgICB9XG5cbiAgICBsZXQgdmlzaXRvcnMgPSB0ZW1wbGF0ZVBsdWdpbih7XG4gICAgICBjbGFzc2VzOiBpbmZvLmNsYXNzZXMsXG4gICAgICB0YWdzOiBpbmZvLnRhZ3MsXG4gICAgICBwb3N0Zml4LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdlbWJlci1zY29wZWQtY3NzOnRlbXBsYXRlLXBsdWdpbicsXG4gICAgICB2aXNpdG9yOiB7XG4gICAgICAgIC8vIFN0YWNrIE1hbmFnZXJcbiAgICAgICAgLi4udmlzaXRvcnMsXG4gICAgICAgIC8vIFZpc2l0b3JzIGJyb2tlbiBvdXQgbGlrZSB0aGlzIHNvIHdlIGNhbiBjb25kaXRpb25hbGx5XG4gICAgICAgIC8vIGRlYnVnIGJhc2VkIG9uIGZpbGUgcGF0aC5cbiAgICAgICAgQXR0ck5vZGUoLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiB2aXNpdG9ycy5BdHRyTm9kZSguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgRWxlbWVudE5vZGUoLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiB2aXNpdG9ycy5FbGVtZW50Tm9kZSguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgTXVzdGFjaGVTdGF0ZW1lbnQoLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiB2aXNpdG9ycy5NdXN0YWNoZVN0YXRlbWVudCguLi5hcmdzKTtcbiAgICAgICAgfSxcbiAgICAgICAgU3ViRXhwcmVzc2lvbiguLi5hcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIHZpc2l0b3JzLlN1YkV4cHJlc3Npb24oLi4uYXJncyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuXG5pbXBvcnQgZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzIGZyb20gJy4uL2dldENsYXNzZXNUYWdzRnJvbUNzcyc7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNzc1BhdGggcGF0aCB0byBhIENTUyBmaWxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDU1NJbmZvKGNzc1BhdGgpIHtcbiAgaWYgKCFleGlzdHNTeW5jKGNzc1BhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgY3NzID0gcmVhZEZpbGVTeW5jKGNzc1BhdGgsICd1dGY4Jyk7XG4gIGxldCByZXN1bHQgPSBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gZ2V0Q2xhc3Nlc0FuZFRhZ3Moc2VsLCBjbGFzc2VzLCB0YWdzKSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChzbHMpID0+IHtcbiAgICBzbHMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgY2xhc3Nlcy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci50eXBlID09PSAndGFnJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHRhZ3MuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBwYXJzZXIodHJhbnNmb3JtKS5wcm9jZXNzU3luYyhzZWwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHRhZ3MgPSBuZXcgU2V0KCk7XG5cbiAgY29uc3QgYXN0ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuXG4gIGFzdC53YWxrKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3J1bGUnKSB7XG4gICAgICBnZXRDbGFzc2VzQW5kVGFncyhub2RlLnNlbGVjdG9yLCBjbGFzc2VzLCB0YWdzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7IGNsYXNzZXMsIHRhZ3MgfTtcbn1cblxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzSW5zaWRlR2xvYmFsKG5vZGUsIGZ1bmMpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAncHNldWRvJyAmJiBwYXJlbnQudmFsdWUgPT09ICc6Z2xvYmFsJykgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzSW5zaWRlR2xvYmFsKHBhcmVudCwgZnVuYyk7XG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgZmluZFdvcmtzcGFjZVBhdGgsIG1vZHVsZU5hbWUgYXMgcHJvamVjdE5hbWUgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqXG4gKiB0ZW1wbGF0ZSBwbHVnaW5zIGRvIG5vdCBoYW5kIHVzIHRoZSBjb3JyZWN0IGZpbGUgcGF0aC5cbiAqIGFkZGl0aW9uYWxseSwgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIHJlbHkgb24gdGhpcyBkYXRhIGluIHRoZSBmdXR1cmUsXG4gKiBzbyB0aGlzIGZ1bmN0aW9ucyBhY3RzIGFzIGEgbWVhbnMgb2Ygbm9ybWFsaXppbmcgX3doYXRldmVyXyB3ZSdyZSBnaXZlblxuICogaW4gdGhlIGZ1dHVyZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXhGaWxlbmFtZShmaWxlbmFtZSkge1xuICBsZXQgZmlsZU5hbWUgPSBmaWxlbmFtZTtcbiAgbGV0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKGZpbGVOYW1lKTtcbiAgbGV0IG1vZHVsZU5hbWUgPSBwcm9qZWN0TmFtZSh3b3Jrc3BhY2UpO1xuXG4gIC8qKlxuICAgKiBGb3IgYSBzaW1wbGUgY2FzZSwgdGhlcmUgYXJlIHNvbWV0aW1lcyBkdXBsaWNhdGUgbW9kdWxlIHBhdGhzIGluIHRoZSBmaWxlTmFtZVxuICAgKiBsZXQncyBjb2xsYXBzZSB0aGF0IGFuZFxuICAgKi9cbiAgbGV0IHdyb25nTW9kdWxlTmFtZSA9IHBhdGguYmFzZW5hbWUod29ya3NwYWNlKTtcbiAgbGV0IGRlZHVwZWQgPSBmaWxlTmFtZS5yZXBsYWNlKFxuICAgIGAke3dyb25nTW9kdWxlTmFtZX0vJHttb2R1bGVOYW1lfS9gLFxuICAgIGAke3dyb25nTW9kdWxlTmFtZX0vYXBwL2AsXG4gICk7XG5cbiAgaWYgKGRlZHVwZWQgIT09IGZpbGVOYW1lKSB7XG4gICAgcmV0dXJuIGRlZHVwZWQ7XG4gIH1cblxuICAvKipcbiAgICogZW1iZXItc291cmNlIDUuODpcbiAgICogLSB0aGUgZmlsZW5hbWUgbG9va3MgbGlrZSBhbiBhYnNvbHV0ZSBwYXRoLCBidXQgc3dhcHBlZCBvdXQgdGhlICdhcHAnIHBhcnQgb2YgdGhlIHBhdGhcbiAgICogICB3aXRoIHRoZSBtb2R1bGUgbmFtZSwgc28gdGhlIGZpbGUgcGF0aHMgbmV2ZXIgZXhpc3Qgb24gZGlza1xuICAgKi9cbiAgaWYgKFxuICAgICFmaWxlTmFtZS5pbmNsdWRlcyhwYXRoLmpvaW4od29ya3NwYWNlLCAnYXBwJykpICYmXG4gICAgIWZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvJylcbiAgKSB7XG4gICAgbGV0IG1heWJlTW9kdWxlID0gZmlsZU5hbWUucmVwbGFjZSh3b3Jrc3BhY2UsICcnKTtcbiAgICBsZXQgW21heWJlU2NvcGUsIC4uLnJlc3RdID0gbWF5YmVNb2R1bGUuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgbGV0IHBhcnRzID0gcmVzdDtcblxuICAgIGlmIChtYXliZVNjb3BlLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgbGV0IFssIC4uLnJlc3Rlcl0gPSByZXN0O1xuXG4gICAgICBwYXJ0cyA9IHJlc3RlcjtcbiAgICB9XG5cbiAgICBsZXQgcmVsYXRpdmUgPSBwYXRoLmpvaW4oLi4ucGFydHMpO1xuXG4gICAgLyoqXG4gICAgICogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyBpZiB0aGlzIGZpbGUgaXMgYW4gYXBwLlxuICAgICAqIGl0IGNvdWxkIGJlIGFuIGFkZG9uICh2MSBvciB2MilcbiAgICAgKlxuICAgICAqIFNvIGhlcmUgd2UgbG9nIHRvIHNlZSBpZiB3ZSBoYXZlIHVuaGFuZGxlZCBzaXR1YXRpb25zLlxuICAgICAqL1xuICAgIGxldCBjYW5kaWRhdGVQYXRoID0gcGF0aC5qb2luKHdvcmtzcGFjZSwgJ2FwcCcsIHJlbGF0aXZlKTtcblxuICAgIHJldHVybiBjYW5kaWRhdGVQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIHVuZGVyIGVtYnJvaWRlckAzLCB0aGUgZmlsZU5hbWUgd2lsbCBiZSB0aGUgcGF0aCB0byB0aGUgcmV3cml0dGVuIGZpbGUuXG4gICAqIHdlIGRvbid0IHdhbnQgdGhpcy5cbiAgICogd2Ugd2FudCB0aGUgcGF0aCB0byB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKiBUaHJvdWdoIHRoZSBwb3dlcnMgb2YgXHUyNzI4IGNvbnZlbnRpb24gXHUyNzI4LCB3ZSBjYW4gbWFwIGJhY2sgdG8gc291cmNlLlxuICAgKi9cbiAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLWFwcC8nKSkge1xuICAgIGxldCBjYW5kaWRhdGVQYXRoID0gZmlsZU5hbWUucmVwbGFjZShcbiAgICAgICcvbm9kZV9tb2R1bGVzLy5lbWJyb2lkZXIvcmV3cml0dGVuLWFwcC8nLFxuICAgICAgJy9hcHAvJyxcbiAgICApO1xuXG4gICAgcmV0dXJuIGNhbmRpZGF0ZVBhdGg7XG4gIH1cblxuICAvLyBUT0RPOiB3aHkgYXJlIHdlIHBhc3NlZCBmaWxlcyB0byBvdGhlciBwcm9qZWN0cz9cbiAgaWYgKCFmaWxlTmFtZS5pbmNsdWRlcyh3b3Jrc3BhY2UpKSB7XG4gICAgcmV0dXJuIGZpbGVOYW1lO1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gd2hhdCB0aGUgcGx1Z2luIHN5c3RlbSBnaXZlcyB1cy5cbiAgLy8gVGhpcyBtYXkgYmUgd3JvbmcsIGFuZCBpZiB3cm9uZywgcmV2ZWFsc1xuICAvLyB1bmhhbmRsZWQgc2NlbmFyaW9zIHdpdGggdGhlIGZpbGUgbmFtZXMgaW4gdGhlIHBsdWdpbiBpbmZyYVxuICByZXR1cm4gZmlsZU5hbWU7XG59XG4iLCAiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5pbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgaGFzaEZyb21BYnNvbHV0ZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzJztcbmltcG9ydCB7IGhhc2hGcm9tTW9kdWxlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuZXhwb3J0IHsgaGFzaEZyb21BYnNvbHV0ZVBhdGggfSBmcm9tICcuL2hhc2gtZnJvbS1hYnNvbHV0ZS1wYXRoLmpzJztcbmV4cG9ydCB7IGhhc2hGcm9tTW9kdWxlUGF0aCB9IGZyb20gJy4vaGFzaC1mcm9tLW1vZHVsZS1wYXRoLmpzJztcblxuY29uc3QgRU1CUk9JREVSX0RJUiA9ICdub2RlX21vZHVsZXMvLmVtYnJvaWRlcic7XG5jb25zdCBFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEggPSBgJHtFTUJST0lERVJfRElSfS9yZXdyaXR0ZW4tYXBwYDtcbmNvbnN0IEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfQVNTRVRTID0gYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIfS9hc3NldHNgO1xuY29uc3QgRU1CUk9JREVSXzNfUkVXUklUVEVOX1BBQ0tBR0VTID0gYCR7RU1CUk9JREVSX0RJUn0vcmV3cml0dGVuLXBhY2thZ2VzYDtcbmNvbnN0IElSUkVMRVZBTlRfUEFUSFMgPSBbJ25vZGVfbW9kdWxlcy8ucG5wbSddO1xuY29uc3QgVU5TVVBQT1JURURfRElSRUNUT1JJRVMgPSBuZXcgU2V0KFsndGVzdHMnXSk7XG5cbmNvbnN0IENXRCA9IHByb2Nlc3MuY3dkKCk7XG5cbi8qKlxuICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlUGF0aCBmb3JtYXQgaXMsXG4gKiB0aGlzIHdpbGwgdHJ5IHRvIHJldHVybiB0aGUgY29ycmVjdCBwb3N0Zml4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGcm9tKGZpbGVQYXRoKSB7XG4gIGlmIChmaWxlUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gaGFzaEZyb21BYnNvbHV0ZVBhdGgoZmlsZVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGhhc2hGcm9tTW9kdWxlUGF0aChmaWxlUGF0aCk7XG59XG5cbi8qKlxuICogQmFzZWQgb24gZW1iZXIncyBjb21wb25lbnQgbG9jYXRpb24gY29udmVudGlvbnMsXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSBhIHBhdGggZm9yIHdoZXJlIHdlXG4gKiBleHBlY3QgdGhlIENTUyB0byBsaXZlLlxuICpcbiAqIEZvciBjby1sb2NhdGVkIHN0cnVjdHVyZTpcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5oYnNcbiAqICAgLSBjb21wb25lbnRzL215LWNvbXBvbmVudC5jc3NcbiAqXG4gKiBGb3IgbmVzdGVkIGNvLWxvY2F0ZWQgc3RydWN0dXJlXG4gKiAgIC0gY29tcG9uZW50cy9teS1jb21wb25lbnQvZm9vLmhic1xuICogICAtIGNvbXBvbmVudHMvbXktY29tcG9uZW50L2Zvby5jc3NcbiAqXG4gKiBGb3IgUG9kcyByb3V0ZXMgc3RydWN0dXJlXG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3RlbXBsYXRlLntoYnMsanN9XG4gKiAgIC0gcm91dGVzL215LXJvdXRlL3N0eWxlcy5jc3NcbiAqXG4gKiBEZWxpYmVyYXRlbHkgbm90IHN1cHBvcnRlZDpcbiAqICAgLSBjb21wb25lbnRzIHcvIHBvZHMgLS0gdGhpcyBpcyBkZXByZWNhdGVkIGluIDUuMTBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSB0aGUgaGJzLCBqcywgZ2pzLCBndHMgb3Igd2hhdGV2ZXIgY28tbG9jYXRlZCBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gLSBleHBlY3RlZCBjc3MgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzUGF0aEZvcihmaWxlTmFtZSkge1xuICBsZXQgd2l0aG91dEV4dCA9IHdpdGhvdXRFeHRlbnNpb24oZmlsZU5hbWUpO1xuICBsZXQgY3NzUGF0aCA9IHdpdGhvdXRFeHQgKyAnLmNzcyc7XG5cbiAgaWYgKGlzUG9kKGZpbGVOYW1lKSkge1xuICAgIGNzc1BhdGggPSBmaWxlTmFtZVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuanMkLywgJ3N0eWxlcy5jc3MnKVxuICAgICAgLnJlcGxhY2UoL3RlbXBsYXRlXFwuaGJzLywgJ3N0eWxlcy5jc3MnKTtcbiAgfVxuXG4gIHJldHVybiBjc3NQYXRoO1xufVxuXG4vKipcbiAqIE5vdGUgdGhhdCBjb21wb25lbnRzIGluIHRoZSBcInBvZHNcIiBjb252ZW50aW9uIHdpbGxcbiAqIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpIHtcbiAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCcvY29tcG9uZW50cy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSB8fCBmaWxlUGF0aC5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJyk7XG59XG5cbi8qKlxuICogTm90ZSB0aGF0IGNvbXBvbmVudHMgaW4gdGhlIFwicG9kc1wiIGNvbnZlbnRpb24gd2lsbFxuICogbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICpcbiAqIENoZWNrcyBpZiBhIGZpbGUgZW5kcyB3aXRoXG4gKiAtIHRlbXBsYXRlLmpzXG4gKiAtIHRlbXBsYXRlLmhic1xuICogLSBzdHlsZXMuY3NzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvZChmaWxlUGF0aCkge1xuICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoJy9jb21wb25lbnRzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUG9kVGVtcGxhdGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVBhdGguZW5kc1dpdGgoJ3N0eWxlcy5jc3MnKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcmV0dXJucyB0aGUgc2FtZSBwYXRoLCBidXQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0RXh0ZW5zaW9uKGZpbGVQYXRoKSB7XG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICByZXR1cm4gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcbn1cblxuLyoqXG4gKiBFeGFtcGxlcyBmb3IgZmlsZU5hbWVcbiAqIC0gYWJzb2x1dGUgb24tZGlzayBwYXRoXG4gKiAtIGluIHdlYnBhY2tcbiAqICAgLSBVUkwtYWJzb2x1dGUgcGF0aCwgc3RhcnRpbmcgd2l0aCAvXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcGFyYW0ge3sgYWRkaXRpb25hbFJvb3RzPzogc3RyaW5nW107IGN3ZDogc3RyaW5nIH19IG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGV2YW50RmlsZShmaWxlTmFtZSwgeyBhZGRpdGlvbmFsUm9vdHMsIGN3ZCB9KSB7XG4gIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCcvQGVtYnJvaWRlcicpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChJUlJFTEVWQU5UX1BBVEhTLnNvbWUoKGkpID0+IGZpbGVOYW1lLmluY2x1ZGVzKGkpKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChmaWxlTmFtZS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgIC8vIGlmIGEgZmlsZSBpcyBub3QgdGhlIGVtYnJvaWRlciBjYWNoZSBkaXJlY3RvcnlcbiAgICAvLyBhbmQgaXMgaW4gbm9kZV9tb2R1bGVzLCBza2lwIGl0LlxuICAgIGlmICghZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSX0RJUikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyByZXdyaXR0ZW4gcGFja2FnZXMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBhdCB0aGVpciBvd25cbiAgICAvLyBwdWJsaXNoIHRpbWVcbiAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoRU1CUk9JREVSXzNfUkVXUklUVEVOX1BBQ0tBR0VTKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoZXNlIGFyZSBhbHJlYWR5IHRoZSBidW5kbGVkIGZpbGVzLlxuICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUUykpIHtcbiAgICAgIC8vIG5vdCBzdXBwb3J0ZWQsIG5ldmVyIHdpbGwgYmVcbiAgICAgIGlmIChmaWxlTmFtZS5lbmRzV2l0aChgJHtFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX0FTU0VUU30vdGVzdHMuanNgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIElkZWFsbHksIHdlIG5ldmVyIGdldCBoZXJlIC0tIGluZGljYXRlcyB3ZSdyZSBub3QgZmlsdGVyaW5nIGVmZmVjdGl2ZWx5IGluIGJhYmVsXG4gICAgICAvLyBOT1RFOiBpZiB3ZSBnZXQgaGVyZSwgd2UncmUgdHJ5aW5nIHRvIG9wZXJhdGUgb24gYSBmaWxlIHRvbyBsYXRlLlxuICAgICAgLy8gICAgICAgd2UgbmVlZCBTY29wZWRDU1MgdG8gb3BlcmF0ZSBhcyBjbG9zZSB0byBvcmlnaW5hbCBzb3VyY2UgYXMgcG9zc2libGUgLS0gbm90IG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBsZXQgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoZmlsZU5hbWUpO1xuXG4gIGFzc2VydChjd2QsIGBjd2Qgd2FzIG5vdCBwYXNzZWQgdG8gaXNSZWxldmFudEZpbGVgKTtcblxuICBsZXQgb3VyV29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoY3dkKTtcblxuICBpZiAod29ya3NwYWNlICE9PSBvdXJXb3Jrc3BhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbG9jYWwgPSBmaWxlTmFtZS5yZXBsYWNlKHdvcmtzcGFjZSwgJycpO1xuICBsZXQgWywgLi4ucGFydHNdID0gbG9jYWwuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKFVOU1VQUE9SVEVEX0RJUkVDVE9SSUVTLmhhcyhwYXJ0c1swXSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTW9zdGx5IHBvZHMgc3VwcG9ydC5cbiAgICogZm9sa3MgbmVlZCB0byBvcHQgaW4gdG8gcG9kcyAocm91dGVzKSwgYmVjYXVzZSBldmVyeSBwb2RzIGFwcCBjYW4gYmUgY29uZmlndXJlZCBkaWZmZXJlbnRseVxuICAgKi9cbiAgbGV0IHJvb3RzID0gWycvY29tcG9uZW50cy8nLCAnL3RlbXBsYXRlcy8nLCAuLi4oYWRkaXRpb25hbFJvb3RzIHx8IFtdKV07XG5cbiAgaWYgKCFyb290cy5zb21lKChyb290KSA9PiBmaWxlTmFtZS5pbmNsdWRlcyhyb290KSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VTY29wZWRQYXRoKSB7XG4gIC8qKlxuICAgKiAqQnkgY29udmVudGlvbiosIGBzcmNgIGlzIG9taXR0ZWQgZnJvbSBjb21wb25lbnQgcGF0aHMuXG4gICAqIFdlIGNhbiByZWZsZWN0IHRoZSBzYW1lIGJlaGF2aW9yIGJ5IHJlcGxhY2luZyBzcmMvXG4gICAqIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxuICAgKlxuICAgKiBDU1MgaXNuJ3QgZW1pdHRlZCBhcyBhIGNvLWxvY2F0ZWQgbW9kdWxlLCBidXRcbiAgICogdG8ga2VlcCBjb252ZW50aW9ucyBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMsXG4gICAqIHdlIGNhbiBwcmV0ZW5kIGl0IGlzLlxuICAgKlxuICAgKiBBbnkgY3VzdG9taXphdGlvbiBiZXlvbmQgcmVtb3ZpbmcgYHNyY2AgYW5kIGBhcHBgIGlzIHBvdGVudGlhbGx5IGNvbmZ1c2luZy5cbiAgICogSWYgd2UgbmVlZCBmdXJ0aGVyIGN1c3RvbWl6YXRpb25zLCB3ZSdsbCB3YW50IHRvIG1hdGNoIG9uIGBleHBvcnRzYCBpbiB0aGVcbiAgICogY29ycmVzcG9uZGluZyBwYWNrYWdlLmpzb25cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBwYWNrYWdlU2NvcGVkUGF0aC5yZXBsYWNlKC9eXFwvc3JjXFwvLywgJy8nKTtcblxuICBsZXQgcGFyc2VkID0gcGF0aC5wYXJzZShwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIGlmIChpc1BvZChwYWNrYWdlUmVsYXRpdmUpKSB7XG4gICAgLyoqXG4gICAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICAgKi9cbiAgICByZXR1cm4gcGFyc2VkLmRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBhbiBleHRlbnNpb24gaXMgcGFzc2VkLCByZW1vdmUgaXQuXG4gICAqIFdoZW4gdXNpbmcgcGFja2FnZXJzLCBmb2xrcyBhcmUgdXNlZCB0byBub3QgaGF2aW5nIHRvIHNwZWNpZnkgZXh0ZW5zaW9ucyBmb3IgZmlsZXMuXG4gICAqIFNpbmNlIHdlIGRvbid0IGV2ZW4gZW1pdCBjc3MgZmlsZXMgY28tbG9jYXRlZCB0byBlYWNoIG1vZHVsZSxcbiAgICogdGhpcyBoZWxwcyB1cyBub3QgY29udmV5IGEgbGllIHRoYXQgYSBmaWxlIG1heSBleGlzdCBpbiBhdCBydW50aW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSBgPG1vZHVsZS1uYW1lPi9jb21wb25lbnRzL2J1dHRvbmAuXG4gICAqIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGV4dGVuc2lvbiBpcywgYmVjYXVzZSB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgY3NzIGZpbGVcbiAgICogZm9yIHRoZSBidXR0b24gbW9kdWxlIGFueXdheS5cbiAgICovXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIHBhcnNlZC5uYW1lKTtcblxuICByZXR1cm4gbG9jYWxQYWNrYWdlclN0eWxlUGF0aDtcbn1cblxuLyoqXG4gKiByZXR1cm5zIHRoZSBhcHAtbW9kdWxlIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlXG4gKlxuICogVGhpcyBhc3N1bWVzIG5vcm1hbCBlbWJlciBhcHAgY29udmVudGlvbnNcbiAqXG4gKiB3aGljaCBpcyBgPHBhY2thZ2UuanNvbiNuYW1lPi9wYXRoLXRvLWZpbGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSBtb2R1bGVOYW1lKHNvdXJjZVBhdGgpO1xuXG4gIC8qKlxuICAgKiAgVW5kZXIgZW1icm9pZGVyIGJ1aWxkcywgdGhlIHNwZWMtY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGFwcFxuICAgKiBoYXMgYWxsIHRoZSBmaWxlcyB1bmRlciBhIGZvbGRlciB3aGljaCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIG5hbWUsXG4gICAqIHJhdGhlciB0aGFuIFwiYXBwXCIuXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gc291cmNlUGF0aC5yZXBsYWNlKHdvcmtzcGFjZVBhdGgsICcnKTtcblxuICAvKipcbiAgICogQnV0IHdlIGFsc28gZG9uJ3Qgd2FudCAnYXBwJyAtLSB3aGljaCBpcyBwcmVzZW50IGluIHRoZSB2MSBhZGRvbiBwaXBlbGluZVxuICAgKi9cbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoYC9hcHAvYCwgYC9gKTtcblxuICAvKipcbiAgICogYWxzbyBhbHNvLCB3ZSBrbm93IHRoYXQgdGhlIHJlLXdyaXR0ZW4gYXBwIHN0cnVjdHVyZSBpbiBlbWJyb2lkZXJAdjNcbiAgICogaXMgZXh0cmFuZW91cywgYW5kIHdlIGNhbiBjb2xsYXBzZSBpdFxuICAgKi9cbiAgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVJlbGF0aXZlLnJlcGxhY2UoXG4gICAgYCR7RU1CUk9JREVSXzNfUkVXUklUVEVOX0FQUF9QQVRIfS9gLFxuICAgICcvJyxcbiAgKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbi8qKlxuICogVG8gYXZvaWQgaGl0dGluZyB0aGUgZmlsZXN5c2V0bSwgd2UnbGwgc3RvcmUgYWxsIGZvdW5kXG4gKiBwcm9qZWN0IHBhdGhzIGJlcmUsIHNvIHdlIGNhbiwgaW4gbWVtb3J5LFxuICogZ2V0IHRoZSBmb2xkZXIgd2hlcmUgYSBwYWNrYWdlLmpzb24gZXhpc3RzLCByYXRoZXIgdGhhblxuICogaGl0IHRoZSBmaWxlIHN5c3RlbSBldmVyeSB0aW1lLlxuICovXG5jb25zdCBTRUVOID0gbmV3IFNldCgpO1xuXG5mdW5jdGlvbiBnZXRTZWVuKHNvdXJjZVBhdGgpIHtcbiAgaWYgKFNFRU4uaGFzKHNvdXJjZVBhdGgpKSByZXR1cm4gc291cmNlUGF0aDtcblxuICBsZXQgcGFydHMgPSBzb3VyY2VQYXRoLnNwbGl0KCcvJyk7XG5cbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPiAxOyBpLS0pIHtcbiAgICBsZXQgdG9DaGVjayA9IHBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTtcblxuICAgIGxldCBzZWVuID0gU0VFTi5oYXModG9DaGVjayk7XG5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gIGxldCBjd2QgPSBvcHRpb25zPy5jd2QgPz8gQ1dEO1xuXG4gIGlmIChzb3VyY2VQYXRoLmluY2x1ZGVzKEVNQlJPSURFUl8zX1JFV1JJVFRFTl9BUFBfUEFUSCkpIHtcbiAgICBzb3VyY2VQYXRoID0gc291cmNlUGF0aC5zcGxpdChFTUJST0lERVJfM19SRVdSSVRURU5fQVBQX1BBVEgpWzBdO1xuICB9XG5cbiAgaWYgKHNvdXJjZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIHNvdXJjZVBhdGggPSBzb3VyY2VQYXRoLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIH1cblxuICBsZXQgc2VlbiA9IGdldFNlZW4oc291cmNlUGF0aCk7XG5cbiAgaWYgKHNlZW4pIHtcbiAgICByZXR1cm4gc2VlbjtcbiAgfVxuXG4gIGxldCBjYW5kaWRhdGVQYXRoID0gcGF0aC5qb2luKHNvdXJjZVBhdGgsICdwYWNrYWdlLmpzb24nKTtcblxuICBjb25zdCBpc1dvcmtzcGFjZSA9IGZzU3luYy5leGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpO1xuXG4gIGlmIChpc1dvcmtzcGFjZSkge1xuICAgIHJldHVybiBzb3VyY2VQYXRoO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFBhY2thZ2VKc29uVXAoc291cmNlUGF0aCwgeyBjd2QgfSk7XG5cbiAgaWYgKCFwYWNrYWdlSnNvblBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlcm1pbmUgcHJvamVjdCBmb3IgJHtzb3VyY2VQYXRofWApO1xuICB9XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIFNFRU4uYWRkKHdvcmtzcGFjZVBhdGgpO1xuXG4gIHJldHVybiB3b3Jrc3BhY2VQYXRoO1xufVxuXG5mdW5jdGlvbiBmaW5kUGFja2FnZUpzb25VcChzdGFydFBhdGgsIG9wdGlvbnMpIHtcbiAgbGV0IGN3ZCA9IG9wdGlvbnM/LmN3ZCA/PyBDV0Q7XG4gIGxldCBwYXJ0cyA9IHN0YXJ0UGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID4gMTsgaS0tKSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7XG5cbiAgICBsZXQgcGFja2FnZUpzb24gPSBwYXRoLmpvaW4odG9DaGVjaywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGxldCBleGlzdHMgPSBmc1N5bmMuZXhpc3RzU3luYyhwYWNrYWdlSnNvbik7XG5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gcGFja2FnZUpzb247XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgdHJhdmVyc2UgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3Qgb2YgdGhlIGZpbGUgc3lzdGVtLlxuICAgIGlmICh0b0NoZWNrID09PSBjd2QpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBXaWxsIHJldHVybiB0aGUgcGFja2FnZS5qc29uI25hbWUsIG9yIGNvbmZpZy9lbnZpcm9ubWVudCNtb3VkbGVQcmVmaXggKGlmIHYxIGFwcClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGdldE1hbmlmZXN0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKG1hbmlmZXN0WydlbWJlci1hZGRvbiddKSB7XG4gICAgLyoqXG4gICAgICogTGlicmFyaWVzIGFyZSBub3QgYWxsb3dlZCB0byBjdXN0b21pemUgdGhlaXIgbW9kdWxlIG5hbWVcbiAgICAgKiB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGVpciBwYWNrYWdlIG5hbWUuXG4gICAgICpcbiAgICAgKiAoSXQncyBhbHNvIGJvbmtlcnMgdGhhdCB0aGlzIGlzIGFsbG93ZWQgZm9yIHYxIGFwcHMpXG4gICAgICovXG4gICAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRm9yIHYxIGFwcHMsIHdlIG5lZWQgdG8gcmVmZXJlbmNlIHRoZSBjb25maWcvZW52aXJvbm1lbnQuanMgZmlsZVxuICAgKiB0byBzZWUgaWYgdGhlIG1vZHVsZVByZWZpeCBzZXR0aW5nIGRpZmZlcnMgZnJvbSBtYW5pZmVzdC5uYW1lO1xuICAgKi9cbiAgbGV0IGVudmlyb25tZW50SlMgPSBwYXRoLmpvaW4od29ya3NwYWNlLCAnY29uZmlnL2Vudmlyb25tZW50LmpzJyk7XG5cbiAgLyoqXG4gICAqIE5PVEU6IHRoZSBlbnZpcm9ubWVudC5qcyBpcyBhIGNvbW1vbkpTIGZpbGUsIHNvIHdlIGNhbiBzeW5jaHJvbm91c2x5IHJlcXVpcmUgaXRcbiAgICpcbiAgICogVE9ETzogaWYgd2UgaGF2ZSBpc3N1ZXMgd2l0aCBsb2FkaW5nIHRoaXMgZmlsZSBsYXRlciB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBydW4ganNjb2Rlc2hpZnQgb24gaXRcbiAgICogICAgICAgYnV0IHRoYXQgY291bGQgYWxsb3cgdXMgdG8gYmUgYnJpdHRsZSBpbiBkaWZmZXJlbnQgd2F5cywgbGlrZSBpZiBmb2xrcyBzdHJheSBmcm9tIHRoZSB3YXkgdGhlXG4gICAqICAgICAgIGZpbGUgaXMgbGFpZCBvdXQgZnJvbSB0aGUgYmx1ZXByaW50IGRlZmF1bHRzLlxuICAgKi9cbiAgaWYgKGZzU3luYy5leGlzdHNTeW5jKGVudmlyb25tZW50SlMpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmIC0tIHRoaXMgZXhpc3RzXG4gICAgY29uc3QgZW52Rm4gPSByZXF1aXJlKGVudmlyb25tZW50SlMpO1xuICAgIGNvbnN0IGVudiA9IGVudkZuKCdlbWJlci1zY29wZWQtY3NzJyk7XG5cbiAgICByZXR1cm4gZW52Lm1vZHVsZVByZWZpeCB8fCBtYW5pZmVzdC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhbGxiYWNrIHRvIHRoZSB0cnVlXHUyMTIyIG1vZHVsZVx1MjEyMiBuYW1lLlxuICAgKi9cbiAgcmV0dXJuIG1hbmlmZXN0Lm5hbWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmtzcGFjZVxuICovXG5mdW5jdGlvbiBnZXRNYW5pZmVzdCh3b3Jrc3BhY2UpIHtcbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uO1xufVxuIiwgImltcG9ydCBtZDUgZnJvbSAnYmx1ZWltcC1tZDUnO1xuXG4vKipcbiAqIFRoZSBpbnRlbnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBnZW5lcmF0ZSB0aGUgc3VmZml4L3Bvc3RmaXggZm9yIHRoZVxuICogY3NzIGNsYXNzZXMsIGJhc2VkIG9uIHRoZSBtb2R1bGUtc2NvcGVkIHBhdGggbmFtZS5cbiAqXG4gKiBmb3IgZXhhbXBsZSxcbiAqICAgIGhhc2goJ215LWFwcC9jb21wb25lbnRzL2ZvbycpXG4gKiAgaW5zdGVhZCBvZlxuICogICAgaGFzaCgnYXBwL2NvbXBvbmVudHMvZm9vJylcbiAqXG4gKiAgKHVubGVzcyB5b3VyIGFwcCBuYW1lIGlzICdhcHAnKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVQYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaChtb2R1bGVQYXRoKSB7XG4gIHJldHVybiAnZScgKyBtZDUobW9kdWxlUGF0aCkuc3Vic3RyaW5nKDAsIDgpO1xufVxuXG5cbmV4cG9ydCBjb25zdCBoYXNoRnJvbU1vZHVsZVBhdGggPSBoYXNoO1xuIiwgImltcG9ydCByZWNhc3QgZnJvbSAnZW1iZXItdGVtcGxhdGUtcmVjYXN0JztcblxuaW1wb3J0IHsgcmVuYW1lQ2xhc3MgfSBmcm9tICcuL3JlbmFtZUNsYXNzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlUGx1Z2luKHsgY2xhc3NlcywgdGFncywgcG9zdGZpeCB9KSB7XG4gIGxldCBzdGFjayA9IFtdO1xuICAvLyBzY29wZWQtY2xhc3MgaXMgYSBnbG9iYWwgd2UgYWxsb3cgaW4gaGJzXG4gIC8vIHNjb3BlZENsYXNzIGlzIGltcG9ydGFibGUsIGFuZCB3ZSdsbCBlcnJvciBpZiBzb21lb25lIHRyaWVzIHRvIHJlbmFtZSBpdFxuICBsZXQgc2NvcGVkQ2xhc3NDYW5kaWRhdGVzID0gWydzY29wZWQtY2xhc3MnLCAnc2NvcGVkQ2xhc3MnXTtcblxuICBmdW5jdGlvbiBpc1Njb3BlZENsYXNzKHN0cikge1xuICAgIGlmICghc3RyKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gc2NvcGVkQ2xhc3NDYW5kaWRhdGVzLnNvbWUoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlID09PSBzdHIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBBdHRyTm9kZShub2RlKSB7XG4gICAgICBpZiAobm9kZS5uYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICAgIGlmIChub2RlLnZhbHVlLnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgbm9kZS52YWx1ZS5jaGFycykge1xuICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKG5vZGUudmFsdWUuY2hhcnMsIHBvc3RmaXgsIGNsYXNzZXMpO1xuXG4gICAgICAgICAgbm9kZS52YWx1ZS5jaGFycyA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLnZhbHVlLnR5cGUgPT09ICdDb25jYXRTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgZm9yIChsZXQgcGFydCBvZiBub2RlLnZhbHVlLnBhcnRzKSB7XG4gICAgICAgICAgICBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnICYmIHBhcnQuY2hhcnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3MocGFydC5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICAgICAgcGFydC5jaGFycyA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgIHJlY2FzdC50cmF2ZXJzZShwYXJ0LCB7XG4gICAgICAgICAgICAgICAgU3RyaW5nTGl0ZXJhbChub2RlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhcbiAgICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUgPSByZW5hbWVkQ2xhc3M7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIEVsZW1lbnROb2RlKG5vZGUpIHtcbiAgICAgIGlmICh0YWdzLmhhcyhub2RlLnRhZykpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgY2xhc3MgYXR0cmlidXRlIGFscmVhZHkgZXhpc3RzXG4gICAgICAgIGNvbnN0IGNsYXNzQXR0ciA9IG5vZGUuYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLm5hbWUgPT09ICdjbGFzcycpO1xuXG4gICAgICAgIGlmIChjbGFzc0F0dHIpIHtcbiAgICAgICAgICBjbGFzc0F0dHIudmFsdWUuY2hhcnMgKz0gJyAnICsgcG9zdGZpeDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBwdXNoIGNsYXNzIGF0dHJpYnV0ZVxuICAgICAgICAgIG5vZGUuYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgICAgcmVjYXN0LmJ1aWxkZXJzLmF0dHIoJ2NsYXNzJywgcmVjYXN0LmJ1aWxkZXJzLnRleHQocG9zdGZpeCkpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgQWxsOiB7XG4gICAgICBlbnRlcihub2RlKSB7XG4gICAgICAgIHN0YWNrLnB1c2gobm9kZSk7XG4gICAgICB9LFxuICAgICAgZXhpdCgpIHtcbiAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBNdXN0YWNoZVN0YXRlbWVudChub2RlKSB7XG4gICAgICBsZXQgY3NzQ2xhc3M7XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXNTY29wZWRDbGFzcyhub2RlLnBhdGg/Lm9yaWdpbmFsKSAmJlxuICAgICAgICBub2RlLnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNzc0NsYXNzID0gbm9kZS5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXNTY29wZWRDbGFzcyhub2RlLnBhdGg/LnBhdGg/Lm9yaWdpbmFsKSAmJlxuICAgICAgICBub2RlLnBhdGg/LnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGF0aD8ucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNzc0NsYXNzID0gbm9kZS5wYXRoLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNzc0NsYXNzKSB7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gcmVjYXN0LmJ1aWxkZXJzLnRleHQocmVuYW1lQ2xhc3MoY3NzQ2xhc3MsIHBvc3RmaXgpKTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICAgICAgaWYgKHBhcmVudC50eXBlID09PSAnQXR0ck5vZGUnKSB7XG4gICAgICAgICAgcGFyZW50LnF1b3RlVHlwZSA9ICdcIic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dE5vZGU7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFN1YkV4cHJlc3Npb24obm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICBpc1Njb3BlZENsYXNzKG5vZGUucGF0aD8ub3JpZ2luYWwpICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSByZWNhc3QuYnVpbGRlcnMubGl0ZXJhbChcbiAgICAgICAgICAnU3RyaW5nTGl0ZXJhbCcsXG4gICAgICAgICAgcmVuYW1lQ2xhc3MoY3NzQ2xhc3MsIHBvc3RmaXgpLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXdyaXRlSGJzKGhicywgY2xhc3NlcywgdGFncywgcG9zdGZpeCkge1xuICBsZXQgYXN0ID0gcmVjYXN0LnBhcnNlKGhicyk7XG5cbiAgcmVjYXN0LnRyYXZlcnNlKGFzdCwgdGVtcGxhdGVQbHVnaW4oeyBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4IH0pKTtcblxuICBsZXQgcmVzdWx0ID0gcmVjYXN0LnByaW50KGFzdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICIvKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcG9zdGZpeFxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gW2NsYXNzZXNJbkNzc11cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVDbGFzcyhjbGFzc05hbWUsIHBvc3RmaXgsIGNsYXNzZXNJbkNzcykge1xuICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyk7XG4gIGNvbnN0IHJlbmFtZWRDbGFzc2VzID0gY2xhc3Nlc1xuICAgIC5maWx0ZXIoKGMpID0+IGMpXG4gICAgLm1hcCgoYykgPT4gYy50cmltKCkpXG4gICAgLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKCFjbGFzc2VzSW5Dc3MgfHwgY2xhc3Nlc0luQ3NzLmhhcyhjKSkge1xuICAgICAgICBpZiAoYy5lbmRzV2l0aChwb3N0Zml4KSkgcmV0dXJuIGM7XG5cbiAgICAgICAgcmV0dXJuIGMgKyAnXycgKyBwb3N0Zml4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYztcbiAgICB9KVxuICAgIC5qb2luKCcgJyk7XG5cbiAgY29uc3QgcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXMgPSBjbGFzc05hbWUucmVwbGFjZShcbiAgICBjbGFzc05hbWUudHJpbVN0YXJ0KCkudHJpbUVuZCgpLFxuICAgIHJlbmFtZWRDbGFzc2VzLFxuICApO1xuXG4gIHJldHVybiByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLGdCQUF5Qzs7O0FDQXpDLHFCQUFvQjtBQUNwQixxQ0FBbUI7OztBQ0RKLFNBQVIsZUFBZ0MsTUFBTSxNQUFNO0FBQ2pELFFBQU0sU0FBUyxLQUFLO0FBRXBCLE1BQUksQ0FBQyxPQUFRLFFBQU87QUFDcEIsTUFBSSxPQUFPLFNBQVMsWUFBWSxPQUFPLFVBQVUsVUFBVyxRQUFPO0FBRW5FLFNBQU8sZUFBZSxRQUFRLElBQUk7QUFDcEM7OztBREZBLFNBQVMsa0JBQWtCLEtBQUssU0FBUyxNQUFNO0FBQzdDLFFBQU0sWUFBWSxDQUFDLFFBQVE7QUFDekIsUUFBSSxLQUFLLENBQUMsYUFBYTtBQUNyQixVQUFJLFNBQVMsU0FBUyxXQUFXLENBQUMsZUFBZSxRQUFRLEdBQUc7QUFDMUQsZ0JBQVEsSUFBSSxTQUFTLEtBQUs7QUFBQSxNQUM1QixXQUFXLFNBQVMsU0FBUyxTQUFTLENBQUMsZUFBZSxRQUFRLEdBQUc7QUFDL0QsYUFBSyxJQUFJLFNBQVMsS0FBSztBQUFBLE1BQ3pCO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLHFDQUFBQSxT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ckMsUUFBSSxVQUFVLFdBQVcsWUFBWTtBQUNyQyxRQUFJLE9BQU8sV0FBVyxPQUFPO0FBQzdCLFFBQUksVUFBVSxtQkFBbUIsVUFBVTtBQUUzQyxRQUFJLENBQUMsTUFBTTtBQUNULGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxXQUFXLGVBQWU7QUFBQSxNQUM1QixTQUFTLEtBQUs7QUFBQSxNQUNkLE1BQU0sS0FBSztBQUFBLE1BQ1g7QUFBQSxJQUNGLENBQUM7QUFFRCxXQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUE7QUFBQSxRQUVQLEdBQUc7QUFBQTtBQUFBO0FBQUEsUUFHSCxZQUFZLE1BQU07QUFDaEIsaUJBQU8sU0FBUyxTQUFTLEdBQUcsSUFBSTtBQUFBLFFBQ2xDO0FBQUEsUUFDQSxlQUFlLE1BQU07QUFDbkIsaUJBQU8sU0FBUyxZQUFZLEdBQUcsSUFBSTtBQUFBLFFBQ3JDO0FBQUEsUUFDQSxxQkFBcUIsTUFBTTtBQUN6QixpQkFBTyxTQUFTLGtCQUFrQixHQUFHLElBQUk7QUFBQSxRQUMzQztBQUFBLFFBQ0EsaUJBQWlCLE1BQU07QUFDckIsaUJBQU8sU0FBUyxjQUFjLEdBQUcsSUFBSTtBQUFBLFFBQ3ZDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbInBhcnNlciIsICJwb3N0Y3NzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAibWQ1IiwgInBhdGgiLCAiYXNzZXJ0IiwgImZzU3luYyIsICJtb2R1bGVOYW1lIiwgInBhdGgiLCAicmVjYXN0IiwgIm5vZGUiXQp9Cg==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-scoped-css",
3
- "version": "0.21.2",
3
+ "version": "0.21.4",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -87,7 +87,7 @@
87
87
  "@typescript-eslint/parser": "^7.10.0",
88
88
  "concurrently": "^8.2.2",
89
89
  "ember-template-lint": "^6.0.0",
90
- "esbuild": "^0.21.3",
90
+ "esbuild": "^0.23.0",
91
91
  "esbuild-plugin-vitest-cleaner": "^0.5.1",
92
92
  "eslint": "^8.50.0",
93
93
  "prettier": "^3.2.5",
@@ -21,10 +21,9 @@ export default async function (code) {
21
21
 
22
22
  const hbsPath = cssPath.replace('.css', '.hbs');
23
23
  const gjsPath = cssPath.replace('.css', '.js');
24
- const hbsExists = existsSync(hbsPath);
25
- const gjsExists = existsSync(gjsPath);
24
+ const gtsPath = cssPath.replace('.css', '.ts');
26
25
 
27
- if (hbsExists || gjsExists) {
26
+ if (existsSync(gjsPath) || existsSync(gtsPath) || existsSync(hbsPath)) {
28
27
  const postfix = hashFrom(cssPath);
29
28
  const rewrittenCss = rewriteCss(
30
29
  code,
@@ -1,6 +1,6 @@
1
1
  import path from 'node:path';
2
2
 
3
- import { findWorkspacePath } from './utils';
3
+ import { findWorkspacePath, moduleName as projectName } from './utils.js';
4
4
 
5
5
  /**
6
6
  * template plugins do not hand us the correct file path.
@@ -14,15 +14,16 @@ import { findWorkspacePath } from './utils';
14
14
  export function fixFilename(filename) {
15
15
  let fileName = filename;
16
16
  let workspace = findWorkspacePath(fileName);
17
+ let moduleName = projectName(workspace);
17
18
 
18
19
  /**
19
20
  * For a simple case, there are sometimes duplicate module paths in the fileName
20
21
  * let's collapse that and
21
22
  */
22
- let potentialModuleName = path.basename(workspace);
23
+ let wrongModuleName = path.basename(workspace);
23
24
  let deduped = fileName.replace(
24
- `${potentialModuleName}/${potentialModuleName}/`,
25
- `${potentialModuleName}/app/`,
25
+ `${wrongModuleName}/${moduleName}/`,
26
+ `${wrongModuleName}/app/`,
26
27
  );
27
28
 
28
29
  if (deduped !== fileName) {
@@ -35,7 +36,7 @@ export function fixFilename(filename) {
35
36
  * with the module name, so the file paths never exist on disk
36
37
  */
37
38
  if (
38
- !fileName.includes('/app/') &&
39
+ !fileName.includes(path.join(workspace, 'app')) &&
39
40
  !fileName.includes('/node_modules/.embroider/')
40
41
  ) {
41
42
  let maybeModule = fileName.replace(workspace, '');
@@ -19,6 +19,34 @@ describe('fixFilename()', () => {
19
19
  );
20
20
  });
21
21
 
22
+ describe(`when the app's modulePrefix does not match the folder name (common in most apps)`, () => {
23
+ it(`works`, () => {
24
+ let file = path.join(
25
+ paths.classicApp,
26
+ 'test-app',
27
+ 'components/template-only.hbs',
28
+ );
29
+ let corrected = fixFilename(file);
30
+
31
+ expect(corrected).to.equal(
32
+ path.join(paths.classicApp, 'app/components/template-only.hbs'),
33
+ );
34
+ });
35
+
36
+ it(`works with /app/ in the components path`, () => {
37
+ let file = path.join(
38
+ paths.classicApp,
39
+ 'test-app',
40
+ 'components/app/template-only.hbs',
41
+ );
42
+ let corrected = fixFilename(file);
43
+
44
+ expect(corrected).to.equal(
45
+ path.join(paths.classicApp, 'app/components/app/template-only.hbs'),
46
+ );
47
+ });
48
+ });
49
+
22
50
  it('works with the real path', () => {
23
51
  let file = path.join(
24
52
  paths.classicApp,