ccgf-game-tool 1.0.15 → 1.0.16

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.
@@ -740,6 +740,15 @@ module.exports = Editor.Panel.define({
740
740
  this.loadConfig();
741
741
  this.loadModules();
742
742
  this.loadManagers();
743
+ // 打开面板就把**远程**数据也拉起来。
744
+ // 以前这两个只在 switchTab() 里调 —— 不点那两页就永远不拉,体验很差。
745
+ //
746
+ // 两个都不 await:网络慢不能拖住面板显示(主进程那边是 cache-first,
747
+ // 而且面板本来就有"正在获取 / 获取失败"的状态 UI,慢和失败都能显示出来)。
748
+ // 后台拉回来后:正在看那一页的话会自然刷新;不在那一页也没关系,
749
+ // 切过去时 switchTab() 里还会再调一次(命中缓存,几乎零成本)。
750
+ void this.loadVersions();
751
+ void this.loadSharedModules();
743
752
  },
744
753
  template: (0, fs_extra_1.readFileSync)((0, path_1.join)(__dirname, '../../../static/template/workbench/panel.html'), 'utf-8'),
745
754
  });
@@ -755,4 +764,4 @@ module.exports = Editor.Panel.define({
755
764
  }
756
765
  },
757
766
  });
758
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvcGFuZWxzL3dvcmtiZW5jaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOztBQUUvQyx1Q0FBd0M7QUFDeEMsK0JBQTRCO0FBQzVCLDZCQUFxQztBQUVyQyw2QkFBNkI7QUFDN0IsSUFBSSxnQkFBZ0IsR0FBUSxJQUFJLENBQUM7QUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztBQUU3QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFVLENBQUM7QUFDdEQseUJBQXlCO0FBQ3pCLE1BQU0sYUFBYSxHQUEyQjtJQUMxQyxLQUFLLEVBQUUsbUJBQW1CO0lBQzFCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsSUFBSSxFQUFFLGtCQUFrQjtDQUMzQixDQUFDO0FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxTQUFTLEVBQUU7UUFDUCxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksS0FBSyxDQUFDO0tBQ2I7SUFDRCxRQUFRLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNqRyxLQUFLLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwyQ0FBMkMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMxRixDQUFDLEVBQUU7UUFDQyxHQUFHLEVBQUUsTUFBTTtLQUNkO0lBQ0QsS0FBSyxDQUFDLEtBQUs7UUFDUCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUErQjtR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RUFBRSxDQUFDO1lBQ3hCLENBQUM7WUFDRCxRQUFRLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLE9BQU8sQ0FBQztTQUNwRyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEYsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsV0FBVyxLQUFLLENBQUM7SUFDakIsS0FBSztRQUNELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0wsQ0FBQztDQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZ1ZS9vbmUtY29tcG9uZW50LXBlci1maWxlICovXHJcblxyXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcy1leHRyYSc7XHJcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcclxuaW1wb3J0IHsgY3JlYXRlQXBwLCBBcHAgfSBmcm9tICd2dWUnO1xyXG5cclxuLyoqIOiHquWKqOmHjeivleeahOWumuaXtuWZqCjmqKHlnZfnuqc65ZCM5LiA5pe25Yi75Y+q55WZ5LiA5LiqKSAqL1xyXG5sZXQgc2hhcmVkUmV0cnlUaW1lcjogYW55ID0gbnVsbDtcclxuXHJcbmNvbnN0IHBhbmVsRGF0YU1hcCA9IG5ldyBXZWFrTWFwPGFueSwgQXBwPigpO1xyXG5cclxuY29uc3QgU0VWRVJJVElFUyA9IFsnZXJyb3InLCAnd2FybicsICdpbmZvJ10gYXMgY29uc3Q7XHJcbi8qKiDkvZPmo4DkuKXph43nuqfliKsgLT4gaTE4biBrZXkgKi9cclxuY29uc3QgU0VWRVJJVFlfS0VZUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIGVycm9yOiAndWlfc2V2ZXJpdHlfZXJyb3InLFxyXG4gICAgd2FybjogJ3VpX3NldmVyaXR5X3dhcm4nLFxyXG4gICAgaW5mbzogJ3VpX3NldmVyaXR5X2luZm8nLFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFZGl0b3IuUGFuZWwuZGVmaW5lKHtcclxuICAgIGxpc3RlbmVyczoge1xyXG4gICAgICAgIHNob3coKSB7IH0sXHJcbiAgICAgICAgaGlkZSgpIHsgfSxcclxuICAgIH0sXHJcbiAgICB0ZW1wbGF0ZTogcmVhZEZpbGVTeW5jKGpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vc3RhdGljL3RlbXBsYXRlL3dvcmtiZW5jaC9pbmRleC5odG1sJyksICd1dGYtOCcpLFxyXG4gICAgc3R5bGU6IHJlYWRGaWxlU3luYyhqb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL3N0YXRpYy9zdHlsZS93b3JrYmVuY2gvaW5kZXguY3NzJyksICd1dGYtOCcpLFxyXG4gICAgJDoge1xyXG4gICAgICAgIGFwcDogJyNhcHAnLFxyXG4gICAgfSxcclxuICAgIGFzeW5jIHJlYWR5KCkge1xyXG4gICAgICAgIGNvbnN0ICRhcHAgPSB0aGlzLiQuYXBwO1xyXG4gICAgICAgIGlmICghJGFwcCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmlofmoYjlhYjlj5blm57mnaXlho3mjILovb3vvJrlkKbliJnpppbluKfkvJrmiorljp/lp4sga2V5IOaYvuekuue7meeUqOaIt1xyXG4gICAgICAgIGxldCBzdHJpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3RyaW5ncyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LWkxOG4nKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8qIOWPluS4jeWIsOWwsemAgOWMluS4uiBrZXnvvIzkvYbkuI3lvbHlk43pnaLmnb/lip/og70gKi9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFwcCA9IGNyZWF0ZUFwcCh7XHJcbiAgICAgICAgICAgIGRhdGEoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDkuLvov5vnqIvmjInlvZPliY3nvJbovpHlmajor63oqIDop6PmnpDlpb3nmoTmlofmoYjooaggKi9cclxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvKiog5b2T5YmN5YiH6aG177yabW9kdWxlIHwgbWFuYWdlciAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYjogJ21vZHVsZScsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaooeWdl+WIl+ihqFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dDcmVhdGVNb2R1bGU6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBtYW5hZ2VyIOWIl+ihqO+8iOWFqOWxgOWNleS+i+acjeWKoe+8iVxyXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE1hbmFnZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NyZWF0ZU1hbmFnZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld01hbmFnZXJOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBuZXdNYW5hZ2VyT3JkZXI6IDQwLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmlrDlu7rmqKHlnZfooajljZVcclxuICAgICAgICAgICAgICAgICAgICBuZXdNb2R1bGVOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBuZXdNb2R1bGVPcmRlcjogMSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qih5Z2XIG9yZGVyIOe8lui+kVxyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRPcmRlcjogMCxcclxuICAgICAgICAgICAgICAgICAgICBlZGl0TWFuYWdlck9yZGVyOiAwLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDlvZPliY3mqKHlnZfnmoQgdmlldyDliJfooahcclxuICAgICAgICAgICAgICAgICAgICB2aWV3czogW10sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIm+W7uiB2aWV3IOW8ueeql1xyXG4gICAgICAgICAgICAgICAgICAgIHNob3dDcmVhdGVWaWV3TW9kYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBsYXllcjogJ1dpbmRvdycsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6ICdlbXB0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOWxgue6p+S4juaooeadv+mDveeUseS4u+i/m+eoi+S4i+WPke+8jOaJqeWxlemHjOS4jeWGjeWtmOesrOS6jOS7vSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiBbXSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qaC6KeI77yI5ZCv5Yqo6aG65bqPICsg5bGC57qn5Y2g55So77yJXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd092ZXJ2aWV3OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvdmVydmlldzogbnVsbCxcclxuICAgICAgICAgICAgICAgIHZlcnNpb25zOiBudWxsIGFzIGFueSxcclxuICAgICAgICAgICAgICAgIHVwZGF0aW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvdmVydmlld0xvYWRpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDkvZPmo4BcclxuICAgICAgICAgICAgICAgICAgICBzaG93RG9jdG9yOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBkb2N0b3JSdW5uaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBmaW5kaW5nczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdG9yR3JvdXBzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBkb2N0b3JTdW1tYXJ5OiB7IGVycm9yOiAwLCB3YXJuOiAwLCBpbmZvOiAwIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOa2iOaBr1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzRXJyb3I6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDlhazlhbHmqKHlnZdcclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRNb2R1bGVzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFNoYXJlZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5q2j5Zyo6LeRIG5wbe+8muacn+mXtOemgeeUqOWuieijhS/ljbjovb3mjInpkq4gKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRCdXN5OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAvKiogbnBtIOe7k+aenOW8ueeql+eahOaVsOaNru+8iOWksei0peaXtuWxleekuuWOn+Wni+i+k+WHuu+8iSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlc3VsdDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5by556qX5piv5ZCm5Y+v6KeBIOKAlOKAlCDkuI7mlbDmja7liIblvIDvvIzov5nmoLflhbPmjonkuYvlkI7ov5jog73ku47mtojmga/ooYzlho3ngrnlvIAgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaG93U2hhcmVkUmVzdWx0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5pys5Zyw5a6J6KOF5rqQ55uu5b2V77yb5Li6IG51bGwg6K+05piO6L+Z5piv5pmu6YCa5bel56iLICovXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTb3VyY2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOi/nOeoi+WIl+ihqOaLieWPluWksei0peeahOWOn+WboO+8iOacieWAvOaXtumdouadv+aYvuekuuaPkOekuu+8jOS9huS4jeW9seWTjeWFtuWug+WKn+iDve+8iSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdHJ5UGVuZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0cnlFcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5q2j5Zyo5ouJ6L+c56iL5YiX6KGo77yI5LiA5qyh5pCc57SiIDF+NCDnp5LvvIzopoHnu5nkuKrlj43ppojvvIkgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RyeUxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgICAgIC8qKiDlvZPliY3pgInkuK3nmoTmqKHlnZflr7nosaHvvIjliJfooajph4zlj6rlrZjkuobnsr7nroDkv6Hmga/vvIzov5nph4zlj5blm57lrozmlbTnmoTpgqPmnaHvvIkgKi9cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlSW5mbygpOiBhbnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLm1vZHVsZXMgYXMgYW55W10pLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkTW9kdWxlKSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOW9k+WJjeaooeWdl+eahOiEmuacrOaWh+S7tu+8jOS+m+mdouadv+S4gOmUruaJk+W8gOOAglxyXG4gICAgICAgICAgICAgICAgICog5LqL5Lu25aOw5piO5paH5Lu25Y+v6IO95LiN5a2Y5Zyo77yI5qih5Z2X5piv5pen54mI5omp5bGV5bu655qE77yJ77yM5omA5Lul5oyJ5a2Y5Zyo5oCn6L+H5ruk44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlRmlsZXMoKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGZpbGU6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbzogYW55ID0gdGhpcy5zZWxlY3RlZE1vZHVsZUluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm4gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtpbmZvLm1vZHVsZUZpbGUsIGluZm8ubW9kZWxGaWxlLCBpbmZvLmV2ZW50c0ZpbGVdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpbGU6IHVua25vd24pOiBmaWxlIGlzIHN0cmluZyA9PiB0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGZpbGU6IHN0cmluZykgPT4gKHsgbmFtZTogZmlsZS5zcGxpdCgnLycpLnBvcCgpIHx8IGZpbGUsIGZpbGUgfSkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5bey5a6J6KOFID0gcGFja2FnZS5qc29uIOmHjOWjsOaYjuS6hioq5LiUKiogbm9kZV9tb2R1bGVzIOmHjOWtmOWcqCAqL1xyXG4gICAgICAgICAgICAgICAgaW5zdGFsbGVkU2hhcmVkKCk6IGFueVtdIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmlsdGVyKChtOiBhbnkpID0+IG0uc3RhdGUgPT09ICdpbnN0YWxsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOacquWuieijhe+8iOWQq1wi5aOw5piO5LqG5L2GIG5vZGVfbW9kdWxlcyDph4zmsqHmnIlcIui/meS4gOaAge+8iSAqL1xyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2hhcmVkKCk6IGFueVtdIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmlsdGVyKChtOiBhbnkpID0+IG0uc3RhdGUgIT09ICdpbnN0YWxsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRTaGFyZWRJbmZvKCk6IGFueSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkU2hhcmVkKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTaGFyZWQpIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog55WM6Z2i5LiK6KaB5bGV56S655qE6YKj5p2hIG5wbSDlkb3ku6Qg4oCU4oCUIOS4juaMiemSruWNs+WwhuaJp+ihjOeahOWKqOS9nOS4gOiHtFxyXG4gICAgICAgICAgICAgICAgICog77yI5pyq5a6J6KOF5pi+56S6IGluc3RhbGzvvIzlt7Llronoo4XmmL7npLogdW5pbnN0YWxs77yJ44CCXHJcbiAgICAgICAgICAgICAgICAgKiDlkb3ku6TnlLHkuLvov5vnqIvkuIvlj5HvvIzpnaLmnb/kuI3oh6rlt7Hmi7zlj4LmlbDjgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgc2hhcmVkQWN0aW9uQ29tbWFuZCgpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm86IGFueSA9IHRoaXMuc2VsZWN0ZWRTaGFyZWRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLnN0YXRlID09PSAnaW5zdGFsbGVkJyA/IGluZm8udW5pbnN0YWxsQ29tbWFuZCA6IGluZm8uaW5zdGFsbENvbW1hbmQ7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog5a6J6KOF5oyJ6ZKu55qE5paH5a2X44CCXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICog5bey5pyJ5paw54mI5pys5pe255u05o6l5YaZ5oiQXCLmm7TmlrDliLAgeC55LnpcIiDigJTigJQg55So5oi35LiN6ZyA6KaB6Ieq5bex5Y675q+U5a+554mI5pys5Y+344CCXHJcbiAgICAgICAgICAgICAgICAgKiDms6jmhI/lj6rlnKggYHVwZGF0ZS1hdmFpbGFibGVgIOaXtui/meS5iOWGme+8mueci+S4jeWIsOi/nOeoi+eJiOacrO+8iHVua25vd27vvInml7ZcclxuICAgICAgICAgICAgICAgICAqIOS4jeiDveaal+ekulwi6L+Z5bCx5piv5pyA5pawXCLvvIzpgqPkuKrnirbmgIHlnKjor6bmg4Xph4zlj6bmnInor7TmmI7jgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgc2hhcmVkQWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvOiBhbnkgPSB0aGlzLnNlbGVjdGVkU2hhcmVkSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudCgndWlfc2hhcmVkX2luc3RhbGwnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8udXBkYXRlU3RhdGUgPT09ICd1cGRhdGUtYXZhaWxhYmxlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50KCd1aV9zaGFyZWRfdXBkYXRlX3RvJywgeyB2ZXJzaW9uOiBpbmZvLmxhdGVzdFZlcnNpb24gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLnN0YXRlID09PSAnaW5zdGFsbGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudCgndWlfc2hhcmVkX3JlaW5zdGFsbCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50KCd1aV9zaGFyZWRfaW5zdGFsbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGkxOG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiDlj5bmlofmoYjjgIJge25hbWV9YCDlvaLlvI/nmoTljaDkvY3nrKbnlKggcGFyYW1zIOabv+aNouOAglxyXG4gICAgICAgICAgICAgICAgICog5paH5qGI6KGo55Sx5Li76L+b56iL5oyJ5b2T5YmN57yW6L6R5Zmo6K+t6KiA6Kej5p6Q5ZCO5LiL5Y+R77yM6L+Z6YeM5LiN5YGa6K+t6KiA5Yik5pat44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHQoa2V5OiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dDogc3RyaW5nID0gdGhpcy5zdHJpbmdzW2tleV0gPz8ga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNwbGl0KGB7JHtrfX1gKS5qb2luKFN0cmluZyhwYXJhbXNba10pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDliJ3lp4vljJYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRDb25maWcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1sYXllcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS10ZW1wbGF0ZXMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGF5ZXJzLmxlbmd0aCAmJiAhdGhpcy5sYXllcnMuaW5jbHVkZXModGhpcy5sYXllcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXIgPSB0aGlzLmxheWVyc1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZE92ZXJ2aWV3KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnZpZXcgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1vdmVydmlldycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOeJiOacrOS/oeaBrzrmoYbmnrbor7vlt6XnqIsgbm9kZV9tb2R1bGVzIOmHjOmCo+S7vSzmianlsZXor7voh6rlt7Eg4oCU4oCUIOmDveaYr1wi5a6e6ZmF6KOF5LqG5LuA5LmIXCIgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRWZXJzaW9ucygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnNpb25zID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktdmVyc2lvbnMnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuKTovrnniYjmnKzkuI3kuIDmoLflsLHnrpfmnInmlrDniYgo5q+U6L6D6YC76L6R5Y+q5q2k5LiA5aSELOS4u+i/m+eoi+S4jemHjeWkjeWIpOaWrSkgKi9cclxuICAgICAgICAgICAgICAgIHVwZGF0ZU9mKGluZm86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhIShpbmZvICYmIGluZm8ubGF0ZXN0ICYmIGluZm8udmVyc2lvbiAmJiBpbmZvLmxhdGVzdCAhPT0gaW5mby52ZXJzaW9uKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgdXBkYXRlRnJhbWV3b3JrKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS4iuS4gOeJiOi/memHjOebtOaOpeeUqOS6hiBuYW1lLOiAjCBuYW1lIOWPquWumuS5ieWcqCB1cGRhdGVFeHRlbnNpb24g6YeMIOKAlOKAlFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOmCo+S4quagh+ivhuespuS8muiQveWIsOWFqOWxgCh3aW5kb3cubmFtZSzpgJrluLjmmK/nqbrkuLIpLOS6juaYr+WPmOaIkCBcIkBsYXRlc3RcIixcclxuICAgICAgICAgICAgICAgICAgICAvLyDkuLvov5vnqIvmlLbliLDnmoTlsLHmmK9cIue8uuWwkeWMheWQjVwi44CC6Ieq5bex5a6a5LmJ6Ieq5bex55qELOWIq+i5reWIq+S6uueahOWPmOmHj+OAglxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnZlcnNpb25zPy5mcmFtZXdvcms/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZU9mKHRoaXMudmVyc2lvbnM/LmZyYW1ld29yaykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV92ZXJzaW9uc19hbHJlYWR5X2xhdGVzdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGF3YWl0IHRoaXMucnVuVXBkYXRlKCd1cGRhdGUtZnJhbWV3b3JrJywgbmFtZSkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV9tc2dfZnJhbWV3b3JrX3VwZGF0ZWQnLCB7IHZlcnNpb246IHRoaXMudmVyc2lvbnM/LmZyYW1ld29yaz8ubGF0ZXN0IHx8ICcnIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyB1cGRhdGVFeHRlbnNpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudmVyc2lvbnM/LmV4dGVuc2lvbj8ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDlt7LmmK/mnIDmlrDlsLHliKvnnJ/ljrvoo4XkuIDpgY0s5pu05Yir5oqlXCLlt7Lmm7TmlrBcIiDigJTigJQg6YKj5piv5Zyo6aqX55So5oi3XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZU9mKHRoaXMudmVyc2lvbnM/LmV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV92ZXJzaW9uc19hbHJlYWR5X2xhdGVzdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS6juaYryBzeW5jLWV4dGVuc2lvbiDmi7flm57mnaXnmoTov5jmmK/ml6fniYjmnKwg4oCU4oCUIOihqOeOsOWwseaYryfngrnkuobmsqHnlKgn44CCXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5ydW5VcGRhdGUoJ3VwZGF0ZS1leHRlbnNpb24nLCBuYW1lKSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAvLyDoo4Xov5sgbm9kZV9tb2R1bGVzIOi/mOS4jeWknzrnvJbovpHlmajlj6rorqQgZXh0ZW5zaW9ucy8g5LiL6YKj5Lu9LOW/hemhu+iQveebmFxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3N5bmMtZXh0ZW5zaW9uJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMudCgndWlfbXNnX2V4dGVuc2lvbl91cGRhdGVkJywgeyB2ZXJzaW9uOiB0aGlzLnZlcnNpb25zPy5leHRlbnNpb24/LmxhdGVzdCB8fCAnJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuI7lhazlhbHmqKHlnZflronoo4XotbDlkIzkuIDmnaHot6865aSN55So546w5oiQ55qEIG5wbSDmiafooYzkuI7lpLHotKXlsZXnpLogKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIHJ1blVwZGF0ZShtZXNzYWdlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCBtZXNzYWdlLCBuYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gcmVzICYmIHJlcy5vayA9PT0gZmFsc2UgPyAnJyA6IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLm9rID09PSBmYWxzZSkgdGhpcy5zaG93RXJyb3IocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFZlcnNpb25zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZE1vZHVsZXMoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbW9kdWxlcycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU9yZGVyID0gdGhpcy5uZXh0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNb2R1bGUgJiYgIXRoaXMubW9kdWxlcy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZHVsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY0VkaXRPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgbmV4dE9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tb2R1bGVzLmxlbmd0aCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLnRoaXMubW9kdWxlcy5tYXAoKG06IGFueSkgPT4gbS5vcmRlcikpICsgMTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmqKHlnZfmk43kvZwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdE1vZHVsZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRWaWV3cygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzeW5jRWRpdE9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZCA9IHRoaXMubW9kdWxlcy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHRoaXMuZWRpdE9yZGVyID0gbW9kLm9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZFZpZXdzKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LXZpZXdzJywgdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZU1vZHVsZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uZXdNb2R1bGVOYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodGhpcy50KCd1aV9uZWVkX21vZHVsZV9uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS1tb2R1bGUnLCBuYW1lLCB0aGlzLm5ld01vZHVsZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19tb2R1bGVfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmRpck5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlTW9kdWxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZHVsZSA9IHJlcy5kaXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uVXBkYXRlT3JkZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF9zZWxlY3RfbW9kdWxlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3VwZGF0ZS1tb2R1bGUtb3JkZXInLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCB0aGlzLmVkaXRPcmRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfb3JkZXJfdXBkYXRlZCcsIHsgbmFtZTogcmVzLm1vZHVsZU5hbWUsIG9yZGVyOiByZXMub3JkZXIgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkRlbGV0ZU1vZHVsZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3Q291bnQgPSB0aGlzLnZpZXdzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yig6Zmk5YmN5YWI6Zeu5Li76L+b56iL77ya5pyJ5rKh5pyJ6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pysXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlZnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbW9kdWxlLXJlZnMnLCB0aGlzLnNlbGVjdGVkTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcyA9IHJlcz8ucmVmZXJlbmNlZEJ5ID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyog5p+l5LiN5Yiw5bCx5LiN6Zi75pat5Yig6Zmk77yM5Y+q5piv5bCR5LiA5bGC5o+Q6YaSICovXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhcm5SZWZzID0gcmVmcy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnXFxuXFxu4pqgICcgKyB0aGlzLnQoJ3VpX2NvbmZpcm1fcmVmcycsIHsgY291bnQ6IHJlZnMubGVuZ3RoIH0pICsgJ1xcbsK3ICcgKyByZWZzLmpvaW4oJ1xcbsK3ICcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX2RlbGV0ZV9tb2R1bGUnLCB7IG5hbWU6IHRoaXMuc2VsZWN0ZWRNb2R1bGUsIGNvdW50OiB2aWV3Q291bnQgfSkgKyB3YXJuUmVmcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS1tb2R1bGUnLCB0aGlzLnNlbGVjdGVkTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19tb2R1bGVfZGVsZXRlZCcsIHsgbmFtZTogdGhpcy5zZWxlY3RlZE1vZHVsZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFuYWdlciDmk43kvZwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaFRhYihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYiA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICd2ZXJzaW9ucycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmVyc2lvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdtYW5hZ2VyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3NoYXJlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2hhcmVkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRNYW5hZ2VycygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hbmFnZXJzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbWFuYWdlcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX6KGo6YeN5bu65ZCO5oqK6YCJ5Lit6aG56YeN5paw57uR5a6a5Yiw5paw5a+56LGh5LiK77yM6YG/5YWN5pi+56S66L+H5pyf5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkTWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hbmFnZXIgPSBjdXJyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMubWFuYWdlcnMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IGN1cnJlbnQubmFtZSkgPz8gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZWN0TWFuYWdlcihtYW5hZ2VyOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFuYWdlciA9IG1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5b+F6aG75Zyo6LWL5YC8KirkuYvlkI4qKuWQjOatpSDigJTigJQg5ZCm5YiZ6K+75Yiw55qE6L+Y5piv5LiK5LiA5Liq6YCJ5Lit6aG555qEIG9yZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRWRpdE1hbmFnZXJPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZU1hbmFnZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmV3TWFuYWdlck5hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfbWFuYWdlcl9uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS1tYW5hZ2VyJywgbmFtZSwgdGhpcy5uZXdNYW5hZ2VyT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX21hbmFnZXJfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TWFuYWdlck5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlTWFuYWdlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkID0gdGhpcy5tYW5hZ2Vycy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gcmVzLmNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE1hbmFnZXIoY3JlYXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uRGVsZXRlTWFuYWdlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNYW5hZ2VyKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuc2VsZWN0ZWRNYW5hZ2VyLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWRpdG9yLkRpYWxvZy53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnQoJ3VpX2NvbmZpcm1fZGVsZXRlX21hbmFnZXInLCB7IG5hbWUgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYnV0dG9uczogW3RoaXMudCgndWlfZGVsZXRlJyksIHRoaXMudCgndWlfY2FuY2VsJyldLCBkZWZhdWx0OiAxLCBjYW5jZWw6IDEgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdkZWxldGUtbWFuYWdlcicsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX21hbmFnZXJfZGVsZXRlZCcsIHsgbmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDpgInkuK0gbWFuYWdlciDml7bmiorlroPnmoQgb3JkZXIg5aGr6L+b57yW6L6R5qGGKOeFp+aooeWdl+mCo+WllykgKi9cclxuICAgICAgICAgICAgICAgIHN5bmNFZGl0TWFuYWdlck9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRNYW5hZ2VyT3JkZXIgPSB0aGlzLnNlbGVjdGVkTWFuYWdlci5vcmRlciA/PyAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOabtOaWsCBtYW5hZ2VyIOeahCBvcmRlcjrnm7TmjqXmlLnlhpnohJrmnKzph4znmoQgQFJlZ2lzdGVyTWFuYWdlcih7b3JkZXJ9KSAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25VcGRhdGVNYW5hZ2VyT3JkZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTWFuYWdlcikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2NnZi1nYW1lLXRvb2wnLCAndXBkYXRlLW1hbmFnZXItb3JkZXInLCB0aGlzLnNlbGVjdGVkTWFuYWdlci5uYW1lLCB0aGlzLmVkaXRNYW5hZ2VyT3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbWFuYWdlcl9vcmRlcl9zYXZlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSwgb3JkZXI6IHJlcy5vcmRlciB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIl+ihqOmHjeaOkuS6hu+8jOe8lui+keahhuS5n+imgei3n+edgOaYvuekuuacgOaWsOeahCDigJTigJQg5ZCm5YiZ5L+d5a2Y5a6M6L+Y5pi+56S65L+d5a2Y5YmN55qE5YC8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY0VkaXRNYW5hZ2VyT3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG9uTmV3TWFuYWdlck9yZGVyKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TWFuYWdlck9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBvbkVkaXRNYW5hZ2VyT3JkZXIoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0TWFuYWdlck9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uTmV3TWFuYWdlck5hbWUoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNYW5hZ2VyTmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWaWV3IOaTjeS9nCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uRGVsZXRlVmlldyhuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV9kZWxldGVfdmlldycsIHsgbmFtZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS12aWV3JywgdGhpcy5zZWxlY3RlZE1vZHVsZSwgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfdmlld19kZWxldGVkJywgeyBuYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG9wZW5DcmVhdGVWaWV3TW9kYWwoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGNsb3NlQ3JlYXRlVmlld01vZGFsKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZVZpZXcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudmlld05hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfdmlld19uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2NnZi1nYW1lLXRvb2wnLCAnY3JlYXRlLXZpZXcnLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCBuYW1lLCB0aGlzLmxheWVyLCB0aGlzLnRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX3ZpZXdfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSwgdGVtcGxhdGU6IHJlcy50ZW1wbGF0ZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFZpZXdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5L2T5qOA57uT5p6c6YeM55qE5paH5Lu26Lev5b6EIC0+IOWcqOe8lui+keWZqOmHjOaJk+W8gCAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgb3BlblNvdXJjZShmaWxlOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdvcGVuLXNvdXJjZScsIGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOS9k+ajgCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBydW5Eb2N0b3IoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N0b3JSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdydW4tZG9jdG9yJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZGluZ3MgPSByZXMuZmluZGluZ3MgPz8gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdG9yU3VtbWFyeSA9IHJlcy5zdW1tYXJ5ID8/IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5oyJIGVycm9yIOKGkiB3YXJuIOKGkiBpbmZvIOWIhue7hO+8jOepuue7hOS4jeaYvuekulxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3Rvckdyb3VwcyA9IFNFVkVSSVRJRVNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHNldmVyaXR5KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnQoU0VWRVJJVFlfS0VZU1tzZXZlcml0eV0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB0aGlzLmZpbmRpbmdzLmZpbHRlcigoZjogYW55KSA9PiBmLnNldmVyaXR5ID09PSBzZXZlcml0eSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGc6IGFueSkgPT4gZy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEb2N0b3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdG9yUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOamguiniCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvcGVuT3ZlcnZpZXcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVydmlld0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd092ZXJ2aWV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJ2aWV3TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgY2xvc2VPdmVydmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dPdmVydmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOihqOWNleS6i+S7tiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgb25OZXdNb2R1bGVOYW1lKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TW9kdWxlTmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uTmV3TW9kdWxlT3JkZXIoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVPcmRlciA9IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfHwgMDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbkVkaXRPcmRlcihlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRPcmRlciA9IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfHwgMDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvblZpZXdOYW1lKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld05hbWUgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbkxheWVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVyID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25UZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzaG93U3VjY2Vzcyhtc2c6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaG93RXJyb3IobXNnOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIC8qKiBAcGFyYW0gZm9yY2Ug5by65Yi26YeN5paw5ouJ5Y+W6L+c56iL5YiX6KGo77yI44CM5Yi35paw44CN5oyJ6ZKu55So77yb5ZCm5YiZ55So5Li76L+b56iL6YeM55qE57yT5a2Y77yJICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkU2hhcmVkTW9kdWxlcyhmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZWdpc3RyeUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlTaGFyZWRTdGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LXNoYXJlZC1tb2R1bGVzJywgZm9yY2UpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVnaXN0cnlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5Li76L+b56iL5Zue5p2l55qE54q25oCB57uf5LiA5Zyo6L+Z6YeM6JC95YiwIGRhdGEg5LiK77yI5p+l6K+i5LiO6KOFL+WNuOWFseeUqOWQjOS4gOS7vee7k+aehO+8iSAqL1xyXG4gICAgICAgICAgICAgICAgYXBwbHlTaGFyZWRTdGF0ZShyZXM6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkTW9kdWxlcyA9IHJlcz8ubW9kdWxlcyA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsU291cmNlID0gcmVzPy5sb2NhbFNvdXJjZSA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS4u+i/m+eoi+WcqFwi5ZCO5Y+w5Yi35paw5LitXCLml7bkvJrluKblm57kuIDkuKrov5vooYzkuK3nmoTor7TmmI4g4oCU4oCUIOmCo+S4jeaYr+Wksei0pSzkuI3or6XmjInlpLHotKXmmL7npLrjgIJcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZW5kaW5nID0gdHlwZW9mIHJlcz8ucmVnaXN0cnlFcnJvciA9PT0gJ3N0cmluZycgJiYgcmVzLnJlZ2lzdHJ5RXJyb3IuaW5kZXhPZign5q2j5Zyo6I635Y+WJykgPj0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFJlZ2lzdHJ5UGVuZGluZyA9IHBlbmRpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5LiA5qyh5oCn55qE6Ieq5Yqo6YeN6K+VOuWHoOenkuWQjuWQjuWPsOW3sue7j+WIt+WlveS6hizov5nkuIDpobXoh6rlt7Hmm7TmlrAs5LiN55So55So5oi35Y6754K55Yi35pawXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFyZWRSZXRyeVRpbWVyID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZXRyeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmV0cnlUaW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2hhcmVkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVnaXN0cnlFcnJvciA9IHJlcz8ucmVnaXN0cnlFcnJvciA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOmAieS4remhueWPr+iDveW3sue7j+S4jeWcqOWIl+ihqOmHjOS6hu+8iOavlOWmguWImuiiq+WNuOi9ve+8iVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2hhcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICEodGhpcy5zaGFyZWRNb2R1bGVzIGFzIGFueVtdKS5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZFNoYXJlZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNoYXJlZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RTaGFyZWQobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNoYXJlZCA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uSW5zdGFsbFNoYXJlZCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJ1blNoYXJlZCgnaW5zdGFsbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvblVuaW5zdGFsbFNoYXJlZCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5zZWxlY3RlZFNoYXJlZEluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWNuOi9veWJjeaPkOmGkuS4pOexu+S8muiiq+aJk+aWreeahOS4nOilv++8mui/mOWcqCBpbXBvcnQg5a6D55qE6ISa5pys44CB5Lul5Y+K5L6d6LWW5a6D55qE5YWs5YWx5qih5Z2X44CCXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Y+q5qOA5p+l5YmN6ICF55qE6K+d77yMXCLlj6bkuIDkuKrlhazlhbHmqKHlnZfkvp3otZblroNcIuS8muWujOWFqOa8j+aOieOAglxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLnJlZmVyZW5jZWRCeS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICfimqAgJyArIHRoaXMudCgndWlfc2hhcmVkX3JlZnNfd2FybicpICsgJ1xcbsK3ICcgKyBpbmZvLnJlZmVyZW5jZWRCeS5qb2luKCdcXG7CtyAnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uZGVwZW5kZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICfimqAgJyArIHRoaXMudCgndWlfc2hhcmVkX2RlcHNfd2FybicpICsgJ1xcbsK3ICcgKyBpbmZvLmRlcGVuZGVudHMuam9pbignXFxuwrcgJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV91bmluc3RhbGxfc2hhcmVkJywgeyBuYW1lOiBpbmZvLm5hbWUgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyAod2FybmluZ3MubGVuZ3RoID8gJ1xcblxcbicgKyB3YXJuaW5ncy5qb2luKCdcXG5cXG4nKSA6ICcnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW3RoaXMudCgndWlfc2hhcmVkX3VuaW5zdGFsbCcpLCB0aGlzLnQoJ3VpX2NhbmNlbCcpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLnJlc3BvbnNlICE9PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuU2hhcmVkKCd1bmluc3RhbGwnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOS+nei1lumhueacrOi6q+S5n+aYr+WFrOWFseaooeWdl+aXtu+8jOeCueS4gOS4i+i3s+i/h+WOu+eci+Wug+eahOeKtuaAgSAqL1xyXG4gICAgICAgICAgICAgICAgb25DbGlja0RlcGVuZGVuY3koZGVwZW5kZW5jeTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY3k/LmlzU2hhcmVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U2hhcmVkKGRlcGVuZGVuY3kubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOS7o+i3kSBucG0g5a6J6KOFIC8g5Y246L2944CCXHJcbiAgICAgICAgICAgICAgICAgKiDlpLHotKXml7YqKuS4jeW8ueS4gOadoei9rOi/sOeahFwi5a6J6KOF5aSx6LSlXCIqKu+8jOiAjOaYr+aKiiBucG0g55qE5Y6f5aeL6L6T5Ye65pW05Liq5pS+6L+b5by556qXIOKAlOKAlFxyXG4gICAgICAgICAgICAgICAgICog55So5oi36KaB6K+K5pat55qE5bCx5piv6YKj5q616L6T5Ye644CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIHJ1blNoYXJlZChhY3Rpb246ICdpbnN0YWxsJyB8ICd1bmluc3RhbGwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuc2VsZWN0ZWRTaGFyZWRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZEJ1c3kgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2NnZi1nYW1lLXRvb2wnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID09PSAnaW5zdGFsbCcgPyAnaW5zdGFsbC1zaGFyZWQtbW9kdWxlJyA6ICd1bmluc3RhbGwtc2hhcmVkLW1vZHVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlTaGFyZWRTdGF0ZShyZXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcz8ub2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9PT0gJ2luc3RhbGwnID8gJ3VpX21zZ19zaGFyZWRfaW5zdGFsbGVkJyA6ICd1aV9tc2dfc2hhcmVkX3VuaW5zdGFsbGVkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IGluZm8ubmFtZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlpLHotKXvvJrmlbDmja7nlZnnnYDkvpvlvLnnqpflsZXnpLrvvIzlubbnq4vliLvmiZPlvIDlroNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVzdWx0ID0gcmVzPy5yZXN1bHQgPz8gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NoYXJlZFJlc3VsdCA9IHRoaXMuc2hhcmVkUmVzdWx0ICE9PSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IocmVzPy5tZXNzYWdlIHx8IGBucG0gJHthY3Rpb259IGZhaWxlZGApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRCdXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5LuO5raI5oGv6KGM5YaN54K55byA5LiK5LiA5qyh55qEIG5wbSDovpPlh7ogKi9cclxuICAgICAgICAgICAgICAgIG9wZW5TaGFyZWRSZXN1bHQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NoYXJlZFJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5Y+q5YWz5by556qX77yMKirkv53nlZnmlbDmja4qKiDigJTigJQg5ZCm5YiZ5YWz5o6J5LmL5ZCO5bCx5YaN5Lmf55yL5LiN5Yiw6YKj5q616L6T5Ye65LqGICovXHJcbiAgICAgICAgICAgICAgICBjbG9zZVNoYXJlZFJlc3VsdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTaGFyZWRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1vdW50ZWQoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDb25maWcoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRlbXBsYXRlOiByZWFkRmlsZVN5bmMoam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9zdGF0aWMvdGVtcGxhdGUvd29ya2JlbmNoL3BhbmVsLmh0bWwnKSwgJ3V0Zi04JyksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYXBwLmNvbmZpZy5jb21waWxlck9wdGlvbnMuaXNDdXN0b21FbGVtZW50ID0gKHRhZzogc3RyaW5nKSA9PiB0YWcuc3RhcnRzV2l0aCgndWktJyk7XHJcbiAgICAgICAgYXBwLm1vdW50KCRhcHApO1xyXG4gICAgICAgIHBhbmVsRGF0YU1hcC5zZXQodGhpcywgYXBwKTtcclxuICAgIH0sXHJcbiAgICBiZWZvcmVDbG9zZSgpIHsgfSxcclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIGNvbnN0IGFwcCA9IHBhbmVsRGF0YU1hcC5nZXQodGhpcyk7XHJcbiAgICAgICAgaWYgKGFwcCkge1xyXG4gICAgICAgICAgICBhcHAudW5tb3VudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn0pO1xyXG4iXX0=
767
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvcGFuZWxzL3dvcmtiZW5jaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOztBQUUvQyx1Q0FBd0M7QUFDeEMsK0JBQTRCO0FBQzVCLDZCQUFxQztBQUVyQyw2QkFBNkI7QUFDN0IsSUFBSSxnQkFBZ0IsR0FBUSxJQUFJLENBQUM7QUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztBQUU3QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFVLENBQUM7QUFDdEQseUJBQXlCO0FBQ3pCLE1BQU0sYUFBYSxHQUEyQjtJQUMxQyxLQUFLLEVBQUUsbUJBQW1CO0lBQzFCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsSUFBSSxFQUFFLGtCQUFrQjtDQUMzQixDQUFDO0FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxTQUFTLEVBQUU7UUFDUCxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksS0FBSyxDQUFDO0tBQ2I7SUFDRCxRQUFRLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNqRyxLQUFLLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwyQ0FBMkMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMxRixDQUFDLEVBQUU7UUFDQyxHQUFHLEVBQUUsTUFBTTtLQUNkO0lBQ0QsS0FBSyxDQUFDLEtBQUs7UUFDUCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUErQjtR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RUFBRSxDQUFDO2dCQUVwQixzQkFBc0I7Z0JBQ3RCLDZDQUE2QztnQkFDN0MsRUFBRTtnQkFDRiw2Q0FBNkM7Z0JBQzdDLDJDQUEyQztnQkFDM0Msa0NBQWtDO2dCQUNsQyx3Q0FBd0M7Z0JBQ3hDLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN6QixLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2xDLENBQUM7WUFDRCxRQUFRLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLE9BQU8sQ0FBQztTQUNwRyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEYsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsV0FBVyxLQUFLLENBQUM7SUFDakIsS0FBSztRQUNELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0wsQ0FBQztDQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZ1ZS9vbmUtY29tcG9uZW50LXBlci1maWxlICovXHJcblxyXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcy1leHRyYSc7XHJcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcclxuaW1wb3J0IHsgY3JlYXRlQXBwLCBBcHAgfSBmcm9tICd2dWUnO1xyXG5cclxuLyoqIOiHquWKqOmHjeivleeahOWumuaXtuWZqCjmqKHlnZfnuqc65ZCM5LiA5pe25Yi75Y+q55WZ5LiA5LiqKSAqL1xyXG5sZXQgc2hhcmVkUmV0cnlUaW1lcjogYW55ID0gbnVsbDtcclxuXHJcbmNvbnN0IHBhbmVsRGF0YU1hcCA9IG5ldyBXZWFrTWFwPGFueSwgQXBwPigpO1xyXG5cclxuY29uc3QgU0VWRVJJVElFUyA9IFsnZXJyb3InLCAnd2FybicsICdpbmZvJ10gYXMgY29uc3Q7XHJcbi8qKiDkvZPmo4DkuKXph43nuqfliKsgLT4gaTE4biBrZXkgKi9cclxuY29uc3QgU0VWRVJJVFlfS0VZUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIGVycm9yOiAndWlfc2V2ZXJpdHlfZXJyb3InLFxyXG4gICAgd2FybjogJ3VpX3NldmVyaXR5X3dhcm4nLFxyXG4gICAgaW5mbzogJ3VpX3NldmVyaXR5X2luZm8nLFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFZGl0b3IuUGFuZWwuZGVmaW5lKHtcclxuICAgIGxpc3RlbmVyczoge1xyXG4gICAgICAgIHNob3coKSB7IH0sXHJcbiAgICAgICAgaGlkZSgpIHsgfSxcclxuICAgIH0sXHJcbiAgICB0ZW1wbGF0ZTogcmVhZEZpbGVTeW5jKGpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vc3RhdGljL3RlbXBsYXRlL3dvcmtiZW5jaC9pbmRleC5odG1sJyksICd1dGYtOCcpLFxyXG4gICAgc3R5bGU6IHJlYWRGaWxlU3luYyhqb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL3N0YXRpYy9zdHlsZS93b3JrYmVuY2gvaW5kZXguY3NzJyksICd1dGYtOCcpLFxyXG4gICAgJDoge1xyXG4gICAgICAgIGFwcDogJyNhcHAnLFxyXG4gICAgfSxcclxuICAgIGFzeW5jIHJlYWR5KCkge1xyXG4gICAgICAgIGNvbnN0ICRhcHAgPSB0aGlzLiQuYXBwO1xyXG4gICAgICAgIGlmICghJGFwcCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmlofmoYjlhYjlj5blm57mnaXlho3mjILovb3vvJrlkKbliJnpppbluKfkvJrmiorljp/lp4sga2V5IOaYvuekuue7meeUqOaIt1xyXG4gICAgICAgIGxldCBzdHJpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3RyaW5ncyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LWkxOG4nKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8qIOWPluS4jeWIsOWwsemAgOWMluS4uiBrZXnvvIzkvYbkuI3lvbHlk43pnaLmnb/lip/og70gKi9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFwcCA9IGNyZWF0ZUFwcCh7XHJcbiAgICAgICAgICAgIGRhdGEoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDkuLvov5vnqIvmjInlvZPliY3nvJbovpHlmajor63oqIDop6PmnpDlpb3nmoTmlofmoYjooaggKi9cclxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvKiog5b2T5YmN5YiH6aG177yabW9kdWxlIHwgbWFuYWdlciAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYjogJ21vZHVsZScsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaooeWdl+WIl+ihqFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dDcmVhdGVNb2R1bGU6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBtYW5hZ2VyIOWIl+ihqO+8iOWFqOWxgOWNleS+i+acjeWKoe+8iVxyXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE1hbmFnZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NyZWF0ZU1hbmFnZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld01hbmFnZXJOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBuZXdNYW5hZ2VyT3JkZXI6IDQwLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmlrDlu7rmqKHlnZfooajljZVcclxuICAgICAgICAgICAgICAgICAgICBuZXdNb2R1bGVOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBuZXdNb2R1bGVPcmRlcjogMSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qih5Z2XIG9yZGVyIOe8lui+kVxyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRPcmRlcjogMCxcclxuICAgICAgICAgICAgICAgICAgICBlZGl0TWFuYWdlck9yZGVyOiAwLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDlvZPliY3mqKHlnZfnmoQgdmlldyDliJfooahcclxuICAgICAgICAgICAgICAgICAgICB2aWV3czogW10sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIm+W7uiB2aWV3IOW8ueeql1xyXG4gICAgICAgICAgICAgICAgICAgIHNob3dDcmVhdGVWaWV3TW9kYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBsYXllcjogJ1dpbmRvdycsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6ICdlbXB0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOWxgue6p+S4juaooeadv+mDveeUseS4u+i/m+eoi+S4i+WPke+8jOaJqeWxlemHjOS4jeWGjeWtmOesrOS6jOS7vSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiBbXSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qaC6KeI77yI5ZCv5Yqo6aG65bqPICsg5bGC57qn5Y2g55So77yJXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd092ZXJ2aWV3OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvdmVydmlldzogbnVsbCxcclxuICAgICAgICAgICAgICAgIHZlcnNpb25zOiBudWxsIGFzIGFueSxcclxuICAgICAgICAgICAgICAgIHVwZGF0aW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvdmVydmlld0xvYWRpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDkvZPmo4BcclxuICAgICAgICAgICAgICAgICAgICBzaG93RG9jdG9yOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBkb2N0b3JSdW5uaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBmaW5kaW5nczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdG9yR3JvdXBzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBkb2N0b3JTdW1tYXJ5OiB7IGVycm9yOiAwLCB3YXJuOiAwLCBpbmZvOiAwIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOa2iOaBr1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzRXJyb3I6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDlhazlhbHmqKHlnZdcclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRNb2R1bGVzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFNoYXJlZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5q2j5Zyo6LeRIG5wbe+8muacn+mXtOemgeeUqOWuieijhS/ljbjovb3mjInpkq4gKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRCdXN5OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAvKiogbnBtIOe7k+aenOW8ueeql+eahOaVsOaNru+8iOWksei0peaXtuWxleekuuWOn+Wni+i+k+WHuu+8iSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlc3VsdDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5by556qX5piv5ZCm5Y+v6KeBIOKAlOKAlCDkuI7mlbDmja7liIblvIDvvIzov5nmoLflhbPmjonkuYvlkI7ov5jog73ku47mtojmga/ooYzlho3ngrnlvIAgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaG93U2hhcmVkUmVzdWx0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5pys5Zyw5a6J6KOF5rqQ55uu5b2V77yb5Li6IG51bGwg6K+05piO6L+Z5piv5pmu6YCa5bel56iLICovXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTb3VyY2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOi/nOeoi+WIl+ihqOaLieWPluWksei0peeahOWOn+WboO+8iOacieWAvOaXtumdouadv+aYvuekuuaPkOekuu+8jOS9huS4jeW9seWTjeWFtuWug+WKn+iDve+8iSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdHJ5UGVuZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0cnlFcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5q2j5Zyo5ouJ6L+c56iL5YiX6KGo77yI5LiA5qyh5pCc57SiIDF+NCDnp5LvvIzopoHnu5nkuKrlj43ppojvvIkgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RyeUxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgICAgIC8qKiDlvZPliY3pgInkuK3nmoTmqKHlnZflr7nosaHvvIjliJfooajph4zlj6rlrZjkuobnsr7nroDkv6Hmga/vvIzov5nph4zlj5blm57lrozmlbTnmoTpgqPmnaHvvIkgKi9cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlSW5mbygpOiBhbnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLm1vZHVsZXMgYXMgYW55W10pLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkTW9kdWxlKSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOW9k+WJjeaooeWdl+eahOiEmuacrOaWh+S7tu+8jOS+m+mdouadv+S4gOmUruaJk+W8gOOAglxyXG4gICAgICAgICAgICAgICAgICog5LqL5Lu25aOw5piO5paH5Lu25Y+v6IO95LiN5a2Y5Zyo77yI5qih5Z2X5piv5pen54mI5omp5bGV5bu655qE77yJ77yM5omA5Lul5oyJ5a2Y5Zyo5oCn6L+H5ruk44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlRmlsZXMoKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGZpbGU6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbzogYW55ID0gdGhpcy5zZWxlY3RlZE1vZHVsZUluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm4gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtpbmZvLm1vZHVsZUZpbGUsIGluZm8ubW9kZWxGaWxlLCBpbmZvLmV2ZW50c0ZpbGVdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpbGU6IHVua25vd24pOiBmaWxlIGlzIHN0cmluZyA9PiB0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGZpbGU6IHN0cmluZykgPT4gKHsgbmFtZTogZmlsZS5zcGxpdCgnLycpLnBvcCgpIHx8IGZpbGUsIGZpbGUgfSkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5bey5a6J6KOFID0gcGFja2FnZS5qc29uIOmHjOWjsOaYjuS6hioq5LiUKiogbm9kZV9tb2R1bGVzIOmHjOWtmOWcqCAqL1xyXG4gICAgICAgICAgICAgICAgaW5zdGFsbGVkU2hhcmVkKCk6IGFueVtdIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmlsdGVyKChtOiBhbnkpID0+IG0uc3RhdGUgPT09ICdpbnN0YWxsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOacquWuieijhe+8iOWQq1wi5aOw5piO5LqG5L2GIG5vZGVfbW9kdWxlcyDph4zmsqHmnIlcIui/meS4gOaAge+8iSAqL1xyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2hhcmVkKCk6IGFueVtdIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmlsdGVyKChtOiBhbnkpID0+IG0uc3RhdGUgIT09ICdpbnN0YWxsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRTaGFyZWRJbmZvKCk6IGFueSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkU2hhcmVkKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTaGFyZWQpIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog55WM6Z2i5LiK6KaB5bGV56S655qE6YKj5p2hIG5wbSDlkb3ku6Qg4oCU4oCUIOS4juaMiemSruWNs+WwhuaJp+ihjOeahOWKqOS9nOS4gOiHtFxyXG4gICAgICAgICAgICAgICAgICog77yI5pyq5a6J6KOF5pi+56S6IGluc3RhbGzvvIzlt7Llronoo4XmmL7npLogdW5pbnN0YWxs77yJ44CCXHJcbiAgICAgICAgICAgICAgICAgKiDlkb3ku6TnlLHkuLvov5vnqIvkuIvlj5HvvIzpnaLmnb/kuI3oh6rlt7Hmi7zlj4LmlbDjgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgc2hhcmVkQWN0aW9uQ29tbWFuZCgpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm86IGFueSA9IHRoaXMuc2VsZWN0ZWRTaGFyZWRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLnN0YXRlID09PSAnaW5zdGFsbGVkJyA/IGluZm8udW5pbnN0YWxsQ29tbWFuZCA6IGluZm8uaW5zdGFsbENvbW1hbmQ7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog5a6J6KOF5oyJ6ZKu55qE5paH5a2X44CCXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICog5bey5pyJ5paw54mI5pys5pe255u05o6l5YaZ5oiQXCLmm7TmlrDliLAgeC55LnpcIiDigJTigJQg55So5oi35LiN6ZyA6KaB6Ieq5bex5Y675q+U5a+554mI5pys5Y+344CCXHJcbiAgICAgICAgICAgICAgICAgKiDms6jmhI/lj6rlnKggYHVwZGF0ZS1hdmFpbGFibGVgIOaXtui/meS5iOWGme+8mueci+S4jeWIsOi/nOeoi+eJiOacrO+8iHVua25vd27vvInml7ZcclxuICAgICAgICAgICAgICAgICAqIOS4jeiDveaal+ekulwi6L+Z5bCx5piv5pyA5pawXCLvvIzpgqPkuKrnirbmgIHlnKjor6bmg4Xph4zlj6bmnInor7TmmI7jgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgc2hhcmVkQWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvOiBhbnkgPSB0aGlzLnNlbGVjdGVkU2hhcmVkSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudCgndWlfc2hhcmVkX2luc3RhbGwnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8udXBkYXRlU3RhdGUgPT09ICd1cGRhdGUtYXZhaWxhYmxlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50KCd1aV9zaGFyZWRfdXBkYXRlX3RvJywgeyB2ZXJzaW9uOiBpbmZvLmxhdGVzdFZlcnNpb24gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLnN0YXRlID09PSAnaW5zdGFsbGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudCgndWlfc2hhcmVkX3JlaW5zdGFsbCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50KCd1aV9zaGFyZWRfaW5zdGFsbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGkxOG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiDlj5bmlofmoYjjgIJge25hbWV9YCDlvaLlvI/nmoTljaDkvY3nrKbnlKggcGFyYW1zIOabv+aNouOAglxyXG4gICAgICAgICAgICAgICAgICog5paH5qGI6KGo55Sx5Li76L+b56iL5oyJ5b2T5YmN57yW6L6R5Zmo6K+t6KiA6Kej5p6Q5ZCO5LiL5Y+R77yM6L+Z6YeM5LiN5YGa6K+t6KiA5Yik5pat44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHQoa2V5OiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dDogc3RyaW5nID0gdGhpcy5zdHJpbmdzW2tleV0gPz8ga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNwbGl0KGB7JHtrfX1gKS5qb2luKFN0cmluZyhwYXJhbXNba10pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDliJ3lp4vljJYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRDb25maWcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1sYXllcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS10ZW1wbGF0ZXMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGF5ZXJzLmxlbmd0aCAmJiAhdGhpcy5sYXllcnMuaW5jbHVkZXModGhpcy5sYXllcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXIgPSB0aGlzLmxheWVyc1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZE92ZXJ2aWV3KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnZpZXcgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1vdmVydmlldycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOeJiOacrOS/oeaBrzrmoYbmnrbor7vlt6XnqIsgbm9kZV9tb2R1bGVzIOmHjOmCo+S7vSzmianlsZXor7voh6rlt7Eg4oCU4oCUIOmDveaYr1wi5a6e6ZmF6KOF5LqG5LuA5LmIXCIgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRWZXJzaW9ucygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnNpb25zID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktdmVyc2lvbnMnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuKTovrnniYjmnKzkuI3kuIDmoLflsLHnrpfmnInmlrDniYgo5q+U6L6D6YC76L6R5Y+q5q2k5LiA5aSELOS4u+i/m+eoi+S4jemHjeWkjeWIpOaWrSkgKi9cclxuICAgICAgICAgICAgICAgIHVwZGF0ZU9mKGluZm86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhIShpbmZvICYmIGluZm8ubGF0ZXN0ICYmIGluZm8udmVyc2lvbiAmJiBpbmZvLmxhdGVzdCAhPT0gaW5mby52ZXJzaW9uKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgdXBkYXRlRnJhbWV3b3JrKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS4iuS4gOeJiOi/memHjOebtOaOpeeUqOS6hiBuYW1lLOiAjCBuYW1lIOWPquWumuS5ieWcqCB1cGRhdGVFeHRlbnNpb24g6YeMIOKAlOKAlFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOmCo+S4quagh+ivhuespuS8muiQveWIsOWFqOWxgCh3aW5kb3cubmFtZSzpgJrluLjmmK/nqbrkuLIpLOS6juaYr+WPmOaIkCBcIkBsYXRlc3RcIixcclxuICAgICAgICAgICAgICAgICAgICAvLyDkuLvov5vnqIvmlLbliLDnmoTlsLHmmK9cIue8uuWwkeWMheWQjVwi44CC6Ieq5bex5a6a5LmJ6Ieq5bex55qELOWIq+i5reWIq+S6uueahOWPmOmHj+OAglxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnZlcnNpb25zPy5mcmFtZXdvcms/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZU9mKHRoaXMudmVyc2lvbnM/LmZyYW1ld29yaykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV92ZXJzaW9uc19hbHJlYWR5X2xhdGVzdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGF3YWl0IHRoaXMucnVuVXBkYXRlKCd1cGRhdGUtZnJhbWV3b3JrJywgbmFtZSkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV9tc2dfZnJhbWV3b3JrX3VwZGF0ZWQnLCB7IHZlcnNpb246IHRoaXMudmVyc2lvbnM/LmZyYW1ld29yaz8ubGF0ZXN0IHx8ICcnIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyB1cGRhdGVFeHRlbnNpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudmVyc2lvbnM/LmV4dGVuc2lvbj8ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDlt7LmmK/mnIDmlrDlsLHliKvnnJ/ljrvoo4XkuIDpgY0s5pu05Yir5oqlXCLlt7Lmm7TmlrBcIiDigJTigJQg6YKj5piv5Zyo6aqX55So5oi3XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZU9mKHRoaXMudmVyc2lvbnM/LmV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV92ZXJzaW9uc19hbHJlYWR5X2xhdGVzdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS6juaYryBzeW5jLWV4dGVuc2lvbiDmi7flm57mnaXnmoTov5jmmK/ml6fniYjmnKwg4oCU4oCUIOihqOeOsOWwseaYryfngrnkuobmsqHnlKgn44CCXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5ydW5VcGRhdGUoJ3VwZGF0ZS1leHRlbnNpb24nLCBuYW1lKSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAvLyDoo4Xov5sgbm9kZV9tb2R1bGVzIOi/mOS4jeWknzrnvJbovpHlmajlj6rorqQgZXh0ZW5zaW9ucy8g5LiL6YKj5Lu9LOW/hemhu+iQveebmFxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3N5bmMtZXh0ZW5zaW9uJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMudCgndWlfbXNnX2V4dGVuc2lvbl91cGRhdGVkJywgeyB2ZXJzaW9uOiB0aGlzLnZlcnNpb25zPy5leHRlbnNpb24/LmxhdGVzdCB8fCAnJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuI7lhazlhbHmqKHlnZflronoo4XotbDlkIzkuIDmnaHot6865aSN55So546w5oiQ55qEIG5wbSDmiafooYzkuI7lpLHotKXlsZXnpLogKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIHJ1blVwZGF0ZShtZXNzYWdlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCBtZXNzYWdlLCBuYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gcmVzICYmIHJlcy5vayA9PT0gZmFsc2UgPyAnJyA6IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLm9rID09PSBmYWxzZSkgdGhpcy5zaG93RXJyb3IocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFZlcnNpb25zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZE1vZHVsZXMoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbW9kdWxlcycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU9yZGVyID0gdGhpcy5uZXh0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNb2R1bGUgJiYgIXRoaXMubW9kdWxlcy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZHVsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY0VkaXRPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgbmV4dE9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tb2R1bGVzLmxlbmd0aCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLnRoaXMubW9kdWxlcy5tYXAoKG06IGFueSkgPT4gbS5vcmRlcikpICsgMTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmqKHlnZfmk43kvZwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdE1vZHVsZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRWaWV3cygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzeW5jRWRpdE9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZCA9IHRoaXMubW9kdWxlcy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHRoaXMuZWRpdE9yZGVyID0gbW9kLm9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZFZpZXdzKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LXZpZXdzJywgdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZU1vZHVsZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uZXdNb2R1bGVOYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodGhpcy50KCd1aV9uZWVkX21vZHVsZV9uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS1tb2R1bGUnLCBuYW1lLCB0aGlzLm5ld01vZHVsZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19tb2R1bGVfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmRpck5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlTW9kdWxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZHVsZSA9IHJlcy5kaXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uVXBkYXRlT3JkZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF9zZWxlY3RfbW9kdWxlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3VwZGF0ZS1tb2R1bGUtb3JkZXInLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCB0aGlzLmVkaXRPcmRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfb3JkZXJfdXBkYXRlZCcsIHsgbmFtZTogcmVzLm1vZHVsZU5hbWUsIG9yZGVyOiByZXMub3JkZXIgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkRlbGV0ZU1vZHVsZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3Q291bnQgPSB0aGlzLnZpZXdzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yig6Zmk5YmN5YWI6Zeu5Li76L+b56iL77ya5pyJ5rKh5pyJ6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pysXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlZnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbW9kdWxlLXJlZnMnLCB0aGlzLnNlbGVjdGVkTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcyA9IHJlcz8ucmVmZXJlbmNlZEJ5ID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyog5p+l5LiN5Yiw5bCx5LiN6Zi75pat5Yig6Zmk77yM5Y+q5piv5bCR5LiA5bGC5o+Q6YaSICovXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhcm5SZWZzID0gcmVmcy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnXFxuXFxu4pqgICcgKyB0aGlzLnQoJ3VpX2NvbmZpcm1fcmVmcycsIHsgY291bnQ6IHJlZnMubGVuZ3RoIH0pICsgJ1xcbsK3ICcgKyByZWZzLmpvaW4oJ1xcbsK3ICcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX2RlbGV0ZV9tb2R1bGUnLCB7IG5hbWU6IHRoaXMuc2VsZWN0ZWRNb2R1bGUsIGNvdW50OiB2aWV3Q291bnQgfSkgKyB3YXJuUmVmcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS1tb2R1bGUnLCB0aGlzLnNlbGVjdGVkTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19tb2R1bGVfZGVsZXRlZCcsIHsgbmFtZTogdGhpcy5zZWxlY3RlZE1vZHVsZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFuYWdlciDmk43kvZwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaFRhYihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYiA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICd2ZXJzaW9ucycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmVyc2lvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdtYW5hZ2VyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3NoYXJlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2hhcmVkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRNYW5hZ2VycygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hbmFnZXJzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbWFuYWdlcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX6KGo6YeN5bu65ZCO5oqK6YCJ5Lit6aG56YeN5paw57uR5a6a5Yiw5paw5a+56LGh5LiK77yM6YG/5YWN5pi+56S66L+H5pyf5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkTWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hbmFnZXIgPSBjdXJyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMubWFuYWdlcnMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IGN1cnJlbnQubmFtZSkgPz8gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZWN0TWFuYWdlcihtYW5hZ2VyOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFuYWdlciA9IG1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5b+F6aG75Zyo6LWL5YC8KirkuYvlkI4qKuWQjOatpSDigJTigJQg5ZCm5YiZ6K+75Yiw55qE6L+Y5piv5LiK5LiA5Liq6YCJ5Lit6aG555qEIG9yZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRWRpdE1hbmFnZXJPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZU1hbmFnZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmV3TWFuYWdlck5hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfbWFuYWdlcl9uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS1tYW5hZ2VyJywgbmFtZSwgdGhpcy5uZXdNYW5hZ2VyT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX21hbmFnZXJfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TWFuYWdlck5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlTWFuYWdlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkID0gdGhpcy5tYW5hZ2Vycy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gcmVzLmNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE1hbmFnZXIoY3JlYXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uRGVsZXRlTWFuYWdlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNYW5hZ2VyKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuc2VsZWN0ZWRNYW5hZ2VyLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWRpdG9yLkRpYWxvZy53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnQoJ3VpX2NvbmZpcm1fZGVsZXRlX21hbmFnZXInLCB7IG5hbWUgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYnV0dG9uczogW3RoaXMudCgndWlfZGVsZXRlJyksIHRoaXMudCgndWlfY2FuY2VsJyldLCBkZWZhdWx0OiAxLCBjYW5jZWw6IDEgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdkZWxldGUtbWFuYWdlcicsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX21hbmFnZXJfZGVsZXRlZCcsIHsgbmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDpgInkuK0gbWFuYWdlciDml7bmiorlroPnmoQgb3JkZXIg5aGr6L+b57yW6L6R5qGGKOeFp+aooeWdl+mCo+WllykgKi9cclxuICAgICAgICAgICAgICAgIHN5bmNFZGl0TWFuYWdlck9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRNYW5hZ2VyT3JkZXIgPSB0aGlzLnNlbGVjdGVkTWFuYWdlci5vcmRlciA/PyAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOabtOaWsCBtYW5hZ2VyIOeahCBvcmRlcjrnm7TmjqXmlLnlhpnohJrmnKzph4znmoQgQFJlZ2lzdGVyTWFuYWdlcih7b3JkZXJ9KSAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25VcGRhdGVNYW5hZ2VyT3JkZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTWFuYWdlcikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2NnZi1nYW1lLXRvb2wnLCAndXBkYXRlLW1hbmFnZXItb3JkZXInLCB0aGlzLnNlbGVjdGVkTWFuYWdlci5uYW1lLCB0aGlzLmVkaXRNYW5hZ2VyT3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbWFuYWdlcl9vcmRlcl9zYXZlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSwgb3JkZXI6IHJlcy5vcmRlciB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIl+ihqOmHjeaOkuS6hu+8jOe8lui+keahhuS5n+imgei3n+edgOaYvuekuuacgOaWsOeahCDigJTigJQg5ZCm5YiZ5L+d5a2Y5a6M6L+Y5pi+56S65L+d5a2Y5YmN55qE5YC8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY0VkaXRNYW5hZ2VyT3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG9uTmV3TWFuYWdlck9yZGVyKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TWFuYWdlck9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBvbkVkaXRNYW5hZ2VyT3JkZXIoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0TWFuYWdlck9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uTmV3TWFuYWdlck5hbWUoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNYW5hZ2VyTmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWaWV3IOaTjeS9nCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uRGVsZXRlVmlldyhuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV9kZWxldGVfdmlldycsIHsgbmFtZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS12aWV3JywgdGhpcy5zZWxlY3RlZE1vZHVsZSwgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfdmlld19kZWxldGVkJywgeyBuYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG9wZW5DcmVhdGVWaWV3TW9kYWwoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGNsb3NlQ3JlYXRlVmlld01vZGFsKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZVZpZXcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudmlld05hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfdmlld19uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2NnZi1nYW1lLXRvb2wnLCAnY3JlYXRlLXZpZXcnLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCBuYW1lLCB0aGlzLmxheWVyLCB0aGlzLnRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX3ZpZXdfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSwgdGVtcGxhdGU6IHJlcy50ZW1wbGF0ZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFZpZXdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5L2T5qOA57uT5p6c6YeM55qE5paH5Lu26Lev5b6EIC0+IOWcqOe8lui+keWZqOmHjOaJk+W8gCAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgb3BlblNvdXJjZShmaWxlOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdvcGVuLXNvdXJjZScsIGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOS9k+ajgCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBydW5Eb2N0b3IoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N0b3JSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdydW4tZG9jdG9yJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZGluZ3MgPSByZXMuZmluZGluZ3MgPz8gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdG9yU3VtbWFyeSA9IHJlcy5zdW1tYXJ5ID8/IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5oyJIGVycm9yIOKGkiB3YXJuIOKGkiBpbmZvIOWIhue7hO+8jOepuue7hOS4jeaYvuekulxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3Rvckdyb3VwcyA9IFNFVkVSSVRJRVNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHNldmVyaXR5KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnQoU0VWRVJJVFlfS0VZU1tzZXZlcml0eV0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB0aGlzLmZpbmRpbmdzLmZpbHRlcigoZjogYW55KSA9PiBmLnNldmVyaXR5ID09PSBzZXZlcml0eSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGc6IGFueSkgPT4gZy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEb2N0b3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdG9yUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOamguiniCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvcGVuT3ZlcnZpZXcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVydmlld0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd092ZXJ2aWV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJ2aWV3TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgY2xvc2VPdmVydmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dPdmVydmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOihqOWNleS6i+S7tiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgb25OZXdNb2R1bGVOYW1lKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TW9kdWxlTmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uTmV3TW9kdWxlT3JkZXIoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVPcmRlciA9IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfHwgMDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbkVkaXRPcmRlcihlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRPcmRlciA9IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfHwgMDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvblZpZXdOYW1lKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld05hbWUgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbkxheWVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVyID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25UZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzaG93U3VjY2Vzcyhtc2c6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaG93RXJyb3IobXNnOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIC8qKiBAcGFyYW0gZm9yY2Ug5by65Yi26YeN5paw5ouJ5Y+W6L+c56iL5YiX6KGo77yI44CM5Yi35paw44CN5oyJ6ZKu55So77yb5ZCm5YiZ55So5Li76L+b56iL6YeM55qE57yT5a2Y77yJICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkU2hhcmVkTW9kdWxlcyhmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZWdpc3RyeUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlTaGFyZWRTdGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LXNoYXJlZC1tb2R1bGVzJywgZm9yY2UpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVnaXN0cnlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5Li76L+b56iL5Zue5p2l55qE54q25oCB57uf5LiA5Zyo6L+Z6YeM6JC95YiwIGRhdGEg5LiK77yI5p+l6K+i5LiO6KOFL+WNuOWFseeUqOWQjOS4gOS7vee7k+aehO+8iSAqL1xyXG4gICAgICAgICAgICAgICAgYXBwbHlTaGFyZWRTdGF0ZShyZXM6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkTW9kdWxlcyA9IHJlcz8ubW9kdWxlcyA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsU291cmNlID0gcmVzPy5sb2NhbFNvdXJjZSA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS4u+i/m+eoi+WcqFwi5ZCO5Y+w5Yi35paw5LitXCLml7bkvJrluKblm57kuIDkuKrov5vooYzkuK3nmoTor7TmmI4g4oCU4oCUIOmCo+S4jeaYr+Wksei0pSzkuI3or6XmjInlpLHotKXmmL7npLrjgIJcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZW5kaW5nID0gdHlwZW9mIHJlcz8ucmVnaXN0cnlFcnJvciA9PT0gJ3N0cmluZycgJiYgcmVzLnJlZ2lzdHJ5RXJyb3IuaW5kZXhPZign5q2j5Zyo6I635Y+WJykgPj0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFJlZ2lzdHJ5UGVuZGluZyA9IHBlbmRpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5LiA5qyh5oCn55qE6Ieq5Yqo6YeN6K+VOuWHoOenkuWQjuWQjuWPsOW3sue7j+WIt+WlveS6hizov5nkuIDpobXoh6rlt7Hmm7TmlrAs5LiN55So55So5oi35Y6754K55Yi35pawXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFyZWRSZXRyeVRpbWVyID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZXRyeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmV0cnlUaW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2hhcmVkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVnaXN0cnlFcnJvciA9IHJlcz8ucmVnaXN0cnlFcnJvciA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOmAieS4remhueWPr+iDveW3sue7j+S4jeWcqOWIl+ihqOmHjOS6hu+8iOavlOWmguWImuiiq+WNuOi9ve+8iVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2hhcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICEodGhpcy5zaGFyZWRNb2R1bGVzIGFzIGFueVtdKS5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZFNoYXJlZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNoYXJlZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RTaGFyZWQobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNoYXJlZCA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uSW5zdGFsbFNoYXJlZCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJ1blNoYXJlZCgnaW5zdGFsbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvblVuaW5zdGFsbFNoYXJlZCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5zZWxlY3RlZFNoYXJlZEluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWNuOi9veWJjeaPkOmGkuS4pOexu+S8muiiq+aJk+aWreeahOS4nOilv++8mui/mOWcqCBpbXBvcnQg5a6D55qE6ISa5pys44CB5Lul5Y+K5L6d6LWW5a6D55qE5YWs5YWx5qih5Z2X44CCXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Y+q5qOA5p+l5YmN6ICF55qE6K+d77yMXCLlj6bkuIDkuKrlhazlhbHmqKHlnZfkvp3otZblroNcIuS8muWujOWFqOa8j+aOieOAglxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLnJlZmVyZW5jZWRCeS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICfimqAgJyArIHRoaXMudCgndWlfc2hhcmVkX3JlZnNfd2FybicpICsgJ1xcbsK3ICcgKyBpbmZvLnJlZmVyZW5jZWRCeS5qb2luKCdcXG7CtyAnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uZGVwZW5kZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICfimqAgJyArIHRoaXMudCgndWlfc2hhcmVkX2RlcHNfd2FybicpICsgJ1xcbsK3ICcgKyBpbmZvLmRlcGVuZGVudHMuam9pbignXFxuwrcgJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV91bmluc3RhbGxfc2hhcmVkJywgeyBuYW1lOiBpbmZvLm5hbWUgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyAod2FybmluZ3MubGVuZ3RoID8gJ1xcblxcbicgKyB3YXJuaW5ncy5qb2luKCdcXG5cXG4nKSA6ICcnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW3RoaXMudCgndWlfc2hhcmVkX3VuaW5zdGFsbCcpLCB0aGlzLnQoJ3VpX2NhbmNlbCcpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLnJlc3BvbnNlICE9PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuU2hhcmVkKCd1bmluc3RhbGwnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOS+nei1lumhueacrOi6q+S5n+aYr+WFrOWFseaooeWdl+aXtu+8jOeCueS4gOS4i+i3s+i/h+WOu+eci+Wug+eahOeKtuaAgSAqL1xyXG4gICAgICAgICAgICAgICAgb25DbGlja0RlcGVuZGVuY3koZGVwZW5kZW5jeTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY3k/LmlzU2hhcmVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U2hhcmVkKGRlcGVuZGVuY3kubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOS7o+i3kSBucG0g5a6J6KOFIC8g5Y246L2944CCXHJcbiAgICAgICAgICAgICAgICAgKiDlpLHotKXml7YqKuS4jeW8ueS4gOadoei9rOi/sOeahFwi5a6J6KOF5aSx6LSlXCIqKu+8jOiAjOaYr+aKiiBucG0g55qE5Y6f5aeL6L6T5Ye65pW05Liq5pS+6L+b5by556qXIOKAlOKAlFxyXG4gICAgICAgICAgICAgICAgICog55So5oi36KaB6K+K5pat55qE5bCx5piv6YKj5q616L6T5Ye644CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIHJ1blNoYXJlZChhY3Rpb246ICdpbnN0YWxsJyB8ICd1bmluc3RhbGwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuc2VsZWN0ZWRTaGFyZWRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZEJ1c3kgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2NnZi1nYW1lLXRvb2wnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID09PSAnaW5zdGFsbCcgPyAnaW5zdGFsbC1zaGFyZWQtbW9kdWxlJyA6ICd1bmluc3RhbGwtc2hhcmVkLW1vZHVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlTaGFyZWRTdGF0ZShyZXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcz8ub2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9PT0gJ2luc3RhbGwnID8gJ3VpX21zZ19zaGFyZWRfaW5zdGFsbGVkJyA6ICd1aV9tc2dfc2hhcmVkX3VuaW5zdGFsbGVkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IGluZm8ubmFtZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlpLHotKXvvJrmlbDmja7nlZnnnYDkvpvlvLnnqpflsZXnpLrvvIzlubbnq4vliLvmiZPlvIDlroNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVzdWx0ID0gcmVzPy5yZXN1bHQgPz8gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NoYXJlZFJlc3VsdCA9IHRoaXMuc2hhcmVkUmVzdWx0ICE9PSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IocmVzPy5tZXNzYWdlIHx8IGBucG0gJHthY3Rpb259IGZhaWxlZGApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRCdXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5LuO5raI5oGv6KGM5YaN54K55byA5LiK5LiA5qyh55qEIG5wbSDovpPlh7ogKi9cclxuICAgICAgICAgICAgICAgIG9wZW5TaGFyZWRSZXN1bHQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NoYXJlZFJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5Y+q5YWz5by556qX77yMKirkv53nlZnmlbDmja4qKiDigJTigJQg5ZCm5YiZ5YWz5o6J5LmL5ZCO5bCx5YaN5Lmf55yL5LiN5Yiw6YKj5q616L6T5Ye65LqGICovXHJcbiAgICAgICAgICAgICAgICBjbG9zZVNoYXJlZFJlc3VsdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTaGFyZWRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1vdW50ZWQoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDb25maWcoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8g5omT5byA6Z2i5p2/5bCx5oqKKirov5znqIsqKuaVsOaNruS5n+aLiei1t+adpeOAglxyXG4gICAgICAgICAgICAgICAgLy8g5Lul5YmN6L+Z5Lik5Liq5Y+q5ZyoIHN3aXRjaFRhYigpIOmHjOiwgyDigJTigJQg5LiN54K56YKj5Lik6aG15bCx5rC46L+c5LiN5ouJLOS9k+mqjOW+iOW3ruOAglxyXG4gICAgICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgICAgIC8vIOS4pOS4qumDveS4jSBhd2FpdDrnvZHnu5zmhaLkuI3og73mi5bkvY/pnaLmnb/mmL7npLoo5Li76L+b56iL6YKj6L655pivIGNhY2hlLWZpcnN0LFxyXG4gICAgICAgICAgICAgICAgLy8g6ICM5LiU6Z2i5p2/5pys5p2l5bCx5pyJXCLmraPlnKjojrflj5YgLyDojrflj5blpLHotKVcIueahOeKtuaAgSBVSSzmhaLlkozlpLHotKXpg73og73mmL7npLrlh7rmnaUp44CCXHJcbiAgICAgICAgICAgICAgICAvLyDlkI7lj7Dmi4nlm57mnaXlkI465q2j5Zyo55yL6YKj5LiA6aG155qE6K+d5Lya6Ieq54S25Yi35pawO+S4jeWcqOmCo+S4gOmhteS5n+ayoeWFs+ezuyxcclxuICAgICAgICAgICAgICAgIC8vIOWIh+i/h+WOu+aXtiBzd2l0Y2hUYWIoKSDph4zov5jkvJrlho3osIPkuIDmrKEo5ZG95Lit57yT5a2YLOWHoOS5jumbtuaIkOacrCnjgIJcclxuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5sb2FkVmVyc2lvbnMoKTtcclxuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5sb2FkU2hhcmVkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZTogcmVhZEZpbGVTeW5jKGpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vc3RhdGljL3RlbXBsYXRlL3dvcmtiZW5jaC9wYW5lbC5odG1sJyksICd1dGYtOCcpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFwcC5jb25maWcuY29tcGlsZXJPcHRpb25zLmlzQ3VzdG9tRWxlbWVudCA9ICh0YWc6IHN0cmluZykgPT4gdGFnLnN0YXJ0c1dpdGgoJ3VpLScpO1xyXG4gICAgICAgIGFwcC5tb3VudCgkYXBwKTtcclxuICAgICAgICBwYW5lbERhdGFNYXAuc2V0KHRoaXMsIGFwcCk7XHJcbiAgICB9LFxyXG4gICAgYmVmb3JlQ2xvc2UoKSB7IH0sXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSBwYW5lbERhdGFNYXAuZ2V0KHRoaXMpO1xyXG4gICAgICAgIGlmIChhcHApIHtcclxuICAgICAgICAgICAgYXBwLnVubW91bnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG59KTtcclxuIl19
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "./@types/schema/package/index.json",
3
3
  "package_version": 2,
4
4
  "name": "ccgf-game-tool",
5
- "version": "1.0.15",
5
+ "version": "1.0.16",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },