ember-scoped-css 0.17.0 → 0.17.2

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.
@@ -367,7 +367,7 @@ var ScopedFilter = class extends import_broccoli_persistent_filter.default {
367
367
  for (let template of templates) {
368
368
  templateComparison.push(
369
369
  didTemplateChange(
370
- template.contents,
370
+ template,
371
371
  previousClasses,
372
372
  classes,
373
373
  tags,
@@ -452,4 +452,4 @@ var ScopedCssPreprocessor = class {
452
452
  return newOutput;
453
453
  }
454
454
  };
455
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xpYi9zY29wZWQtY3NzLXByZXByb2Nlc3Nvci5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2ZzRXhpc3RzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoLnRzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvaXNJbnNpZGVHbG9iYWwuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9yZXdyaXRlQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUhicy5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlbmFtZUNsYXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBDb25jYXQgZnJvbSAnYnJvY2NvbGktY29uY2F0JztcbmltcG9ydCB7IEZ1bm5lbCB9IGZyb20gJ2Jyb2Njb2xpLWZ1bm5lbCc7XG5pbXBvcnQgTWVyZ2VUcmVlcyBmcm9tICdicm9jY29saS1tZXJnZS10cmVlcyc7XG5pbXBvcnQgRmlsdGVyIGZyb20gJ2Jyb2Njb2xpLXBlcnNpc3RlbnQtZmlsdGVyJztcbmltcG9ydCB7IFByZXByb2Nlc3NvciB9IGZyb20gJ2NvbnRlbnQtdGFnJztcblxuaW1wb3J0IGZzRXhpc3RzIGZyb20gJy4vZnNFeGlzdHMuanMnO1xuaW1wb3J0IHsgcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGggfSBmcm9tICcuL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2VuZXJhdGVIYXNoIGZyb20gJy4vZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi9yZXdyaXRlQ3NzLmpzJztcbmltcG9ydCByZXdyaXRlSGJzIGZyb20gJy4vcmV3cml0ZUhicy5qcyc7XG5cbmNvbnN0IHAgPSBuZXcgUHJlcHJvY2Vzc29yKCk7XG5jb25zdCBDT01QT05FTlRfRVhURU5TSU9OUyA9IFsnaGJzJywgJ2pzJywgJ3RzJywgJ2dqcycsICdndHMnXTtcbmNvbnN0IFRFTVBMQVRFX0VYVEVOU0lPTlMgPSBbJ2hicycsICdnanMnLCAnZ3RzJ107XG5cbmNsYXNzIFNjb3BlZEZpbHRlciBleHRlbmRzIEZpbHRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudHNOb2RlLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihjb21wb25lbnRzTm9kZSwgb3B0aW9ucyk7XG4gICAgdGhpcy53YXJuaW5nU3RyZWFtID0gcHJvY2Vzcy5zdGRlcnI7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zKCkge1xuICAgIHJldHVybiBbJ2NzcyddO1xuICB9XG5cbiAgZ2V0IHRhcmdldEV4dGVuc2lvbigpIHtcbiAgICByZXR1cm4gJ2Nzcyc7XG4gIH1cblxuICBhc3luYyBwcm9jZXNzU3RyaW5nKGNvbnRlbnQsIHJlbGF0aXZlUGF0aCkge1xuICAgIC8vIGlnbm9yZSBjc3MgZmlsZXMgZm9yIGVtYmVyLWNzcy1tb2R1bGVzXG4gICAgaWYgKHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnLm1vZHVsZS5jc3MnKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIGNvcnJlc3BvbmRpbmcganMgZmlsZSBleGlzdHNcbiAgICBjb25zdCBleGlzdFByb21pc2VzID0gW107XG5cbiAgICBmb3IgKGxldCBpbnB1dFBhdGggb2YgdGhpcy5pbnB1dFBhdGhzKSB7XG4gICAgICBmb3IgKGxldCBleHQgb2YgQ09NUE9ORU5UX0VYVEVOU0lPTlMpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVDb21wb25lbnRQYXRoID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcLmNzcyQvLCAnLicgKyBleHQpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRQYXRoID0gcGF0aC5qb2luKGlucHV0UGF0aCwgcmVsYXRpdmVDb21wb25lbnRQYXRoKTtcblxuICAgICAgICBleGlzdFByb21pc2VzLnB1c2goZnNFeGlzdHMoY29tcG9uZW50UGF0aCkpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFBvZHMgc3VwcG9ydFxuICAgICAgICovXG4gICAgICBpZiAocmVsYXRpdmVQYXRoLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL3N0eWxlc1xcLmNzcyQvLCAndGVtcGxhdGUuaGJzJyk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIGRpcmVjdG9yeSk7XG5cbiAgICAgICAgZXhpc3RQcm9taXNlcy5wdXNoKGZzRXhpc3RzKHRlbXBsYXRlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0UmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGV4aXN0UHJvbWlzZXMpO1xuICAgIGNvbnN0IGNvbXBvbmVudEV4aXN0cyA9IGV4aXN0UmVzdWx0cy5zb21lKChyKSA9PiByKTtcblxuICAgIC8vIHJld3JpdGUgY3NzIGZpbGVcbiAgICBpZiAoY29tcG9uZW50RXhpc3RzKSB7XG4gICAgICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHJlbGF0aXZlUGF0aCk7XG5cbiAgICAgIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobG9jYWxQYWNrYWdlclN0eWxlUGF0aCk7XG5cbiAgICAgIGNvbnRlbnQgPSByZXdyaXRlQ3NzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBoYXNoLFxuICAgICAgICByZWxhdGl2ZVBhdGgsXG4gICAgICAgIHRoaXMub3B0aW9ucy5nZXRVc2VyT3B0aW9ucz8uKCk/LmxheWVyTmFtZSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcG9zdFByb2Nlc3MocmVzdWx0cywgcmVsYXRpdmVQYXRoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJIHx8IHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnLm1vZHVsZS5jc3MnKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaW5wdXRQYXRoIG9mIHRoaXMuaW5wdXRQYXRocykge1xuICAgICAgY29uc3QgdGVtcGxhdGVGaWxlID0ge307XG5cbiAgICAgIGVhY2hFeHRlbnNpb246IGZvciAobGV0IGV4dCBvZiBURU1QTEFURV9FWFRFTlNJT05TKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHJlbGF0aXZlUGF0aC5yZXBsYWNlKC9cXC5jc3MvLCAnLicgKyBleHQpO1xuICAgICAgICBsZXQgdGVtcGxhdGVGaWxlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIHRlbXBsYXRlUGF0aCk7XG4gICAgICAgIGxldCBleGlzdHMgPSBhd2FpdCBmc0V4aXN0cyh0ZW1wbGF0ZUZpbGVQYXRoKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogUG9kcyBzdXBwb3J0XG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZXh0ID09PSAnaGJzJyAmJiAhZXhpc3RzICYmIHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpKSB7XG4gICAgICAgICAgbGV0IHBvZHNOYW1lID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL3N0eWxlc1xcLmNzcyQvLCAndGVtcGxhdGUuaGJzJyk7XG5cbiAgICAgICAgICB0ZW1wbGF0ZUZpbGVQYXRoID0gcGF0aC5qb2luKGlucHV0UGF0aCwgcG9kc05hbWUpO1xuICAgICAgICAgIGV4aXN0cyA9IGF3YWl0IGZzRXhpc3RzKHRlbXBsYXRlRmlsZVBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICAgIHRlbXBsYXRlRmlsZS5wYXRoID0gdGVtcGxhdGVGaWxlUGF0aDtcbiAgICAgICAgICB0ZW1wbGF0ZUZpbGUuZXh0ID0gZXh0O1xuXG4gICAgICAgICAgYnJlYWsgZWFjaEV4dGVuc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdGVtcGxhdGUgZXhpc3RzIHdlIGNoZWNrIHRoZSBjc3MgZm9yIGNoYW5nZXNcbiAgICAgIGlmICh0ZW1wbGF0ZUZpbGUucGF0aCkge1xuICAgICAgICBjb25zdCBjc3NGaWxlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIHJlbGF0aXZlUGF0aCk7XG4gICAgICAgIGNvbnN0IGNzc0NvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoY3NzRmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgICBjb25zdCB7IGNsYXNzZXMsIHRhZ3MgfSA9IGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3NDb250ZW50cyk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ2xhc3NlcyA9IHRoaXMub3B0aW9ucy5wcmV2aW91c0NsYXNzZXMuZ2V0KHJlbGF0aXZlUGF0aCk7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBwcmV2aW91cyBjbGFzc2VzLCBhbmQgdGhleSBhcmUgZGlmZmVyZW50LCBidWlsZCB0ZW1wbGF0ZXMgdG8gY29tcGFyZVxuICAgICAgICBpZiAocHJldmlvdXNDbGFzc2VzICYmIGNsYXNzZXMgIT09IHByZXZpb3VzQ2xhc3Nlcykge1xuICAgICAgICAgIGNvbnN0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPVxuICAgICAgICAgICAgcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocmVsYXRpdmVQYXRoKTtcbiAgICAgICAgICBjb25zdCBwb3N0Zml4ID0gZ2VuZXJhdGVIYXNoKGxvY2FsUGFja2FnZXJTdHlsZVBhdGgpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlUmF3ID0gYXdhaXQgcmVhZEZpbGUodGVtcGxhdGVGaWxlLnBhdGgsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlQ29tcGFyaXNvbiA9IFtdO1xuICAgICAgICAgIGxldCB0ZW1wbGF0ZUNvbnRlbnRzID0gdGVtcGxhdGVSYXc7XG5cbiAgICAgICAgICBpZiAodGVtcGxhdGVGaWxlLmV4dCA9PT0gJ2hicycpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlQ29tcGFyaXNvbi5wdXNoKFxuICAgICAgICAgICAgICBkaWRUZW1wbGF0ZUNoYW5nZShcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnRlbnRzLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgIHRhZ3MsXG4gICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZpbmQgYWxsIHRlbXBsYXRlIHRhZ3MsIGFuZCBleHRyYWN0IHRoZSBjb250ZW50cyB0byBjb21wYXJlXG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gcC5wYXJzZSh0ZW1wbGF0ZVJhdywgJycpO1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gcmVzdWx0cy5tYXAoKHgpID0+IHguY29udGVudHMpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXMpIHtcbiAgICAgICAgICAgICAgdGVtcGxhdGVDb21wYXJpc29uLnB1c2goXG4gICAgICAgICAgICAgICAgZGlkVGVtcGxhdGVDaGFuZ2UoXG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5jb250ZW50cyxcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgIGNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICB0YWdzLFxuICAgICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlQ2hhbmdlZCA9IHRlbXBsYXRlQ29tcGFyaXNvbi5zb21lKCh2KSA9PiB2KTtcblxuICAgICAgICAgIC8vIGlmIHRoZSByZXdyaXRlIGRvZXNuJ3QgbWF0Y2ggdGhlIG9yaWdpbmFsIG91dHB1dCwgd2Ugd2FudCB0byByZWJ1aWxkIHRoZSB0ZW1wbGF0ZVxuICAgICAgICAgIGlmICh0ZW1wbGF0ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gYXdmdWwgaGFjayBiZWNhdXNlIHdlIGRvbid0IGtub3cgaG93IHRvIGludmFsaWRhdGUgYnJvY2NvbGktcGVyc2lzdGVudC1maWx0ZXIgY2FjaGVcbiAgICAgICAgICAgIC8vIGlkZWFsbHkgd2UnZCBpbnZhbGlkYXRlIHRoZSBicm9jY29saS1wZXJpc3RlbnQtZmlsdGVyIGNhY2hlIGhlcmVcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZSh0ZW1wbGF0ZUZpbGUucGF0aCwgdGVtcGxhdGVDb250ZW50cyArICcgJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGFzc2lnbiBmb3IgbmV4dCBydW4gY29tcGFyaXNvblxuXG4gICAgICAgIHRoaXMub3B0aW9ucy5wcmV2aW91c0NsYXNzZXMuc2V0KHJlbGF0aXZlUGF0aCwgY2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wYXJlcyBhIHRlbXBsYXRlIHdpdGggdGhlIGNvbnRleHQgb2YgZGlmZmVyZW50IHNldHMgb2YgZXh0cmFjZWQgY3NzIGNsYXNzZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudHNcbiAqIEBwYXJhbSB7U2V0fSBwcmV2aW91c0NsYXNzZXNcbiAqIEBwYXJhbSB7U2V0fSBjdXJyZW50Q2xhc3Nlc1xuICogQHBhcmFtIHtTZXR9IHRhZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3N0Zml4XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZGlkVGVtcGxhdGVDaGFuZ2UoXG4gIGNvbnRlbnRzLFxuICBwcmV2aW91c0NsYXNzZXMsXG4gIGN1cnJlbnRDbGFzc2VzLFxuICB0YWdzLFxuICBwb3N0Zml4LFxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsID0gcmV3cml0ZUhicyhjb250ZW50cywgcHJldmlvdXNDbGFzc2VzLCB0YWdzLCBwb3N0Zml4KTtcbiAgY29uc3QgY3VycmVudCA9IHJld3JpdGVIYnMoY29udGVudHMsIGN1cnJlbnRDbGFzc2VzLCB0YWdzLCBwb3N0Zml4KTtcblxuICByZXR1cm4gb3JpZ2luYWwgIT09IGN1cnJlbnQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjb3BlZENzc1ByZXByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLm93bmVyID0gb3B0aW9ucy5vd25lcjtcbiAgICB0aGlzLmFwcE5hbWUgPSBvcHRpb25zLm93bmVyLnBhcmVudC5wa2cubmFtZTtcbiAgICB0aGlzLm5hbWUgPSAnc2NvcGVkLWNzcy1wcmVwcm9jZXNzb3InO1xuICAgIHRoaXMucHJldmlvdXNDbGFzc2VzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG9wdGlvbnMgZnJvbSBgc2V0dXBQcmVwcm9jZXNzb3JSZWdpc3RyeWAsIHRoZSB2MS1BZGRvbiBIb29rXG4gICAqIEBwYXJhbSB7eyBsYXllck5hbWU/OiBzdHJpbmcgfX0gb3B0aW9uc1xuICAgKi9cbiAgY29uZmlndXJlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy51c2VyT3B0aW9ucyA9IG9wdGlvbnMgfHwgeyBbJ25vdCBjb25maWd1cmVkJ106IHRydWUgfTtcbiAgfVxuXG4gIHRvVHJlZShpbnB1dE5vZGUsIGlucHV0UGF0aCwgb3V0cHV0RGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgY29uc3Qgb3RoZXJQcmVwcm9jZXNzb3JzID0gdGhpcy5wcmVwcm9jZXNzb3JzLmZpbHRlcigocCkgPT4gcCAhPT0gdGhpcyk7XG4gICAgY29uc3Qgb3RoZXJUcmVlcyA9IG90aGVyUHJlcHJvY2Vzc29ycy5tYXAoKHApID0+IHAudG9UcmVlKC4uLmFyZ3VtZW50cykpO1xuICAgIGxldCBtZXJnZWRPdGhlclRyZWVzID0gbmV3IE1lcmdlVHJlZXMob3RoZXJUcmVlcyk7XG5cbiAgICBsZXQgcm9vdHMgPSBbXG4gICAgICB0aGlzLmFwcE5hbWUgKyAnL2NvbXBvbmVudHMvJyxcbiAgICAgIC4uLih0aGlzLnVzZXJPcHRpb25zLmFkZGl0aW9uYWxSb290cyB8fCBbXSkubWFwKFxuICAgICAgICAocm9vdCkgPT4gYCR7dGhpcy5hcHBOYW1lfS8ke3Jvb3R9YCxcbiAgICAgICksXG4gICAgXTtcbiAgICBsZXQgaW5jbHVkZSA9IHJvb3RzXG4gICAgICAubWFwKChyb290KSA9PiB7XG4gICAgICAgIGxldCB3aXRoU2xhc2ggPSByb290LmVuZHNXaXRoKCcvJykgPyByb290IDogYCR7cm9vdH0vYDtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGAke3dpdGhTbGFzaH0qKi8qLmNzc2AsXG4gICAgICAgICAgLi4uQ09NUE9ORU5UX0VYVEVOU0lPTlMubWFwKChleHQpID0+IGAke3dpdGhTbGFzaH0qKi8qLiR7ZXh0fWApLFxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICAgIC5mbGF0KCk7XG5cbiAgICBsZXQgY29tcG9uZW50c05vZGUgPSBuZXcgRnVubmVsKGlucHV0Tm9kZSwgeyBpbmNsdWRlIH0pO1xuXG4gICAgY29tcG9uZW50c05vZGUgPSBuZXcgU2NvcGVkRmlsdGVyKGNvbXBvbmVudHNOb2RlLCB7XG4gICAgICBpbnB1dFBhdGgsXG4gICAgICBnZXRVc2VyT3B0aW9uczogKCkgPT4gdGhpcy51c2VyT3B0aW9ucyxcbiAgICAgIG93bmVyOiB0aGlzLm93bmVyLFxuICAgICAgcHJldmlvdXNDbGFzc2VzOiB0aGlzLnByZXZpb3VzQ2xhc3NlcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFN0eWxlcyA9IG5ldyBGdW5uZWwoY29tcG9uZW50c05vZGUsIHtcbiAgICAgIGluY2x1ZGU6IHJvb3RzLm1hcCgocm9vdCkgPT4ge1xuICAgICAgICBsZXQgd2l0aFNsYXNoID0gcm9vdC5lbmRzV2l0aCgnLycpID8gcm9vdCA6IGAke3Jvb3R9L2A7XG5cbiAgICAgICAgcmV0dXJuIGAke3dpdGhTbGFzaH0qKi8qLmNzc2A7XG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwcENzcyA9IG5ldyBGdW5uZWwoaW5wdXROb2RlLCB7XG4gICAgICBpbmNsdWRlOiBbdGhpcy5hcHBOYW1lICsgJy9zdHlsZXMvYXBwLmNzcyddLFxuICAgIH0pO1xuXG4gICAgbGV0IG1lcmdlZFN0eWxlcyA9IG5ldyBNZXJnZVRyZWVzKFtcbiAgICAgIGFwcENzcyxcbiAgICAgIG1lcmdlZE90aGVyVHJlZXMsXG4gICAgICBjb21wb25lbnRTdHlsZXMsXG4gICAgXSk7XG5cbiAgICBsZXQgbmV3T3V0cHV0ID0gbmV3IENvbmNhdChtZXJnZWRTdHlsZXMsIHtcbiAgICAgIG91dHB1dEZpbGU6IG9wdGlvbnMub3V0cHV0UGF0aHNbJ2FwcCddLFxuICAgICAgYWxsb3dOb25lOiB0cnVlLFxuICAgICAgc291cmNlTWFwQ29uZmlnOiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdPdXRwdXQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBzdGF0IH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChwYXRoKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgc3RhdChwYXRoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IGZzU3luYyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5cbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi9nZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gudHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZUhhc2hGcm9tQWJzb2x1dGVQYXRoKGFic29sdXRlUGF0aCkge1xuICAvKipcbiAgICogVGhlIHdob2xlIG9mIGBhcHBQYXRoYCB1bHRpbWF0ZWx5IHRyYW5zZm9ybXMgdGhlIGBhYnNvbHV0ZVBhdGhgXG4gICAqIGludG8gdGhlIGV4YWN0IHN0cmluZyB0aGF0IGZvbGtzIHdpbGwgcGFzcyB0byBgcmVsYXRpdmVQYXRoYFxuICAgKiBhdCBydW50aW1lLlxuICAgKi9cbiAgY29uc3QgbW9kdWxlUGF0aCA9IGFwcFBhdGgoYWJzb2x1dGVQYXRoKTtcblxuICBjb25zdCBoYXNoID0gZ2VuZXJhdGVIYXNoKG1vZHVsZVBhdGgpO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVNjb3BlZFBhdGgpIHtcbiAgLyoqXG4gICAqICpCeSBjb252ZW50aW9uKiwgYHNyY2AgaXMgb21pdHRlZCBmcm9tIGNvbXBvbmVudCBwYXRocy5cbiAgICogV2UgY2FuIHJlZmxlY3QgdGhlIHNhbWUgYmVoYXZpb3IgYnkgcmVwbGFjaW5nIHNyYy9cbiAgICogd2l0aCBhbiBlbXB0eSBzdHJpbmcuXG4gICAqXG4gICAqIENTUyBpc24ndCBlbWl0dGVkIGFzIGEgY28tbG9jYXRlZCBtb2R1bGUsIGJ1dFxuICAgKiB0byBrZWVwIGNvbnZlbnRpb25zIGNvbnNpc3RlbnQgYWNyb3NzIGxhbmd1YWdlcyxcbiAgICogd2UgY2FuIHByZXRlbmQgaXQgaXMuXG4gICAqXG4gICAqIEFueSBjdXN0b21pemF0aW9uIGJleW9uZCByZW1vdmluZyBgc3JjYCBhbmQgYGFwcGAgaXMgcG90ZW50aWFsbHkgY29uZnVzaW5nLlxuICAgKiBJZiB3ZSBuZWVkIGZ1cnRoZXIgY3VzdG9taXphdGlvbnMsIHdlJ2xsIHdhbnQgdG8gbWF0Y2ggb24gYGV4cG9ydHNgIGluIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHBhY2thZ2UuanNvblxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VTY29wZWRQYXRoLnJlcGxhY2UoL15cXC9zcmNcXC8vLCAnLycpO1xuXG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgLyoqXG4gICAqIFBvZHMgc3VwcG9ydC5cbiAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICpcbiAgICogTm90ZSB0aGF0IHBvZHMgZm9yIGNvbXBvbmVudHMgd2lsbCBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gICAqL1xuICBsZXQgaXNQb2QgPVxuICAgICFwYWNrYWdlUmVsYXRpdmUuaW5jbHVkZXMoJy9jb21wb25lbnRzLycpICYmXG4gICAgKHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgnc3R5bGVzLmNzcycpIHx8XG4gICAgICBwYWNrYWdlUmVsYXRpdmUuZW5kc1dpdGgoJ3RlbXBsYXRlLmhicycpIHx8XG4gICAgICBwYWNrYWdlUmVsYXRpdmUuZW5kc1dpdGgoJ3RlbXBsYXRlLmpzJykpO1xuXG4gIGlmIChpc1BvZCkge1xuICAgIHJldHVybiBwYXJzZWQuZGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBpcyBwYXNzZWQsIHJlbW92ZSBpdC5cbiAgICogV2hlbiB1c2luZyBwYWNrYWdlcnMsIGZvbGtzIGFyZSB1c2VkIHRvIG5vdCBoYXZpbmcgdG8gc3BlY2lmeSBleHRlbnNpb25zIGZvciBmaWxlcy5cbiAgICogU2luY2Ugd2UgZG9uJ3QgZXZlbiBlbWl0IGNzcyBmaWxlcyBjby1sb2NhdGVkIHRvIGVhY2ggbW9kdWxlLFxuICAgKiB0aGlzIGhlbHBzIHVzIG5vdCBjb252ZXkgYSBsaWUgdGhhdCBhIGZpbGUgbWF5IGV4aXN0IGluIGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlIGA8bW9kdWxlLW5hbWU+L2NvbXBvbmVudHMvYnV0dG9uYC5cbiAgICogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgZXh0ZW5zaW9uIGlzLCBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBjc3MgZmlsZVxuICAgKiBmb3IgdGhlIGJ1dHRvbiBtb2R1bGUgYW55d2F5LlxuICAgKi9cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xuXG4gIHJldHVybiBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoO1xufVxuXG4vKipcbiAqIHJldHVybnMgdGhlIGFwcC1tb2R1bGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGVcbiAqXG4gKiBUaGlzIGFzc3VtZXMgbm9ybWFsIGVtYmVyIGFwcCBjb252ZW50aW9uc1xuICpcbiAqIHdoaWNoIGlzIGA8cGFja2FnZS5qc29uI25hbWU+L3BhdGgtdG8tZmlsZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgd29ya3NwYWNlUGF0aCA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBsZXQgbmFtZSA9IHdvcmtzcGFjZVBhY2thZ2VOYW1lKHNvdXJjZVBhdGgpO1xuXG4gIC8qKlxuICAgKiAgVW5kZXIgZW1icm9pZGVyIGJ1aWxkcywgdGhlIHNwZWMtY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGFwcFxuICAgKiBoYXMgYWxsIHRoZSBmaWxlcyB1bmRlciBhIGZvbGRlciB3aGljaCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIG5hbWUsXG4gICAqIHJhdGhlciB0aGFuIFwiYXBwXCIuXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gc291cmNlUGF0aC5yZXBsYWNlKHdvcmtzcGFjZVBhdGgsICcnKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbmNvbnN0IENBQ0hFID0gbmV3IFNldCgpO1xuXG4vKipcbiAqIEZvciBhIGdpdmVuIHNvdXJjZSBwYXRoLCBpZiB3ZSBoYXZlIHNlZW4gYVxuICogc291cmNlIGZpbGUgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZGlyZWN0b3J5LFxuICogZmluZCB0aGF0IHdvcmtzcGFjZSBkaXJlY3RvcnkgYW5kIHJldHVybiBpdC5cbiAqL1xuZnVuY3Rpb24gaGFzU2Vlbihzb3VyY2VQYXRoKSB7XG4gIGZvciAobGV0IGVudHJ5IG9mIENBQ0hFKSB7XG4gICAgaWYgKHNvdXJjZVBhdGguc3RhcnRzV2l0aChlbnRyeSkpIHtcbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gIH1cblxuICAvLyB3ZSBoYXZlIG5vdCBzZWVuIHRoaXMgc291cmNlIHBhdGggeWV0XG4gIHJldHVybjtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZXMgdGhlIFwic2VlblwiIHdvcmtzcGFjZSBjYWNoZSxcbiAqIHNvIHRoYXQgd2UgZG9uJ3QgaGl0IHRoZSBmaWxlIHN5c3RlbSB0b28gb2Z0ZW4uXG4gKi9cbmZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHNlZW4gPSBoYXNTZWVuKHNvdXJjZVBhdGgpO1xuXG4gIGlmIChzZWVuKSB7XG4gICAgcmV0dXJuIHNlZW47XG4gIH1cblxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBmaW5kVXAuc3luYygncGFja2FnZS5qc29uJywge1xuICAgIGN3ZDogcGF0aC5kaXJuYW1lKHNvdXJjZVBhdGgpLFxuICB9KTtcblxuICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCk7XG5cbiAgQ0FDSEUuYWRkKHdvcmtzcGFjZVBhdGgpO1xuXG4gIHJldHVybiB3b3Jrc3BhY2VQYXRoO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiByZXR1cm5zIHRoZSBwYWNrYWdlLmpzb24jbmFtZSBmb3IgYSBnaXZlbiBzb3VyY2VQYXRoXG4gKi9cbmZ1bmN0aW9uIHdvcmtzcGFjZVBhY2thZ2VOYW1lKHNvdXJjZVBhdGgpIHtcbiAgY29uc3Qgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG5cbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nLm5hbWU7XG4gIH1cblxuICBsZXQgYnVmZmVyID0gZnNTeW5jLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4od29ya3NwYWNlLCAncGFja2FnZS5qc29uJykpO1xuICBsZXQgY29udGVudCA9IGJ1ZmZlci50b1N0cmluZygpO1xuICBsZXQganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cbiAgTUFOSUZFU1RfQ0FDSEUuc2V0KHdvcmtzcGFjZSwganNvbik7XG5cbiAgcmV0dXJuIGpzb24ubmFtZTtcbn1cblxuIiwgImltcG9ydCBtZDUgZnJvbSAnYmx1ZWltcC1tZDUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gocmVsYXRpdmVQYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuICdlJyArIG1kNShyZWxhdGl2ZVBhdGgpLnN1YnN0cmluZygwLCA4KTtcbn1cbiIsICJpbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBwYXJzZXIgZnJvbSAncG9zdGNzcy1zZWxlY3Rvci1wYXJzZXInO1xuXG5pbXBvcnQgaXNJbnNpZGVHbG9iYWwgZnJvbSAnLi9pc0luc2lkZUdsb2JhbC5qcyc7XG5cbmZ1bmN0aW9uIGdldENsYXNzZXNBbmRUYWdzKHNlbCwgY2xhc3NlcywgdGFncykge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2xzKSA9PiB7XG4gICAgc2xzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIGNsYXNzZXMuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3RhZycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICB0YWdzLmFkZChzZWxlY3Rvci52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcGFyc2VyKHRyYW5zZm9ybSkucHJvY2Vzc1N5bmMoc2VsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzKGNzcykge1xuICBjb25zdCBjbGFzc2VzID0gbmV3IFNldCgpO1xuICBjb25zdCB0YWdzID0gbmV3IFNldCgpO1xuXG4gIGNvbnN0IGFzdCA9IHBvc3Rjc3MucGFyc2UoY3NzKTtcblxuICBhc3Qud2Fsaygobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdydWxlJykge1xuICAgICAgZ2V0Q2xhc3Nlc0FuZFRhZ3Mobm9kZS5zZWxlY3RvciwgY2xhc3NlcywgdGFncyk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4geyBjbGFzc2VzLCB0YWdzIH07XG59XG5cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0luc2lkZUdsb2JhbChub2RlLCBmdW5jKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ3BzZXVkbycgJiYgcGFyZW50LnZhbHVlID09PSAnOmdsb2JhbCcpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUdsb2JhbChwYXJlbnQsIGZ1bmMpO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJpbXBvcnQgcmVjYXN0IGZyb20gJ2VtYmVyLXRlbXBsYXRlLXJlY2FzdCc7XG5cbmltcG9ydCByZW5hbWVDbGFzcyBmcm9tICcuL3JlbmFtZUNsYXNzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUhicyhcbiAgaGJzLFxuICBjbGFzc2VzLFxuICB0YWdzLFxuICBwb3N0Zml4LFxuICBzY29wZWRDbGFzcyA9ICdzY29wZWQtY2xhc3MnLFxuKSB7XG4gIGxldCBhc3QgPSByZWNhc3QucGFyc2UoaGJzKTtcbiAgbGV0IHN0YWNrID0gW107XG5cbiAgcmVjYXN0LnRyYXZlcnNlKGFzdCwge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLnBhdGg/Lm9yaWdpbmFsID09PSBzY29wZWRDbGFzcyAmJlxuICAgICAgICBub2RlLnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNzc0NsYXNzID0gbm9kZS5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5wYXRoPy5vcmlnaW5hbCA9PT0gc2NvcGVkQ2xhc3MgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhdGg/LnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjc3NDbGFzcyA9IG5vZGUucGF0aC5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjc3NDbGFzcykge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy50ZXh0KHJlbmFtZUNsYXNzKGNzc0NsYXNzLCBwb3N0Zml4KSk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gJ0F0dHJOb2RlJykge1xuICAgICAgICAgIHBhcmVudC5xdW90ZVR5cGUgPSAnXCInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBTdWJFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5vcmlnaW5hbCA9PT0gc2NvcGVkQ2xhc3MgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy5saXRlcmFsKFxuICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICByZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIGxldCByZXN1bHQgPSByZWNhc3QucHJpbnQoYXN0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmFtZUNsYXNzKFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgcG9zdGZpeDogc3RyaW5nLFxuICBjbGFzc2VzSW5Dc3M/OiBTZXQ8c3RyaW5nPixcbikge1xuICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyk7XG4gIGNvbnN0IHJlbmFtZWRDbGFzc2VzID0gY2xhc3Nlc1xuICAgIC5maWx0ZXIoKGMpID0+IGMpXG4gICAgLm1hcCgoYykgPT4gYy50cmltKCkpXG4gICAgLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKCFjbGFzc2VzSW5Dc3MgfHwgY2xhc3Nlc0luQ3NzLmhhcyhjKSkge1xuICAgICAgICBpZiAoYy5lbmRzV2l0aChwb3N0Zml4KSkgcmV0dXJuIGM7XG5cbiAgICAgICAgcmV0dXJuIGMgKyAnXycgKyBwb3N0Zml4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYztcbiAgICB9KVxuICAgIC5qb2luKCcgJyk7XG5cbiAgY29uc3QgcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXMgPSBjbGFzc05hbWUucmVwbGFjZShcbiAgICBjbGFzc05hbWUudHJpbVN0YXJ0KCkudHJpbUVuZCgpLFxuICAgIHJlbmFtZWRDbGFzc2VzLFxuICApO1xuXG4gIHJldHVybiByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQSxJQUFBQSxtQkFBb0M7QUFDcEMsSUFBQUMsb0JBQWlCO0FBRWpCLDZCQUFtQjtBQUNuQiw2QkFBdUI7QUFDdkIsa0NBQXVCO0FBQ3ZCLHdDQUFtQjtBQUNuQix5QkFBNkI7OztBQ1Q3QixzQkFBcUI7QUFFckIsZUFBTyxpQkFBd0JDLE9BQU07QUFDbkMsTUFBSTtBQUNGLGNBQU0sc0JBQUtBLEtBQUk7QUFFZixXQUFPO0FBQUEsRUFDVCxTQUFTLEdBQUc7QUFDVixXQUFPO0FBQUEsRUFDVDtBQUNGOzs7QUNUQSx1QkFBaUI7QUFFakIscUJBQW1COzs7QUNIbkIseUJBQWdCO0FBRUQsU0FBUix5QkFBMEMsY0FBc0I7QUFDckUsU0FBTyxVQUFNLG1CQUFBQyxTQUFJLFlBQVksRUFBRSxVQUFVLEdBQUcsQ0FBQztBQUMvQzs7O0FEZ0JPLFNBQVMsOEJBQThCLG1CQUFtQjtBQWMvRCxNQUFJLGtCQUFrQixrQkFBa0IsUUFB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dEQscUJBQWlCLElBQUksYUFBYSxnQkFBZ0I7QUFBQSxNQUNoRDtBQUFBLE1BQ0EsZ0JBQWdCLE1BQU0sS0FBSztBQUFBLE1BQzNCLE9BQU8sS0FBSztBQUFBLE1BQ1osaUJBQWlCLEtBQUs7QUFBQSxJQUN4QixDQUFDO0FBRUQsVUFBTSxrQkFBa0IsSUFBSSw4QkFBTyxnQkFBZ0I7QUFBQSxNQUNqRCxTQUFTLE1BQU0sSUFBSSxDQUFDLFNBQVM7QUFDM0IsWUFBSSxZQUFZLEtBQUssU0FBUyxHQUFHLElBQUksT0FBTyxHQUFHLElBQUk7QUFFbkQsZUFBTyxHQUFHLFNBQVM7QUFBQSxNQUNyQixDQUFDO0FBQUEsSUFDSCxDQUFDO0FBRUQsVUFBTSxTQUFTLElBQUksOEJBQU8sV0FBVztBQUFBLE1BQ25DLFNBQVMsQ0FBQyxLQUFLLFVBQVUsaUJBQWlCO0FBQUEsSUFDNUMsQ0FBQztBQUVELFFBQUksZUFBZSxJQUFJLDRCQUFBQSxRQUFXO0FBQUEsTUFDaEM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUVELFFBQUksWUFBWSxJQUFJLHVCQUFBQyxRQUFPLGNBQWM7QUFBQSxNQUN2QyxZQUFZLFFBQVEsWUFBWSxLQUFLO0FBQUEsTUFDckMsV0FBVztBQUFBLE1BQ1gsaUJBQWlCLEVBQUUsU0FBUyxLQUFLO0FBQUEsSUFDbkMsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbImltcG9ydF9wcm9taXNlcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgInBhdGgiLCAibWQ1IiwgInBhdGgiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAiaW1wb3J0X3Bvc3Rjc3MiLCAiaW1wb3J0X3Bvc3Rjc3Nfc2VsZWN0b3JfcGFyc2VyIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgInJlY2FzdCIsICJub2RlIiwgIkZpbHRlciIsICJwYXRoIiwgInJlc3VsdHMiLCAicCIsICJNZXJnZVRyZWVzIiwgIkNvbmNhdCJdCn0K
455
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xpYi9zY29wZWQtY3NzLXByZXByb2Nlc3Nvci5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2ZzRXhpc3RzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoLnRzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvaXNJbnNpZGVHbG9iYWwuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9yZXdyaXRlQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUhicy5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlbmFtZUNsYXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBDb25jYXQgZnJvbSAnYnJvY2NvbGktY29uY2F0JztcbmltcG9ydCB7IEZ1bm5lbCB9IGZyb20gJ2Jyb2Njb2xpLWZ1bm5lbCc7XG5pbXBvcnQgTWVyZ2VUcmVlcyBmcm9tICdicm9jY29saS1tZXJnZS10cmVlcyc7XG5pbXBvcnQgRmlsdGVyIGZyb20gJ2Jyb2Njb2xpLXBlcnNpc3RlbnQtZmlsdGVyJztcbmltcG9ydCB7IFByZXByb2Nlc3NvciB9IGZyb20gJ2NvbnRlbnQtdGFnJztcblxuaW1wb3J0IGZzRXhpc3RzIGZyb20gJy4vZnNFeGlzdHMuanMnO1xuaW1wb3J0IHsgcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGggfSBmcm9tICcuL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2VuZXJhdGVIYXNoIGZyb20gJy4vZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi9yZXdyaXRlQ3NzLmpzJztcbmltcG9ydCByZXdyaXRlSGJzIGZyb20gJy4vcmV3cml0ZUhicy5qcyc7XG5cbmNvbnN0IHAgPSBuZXcgUHJlcHJvY2Vzc29yKCk7XG5jb25zdCBDT01QT05FTlRfRVhURU5TSU9OUyA9IFsnaGJzJywgJ2pzJywgJ3RzJywgJ2dqcycsICdndHMnXTtcbmNvbnN0IFRFTVBMQVRFX0VYVEVOU0lPTlMgPSBbJ2hicycsICdnanMnLCAnZ3RzJ107XG5cbmNsYXNzIFNjb3BlZEZpbHRlciBleHRlbmRzIEZpbHRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudHNOb2RlLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihjb21wb25lbnRzTm9kZSwgb3B0aW9ucyk7XG4gICAgdGhpcy53YXJuaW5nU3RyZWFtID0gcHJvY2Vzcy5zdGRlcnI7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zKCkge1xuICAgIHJldHVybiBbJ2NzcyddO1xuICB9XG5cbiAgZ2V0IHRhcmdldEV4dGVuc2lvbigpIHtcbiAgICByZXR1cm4gJ2Nzcyc7XG4gIH1cblxuICBhc3luYyBwcm9jZXNzU3RyaW5nKGNvbnRlbnQsIHJlbGF0aXZlUGF0aCkge1xuICAgIC8vIGlnbm9yZSBjc3MgZmlsZXMgZm9yIGVtYmVyLWNzcy1tb2R1bGVzXG4gICAgaWYgKHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnLm1vZHVsZS5jc3MnKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIGNvcnJlc3BvbmRpbmcganMgZmlsZSBleGlzdHNcbiAgICBjb25zdCBleGlzdFByb21pc2VzID0gW107XG5cbiAgICBmb3IgKGxldCBpbnB1dFBhdGggb2YgdGhpcy5pbnB1dFBhdGhzKSB7XG4gICAgICBmb3IgKGxldCBleHQgb2YgQ09NUE9ORU5UX0VYVEVOU0lPTlMpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVDb21wb25lbnRQYXRoID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcLmNzcyQvLCAnLicgKyBleHQpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRQYXRoID0gcGF0aC5qb2luKGlucHV0UGF0aCwgcmVsYXRpdmVDb21wb25lbnRQYXRoKTtcblxuICAgICAgICBleGlzdFByb21pc2VzLnB1c2goZnNFeGlzdHMoY29tcG9uZW50UGF0aCkpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFBvZHMgc3VwcG9ydFxuICAgICAgICovXG4gICAgICBpZiAocmVsYXRpdmVQYXRoLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL3N0eWxlc1xcLmNzcyQvLCAndGVtcGxhdGUuaGJzJyk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIGRpcmVjdG9yeSk7XG5cbiAgICAgICAgZXhpc3RQcm9taXNlcy5wdXNoKGZzRXhpc3RzKHRlbXBsYXRlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0UmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGV4aXN0UHJvbWlzZXMpO1xuICAgIGNvbnN0IGNvbXBvbmVudEV4aXN0cyA9IGV4aXN0UmVzdWx0cy5zb21lKChyKSA9PiByKTtcblxuICAgIC8vIHJld3JpdGUgY3NzIGZpbGVcbiAgICBpZiAoY29tcG9uZW50RXhpc3RzKSB7XG4gICAgICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHJlbGF0aXZlUGF0aCk7XG5cbiAgICAgIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobG9jYWxQYWNrYWdlclN0eWxlUGF0aCk7XG5cbiAgICAgIGNvbnRlbnQgPSByZXdyaXRlQ3NzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBoYXNoLFxuICAgICAgICByZWxhdGl2ZVBhdGgsXG4gICAgICAgIHRoaXMub3B0aW9ucy5nZXRVc2VyT3B0aW9ucz8uKCk/LmxheWVyTmFtZSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcG9zdFByb2Nlc3MocmVzdWx0cywgcmVsYXRpdmVQYXRoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJIHx8IHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnLm1vZHVsZS5jc3MnKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaW5wdXRQYXRoIG9mIHRoaXMuaW5wdXRQYXRocykge1xuICAgICAgY29uc3QgdGVtcGxhdGVGaWxlID0ge307XG5cbiAgICAgIGVhY2hFeHRlbnNpb246IGZvciAobGV0IGV4dCBvZiBURU1QTEFURV9FWFRFTlNJT05TKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHJlbGF0aXZlUGF0aC5yZXBsYWNlKC9cXC5jc3MvLCAnLicgKyBleHQpO1xuICAgICAgICBsZXQgdGVtcGxhdGVGaWxlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIHRlbXBsYXRlUGF0aCk7XG4gICAgICAgIGxldCBleGlzdHMgPSBhd2FpdCBmc0V4aXN0cyh0ZW1wbGF0ZUZpbGVQYXRoKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogUG9kcyBzdXBwb3J0XG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZXh0ID09PSAnaGJzJyAmJiAhZXhpc3RzICYmIHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpKSB7XG4gICAgICAgICAgbGV0IHBvZHNOYW1lID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL3N0eWxlc1xcLmNzcyQvLCAndGVtcGxhdGUuaGJzJyk7XG5cbiAgICAgICAgICB0ZW1wbGF0ZUZpbGVQYXRoID0gcGF0aC5qb2luKGlucHV0UGF0aCwgcG9kc05hbWUpO1xuICAgICAgICAgIGV4aXN0cyA9IGF3YWl0IGZzRXhpc3RzKHRlbXBsYXRlRmlsZVBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICAgIHRlbXBsYXRlRmlsZS5wYXRoID0gdGVtcGxhdGVGaWxlUGF0aDtcbiAgICAgICAgICB0ZW1wbGF0ZUZpbGUuZXh0ID0gZXh0O1xuXG4gICAgICAgICAgYnJlYWsgZWFjaEV4dGVuc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdGVtcGxhdGUgZXhpc3RzIHdlIGNoZWNrIHRoZSBjc3MgZm9yIGNoYW5nZXNcbiAgICAgIGlmICh0ZW1wbGF0ZUZpbGUucGF0aCkge1xuICAgICAgICBjb25zdCBjc3NGaWxlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIHJlbGF0aXZlUGF0aCk7XG4gICAgICAgIGNvbnN0IGNzc0NvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoY3NzRmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgICBjb25zdCB7IGNsYXNzZXMsIHRhZ3MgfSA9IGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3NDb250ZW50cyk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ2xhc3NlcyA9IHRoaXMub3B0aW9ucy5wcmV2aW91c0NsYXNzZXMuZ2V0KHJlbGF0aXZlUGF0aCk7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBwcmV2aW91cyBjbGFzc2VzLCBhbmQgdGhleSBhcmUgZGlmZmVyZW50LCBidWlsZCB0ZW1wbGF0ZXMgdG8gY29tcGFyZVxuICAgICAgICBpZiAocHJldmlvdXNDbGFzc2VzICYmIGNsYXNzZXMgIT09IHByZXZpb3VzQ2xhc3Nlcykge1xuICAgICAgICAgIGNvbnN0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPVxuICAgICAgICAgICAgcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocmVsYXRpdmVQYXRoKTtcbiAgICAgICAgICBjb25zdCBwb3N0Zml4ID0gZ2VuZXJhdGVIYXNoKGxvY2FsUGFja2FnZXJTdHlsZVBhdGgpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlUmF3ID0gYXdhaXQgcmVhZEZpbGUodGVtcGxhdGVGaWxlLnBhdGgsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlQ29tcGFyaXNvbiA9IFtdO1xuICAgICAgICAgIGxldCB0ZW1wbGF0ZUNvbnRlbnRzID0gdGVtcGxhdGVSYXc7XG5cbiAgICAgICAgICBpZiAodGVtcGxhdGVGaWxlLmV4dCA9PT0gJ2hicycpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlQ29tcGFyaXNvbi5wdXNoKFxuICAgICAgICAgICAgICBkaWRUZW1wbGF0ZUNoYW5nZShcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnRlbnRzLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgIHRhZ3MsXG4gICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZpbmQgYWxsIHRlbXBsYXRlIHRhZ3MsIGFuZCBleHRyYWN0IHRoZSBjb250ZW50cyB0byBjb21wYXJlXG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gcC5wYXJzZSh0ZW1wbGF0ZVJhdywgJycpO1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gcmVzdWx0cy5tYXAoKHgpID0+IHguY29udGVudHMpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXMpIHtcbiAgICAgICAgICAgICAgdGVtcGxhdGVDb21wYXJpc29uLnB1c2goXG4gICAgICAgICAgICAgICAgZGlkVGVtcGxhdGVDaGFuZ2UoXG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgIGNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICB0YWdzLFxuICAgICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlQ2hhbmdlZCA9IHRlbXBsYXRlQ29tcGFyaXNvbi5zb21lKCh2KSA9PiB2KTtcblxuICAgICAgICAgIC8vIGlmIHRoZSByZXdyaXRlIGRvZXNuJ3QgbWF0Y2ggdGhlIG9yaWdpbmFsIG91dHB1dCwgd2Ugd2FudCB0byByZWJ1aWxkIHRoZSB0ZW1wbGF0ZVxuICAgICAgICAgIGlmICh0ZW1wbGF0ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gYXdmdWwgaGFjayBiZWNhdXNlIHdlIGRvbid0IGtub3cgaG93IHRvIGludmFsaWRhdGUgYnJvY2NvbGktcGVyc2lzdGVudC1maWx0ZXIgY2FjaGVcbiAgICAgICAgICAgIC8vIGlkZWFsbHkgd2UnZCBpbnZhbGlkYXRlIHRoZSBicm9jY29saS1wZXJpc3RlbnQtZmlsdGVyIGNhY2hlIGhlcmVcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZSh0ZW1wbGF0ZUZpbGUucGF0aCwgdGVtcGxhdGVDb250ZW50cyArICcgJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGFzc2lnbiBmb3IgbmV4dCBydW4gY29tcGFyaXNvblxuXG4gICAgICAgIHRoaXMub3B0aW9ucy5wcmV2aW91c0NsYXNzZXMuc2V0KHJlbGF0aXZlUGF0aCwgY2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wYXJlcyBhIHRlbXBsYXRlIHdpdGggdGhlIGNvbnRleHQgb2YgZGlmZmVyZW50IHNldHMgb2YgZXh0cmFjZWQgY3NzIGNsYXNzZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudHNcbiAqIEBwYXJhbSB7U2V0fSBwcmV2aW91c0NsYXNzZXNcbiAqIEBwYXJhbSB7U2V0fSBjdXJyZW50Q2xhc3Nlc1xuICogQHBhcmFtIHtTZXR9IHRhZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3N0Zml4XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZGlkVGVtcGxhdGVDaGFuZ2UoXG4gIGNvbnRlbnRzLFxuICBwcmV2aW91c0NsYXNzZXMsXG4gIGN1cnJlbnRDbGFzc2VzLFxuICB0YWdzLFxuICBwb3N0Zml4LFxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsID0gcmV3cml0ZUhicyhjb250ZW50cywgcHJldmlvdXNDbGFzc2VzLCB0YWdzLCBwb3N0Zml4KTtcbiAgY29uc3QgY3VycmVudCA9IHJld3JpdGVIYnMoY29udGVudHMsIGN1cnJlbnRDbGFzc2VzLCB0YWdzLCBwb3N0Zml4KTtcblxuICByZXR1cm4gb3JpZ2luYWwgIT09IGN1cnJlbnQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjb3BlZENzc1ByZXByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLm93bmVyID0gb3B0aW9ucy5vd25lcjtcbiAgICB0aGlzLmFwcE5hbWUgPSBvcHRpb25zLm93bmVyLnBhcmVudC5wa2cubmFtZTtcbiAgICB0aGlzLm5hbWUgPSAnc2NvcGVkLWNzcy1wcmVwcm9jZXNzb3InO1xuICAgIHRoaXMucHJldmlvdXNDbGFzc2VzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG9wdGlvbnMgZnJvbSBgc2V0dXBQcmVwcm9jZXNzb3JSZWdpc3RyeWAsIHRoZSB2MS1BZGRvbiBIb29rXG4gICAqIEBwYXJhbSB7eyBsYXllck5hbWU/OiBzdHJpbmcgfX0gb3B0aW9uc1xuICAgKi9cbiAgY29uZmlndXJlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy51c2VyT3B0aW9ucyA9IG9wdGlvbnMgfHwgeyBbJ25vdCBjb25maWd1cmVkJ106IHRydWUgfTtcbiAgfVxuXG4gIHRvVHJlZShpbnB1dE5vZGUsIGlucHV0UGF0aCwgb3V0cHV0RGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgY29uc3Qgb3RoZXJQcmVwcm9jZXNzb3JzID0gdGhpcy5wcmVwcm9jZXNzb3JzLmZpbHRlcigocCkgPT4gcCAhPT0gdGhpcyk7XG4gICAgY29uc3Qgb3RoZXJUcmVlcyA9IG90aGVyUHJlcHJvY2Vzc29ycy5tYXAoKHApID0+IHAudG9UcmVlKC4uLmFyZ3VtZW50cykpO1xuICAgIGxldCBtZXJnZWRPdGhlclRyZWVzID0gbmV3IE1lcmdlVHJlZXMob3RoZXJUcmVlcyk7XG5cbiAgICBsZXQgcm9vdHMgPSBbXG4gICAgICB0aGlzLmFwcE5hbWUgKyAnL2NvbXBvbmVudHMvJyxcbiAgICAgIC4uLih0aGlzLnVzZXJPcHRpb25zLmFkZGl0aW9uYWxSb290cyB8fCBbXSkubWFwKFxuICAgICAgICAocm9vdCkgPT4gYCR7dGhpcy5hcHBOYW1lfS8ke3Jvb3R9YCxcbiAgICAgICksXG4gICAgXTtcbiAgICBsZXQgaW5jbHVkZSA9IHJvb3RzXG4gICAgICAubWFwKChyb290KSA9PiB7XG4gICAgICAgIGxldCB3aXRoU2xhc2ggPSByb290LmVuZHNXaXRoKCcvJykgPyByb290IDogYCR7cm9vdH0vYDtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGAke3dpdGhTbGFzaH0qKi8qLmNzc2AsXG4gICAgICAgICAgLi4uQ09NUE9ORU5UX0VYVEVOU0lPTlMubWFwKChleHQpID0+IGAke3dpdGhTbGFzaH0qKi8qLiR7ZXh0fWApLFxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICAgIC5mbGF0KCk7XG5cbiAgICBsZXQgY29tcG9uZW50c05vZGUgPSBuZXcgRnVubmVsKGlucHV0Tm9kZSwgeyBpbmNsdWRlIH0pO1xuXG4gICAgY29tcG9uZW50c05vZGUgPSBuZXcgU2NvcGVkRmlsdGVyKGNvbXBvbmVudHNOb2RlLCB7XG4gICAgICBpbnB1dFBhdGgsXG4gICAgICBnZXRVc2VyT3B0aW9uczogKCkgPT4gdGhpcy51c2VyT3B0aW9ucyxcbiAgICAgIG93bmVyOiB0aGlzLm93bmVyLFxuICAgICAgcHJldmlvdXNDbGFzc2VzOiB0aGlzLnByZXZpb3VzQ2xhc3NlcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFN0eWxlcyA9IG5ldyBGdW5uZWwoY29tcG9uZW50c05vZGUsIHtcbiAgICAgIGluY2x1ZGU6IHJvb3RzLm1hcCgocm9vdCkgPT4ge1xuICAgICAgICBsZXQgd2l0aFNsYXNoID0gcm9vdC5lbmRzV2l0aCgnLycpID8gcm9vdCA6IGAke3Jvb3R9L2A7XG5cbiAgICAgICAgcmV0dXJuIGAke3dpdGhTbGFzaH0qKi8qLmNzc2A7XG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwcENzcyA9IG5ldyBGdW5uZWwoaW5wdXROb2RlLCB7XG4gICAgICBpbmNsdWRlOiBbdGhpcy5hcHBOYW1lICsgJy9zdHlsZXMvYXBwLmNzcyddLFxuICAgIH0pO1xuXG4gICAgbGV0IG1lcmdlZFN0eWxlcyA9IG5ldyBNZXJnZVRyZWVzKFtcbiAgICAgIGFwcENzcyxcbiAgICAgIG1lcmdlZE90aGVyVHJlZXMsXG4gICAgICBjb21wb25lbnRTdHlsZXMsXG4gICAgXSk7XG5cbiAgICBsZXQgbmV3T3V0cHV0ID0gbmV3IENvbmNhdChtZXJnZWRTdHlsZXMsIHtcbiAgICAgIG91dHB1dEZpbGU6IG9wdGlvbnMub3V0cHV0UGF0aHNbJ2FwcCddLFxuICAgICAgYWxsb3dOb25lOiB0cnVlLFxuICAgICAgc291cmNlTWFwQ29uZmlnOiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdPdXRwdXQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBzdGF0IH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChwYXRoKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgc3RhdChwYXRoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IGZzU3luYyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5cbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi9nZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gudHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZUhhc2hGcm9tQWJzb2x1dGVQYXRoKGFic29sdXRlUGF0aCkge1xuICAvKipcbiAgICogVGhlIHdob2xlIG9mIGBhcHBQYXRoYCB1bHRpbWF0ZWx5IHRyYW5zZm9ybXMgdGhlIGBhYnNvbHV0ZVBhdGhgXG4gICAqIGludG8gdGhlIGV4YWN0IHN0cmluZyB0aGF0IGZvbGtzIHdpbGwgcGFzcyB0byBgcmVsYXRpdmVQYXRoYFxuICAgKiBhdCBydW50aW1lLlxuICAgKi9cbiAgY29uc3QgbW9kdWxlUGF0aCA9IGFwcFBhdGgoYWJzb2x1dGVQYXRoKTtcblxuICBjb25zdCBoYXNoID0gZ2VuZXJhdGVIYXNoKG1vZHVsZVBhdGgpO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVNjb3BlZFBhdGgpIHtcbiAgLyoqXG4gICAqICpCeSBjb252ZW50aW9uKiwgYHNyY2AgaXMgb21pdHRlZCBmcm9tIGNvbXBvbmVudCBwYXRocy5cbiAgICogV2UgY2FuIHJlZmxlY3QgdGhlIHNhbWUgYmVoYXZpb3IgYnkgcmVwbGFjaW5nIHNyYy9cbiAgICogd2l0aCBhbiBlbXB0eSBzdHJpbmcuXG4gICAqXG4gICAqIENTUyBpc24ndCBlbWl0dGVkIGFzIGEgY28tbG9jYXRlZCBtb2R1bGUsIGJ1dFxuICAgKiB0byBrZWVwIGNvbnZlbnRpb25zIGNvbnNpc3RlbnQgYWNyb3NzIGxhbmd1YWdlcyxcbiAgICogd2UgY2FuIHByZXRlbmQgaXQgaXMuXG4gICAqXG4gICAqIEFueSBjdXN0b21pemF0aW9uIGJleW9uZCByZW1vdmluZyBgc3JjYCBhbmQgYGFwcGAgaXMgcG90ZW50aWFsbHkgY29uZnVzaW5nLlxuICAgKiBJZiB3ZSBuZWVkIGZ1cnRoZXIgY3VzdG9taXphdGlvbnMsIHdlJ2xsIHdhbnQgdG8gbWF0Y2ggb24gYGV4cG9ydHNgIGluIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHBhY2thZ2UuanNvblxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VTY29wZWRQYXRoLnJlcGxhY2UoL15cXC9zcmNcXC8vLCAnLycpO1xuXG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgLyoqXG4gICAqIFBvZHMgc3VwcG9ydC5cbiAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICpcbiAgICogTm90ZSB0aGF0IHBvZHMgZm9yIGNvbXBvbmVudHMgd2lsbCBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gICAqL1xuICBsZXQgaXNQb2QgPVxuICAgICFwYWNrYWdlUmVsYXRpdmUuaW5jbHVkZXMoJy9jb21wb25lbnRzLycpICYmXG4gICAgKHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgnc3R5bGVzLmNzcycpIHx8XG4gICAgICBwYWNrYWdlUmVsYXRpdmUuZW5kc1dpdGgoJ3RlbXBsYXRlLmhicycpIHx8XG4gICAgICBwYWNrYWdlUmVsYXRpdmUuZW5kc1dpdGgoJ3RlbXBsYXRlLmpzJykpO1xuXG4gIGlmIChpc1BvZCkge1xuICAgIHJldHVybiBwYXJzZWQuZGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBpcyBwYXNzZWQsIHJlbW92ZSBpdC5cbiAgICogV2hlbiB1c2luZyBwYWNrYWdlcnMsIGZvbGtzIGFyZSB1c2VkIHRvIG5vdCBoYXZpbmcgdG8gc3BlY2lmeSBleHRlbnNpb25zIGZvciBmaWxlcy5cbiAgICogU2luY2Ugd2UgZG9uJ3QgZXZlbiBlbWl0IGNzcyBmaWxlcyBjby1sb2NhdGVkIHRvIGVhY2ggbW9kdWxlLFxuICAgKiB0aGlzIGhlbHBzIHVzIG5vdCBjb252ZXkgYSBsaWUgdGhhdCBhIGZpbGUgbWF5IGV4aXN0IGluIGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlIGA8bW9kdWxlLW5hbWU+L2NvbXBvbmVudHMvYnV0dG9uYC5cbiAgICogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgZXh0ZW5zaW9uIGlzLCBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBjc3MgZmlsZVxuICAgKiBmb3IgdGhlIGJ1dHRvbiBtb2R1bGUgYW55d2F5LlxuICAgKi9cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xuXG4gIHJldHVybiBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoO1xufVxuXG4vKipcbiAqIHJldHVybnMgdGhlIGFwcC1tb2R1bGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGVcbiAqXG4gKiBUaGlzIGFzc3VtZXMgbm9ybWFsIGVtYmVyIGFwcCBjb252ZW50aW9uc1xuICpcbiAqIHdoaWNoIGlzIGA8cGFja2FnZS5qc29uI25hbWU+L3BhdGgtdG8tZmlsZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgd29ya3NwYWNlUGF0aCA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBsZXQgbmFtZSA9IHdvcmtzcGFjZVBhY2thZ2VOYW1lKHNvdXJjZVBhdGgpO1xuXG4gIC8qKlxuICAgKiAgVW5kZXIgZW1icm9pZGVyIGJ1aWxkcywgdGhlIHNwZWMtY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGFwcFxuICAgKiBoYXMgYWxsIHRoZSBmaWxlcyB1bmRlciBhIGZvbGRlciB3aGljaCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIG5hbWUsXG4gICAqIHJhdGhlciB0aGFuIFwiYXBwXCIuXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gc291cmNlUGF0aC5yZXBsYWNlKHdvcmtzcGFjZVBhdGgsICcnKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbmNvbnN0IENBQ0hFID0gbmV3IFNldCgpO1xuXG4vKipcbiAqIEZvciBhIGdpdmVuIHNvdXJjZSBwYXRoLCBpZiB3ZSBoYXZlIHNlZW4gYVxuICogc291cmNlIGZpbGUgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZGlyZWN0b3J5LFxuICogZmluZCB0aGF0IHdvcmtzcGFjZSBkaXJlY3RvcnkgYW5kIHJldHVybiBpdC5cbiAqL1xuZnVuY3Rpb24gaGFzU2Vlbihzb3VyY2VQYXRoKSB7XG4gIGZvciAobGV0IGVudHJ5IG9mIENBQ0hFKSB7XG4gICAgaWYgKHNvdXJjZVBhdGguc3RhcnRzV2l0aChlbnRyeSkpIHtcbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gIH1cblxuICAvLyB3ZSBoYXZlIG5vdCBzZWVuIHRoaXMgc291cmNlIHBhdGggeWV0XG4gIHJldHVybjtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZXMgdGhlIFwic2VlblwiIHdvcmtzcGFjZSBjYWNoZSxcbiAqIHNvIHRoYXQgd2UgZG9uJ3QgaGl0IHRoZSBmaWxlIHN5c3RlbSB0b28gb2Z0ZW4uXG4gKi9cbmZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHNlZW4gPSBoYXNTZWVuKHNvdXJjZVBhdGgpO1xuXG4gIGlmIChzZWVuKSB7XG4gICAgcmV0dXJuIHNlZW47XG4gIH1cblxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBmaW5kVXAuc3luYygncGFja2FnZS5qc29uJywge1xuICAgIGN3ZDogcGF0aC5kaXJuYW1lKHNvdXJjZVBhdGgpLFxuICB9KTtcblxuICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCk7XG5cbiAgQ0FDSEUuYWRkKHdvcmtzcGFjZVBhdGgpO1xuXG4gIHJldHVybiB3b3Jrc3BhY2VQYXRoO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiByZXR1cm5zIHRoZSBwYWNrYWdlLmpzb24jbmFtZSBmb3IgYSBnaXZlbiBzb3VyY2VQYXRoXG4gKi9cbmZ1bmN0aW9uIHdvcmtzcGFjZVBhY2thZ2VOYW1lKHNvdXJjZVBhdGgpIHtcbiAgY29uc3Qgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG5cbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nLm5hbWU7XG4gIH1cblxuICBsZXQgYnVmZmVyID0gZnNTeW5jLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4od29ya3NwYWNlLCAncGFja2FnZS5qc29uJykpO1xuICBsZXQgY29udGVudCA9IGJ1ZmZlci50b1N0cmluZygpO1xuICBsZXQganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cbiAgTUFOSUZFU1RfQ0FDSEUuc2V0KHdvcmtzcGFjZSwganNvbik7XG5cbiAgcmV0dXJuIGpzb24ubmFtZTtcbn1cblxuIiwgImltcG9ydCBtZDUgZnJvbSAnYmx1ZWltcC1tZDUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gocmVsYXRpdmVQYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuICdlJyArIG1kNShyZWxhdGl2ZVBhdGgpLnN1YnN0cmluZygwLCA4KTtcbn1cbiIsICJpbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBwYXJzZXIgZnJvbSAncG9zdGNzcy1zZWxlY3Rvci1wYXJzZXInO1xuXG5pbXBvcnQgaXNJbnNpZGVHbG9iYWwgZnJvbSAnLi9pc0luc2lkZUdsb2JhbC5qcyc7XG5cbmZ1bmN0aW9uIGdldENsYXNzZXNBbmRUYWdzKHNlbCwgY2xhc3NlcywgdGFncykge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2xzKSA9PiB7XG4gICAgc2xzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIGNsYXNzZXMuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3RhZycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICB0YWdzLmFkZChzZWxlY3Rvci52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcGFyc2VyKHRyYW5zZm9ybSkucHJvY2Vzc1N5bmMoc2VsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzKGNzcykge1xuICBjb25zdCBjbGFzc2VzID0gbmV3IFNldCgpO1xuICBjb25zdCB0YWdzID0gbmV3IFNldCgpO1xuXG4gIGNvbnN0IGFzdCA9IHBvc3Rjc3MucGFyc2UoY3NzKTtcblxuICBhc3Qud2Fsaygobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdydWxlJykge1xuICAgICAgZ2V0Q2xhc3Nlc0FuZFRhZ3Mobm9kZS5zZWxlY3RvciwgY2xhc3NlcywgdGFncyk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4geyBjbGFzc2VzLCB0YWdzIH07XG59XG5cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0luc2lkZUdsb2JhbChub2RlLCBmdW5jKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ3BzZXVkbycgJiYgcGFyZW50LnZhbHVlID09PSAnOmdsb2JhbCcpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUdsb2JhbChwYXJlbnQsIGZ1bmMpO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJpbXBvcnQgcmVjYXN0IGZyb20gJ2VtYmVyLXRlbXBsYXRlLXJlY2FzdCc7XG5cbmltcG9ydCByZW5hbWVDbGFzcyBmcm9tICcuL3JlbmFtZUNsYXNzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUhicyhcbiAgaGJzLFxuICBjbGFzc2VzLFxuICB0YWdzLFxuICBwb3N0Zml4LFxuICBzY29wZWRDbGFzcyA9ICdzY29wZWQtY2xhc3MnLFxuKSB7XG4gIGxldCBhc3QgPSByZWNhc3QucGFyc2UoaGJzKTtcbiAgbGV0IHN0YWNrID0gW107XG5cbiAgcmVjYXN0LnRyYXZlcnNlKGFzdCwge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLnBhdGg/Lm9yaWdpbmFsID09PSBzY29wZWRDbGFzcyAmJlxuICAgICAgICBub2RlLnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNzc0NsYXNzID0gbm9kZS5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5wYXRoPy5vcmlnaW5hbCA9PT0gc2NvcGVkQ2xhc3MgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhdGg/LnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjc3NDbGFzcyA9IG5vZGUucGF0aC5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjc3NDbGFzcykge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy50ZXh0KHJlbmFtZUNsYXNzKGNzc0NsYXNzLCBwb3N0Zml4KSk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gJ0F0dHJOb2RlJykge1xuICAgICAgICAgIHBhcmVudC5xdW90ZVR5cGUgPSAnXCInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBTdWJFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5vcmlnaW5hbCA9PT0gc2NvcGVkQ2xhc3MgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy5saXRlcmFsKFxuICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICByZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIGxldCByZXN1bHQgPSByZWNhc3QucHJpbnQoYXN0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmFtZUNsYXNzKFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgcG9zdGZpeDogc3RyaW5nLFxuICBjbGFzc2VzSW5Dc3M/OiBTZXQ8c3RyaW5nPixcbikge1xuICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyk7XG4gIGNvbnN0IHJlbmFtZWRDbGFzc2VzID0gY2xhc3Nlc1xuICAgIC5maWx0ZXIoKGMpID0+IGMpXG4gICAgLm1hcCgoYykgPT4gYy50cmltKCkpXG4gICAgLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKCFjbGFzc2VzSW5Dc3MgfHwgY2xhc3Nlc0luQ3NzLmhhcyhjKSkge1xuICAgICAgICBpZiAoYy5lbmRzV2l0aChwb3N0Zml4KSkgcmV0dXJuIGM7XG5cbiAgICAgICAgcmV0dXJuIGMgKyAnXycgKyBwb3N0Zml4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYztcbiAgICB9KVxuICAgIC5qb2luKCcgJyk7XG5cbiAgY29uc3QgcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXMgPSBjbGFzc05hbWUucmVwbGFjZShcbiAgICBjbGFzc05hbWUudHJpbVN0YXJ0KCkudHJpbUVuZCgpLFxuICAgIHJlbmFtZWRDbGFzc2VzLFxuICApO1xuXG4gIHJldHVybiByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQSxJQUFBQSxtQkFBb0M7QUFDcEMsSUFBQUMsb0JBQWlCO0FBRWpCLDZCQUFtQjtBQUNuQiw2QkFBdUI7QUFDdkIsa0NBQXVCO0FBQ3ZCLHdDQUFtQjtBQUNuQix5QkFBNkI7OztBQ1Q3QixzQkFBcUI7QUFFckIsZUFBTyxpQkFBd0JDLE9BQU07QUFDbkMsTUFBSTtBQUNGLGNBQU0sc0JBQUtBLEtBQUk7QUFFZixXQUFPO0FBQUEsRUFDVCxTQUFTLEdBQUc7QUFDVixXQUFPO0FBQUEsRUFDVDtBQUNGOzs7QUNUQSx1QkFBaUI7QUFFakIscUJBQW1COzs7QUNIbkIseUJBQWdCO0FBRUQsU0FBUix5QkFBMEMsY0FBc0I7QUFDckUsU0FBTyxVQUFNLG1CQUFBQyxTQUFJLFlBQVksRUFBRSxVQUFVLEdBQUcsQ0FBQztBQUMvQzs7O0FEZ0JPLFNBQVMsOEJBQThCLG1CQUFtQjtBQWMvRCxNQUFJLGtCQUFrQixrQkFBa0IsUUFBUSxZQUFZLEdB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LGFBQWEsZ0JBQWdCO0FBQUEsTUFDaEQ7QUFBQSxNQUNBLGdCQUFnQixNQUFNLEtBQUs7QUFBQSxNQUMzQixPQUFPLEtBQUs7QUFBQSxNQUNaLGlCQUFpQixLQUFLO0FBQUEsSUFDeEIsQ0FBQztBQUVELFVBQU0sa0JBQWtCLElBQUksOEJBQU8sZ0JBQWdCO0FBQUEsTUFDakQsU0FBUyxNQUFNLElBQUksQ0FBQyxTQUFTO0FBQzNCLFlBQUksWUFBWSxLQUFLLFNBQVMsR0FBRyxJQUFJLE9BQU8sR0FBRyxJQUFJO0FBRW5ELGVBQU8sR0FBRyxTQUFTO0FBQUEsTUFDckIsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUVELFVBQU0sU0FBUyxJQUFJLDhCQUFPLFdBQVc7QUFBQSxNQUNuQyxTQUFTLENBQUMsS0FBSyxVQUFVLGlCQUFpQjtBQUFBLElBQzVDLENBQUM7QUFFRCxRQUFJLGVBQWUsSUFBSSw0QkFBQUEsUUFBVztBQUFBLE1BQ2hDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFFRCxRQUFJLFlBQVksSUFBSSx1QkFBQUMsUUFBTyxjQUFjO0FBQUEsTUFDdkMsWUFBWSxRQUFRLFlBQVksS0FBSztBQUFBLE1BQ3JDLFdBQVc7QUFBQSxNQUNYLGlCQUFpQixFQUFFLFNBQVMsS0FBSztBQUFBLElBQ25DLENBQUM7QUFFRCxXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfcHJvbWlzZXMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJwYXRoIiwgIm1kNSIsICJwYXRoIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgImltcG9ydF9wb3N0Y3NzIiwgImltcG9ydF9wb3N0Y3NzX3NlbGVjdG9yX3BhcnNlciIsICJwYXJzZXIiLCAicG9zdGNzcyIsICJyZWNhc3QiLCAibm9kZSIsICJGaWx0ZXIiLCAicGF0aCIsICJyZXN1bHRzIiwgInAiLCAiTWVyZ2VUcmVlcyIsICJDb25jYXQiXQp9Cg==
@@ -341,7 +341,7 @@ var ScopedFilter = class extends Filter {
341
341
  for (let template of templates) {
342
342
  templateComparison.push(
343
343
  didTemplateChange(
344
- template.contents,
344
+ template,
345
345
  previousClasses,
346
346
  classes,
347
347
  tags,
@@ -429,4 +429,4 @@ var ScopedCssPreprocessor = class {
429
429
  export {
430
430
  ScopedCssPreprocessor as default
431
431
  };
432
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xpYi9zY29wZWQtY3NzLXByZXByb2Nlc3Nvci5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2ZzRXhpc3RzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoLnRzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvaXNJbnNpZGVHbG9iYWwuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9yZXdyaXRlQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUhicy5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlbmFtZUNsYXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBDb25jYXQgZnJvbSAnYnJvY2NvbGktY29uY2F0JztcbmltcG9ydCB7IEZ1bm5lbCB9IGZyb20gJ2Jyb2Njb2xpLWZ1bm5lbCc7XG5pbXBvcnQgTWVyZ2VUcmVlcyBmcm9tICdicm9jY29saS1tZXJnZS10cmVlcyc7XG5pbXBvcnQgRmlsdGVyIGZyb20gJ2Jyb2Njb2xpLXBlcnNpc3RlbnQtZmlsdGVyJztcbmltcG9ydCB7IFByZXByb2Nlc3NvciB9IGZyb20gJ2NvbnRlbnQtdGFnJztcblxuaW1wb3J0IGZzRXhpc3RzIGZyb20gJy4vZnNFeGlzdHMuanMnO1xuaW1wb3J0IHsgcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGggfSBmcm9tICcuL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2VuZXJhdGVIYXNoIGZyb20gJy4vZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi9yZXdyaXRlQ3NzLmpzJztcbmltcG9ydCByZXdyaXRlSGJzIGZyb20gJy4vcmV3cml0ZUhicy5qcyc7XG5cbmNvbnN0IHAgPSBuZXcgUHJlcHJvY2Vzc29yKCk7XG5jb25zdCBDT01QT05FTlRfRVhURU5TSU9OUyA9IFsnaGJzJywgJ2pzJywgJ3RzJywgJ2dqcycsICdndHMnXTtcbmNvbnN0IFRFTVBMQVRFX0VYVEVOU0lPTlMgPSBbJ2hicycsICdnanMnLCAnZ3RzJ107XG5cbmNsYXNzIFNjb3BlZEZpbHRlciBleHRlbmRzIEZpbHRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudHNOb2RlLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihjb21wb25lbnRzTm9kZSwgb3B0aW9ucyk7XG4gICAgdGhpcy53YXJuaW5nU3RyZWFtID0gcHJvY2Vzcy5zdGRlcnI7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zKCkge1xuICAgIHJldHVybiBbJ2NzcyddO1xuICB9XG5cbiAgZ2V0IHRhcmdldEV4dGVuc2lvbigpIHtcbiAgICByZXR1cm4gJ2Nzcyc7XG4gIH1cblxuICBhc3luYyBwcm9jZXNzU3RyaW5nKGNvbnRlbnQsIHJlbGF0aXZlUGF0aCkge1xuICAgIC8vIGlnbm9yZSBjc3MgZmlsZXMgZm9yIGVtYmVyLWNzcy1tb2R1bGVzXG4gICAgaWYgKHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnLm1vZHVsZS5jc3MnKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIGNvcnJlc3BvbmRpbmcganMgZmlsZSBleGlzdHNcbiAgICBjb25zdCBleGlzdFByb21pc2VzID0gW107XG5cbiAgICBmb3IgKGxldCBpbnB1dFBhdGggb2YgdGhpcy5pbnB1dFBhdGhzKSB7XG4gICAgICBmb3IgKGxldCBleHQgb2YgQ09NUE9ORU5UX0VYVEVOU0lPTlMpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVDb21wb25lbnRQYXRoID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcLmNzcyQvLCAnLicgKyBleHQpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRQYXRoID0gcGF0aC5qb2luKGlucHV0UGF0aCwgcmVsYXRpdmVDb21wb25lbnRQYXRoKTtcblxuICAgICAgICBleGlzdFByb21pc2VzLnB1c2goZnNFeGlzdHMoY29tcG9uZW50UGF0aCkpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFBvZHMgc3VwcG9ydFxuICAgICAgICovXG4gICAgICBpZiAocmVsYXRpdmVQYXRoLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL3N0eWxlc1xcLmNzcyQvLCAndGVtcGxhdGUuaGJzJyk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIGRpcmVjdG9yeSk7XG5cbiAgICAgICAgZXhpc3RQcm9taXNlcy5wdXNoKGZzRXhpc3RzKHRlbXBsYXRlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0UmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGV4aXN0UHJvbWlzZXMpO1xuICAgIGNvbnN0IGNvbXBvbmVudEV4aXN0cyA9IGV4aXN0UmVzdWx0cy5zb21lKChyKSA9PiByKTtcblxuICAgIC8vIHJld3JpdGUgY3NzIGZpbGVcbiAgICBpZiAoY29tcG9uZW50RXhpc3RzKSB7XG4gICAgICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHJlbGF0aXZlUGF0aCk7XG5cbiAgICAgIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobG9jYWxQYWNrYWdlclN0eWxlUGF0aCk7XG5cbiAgICAgIGNvbnRlbnQgPSByZXdyaXRlQ3NzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBoYXNoLFxuICAgICAgICByZWxhdGl2ZVBhdGgsXG4gICAgICAgIHRoaXMub3B0aW9ucy5nZXRVc2VyT3B0aW9ucz8uKCk/LmxheWVyTmFtZSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcG9zdFByb2Nlc3MocmVzdWx0cywgcmVsYXRpdmVQYXRoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJIHx8IHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnLm1vZHVsZS5jc3MnKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaW5wdXRQYXRoIG9mIHRoaXMuaW5wdXRQYXRocykge1xuICAgICAgY29uc3QgdGVtcGxhdGVGaWxlID0ge307XG5cbiAgICAgIGVhY2hFeHRlbnNpb246IGZvciAobGV0IGV4dCBvZiBURU1QTEFURV9FWFRFTlNJT05TKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHJlbGF0aXZlUGF0aC5yZXBsYWNlKC9cXC5jc3MvLCAnLicgKyBleHQpO1xuICAgICAgICBsZXQgdGVtcGxhdGVGaWxlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIHRlbXBsYXRlUGF0aCk7XG4gICAgICAgIGxldCBleGlzdHMgPSBhd2FpdCBmc0V4aXN0cyh0ZW1wbGF0ZUZpbGVQYXRoKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogUG9kcyBzdXBwb3J0XG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZXh0ID09PSAnaGJzJyAmJiAhZXhpc3RzICYmIHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpKSB7XG4gICAgICAgICAgbGV0IHBvZHNOYW1lID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL3N0eWxlc1xcLmNzcyQvLCAndGVtcGxhdGUuaGJzJyk7XG5cbiAgICAgICAgICB0ZW1wbGF0ZUZpbGVQYXRoID0gcGF0aC5qb2luKGlucHV0UGF0aCwgcG9kc05hbWUpO1xuICAgICAgICAgIGV4aXN0cyA9IGF3YWl0IGZzRXhpc3RzKHRlbXBsYXRlRmlsZVBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICAgIHRlbXBsYXRlRmlsZS5wYXRoID0gdGVtcGxhdGVGaWxlUGF0aDtcbiAgICAgICAgICB0ZW1wbGF0ZUZpbGUuZXh0ID0gZXh0O1xuXG4gICAgICAgICAgYnJlYWsgZWFjaEV4dGVuc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdGVtcGxhdGUgZXhpc3RzIHdlIGNoZWNrIHRoZSBjc3MgZm9yIGNoYW5nZXNcbiAgICAgIGlmICh0ZW1wbGF0ZUZpbGUucGF0aCkge1xuICAgICAgICBjb25zdCBjc3NGaWxlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIHJlbGF0aXZlUGF0aCk7XG4gICAgICAgIGNvbnN0IGNzc0NvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoY3NzRmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgICBjb25zdCB7IGNsYXNzZXMsIHRhZ3MgfSA9IGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3NDb250ZW50cyk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ2xhc3NlcyA9IHRoaXMub3B0aW9ucy5wcmV2aW91c0NsYXNzZXMuZ2V0KHJlbGF0aXZlUGF0aCk7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBwcmV2aW91cyBjbGFzc2VzLCBhbmQgdGhleSBhcmUgZGlmZmVyZW50LCBidWlsZCB0ZW1wbGF0ZXMgdG8gY29tcGFyZVxuICAgICAgICBpZiAocHJldmlvdXNDbGFzc2VzICYmIGNsYXNzZXMgIT09IHByZXZpb3VzQ2xhc3Nlcykge1xuICAgICAgICAgIGNvbnN0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPVxuICAgICAgICAgICAgcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocmVsYXRpdmVQYXRoKTtcbiAgICAgICAgICBjb25zdCBwb3N0Zml4ID0gZ2VuZXJhdGVIYXNoKGxvY2FsUGFja2FnZXJTdHlsZVBhdGgpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlUmF3ID0gYXdhaXQgcmVhZEZpbGUodGVtcGxhdGVGaWxlLnBhdGgsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlQ29tcGFyaXNvbiA9IFtdO1xuICAgICAgICAgIGxldCB0ZW1wbGF0ZUNvbnRlbnRzID0gdGVtcGxhdGVSYXc7XG5cbiAgICAgICAgICBpZiAodGVtcGxhdGVGaWxlLmV4dCA9PT0gJ2hicycpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlQ29tcGFyaXNvbi5wdXNoKFxuICAgICAgICAgICAgICBkaWRUZW1wbGF0ZUNoYW5nZShcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnRlbnRzLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgIHRhZ3MsXG4gICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZpbmQgYWxsIHRlbXBsYXRlIHRhZ3MsIGFuZCBleHRyYWN0IHRoZSBjb250ZW50cyB0byBjb21wYXJlXG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gcC5wYXJzZSh0ZW1wbGF0ZVJhdywgJycpO1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gcmVzdWx0cy5tYXAoKHgpID0+IHguY29udGVudHMpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXMpIHtcbiAgICAgICAgICAgICAgdGVtcGxhdGVDb21wYXJpc29uLnB1c2goXG4gICAgICAgICAgICAgICAgZGlkVGVtcGxhdGVDaGFuZ2UoXG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5jb250ZW50cyxcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgIGNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICB0YWdzLFxuICAgICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlQ2hhbmdlZCA9IHRlbXBsYXRlQ29tcGFyaXNvbi5zb21lKCh2KSA9PiB2KTtcblxuICAgICAgICAgIC8vIGlmIHRoZSByZXdyaXRlIGRvZXNuJ3QgbWF0Y2ggdGhlIG9yaWdpbmFsIG91dHB1dCwgd2Ugd2FudCB0byByZWJ1aWxkIHRoZSB0ZW1wbGF0ZVxuICAgICAgICAgIGlmICh0ZW1wbGF0ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gYXdmdWwgaGFjayBiZWNhdXNlIHdlIGRvbid0IGtub3cgaG93IHRvIGludmFsaWRhdGUgYnJvY2NvbGktcGVyc2lzdGVudC1maWx0ZXIgY2FjaGVcbiAgICAgICAgICAgIC8vIGlkZWFsbHkgd2UnZCBpbnZhbGlkYXRlIHRoZSBicm9jY29saS1wZXJpc3RlbnQtZmlsdGVyIGNhY2hlIGhlcmVcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZSh0ZW1wbGF0ZUZpbGUucGF0aCwgdGVtcGxhdGVDb250ZW50cyArICcgJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGFzc2lnbiBmb3IgbmV4dCBydW4gY29tcGFyaXNvblxuXG4gICAgICAgIHRoaXMub3B0aW9ucy5wcmV2aW91c0NsYXNzZXMuc2V0KHJlbGF0aXZlUGF0aCwgY2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wYXJlcyBhIHRlbXBsYXRlIHdpdGggdGhlIGNvbnRleHQgb2YgZGlmZmVyZW50IHNldHMgb2YgZXh0cmFjZWQgY3NzIGNsYXNzZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudHNcbiAqIEBwYXJhbSB7U2V0fSBwcmV2aW91c0NsYXNzZXNcbiAqIEBwYXJhbSB7U2V0fSBjdXJyZW50Q2xhc3Nlc1xuICogQHBhcmFtIHtTZXR9IHRhZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3N0Zml4XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZGlkVGVtcGxhdGVDaGFuZ2UoXG4gIGNvbnRlbnRzLFxuICBwcmV2aW91c0NsYXNzZXMsXG4gIGN1cnJlbnRDbGFzc2VzLFxuICB0YWdzLFxuICBwb3N0Zml4LFxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsID0gcmV3cml0ZUhicyhjb250ZW50cywgcHJldmlvdXNDbGFzc2VzLCB0YWdzLCBwb3N0Zml4KTtcbiAgY29uc3QgY3VycmVudCA9IHJld3JpdGVIYnMoY29udGVudHMsIGN1cnJlbnRDbGFzc2VzLCB0YWdzLCBwb3N0Zml4KTtcblxuICByZXR1cm4gb3JpZ2luYWwgIT09IGN1cnJlbnQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjb3BlZENzc1ByZXByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLm93bmVyID0gb3B0aW9ucy5vd25lcjtcbiAgICB0aGlzLmFwcE5hbWUgPSBvcHRpb25zLm93bmVyLnBhcmVudC5wa2cubmFtZTtcbiAgICB0aGlzLm5hbWUgPSAnc2NvcGVkLWNzcy1wcmVwcm9jZXNzb3InO1xuICAgIHRoaXMucHJldmlvdXNDbGFzc2VzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG9wdGlvbnMgZnJvbSBgc2V0dXBQcmVwcm9jZXNzb3JSZWdpc3RyeWAsIHRoZSB2MS1BZGRvbiBIb29rXG4gICAqIEBwYXJhbSB7eyBsYXllck5hbWU/OiBzdHJpbmcgfX0gb3B0aW9uc1xuICAgKi9cbiAgY29uZmlndXJlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy51c2VyT3B0aW9ucyA9IG9wdGlvbnMgfHwgeyBbJ25vdCBjb25maWd1cmVkJ106IHRydWUgfTtcbiAgfVxuXG4gIHRvVHJlZShpbnB1dE5vZGUsIGlucHV0UGF0aCwgb3V0cHV0RGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgY29uc3Qgb3RoZXJQcmVwcm9jZXNzb3JzID0gdGhpcy5wcmVwcm9jZXNzb3JzLmZpbHRlcigocCkgPT4gcCAhPT0gdGhpcyk7XG4gICAgY29uc3Qgb3RoZXJUcmVlcyA9IG90aGVyUHJlcHJvY2Vzc29ycy5tYXAoKHApID0+IHAudG9UcmVlKC4uLmFyZ3VtZW50cykpO1xuICAgIGxldCBtZXJnZWRPdGhlclRyZWVzID0gbmV3IE1lcmdlVHJlZXMob3RoZXJUcmVlcyk7XG5cbiAgICBsZXQgcm9vdHMgPSBbXG4gICAgICB0aGlzLmFwcE5hbWUgKyAnL2NvbXBvbmVudHMvJyxcbiAgICAgIC4uLih0aGlzLnVzZXJPcHRpb25zLmFkZGl0aW9uYWxSb290cyB8fCBbXSkubWFwKFxuICAgICAgICAocm9vdCkgPT4gYCR7dGhpcy5hcHBOYW1lfS8ke3Jvb3R9YCxcbiAgICAgICksXG4gICAgXTtcbiAgICBsZXQgaW5jbHVkZSA9IHJvb3RzXG4gICAgICAubWFwKChyb290KSA9PiB7XG4gICAgICAgIGxldCB3aXRoU2xhc2ggPSByb290LmVuZHNXaXRoKCcvJykgPyByb290IDogYCR7cm9vdH0vYDtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGAke3dpdGhTbGFzaH0qKi8qLmNzc2AsXG4gICAgICAgICAgLi4uQ09NUE9ORU5UX0VYVEVOU0lPTlMubWFwKChleHQpID0+IGAke3dpdGhTbGFzaH0qKi8qLiR7ZXh0fWApLFxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICAgIC5mbGF0KCk7XG5cbiAgICBsZXQgY29tcG9uZW50c05vZGUgPSBuZXcgRnVubmVsKGlucHV0Tm9kZSwgeyBpbmNsdWRlIH0pO1xuXG4gICAgY29tcG9uZW50c05vZGUgPSBuZXcgU2NvcGVkRmlsdGVyKGNvbXBvbmVudHNOb2RlLCB7XG4gICAgICBpbnB1dFBhdGgsXG4gICAgICBnZXRVc2VyT3B0aW9uczogKCkgPT4gdGhpcy51c2VyT3B0aW9ucyxcbiAgICAgIG93bmVyOiB0aGlzLm93bmVyLFxuICAgICAgcHJldmlvdXNDbGFzc2VzOiB0aGlzLnByZXZpb3VzQ2xhc3NlcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFN0eWxlcyA9IG5ldyBGdW5uZWwoY29tcG9uZW50c05vZGUsIHtcbiAgICAgIGluY2x1ZGU6IHJvb3RzLm1hcCgocm9vdCkgPT4ge1xuICAgICAgICBsZXQgd2l0aFNsYXNoID0gcm9vdC5lbmRzV2l0aCgnLycpID8gcm9vdCA6IGAke3Jvb3R9L2A7XG5cbiAgICAgICAgcmV0dXJuIGAke3dpdGhTbGFzaH0qKi8qLmNzc2A7XG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwcENzcyA9IG5ldyBGdW5uZWwoaW5wdXROb2RlLCB7XG4gICAgICBpbmNsdWRlOiBbdGhpcy5hcHBOYW1lICsgJy9zdHlsZXMvYXBwLmNzcyddLFxuICAgIH0pO1xuXG4gICAgbGV0IG1lcmdlZFN0eWxlcyA9IG5ldyBNZXJnZVRyZWVzKFtcbiAgICAgIGFwcENzcyxcbiAgICAgIG1lcmdlZE90aGVyVHJlZXMsXG4gICAgICBjb21wb25lbnRTdHlsZXMsXG4gICAgXSk7XG5cbiAgICBsZXQgbmV3T3V0cHV0ID0gbmV3IENvbmNhdChtZXJnZWRTdHlsZXMsIHtcbiAgICAgIG91dHB1dEZpbGU6IG9wdGlvbnMub3V0cHV0UGF0aHNbJ2FwcCddLFxuICAgICAgYWxsb3dOb25lOiB0cnVlLFxuICAgICAgc291cmNlTWFwQ29uZmlnOiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdPdXRwdXQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBzdGF0IH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChwYXRoKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgc3RhdChwYXRoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IGZzU3luYyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5cbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi9nZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gudHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZUhhc2hGcm9tQWJzb2x1dGVQYXRoKGFic29sdXRlUGF0aCkge1xuICAvKipcbiAgICogVGhlIHdob2xlIG9mIGBhcHBQYXRoYCB1bHRpbWF0ZWx5IHRyYW5zZm9ybXMgdGhlIGBhYnNvbHV0ZVBhdGhgXG4gICAqIGludG8gdGhlIGV4YWN0IHN0cmluZyB0aGF0IGZvbGtzIHdpbGwgcGFzcyB0byBgcmVsYXRpdmVQYXRoYFxuICAgKiBhdCBydW50aW1lLlxuICAgKi9cbiAgY29uc3QgbW9kdWxlUGF0aCA9IGFwcFBhdGgoYWJzb2x1dGVQYXRoKTtcblxuICBjb25zdCBoYXNoID0gZ2VuZXJhdGVIYXNoKG1vZHVsZVBhdGgpO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVNjb3BlZFBhdGgpIHtcbiAgLyoqXG4gICAqICpCeSBjb252ZW50aW9uKiwgYHNyY2AgaXMgb21pdHRlZCBmcm9tIGNvbXBvbmVudCBwYXRocy5cbiAgICogV2UgY2FuIHJlZmxlY3QgdGhlIHNhbWUgYmVoYXZpb3IgYnkgcmVwbGFjaW5nIHNyYy9cbiAgICogd2l0aCBhbiBlbXB0eSBzdHJpbmcuXG4gICAqXG4gICAqIENTUyBpc24ndCBlbWl0dGVkIGFzIGEgY28tbG9jYXRlZCBtb2R1bGUsIGJ1dFxuICAgKiB0byBrZWVwIGNvbnZlbnRpb25zIGNvbnNpc3RlbnQgYWNyb3NzIGxhbmd1YWdlcyxcbiAgICogd2UgY2FuIHByZXRlbmQgaXQgaXMuXG4gICAqXG4gICAqIEFueSBjdXN0b21pemF0aW9uIGJleW9uZCByZW1vdmluZyBgc3JjYCBhbmQgYGFwcGAgaXMgcG90ZW50aWFsbHkgY29uZnVzaW5nLlxuICAgKiBJZiB3ZSBuZWVkIGZ1cnRoZXIgY3VzdG9taXphdGlvbnMsIHdlJ2xsIHdhbnQgdG8gbWF0Y2ggb24gYGV4cG9ydHNgIGluIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHBhY2thZ2UuanNvblxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VTY29wZWRQYXRoLnJlcGxhY2UoL15cXC9zcmNcXC8vLCAnLycpO1xuXG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgLyoqXG4gICAqIFBvZHMgc3VwcG9ydC5cbiAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICpcbiAgICogTm90ZSB0aGF0IHBvZHMgZm9yIGNvbXBvbmVudHMgd2lsbCBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gICAqL1xuICBsZXQgaXNQb2QgPVxuICAgICFwYWNrYWdlUmVsYXRpdmUuaW5jbHVkZXMoJy9jb21wb25lbnRzLycpICYmXG4gICAgKHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgnc3R5bGVzLmNzcycpIHx8XG4gICAgICBwYWNrYWdlUmVsYXRpdmUuZW5kc1dpdGgoJ3RlbXBsYXRlLmhicycpIHx8XG4gICAgICBwYWNrYWdlUmVsYXRpdmUuZW5kc1dpdGgoJ3RlbXBsYXRlLmpzJykpO1xuXG4gIGlmIChpc1BvZCkge1xuICAgIHJldHVybiBwYXJzZWQuZGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBpcyBwYXNzZWQsIHJlbW92ZSBpdC5cbiAgICogV2hlbiB1c2luZyBwYWNrYWdlcnMsIGZvbGtzIGFyZSB1c2VkIHRvIG5vdCBoYXZpbmcgdG8gc3BlY2lmeSBleHRlbnNpb25zIGZvciBmaWxlcy5cbiAgICogU2luY2Ugd2UgZG9uJ3QgZXZlbiBlbWl0IGNzcyBmaWxlcyBjby1sb2NhdGVkIHRvIGVhY2ggbW9kdWxlLFxuICAgKiB0aGlzIGhlbHBzIHVzIG5vdCBjb252ZXkgYSBsaWUgdGhhdCBhIGZpbGUgbWF5IGV4aXN0IGluIGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlIGA8bW9kdWxlLW5hbWU+L2NvbXBvbmVudHMvYnV0dG9uYC5cbiAgICogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgZXh0ZW5zaW9uIGlzLCBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBjc3MgZmlsZVxuICAgKiBmb3IgdGhlIGJ1dHRvbiBtb2R1bGUgYW55d2F5LlxuICAgKi9cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xuXG4gIHJldHVybiBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoO1xufVxuXG4vKipcbiAqIHJldHVybnMgdGhlIGFwcC1tb2R1bGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGVcbiAqXG4gKiBUaGlzIGFzc3VtZXMgbm9ybWFsIGVtYmVyIGFwcCBjb252ZW50aW9uc1xuICpcbiAqIHdoaWNoIGlzIGA8cGFja2FnZS5qc29uI25hbWU+L3BhdGgtdG8tZmlsZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgd29ya3NwYWNlUGF0aCA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBsZXQgbmFtZSA9IHdvcmtzcGFjZVBhY2thZ2VOYW1lKHNvdXJjZVBhdGgpO1xuXG4gIC8qKlxuICAgKiAgVW5kZXIgZW1icm9pZGVyIGJ1aWxkcywgdGhlIHNwZWMtY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGFwcFxuICAgKiBoYXMgYWxsIHRoZSBmaWxlcyB1bmRlciBhIGZvbGRlciB3aGljaCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIG5hbWUsXG4gICAqIHJhdGhlciB0aGFuIFwiYXBwXCIuXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gc291cmNlUGF0aC5yZXBsYWNlKHdvcmtzcGFjZVBhdGgsICcnKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbmNvbnN0IENBQ0hFID0gbmV3IFNldCgpO1xuXG4vKipcbiAqIEZvciBhIGdpdmVuIHNvdXJjZSBwYXRoLCBpZiB3ZSBoYXZlIHNlZW4gYVxuICogc291cmNlIGZpbGUgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZGlyZWN0b3J5LFxuICogZmluZCB0aGF0IHdvcmtzcGFjZSBkaXJlY3RvcnkgYW5kIHJldHVybiBpdC5cbiAqL1xuZnVuY3Rpb24gaGFzU2Vlbihzb3VyY2VQYXRoKSB7XG4gIGZvciAobGV0IGVudHJ5IG9mIENBQ0hFKSB7XG4gICAgaWYgKHNvdXJjZVBhdGguc3RhcnRzV2l0aChlbnRyeSkpIHtcbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gIH1cblxuICAvLyB3ZSBoYXZlIG5vdCBzZWVuIHRoaXMgc291cmNlIHBhdGggeWV0XG4gIHJldHVybjtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZXMgdGhlIFwic2VlblwiIHdvcmtzcGFjZSBjYWNoZSxcbiAqIHNvIHRoYXQgd2UgZG9uJ3QgaGl0IHRoZSBmaWxlIHN5c3RlbSB0b28gb2Z0ZW4uXG4gKi9cbmZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHNlZW4gPSBoYXNTZWVuKHNvdXJjZVBhdGgpO1xuXG4gIGlmIChzZWVuKSB7XG4gICAgcmV0dXJuIHNlZW47XG4gIH1cblxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBmaW5kVXAuc3luYygncGFja2FnZS5qc29uJywge1xuICAgIGN3ZDogcGF0aC5kaXJuYW1lKHNvdXJjZVBhdGgpLFxuICB9KTtcblxuICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCk7XG5cbiAgQ0FDSEUuYWRkKHdvcmtzcGFjZVBhdGgpO1xuXG4gIHJldHVybiB3b3Jrc3BhY2VQYXRoO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiByZXR1cm5zIHRoZSBwYWNrYWdlLmpzb24jbmFtZSBmb3IgYSBnaXZlbiBzb3VyY2VQYXRoXG4gKi9cbmZ1bmN0aW9uIHdvcmtzcGFjZVBhY2thZ2VOYW1lKHNvdXJjZVBhdGgpIHtcbiAgY29uc3Qgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG5cbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nLm5hbWU7XG4gIH1cblxuICBsZXQgYnVmZmVyID0gZnNTeW5jLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4od29ya3NwYWNlLCAncGFja2FnZS5qc29uJykpO1xuICBsZXQgY29udGVudCA9IGJ1ZmZlci50b1N0cmluZygpO1xuICBsZXQganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cbiAgTUFOSUZFU1RfQ0FDSEUuc2V0KHdvcmtzcGFjZSwganNvbik7XG5cbiAgcmV0dXJuIGpzb24ubmFtZTtcbn1cblxuIiwgImltcG9ydCBtZDUgZnJvbSAnYmx1ZWltcC1tZDUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gocmVsYXRpdmVQYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuICdlJyArIG1kNShyZWxhdGl2ZVBhdGgpLnN1YnN0cmluZygwLCA4KTtcbn1cbiIsICJpbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBwYXJzZXIgZnJvbSAncG9zdGNzcy1zZWxlY3Rvci1wYXJzZXInO1xuXG5pbXBvcnQgaXNJbnNpZGVHbG9iYWwgZnJvbSAnLi9pc0luc2lkZUdsb2JhbC5qcyc7XG5cbmZ1bmN0aW9uIGdldENsYXNzZXNBbmRUYWdzKHNlbCwgY2xhc3NlcywgdGFncykge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2xzKSA9PiB7XG4gICAgc2xzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIGNsYXNzZXMuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3RhZycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICB0YWdzLmFkZChzZWxlY3Rvci52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcGFyc2VyKHRyYW5zZm9ybSkucHJvY2Vzc1N5bmMoc2VsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzKGNzcykge1xuICBjb25zdCBjbGFzc2VzID0gbmV3IFNldCgpO1xuICBjb25zdCB0YWdzID0gbmV3IFNldCgpO1xuXG4gIGNvbnN0IGFzdCA9IHBvc3Rjc3MucGFyc2UoY3NzKTtcblxuICBhc3Qud2Fsaygobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdydWxlJykge1xuICAgICAgZ2V0Q2xhc3Nlc0FuZFRhZ3Mobm9kZS5zZWxlY3RvciwgY2xhc3NlcywgdGFncyk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4geyBjbGFzc2VzLCB0YWdzIH07XG59XG5cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0luc2lkZUdsb2JhbChub2RlLCBmdW5jKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ3BzZXVkbycgJiYgcGFyZW50LnZhbHVlID09PSAnOmdsb2JhbCcpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUdsb2JhbChwYXJlbnQsIGZ1bmMpO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJpbXBvcnQgcmVjYXN0IGZyb20gJ2VtYmVyLXRlbXBsYXRlLXJlY2FzdCc7XG5cbmltcG9ydCByZW5hbWVDbGFzcyBmcm9tICcuL3JlbmFtZUNsYXNzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUhicyhcbiAgaGJzLFxuICBjbGFzc2VzLFxuICB0YWdzLFxuICBwb3N0Zml4LFxuICBzY29wZWRDbGFzcyA9ICdzY29wZWQtY2xhc3MnLFxuKSB7XG4gIGxldCBhc3QgPSByZWNhc3QucGFyc2UoaGJzKTtcbiAgbGV0IHN0YWNrID0gW107XG5cbiAgcmVjYXN0LnRyYXZlcnNlKGFzdCwge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLnBhdGg/Lm9yaWdpbmFsID09PSBzY29wZWRDbGFzcyAmJlxuICAgICAgICBub2RlLnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNzc0NsYXNzID0gbm9kZS5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5wYXRoPy5vcmlnaW5hbCA9PT0gc2NvcGVkQ2xhc3MgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhdGg/LnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjc3NDbGFzcyA9IG5vZGUucGF0aC5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjc3NDbGFzcykge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy50ZXh0KHJlbmFtZUNsYXNzKGNzc0NsYXNzLCBwb3N0Zml4KSk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gJ0F0dHJOb2RlJykge1xuICAgICAgICAgIHBhcmVudC5xdW90ZVR5cGUgPSAnXCInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBTdWJFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5vcmlnaW5hbCA9PT0gc2NvcGVkQ2xhc3MgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy5saXRlcmFsKFxuICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICByZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIGxldCByZXN1bHQgPSByZWNhc3QucHJpbnQoYXN0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmFtZUNsYXNzKFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgcG9zdGZpeDogc3RyaW5nLFxuICBjbGFzc2VzSW5Dc3M/OiBTZXQ8c3RyaW5nPixcbikge1xuICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyk7XG4gIGNvbnN0IHJlbmFtZWRDbGFzc2VzID0gY2xhc3Nlc1xuICAgIC5maWx0ZXIoKGMpID0+IGMpXG4gICAgLm1hcCgoYykgPT4gYy50cmltKCkpXG4gICAgLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKCFjbGFzc2VzSW5Dc3MgfHwgY2xhc3Nlc0luQ3NzLmhhcyhjKSkge1xuICAgICAgICBpZiAoYy5lbmRzV2l0aChwb3N0Zml4KSkgcmV0dXJuIGM7XG5cbiAgICAgICAgcmV0dXJuIGMgKyAnXycgKyBwb3N0Zml4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYztcbiAgICB9KVxuICAgIC5qb2luKCcgJyk7XG5cbiAgY29uc3QgcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXMgPSBjbGFzc05hbWUucmVwbGFjZShcbiAgICBjbGFzc05hbWUudHJpbVN0YXJ0KCkudHJpbUVuZCgpLFxuICAgIHJlbmFtZWRDbGFzc2VzLFxuICApO1xuXG4gIHJldHVybiByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7OztBQUVBLFNBQVMsVUFBVSxpQkFBaUI7QUFDcEMsT0FBT0EsV0FBVTtBQUVqQixPQUFPLFlBQVk7QUFDbkIsU0FBUyxjQUFjO0FBQ3ZCLE9BQU8sZ0JBQWdCO0FBQ3ZCLE9BQU8sWUFBWTtBQUNuQixTQUFTLG9CQUFvQjs7O0FDVDdCLFNBQVMsWUFBWTtBQUVyQixlQUFPLGlCQUF3QkMsT0FBTTtBQUNuQyxNQUFJO0FBQ0YsVUFBTSxLQUFLQSxLQUFJO0FBRWYsV0FBTztBQUFBLEVBQ1QsU0FBUyxHQUFHO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFDRjs7O0FDVEEsT0FBTyxVQUFVO0FBRWpCLE9BQU8sWUFBWTs7O0FDSG5CLE9BQU8sU0FBUztBQUVELFNBQVIseUJBQTBDLGNBQXNCO0FBQ3JFLFNBQU8sTUFBTSxJQUFJLFlBQVksRUFBRSxVQUFVLEdBQUcsQ0FBQztBQUMvQzs7O0FEZ0JPLFNBQVMsOEJBQThCLG1CQUFtQjtBQWMvRCxNQUFJLGtCQUFrQixrQkFBa0IsUUFBUSxZQUFZLEdBQUc7QUFFL0QsTUFB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UyxNQUFNLElBQUksQ0FBQyxTQUFTO0FBQzNCLFlBQUksWUFBWSxLQUFLLFNBQVMsR0FBRyxJQUFJLE9BQU8sR0FBRyxJQUFJO0FBRW5ELGVBQU8sR0FBRyxTQUFTO0FBQUEsTUFDckIsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUVELFVBQU0sU0FBUyxJQUFJLE9BQU8sV0FBVztBQUFBLE1BQ25DLFNBQVMsQ0FBQyxLQUFLLFVBQVUsaUJBQWlCO0FBQUEsSUFDNUMsQ0FBQztBQUVELFFBQUksZUFBZSxJQUFJLFdBQVc7QUFBQSxNQUNoQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBRUQsUUFBSSxZQUFZLElBQUksT0FBTyxjQUFjO0FBQUEsTUFDdkMsWUFBWSxRQUFRLFlBQVksS0FBSztBQUFBLE1BQ3JDLFdBQVc7QUFBQSxNQUNYLGlCQUFpQixFQUFFLFNBQVMsS0FBSztBQUFBLElBQ25DLENBQUM7QUFFRCxXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJwYXRoIiwgInBhdGgiLCAicG9zdGNzcyIsICJwYXJzZXIiLCAicGFyc2VyIiwgInBvc3Rjc3MiLCAibm9kZSIsICJwYXRoIiwgInJlc3VsdHMiLCAicCJdCn0K
432
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xpYi9zY29wZWQtY3NzLXByZXByb2Nlc3Nvci5qcyIsICIuLi8uLi8uLi9zcmMvbGliL2ZzRXhpc3RzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2VuZXJhdGVBYnNvbHV0ZVBhdGhIYXNoLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoLnRzIiwgIi4uLy4uLy4uL3NyYy9saWIvZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvaXNJbnNpZGVHbG9iYWwuanMiLCAiLi4vLi4vLi4vc3JjL2xpYi9yZXdyaXRlQ3NzLmpzIiwgIi4uLy4uLy4uL3NyYy9saWIvcmV3cml0ZUhicy5qcyIsICIuLi8uLi8uLi9zcmMvbGliL3JlbmFtZUNsYXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBDb25jYXQgZnJvbSAnYnJvY2NvbGktY29uY2F0JztcbmltcG9ydCB7IEZ1bm5lbCB9IGZyb20gJ2Jyb2Njb2xpLWZ1bm5lbCc7XG5pbXBvcnQgTWVyZ2VUcmVlcyBmcm9tICdicm9jY29saS1tZXJnZS10cmVlcyc7XG5pbXBvcnQgRmlsdGVyIGZyb20gJ2Jyb2Njb2xpLXBlcnNpc3RlbnQtZmlsdGVyJztcbmltcG9ydCB7IFByZXByb2Nlc3NvciB9IGZyb20gJ2NvbnRlbnQtdGFnJztcblxuaW1wb3J0IGZzRXhpc3RzIGZyb20gJy4vZnNFeGlzdHMuanMnO1xuaW1wb3J0IHsgcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGggfSBmcm9tICcuL2dlbmVyYXRlQWJzb2x1dGVQYXRoSGFzaC5qcyc7XG5pbXBvcnQgZ2VuZXJhdGVIYXNoIGZyb20gJy4vZ2VuZXJhdGVSZWxhdGl2ZVBhdGhIYXNoLmpzJztcbmltcG9ydCBnZXRDbGFzc2VzVGFnc0Zyb21Dc3MgZnJvbSAnLi9nZXRDbGFzc2VzVGFnc0Zyb21Dc3MuanMnO1xuaW1wb3J0IHJld3JpdGVDc3MgZnJvbSAnLi9yZXdyaXRlQ3NzLmpzJztcbmltcG9ydCByZXdyaXRlSGJzIGZyb20gJy4vcmV3cml0ZUhicy5qcyc7XG5cbmNvbnN0IHAgPSBuZXcgUHJlcHJvY2Vzc29yKCk7XG5jb25zdCBDT01QT05FTlRfRVhURU5TSU9OUyA9IFsnaGJzJywgJ2pzJywgJ3RzJywgJ2dqcycsICdndHMnXTtcbmNvbnN0IFRFTVBMQVRFX0VYVEVOU0lPTlMgPSBbJ2hicycsICdnanMnLCAnZ3RzJ107XG5cbmNsYXNzIFNjb3BlZEZpbHRlciBleHRlbmRzIEZpbHRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudHNOb2RlLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihjb21wb25lbnRzTm9kZSwgb3B0aW9ucyk7XG4gICAgdGhpcy53YXJuaW5nU3RyZWFtID0gcHJvY2Vzcy5zdGRlcnI7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zKCkge1xuICAgIHJldHVybiBbJ2NzcyddO1xuICB9XG5cbiAgZ2V0IHRhcmdldEV4dGVuc2lvbigpIHtcbiAgICByZXR1cm4gJ2Nzcyc7XG4gIH1cblxuICBhc3luYyBwcm9jZXNzU3RyaW5nKGNvbnRlbnQsIHJlbGF0aXZlUGF0aCkge1xuICAgIC8vIGlnbm9yZSBjc3MgZmlsZXMgZm9yIGVtYmVyLWNzcy1tb2R1bGVzXG4gICAgaWYgKHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnLm1vZHVsZS5jc3MnKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIGNvcnJlc3BvbmRpbmcganMgZmlsZSBleGlzdHNcbiAgICBjb25zdCBleGlzdFByb21pc2VzID0gW107XG5cbiAgICBmb3IgKGxldCBpbnB1dFBhdGggb2YgdGhpcy5pbnB1dFBhdGhzKSB7XG4gICAgICBmb3IgKGxldCBleHQgb2YgQ09NUE9ORU5UX0VYVEVOU0lPTlMpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVDb21wb25lbnRQYXRoID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcLmNzcyQvLCAnLicgKyBleHQpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRQYXRoID0gcGF0aC5qb2luKGlucHV0UGF0aCwgcmVsYXRpdmVDb21wb25lbnRQYXRoKTtcblxuICAgICAgICBleGlzdFByb21pc2VzLnB1c2goZnNFeGlzdHMoY29tcG9uZW50UGF0aCkpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFBvZHMgc3VwcG9ydFxuICAgICAgICovXG4gICAgICBpZiAocmVsYXRpdmVQYXRoLmVuZHNXaXRoKCdzdHlsZXMuY3NzJykpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL3N0eWxlc1xcLmNzcyQvLCAndGVtcGxhdGUuaGJzJyk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIGRpcmVjdG9yeSk7XG5cbiAgICAgICAgZXhpc3RQcm9taXNlcy5wdXNoKGZzRXhpc3RzKHRlbXBsYXRlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0UmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGV4aXN0UHJvbWlzZXMpO1xuICAgIGNvbnN0IGNvbXBvbmVudEV4aXN0cyA9IGV4aXN0UmVzdWx0cy5zb21lKChyKSA9PiByKTtcblxuICAgIC8vIHJld3JpdGUgY3NzIGZpbGVcbiAgICBpZiAoY29tcG9uZW50RXhpc3RzKSB7XG4gICAgICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHJlbGF0aXZlUGF0aCk7XG5cbiAgICAgIGNvbnN0IGhhc2ggPSBnZW5lcmF0ZUhhc2gobG9jYWxQYWNrYWdlclN0eWxlUGF0aCk7XG5cbiAgICAgIGNvbnRlbnQgPSByZXdyaXRlQ3NzKFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBoYXNoLFxuICAgICAgICByZWxhdGl2ZVBhdGgsXG4gICAgICAgIHRoaXMub3B0aW9ucy5nZXRVc2VyT3B0aW9ucz8uKCk/LmxheWVyTmFtZSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcG9zdFByb2Nlc3MocmVzdWx0cywgcmVsYXRpdmVQYXRoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJIHx8IHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnLm1vZHVsZS5jc3MnKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaW5wdXRQYXRoIG9mIHRoaXMuaW5wdXRQYXRocykge1xuICAgICAgY29uc3QgdGVtcGxhdGVGaWxlID0ge307XG5cbiAgICAgIGVhY2hFeHRlbnNpb246IGZvciAobGV0IGV4dCBvZiBURU1QTEFURV9FWFRFTlNJT05TKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHJlbGF0aXZlUGF0aC5yZXBsYWNlKC9cXC5jc3MvLCAnLicgKyBleHQpO1xuICAgICAgICBsZXQgdGVtcGxhdGVGaWxlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIHRlbXBsYXRlUGF0aCk7XG4gICAgICAgIGxldCBleGlzdHMgPSBhd2FpdCBmc0V4aXN0cyh0ZW1wbGF0ZUZpbGVQYXRoKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogUG9kcyBzdXBwb3J0XG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZXh0ID09PSAnaGJzJyAmJiAhZXhpc3RzICYmIHJlbGF0aXZlUGF0aC5lbmRzV2l0aCgnc3R5bGVzLmNzcycpKSB7XG4gICAgICAgICAgbGV0IHBvZHNOYW1lID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL3N0eWxlc1xcLmNzcyQvLCAndGVtcGxhdGUuaGJzJyk7XG5cbiAgICAgICAgICB0ZW1wbGF0ZUZpbGVQYXRoID0gcGF0aC5qb2luKGlucHV0UGF0aCwgcG9kc05hbWUpO1xuICAgICAgICAgIGV4aXN0cyA9IGF3YWl0IGZzRXhpc3RzKHRlbXBsYXRlRmlsZVBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICAgIHRlbXBsYXRlRmlsZS5wYXRoID0gdGVtcGxhdGVGaWxlUGF0aDtcbiAgICAgICAgICB0ZW1wbGF0ZUZpbGUuZXh0ID0gZXh0O1xuXG4gICAgICAgICAgYnJlYWsgZWFjaEV4dGVuc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdGVtcGxhdGUgZXhpc3RzIHdlIGNoZWNrIHRoZSBjc3MgZm9yIGNoYW5nZXNcbiAgICAgIGlmICh0ZW1wbGF0ZUZpbGUucGF0aCkge1xuICAgICAgICBjb25zdCBjc3NGaWxlUGF0aCA9IHBhdGguam9pbihpbnB1dFBhdGgsIHJlbGF0aXZlUGF0aCk7XG4gICAgICAgIGNvbnN0IGNzc0NvbnRlbnRzID0gYXdhaXQgcmVhZEZpbGUoY3NzRmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgICBjb25zdCB7IGNsYXNzZXMsIHRhZ3MgfSA9IGdldENsYXNzZXNUYWdzRnJvbUNzcyhjc3NDb250ZW50cyk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ2xhc3NlcyA9IHRoaXMub3B0aW9ucy5wcmV2aW91c0NsYXNzZXMuZ2V0KHJlbGF0aXZlUGF0aCk7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBwcmV2aW91cyBjbGFzc2VzLCBhbmQgdGhleSBhcmUgZGlmZmVyZW50LCBidWlsZCB0ZW1wbGF0ZXMgdG8gY29tcGFyZVxuICAgICAgICBpZiAocHJldmlvdXNDbGFzc2VzICYmIGNsYXNzZXMgIT09IHByZXZpb3VzQ2xhc3Nlcykge1xuICAgICAgICAgIGNvbnN0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPVxuICAgICAgICAgICAgcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocmVsYXRpdmVQYXRoKTtcbiAgICAgICAgICBjb25zdCBwb3N0Zml4ID0gZ2VuZXJhdGVIYXNoKGxvY2FsUGFja2FnZXJTdHlsZVBhdGgpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlUmF3ID0gYXdhaXQgcmVhZEZpbGUodGVtcGxhdGVGaWxlLnBhdGgsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlQ29tcGFyaXNvbiA9IFtdO1xuICAgICAgICAgIGxldCB0ZW1wbGF0ZUNvbnRlbnRzID0gdGVtcGxhdGVSYXc7XG5cbiAgICAgICAgICBpZiAodGVtcGxhdGVGaWxlLmV4dCA9PT0gJ2hicycpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlQ29tcGFyaXNvbi5wdXNoKFxuICAgICAgICAgICAgICBkaWRUZW1wbGF0ZUNoYW5nZShcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnRlbnRzLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgIHRhZ3MsXG4gICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZpbmQgYWxsIHRlbXBsYXRlIHRhZ3MsIGFuZCBleHRyYWN0IHRoZSBjb250ZW50cyB0byBjb21wYXJlXG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gcC5wYXJzZSh0ZW1wbGF0ZVJhdywgJycpO1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gcmVzdWx0cy5tYXAoKHgpID0+IHguY29udGVudHMpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXMpIHtcbiAgICAgICAgICAgICAgdGVtcGxhdGVDb21wYXJpc29uLnB1c2goXG4gICAgICAgICAgICAgICAgZGlkVGVtcGxhdGVDaGFuZ2UoXG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgIGNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICB0YWdzLFxuICAgICAgICAgICAgICAgICAgcG9zdGZpeCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlQ2hhbmdlZCA9IHRlbXBsYXRlQ29tcGFyaXNvbi5zb21lKCh2KSA9PiB2KTtcblxuICAgICAgICAgIC8vIGlmIHRoZSByZXdyaXRlIGRvZXNuJ3QgbWF0Y2ggdGhlIG9yaWdpbmFsIG91dHB1dCwgd2Ugd2FudCB0byByZWJ1aWxkIHRoZSB0ZW1wbGF0ZVxuICAgICAgICAgIGlmICh0ZW1wbGF0ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gYXdmdWwgaGFjayBiZWNhdXNlIHdlIGRvbid0IGtub3cgaG93IHRvIGludmFsaWRhdGUgYnJvY2NvbGktcGVyc2lzdGVudC1maWx0ZXIgY2FjaGVcbiAgICAgICAgICAgIC8vIGlkZWFsbHkgd2UnZCBpbnZhbGlkYXRlIHRoZSBicm9jY29saS1wZXJpc3RlbnQtZmlsdGVyIGNhY2hlIGhlcmVcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZSh0ZW1wbGF0ZUZpbGUucGF0aCwgdGVtcGxhdGVDb250ZW50cyArICcgJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGFzc2lnbiBmb3IgbmV4dCBydW4gY29tcGFyaXNvblxuXG4gICAgICAgIHRoaXMub3B0aW9ucy5wcmV2aW91c0NsYXNzZXMuc2V0KHJlbGF0aXZlUGF0aCwgY2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wYXJlcyBhIHRlbXBsYXRlIHdpdGggdGhlIGNvbnRleHQgb2YgZGlmZmVyZW50IHNldHMgb2YgZXh0cmFjZWQgY3NzIGNsYXNzZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudHNcbiAqIEBwYXJhbSB7U2V0fSBwcmV2aW91c0NsYXNzZXNcbiAqIEBwYXJhbSB7U2V0fSBjdXJyZW50Q2xhc3Nlc1xuICogQHBhcmFtIHtTZXR9IHRhZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3N0Zml4XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZGlkVGVtcGxhdGVDaGFuZ2UoXG4gIGNvbnRlbnRzLFxuICBwcmV2aW91c0NsYXNzZXMsXG4gIGN1cnJlbnRDbGFzc2VzLFxuICB0YWdzLFxuICBwb3N0Zml4LFxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsID0gcmV3cml0ZUhicyhjb250ZW50cywgcHJldmlvdXNDbGFzc2VzLCB0YWdzLCBwb3N0Zml4KTtcbiAgY29uc3QgY3VycmVudCA9IHJld3JpdGVIYnMoY29udGVudHMsIGN1cnJlbnRDbGFzc2VzLCB0YWdzLCBwb3N0Zml4KTtcblxuICByZXR1cm4gb3JpZ2luYWwgIT09IGN1cnJlbnQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjb3BlZENzc1ByZXByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLm93bmVyID0gb3B0aW9ucy5vd25lcjtcbiAgICB0aGlzLmFwcE5hbWUgPSBvcHRpb25zLm93bmVyLnBhcmVudC5wa2cubmFtZTtcbiAgICB0aGlzLm5hbWUgPSAnc2NvcGVkLWNzcy1wcmVwcm9jZXNzb3InO1xuICAgIHRoaXMucHJldmlvdXNDbGFzc2VzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG9wdGlvbnMgZnJvbSBgc2V0dXBQcmVwcm9jZXNzb3JSZWdpc3RyeWAsIHRoZSB2MS1BZGRvbiBIb29rXG4gICAqIEBwYXJhbSB7eyBsYXllck5hbWU/OiBzdHJpbmcgfX0gb3B0aW9uc1xuICAgKi9cbiAgY29uZmlndXJlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy51c2VyT3B0aW9ucyA9IG9wdGlvbnMgfHwgeyBbJ25vdCBjb25maWd1cmVkJ106IHRydWUgfTtcbiAgfVxuXG4gIHRvVHJlZShpbnB1dE5vZGUsIGlucHV0UGF0aCwgb3V0cHV0RGlyZWN0b3J5LCBvcHRpb25zKSB7XG4gICAgY29uc3Qgb3RoZXJQcmVwcm9jZXNzb3JzID0gdGhpcy5wcmVwcm9jZXNzb3JzLmZpbHRlcigocCkgPT4gcCAhPT0gdGhpcyk7XG4gICAgY29uc3Qgb3RoZXJUcmVlcyA9IG90aGVyUHJlcHJvY2Vzc29ycy5tYXAoKHApID0+IHAudG9UcmVlKC4uLmFyZ3VtZW50cykpO1xuICAgIGxldCBtZXJnZWRPdGhlclRyZWVzID0gbmV3IE1lcmdlVHJlZXMob3RoZXJUcmVlcyk7XG5cbiAgICBsZXQgcm9vdHMgPSBbXG4gICAgICB0aGlzLmFwcE5hbWUgKyAnL2NvbXBvbmVudHMvJyxcbiAgICAgIC4uLih0aGlzLnVzZXJPcHRpb25zLmFkZGl0aW9uYWxSb290cyB8fCBbXSkubWFwKFxuICAgICAgICAocm9vdCkgPT4gYCR7dGhpcy5hcHBOYW1lfS8ke3Jvb3R9YCxcbiAgICAgICksXG4gICAgXTtcbiAgICBsZXQgaW5jbHVkZSA9IHJvb3RzXG4gICAgICAubWFwKChyb290KSA9PiB7XG4gICAgICAgIGxldCB3aXRoU2xhc2ggPSByb290LmVuZHNXaXRoKCcvJykgPyByb290IDogYCR7cm9vdH0vYDtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGAke3dpdGhTbGFzaH0qKi8qLmNzc2AsXG4gICAgICAgICAgLi4uQ09NUE9ORU5UX0VYVEVOU0lPTlMubWFwKChleHQpID0+IGAke3dpdGhTbGFzaH0qKi8qLiR7ZXh0fWApLFxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICAgIC5mbGF0KCk7XG5cbiAgICBsZXQgY29tcG9uZW50c05vZGUgPSBuZXcgRnVubmVsKGlucHV0Tm9kZSwgeyBpbmNsdWRlIH0pO1xuXG4gICAgY29tcG9uZW50c05vZGUgPSBuZXcgU2NvcGVkRmlsdGVyKGNvbXBvbmVudHNOb2RlLCB7XG4gICAgICBpbnB1dFBhdGgsXG4gICAgICBnZXRVc2VyT3B0aW9uczogKCkgPT4gdGhpcy51c2VyT3B0aW9ucyxcbiAgICAgIG93bmVyOiB0aGlzLm93bmVyLFxuICAgICAgcHJldmlvdXNDbGFzc2VzOiB0aGlzLnByZXZpb3VzQ2xhc3NlcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFN0eWxlcyA9IG5ldyBGdW5uZWwoY29tcG9uZW50c05vZGUsIHtcbiAgICAgIGluY2x1ZGU6IHJvb3RzLm1hcCgocm9vdCkgPT4ge1xuICAgICAgICBsZXQgd2l0aFNsYXNoID0gcm9vdC5lbmRzV2l0aCgnLycpID8gcm9vdCA6IGAke3Jvb3R9L2A7XG5cbiAgICAgICAgcmV0dXJuIGAke3dpdGhTbGFzaH0qKi8qLmNzc2A7XG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwcENzcyA9IG5ldyBGdW5uZWwoaW5wdXROb2RlLCB7XG4gICAgICBpbmNsdWRlOiBbdGhpcy5hcHBOYW1lICsgJy9zdHlsZXMvYXBwLmNzcyddLFxuICAgIH0pO1xuXG4gICAgbGV0IG1lcmdlZFN0eWxlcyA9IG5ldyBNZXJnZVRyZWVzKFtcbiAgICAgIGFwcENzcyxcbiAgICAgIG1lcmdlZE90aGVyVHJlZXMsXG4gICAgICBjb21wb25lbnRTdHlsZXMsXG4gICAgXSk7XG5cbiAgICBsZXQgbmV3T3V0cHV0ID0gbmV3IENvbmNhdChtZXJnZWRTdHlsZXMsIHtcbiAgICAgIG91dHB1dEZpbGU6IG9wdGlvbnMub3V0cHV0UGF0aHNbJ2FwcCddLFxuICAgICAgYWxsb3dOb25lOiB0cnVlLFxuICAgICAgc291cmNlTWFwQ29uZmlnOiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdPdXRwdXQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBzdGF0IH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChwYXRoKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgc3RhdChwYXRoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IGZzU3luYyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5cbmltcG9ydCBnZW5lcmF0ZUhhc2ggZnJvbSAnLi9nZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gudHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZUhhc2hGcm9tQWJzb2x1dGVQYXRoKGFic29sdXRlUGF0aCkge1xuICAvKipcbiAgICogVGhlIHdob2xlIG9mIGBhcHBQYXRoYCB1bHRpbWF0ZWx5IHRyYW5zZm9ybXMgdGhlIGBhYnNvbHV0ZVBhdGhgXG4gICAqIGludG8gdGhlIGV4YWN0IHN0cmluZyB0aGF0IGZvbGtzIHdpbGwgcGFzcyB0byBgcmVsYXRpdmVQYXRoYFxuICAgKiBhdCBydW50aW1lLlxuICAgKi9cbiAgY29uc3QgbW9kdWxlUGF0aCA9IGFwcFBhdGgoYWJzb2x1dGVQYXRoKTtcblxuICBjb25zdCBoYXNoID0gZ2VuZXJhdGVIYXNoKG1vZHVsZVBhdGgpO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVNjb3BlZFBhdGhUb01vZHVsZVBhdGgocGFja2FnZVNjb3BlZFBhdGgpIHtcbiAgLyoqXG4gICAqICpCeSBjb252ZW50aW9uKiwgYHNyY2AgaXMgb21pdHRlZCBmcm9tIGNvbXBvbmVudCBwYXRocy5cbiAgICogV2UgY2FuIHJlZmxlY3QgdGhlIHNhbWUgYmVoYXZpb3IgYnkgcmVwbGFjaW5nIHNyYy9cbiAgICogd2l0aCBhbiBlbXB0eSBzdHJpbmcuXG4gICAqXG4gICAqIENTUyBpc24ndCBlbWl0dGVkIGFzIGEgY28tbG9jYXRlZCBtb2R1bGUsIGJ1dFxuICAgKiB0byBrZWVwIGNvbnZlbnRpb25zIGNvbnNpc3RlbnQgYWNyb3NzIGxhbmd1YWdlcyxcbiAgICogd2UgY2FuIHByZXRlbmQgaXQgaXMuXG4gICAqXG4gICAqIEFueSBjdXN0b21pemF0aW9uIGJleW9uZCByZW1vdmluZyBgc3JjYCBhbmQgYGFwcGAgaXMgcG90ZW50aWFsbHkgY29uZnVzaW5nLlxuICAgKiBJZiB3ZSBuZWVkIGZ1cnRoZXIgY3VzdG9taXphdGlvbnMsIHdlJ2xsIHdhbnQgdG8gbWF0Y2ggb24gYGV4cG9ydHNgIGluIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHBhY2thZ2UuanNvblxuICAgKi9cbiAgbGV0IHBhY2thZ2VSZWxhdGl2ZSA9IHBhY2thZ2VTY29wZWRQYXRoLnJlcGxhY2UoL15cXC9zcmNcXC8vLCAnLycpO1xuXG4gIGxldCBwYXJzZWQgPSBwYXRoLnBhcnNlKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgLyoqXG4gICAqIFBvZHMgc3VwcG9ydC5cbiAgICogRm9yIHBvZHMsIHdlIGNob3Agb2ZmIHRoZSB3aG9sZSBmaWxlLCBhbmQgdXNlIHRoZSBkaXIgbmFtZSBhcyB0aGUgXCJtb2R1bGVQYXRoXCJcbiAgICpcbiAgICogTm90ZSB0aGF0IHBvZHMgZm9yIGNvbXBvbmVudHMgd2lsbCBuZXZlciBiZSBzdXBwb3J0ZWQuXG4gICAqL1xuICBsZXQgaXNQb2QgPVxuICAgICFwYWNrYWdlUmVsYXRpdmUuaW5jbHVkZXMoJy9jb21wb25lbnRzLycpICYmXG4gICAgKHBhY2thZ2VSZWxhdGl2ZS5lbmRzV2l0aCgnc3R5bGVzLmNzcycpIHx8XG4gICAgICBwYWNrYWdlUmVsYXRpdmUuZW5kc1dpdGgoJ3RlbXBsYXRlLmhicycpIHx8XG4gICAgICBwYWNrYWdlUmVsYXRpdmUuZW5kc1dpdGgoJ3RlbXBsYXRlLmpzJykpO1xuXG4gIGlmIChpc1BvZCkge1xuICAgIHJldHVybiBwYXJzZWQuZGlyO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBpcyBwYXNzZWQsIHJlbW92ZSBpdC5cbiAgICogV2hlbiB1c2luZyBwYWNrYWdlcnMsIGZvbGtzIGFyZSB1c2VkIHRvIG5vdCBoYXZpbmcgdG8gc3BlY2lmeSBleHRlbnNpb25zIGZvciBmaWxlcy5cbiAgICogU2luY2Ugd2UgZG9uJ3QgZXZlbiBlbWl0IGNzcyBmaWxlcyBjby1sb2NhdGVkIHRvIGVhY2ggbW9kdWxlLFxuICAgKiB0aGlzIGhlbHBzIHVzIG5vdCBjb252ZXkgYSBsaWUgdGhhdCBhIGZpbGUgbWF5IGV4aXN0IGluIGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlIGA8bW9kdWxlLW5hbWU+L2NvbXBvbmVudHMvYnV0dG9uYC5cbiAgICogSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgZXh0ZW5zaW9uIGlzLCBiZWNhdXNlIHlvdSBjYW4gb25seSBoYXZlIG9uZSBjc3MgZmlsZVxuICAgKiBmb3IgdGhlIGJ1dHRvbiBtb2R1bGUgYW55d2F5LlxuICAgKi9cbiAgbGV0IGxvY2FsUGFja2FnZXJTdHlsZVBhdGggPSBwYXRoLmpvaW4ocGFyc2VkLmRpciwgcGFyc2VkLm5hbWUpO1xuXG4gIHJldHVybiBsb2NhbFBhY2thZ2VyU3R5bGVQYXRoO1xufVxuXG4vKipcbiAqIHJldHVybnMgdGhlIGFwcC1tb2R1bGUgcGF0aCBvZiB0aGUgc291cmNlIGZpbGVcbiAqXG4gKiBUaGlzIGFzc3VtZXMgbm9ybWFsIGVtYmVyIGFwcCBjb252ZW50aW9uc1xuICpcbiAqIHdoaWNoIGlzIGA8cGFja2FnZS5qc29uI25hbWU+L3BhdGgtdG8tZmlsZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcFBhdGgoc291cmNlUGF0aCkge1xuICBsZXQgd29ya3NwYWNlUGF0aCA9IGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpO1xuICBsZXQgbmFtZSA9IHdvcmtzcGFjZVBhY2thZ2VOYW1lKHNvdXJjZVBhdGgpO1xuXG4gIC8qKlxuICAgKiAgVW5kZXIgZW1icm9pZGVyIGJ1aWxkcywgdGhlIHNwZWMtY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGFwcFxuICAgKiBoYXMgYWxsIHRoZSBmaWxlcyB1bmRlciBhIGZvbGRlciB3aGljaCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIG5hbWUsXG4gICAqIHJhdGhlciB0aGFuIFwiYXBwXCIuXG4gICAqL1xuICBsZXQgcGFja2FnZVJlbGF0aXZlID0gc291cmNlUGF0aC5yZXBsYWNlKHdvcmtzcGFjZVBhdGgsICcnKTtcblxuICBsZXQgbG9jYWxQYWNrYWdlclN0eWxlUGF0aCA9IHBhY2thZ2VTY29wZWRQYXRoVG9Nb2R1bGVQYXRoKHBhY2thZ2VSZWxhdGl2ZSk7XG5cbiAgcmV0dXJuIGAke25hbWV9JHtsb2NhbFBhY2thZ2VyU3R5bGVQYXRofWA7XG59XG5cbmNvbnN0IENBQ0hFID0gbmV3IFNldCgpO1xuXG4vKipcbiAqIEZvciBhIGdpdmVuIHNvdXJjZSBwYXRoLCBpZiB3ZSBoYXZlIHNlZW4gYVxuICogc291cmNlIGZpbGUgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZGlyZWN0b3J5LFxuICogZmluZCB0aGF0IHdvcmtzcGFjZSBkaXJlY3RvcnkgYW5kIHJldHVybiBpdC5cbiAqL1xuZnVuY3Rpb24gaGFzU2Vlbihzb3VyY2VQYXRoKSB7XG4gIGZvciAobGV0IGVudHJ5IG9mIENBQ0hFKSB7XG4gICAgaWYgKHNvdXJjZVBhdGguc3RhcnRzV2l0aChlbnRyeSkpIHtcbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG4gIH1cblxuICAvLyB3ZSBoYXZlIG5vdCBzZWVuIHRoaXMgc291cmNlIHBhdGggeWV0XG4gIHJldHVybjtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZXMgdGhlIFwic2VlblwiIHdvcmtzcGFjZSBjYWNoZSxcbiAqIHNvIHRoYXQgd2UgZG9uJ3QgaGl0IHRoZSBmaWxlIHN5c3RlbSB0b28gb2Z0ZW4uXG4gKi9cbmZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VQYXRoKHNvdXJjZVBhdGgpIHtcbiAgbGV0IHNlZW4gPSBoYXNTZWVuKHNvdXJjZVBhdGgpO1xuXG4gIGlmIChzZWVuKSB7XG4gICAgcmV0dXJuIHNlZW47XG4gIH1cblxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBmaW5kVXAuc3luYygncGFja2FnZS5qc29uJywge1xuICAgIGN3ZDogcGF0aC5kaXJuYW1lKHNvdXJjZVBhdGgpLFxuICB9KTtcblxuICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uUGF0aCk7XG5cbiAgQ0FDSEUuYWRkKHdvcmtzcGFjZVBhdGgpO1xuXG4gIHJldHVybiB3b3Jrc3BhY2VQYXRoO1xufVxuXG5jb25zdCBNQU5JRkVTVF9DQUNIRSA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiByZXR1cm5zIHRoZSBwYWNrYWdlLmpzb24jbmFtZSBmb3IgYSBnaXZlbiBzb3VyY2VQYXRoXG4gKi9cbmZ1bmN0aW9uIHdvcmtzcGFjZVBhY2thZ2VOYW1lKHNvdXJjZVBhdGgpIHtcbiAgY29uc3Qgd29ya3NwYWNlID0gZmluZFdvcmtzcGFjZVBhdGgoc291cmNlUGF0aCk7XG5cbiAgbGV0IGV4aXN0aW5nID0gTUFOSUZFU1RfQ0FDSEUuZ2V0KHdvcmtzcGFjZSk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nLm5hbWU7XG4gIH1cblxuICBsZXQgYnVmZmVyID0gZnNTeW5jLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4od29ya3NwYWNlLCAncGFja2FnZS5qc29uJykpO1xuICBsZXQgY29udGVudCA9IGJ1ZmZlci50b1N0cmluZygpO1xuICBsZXQganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cbiAgTUFOSUZFU1RfQ0FDSEUuc2V0KHdvcmtzcGFjZSwganNvbik7XG5cbiAgcmV0dXJuIGpzb24ubmFtZTtcbn1cblxuIiwgImltcG9ydCBtZDUgZnJvbSAnYmx1ZWltcC1tZDUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZVJlbGF0aXZlUGF0aEhhc2gocmVsYXRpdmVQYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuICdlJyArIG1kNShyZWxhdGl2ZVBhdGgpLnN1YnN0cmluZygwLCA4KTtcbn1cbiIsICJpbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBwYXJzZXIgZnJvbSAncG9zdGNzcy1zZWxlY3Rvci1wYXJzZXInO1xuXG5pbXBvcnQgaXNJbnNpZGVHbG9iYWwgZnJvbSAnLi9pc0luc2lkZUdsb2JhbC5qcyc7XG5cbmZ1bmN0aW9uIGdldENsYXNzZXNBbmRUYWdzKHNlbCwgY2xhc3NlcywgdGFncykge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2xzKSA9PiB7XG4gICAgc2xzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIGNsYXNzZXMuYWRkKHNlbGVjdG9yLnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ3RhZycgJiYgIWlzSW5zaWRlR2xvYmFsKHNlbGVjdG9yKSkge1xuICAgICAgICB0YWdzLmFkZChzZWxlY3Rvci52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcGFyc2VyKHRyYW5zZm9ybSkucHJvY2Vzc1N5bmMoc2VsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xhc3Nlc1RhZ3NGcm9tQ3NzKGNzcykge1xuICBjb25zdCBjbGFzc2VzID0gbmV3IFNldCgpO1xuICBjb25zdCB0YWdzID0gbmV3IFNldCgpO1xuXG4gIGNvbnN0IGFzdCA9IHBvc3Rjc3MucGFyc2UoY3NzKTtcblxuICBhc3Qud2Fsaygobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdydWxlJykge1xuICAgICAgZ2V0Q2xhc3Nlc0FuZFRhZ3Mobm9kZS5zZWxlY3RvciwgY2xhc3NlcywgdGFncyk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4geyBjbGFzc2VzLCB0YWdzIH07XG59XG5cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0luc2lkZUdsb2JhbChub2RlLCBmdW5jKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ3BzZXVkbycgJiYgcGFyZW50LnZhbHVlID09PSAnOmdsb2JhbCcpIHJldHVybiB0cnVlO1xuXG4gIHJldHVybiBpc0luc2lkZUdsb2JhbChwYXJlbnQsIGZ1bmMpO1xufVxuIiwgImltcG9ydCBwb3N0Y3NzIGZyb20gJ3Bvc3Rjc3MnO1xuaW1wb3J0IHBhcnNlciBmcm9tICdwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlcic7XG5cbmltcG9ydCBpc0luc2lkZUdsb2JhbCBmcm9tICcuL2lzSW5zaWRlR2xvYmFsLmpzJztcblxuZnVuY3Rpb24gcmV3cml0ZVNlbGVjdG9yKHNlbCwgcG9zdGZpeCkge1xuICBjb25zdCB0cmFuc2Zvcm0gPSAoc2VsZWN0b3JzKSA9PiB7XG4gICAgc2VsZWN0b3JzLndhbGsoKHNlbGVjdG9yKSA9PiB7XG4gICAgICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJyAmJiAhaXNJbnNpZGVHbG9iYWwoc2VsZWN0b3IpKSB7XG4gICAgICAgIHNlbGVjdG9yLnZhbHVlICs9ICdfJyArIHBvc3RmaXg7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICd0YWcnICYmICFpc0luc2lkZUdsb2JhbChzZWxlY3RvcikpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoXG4gICAgICAgICAgcGFyc2VyLnRhZyh7IHZhbHVlOiBzZWxlY3Rvci52YWx1ZSB9KSxcbiAgICAgICAgICBwYXJzZXIuY2xhc3NOYW1lKHsgdmFsdWU6IHBvc3RmaXggfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgOmdsb2JhbFxuICAgIHNlbGVjdG9ycy53YWxrKChzZWxlY3RvcikgPT4ge1xuICAgICAgaWYgKHNlbGVjdG9yLnR5cGUgPT09ICdwc2V1ZG8nICYmIHNlbGVjdG9yLnZhbHVlID09PSAnOmdsb2JhbCcpIHtcbiAgICAgICAgc2VsZWN0b3IucmVwbGFjZVdpdGgoLi4uc2VsZWN0b3Iubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhcnNlcih0cmFuc2Zvcm0pLnByb2Nlc3NTeW5jKHNlbCk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBpc0luc2lkZUtleWZyYW1lcyhub2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuXG4gIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ2F0cnVsZScgJiYgcGFyZW50Lm5hbWUgPT09ICdrZXlmcmFtZXMnKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gaXNJbnNpZGVLZXlmcmFtZXMocGFyZW50KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUNzcyhjc3MsIHBvc3RmaXgsIGZpbGVOYW1lLCBsYXllck5hbWUpIHtcbiAgY29uc3QgbGF5ZXJOYW1lV2l0aERlZmF1bHQgPSBsYXllck5hbWUgPz8gJ2NvbXBvbmVudHMnO1xuICBjb25zdCBhc3QgPSBwb3N0Y3NzLnBhcnNlKGNzcyk7XG5cbiAgYXN0LndhbGsoKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS50eXBlID09PSAncnVsZScgJiYgIWlzSW5zaWRlS2V5ZnJhbWVzKG5vZGUpKSB7XG4gICAgICBub2RlLnNlbGVjdG9yID0gcmV3cml0ZVNlbGVjdG9yKG5vZGUuc2VsZWN0b3IsIHBvc3RmaXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcmV3cml0dGVuQ3NzID0gYXN0LnRvU3RyaW5nKCk7XG5cbiAgaWYgKCFsYXllck5hbWVXaXRoRGVmYXVsdCkge1xuICAgIHJldHVybiBgLyogJHtmaWxlTmFtZX0gKi9cXG4ke3Jld3JpdHRlbkNzc31cXG5gO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBgLyogJHtmaWxlTmFtZX0gKi9cXG5AbGF5ZXIgJHtsYXllck5hbWVXaXRoRGVmYXVsdH0ge1xcblxcbmAgK1xuICAgIHJld3JpdHRlbkNzcyArXG4gICAgJ1xcbn1cXG4nXG4gICk7XG59XG5cbiIsICJpbXBvcnQgcmVjYXN0IGZyb20gJ2VtYmVyLXRlbXBsYXRlLXJlY2FzdCc7XG5cbmltcG9ydCByZW5hbWVDbGFzcyBmcm9tICcuL3JlbmFtZUNsYXNzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmV3cml0ZUhicyhcbiAgaGJzLFxuICBjbGFzc2VzLFxuICB0YWdzLFxuICBwb3N0Zml4LFxuICBzY29wZWRDbGFzcyA9ICdzY29wZWQtY2xhc3MnLFxuKSB7XG4gIGxldCBhc3QgPSByZWNhc3QucGFyc2UoaGJzKTtcbiAgbGV0IHN0YWNrID0gW107XG5cbiAgcmVjYXN0LnRyYXZlcnNlKGFzdCwge1xuICAgIEF0dHJOb2RlKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ1RleHROb2RlJyAmJiBub2RlLnZhbHVlLmNoYXJzKSB7XG4gICAgICAgICAgY29uc3QgcmVuYW1lZENsYXNzID0gcmVuYW1lQ2xhc3Mobm9kZS52YWx1ZS5jaGFycywgcG9zdGZpeCwgY2xhc3Nlcyk7XG5cbiAgICAgICAgICBub2RlLnZhbHVlLmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUudHlwZSA9PT0gJ0NvbmNhdFN0YXRlbWVudCcpIHtcbiAgICAgICAgICBmb3IgKGxldCBwYXJ0IG9mIG5vZGUudmFsdWUucGFydHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScgJiYgcGFydC5jaGFycykge1xuICAgICAgICAgICAgICBjb25zdCByZW5hbWVkQ2xhc3MgPSByZW5hbWVDbGFzcyhwYXJ0LmNoYXJzLCBwb3N0Zml4LCBjbGFzc2VzKTtcblxuICAgICAgICAgICAgICBwYXJ0LmNoYXJzID0gcmVuYW1lZENsYXNzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgcmVjYXN0LnRyYXZlcnNlKHBhcnQsIHtcbiAgICAgICAgICAgICAgICBTdHJpbmdMaXRlcmFsKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRDbGFzcyA9IHJlbmFtZUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwb3N0Zml4LFxuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbm9kZS52YWx1ZSA9IHJlbmFtZWRDbGFzcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKHRhZ3MuaGFzKG5vZGUudGFnKSkge1xuICAgICAgICAvLyBjaGVjayBpZiBjbGFzcyBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gbm9kZS5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gJ2NsYXNzJyk7XG5cbiAgICAgICAgaWYgKGNsYXNzQXR0cikge1xuICAgICAgICAgIGNsYXNzQXR0ci52YWx1ZS5jaGFycyArPSAnICcgKyBwb3N0Zml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggY2xhc3MgYXR0cmlidXRlXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICByZWNhc3QuYnVpbGRlcnMuYXR0cignY2xhc3MnLCByZWNhc3QuYnVpbGRlcnMudGV4dChwb3N0Zml4KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBBbGw6IHtcbiAgICAgIGVudGVyKG5vZGUpIHtcbiAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgIH0sXG4gICAgICBleGl0KCkge1xuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIE11c3RhY2hlU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgIGxldCBjc3NDbGFzcztcblxuICAgICAgaWYgKFxuICAgICAgICBub2RlLnBhdGg/Lm9yaWdpbmFsID09PSBzY29wZWRDbGFzcyAmJlxuICAgICAgICBub2RlLnBhcmFtcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUucGFyYW1zWzBdLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIGNzc0NsYXNzID0gbm9kZS5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5wYXRoPy5vcmlnaW5hbCA9PT0gc2NvcGVkQ2xhc3MgJiZcbiAgICAgICAgbm9kZS5wYXRoPy5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhdGg/LnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjc3NDbGFzcyA9IG5vZGUucGF0aC5wYXJhbXNbMF0udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjc3NDbGFzcykge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy50ZXh0KHJlbmFtZUNsYXNzKGNzc0NsYXNzLCBwb3N0Zml4KSk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gJ0F0dHJOb2RlJykge1xuICAgICAgICAgIHBhcmVudC5xdW90ZVR5cGUgPSAnXCInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBTdWJFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5wYXRoPy5vcmlnaW5hbCA9PT0gc2NvcGVkQ2xhc3MgJiZcbiAgICAgICAgbm9kZS5wYXJhbXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBub2RlLnBhcmFtc1swXS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCdcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjc3NDbGFzcyA9IG5vZGUucGFyYW1zWzBdLnZhbHVlO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJlY2FzdC5idWlsZGVycy5saXRlcmFsKFxuICAgICAgICAgICdTdHJpbmdMaXRlcmFsJyxcbiAgICAgICAgICByZW5hbWVDbGFzcyhjc3NDbGFzcywgcG9zdGZpeCksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRleHROb2RlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIGxldCByZXN1bHQgPSByZWNhc3QucHJpbnQoYXN0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmFtZUNsYXNzKFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgcG9zdGZpeDogc3RyaW5nLFxuICBjbGFzc2VzSW5Dc3M/OiBTZXQ8c3RyaW5nPixcbikge1xuICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyk7XG4gIGNvbnN0IHJlbmFtZWRDbGFzc2VzID0gY2xhc3Nlc1xuICAgIC5maWx0ZXIoKGMpID0+IGMpXG4gICAgLm1hcCgoYykgPT4gYy50cmltKCkpXG4gICAgLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKCFjbGFzc2VzSW5Dc3MgfHwgY2xhc3Nlc0luQ3NzLmhhcyhjKSkge1xuICAgICAgICBpZiAoYy5lbmRzV2l0aChwb3N0Zml4KSkgcmV0dXJuIGM7XG5cbiAgICAgICAgcmV0dXJuIGMgKyAnXycgKyBwb3N0Zml4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYztcbiAgICB9KVxuICAgIC5qb2luKCcgJyk7XG5cbiAgY29uc3QgcmVuYW1lZFdpdGhQcmVzZXJ2ZWRTcGFjZXMgPSBjbGFzc05hbWUucmVwbGFjZShcbiAgICBjbGFzc05hbWUudHJpbVN0YXJ0KCkudHJpbUVuZCgpLFxuICAgIHJlbmFtZWRDbGFzc2VzLFxuICApO1xuXG4gIHJldHVybiByZW5hbWVkV2l0aFByZXNlcnZlZFNwYWNlcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7OztBQUVBLFNBQVMsVUFBVSxpQkFBaUI7QUFDcEMsT0FBT0EsV0FBVTtBQUVqQixPQUFPLFlBQVk7QUFDbkIsU0FBUyxjQUFjO0FBQ3ZCLE9BQU8sZ0JBQWdCO0FBQ3ZCLE9BQU8sWUFBWTtBQUNuQixTQUFTLG9CQUFvQjs7O0FDVDdCLFNBQVMsWUFBWTtBQUVyQixlQUFPLGlCQUF3QkMsT0FBTTtBQUNuQyxNQUFJO0FBQ0YsVUFBTSxLQUFLQSxLQUFJO0FBRWYsV0FBTztBQUFBLEVBQ1QsU0FBUyxHQUFHO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFDRjs7O0FDVEEsT0FBTyxVQUFVO0FBRWpCLE9BQU8sWUFBWTs7O0FDSG5CLE9BQU8sU0FBUztBQUVELFNBQVIseUJBQTBDLGNBQXNCO0FBQ3JFLFNBQU8sTUFBTSxJQUFJLFlBQVksRUFBRSxVQUFVLEdBQUcsQ0FBQztBQUMvQzs7O0FEZ0JPLFNBQVMsOEJBQThCLG1CQUFtQjtBQWMvRCxNQUFJLGtCQUFrQixrQkFBa0IsUUFBUSxZQUFZLEdBQUc7QUFFL0QsTUFBSSxTQUFTLEtB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QUMsU0FBUztBQUMzQixZQUFJLFlBQVksS0FBSyxTQUFTLEdBQUcsSUFBSSxPQUFPLEdBQUcsSUFBSTtBQUVuRCxlQUFPLEdBQUcsU0FBUztBQUFBLE1BQ3JCLENBQUM7QUFBQSxJQUNILENBQUM7QUFFRCxVQUFNLFNBQVMsSUFBSSxPQUFPLFdBQVc7QUFBQSxNQUNuQyxTQUFTLENBQUMsS0FBSyxVQUFVLGlCQUFpQjtBQUFBLElBQzVDLENBQUM7QUFFRCxRQUFJLGVBQWUsSUFBSSxXQUFXO0FBQUEsTUFDaEM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUVELFFBQUksWUFBWSxJQUFJLE9BQU8sY0FBYztBQUFBLE1BQ3ZDLFlBQVksUUFBUSxZQUFZLEtBQUs7QUFBQSxNQUNyQyxXQUFXO0FBQUEsTUFDWCxpQkFBaUIsRUFBRSxTQUFTLEtBQUs7QUFBQSxJQUNuQyxDQUFDO0FBRUQsV0FBTztBQUFBLEVBQ1Q7QUFDRjsiLAogICJuYW1lcyI6IFsicGF0aCIsICJwYXRoIiwgInBvc3Rjc3MiLCAicGFyc2VyIiwgInBhcnNlciIsICJwb3N0Y3NzIiwgIm5vZGUiLCAicGF0aCIsICJyZXN1bHRzIiwgInAiXQp9Cg==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-scoped-css",
3
- "version": "0.17.0",
3
+ "version": "0.17.2",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -150,7 +150,7 @@ class ScopedFilter extends Filter {
150
150
  for (let template of templates) {
151
151
  templateComparison.push(
152
152
  didTemplateChange(
153
- template.contents,
153
+ template,
154
154
  previousClasses,
155
155
  classes,
156
156
  tags,