ember-scoped-css 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -184,6 +184,19 @@ There is a `scoped-class` helper that you can use to pass a class name as an arg
184
184
  />
185
185
  ```
186
186
 
187
+ In gjs/gts/`<template>`, the above would look like:
188
+ ```gjs
189
+ import { scopedClass } from 'ember-scoped-css';
190
+
191
+ <template>
192
+ <OtherComponent @internalClass={{scopedClass 'hello-class'}} />
193
+ <OtherComponent @internalClass={{(scopedClass 'hello-class')}} />
194
+ <OtherComponent
195
+ @internalClass={{concat (scopedClass 'hello-class') ' other-class'}}
196
+ />
197
+ </template>
198
+ ```
199
+
187
200
  ## Testing
188
201
 
189
202
  As classes are renamed during the build process you can't directly verify if classes are present in your tests. To solve this problem you can use the `scopedClass` function from the `ember-scoped-css/test-support` module. The function takes the class names and path to the CSS file where are the classes defined and returns the scoped class names.
@@ -199,4 +199,4 @@ async function app_css_loader_default(code) {
199
199
  }
200
200
  return rewrittenCss;
201
201
  }
202
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtbG9hZGVyLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZnNFeGlzdHMuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZUFic29sdXRlUGF0aEhhc2guanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gudHMiLCAiLi4vLi4vLi4vc3JjL2xpYi9yZXdyaXRlQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvaXNJbnNpZGVHbG9iYWwuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIGltcG9ydCB7IGNyZWF0ZVVucGx1Z2luIH0gIGZyb20gJ3VucGx1Z2luJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCByZXdyaXRlQ3NzIGZyb20gJy4uL2xpYi9yZXdyaXRlQ3NzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKGNvZGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICBjb25zdCBjc3NQYXRoID0gdGhpcy5yZXNvdXJjZVBhdGg7XG4gIGNvbnN0IGNzc0ZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShjc3NQYXRoKTtcblxuICBjb25zdCBwb3N0Zml4ID0gZ2VuZXJhdGVIYXNoKGNzc1BhdGgpO1xuXG4gIGNvbnN0IGhic1BhdGggPSBjc3NQYXRoLnJlcGxhY2UoJy5jc3MnLCAnLmhicycpO1xuICBjb25zdCBnanNQYXRoID0gY3NzUGF0aC5yZXBsYWNlKCcuY3NzJywgJy5qcycpO1xuICBjb25zdCBbaGJzRXhpc3RzLCBnanNFeGlzdHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGZzRXhpc3RzKGhic1BhdGgpLFxuICAgIGZzRXhpc3RzKGdqc1BhdGgpLFxuICBdKTtcblxuICBsZXQgcmV3cml0dGVuQ3NzO1xuXG4gIGlmIChoYnNFeGlzdHMgfHwgKGdqc0V4aXN0cyAmJiBjc3NQYXRoLnN0YXJ0c1dpdGgodGhpcy5yb290Q29udGV4dCkpKSB7XG4gICAgcmV3cml0dGVuQ3NzID0gcmV3cml0ZUNzcyhjb2RlLCBwb3N0Zml4LCBjc3NGaWxlTmFtZSwgb3B0aW9ucy5sYXllck5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHJld3JpdHRlbkNzcyA9IGNvZGU7XG4gIH1cblxuICByZXR1cm4gcmV3cml0dGVuQ3NzO1xufVxuIiwgImltcG9ydCB7IHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKHBhdGgpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGF0KHBhdGgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcblxuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuL2dlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaC50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaEZyb21BYnNvbHV0ZVBhdGgoYWJzb2x1dGVQYXRoKSB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgb2YgYGFwcFBhdGhgIHVsdGltYXRlbHkgdHJhbnNmb3JtcyB0aGUgYGFic29sdXRlUGF0aGBcbiAgICogaW50byB0aGUgZXhhY3Qgc3RyaW5nIHRoYXQgZm9sa3Mgd2lsbCBwYXNzIHRvIGByZWxhdGl2ZVBhdGhgXG4gICAqIGF0IHJ1bnRpbWUuXG4gICAqL1xuICBjb25zdCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuXG4gIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICAvKipcbiAgICogUG9kcyBzdXBwb3J0LlxuICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgKlxuICAgKiBOb3RlIHRoYXQgcG9kcyBmb3IgY29tcG9uZW50cyB3aWxsIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAgICovXG4gIGxldCBpc1BvZCA9XG4gICAgIXBhY2thZ2VSZWxhdGl2ZS5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykgJiZcbiAgICAocGFja2FnZVJlbGF0aXZlLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSk7XG5cbiAgaWYgKGlzUG9kKSB7XG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5mdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG5jb25zdCBDQUNIRSA9IG5ldyBTZXQoKTtcblxuLyoqXG4gKiBGb3IgYSBnaXZlbiBzb3VyY2UgcGF0aCwgaWYgd2UgaGF2ZSBzZWVuIGFcbiAqIHNvdXJjZSBmaWxlIHdpdGhpbiB0aGUgd29ya3NwYWNlIGRpcmVjdG9yeSxcbiAqIGZpbmQgdGhhdCB3b3Jrc3BhY2UgZGlyZWN0b3J5IGFuZCByZXR1cm4gaXQuXG4gKi9cbmZ1bmN0aW9uIGhhc1NlZW4oc291cmNlUGF0aCkge1xuICBmb3IgKGxldCBlbnRyeSBvZiBDQUNIRSkge1xuICAgIGlmIChzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoZW50cnkpKSB7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG5cbiAgLy8gd2UgaGF2ZSBub3Qgc2VlbiB0aGlzIHNvdXJjZSBwYXRoIHlldFxuICByZXR1cm47XG59XG5cbi8qKlxuICogUG9wdWxhdGVzIHRoZSBcInNlZW5cIiB3b3Jrc3BhY2UgY2FjaGUsXG4gKiBzbyB0aGF0IHdlIGRvbid0IGhpdCB0aGUgZmlsZSBzeXN0ZW0gdG9vIG9mdGVuLlxuICovXG5mdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCBzZWVuID0gaGFzU2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFVwLnN5bmMoJ3BhY2thZ2UuanNvbicsIHtcbiAgICBjd2Q6IHBhdGguZGlybmFtZShzb3VyY2VQYXRoKSxcbiAgfSk7XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIENBQ0hFLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogcmV0dXJucyB0aGUgcGFja2FnZS5qc29uI25hbWUgZm9yIGEgZ2l2ZW4gc291cmNlUGF0aFxuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuXG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZy5uYW1lO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uLm5hbWU7XG59XG5cbiIsICJpbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoKHJlbGF0aXZlUGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiAnZScgKyBtZDUocmVsYXRpdmVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG4iLCAiaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IGlzSW5zaWRlR2xvYmFsIGZyb20gJy4vaXNJbnNpZGVHbG9iYWwuanMnO1xuXG5mdW5jdGlvbiByZXdyaXRlU2VsZWN0b3Ioc2VsLCBwb3N0Zml4KSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChzZWxlY3RvcnMpID0+IHtcbiAgICBzZWxlY3RvcnMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IudmFsdWUgKz0gJ18nICsgcG9zdGZpeDtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3RhZycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBzZWxlY3Rvci5yZXBsYWNlV2l0aChcbiAgICAgICAgICBwYXJzZXIudGFnKHsgdmFsdWU6IHNlbGVjdG9yLnZhbHVlIH0pLFxuICAgICAgICAgIHBhcnNlci5jbGFzc05hbWUoeyB2YWx1ZTogcG9zdGZpeCB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHJlbW92ZSA6Z2xvYmFsXG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3BzZXVkbycgJiYgc2VsZWN0b3IudmFsdWUgPT09ICc6Z2xvYmFsJykge1xuICAgICAgICBzZWxlY3Rvci5yZXBsYWNlV2l0aCguLi5zZWxlY3Rvci5ub2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gcGFyc2VyKHRyYW5zZm9ybSkucHJvY2Vzc1N5bmMoc2VsKTtcblxuICByZXR1cm4gdHJhbnNmb3JtZWQ7XG59XG5cbmZ1bmN0aW9uIGlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAnYXRydWxlJyAmJiBwYXJlbnQubmFtZSA9PT0gJ2tleWZyYW1lcycpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUtleWZyYW1lcyhwYXJlbnQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXdyaXRlQ3NzKGNzcywgcG9zdGZpeCwgZmlsZU5hbWUsIGxheWVyTmFtZSkge1xuICBjb25zdCBsYXllck5hbWVXaXRoRGVmYXVsdCA9IGxheWVyTmFtZSA/PyAnY29tcG9uZW50cyc7XG4gIGNvbnN0IGFzdCA9IHBvc3Rjc3MucGFyc2UoY3NzKTtcblxuICBhc3Qud2Fsaygobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdydWxlJyAmJiAhaXNJbnNpZGVLZXlmcmFtZXMobm9kZSkpIHtcbiAgICAgIG5vZGUuc2VsZWN0b3IgPSByZXdyaXRlU2VsZWN0b3Iobm9kZS5zZWxlY3RvciwgcG9zdGZpeCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCByZXdyaXR0ZW5Dc3MgPSBhc3QudG9TdHJpbmcoKTtcblxuICBpZiAoIWxheWVyTmFtZVdpdGhEZWZhdWx0KSB7XG4gICAgcmV0dXJuIGAvKiAke2ZpbGVOYW1lfSAqL1xcbiR7cmV3cml0dGVuQ3NzfVxcbmA7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGAvKiAke2ZpbGVOYW1lfSAqL1xcbkBsYXllciAke2xheWVyTmFtZVdpdGhEZWZhdWx0fSB7XFxuXFxuYCArXG4gICAgcmV3cml0dGVuQ3NzICtcbiAgICAnXFxufVxcbidcbiAgKTtcbn1cblxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzSW5zaWRlR2xvYmFsKG5vZGUsIGZ1bmMpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAncHNldWRvJyAmJiBwYXJlbnQudmFsdWUgPT09ICc6Z2xvYmFsJykgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzSW5zaWRlR2xvYmFsKHBhcmVudCwgZnVuYyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsSUFBQUEsb0JBQWlCOzs7QUNEakIsc0JBQXFCO0FBRXJCLGVBQU8saUJBQXdCQyxPQUFNO0FBQ25DLE1BQUk7QUFDRixjQUFNLHNCQUFLQSxLQUFJO0FBRWYsV0FBTztBQUFBLEVBQ1QsU0FBUyxHQUFHO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFDRjs7O0FDVkEscUJBQW1CO0FBQ25CLHVCQUFpQjtBQUVqQixxQkFBbUI7OztBQ0huQix5QkFBZ0I7QUFFRCxTQUFSLHlCQUEwQyxjQUFzQjtBQUNyRSxTQUFPLFVBQU0sbUJBQUFDLFNBQUks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a0JBQUFDLFFBQUssU0FBUyxPQUFPO0FBRXpDLFFBQU0sVUFBVSw2QkFBYSxPQUFPO0FBRXBDLFFBQU0sVUFBVSxRQUFRLFFBQVEsUUFBUSxNQUFNO0FBQzlDLFFBQU0sVUFBVSxRQUFRLFFBQVEsUUFBUSxLQUFLO0FBQzdDLFFBQU0sQ0FBQyxXQUFXLFNBQVMsSUFBSSxNQUFNLFFBQVEsSUFBSTtBQUFBLElBQy9DLGlCQUFTLE9BQU87QUFBQSxJQUNoQixpQkFBUyxPQUFPO0FBQUEsRUFDbEIsQ0FBQztBQUVELE1BQUk7QUFFSixNQUFJLGFBQWMsYUFBYSxRQUFRLFdBQVcsS0FBSyxXQUFXLEdBQUk7QUFDcEUsbUJBQWUsV0FBVyxNQUFNLFNBQVMsYUFBYSxRQUFRLFNBQVM7QUFBQSxFQUN6RSxPQUFPO0FBQ0wsbUJBQWU7QUFBQSxFQUNqQjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsiaW1wb3J0X25vZGVfcGF0aCIsICJwYXRoIiwgIm1kNSIsICJwYXRoIiwgImZpbmRVcCIsICJmc1N5bmMiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAicGF0aCJdCn0K
202
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkL2FwcC1jc3MtbG9hZGVyLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZnNFeGlzdHMuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZUFic29sdXRlUGF0aEhhc2guanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gudHMiLCAiLi4vLi4vLi4vc3JjL2xpYi9yZXdyaXRlQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvaXNJbnNpZGVHbG9iYWwuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIGltcG9ydCB7IGNyZWF0ZVVucGx1Z2luIH0gIGZyb20gJ3VucGx1Z2luJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCByZXdyaXRlQ3NzIGZyb20gJy4uL2xpYi9yZXdyaXRlQ3NzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKGNvZGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICBjb25zdCBjc3NQYXRoID0gdGhpcy5yZXNvdXJjZVBhdGg7XG4gIGNvbnN0IGNzc0ZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShjc3NQYXRoKTtcblxuICBjb25zdCBwb3N0Zml4ID0gZ2VuZXJhdGVIYXNoKGNzc1BhdGgpO1xuXG4gIGNvbnN0IGhic1BhdGggPSBjc3NQYXRoLnJlcGxhY2UoJy5jc3MnLCAnLmhicycpO1xuICBjb25zdCBnanNQYXRoID0gY3NzUGF0aC5yZXBsYWNlKCcuY3NzJywgJy5qcycpO1xuICBjb25zdCBbaGJzRXhpc3RzLCBnanNFeGlzdHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGZzRXhpc3RzKGhic1BhdGgpLFxuICAgIGZzRXhpc3RzKGdqc1BhdGgpLFxuICBdKTtcblxuICBsZXQgcmV3cml0dGVuQ3NzO1xuXG4gIGlmIChoYnNFeGlzdHMgfHwgKGdqc0V4aXN0cyAmJiBjc3NQYXRoLnN0YXJ0c1dpdGgodGhpcy5yb290Q29udGV4dCkpKSB7XG4gICAgcmV3cml0dGVuQ3NzID0gcmV3cml0ZUNzcyhjb2RlLCBwb3N0Zml4LCBjc3NGaWxlTmFtZSwgb3B0aW9ucy5sYXllck5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHJld3JpdHRlbkNzcyA9IGNvZGU7XG4gIH1cblxuICByZXR1cm4gcmV3cml0dGVuQ3NzO1xufVxuIiwgImltcG9ydCB7IHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKHBhdGgpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGF0KHBhdGgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcblxuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuL2dlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaC50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaEZyb21BYnNvbHV0ZVBhdGgoYWJzb2x1dGVQYXRoKSB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgb2YgYGFwcFBhdGhgIHVsdGltYXRlbHkgdHJhbnNmb3JtcyB0aGUgYGFic29sdXRlUGF0aGBcbiAgICogaW50byB0aGUgZXhhY3Qgc3RyaW5nIHRoYXQgZm9sa3Mgd2lsbCBwYXNzIHRvIGByZWxhdGl2ZVBhdGhgXG4gICAqIGF0IHJ1bnRpbWUuXG4gICAqL1xuICBjb25zdCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuXG4gIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICAvKipcbiAgICogUG9kcyBzdXBwb3J0LlxuICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgKlxuICAgKiBOb3RlIHRoYXQgcG9kcyBmb3IgY29tcG9uZW50cyB3aWxsIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAgICovXG4gIGxldCBpc1BvZCA9XG4gICAgIXBhY2thZ2VSZWxhdGl2ZS5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykgJiZcbiAgICAocGFja2FnZVJlbGF0aXZlLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSk7XG5cbiAgaWYgKGlzUG9kKSB7XG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCB3b3Jrc3BhY2VQYXRoID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG4gIGxldCBuYW1lID0gd29ya3NwYWNlUGFja2FnZU5hbWUoc291cmNlUGF0aCk7XG5cbiAgLyoqXG4gICAqICBVbmRlciBlbWJyb2lkZXIgYnVpbGRzLCB0aGUgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiB0aGUgYXBwXG4gICAqIGhhcyBhbGwgdGhlIGZpbGVzIHVuZGVyIGEgZm9sZGVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHBhY2thZ2UgbmFtZSxcbiAgICogcmF0aGVyIHRoYW4gXCJhcHBcIi5cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBzb3VyY2VQYXRoLnJlcGxhY2Uod29ya3NwYWNlUGF0aCwgJycpO1xuXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVJlbGF0aXZlKTtcblxuICByZXR1cm4gYCR7bmFtZX0ke2xvY2FsUGFja2FnZXJTdHlsZVBhdGh9YDtcbn1cblxuY29uc3QgQ0FDSEUgPSBuZXcgU2V0KCk7XG5cbi8qKlxuICogRm9yIGEgZ2l2ZW4gc291cmNlIHBhdGgsIGlmIHdlIGhhdmUgc2VlbiBhXG4gKiBzb3VyY2UgZmlsZSB3aXRoaW4gdGhlIHdvcmtzcGFjZSBkaXJlY3RvcnksXG4gKiBmaW5kIHRoYXQgd29ya3NwYWNlIGRpcmVjdG9yeSBhbmQgcmV0dXJuIGl0LlxuICovXG5mdW5jdGlvbiBoYXNTZWVuKHNvdXJjZVBhdGgpIHtcbiAgZm9yIChsZXQgZW50cnkgb2YgQ0FDSEUpIHtcbiAgICBpZiAoc291cmNlUGF0aC5zdGFydHNXaXRoKGVudHJ5KSkge1xuICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cbiAgfVxuXG4gIC8vIHdlIGhhdmUgbm90IHNlZW4gdGhpcyBzb3VyY2UgcGF0aCB5ZXRcbiAgcmV0dXJuO1xufVxuXG4vKipcbiAqIFBvcHVsYXRlcyB0aGUgXCJzZWVuXCIgd29ya3NwYWNlIGNhY2hlLFxuICogc28gdGhhdCB3ZSBkb24ndCBoaXQgdGhlIGZpbGUgc3lzdGVtIHRvbyBvZnRlbi5cbiAqL1xuZnVuY3Rpb24gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgc2VlbiA9IGhhc1NlZW4oc291cmNlUGF0aCk7XG5cbiAgaWYgKHNlZW4pIHtcbiAgICByZXR1cm4gc2VlbjtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGZpbmRVcC5zeW5jKCdwYWNrYWdlLmpzb24nLCB7XG4gICAgY3dkOiBwYXRoLmRpcm5hbWUoc291cmNlUGF0aCksXG4gIH0pO1xuXG4gIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBwYXRoLmRpcm5hbWUocGFja2FnZUpzb25QYXRoKTtcblxuICBDQUNIRS5hZGQod29ya3NwYWNlUGF0aCk7XG5cbiAgcmV0dXJuIHdvcmtzcGFjZVBhdGg7XG59XG5cbmNvbnN0IE1BTklGRVNUX0NBQ0hFID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIHJldHVybnMgdGhlIHBhY2thZ2UuanNvbiNuYW1lIGZvciBhIGdpdmVuIHNvdXJjZVBhdGhcbiAqL1xuZnVuY3Rpb24gd29ya3NwYWNlUGFja2FnZU5hbWUoc291cmNlUGF0aCkge1xuICBjb25zdCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcblxuICBsZXQgZXhpc3RpbmcgPSBNQU5JRkVTVF9DQUNIRS5nZXQod29ya3NwYWNlKTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gZXhpc3RpbmcubmFtZTtcbiAgfVxuXG4gIGxldCBidWZmZXIgPSBmc1N5bmMucmVhZEZpbGVTeW5jKHBhdGguam9pbih3b3Jrc3BhY2UsICdwYWNrYWdlLmpzb24nKSk7XG4gIGxldCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKCk7XG4gIGxldCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuICBNQU5JRkVTVF9DQUNIRS5zZXQod29ya3NwYWNlLCBqc29uKTtcblxuICByZXR1cm4ganNvbi5uYW1lO1xufVxuXG4iLCAiaW1wb3J0IG1kNSBmcm9tICdibHVlaW1wLW1kNSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaChyZWxhdGl2ZVBhdGg6IHN0cmluZykge1xuICByZXR1cm4gJ2UnICsgbWQ1KHJlbGF0aXZlUGF0aCkuc3Vic3RyaW5nKDAsIDgpO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0luc2lkZUdsb2JhbChub2RlLCBmdW5jKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ3BzZXVkbycgJiYgcGFyZW50LnZhbHVlID09PSAnOmdsb2JhbCcpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUdsb2JhbChwYXJlbnQsIGZ1bmMpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLElBQUFBLG9CQUFpQjs7O0FDRGpCLHNCQUFxQjtBQUVyQixlQUFPLGlCQUF3QkMsT0FBTTtBQUNuQyxNQUFJO0FBQ0YsY0FBTSxzQkFBS0EsS0FBSTtBQUVmLFdBQU87QUFBQSxFQUNULFNBQVMsR0FBRztBQUNWLFdBQU87QUFBQSxFQUNUO0FBQ0Y7OztBQ1ZBLHFCQUFtQjtBQUNuQix1QkFBaUI7QUFFakIscUJBQW1COzs7QUNIbkIseUJBQWdCO0FBRUQsU0FBUix5QkFBMEMsY0FBc0I7QUFDckUsU0FBTyxVQUFNLG1CQUFB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TSxjQUFjLGtCQUFBQyxRQUFLLFNBQVMsT0FBTztBQUV6QyxRQUFNLFVBQVUsNkJBQWEsT0FBTztBQUVwQyxRQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsTUFBTTtBQUM5QyxRQUFNLFVBQVUsUUFBUSxRQUFRLFFBQVEsS0FBSztBQUM3QyxRQUFNLENBQUMsV0FBVyxTQUFTLElBQUksTUFBTSxRQUFRLElBQUk7QUFBQSxJQUMvQyxpQkFBUyxPQUFPO0FBQUEsSUFDaEIsaUJBQVMsT0FBTztBQUFBLEVBQ2xCLENBQUM7QUFFRCxNQUFJO0FBRUosTUFBSSxhQUFjLGFBQWEsUUFBUSxXQUFXLEtBQUssV0FBVyxHQUFJO0FBQ3BFLG1CQUFlLFdBQVcsTUFBTSxTQUFTLGFBQWEsUUFBUSxTQUFTO0FBQUEsRUFDekUsT0FBTztBQUNMLG1CQUFlO0FBQUEsRUFDakI7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbImltcG9ydF9ub2RlX3BhdGgiLCAicGF0aCIsICJtZDUiLCAicGF0aCIsICJmaW5kVXAiLCAiZnNTeW5jIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgInBhdGgiXQp9Cg==
@@ -463,18 +463,53 @@ var parseOptions2 = {
463
463
  }
464
464
  }
465
465
  };
466
+ function removeScopeBagReference(ast, scopedClass) {
467
+ if (!scopedClass)
468
+ return;
469
+ import_recast2.default.visit(ast, {
470
+ visitObjectProperty(path6) {
471
+ if (path6.node.value.type === "Identifier" && path6.node.value.name === scopedClass) {
472
+ path6.prune();
473
+ return false;
474
+ }
475
+ this.traverse(path6);
476
+ }
477
+ });
478
+ }
466
479
  function replaceHbsInJs_default(script, replaceFunction) {
467
480
  const ast = import_recast2.default.parse(script, parseOptions2);
481
+ let importedScopedClass;
468
482
  import_recast2.default.visit(ast, {
483
+ visitImportDeclaration(path6) {
484
+ if (path6.node.source.value === "ember-scoped-css") {
485
+ let specifier = path6.node.specifiers.find(
486
+ (x) => x.imported.name === "scopedClass"
487
+ );
488
+ if (specifier) {
489
+ importedScopedClass = specifier.local.name;
490
+ }
491
+ path6.prune();
492
+ return false;
493
+ }
494
+ this.traverse(path6);
495
+ },
469
496
  visitCallExpression(path6) {
470
497
  const node = path6.node;
498
+ const scopedClass = importedScopedClass ?? "scoped-class";
471
499
  if (node.callee.name === "__GLIMMER_TEMPLATE" || node.callee.name === "precompileTemplate") {
472
500
  if (node.arguments[0].type === "TemplateLiteral") {
473
501
  node.arguments[0].quasis[0].value.raw = replaceFunction(
474
- node.arguments[0].quasis[0].value.raw
502
+ node.arguments[0].quasis[0].value.raw,
503
+ scopedClass
475
504
  );
476
505
  } else if (node.arguments[0].type === "StringLiteral" || node.arguments[0].type === "Literal") {
477
- node.arguments[0].value = replaceFunction(node.arguments[0].value);
506
+ node.arguments[0].value = replaceFunction(
507
+ node.arguments[0].value,
508
+ scopedClass
509
+ );
510
+ }
511
+ if (importedScopedClass) {
512
+ removeScopeBagReference(path6, scopedClass);
478
513
  }
479
514
  }
480
515
  this.traverse(path6);
@@ -505,7 +540,7 @@ function renameClass(className, postfix, classesInCss) {
505
540
  }
506
541
 
507
542
  // src/lib/rewriteHbs.js
508
- function rewriteHbs(hbs, classes, tags, postfix) {
543
+ function rewriteHbs(hbs, classes, tags, postfix, scopedClass = "scoped-class") {
509
544
  let ast = import_ember_template_recast.default.parse(hbs);
510
545
  let stack = [];
511
546
  import_ember_template_recast.default.traverse(ast, {
@@ -557,10 +592,10 @@ function rewriteHbs(hbs, classes, tags, postfix) {
557
592
  },
558
593
  MustacheStatement(node) {
559
594
  let cssClass;
560
- if (node.path?.original === "scoped-class" && node.params?.length === 1 && node.params[0].type === "StringLiteral") {
595
+ if (node.path?.original === scopedClass && node.params?.length === 1 && node.params[0].type === "StringLiteral") {
561
596
  cssClass = node.params[0].value;
562
597
  }
563
- if (node.path?.path?.original === "scoped-class" && node.path?.params?.length === 1 && node.path?.params[0].type === "StringLiteral") {
598
+ if (node.path?.path?.original === scopedClass && node.path?.params?.length === 1 && node.path?.params[0].type === "StringLiteral") {
564
599
  cssClass = node.path.params[0].value;
565
600
  }
566
601
  if (cssClass) {
@@ -573,7 +608,7 @@ function rewriteHbs(hbs, classes, tags, postfix) {
573
608
  }
574
609
  },
575
610
  SubExpression(node) {
576
- if (node.path?.original === "scoped-class" && node.params?.length === 1 && node.params[0].type === "StringLiteral") {
611
+ if (node.path?.original === scopedClass && node.params?.length === 1 && node.params[0].type === "StringLiteral") {
577
612
  const cssClass = node.params[0].value;
578
613
  const textNode = import_ember_template_recast.default.builders.literal(
579
614
  "StringLiteral",
@@ -589,7 +624,7 @@ function rewriteHbs(hbs, classes, tags, postfix) {
589
624
 
590
625
  // src/build/scoped-css-unplugin.js
591
626
  function isJsFile(id) {
592
- return id.endsWith(".js") || id.endsWith(".ts");
627
+ return id.endsWith(".js") || id.endsWith(".ts") || id.endsWith(".gjs") || id.endsWith(".gts");
593
628
  }
594
629
  function isHbsFile(id) {
595
630
  return id.endsWith(".hbs");
@@ -598,7 +633,7 @@ function isCssFile(id) {
598
633
  return id.endsWith(".css");
599
634
  }
600
635
  async function transformJsFile(code, id) {
601
- const cssPath = id.endsWith(".hbs") ? id.replace(/\.hbs$/, ".css") : id.replace(/(\.hbs)?\.((js)|(ts))$/, ".css");
636
+ const cssPath = id.endsWith(".hbs") ? id.replace(/\.hbs$/, ".css") : id.replace(/(\.hbs)?\.(js|ts|gjs|gts)$/, ".css");
602
637
  const cssFileName = import_node_path5.default.basename(cssPath);
603
638
  const cssExists = await fsExists_default(cssPath);
604
639
  let css;
@@ -613,10 +648,10 @@ async function transformJsFile(code, id) {
613
648
  code = `import './${cssFileName}';
614
649
 
615
650
  ${code}`;
616
- const rewrittenCode = replaceHbsInJs_default(code, (hbs) => {
651
+ const rewrittenCode = replaceHbsInJs_default(code, (hbs, scopedClass) => {
617
652
  const { classes, tags } = getClassesTagsFromCss(css);
618
653
  const postfix = generateHashFromAbsolutePath(cssPath);
619
- const rewritten = rewriteHbs(hbs, classes, tags, postfix);
654
+ const rewritten = rewriteHbs(hbs, classes, tags, postfix, scopedClass);
620
655
  return rewritten;
621
656
  });
622
657
  return {
@@ -682,9 +717,6 @@ var scoped_css_unplugin_default = (0, import_unplugin3.createUnplugin)(
682
717
  });
683
718
  }
684
719
  },
685
- // loadInclude(id) {
686
- // return isJsFile(id) || isCssFile(id) || isHbsFile(id);
687
- // },
688
720
  transform(code, jsPath) {
689
721
  if (isHbsFile(jsPath)) {
690
722
  return transformJsFile(code, jsPath);
@@ -709,4 +741,4 @@ var scoped_css_unplugin_default = (0, import_unplugin3.createUnplugin)(
709
741
  appScopedcssWebpack,
710
742
  scopedCssUnplugin
711
743
  });
712
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkL2luZGV4LmpzIiwgIi4uLy4uLy4uL3NyYy9idWlsZC9hcHAtY3NzLXVucGx1Z2luLmpzIiwgIi4uLy4uLy4uL3NyYy9idWlsZC9hcHAtanMtdW5wbHVnaW4uanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZUFic29sdXRlUGF0aEhhc2guanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gudHMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlcGxhY2VHbGltbWVyQXN0LmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZnNFeGlzdHMuanMiLCAiLi4vLi4vLi4vc3JjL2J1aWxkL2FwcC1zY29wZWRjc3Mtd2VicGFjay5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2dldEZpbGVzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUNzcy5qcyIsICIuLi8uLi8uLi9zcmMvYnVpbGQvc2NvcGVkLWNzcy11bnBsdWdpbi5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlcGxhY2VIYnNJbkpzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUhicy5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlbmFtZUNsYXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgYXBwQ3NzVW5wbHVnaW4gZnJvbSAnLi9hcHAtY3NzLXVucGx1Z2luLmpzJztcbmltcG9ydCBhcHBKc1VucGx1Z2luIGZyb20gJy4vYXBwLWpzLXVucGx1Z2luLmpzJztcbmltcG9ydCBhcHBTY29wZWRjc3NXZWJwYWNrIGZyb20gJy4vYXBwLXNjb3BlZGNzcy13ZWJwYWNrLmpzJztcbmltcG9ydCBzY29wZWRDc3NVbnBsdWdpbiBmcm9tICcuL3Njb3BlZC1jc3MtdW5wbHVnaW4uanMnO1xuXG5leHBvcnQge1xuICBhcHBDc3NVbnBsdWdpbixcbiAgYXBwSnNVbnBsdWdpbixcbiAgYXBwU2NvcGVkY3NzV2VicGFjayxcbiAgc2NvcGVkQ3NzVW5wbHVnaW4sXG59O1xuIiwgImltcG9ydCB7IGNyZWF0ZVVucGx1Z2luIH0gZnJvbSAndW5wbHVnaW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVVbnBsdWdpbigoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1jc3MtdW5wbHVnaW4nLFxuXG4gICAgLy8gbG9hZEluY2x1ZGUoaWQpe1xuICAgIC8vICAgaWYoaWQuZW5kc1dpdGgoJy5jc3MnKSl7XG4gICAgLy8gICAgIHJldHVybiB0cnVlO1xuICAgIC8vICAgfVxuICAgIC8vIH0sXG5cbiAgICAvLyBsb2FkKGlkKXtcbiAgICAvLyAgIC8vIHRoaXMuYWRkV2F0Y2hGaWxlKGlkKTtcbiAgICAvLyAgIHJldHVybiAnY29uc29sZS5sb2coJyArIEpTT04uc3RyaW5naWZ5KGlkKSArICcpOyc7XG4gICAgLy8gfSxcblxuICAgIC8vIHRyYW5zZm9ybUluY2x1ZGUoaWQpIHtcbiAgICAvLyAgIGlmKGlkLmVuZHNXaXRoKCcuY3NzJykpe1xuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LFxuXG4gICAgLy8gYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgLy8gICByZXR1cm4gY29kZTtcbiAgICAvLyB9LFxuICB9O1xufSk7XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi4vbGliL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzIGZyb20gJy4uL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJlcGxhY2VHbGltbWVyQXN0IGZyb20gJy4uL2xpYi9yZXBsYWNlR2xpbW1lckFzdC5qcyc7XG5cbmZ1bmN0aW9uKiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzKSB7XG4gIGZvciAobGV0IGluc3RydWN0aW9uIG9mIG9wY29kZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5zdHJ1Y3Rpb24pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB5aWVsZCBpbnN0cnVjdGlvbjtcblxuICAgIGZvciAobGV0IHN1Ykluc3RydWN0aW9uIG9mIGl0ZXJhdGVPcGNvZGVzKGluc3RydWN0aW9uKSkge1xuICAgICAgeWllbGQgc3ViSW5zdHJ1Y3Rpb247XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVUYWdOYW1lKHRhZykge1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIGlmICh0YWcgPT09IDApIHtcbiAgICAgIHJldHVybiAnZGl2JztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMSkge1xuICAgICAgcmV0dXJuICdzcGFuJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMikge1xuICAgICAgcmV0dXJuICdwJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMykge1xuICAgICAgcmV0dXJuICdhJztcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdGFnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVVucGx1Z2luKCh7IGFwcERpciB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1qcy11bnBsdWdpbicsXG5cbiAgICB0cmFuc2Zvcm1JbmNsdWRlKGlkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpZC5pbmNsdWRlcyhwYXRoLmJhc2VuYW1lKGFwcERpcikpICYmXG4gICAgICAgIChpZC5lbmRzV2l0aCgnLmpzJykgfHwgaWQuZW5kc1dpdGgoJy5oYnMnKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2hvbGUgdGhpbmcgaXMgZXJyb3IgcHJvbmUsIGFuZCB3ZSBzaG91bGQgc3dpdGNoIHRoZSBlbWJyb2lkZXJcbiAgICAgKiB0ZWNobmlxdWUgdG8gdXNpbmcgYSBiYWJlbCBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBVc2luZyBhIHdlYnBhY2sgcGx1Z2luIGlzIHRvbyBsYXRlIGluIHRoZSBwcm9jZXNzLlxuICAgICAqIFdlIGRvbid0IHdhbnQgdG8gYmUgZGVhbGluZyB3aXRoIHdpcmUtZm9ybWF0LCBiZWNhdXNlXG4gICAgICogLSBpdCdzIG5vdCBwdWJsaWMgQVBJXG4gICAgICogLSBpdCBjYW4gY2hhbmdlIGFzIGVtYmVyLXNvdXJjZSBpcyB1cGdyYWRlZFxuICAgICAqIC0gdGhlIG51bWJlcnMgYXJlIG5vdCBcInN0YWJsZVwiLCBpbiB0aGF0IHRoZXkgYXJlIGJpdHdpc2UgYW5kZWQgYW5kIG9yZWRcbiAgICAgKiAgIHRvZ2V0aGVyIHNvIHRoYXQgc3RvcmFnZSBpcyBlZmZpY2llbnQgLS0gd2hpY2ggbWVhbnMgd2UnZCBuZWVkIHRvIGtub3dcbiAgICAgKiAgIGFsbCB0aGUgb3Bjb2RlcyBhbmQgYXBwcm9wcmlhdGVseSB8IC8gJiB0byBkZWNvbnN0cnVjdCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBsZXQgY3NzUGF0aCA9IGlkLnJlcGxhY2UoLyhcXC5qcyl8KFxcLmhicykvLCAnLmNzcycpO1xuICAgICAgbGV0IG1vZHVsZUdyb3VwUGF0aCA9IGNzc1BhdGg7XG5cbiAgICAgIC8qKlxuICAgICAgICogUG9kcyBzdXBwb3J0XG4gICAgICAgKlxuICAgICAgICogTm90ZSB0aGF0IFBvZC1jb21wb25lbnRzIHdpbGwgbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICAgICAgICovXG4gICAgICBsZXQgaXNQb2QgPSAhaWQuaW5jbHVkZXMoJy9jb21wb25lbnRzLycpICYmIGlkLmVuZHNXaXRoKCcvdGVtcGxhdGUuaGJzJyk7XG5cbiAgICAgIGlmIChpc1BvZCkge1xuICAgICAgICBjc3NQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShpZCksICdzdHlsZXMuY3NzJyk7XG4gICAgICAgIG1vZHVsZUdyb3VwUGF0aCA9IHBhdGguZGlybmFtZShjc3NQYXRoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9zdGZpeCA9IGdlbmVyYXRlSGFzaChtb2R1bGVHcm91cFBhdGgpO1xuXG4gICAgICByZXR1cm4gYXdhaXQgcmVwbGFjZUdsaW1tZXJBc3QoY29kZSwgaWQsIChvcGNvZGVzLCBjc3MpID0+IHtcbiAgICAgICAgY29uc3QgeyBjbGFzc2VzLCB0YWdzIH0gPSBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKTtcbiAgICAgICAgLy8gdGhpcy5hZGRXYXRjaEZpbGUoY3NzUGF0aCk7XG4gICAgICAgIGNvbnN0IGluc2VydGlvbnMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpbnN0cnVjdGlvbiBvZiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzWzBdKSkge1xuICAgICAgICAgIC8vIHJlcGxhY2UgY2xhc3Nlc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzBdID09PSAxNCAmJlxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMV0gPT09IDAgJiZcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzJdICYmXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXS5zcGxpdCgnICcpLmZpbmQoKGkpID0+IGNsYXNzZXMuaGFzKGkudHJpbSgpKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXSA9IGluc3RydWN0aW9uWzJdXG4gICAgICAgICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgICAgICAgIC5tYXAoKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUudHJpbSgpICYmIGNsYXNzZXMuaGFzKGNsYXNzTmFtZS50cmltKCkpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnRyaW0oKSArICdfJyArIHBvc3RmaXg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlcGxhY2Ugc3RyaW5ncyBpbiBpZiBjb25kaXRpb25zXG4gICAgICAgICAgLy8gdGhpcyBpcyBicml0dGxlLCBiZWNhdXNlIHN1YmV4cHJlc3Npb25zIGNhbiBiZSBkZWVwbHkgbmVzdGVkXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyB0aGlzIHBhcnRpY3VsYXIgb25lIGlzIDxkaXYgY2xhc3M9XCJnbG9iYWwtcHJvYmFibHkge3tpZiBAY29uZGl0aW9uIFwiYS1sb2NhbC1jbGFzc1wifX1cIj5cIlxuICAgICAgICAgIC8vIGlmIChpbnN0cnVjdGlvblswXSA9PT0gMTUgJiYgQXJyYXkuaXNBcnJheShpbnN0cnVjdGlvblsxXSkgJiYgaW5zdHJ1Y3Rpb25bMV1bMF0gPT09IDI5KSB7XG5cbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBhZGQgcG9zdGZpeCB0byB0YWdzXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMF0gPT09IDEwICYmXG4gICAgICAgICAgICB0YWdzLmhhcyhpbmZsYXRlVGFnTmFtZShpbnN0cnVjdGlvblsxXSkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyAxMCAtIG9wZW4gZWxlbWVudFxuICAgICAgICAgICAgbGV0IGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbjtcblxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbGV0IGkgPSBvcGNvZGVzWzBdLmluZGV4T2YoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICAgICAgICBpIDw9IG9wY29kZXNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICBpKytcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAob3Bjb2Rlc1swXVtpXVswXSA9PT0gMTQgJiYgb3Bjb2Rlc1swXVtpXVsxXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDbGFzc0luc3RydWN0aW9uID0gb3Bjb2Rlc1swXVtpXTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG9wY29kZXNbMF1baV1bMF0gPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgLy8gMTIgLSBmbHVzaCBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbikge1xuICAgICAgICAgICAgICBleGlzdGluZ0NsYXNzSW5zdHJ1Y3Rpb25bMl0gKz0gJyAnICsgcG9zdGZpeDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNsYXNzSW5zdHJ1Y3Rpb24gPSBbMTQsIDAsIHBvc3RmaXgsIHVuZGVmaW5lZF07XG5cbiAgICAgICAgICAgICAgaW5zZXJ0aW9ucy5wdXNoKFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluc2VydCBuZXcgaW5zdHJ1Y3Rpb25zXG4gICAgICAgIGZvciAobGV0IFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0gb2YgaW5zZXJ0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3Bjb2Rlc1swXS5pbmRleE9mKGluc3RydWN0aW9uKTtcblxuICAgICAgICAgIG9wY29kZXNbMF0uc3BsaWNlKGluZGV4ICsgMSwgMCwgY2xhc3NJbnN0cnVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXdyaXRlIG9wY29kZXNcbiAgICAgICAgLy8gY29uc3QgZGJnID0gbmV3IFdpcmVGb3JtYXREZWJ1Z2dlcihvcGNvZGVzKTtcbiAgICAgICAgLy8gY29uc3Qgd2ZkID0gZGJnLmZvcm1hdChvcGNvZGVzKTtcblxuICAgICAgICByZXR1cm4gb3Bjb2RlcztcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59KTtcbiIsICJpbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcblxuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuL2dlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaC50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaEZyb21BYnNvbHV0ZVBhdGgoYWJzb2x1dGVQYXRoKSB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgb2YgYGFwcFBhdGhgIHVsdGltYXRlbHkgdHJhbnNmb3JtcyB0aGUgYGFic29sdXRlUGF0aGBcbiAgICogaW50byB0aGUgZXhhY3Qgc3RyaW5nIHRoYXQgZm9sa3Mgd2lsbCBwYXNzIHRvIGByZWxhdGl2ZVBhdGhgXG4gICAqIGF0IHJ1bnRpbWUuXG4gICAqL1xuICBjb25zdCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuXG4gIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICAvKipcbiAgICogUG9kcyBzdXBwb3J0LlxuICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgKlxuICAgKiBOb3RlIHRoYXQgcG9kcyBmb3IgY29tcG9uZW50cyB3aWxsIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAgICovXG4gIGxldCBpc1BvZCA9XG4gICAgIXBhY2thZ2VSZWxhdGl2ZS5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykgJiZcbiAgICAocGFja2FnZVJlbGF0aXZlLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSk7XG5cbiAgaWYgKGlzUG9kKSB7XG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5mdW5jdGlvbiBhcHBQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHdvcmtzcGFjZVBhdGggPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcbiAgbGV0IG5hbWUgPSB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKTtcblxuICAvKipcbiAgICogIFVuZGVyIGVtYnJvaWRlciBidWlsZHMsIHRoZSBzcGVjLWNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBhcHBcbiAgICogaGFzIGFsbCB0aGUgZmlsZXMgdW5kZXIgYSBmb2xkZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgcGFja2FnZSBuYW1lLFxuICAgKiByYXRoZXIgdGhhbiBcImFwcFwiLlxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHNvdXJjZVBhdGgucmVwbGFjZSh3b3Jrc3BhY2VQYXRoLCAnJyk7XG5cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlUmVsYXRpdmUpO1xuXG4gIHJldHVybiBgJHtuYW1lfSR7bG9jYWxQYWNrYWdlclN0eWxlUGF0aH1gO1xufVxuXG5jb25zdCBDQUNIRSA9IG5ldyBTZXQoKTtcblxuLyoqXG4gKiBGb3IgYSBnaXZlbiBzb3VyY2UgcGF0aCwgaWYgd2UgaGF2ZSBzZWVuIGFcbiAqIHNvdXJjZSBmaWxlIHdpdGhpbiB0aGUgd29ya3NwYWNlIGRpcmVjdG9yeSxcbiAqIGZpbmQgdGhhdCB3b3Jrc3BhY2UgZGlyZWN0b3J5IGFuZCByZXR1cm4gaXQuXG4gKi9cbmZ1bmN0aW9uIGhhc1NlZW4oc291cmNlUGF0aCkge1xuICBmb3IgKGxldCBlbnRyeSBvZiBDQUNIRSkge1xuICAgIGlmIChzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoZW50cnkpKSB7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG5cbiAgLy8gd2UgaGF2ZSBub3Qgc2VlbiB0aGlzIHNvdXJjZSBwYXRoIHlldFxuICByZXR1cm47XG59XG5cbi8qKlxuICogUG9wdWxhdGVzIHRoZSBcInNlZW5cIiB3b3Jrc3BhY2UgY2FjaGUsXG4gKiBzbyB0aGF0IHdlIGRvbid0IGhpdCB0aGUgZmlsZSBzeXN0ZW0gdG9vIG9mdGVuLlxuICovXG5mdW5jdGlvbiBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCBzZWVuID0gaGFzU2Vlbihzb3VyY2VQYXRoKTtcblxuICBpZiAoc2Vlbikge1xuICAgIHJldHVybiBzZWVuO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gZmluZFVwLnN5bmMoJ3BhY2thZ2UuanNvbicsIHtcbiAgICBjd2Q6IHBhdGguZGlybmFtZShzb3VyY2VQYXRoKSxcbiAgfSk7XG5cbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvblBhdGgpO1xuXG4gIENBQ0hFLmFkZCh3b3Jrc3BhY2VQYXRoKTtcblxuICByZXR1cm4gd29ya3NwYWNlUGF0aDtcbn1cblxuY29uc3QgTUFOSUZFU1RfQ0FDSEUgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogcmV0dXJucyB0aGUgcGFja2FnZS5qc29uI25hbWUgZm9yIGEgZ2l2ZW4gc291cmNlUGF0aFxuICovXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYWNrYWdlTmFtZShzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuXG4gIGxldCBleGlzdGluZyA9IE1BTklGRVNUX0NBQ0hFLmdldCh3b3Jrc3BhY2UpO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZy5uYW1lO1xuICB9XG5cbiAgbGV0IGJ1ZmZlciA9IGZzU3luYy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHdvcmtzcGFjZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgbGV0IGNvbnRlbnQgPSBidWZmZXIudG9TdHJpbmcoKTtcbiAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIE1BTklGRVNUX0NBQ0hFLnNldCh3b3Jrc3BhY2UsIGpzb24pO1xuXG4gIHJldHVybiBqc29uLm5hbWU7XG59XG5cbiIsICJpbXBvcnQgbWQ1IGZyb20gJ2JsdWVpbXAtbWQ1JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoKHJlbGF0aXZlUGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiAnZScgKyBtZDUocmVsYXRpdmVQYXRoKS5zdWJzdHJpbmcoMCwgOCk7XG59XG4iLCAiaW1wb3J0IHBvc3Rjc3MgZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyJztcblxuaW1wb3J0IGlzSW5zaWRlR2xvYmFsIGZyb20gJy4vaXNJbnNpZGVHbG9iYWwuanMnO1xuXG5mdW5jdGlvbiBnZXRDbGFzc2VzQW5kVGFncyhzZWwsIGNsYXNzZXMsIHRhZ3MpIHtcbiAgY29uc3QgdHJhbnNmb3JtID0gKHNscykgPT4ge1xuICAgIHNscy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdjbGFzcycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBjbGFzc2VzLmFkZChzZWxlY3Rvci52YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgdGFncy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3MpIHtcbiAgY29uc3QgY2xhc3NlcyA9IG5ldyBTZXQoKTtcbiAgY29uc3QgdGFncyA9IG5ldyBTZXQoKTtcblxuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScpIHtcbiAgICAgIGdldENsYXNzZXNBbmRUYWdzKG5vZGUuc2VsZWN0b3IsIGNsYXNzZXMsIHRhZ3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHsgY2xhc3NlcywgdGFncyB9O1xufVxuXG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNJbnNpZGVHbG9iYWwobm9kZSwgZnVuYykge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGFyZW50LnR5cGUgPT09ICdwc2V1ZG8nICYmIHBhcmVudC52YWx1ZSA9PT0gJzpnbG9iYWwnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVHbG9iYWwocGFyZW50LCBmdW5jKTtcbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGJhYmVsUGFyc2VyIGZyb20gJ0BiYWJlbC9wYXJzZXInO1xuaW1wb3J0IHJlY2FzdCBmcm9tICdyZWNhc3QnO1xuXG5pbXBvcnQgZnNFeGlzdHMgZnJvbSAnLi9mc0V4aXN0cy5qcyc7XG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgcGFyc2VyOiBiYWJlbFBhcnNlcixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VHbGltbWVyQXN0KHNjcmlwdCwgaWQsIHJlcGxhY2VGdW5jdGlvbikge1xuICBjb25zdCBhc3QgPSByZWNhc3QucGFyc2Uoc2NyaXB0LCBwYXJzZU9wdGlvbnMpO1xuICBjb25zdCBjc3NQYXRoID0gaWQucmVwbGFjZSgvKFxcLmpzKXwoXFwuaGJzKS8sICcuY3NzJyk7XG4gIGxldCBjc3M7XG5cbiAgY29uc3QgY3NzRXhpc3RzID0gYXdhaXQgZnNFeGlzdHMoY3NzUGF0aCk7XG5cbiAgaWYgKGNzc0V4aXN0cykge1xuICAgIGNzcyA9IGF3YWl0IHJlYWRGaWxlKGNzc1BhdGgsICd1dGYtOCcpO1xuICB9XG5cbiAgaWYgKCFjc3MpIHtcbiAgICByZXR1cm4gc2NyaXB0O1xuICB9XG5cbiAgcmVjYXN0LnZpc2l0KGFzdCwge1xuICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZVBhdGgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2RlUGF0aC5ub2RlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdjcmVhdGVUZW1wbGF0ZUZhY3RvcnknICYmXG4gICAgICAgIG5vZGUuYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrUHJvcCA9IG5vZGUuYXJndW1lbnRzWzBdLnByb3BlcnRpZXMuZmluZChcbiAgICAgICAgICAocHJvcCkgPT4gcHJvcC5rZXkudmFsdWUgPT09ICdibG9jaycsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9wY29kZXMgPSBKU09OLnBhcnNlKGJsb2NrUHJvcC52YWx1ZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld09wY29kZXMgPSByZXBsYWNlRnVuY3Rpb24ob3Bjb2RlcywgY3NzKTtcblxuICAgICAgICBibG9ja1Byb3AudmFsdWUudmFsdWUgPSBKU09OLnN0cmluZ2lmeShuZXdPcGNvZGVzKTtcblxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG4gICAgICAgIC8vIGlmICghaW1wb3J0UGF0aCkge1xuICAgICAgICAvLyAgIHVucGx1Z2luLmFkZFdhdGNoRmlsZShjc3NQYXRoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBpbXBvcnRDc3MgPSByZWNhc3QucGFyc2UoXG4gICAgICAgICAgYGltcG9ydCAnLi8ke2ZpbGVOYW1lfSc7XFxuYCxcbiAgICAgICAgICBwYXJzZU9wdGlvbnMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGltcG9ydENzc05vZGUgPSBpbXBvcnRDc3MucHJvZ3JhbS5ib2R5WzBdO1xuXG4gICAgICAgIGFzdC5wcm9ncmFtLmJvZHkudW5zaGlmdChpbXBvcnRDc3NOb2RlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmF2ZXJzZShub2RlUGF0aCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0U2NyaXB0ID0gcmVjYXN0LnByaW50KGFzdCkuY29kZTtcblxuICByZXR1cm4gcmVzdWx0U2NyaXB0O1xufVxuIiwgImltcG9ydCB7IHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKHBhdGgpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGF0KHBhdGgpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIvLyBpbXBvcnQgeyBSYXdTb3VyY2UgfSAgZnJvbSAnd2VicGFjay1zb3VyY2VzJztcbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRGaWxlcyBmcm9tICcuLi9saWIvZ2V0RmlsZXMuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi4vbGliL3Jld3JpdGVDc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB7XG4gIGFwcGx5KGNvbXBpbGVyKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkVNQkVSX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29tcGlsZXIuaG9va3MuZW1pdC50YXBBc3luYyhcbiAgICAgICdzY29wZWQtd2VicGFjay1wbHVnaW4nLFxuICAgICAgYXN5bmMgKGNvbXBpbGF0aW9uLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNzc0ZpbGVzID0gYXdhaXQgZ2V0RmlsZXMoXG4gICAgICAgICAgICBwYXRoLnJlc29sdmUoY29tcGlsZXIuY29udGV4dCwgJyoqLyouY3NzJyksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFJld3JpdGUgdGhlIENTUyBmaWxlc1xuICAgICAgICAgIGNvbnN0IHJld3JpdHRlbkZpbGVzID0gW107XG5cbiAgICAgICAgICAvLyBjb25zdCByZXdyaXRlbkZpbGVzID0gY3NzRmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBjc3NGaWxlcykge1xuICAgICAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoYC8ke3BhdGguYmFzZW5hbWUoY29tcGlsZXIuY29udGV4dCl9LmNzc2ApKSB7XG4gICAgICAgICAgICAgIC8vIGltcG9ydCBzY29wZWQuY3NzIGludG8gYXBwLmNzc1xuICAgICAgICAgICAgICBsZXQgYXBwQ3NzID0gYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04Jyk7XG5cbiAgICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGZpbGUsIGBAaW1wb3J0IFwic2NvcGVkLmNzc1wiO1xcbiR7YXBwQ3NzfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBwYXRoLmJhc2VuYW1lKGNvbXBpbGVyLmNvbnRleHQpICsgJy5jc3MnLFxuICAgICAgICAgICAgICAgICd0ZXN0LXN1cHBvcnQuY3NzJyxcbiAgICAgICAgICAgICAgXS5zb21lKChmKSA9PiBmaWxlLmVuZHNXaXRoKGYpKSB8fFxuICAgICAgICAgICAgICBmaWxlLmluY2x1ZGVzKCcvdmVuZG9yLycpIHx8XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgKGF3YWl0IGZzRXhpc3RzKGZpbGUucmVwbGFjZSgnLmNzcycsICcuanMnKSkpIHx8XG4gICAgICAgICAgICAgICAgKGF3YWl0IGZzRXhpc3RzKGZpbGUucmVwbGFjZSgnLmNzcycsICcuaGJzJykpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goZmlsZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY3NzID0gYXdhaXQgcmVhZEZpbGUoZmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICBjb25zdCByZXdyaXR0ZW5Dc3MgPSByZXdyaXRlQ3NzKGNzcywgcG9zdGZpeCwgZmlsZU5hbWUpO1xuXG4gICAgICAgICAgICByZXdyaXR0ZW5GaWxlcy5wdXNoKHJld3JpdHRlbkNzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ29uY2F0ZW5hdGUgdGhlIHJld3JpdHRlbiBDU1MgZmlsZXNcbiAgICAgICAgICBsZXQgY29uY2F0ZW5hdGVkQ1NTID0gcmV3cml0dGVuRmlsZXMuam9pbignXFxuXFxuJyk7XG5cbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY29uY2F0ZW5hdGVkIENTUyBpbiB0aGUgYXNzZXRzL3Njb3BlZC1jb21wb25lbnRzLmNzc1xuICAgICAgICAgIGNvbXBpbGF0aW9uLmFzc2V0c1snYXNzZXRzL3Njb3BlZC5jc3MnXSA9IHtcbiAgICAgICAgICAgIHNvdXJjZTogKCkgPT4gY29uY2F0ZW5hdGVkQ1NTLFxuICAgICAgICAgICAgc2l6ZTogKCkgPT4gY29uY2F0ZW5hdGVkQ1NTLmxlbmd0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZ2xvYlBhdGgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBnbG9iKGdsb2JQYXRoLCAoZXJyLCBmaWxlcykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShmaWxlcyk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBmc0V4aXN0cyBmcm9tICcuLi9saWIvZnNFeGlzdHMuanMnO1xuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuLi9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi4vbGliL2dldENsYXNzZXNUYWdzRnJvbUNzcy5qcyc7XG5pbXBvcnQgcmVwbGFjZUhic0luSnMgZnJvbSAnLi4vbGliL3JlcGxhY2VIYnNJbkpzLmpzJztcbmltcG9ydCByZXdyaXRlQ3NzIGZyb20gJy4uL2xpYi9yZXdyaXRlQ3NzLmpzJztcbmltcG9ydCByZXdyaXRlSGJzIGZyb20gJy4uL2xpYi9yZXdyaXRlSGJzLmpzJztcblxuZnVuY3Rpb24gaXNKc0ZpbGUoaWQpIHtcbiAgcmV0dXJuIGlkLmVuZHNXaXRoKCcuanMnKSB8fCBpZC5lbmRzV2l0aCgnLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzSGJzRmlsZShpZCkge1xuICByZXR1cm4gaWQuZW5kc1dpdGgoJy5oYnMnKTtcbn1cblxuZnVuY3Rpb24gaXNDc3NGaWxlKGlkKSB7XG4gIHJldHVybiBpZC5lbmRzV2l0aCgnLmNzcycpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cmFuc2Zvcm1Kc0ZpbGUoY29kZSwgaWQpIHtcbiAgY29uc3QgY3NzUGF0aCA9IGlkLmVuZHNXaXRoKCcuaGJzJylcbiAgICA/IGlkLnJlcGxhY2UoL1xcLmhicyQvLCAnLmNzcycpXG4gICAgOiBpZC5yZXBsYWNlKC8oXFwuaGJzKT9cXC4oKGpzKXwodHMpKSQvLCAnLmNzcycpO1xuICBjb25zdCBjc3NGaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG5cbiAgY29uc3QgY3NzRXhpc3RzID0gYXdhaXQgZnNFeGlzdHMoY3NzUGF0aCk7XG4gIGxldCBjc3M7XG5cbiAgaWYgKGNzc0V4aXN0cykge1xuICAgIGNzcyA9IGF3YWl0IHJlYWRGaWxlKGNzc1BhdGgsICd1dGY4Jyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGUsXG4gICAgICBtYXA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGFkZCBjc3MgaW1wb3J0IGZvciBqcyBhbmQgZ2pzIGZpbGVzXG4gIGNvZGUgPSBgaW1wb3J0ICcuLyR7Y3NzRmlsZU5hbWV9JztcXG5cXG4ke2NvZGV9YDtcblxuICAvLyByZXdyaXRlIGhicyBpbiBqcyBpbiBjYXNlIGl0IGlzIGdqcyBmaWxlIChmb3IgZ2pzIGZpbGVzIGhicyBpcyBhbHJlYWR5IGluIGpzIGZpbGUpXG5cbiAgY29uc3QgcmV3cml0dGVuQ29kZSA9IHJlcGxhY2VIYnNJbkpzKGNvZGUsIChoYnMpID0+IHtcbiAgICBjb25zdCB7IGNsYXNzZXMsIHRhZ3MgfSA9IGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3MpO1xuICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goY3NzUGF0aCk7XG4gICAgY29uc3QgcmV3cml0dGVuID0gcmV3cml0ZUhicyhoYnMsIGNsYXNzZXMsIHRhZ3MsIHBvc3RmaXgpO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb2RlOiByZXdyaXR0ZW5Db2RlLFxuICAgIG1hcDogbnVsbCxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJhbnNmb3JtQ3NzRmlsZShjb2RlLCBpZCwgbGF5ZXJOYW1lLCBlbWl0RmlsZSkge1xuICBjb25zdCBqc1BhdGggPSBpZC5yZXBsYWNlKC9cXC5jc3MkLywgJy5nanMnKTtcbiAgY29uc3QgZ3RzUGF0aCA9IGlkLnJlcGxhY2UoL1xcLmNzcyQvLCAnLmd0cycpO1xuICBjb25zdCBoYnNQYXRoID0gaWQucmVwbGFjZSgvXFwuY3NzJC8sICcuaGJzJyk7XG5cbiAgY29uc3QgW2pzRXhpc3RzLCBndHNFeGlzdHMsIGhic0V4aXN0c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZnNFeGlzdHMoanNQYXRoKSxcbiAgICBmc0V4aXN0cyhndHNQYXRoKSxcbiAgICBmc0V4aXN0cyhoYnNQYXRoKSxcbiAgXSk7XG5cbiAgaWYgKGpzRXhpc3RzIHx8IGhic0V4aXN0cyB8fCBndHNFeGlzdHMpIHtcbiAgICBjb25zdCBwb3N0Zml4ID0gZ2VuZXJhdGVIYXNoKGlkKTtcblxuICAgIGNvZGUgPSByZXdyaXRlQ3NzKGNvZGUsIHBvc3RmaXgsIHBhdGguYmFzZW5hbWUoaWQpLCBsYXllck5hbWUpO1xuICB9XG5cbiAgY29uc3QgZW1pdHRlZEZpbGVOYW1lID0gaWQucmVwbGFjZShwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ3NyYy8nKSwgJycpO1xuXG4gIGVtaXRGaWxlKHtcbiAgICB0eXBlOiAnYXNzZXQnLFxuICAgIGZpbGVOYW1lOiBlbWl0dGVkRmlsZU5hbWUsXG4gICAgc291cmNlOiBjb2RlLFxuICB9KTtcblxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVVucGx1Z2luKFxuICAvKipcbiAgICogQHR5cGVkZWYge29iamVjdH0gT3B0aW9uc1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2xheWVyTmFtZV0gdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRvIHBsYWNlIHRoZSBnZW5lcmF0ZWQgY3NzLiBEZWZhdWx0cyB0byBcImNvbXBvbmVudHNcIlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgKG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ2VtYmVyLXNjb3BlZC1jc3MtdW5wbHVnaW4nLFxuXG4gICAgICBnZW5lcmF0ZUJ1bmRsZShhLCBidW5kbGUpIHtcbiAgICAgICAgbGV0IGNzc0ZpbGVzID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgYXNzZXQgaW4gYnVuZGxlKSB7XG4gICAgICAgICAgY29uc3QgY3NzQXNzZXQgPSBhc3NldC5yZXBsYWNlKCdqcycsICdjc3MnKTtcblxuICAgICAgICAgIGlmICghYXNzZXQuZW5kc1dpdGgoJ2pzJykgfHwgIWJ1bmRsZVtjc3NBc3NldF0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5lbnZpcm9ubWVudCA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAgICAgY3NzRmlsZXMucHVzaChidW5kbGVbY3NzQXNzZXRdLnNvdXJjZSk7XG4gICAgICAgICAgICBkZWxldGUgYnVuZGxlW2Nzc0Fzc2V0XTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3NzSW1wb3J0ID0gcGF0aC5iYXNlbmFtZShhc3NldC5yZXBsYWNlKCcuanMnLCAnLmNzcycpKTtcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydExpbmUgPSBgaW1wb3J0ICcuLyR7Y3NzSW1wb3J0fSc7YDtcblxuICAgICAgICAgICAgLy8gYWRkIGltcG9ydCB0byBqcyBmaWxlc1xuICAgICAgICAgICAgaWYgKGJ1bmRsZVthc3NldF0uY29kZS5pbmRleE9mKGltcG9ydExpbmUpIDwgMCkge1xuICAgICAgICAgICAgICBidW5kbGVbYXNzZXRdLmNvZGUgPSBgJHtpbXBvcnRMaW5lfVxcbmAgKyBidW5kbGVbYXNzZXRdLmNvZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LmVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgdGhpcy5lbWl0RmlsZSh7XG4gICAgICAgICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgICAgICAgZmlsZU5hbWU6ICdzY29wZWQuY3NzJyxcbiAgICAgICAgICAgIHNvdXJjZTogY3NzRmlsZXMuam9pbignXFxuJyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIGxvYWRJbmNsdWRlKGlkKSB7XG4gICAgICAvLyAgIHJldHVybiBpc0pzRmlsZShpZCkgfHwgaXNDc3NGaWxlKGlkKSB8fCBpc0hic0ZpbGUoaWQpO1xuICAgICAgLy8gfSxcbiAgICAgIHRyYW5zZm9ybShjb2RlLCBqc1BhdGgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhCUyBmaWxlcyBhcmUgYWN0dWFsbHkgSlMgZmlsZXMgd2l0aCBhIGNhbGwgdG8gcHJlY29tcGlsZVRlbXBsYXRlXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoaXNIYnNGaWxlKGpzUGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtSnNGaWxlKGNvZGUsIGpzUGF0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNKc0ZpbGUoanNQYXRoKSkge1xuICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1Kc0ZpbGUoY29kZSwganNQYXRoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Nzc0ZpbGUoanNQYXRoKSkge1xuICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1Dc3NGaWxlKFxuICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgIGpzUGF0aCxcbiAgICAgICAgICAgIG9wdGlvbnM/LmxheWVyTmFtZSxcbiAgICAgICAgICAgIHRoaXMuZW1pdEZpbGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxuKTtcbiIsICJpbXBvcnQgYmFiZWxQYXJzZXIgZnJvbSAnQGJhYmVsL3BhcnNlcic7XG5pbXBvcnQgcmVjYXN0IGZyb20gJ3JlY2FzdCc7XG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgcGFyc2VyOiB7XG4gICAgcGFyc2Uoc291cmNlKSB7XG4gICAgICByZXR1cm4gYmFiZWxQYXJzZXIucGFyc2Uoc291cmNlLCB7XG4gICAgICAgIHNvdXJjZVR5cGU6ICdtb2R1bGUnLFxuICAgICAgICBhbGxvd0ltcG9ydEV4cG9ydEV2ZXJ5d2hlcmU6IHRydWUsXG4gICAgICAgIHRva2VuczogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc2NyaXB0LCByZXBsYWNlRnVuY3Rpb24pIHtcbiAgY29uc3QgYXN0ID0gcmVjYXN0LnBhcnNlKHNjcmlwdCwgcGFyc2VPcHRpb25zKTtcblxuICByZWNhc3QudmlzaXQoYXN0LCB7XG4gICAgdmlzaXRDYWxsRXhwcmVzc2lvbihwYXRoKSB7XG4gICAgICBjb25zdCBub2RlID0gcGF0aC5ub2RlO1xuXG4gICAgICAvKipcbiAgICAgICAqIF9fR0xJTU1FUl9URU1QTEFURSBpcyBmb3IgdXNlIHdpdGhcbiAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9OdWxsVm94UG9wdWxpL3JvbGx1cC1wbHVnaW4tZ2xpbW1lci10ZW1wbGF0ZS10YWcvXG4gICAgICAgKiB3aGljaCB1c2VzXG4gICAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vZW1iZXItdGVtcGxhdGUtaW1wb3J0cy9lbWJlci10ZW1wbGF0ZS1pbXBvcnRzL1xuICAgICAgICogQHYzLCB3aGljaCBpcyBrbm93biB0byBoYXZlIGEgbG90IG9mIHBhcnNlciBidWdzLlxuICAgICAgICpcbiAgICAgICAqIGluIEBlbWJyb2lkZXIvYWRkb24tZGV2QHY0LCB3ZSBoYXZlIG5hdGl2ZSBHSlMgc3VwcG9ydFxuICAgICAgICogYW5kIHdlIGRvbid0IGlubGluZSBjby1sb2NhdGVkIGhicyBhbmQgSlMgKG9yIHJhdGhlciwgYSByb2xsdXAgb3B0aW1pemF0aW9uIGxhdGVyIGRvZXMgaXQgZm9yIHVzKS5cbiAgICAgICAqIEluc3RlYWQsIHdlIGltcG9ydCwgd2hpY2ggbG9va3MgbGlrZSB0aGlzOlxuICAgICAgICogYGBgXG4gICAgICAgKiBpbXBvcnQgVEVNUExBVEUgZnJvbSAnLi90aGUtZmlsZS5oYnMnO1xuICAgICAgICpcbiAgICAgICAqIC4uLlxuICAgICAgICpcbiAgICAgICAqIHNldENvbXBvbmVudFRlbXBsYXRlKFRFTVBMQVRFLCBYKTtcbiAgICAgICAqIGBgYFxuICAgICAgICogQW5kIHdlIGRvbid0IHdhbnQgdG8gZW50ZXIgdGhpcyBjb2RlcGF0aCAob3IgcmF0aGVyLCBpdCBuby1vcHMpLlxuICAgICAgICogX0JVVF8sIGJlY2F1c2UgdGhpcyBmaWxlIGltcG9ydHMgdGhlIGhicyBmaWxlLCB3ZSdsbCBlbmQgdXAgaGVyZSBsYXRlclxuICAgICAgICogYW5kIHJlYWR5IHRvIGhpdCB0aGUgYHByZWNvbXBpbGVUZW1wbGF0ZWAgY29kZXBhdGguXG4gICAgICAgKi9cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ19fR0xJTU1FUl9URU1QTEFURScgfHxcbiAgICAgICAgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ3ByZWNvbXBpbGVUZW1wbGF0ZSdcbiAgICAgICkge1xuICAgICAgICBpZiAobm9kZS5hcmd1bWVudHNbMF0udHlwZSA9PT0gJ1RlbXBsYXRlTGl0ZXJhbCcpIHtcbiAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS5xdWFzaXNbMF0udmFsdWUucmF3ID0gcmVwbGFjZUZ1bmN0aW9uKFxuICAgICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0ucXVhc2lzWzBdLnZhbHVlLnJhdyxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJyB8fFxuICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnR5cGUgPT09ICdMaXRlcmFsJ1xuICAgICAgICApIHtcbiAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS52YWx1ZSA9IHJlcGxhY2VGdW5jdGlvbihub2RlLmFyZ3VtZW50c1swXS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy50cmF2ZXJzZShwYXRoKTtcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gcmVjYXN0LnByaW50KGFzdCkuY29kZTtcbn1cbiIsICJpbXBvcnQgcmVjYXN0IGZyb20gJ2VtYmVyLXRlbXBsYXRlLXJlY2FzdCc7XG5cbmltcG9ydCByZW5hbWVDbGFzcyBmcm9tICcuL3JlbmFtZUNsYXNzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUhicyhoYnMsIGNsYXNzZXMsIHRhZ3MsIHBvc3RmaXgpIHtcbiAgbGV0IGFzdCA9IHJlY2FzdC5wYXJzZShoYnMpO1xuICBsZXQgc3RhY2sgPSBbXTtcblxuICByZWNhc3QudHJhdmVyc2UoYXN0LCB7XG4gICAgQXR0ck5vZGUobm9kZSkge1xuICAgICAgaWYgKG5vZGUubmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgICBpZiAobm9kZS52YWx1ZS50eXBlID09PSAnVGV4dE5vZGUnICYmIG5vZGUudmFsdWUuY2hhcnMpIHtcbiAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhub2RlLnZhbHVlLmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgIG5vZGUudmFsdWUuY2hhcnMgPSByZW5hbWVkQ2xhc3M7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS52YWx1ZS50eXBlID09PSAnQ29uY2F0U3RhdGVtZW50Jykge1xuICAgICAgICAgIGZvciAobGV0IHBhcnQgb2Ygbm9kZS52YWx1ZS5wYXJ0cykge1xuICAgICAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBwYXJ0LmNoYXJzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKHBhcnQuY2hhcnMsIHBvc3RmaXgsIGNsYXNzZXMpO1xuXG4gICAgICAgICAgICAgIHBhcnQuY2hhcnMgPSByZW5hbWVkQ2xhc3M7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICAgICAgICByZWNhc3QudHJhdmVyc2UocGFydCwge1xuICAgICAgICAgICAgICAgIFN0cmluZ0xpdGVyYWwobm9kZSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBvc3RmaXgsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBub2RlLnZhbHVlID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBFbGVtZW50Tm9kZShub2RlKSB7XG4gICAgICBpZiAodGFncy5oYXMobm9kZS50YWcpKSB7XG4gICAgICAgIC8vIGNoZWNrIGlmIGNsYXNzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0c1xuICAgICAgICBjb25zdCBjbGFzc0F0dHIgPSBub2RlLmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5uYW1lID09PSAnY2xhc3MnKTtcblxuICAgICAgICBpZiAoY2xhc3NBdHRyKSB7XG4gICAgICAgICAgY2xhc3NBdHRyLnZhbHVlLmNoYXJzICs9ICcgJyArIHBvc3RmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcHVzaCBjbGFzcyBhdHRyaWJ1dGVcbiAgICAgICAgICBub2RlLmF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgICAgIHJlY2FzdC5idWlsZGVycy5hdHRyKCdjbGFzcycsIHJlY2FzdC5idWlsZGVycy50ZXh0KHBvc3RmaXgpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIEFsbDoge1xuICAgICAgZW50ZXIobm9kZSkge1xuICAgICAgICBzdGFjay5wdXNoKG5vZGUpO1xuICAgICAgfSxcbiAgICAgIGV4aXQoKSB7XG4gICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgfSxcbiAgICB9LFxuXG4gICAgTXVzdGFjaGVTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgbGV0IGNzc0NsYXNzO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUucGF0aD8ub3JpZ2luYWwgPT09ICdzY29wZWQtY2xhc3MnICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLnBhdGg/LnBhdGg/Lm9yaWdpbmFsID09PSAnc2NvcGVkLWNsYXNzJyAmJlxuICAgICAgICBub2RlLnBhdGg/LnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGF0aD8ucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNzc0NsYXNzID0gbm9kZS5wYXRoLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNzc0NsYXNzKSB7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gcmVjYXN0LmJ1aWxkZXJzLnRleHQocmVuYW1lQ2xhc3MoY3NzQ2xhc3MsIHBvc3RmaXgpKTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICAgICAgaWYgKHBhcmVudC50eXBlID09PSAnQXR0ck5vZGUnKSB7XG4gICAgICAgICAgcGFyZW50LnF1b3RlVHlwZSA9ICdcIic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dE5vZGU7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFN1YkV4cHJlc3Npb24obm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICBub2RlLnBhdGg/Lm9yaWdpbmFsID09PSAnc2NvcGVkLWNsYXNzJyAmJlxuICAgICAgICBub2RlLnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNzc0NsYXNzID0gbm9kZS5wYXJhbXNbMF0udmFsdWU7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gcmVjYXN0LmJ1aWxkZXJzLmxpdGVyYWwoXG4gICAgICAgICAgJ1N0cmluZ0xpdGVyYWwnLFxuICAgICAgICAgIHJlbmFtZUNsYXNzKGNzc0NsYXNzLCBwb3N0Zml4KSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdGV4dE5vZGU7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG5cbiAgbGV0IHJlc3VsdCA9IHJlY2FzdC5wcmludChhc3QpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVuYW1lQ2xhc3MoXG4gIGNsYXNzTmFtZTogc3RyaW5nLFxuICBwb3N0Zml4OiBzdHJpbmcsXG4gIGNsYXNzZXNJbkNzcz86IFNldDxzdHJpbmc+LFxuKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSBjbGFzc05hbWUuc3BsaXQoL1xccysvKTtcbiAgY29uc3QgcmVuYW1lZENsYXNzZXMgPSBjbGFzc2VzXG4gICAgLmZpbHRlcigoYykgPT4gYylcbiAgICAubWFwKChjKSA9PiBjLnRyaW0oKSlcbiAgICAubWFwKChjKSA9PiB7XG4gICAgICBpZiAoIWNsYXNzZXNJbkNzcyB8fCBjbGFzc2VzSW5Dc3MuaGFzKGMpKSB7XG4gICAgICAgIGlmIChjLmVuZHNXaXRoKHBvc3RmaXgpKSByZXR1cm4gYztcblxuICAgICAgICByZXR1cm4gYyArICdfJyArIHBvc3RmaXg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0pXG4gICAgLmpvaW4oJyAnKTtcblxuICBjb25zdCByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcyA9IGNsYXNzTmFtZS5yZXBsYWNlKFxuICAgIGNsYXNzTmFtZS50cmltU3RhcnQoKS50cmltRW5kKCksXG4gICAgcmVuYW1lZENsYXNzZXMsXG4gICk7XG5cbiAgcmV0dXJuIHJlbmFtZWRXaXRoUHJlc2VydmVkU3BhY2VzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsc0JBQStCO0FBRS9CLElBQU8sK0JBQVEsZ0NBQWUsTUFBTTtBQUNsQyxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBc0JSO0FBQ0YsQ0FBQzs7O0FDM0JELElBQUFBLG9CQUFpQjtBQUVqQixJQUFBQyxtQkFBK0I7OztBQ0YvQixxQkFBbUI7QUFDbkIsdUJBQWlCO0FBRWpCLHFCQUFtQjs7O0FDSG5CLHlCQUFnQjtBQUVELFNBQVIseUJBQTBDLGNBQXNCO0FBQ3JFLFNBQU8s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ICAibmFtZXMiOiBbImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X3VucGx1Z2luIiwgIm1kNSIsICJwYXRoIiwgImZpbmRVcCIsICJmc1N5bmMiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAiaW1wb3J0X3Byb21pc2VzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAicGF0aCIsICJiYWJlbFBhcnNlciIsICJyZWNhc3QiLCAicGF0aCIsICJwYXRoIiwgImltcG9ydF9wcm9taXNlcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImdsb2IiLCAiaW1wb3J0X3Bvc3Rjc3MiLCAiaW1wb3J0X3Bvc3Rjc3Nfc2VsZWN0b3JfcGFyc2VyIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgInBhdGgiLCAiaW1wb3J0X3Byb21pc2VzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X3VucGx1Z2luIiwgImltcG9ydF9wYXJzZXIiLCAiaW1wb3J0X3JlY2FzdCIsICJwYXJzZU9wdGlvbnMiLCAiYmFiZWxQYXJzZXIiLCAicmVjYXN0IiwgInBhdGgiLCAicmVjYXN0IiwgIm5vZGUiLCAicGF0aCJdCn0K
744
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkL2luZGV4LmpzIiwgIi4uLy4uLy4uL3NyYy9idWlsZC9hcHAtY3NzLXVucGx1Z2luLmpzIiwgIi4uLy4uLy4uL3NyYy9idWlsZC9hcHAtanMtdW5wbHVnaW4uanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZUFic29sdXRlUGF0aEhhc2guanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gudHMiLCAiLi4vLi4vLi4vc3JjL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9pc0luc2lkZUdsb2JhbC5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlcGxhY2VHbGltbWVyQXN0LmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZnNFeGlzdHMuanMiLCAiLi4vLi4vLi4vc3JjL2J1aWxkL2FwcC1zY29wZWRjc3Mtd2VicGFjay5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2dldEZpbGVzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUNzcy5qcyIsICIuLi8uLi8uLi9zcmMvYnVpbGQvc2NvcGVkLWNzcy11bnBsdWdpbi5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlcGxhY2VIYnNJbkpzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUhicy5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlbmFtZUNsYXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgYXBwQ3NzVW5wbHVnaW4gZnJvbSAnLi9hcHAtY3NzLXVucGx1Z2luLmpzJztcbmltcG9ydCBhcHBKc1VucGx1Z2luIGZyb20gJy4vYXBwLWpzLXVucGx1Z2luLmpzJztcbmltcG9ydCBhcHBTY29wZWRjc3NXZWJwYWNrIGZyb20gJy4vYXBwLXNjb3BlZGNzcy13ZWJwYWNrLmpzJztcbmltcG9ydCBzY29wZWRDc3NVbnBsdWdpbiBmcm9tICcuL3Njb3BlZC1jc3MtdW5wbHVnaW4uanMnO1xuXG5leHBvcnQge1xuICBhcHBDc3NVbnBsdWdpbixcbiAgYXBwSnNVbnBsdWdpbixcbiAgYXBwU2NvcGVkY3NzV2VicGFjayxcbiAgc2NvcGVkQ3NzVW5wbHVnaW4sXG59O1xuIiwgImltcG9ydCB7IGNyZWF0ZVVucGx1Z2luIH0gZnJvbSAndW5wbHVnaW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVVbnBsdWdpbigoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1jc3MtdW5wbHVnaW4nLFxuXG4gICAgLy8gbG9hZEluY2x1ZGUoaWQpe1xuICAgIC8vICAgaWYoaWQuZW5kc1dpdGgoJy5jc3MnKSl7XG4gICAgLy8gICAgIHJldHVybiB0cnVlO1xuICAgIC8vICAgfVxuICAgIC8vIH0sXG5cbiAgICAvLyBsb2FkKGlkKXtcbiAgICAvLyAgIC8vIHRoaXMuYWRkV2F0Y2hGaWxlKGlkKTtcbiAgICAvLyAgIHJldHVybiAnY29uc29sZS5sb2coJyArIEpTT04uc3RyaW5naWZ5KGlkKSArICcpOyc7XG4gICAgLy8gfSxcblxuICAgIC8vIHRyYW5zZm9ybUluY2x1ZGUoaWQpIHtcbiAgICAvLyAgIGlmKGlkLmVuZHNXaXRoKCcuY3NzJykpe1xuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LFxuXG4gICAgLy8gYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgLy8gICByZXR1cm4gY29kZTtcbiAgICAvLyB9LFxuICB9O1xufSk7XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgY3JlYXRlVW5wbHVnaW4gfSBmcm9tICd1bnBsdWdpbic7XG5cbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi4vbGliL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzIGZyb20gJy4uL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJlcGxhY2VHbGltbWVyQXN0IGZyb20gJy4uL2xpYi9yZXBsYWNlR2xpbW1lckFzdC5qcyc7XG5cbmZ1bmN0aW9uKiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzKSB7XG4gIGZvciAobGV0IGluc3RydWN0aW9uIG9mIG9wY29kZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5zdHJ1Y3Rpb24pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB5aWVsZCBpbnN0cnVjdGlvbjtcblxuICAgIGZvciAobGV0IHN1Ykluc3RydWN0aW9uIG9mIGl0ZXJhdGVPcGNvZGVzKGluc3RydWN0aW9uKSkge1xuICAgICAgeWllbGQgc3ViSW5zdHJ1Y3Rpb247XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVUYWdOYW1lKHRhZykge1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGFnO1xuICB9IGVsc2Uge1xuICAgIGlmICh0YWcgPT09IDApIHtcbiAgICAgIHJldHVybiAnZGl2JztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMSkge1xuICAgICAgcmV0dXJuICdzcGFuJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMikge1xuICAgICAgcmV0dXJuICdwJztcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gMykge1xuICAgICAgcmV0dXJuICdhJztcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdGFnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVVucGx1Z2luKCh7IGFwcERpciB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2FwcC1qcy11bnBsdWdpbicsXG5cbiAgICB0cmFuc2Zvcm1JbmNsdWRlKGlkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpZC5pbmNsdWRlcyhwYXRoLmJhc2VuYW1lKGFwcERpcikpICYmXG4gICAgICAgIChpZC5lbmRzV2l0aCgnLmpzJykgfHwgaWQuZW5kc1dpdGgoJy5oYnMnKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRoaXMgd2hvbGUgdGhpbmcgaXMgZXJyb3IgcHJvbmUsIGFuZCB3ZSBzaG91bGQgc3dpdGNoIHRoZSBlbWJyb2lkZXJcbiAgICAgKiB0ZWNobmlxdWUgdG8gdXNpbmcgYSBiYWJlbCBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBVc2luZyBhIHdlYnBhY2sgcGx1Z2luIGlzIHRvbyBsYXRlIGluIHRoZSBwcm9jZXNzLlxuICAgICAqIFdlIGRvbid0IHdhbnQgdG8gYmUgZGVhbGluZyB3aXRoIHdpcmUtZm9ybWF0LCBiZWNhdXNlXG4gICAgICogLSBpdCdzIG5vdCBwdWJsaWMgQVBJXG4gICAgICogLSBpdCBjYW4gY2hhbmdlIGFzIGVtYmVyLXNvdXJjZSBpcyB1cGdyYWRlZFxuICAgICAqIC0gdGhlIG51bWJlcnMgYXJlIG5vdCBcInN0YWJsZVwiLCBpbiB0aGF0IHRoZXkgYXJlIGJpdHdpc2UgYW5kZWQgYW5kIG9yZWRcbiAgICAgKiAgIHRvZ2V0aGVyIHNvIHRoYXQgc3RvcmFnZSBpcyBlZmZpY2llbnQgLS0gd2hpY2ggbWVhbnMgd2UnZCBuZWVkIHRvIGtub3dcbiAgICAgKiAgIGFsbCB0aGUgb3Bjb2RlcyBhbmQgYXBwcm9wcmlhdGVseSB8IC8gJiB0byBkZWNvbnN0cnVjdCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBsZXQgY3NzUGF0aCA9IGlkLnJlcGxhY2UoLyhcXC5qcyl8KFxcLmhicykvLCAnLmNzcycpO1xuICAgICAgbGV0IG1vZHVsZUdyb3VwUGF0aCA9IGNzc1BhdGg7XG5cbiAgICAgIC8qKlxuICAgICAgICogUG9kcyBzdXBwb3J0XG4gICAgICAgKlxuICAgICAgICogTm90ZSB0aGF0IFBvZC1jb21wb25lbnRzIHdpbGwgbmV2ZXIgYmUgc3VwcG9ydGVkLlxuICAgICAgICovXG4gICAgICBsZXQgaXNQb2QgPSAhaWQuaW5jbHVkZXMoJy9jb21wb25lbnRzLycpICYmIGlkLmVuZHNXaXRoKCcvdGVtcGxhdGUuaGJzJyk7XG5cbiAgICAgIGlmIChpc1BvZCkge1xuICAgICAgICBjc3NQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShpZCksICdzdHlsZXMuY3NzJyk7XG4gICAgICAgIG1vZHVsZUdyb3VwUGF0aCA9IHBhdGguZGlybmFtZShjc3NQYXRoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9zdGZpeCA9IGdlbmVyYXRlSGFzaChtb2R1bGVHcm91cFBhdGgpO1xuXG4gICAgICByZXR1cm4gYXdhaXQgcmVwbGFjZUdsaW1tZXJBc3QoY29kZSwgaWQsIChvcGNvZGVzLCBjc3MpID0+IHtcbiAgICAgICAgY29uc3QgeyBjbGFzc2VzLCB0YWdzIH0gPSBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKTtcbiAgICAgICAgLy8gdGhpcy5hZGRXYXRjaEZpbGUoY3NzUGF0aCk7XG4gICAgICAgIGNvbnN0IGluc2VydGlvbnMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpbnN0cnVjdGlvbiBvZiBpdGVyYXRlT3Bjb2RlcyhvcGNvZGVzWzBdKSkge1xuICAgICAgICAgIC8vIHJlcGxhY2UgY2xhc3Nlc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzBdID09PSAxNCAmJlxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMV0gPT09IDAgJiZcbiAgICAgICAgICAgIGluc3RydWN0aW9uWzJdICYmXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXS5zcGxpdCgnICcpLmZpbmQoKGkpID0+IGNsYXNzZXMuaGFzKGkudHJpbSgpKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICBpbnN0cnVjdGlvblsyXSA9IGluc3RydWN0aW9uWzJdXG4gICAgICAgICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgICAgICAgIC5tYXAoKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUudHJpbSgpICYmIGNsYXNzZXMuaGFzKGNsYXNzTmFtZS50cmltKCkpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnRyaW0oKSArICdfJyArIHBvc3RmaXg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlcGxhY2Ugc3RyaW5ncyBpbiBpZiBjb25kaXRpb25zXG4gICAgICAgICAgLy8gdGhpcyBpcyBicml0dGxlLCBiZWNhdXNlIHN1YmV4cHJlc3Npb25zIGNhbiBiZSBkZWVwbHkgbmVzdGVkXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyB0aGlzIHBhcnRpY3VsYXIgb25lIGlzIDxkaXYgY2xhc3M9XCJnbG9iYWwtcHJvYmFibHkge3tpZiBAY29uZGl0aW9uIFwiYS1sb2NhbC1jbGFzc1wifX1cIj5cIlxuICAgICAgICAgIC8vIGlmIChpbnN0cnVjdGlvblswXSA9PT0gMTUgJiYgQXJyYXkuaXNBcnJheShpbnN0cnVjdGlvblsxXSkgJiYgaW5zdHJ1Y3Rpb25bMV1bMF0gPT09IDI5KSB7XG5cbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBhZGQgcG9zdGZpeCB0byB0YWdzXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bMF0gPT09IDEwICYmXG4gICAgICAgICAgICB0YWdzLmhhcyhpbmZsYXRlVGFnTmFtZShpbnN0cnVjdGlvblsxXSkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyAxMCAtIG9wZW4gZWxlbWVudFxuICAgICAgICAgICAgbGV0IGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbjtcblxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbGV0IGkgPSBvcGNvZGVzWzBdLmluZGV4T2YoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICAgICAgICBpIDw9IG9wY29kZXNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICBpKytcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAob3Bjb2Rlc1swXVtpXVswXSA9PT0gMTQgJiYgb3Bjb2Rlc1swXVtpXVsxXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIDE0IC0gY3NzIGF0dHJpYnV0ZSwgMCAtIGNsYXNzXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDbGFzc0luc3RydWN0aW9uID0gb3Bjb2Rlc1swXVtpXTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG9wY29kZXNbMF1baV1bMF0gPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgLy8gMTIgLSBmbHVzaCBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nQ2xhc3NJbnN0cnVjdGlvbikge1xuICAgICAgICAgICAgICBleGlzdGluZ0NsYXNzSW5zdHJ1Y3Rpb25bMl0gKz0gJyAnICsgcG9zdGZpeDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNsYXNzSW5zdHJ1Y3Rpb24gPSBbMTQsIDAsIHBvc3RmaXgsIHVuZGVmaW5lZF07XG5cbiAgICAgICAgICAgICAgaW5zZXJ0aW9ucy5wdXNoKFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluc2VydCBuZXcgaW5zdHJ1Y3Rpb25zXG4gICAgICAgIGZvciAobGV0IFtpbnN0cnVjdGlvbiwgY2xhc3NJbnN0cnVjdGlvbl0gb2YgaW5zZXJ0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3Bjb2Rlc1swXS5pbmRleE9mKGluc3RydWN0aW9uKTtcblxuICAgICAgICAgIG9wY29kZXNbMF0uc3BsaWNlKGluZGV4ICsgMSwgMCwgY2xhc3NJbnN0cnVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXdyaXRlIG9wY29kZXNcbiAgICAgICAgLy8gY29uc3QgZGJnID0gbmV3IFdpcmVGb3JtYXREZWJ1Z2dlcihvcGNvZGVzKTtcbiAgICAgICAgLy8gY29uc3Qgd2ZkID0gZGJnLmZvcm1hdChvcGNvZGVzKTtcblxuICAgICAgICByZXR1cm4gb3Bjb2RlcztcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59KTtcbiIsICJpbXBvcnQgZnNTeW5jIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcblxuaW1wb3J0IGdlbmVyYXRlSGFzaCBmcm9tICcuL2dlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaC50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlSGFzaEZyb21BYnNvbHV0ZVBhdGgoYWJzb2x1dGVQYXRoKSB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgb2YgYGFwcFBhdGhgIHVsdGltYXRlbHkgdHJhbnNmb3JtcyB0aGUgYGFic29sdXRlUGF0aGBcbiAgICogaW50byB0aGUgZXhhY3Qgc3RyaW5nIHRoYXQgZm9sa3Mgd2lsbCBwYXNzIHRvIGByZWxhdGl2ZVBhdGhgXG4gICAqIGF0IHJ1bnRpbWUuXG4gICAqL1xuICBjb25zdCBtb2R1bGVQYXRoID0gYXBwUGF0aChhYnNvbHV0ZVBhdGgpO1xuXG4gIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobW9kdWxlUGF0aCk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NvcGVkUGF0aFRvTW9kdWxlUGF0aChwYWNrYWdlU2NvcGVkUGF0aCkge1xuICAvKipcbiAgICogKkJ5IGNvbnZlbnRpb24qLCBgc3JjYCBpcyBvbWl0dGVkIGZyb20gY29tcG9uZW50IHBhdGhzLlxuICAgKiBXZSBjYW4gcmVmbGVjdCB0aGUgc2FtZSBiZWhhdmlvciBieSByZXBsYWNpbmcgc3JjL1xuICAgKiB3aXRoIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQ1NTIGlzbid0IGVtaXR0ZWQgYXMgYSBjby1sb2NhdGVkIG1vZHVsZSwgYnV0XG4gICAqIHRvIGtlZXAgY29udmVudGlvbnMgY29uc2lzdGVudCBhY3Jvc3MgbGFuZ3VhZ2VzLFxuICAgKiB3ZSBjYW4gcHJldGVuZCBpdCBpcy5cbiAgICpcbiAgICogQW55IGN1c3RvbWl6YXRpb24gYmV5b25kIHJlbW92aW5nIGBzcmNgIGFuZCBgYXBwYCBpcyBwb3RlbnRpYWxseSBjb25mdXNpbmcuXG4gICAqIElmIHdlIG5lZWQgZnVydGhlciBjdXN0b21pemF0aW9ucywgd2UnbGwgd2FudCB0byBtYXRjaCBvbiBgZXhwb3J0c2AgaW4gdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgcGFja2FnZS5qc29uXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gcGFja2FnZVNjb3BlZFBhdGgucmVwbGFjZSgvXlxcL3NyY1xcLy8sICcvJyk7XG5cbiAgbGV0IHBhcnNlZCA9IHBhdGgucGFyc2UocGFja2FnZVJlbGF0aXZlKTtcblxuICAvKipcbiAgICogUG9kcyBzdXBwb3J0LlxuICAgKiBGb3IgcG9kcywgd2UgY2hvcCBvZmYgdGhlIHdob2xlIGZpbGUsIGFuZCB1c2UgdGhlIGRpciBuYW1lIGFzIHRoZSBcIm1vZHVsZVBhdGhcIlxuICAgKlxuICAgKiBOb3RlIHRoYXQgcG9kcyBmb3IgY29tcG9uZW50cyB3aWxsIG5ldmVyIGJlIHN1cHBvcnRlZC5cbiAgICovXG4gIGxldCBpc1BvZCA9XG4gICAgIXBhY2thZ2VSZWxhdGl2ZS5pbmNsdWRlcygnL2NvbXBvbmVudHMvJykgJiZcbiAgICAocGFja2FnZVJlbGF0aXZlLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuaGJzJykgfHxcbiAgICAgIHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgndGVtcGxhdGUuanMnKSk7XG5cbiAgaWYgKGlzUG9kKSB7XG4gICAgcmV0dXJuIHBhcnNlZC5kaXI7XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXh0ZW5zaW9uIGlzIHBhc3NlZCwgcmVtb3ZlIGl0LlxuICAgKiBXaGVuIHVzaW5nIHBhY2thZ2VycywgZm9sa3MgYXJlIHVzZWQgdG8gbm90IGhhdmluZyB0byBzcGVjaWZ5IGV4dGVuc2lvbnMgZm9yIGZpbGVzLlxuICAgKiBTaW5jZSB3ZSBkb24ndCBldmVuIGVtaXQgY3NzIGZpbGVzIGNvLWxvY2F0ZWQgdG8gZWFjaCBtb2R1bGUsXG4gICAqIHRoaXMgaGVscHMgdXMgbm90IGNvbnZleSBhIGxpZSB0aGF0IGEgZmlsZSBtYXkgZXhpc3QgaW4gYXQgcnVudGltZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgYDxtb2R1bGUtbmFtZT4vY29tcG9uZW50cy9idXR0b25gLlxuICAgKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBleHRlbnNpb24gaXMsIGJlY2F1c2UgeW91IGNhbiBvbmx5IGhhdmUgb25lIGNzcyBmaWxlXG4gICAqIGZvciB0aGUgYnV0dG9uIG1vZHVsZSBhbnl3YXkuXG4gICAqL1xuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhdGguam9pbihwYXJzZWQuZGlyLCBwYXJzZWQubmFtZSk7XG5cbiAgcmV0dXJuIGxvY2FsUGFja2FnZXJTdHlsZVBhdGg7XG59XG5cbi8qKlxuICogcmV0dXJucyB0aGUgYXBwLW1vZHVsZSBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZVxuICpcbiAqIFRoaXMgYXNzdW1lcyBub3JtYWwgZW1iZXIgYXBwIGNvbnZlbnRpb25zXG4gKlxuICogd2hpY2ggaXMgYDxwYWNrYWdlLmpzb24jbmFtZT4vcGF0aC10by1maWxlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwUGF0aChzb3VyY2VQYXRoKSB7XG4gIGxldCB3b3Jrc3BhY2VQYXRoID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG4gIGxldCBuYW1lID0gd29ya3NwYWNlUGFja2FnZU5hbWUoc291cmNlUGF0aCk7XG5cbiAgLyoqXG4gICAqICBVbmRlciBlbWJyb2lkZXIgYnVpbGRzLCB0aGUgc3BlYy1jb21wbGlhbnQgdmVyc2lvbiBvZiB0aGUgYXBwXG4gICAqIGhhcyBhbGwgdGhlIGZpbGVzIHVuZGVyIGEgZm9sZGVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHBhY2thZ2UgbmFtZSxcbiAgICogcmF0aGVyIHRoYW4gXCJhcHBcIi5cbiAgICovXG4gIGxldCBwYWNrYWdlUmVsYXRpdmUgPSBzb3VyY2VQYXRoLnJlcGxhY2Uod29ya3NwYWNlUGF0aCwgJycpO1xuXG4gIGxldCBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoID0gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVJlbGF0aXZlKTtcblxuICByZXR1cm4gYCR7bmFtZX0ke2xvY2FsUGFja2FnZXJTdHlsZVBhdGh9YDtcbn1cblxuY29uc3QgQ0FDSEUgPSBuZXcgU2V0KCk7XG5cbi8qKlxuICogRm9yIGEgZ2l2ZW4gc291cmNlIHBhdGgsIGlmIHdlIGhhdmUgc2VlbiBhXG4gKiBzb3VyY2UgZmlsZSB3aXRoaW4gdGhlIHdvcmtzcGFjZSBkaXJlY3RvcnksXG4gKiBmaW5kIHRoYXQgd29ya3NwYWNlIGRpcmVjdG9yeSBhbmQgcmV0dXJuIGl0LlxuICovXG5mdW5jdGlvbiBoYXNTZWVuKHNvdXJjZVBhdGgpIHtcbiAgZm9yIChsZXQgZW50cnkgb2YgQ0FDSEUpIHtcbiAgICBpZiAoc291cmNlUGF0aC5zdGFydHNXaXRoKGVudHJ5KSkge1xuICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH1cbiAgfVxuXG4gIC8vIHdlIGhhdmUgbm90IHNlZW4gdGhpcyBzb3VyY2UgcGF0aCB5ZXRcbiAgcmV0dXJuO1xufVxuXG4vKipcbiAqIFBvcHVsYXRlcyB0aGUgXCJzZWVuXCIgd29ya3NwYWNlIGNhY2hlLFxuICogc28gdGhhdCB3ZSBkb24ndCBoaXQgdGhlIGZpbGUgc3lzdGVtIHRvbyBvZnRlbi5cbiAqL1xuZnVuY3Rpb24gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgc2VlbiA9IGhhc1NlZW4oc291cmNlUGF0aCk7XG5cbiAgaWYgKHNlZW4pIHtcbiAgICByZXR1cm4gc2VlbjtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGZpbmRVcC5zeW5jKCdwYWNrYWdlLmpzb24nLCB7XG4gICAgY3dkOiBwYXRoLmRpcm5hbWUoc291cmNlUGF0aCksXG4gIH0pO1xuXG4gIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBwYXRoLmRpcm5hbWUocGFja2FnZUpzb25QYXRoKTtcblxuICBDQUNIRS5hZGQod29ya3NwYWNlUGF0aCk7XG5cbiAgcmV0dXJuIHdvcmtzcGFjZVBhdGg7XG59XG5cbmNvbnN0IE1BTklGRVNUX0NBQ0hFID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIHJldHVybnMgdGhlIHBhY2thZ2UuanNvbiNuYW1lIGZvciBhIGdpdmVuIHNvdXJjZVBhdGhcbiAqL1xuZnVuY3Rpb24gd29ya3NwYWNlUGFja2FnZU5hbWUoc291cmNlUGF0aCkge1xuICBjb25zdCB3b3Jrc3BhY2UgPSBmaW5kV29ya3NwYWNlUGF0aChzb3VyY2VQYXRoKTtcblxuICBsZXQgZXhpc3RpbmcgPSBNQU5JRkVTVF9DQUNIRS5nZXQod29ya3NwYWNlKTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gZXhpc3RpbmcubmFtZTtcbiAgfVxuXG4gIGxldCBidWZmZXIgPSBmc1N5bmMucmVhZEZpbGVTeW5jKHBhdGguam9pbih3b3Jrc3BhY2UsICdwYWNrYWdlLmpzb24nKSk7XG4gIGxldCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKCk7XG4gIGxldCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuICBNQU5JRkVTVF9DQUNIRS5zZXQod29ya3NwYWNlLCBqc29uKTtcblxuICByZXR1cm4ganNvbi5uYW1lO1xufVxuXG4iLCAiaW1wb3J0IG1kNSBmcm9tICdibHVlaW1wLW1kNSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlUmVsYXRpdmVQYXRoSGFzaChyZWxhdGl2ZVBhdGg6IHN0cmluZykge1xuICByZXR1cm4gJ2UnICsgbWQ1KHJlbGF0aXZlUGF0aCkuc3Vic3RyaW5nKDAsIDgpO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gZ2V0Q2xhc3Nlc0FuZFRhZ3Moc2VsLCBjbGFzc2VzLCB0YWdzKSB7XG4gIGNvbnN0IHRyYW5zZm9ybSA9IChzbHMpID0+IHtcbiAgICBzbHMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAnY2xhc3MnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgY2xhc3Nlcy5hZGQoc2VsZWN0b3IudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci50eXBlID09PSAndGFnJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHRhZ3MuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBwYXJzZXIodHJhbnNmb3JtKS5wcm9jZXNzU3luYyhzZWwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHRhZ3MgPSBuZXcgU2V0KCk7XG5cbiAgY29uc3QgYXN0ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuXG4gIGFzdC53YWxrKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3J1bGUnKSB7XG4gICAgICBnZXRDbGFzc2VzQW5kVGFncyhub2RlLnNlbGVjdG9yLCBjbGFzc2VzLCB0YWdzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7IGNsYXNzZXMsIHRhZ3MgfTtcbn1cblxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzSW5zaWRlR2xvYmFsKG5vZGUsIGZ1bmMpIHtcbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAncHNldWRvJyAmJiBwYXJlbnQudmFsdWUgPT09ICc6Z2xvYmFsJykgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzSW5zaWRlR2xvYmFsKHBhcmVudCwgZnVuYyk7XG59XG4iLCAiaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBiYWJlbFBhcnNlciBmcm9tICdAYmFiZWwvcGFyc2VyJztcbmltcG9ydCByZWNhc3QgZnJvbSAncmVjYXN0JztcblxuaW1wb3J0IGZzRXhpc3RzIGZyb20gJy4vZnNFeGlzdHMuanMnO1xuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSB7XG4gIHBhcnNlcjogYmFiZWxQYXJzZXIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiByZXBsYWNlR2xpbW1lckFzdChzY3JpcHQsIGlkLCByZXBsYWNlRnVuY3Rpb24pIHtcbiAgY29uc3QgYXN0ID0gcmVjYXN0LnBhcnNlKHNjcmlwdCwgcGFyc2VPcHRpb25zKTtcbiAgY29uc3QgY3NzUGF0aCA9IGlkLnJlcGxhY2UoLyhcXC5qcyl8KFxcLmhicykvLCAnLmNzcycpO1xuICBsZXQgY3NzO1xuXG4gIGNvbnN0IGNzc0V4aXN0cyA9IGF3YWl0IGZzRXhpc3RzKGNzc1BhdGgpO1xuXG4gIGlmIChjc3NFeGlzdHMpIHtcbiAgICBjc3MgPSBhd2FpdCByZWFkRmlsZShjc3NQYXRoLCAndXRmLTgnKTtcbiAgfVxuXG4gIGlmICghY3NzKSB7XG4gICAgcmV0dXJuIHNjcmlwdDtcbiAgfVxuXG4gIHJlY2FzdC52aXNpdChhc3QsIHtcbiAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGVQYXRoKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVBhdGgubm9kZTtcblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAnY3JlYXRlVGVtcGxhdGVGYWN0b3J5JyAmJlxuICAgICAgICBub2RlLmFyZ3VtZW50cy5sZW5ndGggPT09IDFcbiAgICAgICkge1xuICAgICAgICBjb25zdCBibG9ja1Byb3AgPSBub2RlLmFyZ3VtZW50c1swXS5wcm9wZXJ0aWVzLmZpbmQoXG4gICAgICAgICAgKHByb3ApID0+IHByb3Aua2V5LnZhbHVlID09PSAnYmxvY2snLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBvcGNvZGVzID0gSlNPTi5wYXJzZShibG9ja1Byb3AudmFsdWUudmFsdWUpO1xuICAgICAgICBjb25zdCBuZXdPcGNvZGVzID0gcmVwbGFjZUZ1bmN0aW9uKG9wY29kZXMsIGNzcyk7XG5cbiAgICAgICAgYmxvY2tQcm9wLnZhbHVlLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkobmV3T3Bjb2Rlcyk7XG5cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGNzc1BhdGgpO1xuICAgICAgICAvLyBpZiAoIWltcG9ydFBhdGgpIHtcbiAgICAgICAgLy8gICB1bnBsdWdpbi5hZGRXYXRjaEZpbGUoY3NzUGF0aCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3QgaW1wb3J0Q3NzID0gcmVjYXN0LnBhcnNlKFxuICAgICAgICAgIGBpbXBvcnQgJy4vJHtmaWxlTmFtZX0nO1xcbmAsXG4gICAgICAgICAgcGFyc2VPcHRpb25zLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbXBvcnRDc3NOb2RlID0gaW1wb3J0Q3NzLnByb2dyYW0uYm9keVswXTtcblxuICAgICAgICBhc3QucHJvZ3JhbS5ib2R5LnVuc2hpZnQoaW1wb3J0Q3NzTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJhdmVyc2Uobm9kZVBhdGgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHJlc3VsdFNjcmlwdCA9IHJlY2FzdC5wcmludChhc3QpLmNvZGU7XG5cbiAgcmV0dXJuIHJlc3VsdFNjcmlwdDtcbn1cbiIsICJpbXBvcnQgeyBzdGF0IH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChwYXRoKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgc3RhdChwYXRoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiLy8gaW1wb3J0IHsgUmF3U291cmNlIH0gIGZyb20gJ3dlYnBhY2stc291cmNlcyc7XG5pbXBvcnQgeyByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgZnNFeGlzdHMgZnJvbSAnLi4vbGliL2ZzRXhpc3RzLmpzJztcbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi4vbGliL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2V0RmlsZXMgZnJvbSAnLi4vbGliL2dldEZpbGVzLmpzJztcbmltcG9ydCByZXdyaXRlQ3NzIGZyb20gJy4uL2xpYi9yZXdyaXRlQ3NzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3Mge1xuICBhcHBseShjb21waWxlcikge1xuICAgIGlmIChwcm9jZXNzLmVudi5FTUJFUl9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbXBpbGVyLmhvb2tzLmVtaXQudGFwQXN5bmMoXG4gICAgICAnc2NvcGVkLXdlYnBhY2stcGx1Z2luJyxcbiAgICAgIGFzeW5jIChjb21waWxhdGlvbiwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjc3NGaWxlcyA9IGF3YWl0IGdldEZpbGVzKFxuICAgICAgICAgICAgcGF0aC5yZXNvbHZlKGNvbXBpbGVyLmNvbnRleHQsICcqKi8qLmNzcycpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBSZXdyaXRlIHRoZSBDU1MgZmlsZXNcbiAgICAgICAgICBjb25zdCByZXdyaXR0ZW5GaWxlcyA9IFtdO1xuXG4gICAgICAgICAgLy8gY29uc3QgcmV3cml0ZW5GaWxlcyA9IGNzc0ZpbGVzLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgY3NzRmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKGAvJHtwYXRoLmJhc2VuYW1lKGNvbXBpbGVyLmNvbnRleHQpfS5jc3NgKSkge1xuICAgICAgICAgICAgICAvLyBpbXBvcnQgc2NvcGVkLmNzcyBpbnRvIGFwcC5jc3NcbiAgICAgICAgICAgICAgbGV0IGFwcENzcyA9IGF3YWl0IHJlYWRGaWxlKGZpbGUsICd1dGYtOCcpO1xuXG4gICAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlLCBgQGltcG9ydCBcInNjb3BlZC5jc3NcIjtcXG4ke2FwcENzc31gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgcGF0aC5iYXNlbmFtZShjb21waWxlci5jb250ZXh0KSArICcuY3NzJyxcbiAgICAgICAgICAgICAgICAndGVzdC1zdXBwb3J0LmNzcycsXG4gICAgICAgICAgICAgIF0uc29tZSgoZikgPT4gZmlsZS5lbmRzV2l0aChmKSkgfHxcbiAgICAgICAgICAgICAgZmlsZS5pbmNsdWRlcygnL3ZlbmRvci8nKSB8fFxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChhd2FpdCBmc0V4aXN0cyhmaWxlLnJlcGxhY2UoJy5jc3MnLCAnLmpzJykpKSB8fFxuICAgICAgICAgICAgICAgIChhd2FpdCBmc0V4aXN0cyhmaWxlLnJlcGxhY2UoJy5jc3MnLCAnLmhicycpKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZSk7XG4gICAgICAgICAgICBjb25zdCBwb3N0Zml4ID0gZ2VuZXJhdGVIYXNoKGZpbGVOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGNzcyA9IGF3YWl0IHJlYWRGaWxlKGZpbGUsICd1dGYtOCcpO1xuICAgICAgICAgICAgY29uc3QgcmV3cml0dGVuQ3NzID0gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lKTtcblxuICAgICAgICAgICAgcmV3cml0dGVuRmlsZXMucHVzaChyZXdyaXR0ZW5Dc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENvbmNhdGVuYXRlIHRoZSByZXdyaXR0ZW4gQ1NTIGZpbGVzXG4gICAgICAgICAgbGV0IGNvbmNhdGVuYXRlZENTUyA9IHJld3JpdHRlbkZpbGVzLmpvaW4oJ1xcblxcbicpO1xuXG4gICAgICAgICAgLy8gU3RvcmUgdGhlIGNvbmNhdGVuYXRlZCBDU1MgaW4gdGhlIGFzc2V0cy9zY29wZWQtY29tcG9uZW50cy5jc3NcbiAgICAgICAgICBjb21waWxhdGlvbi5hc3NldHNbJ2Fzc2V0cy9zY29wZWQuY3NzJ10gPSB7XG4gICAgICAgICAgICBzb3VyY2U6ICgpID0+IGNvbmNhdGVuYXRlZENTUyxcbiAgICAgICAgICAgIHNpemU6ICgpID0+IGNvbmNhdGVuYXRlZENTUy5sZW5ndGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiIsICJpbXBvcnQgZ2xvYiBmcm9tICdnbG9iJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGdsb2JQYXRoKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZ2xvYihnbG9iUGF0aCwgKGVyciwgZmlsZXMpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoZmlsZXMpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBwYXJzZXIgZnJvbSAncG9zdGNzcy1zZWxlY3Rvci1wYXJzZXInO1xuXG5pbXBvcnQgaXNJbnNpZGVHbG9iYWwgZnJvbSAnLi9pc0luc2lkZUdsb2JhbC5qcyc7XG5cbmZ1bmN0aW9uIHJld3JpdGVTZWxlY3RvcihzZWwsIHBvc3RmaXgpIHtcbiAgY29uc3QgdHJhbnNmb3JtID0gKHNlbGVjdG9ycykgPT4ge1xuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdjbGFzcycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICBzZWxlY3Rvci52YWx1ZSArPSAnXycgKyBwb3N0Zml4O1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci50eXBlID09PSAndGFnJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnJlcGxhY2VXaXRoKFxuICAgICAgICAgIHBhcnNlci50YWcoeyB2YWx1ZTogc2VsZWN0b3IudmFsdWUgfSksXG4gICAgICAgICAgcGFyc2VyLmNsYXNzTmFtZSh7IHZhbHVlOiBwb3N0Zml4IH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gcmVtb3ZlIDpnbG9iYWxcbiAgICBzZWxlY3RvcnMud2Fsaygoc2VsZWN0b3IpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rvci50eXBlID09PSAncHNldWRvJyAmJiBzZWxlY3Rvci52YWx1ZSA9PT0gJzpnbG9iYWwnKSB7XG4gICAgICAgIHNlbGVjdG9yLnJlcGxhY2VXaXRoKC4uLnNlbGVjdG9yLm5vZGVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSBwYXJzZXIodHJhbnNmb3JtKS5wcm9jZXNzU3luYyhzZWwpO1xuXG4gIHJldHVybiB0cmFuc2Zvcm1lZDtcbn1cblxuZnVuY3Rpb24gaXNJbnNpZGVLZXlmcmFtZXMobm9kZSkge1xuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlO1xuICBpZiAocGFyZW50LnR5cGUgPT09ICdhdHJ1bGUnICYmIHBhcmVudC5uYW1lID09PSAna2V5ZnJhbWVzJykgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzSW5zaWRlS2V5ZnJhbWVzKHBhcmVudCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJld3JpdGVDc3MoY3NzLCBwb3N0Zml4LCBmaWxlTmFtZSwgbGF5ZXJOYW1lKSB7XG4gIGNvbnN0IGxheWVyTmFtZVdpdGhEZWZhdWx0ID0gbGF5ZXJOYW1lID8/ICdjb21wb25lbnRzJztcbiAgY29uc3QgYXN0ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuXG4gIGFzdC53YWxrKChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3J1bGUnICYmICFpc0luc2lkZUtleWZyYW1lcyhub2RlKSkge1xuICAgICAgbm9kZS5zZWxlY3RvciA9IHJld3JpdGVTZWxlY3Rvcihub2RlLnNlbGVjdG9yLCBwb3N0Zml4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHJld3JpdHRlbkNzcyA9IGFzdC50b1N0cmluZygpO1xuXG4gIGlmICghbGF5ZXJOYW1lV2l0aERlZmF1bHQpIHtcbiAgICByZXR1cm4gYC8qICR7ZmlsZU5hbWV9ICovXFxuJHtyZXdyaXR0ZW5Dc3N9XFxuYDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgYC8qICR7ZmlsZU5hbWV9ICovXFxuQGxheWVyICR7bGF5ZXJOYW1lV2l0aERlZmF1bHR9IHtcXG5cXG5gICtcbiAgICByZXdyaXR0ZW5Dc3MgK1xuICAgICdcXG59XFxuJ1xuICApO1xufVxuXG4iLCAiaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB7IGNyZWF0ZVVucGx1Z2luIH0gZnJvbSAndW5wbHVnaW4nO1xuXG5pbXBvcnQgZnNFeGlzdHMgZnJvbSAnLi4vbGliL2ZzRXhpc3RzLmpzJztcbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi4vbGliL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzIGZyb20gJy4uL2xpYi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJlcGxhY2VIYnNJbkpzIGZyb20gJy4uL2xpYi9yZXBsYWNlSGJzSW5Kcy5qcyc7XG5pbXBvcnQgcmV3cml0ZUNzcyBmcm9tICcuLi9saWIvcmV3cml0ZUNzcy5qcyc7XG5pbXBvcnQgcmV3cml0ZUhicyBmcm9tICcuLi9saWIvcmV3cml0ZUhicy5qcyc7XG5cbmZ1bmN0aW9uIGlzSnNGaWxlKGlkKSB7XG4gIHJldHVybiAoXG4gICAgaWQuZW5kc1dpdGgoJy5qcycpIHx8XG4gICAgaWQuZW5kc1dpdGgoJy50cycpIHx8XG4gICAgaWQuZW5kc1dpdGgoJy5nanMnKSB8fFxuICAgIGlkLmVuZHNXaXRoKCcuZ3RzJylcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNIYnNGaWxlKGlkKSB7XG4gIHJldHVybiBpZC5lbmRzV2l0aCgnLmhicycpO1xufVxuXG5mdW5jdGlvbiBpc0Nzc0ZpbGUoaWQpIHtcbiAgcmV0dXJuIGlkLmVuZHNXaXRoKCcuY3NzJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybUpzRmlsZShjb2RlLCBpZCkge1xuICBjb25zdCBjc3NQYXRoID0gaWQuZW5kc1dpdGgoJy5oYnMnKVxuICAgID8gaWQucmVwbGFjZSgvXFwuaGJzJC8sICcuY3NzJylcbiAgICA6IGlkLnJlcGxhY2UoLyhcXC5oYnMpP1xcLihqc3x0c3xnanN8Z3RzKSQvLCAnLmNzcycpO1xuICBjb25zdCBjc3NGaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY3NzUGF0aCk7XG5cbiAgY29uc3QgY3NzRXhpc3RzID0gYXdhaXQgZnNFeGlzdHMoY3NzUGF0aCk7XG4gIGxldCBjc3M7XG5cbiAgaWYgKGNzc0V4aXN0cykge1xuICAgIGNzcyA9IGF3YWl0IHJlYWRGaWxlKGNzc1BhdGgsICd1dGY4Jyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGUsXG4gICAgICBtYXA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGFkZCBjc3MgaW1wb3J0IGZvciBqcyBhbmQgZ2pzIGZpbGVzXG4gIGNvZGUgPSBgaW1wb3J0ICcuLyR7Y3NzRmlsZU5hbWV9JztcXG5cXG4ke2NvZGV9YDtcblxuICAvLyByZXdyaXRlIGhicyBpbiBqcyBpbiBjYXNlIGl0IGlzIGdqcyBmaWxlIChmb3IgZ2pzIGZpbGVzIGhicyBpcyBhbHJlYWR5IGluIGpzIGZpbGUpXG5cbiAgY29uc3QgcmV3cml0dGVuQ29kZSA9IHJlcGxhY2VIYnNJbkpzKGNvZGUsIChoYnMsIHNjb3BlZENsYXNzKSA9PiB7XG4gICAgY29uc3QgeyBjbGFzc2VzLCB0YWdzIH0gPSBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MoY3NzKTtcbiAgICBjb25zdCBwb3N0Zml4ID0gZ2VuZXJhdGVIYXNoKGNzc1BhdGgpO1xuICAgIGNvbnN0IHJld3JpdHRlbiA9IHJld3JpdGVIYnMoaGJzLCBjbGFzc2VzLCB0YWdzLCBwb3N0Zml4LCBzY29wZWRDbGFzcyk7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGNvZGU6IHJld3JpdHRlbkNvZGUsXG4gICAgbWFwOiBudWxsLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cmFuc2Zvcm1Dc3NGaWxlKGNvZGUsIGlkLCBsYXllck5hbWUsIGVtaXRGaWxlKSB7XG4gIGNvbnN0IGpzUGF0aCA9IGlkLnJlcGxhY2UoL1xcLmNzcyQvLCAnLmdqcycpO1xuICBjb25zdCBndHNQYXRoID0gaWQucmVwbGFjZSgvXFwuY3NzJC8sICcuZ3RzJyk7XG4gIGNvbnN0IGhic1BhdGggPSBpZC5yZXBsYWNlKC9cXC5jc3MkLywgJy5oYnMnKTtcblxuICBjb25zdCBbanNFeGlzdHMsIGd0c0V4aXN0cywgaGJzRXhpc3RzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBmc0V4aXN0cyhqc1BhdGgpLFxuICAgIGZzRXhpc3RzKGd0c1BhdGgpLFxuICAgIGZzRXhpc3RzKGhic1BhdGgpLFxuICBdKTtcblxuICBpZiAoanNFeGlzdHMgfHwgaGJzRXhpc3RzIHx8IGd0c0V4aXN0cykge1xuICAgIGNvbnN0IHBvc3RmaXggPSBnZW5lcmF0ZUhhc2goaWQpO1xuXG4gICAgY29kZSA9IHJld3JpdGVDc3MoY29kZSwgcG9zdGZpeCwgcGF0aC5iYXNlbmFtZShpZCksIGxheWVyTmFtZSk7XG4gIH1cblxuICBjb25zdCBlbWl0dGVkRmlsZU5hbWUgPSBpZC5yZXBsYWNlKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnc3JjLycpLCAnJyk7XG5cbiAgZW1pdEZpbGUoe1xuICAgIHR5cGU6ICdhc3NldCcsXG4gICAgZmlsZU5hbWU6IGVtaXR0ZWRGaWxlTmFtZSxcbiAgICBzb3VyY2U6IGNvZGUsXG4gIH0pO1xuXG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVW5wbHVnaW4oXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBPcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbGF5ZXJOYW1lXSB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGxhY2UgdGhlIGdlbmVyYXRlZCBjc3MuIERlZmF1bHRzIHRvIFwiY29tcG9uZW50c1wiXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnZW1iZXItc2NvcGVkLWNzcy11bnBsdWdpbicsXG5cbiAgICAgIGdlbmVyYXRlQnVuZGxlKGEsIGJ1bmRsZSkge1xuICAgICAgICBsZXQgY3NzRmlsZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBhc3NldCBpbiBidW5kbGUpIHtcbiAgICAgICAgICBjb25zdCBjc3NBc3NldCA9IGFzc2V0LnJlcGxhY2UoJ2pzJywgJ2NzcycpO1xuXG4gICAgICAgICAgaWYgKCFhc3NldC5lbmRzV2l0aCgnanMnKSB8fCAhYnVuZGxlW2Nzc0Fzc2V0XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LmVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgICBjc3NGaWxlcy5wdXNoKGJ1bmRsZVtjc3NBc3NldF0uc291cmNlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBidW5kbGVbY3NzQXNzZXRdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjc3NJbXBvcnQgPSBwYXRoLmJhc2VuYW1lKGFzc2V0LnJlcGxhY2UoJy5qcycsICcuY3NzJykpO1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0TGluZSA9IGBpbXBvcnQgJy4vJHtjc3NJbXBvcnR9JztgO1xuXG4gICAgICAgICAgICAvLyBhZGQgaW1wb3J0IHRvIGpzIGZpbGVzXG4gICAgICAgICAgICBpZiAoYnVuZGxlW2Fzc2V0XS5jb2RlLmluZGV4T2YoaW1wb3J0TGluZSkgPCAwKSB7XG4gICAgICAgICAgICAgIGJ1bmRsZVthc3NldF0uY29kZSA9IGAke2ltcG9ydExpbmV9XFxuYCArIGJ1bmRsZVthc3NldF0uY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgICB0aGlzLmVtaXRGaWxlKHtcbiAgICAgICAgICAgIHR5cGU6ICdhc3NldCcsXG4gICAgICAgICAgICBmaWxlTmFtZTogJ3Njb3BlZC5jc3MnLFxuICAgICAgICAgICAgc291cmNlOiBjc3NGaWxlcy5qb2luKCdcXG4nKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgdHJhbnNmb3JtKGNvZGUsIGpzUGF0aCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogSEJTIGZpbGVzIGFyZSBhY3R1YWxseSBKUyBmaWxlcyB3aXRoIGEgY2FsbCB0byBwcmVjb21waWxlVGVtcGxhdGVcbiAgICAgICAgICovXG4gICAgICAgIGlmIChpc0hic0ZpbGUoanNQYXRoKSkge1xuICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1Kc0ZpbGUoY29kZSwganNQYXRoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0pzRmlsZShqc1BhdGgpKSB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybUpzRmlsZShjb2RlLCBqc1BhdGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQ3NzRmlsZShqc1BhdGgpKSB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybUNzc0ZpbGUoXG4gICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAganNQYXRoLFxuICAgICAgICAgICAgb3B0aW9ucz8ubGF5ZXJOYW1lLFxuICAgICAgICAgICAgdGhpcy5lbWl0RmlsZSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG4pO1xuIiwgImltcG9ydCBiYWJlbFBhcnNlciBmcm9tICdAYmFiZWwvcGFyc2VyJztcbmltcG9ydCByZWNhc3QgZnJvbSAncmVjYXN0JztcblxuY29uc3QgcGFyc2VPcHRpb25zID0ge1xuICBwYXJzZXI6IHtcbiAgICBwYXJzZShzb3VyY2UpIHtcbiAgICAgIHJldHVybiBiYWJlbFBhcnNlci5wYXJzZShzb3VyY2UsIHtcbiAgICAgICAgc291cmNlVHlwZTogJ21vZHVsZScsXG4gICAgICAgIGFsbG93SW1wb3J0RXhwb3J0RXZlcnl3aGVyZTogdHJ1ZSxcbiAgICAgICAgdG9rZW5zOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIHJlbW92ZVNjb3BlQmFnUmVmZXJlbmNlKGFzdCwgc2NvcGVkQ2xhc3MpIHtcbiAgaWYgKCFzY29wZWRDbGFzcykgcmV0dXJuO1xuXG4gIHJlY2FzdC52aXNpdChhc3QsIHtcbiAgICB2aXNpdE9iamVjdFByb3BlcnR5KHBhdGgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcGF0aC5ub2RlLnZhbHVlLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICBwYXRoLm5vZGUudmFsdWUubmFtZSA9PT0gc2NvcGVkQ2xhc3NcbiAgICAgICkge1xuICAgICAgICBwYXRoLnBydW5lKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYXZlcnNlKHBhdGgpO1xuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc2NyaXB0LCByZXBsYWNlRnVuY3Rpb24pIHtcbiAgY29uc3QgYXN0ID0gcmVjYXN0LnBhcnNlKHNjcmlwdCwgcGFyc2VPcHRpb25zKTtcbiAgbGV0IGltcG9ydGVkU2NvcGVkQ2xhc3M7XG5cbiAgcmVjYXN0LnZpc2l0KGFzdCwge1xuICAgIHZpc2l0SW1wb3J0RGVjbGFyYXRpb24ocGF0aCkge1xuICAgICAgaWYgKHBhdGgubm9kZS5zb3VyY2UudmFsdWUgPT09ICdlbWJlci1zY29wZWQtY3NzJykge1xuICAgICAgICBsZXQgc3BlY2lmaWVyID0gcGF0aC5ub2RlLnNwZWNpZmllcnMuZmluZChcbiAgICAgICAgICAoeCkgPT4geC5pbXBvcnRlZC5uYW1lID09PSAnc2NvcGVkQ2xhc3MnLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChzcGVjaWZpZXIpIHtcbiAgICAgICAgICBpbXBvcnRlZFNjb3BlZENsYXNzID0gc3BlY2lmaWVyLmxvY2FsLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBwYXRoLnBydW5lKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYXZlcnNlKHBhdGgpO1xuICAgIH0sXG4gICAgdmlzaXRDYWxsRXhwcmVzc2lvbihwYXRoKSB7XG4gICAgICBjb25zdCBub2RlID0gcGF0aC5ub2RlO1xuXG4gICAgICBjb25zdCBzY29wZWRDbGFzcyA9IGltcG9ydGVkU2NvcGVkQ2xhc3MgPz8gJ3Njb3BlZC1jbGFzcyc7XG5cbiAgICAgIC8qKlxuICAgICAgICogX19HTElNTUVSX1RFTVBMQVRFIGlzIGZvciB1c2Ugd2l0aFxuICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL051bGxWb3hQb3B1bGkvcm9sbHVwLXBsdWdpbi1nbGltbWVyLXRlbXBsYXRlLXRhZy9cbiAgICAgICAqIHdoaWNoIHVzZXNcbiAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbWJlci10ZW1wbGF0ZS1pbXBvcnRzL2VtYmVyLXRlbXBsYXRlLWltcG9ydHMvXG4gICAgICAgKiBAdjMsIHdoaWNoIGlzIGtub3duIHRvIGhhdmUgYSBsb3Qgb2YgcGFyc2VyIGJ1Z3MuXG4gICAgICAgKlxuICAgICAgICogaW4gQGVtYnJvaWRlci9hZGRvbi1kZXZAdjQsIHdlIGhhdmUgbmF0aXZlIEdKUyBzdXBwb3J0XG4gICAgICAgKiBhbmQgd2UgZG9uJ3QgaW5saW5lIGNvLWxvY2F0ZWQgaGJzIGFuZCBKUyAob3IgcmF0aGVyLCBhIHJvbGx1cCBvcHRpbWl6YXRpb24gbGF0ZXIgZG9lcyBpdCBmb3IgdXMpLlxuICAgICAgICogSW5zdGVhZCwgd2UgaW1wb3J0LCB3aGljaCBsb29rcyBsaWtlIHRoaXM6XG4gICAgICAgKiBgYGBcbiAgICAgICAqIGltcG9ydCBURU1QTEFURSBmcm9tICcuL3RoZS1maWxlLmhicyc7XG4gICAgICAgKlxuICAgICAgICogLi4uXG4gICAgICAgKlxuICAgICAgICogc2V0Q29tcG9uZW50VGVtcGxhdGUoVEVNUExBVEUsIFgpO1xuICAgICAgICogYGBgXG4gICAgICAgKiBBbmQgd2UgZG9uJ3Qgd2FudCB0byBlbnRlciB0aGlzIGNvZGVwYXRoIChvciByYXRoZXIsIGl0IG5vLW9wcykuXG4gICAgICAgKiBfQlVUXywgYmVjYXVzZSB0aGlzIGZpbGUgaW1wb3J0cyB0aGUgaGJzIGZpbGUsIHdlJ2xsIGVuZCB1cCBoZXJlIGxhdGVyXG4gICAgICAgKiBhbmQgcmVhZHkgdG8gaGl0IHRoZSBgcHJlY29tcGlsZVRlbXBsYXRlYCBjb2RlcGF0aC5cbiAgICAgICAqL1xuICAgICAgaWYgKFxuICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAnX19HTElNTUVSX1RFTVBMQVRFJyB8fFxuICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAncHJlY29tcGlsZVRlbXBsYXRlJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnVGVtcGxhdGVMaXRlcmFsJykge1xuICAgICAgICAgIG5vZGUuYXJndW1lbnRzWzBdLnF1YXNpc1swXS52YWx1ZS5yYXcgPSByZXBsYWNlRnVuY3Rpb24oXG4gICAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS5xdWFzaXNbMF0udmFsdWUucmF3LFxuICAgICAgICAgICAgc2NvcGVkQ2xhc3MsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcgfHxcbiAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS50eXBlID09PSAnTGl0ZXJhbCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgbm9kZS5hcmd1bWVudHNbMF0udmFsdWUgPSByZXBsYWNlRnVuY3Rpb24oXG4gICAgICAgICAgICBub2RlLmFyZ3VtZW50c1swXS52YWx1ZSxcbiAgICAgICAgICAgIHNjb3BlZENsYXNzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW1wb3J0ZWRTY29wZWRDbGFzcykge1xuICAgICAgICAgIHJlbW92ZVNjb3BlQmFnUmVmZXJlbmNlKHBhdGgsIHNjb3BlZENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYXZlcnNlKHBhdGgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiByZWNhc3QucHJpbnQoYXN0KS5jb2RlO1xufVxuIiwgImltcG9ydCByZWNhc3QgZnJvbSAnZW1iZXItdGVtcGxhdGUtcmVjYXN0JztcblxuaW1wb3J0IHJlbmFtZUNsYXNzIGZyb20gJy4vcmVuYW1lQ2xhc3MuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXdyaXRlSGJzKFxuICBoYnMsXG4gIGNsYXNzZXMsXG4gIHRhZ3MsXG4gIHBvc3RmaXgsXG4gIHNjb3BlZENsYXNzID0gJ3Njb3BlZC1jbGFzcycsXG4pIHtcbiAgbGV0IGFzdCA9IHJlY2FzdC5wYXJzZShoYnMpO1xuICBsZXQgc3RhY2sgPSBbXTtcblxuICByZWNhc3QudHJhdmVyc2UoYXN0LCB7XG4gICAgQXR0ck5vZGUobm9kZSkge1xuICAgICAgaWYgKG5vZGUubmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgICBpZiAobm9kZS52YWx1ZS50eXBlID09PSAnVGV4dE5vZGUnICYmIG5vZGUudmFsdWUuY2hhcnMpIHtcbiAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhub2RlLnZhbHVlLmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgIG5vZGUudmFsdWUuY2hhcnMgPSByZW5hbWVkQ2xhc3M7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS52YWx1ZS50eXBlID09PSAnQ29uY2F0U3RhdGVtZW50Jykge1xuICAgICAgICAgIGZvciAobGV0IHBhcnQgb2Ygbm9kZS52YWx1ZS5wYXJ0cykge1xuICAgICAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBwYXJ0LmNoYXJzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKHBhcnQuY2hhcnMsIHBvc3RmaXgsIGNsYXNzZXMpO1xuXG4gICAgICAgICAgICAgIHBhcnQuY2hhcnMgPSByZW5hbWVkQ2xhc3M7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICAgICAgICByZWNhc3QudHJhdmVyc2UocGFydCwge1xuICAgICAgICAgICAgICAgIFN0cmluZ0xpdGVyYWwobm9kZSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3MoXG4gICAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBvc3RmaXgsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBub2RlLnZhbHVlID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBFbGVtZW50Tm9kZShub2RlKSB7XG4gICAgICBpZiAodGFncy5oYXMobm9kZS50YWcpKSB7XG4gICAgICAgIC8vIGNoZWNrIGlmIGNsYXNzIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0c1xuICAgICAgICBjb25zdCBjbGFzc0F0dHIgPSBub2RlLmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5uYW1lID09PSAnY2xhc3MnKTtcblxuICAgICAgICBpZiAoY2xhc3NBdHRyKSB7XG4gICAgICAgICAgY2xhc3NBdHRyLnZhbHVlLmNoYXJzICs9ICcgJyArIHBvc3RmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcHVzaCBjbGFzcyBhdHRyaWJ1dGVcbiAgICAgICAgICBub2RlLmF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgICAgIHJlY2FzdC5idWlsZGVycy5hdHRyKCdjbGFzcycsIHJlY2FzdC5idWlsZGVycy50ZXh0KHBvc3RmaXgpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIEFsbDoge1xuICAgICAgZW50ZXIobm9kZSkge1xuICAgICAgICBzdGFjay5wdXNoKG5vZGUpO1xuICAgICAgfSxcbiAgICAgIGV4aXQoKSB7XG4gICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgfSxcbiAgICB9LFxuXG4gICAgTXVzdGFjaGVTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgbGV0IGNzc0NsYXNzO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUucGF0aD8ub3JpZ2luYWwgPT09IHNjb3BlZENsYXNzICYmXG4gICAgICAgIG5vZGUucGFyYW1zPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnXG4gICAgICApIHtcbiAgICAgICAgY3NzQ2xhc3MgPSBub2RlLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLnBhdGg/LnBhdGg/Lm9yaWdpbmFsID09PSBzY29wZWRDbGFzcyAmJlxuICAgICAgICBub2RlLnBhdGg/LnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGF0aD8ucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNzc0NsYXNzID0gbm9kZS5wYXRoLnBhcmFtc1swXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNzc0NsYXNzKSB7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gcmVjYXN0LmJ1aWxkZXJzLnRleHQocmVuYW1lQ2xhc3MoY3NzQ2xhc3MsIHBvc3RmaXgpKTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICAgICAgaWYgKHBhcmVudC50eXBlID09PSAnQXR0ck5vZGUnKSB7XG4gICAgICAgICAgcGFyZW50LnF1b3RlVHlwZSA9ICdcIic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dE5vZGU7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFN1YkV4cHJlc3Npb24obm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICBub2RlLnBhdGg/Lm9yaWdpbmFsID09PSBzY29wZWRDbGFzcyAmJlxuICAgICAgICBub2RlLnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNzc0NsYXNzID0gbm9kZS5wYXJhbXNbMF0udmFsdWU7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gcmVjYXN0LmJ1aWxkZXJzLmxpdGVyYWwoXG4gICAgICAgICAgJ1N0cmluZ0xpdGVyYWwnLFxuICAgICAgICAgIHJlbmFtZUNsYXNzKGNzc0NsYXNzLCBwb3N0Zml4KSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdGV4dE5vZGU7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG5cbiAgbGV0IHJlc3VsdCA9IHJlY2FzdC5wcmludChhc3QpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVuYW1lQ2xhc3MoXG4gIGNsYXNzTmFtZTogc3RyaW5nLFxuICBwb3N0Zml4OiBzdHJpbmcsXG4gIGNsYXNzZXNJbkNzcz86IFNldDxzdHJpbmc+LFxuKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSBjbGFzc05hbWUuc3BsaXQoL1xccysvKTtcbiAgY29uc3QgcmVuYW1lZENsYXNzZXMgPSBjbGFzc2VzXG4gICAgLmZpbHRlcigoYykgPT4gYylcbiAgICAubWFwKChjKSA9PiBjLnRyaW0oKSlcbiAgICAubWFwKChjKSA9PiB7XG4gICAgICBpZiAoIWNsYXNzZXNJbkNzcyB8fCBjbGFzc2VzSW5Dc3MuaGFzKGMpKSB7XG4gICAgICAgIGlmIChjLmVuZHNXaXRoKHBvc3RmaXgpKSByZXR1cm4gYztcblxuICAgICAgICByZXR1cm4gYyArICdfJyArIHBvc3RmaXg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0pXG4gICAgLmpvaW4oJyAnKTtcblxuICBjb25zdCByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcyA9IGNsYXNzTmFtZS5yZXBsYWNlKFxuICAgIGNsYXNzTmFtZS50cmltU3RhcnQoKS50cmltRW5kKCksXG4gICAgcmVuYW1lZENsYXNzZXMsXG4gICk7XG5cbiAgcmV0dXJuIHJlbmFtZWRXaXRoUHJlc2VydmVkU3BhY2VzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsc0JBQStCO0FBRS9CLElBQU8sK0JBQVEsZ0NBQWUsTUFBTTtBQUNsQyxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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dGgiLCAiaW1wb3J0X3VucGx1Z2luIiwgIm1kNSIsICJwYXRoIiwgImZpbmRVcCIsICJmc1N5bmMiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAiaW1wb3J0X3Byb21pc2VzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAicGF0aCIsICJiYWJlbFBhcnNlciIsICJyZWNhc3QiLCAicGF0aCIsICJwYXRoIiwgImltcG9ydF9wcm9taXNlcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImdsb2IiLCAiaW1wb3J0X3Bvc3Rjc3MiLCAiaW1wb3J0X3Bvc3Rjc3Nfc2VsZWN0b3JfcGFyc2VyIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgInBhdGgiLCAiaW1wb3J0X3Byb21pc2VzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X3VucGx1Z2luIiwgImltcG9ydF9wYXJzZXIiLCAiaW1wb3J0X3JlY2FzdCIsICJwYXJzZU9wdGlvbnMiLCAiYmFiZWxQYXJzZXIiLCAicmVjYXN0IiwgInBhdGgiLCAicmVjYXN0IiwgIm5vZGUiLCAicGF0aCJdCn0K