diff --git a/css/main.css b/css/main.css index b1bfa124..b3368394 100644 --- a/css/main.css +++ b/css/main.css @@ -232,15 +232,28 @@ padding: 2px 0; } +.floating-window-buttons { + display: flex; +} + .floating-window-buttons .button { cursor: pointer; padding: 0 2px; } -.floating-window-buttons .close-button svg { +.floating-window-buttons .button svg { + fill: #dcddde; margin-top: 1.5px; } +.floating-window-buttons .button:hover svg { + fill: white; +} + +.floating-window-buttons .button:hover { + background-color: #36393F; +} + .floating-window-buttons .close-button:hover { background-color: #f04747; } @@ -537,6 +550,19 @@ background-color: #000; } +.bd-addon-button { + cursor: pointer; +} + +.bd-addon-button + .bd-addon-button { + margin-left: 5px; +} + + + + + + /* BEGIN EMOTE STYLING */ /* =================== */ #emote-container { @@ -1153,6 +1179,13 @@ color: #f6f6f7; max-width: 750px; } +.floating-addon-window { + min-width: 535px; + min-height: 605px; + max-height: 90%; + max-width: 90%; +} + /* Ace Editor Settings */ #ace_settingsmenu_container { background: rgba(0,0,0, 0.7)!important; diff --git a/js/main.js b/js/main.js index 527a5ffa..72d37894 100644 --- a/js/main.js +++ b/js/main.js @@ -299,7 +299,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _con /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([{\n type: \"category\",\n id: \"general\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"emotes\",\n value: true\n }, {\n type: \"switch\",\n id: \"publicServers\",\n value: true\n }, {\n type: \"switch\",\n id: \"voiceDisconnect\",\n value: false\n }, {\n type: \"switch\",\n id: \"twentyFourHour\",\n value: false\n }, {\n type: \"switch\",\n id: \"classNormalizer\",\n value: true\n }, {\n type: \"switch\",\n id: \"showToasts\",\n value: true\n }]\n}, {\n type: \"category\",\n id: \"appearance\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"voiceMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"minimalMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"hideChannels\",\n value: false,\n enableWith: \"minimalMode\"\n }, {\n type: \"switch\",\n id: \"darkMode\",\n value: true\n }, {\n type: \"switch\",\n id: \"coloredText\",\n value: false\n }]\n}, {\n type: \"category\",\n id: \"addons\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"addonErrors\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoScroll\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoReload\",\n value: true\n }]\n}, {\n type: \"category\",\n id: \"customcss\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"customcss\",\n value: true\n }, {\n type: \"switch\",\n id: \"liveUpdate\",\n value: false\n }, {\n type: \"dropdown\",\n id: \"openAction\",\n value: \"settings\",\n options: [{\n value: \"settings\"\n }, {\n value: \"detached\"\n }, {\n value: \"system\"\n }]\n }]\n}, {\n type: \"category\",\n id: \"developer\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"developerMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"copySelector\",\n value: false,\n enableWith: \"developerMode\"\n }]\n}, {\n type: \"category\",\n id: \"window\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"transparency\",\n value: false\n }, {\n type: \"switch\",\n id: \"frame\",\n value: false,\n hidden: true\n }]\n}]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc2V0dGluZ3MvY29uZmlnLmpzP2ZmOGUiXSwibmFtZXMiOlsidHlwZSIsImlkIiwiY29sbGFwc2libGUiLCJzZXR0aW5ncyIsInZhbHVlIiwiZW5hYmxlV2l0aCIsInNob3duIiwib3B0aW9ucyIsImhpZGRlbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZSxnRUFDWDtBQUNJQSxNQUFJLEVBQUUsVUFEVjtBQUVJQyxJQUFFLEVBQUUsU0FGUjtBQUdJQyxhQUFXLEVBQUUsSUFIakI7QUFJSUMsVUFBUSxFQUFFLENBQ047QUFBQ0gsUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxRQUFyQjtBQUErQkcsU0FBSyxFQUFFO0FBQXRDLEdBRE0sRUFFTjtBQUFDSixRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLGVBQXJCO0FBQXNDRyxTQUFLLEVBQUU7QUFBN0MsR0FGTSxFQUdOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsaUJBQXJCO0FBQXdDRyxTQUFLLEVBQUU7QUFBL0MsR0FITSxFQUlOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsZ0JBQXJCO0FBQXVDRyxTQUFLLEVBQUU7QUFBOUMsR0FKTSxFQUtOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsaUJBQXJCO0FBQXdDRyxTQUFLLEVBQUU7QUFBL0MsR0FMTSxFQU1OO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsWUFBckI7QUFBbUNHLFNBQUssRUFBRTtBQUExQyxHQU5NO0FBSmQsQ0FEVyxFQWNYO0FBQ0lKLE1BQUksRUFBRSxVQURWO0FBRUlDLElBQUUsRUFBRSxZQUZSO0FBR0lDLGFBQVcsRUFBRSxJQUhqQjtBQUlJQyxVQUFRLEVBQUUsQ0FDTjtBQUFDSCxRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLFdBQXJCO0FBQWtDRyxTQUFLLEVBQUU7QUFBekMsR0FETSxFQUVOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsYUFBckI7QUFBb0NHLFNBQUssRUFBRTtBQUEzQyxHQUZNLEVBR047QUFBQ0osUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxjQUFyQjtBQUFxQ0csU0FBSyxFQUFFLEtBQTVDO0FBQW1EQyxjQUFVLEVBQUU7QUFBL0QsR0FITSxFQUlOO0FBQUNMLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsVUFBckI7QUFBaUNHLFNBQUssRUFBRTtBQUF4QyxHQUpNLEVBS047QUFBQ0osUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxhQUFyQjtBQUFvQ0csU0FBSyxFQUFFO0FBQTNDLEdBTE07QUFKZCxDQWRXLEVBMEJYO0FBQ0lKLE1BQUksRUFBRSxVQURWO0FBRUlDLElBQUUsRUFBRSxRQUZSO0FBR0lDLGFBQVcsRUFBRSxJQUhqQjtBQUlJQyxVQUFRLEVBQUUsQ0FDTjtBQUFDSCxRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLGFBQXJCO0FBQW9DRyxTQUFLLEVBQUU7QUFBM0MsR0FETSxFQUVOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsWUFBckI7QUFBbUNHLFNBQUssRUFBRTtBQUExQyxHQUZNLEVBR047QUFBQ0osUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxZQUFyQjtBQUFtQ0csU0FBSyxFQUFFO0FBQTFDLEdBSE07QUFKZCxDQTFCVyxFQW9DWDtBQUNJSixNQUFJLEVBQUUsVUFEVjtBQUVJQyxJQUFFLEVBQUUsV0FGUjtBQUdJQyxhQUFXLEVBQUUsSUFIakI7QUFJSUksT0FBSyxFQUFFLEtBSlg7QUFLSUgsVUFBUSxFQUFFLENBQ047QUFBQ0gsUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxXQUFyQjtBQUFrQ0csU0FBSyxFQUFFO0FBQXpDLEdBRE0sRUFFTjtBQUFDSixRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLFlBQXJCO0FBQW1DRyxTQUFLLEVBQUU7QUFBMUMsR0FGTSxFQUdOO0FBQUNKLFFBQUksRUFBRSxVQUFQO0FBQW1CQyxNQUFFLEVBQUUsWUFBdkI7QUFBcUNHLFNBQUssRUFBRSxVQUE1QztBQUF3REcsV0FBTyxFQUFFLENBQUM7QUFBQ0gsV0FBSyxFQUFFO0FBQVIsS0FBRCxFQUFzQjtBQUFDQSxXQUFLLEVBQUU7QUFBUixLQUF0QixFQUEyQztBQUFDQSxXQUFLLEVBQUU7QUFBUixLQUEzQztBQUFqRSxHQUhNO0FBTGQsQ0FwQ1csRUErQ1g7QUFDSUosTUFBSSxFQUFFLFVBRFY7QUFFSUMsSUFBRSxFQUFFLFdBRlI7QUFHSUMsYUFBVyxFQUFFLElBSGpCO0FBSUlJLE9BQUssRUFBRSxLQUpYO0FBS0lILFVBQVEsRUFBRSxDQUNOO0FBQUNILFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsZUFBckI7QUFBc0NHLFNBQUssRUFBRTtBQUE3QyxHQURNLEVBRU47QUFBQ0osUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxjQUFyQjtBQUFxQ0csU0FBSyxFQUFFLEtBQTVDO0FBQW1EQyxjQUFVLEVBQUU7QUFBL0QsR0FGTTtBQUxkLENBL0NXLEVBeURYO0FBQ0lMLE1BQUksRUFBRSxVQURWO0FBRUlDLElBQUUsRUFBRSxRQUZSO0FBR0lDLGFBQVcsRUFBRSxJQUhqQjtBQUlJSSxPQUFLLEVBQUUsS0FKWDtBQUtJSCxVQUFRLEVBQUUsQ0FDTjtBQUFDSCxRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLGNBQXJCO0FBQXFDRyxTQUFLLEVBQUU7QUFBNUMsR0FETSxFQUVOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsT0FBckI7QUFBOEJHLFNBQUssRUFBRSxLQUFyQztBQUE0Q0ksVUFBTSxFQUFFO0FBQXBELEdBRk07QUFMZCxDQXpEVyxDQUFmIiwiZmlsZSI6Ii4vc3JjL2RhdGEvc2V0dGluZ3MvY29uZmlnLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgW1xyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJnZW5lcmFsXCIsXHJcbiAgICAgICAgY29sbGFwc2libGU6IHRydWUsXHJcbiAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImVtb3Rlc1wiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJwdWJsaWNTZXJ2ZXJzXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcInZvaWNlRGlzY29ubmVjdFwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwidHdlbnR5Rm91ckhvdXJcIiwgdmFsdWU6IGZhbHNlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImNsYXNzTm9ybWFsaXplclwiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJzaG93VG9hc3RzXCIsIHZhbHVlOiB0cnVlfVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImFwcGVhcmFuY2VcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwidm9pY2VNb2RlXCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJtaW5pbWFsTW9kZVwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiaGlkZUNoYW5uZWxzXCIsIHZhbHVlOiBmYWxzZSwgZW5hYmxlV2l0aDogXCJtaW5pbWFsTW9kZVwifSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImRhcmtNb2RlXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImNvbG9yZWRUZXh0XCIsIHZhbHVlOiBmYWxzZX1cclxuICAgICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJhZGRvbnNcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiYWRkb25FcnJvcnNcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiYXV0b1Njcm9sbFwiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJhdXRvUmVsb2FkXCIsIHZhbHVlOiB0cnVlfVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImN1c3RvbWNzc1wiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNob3duOiBmYWxzZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiY3VzdG9tY3NzXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImxpdmVVcGRhdGVcIiwgdmFsdWU6IGZhbHNlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwiZHJvcGRvd25cIiwgaWQ6IFwib3BlbkFjdGlvblwiLCB2YWx1ZTogXCJzZXR0aW5nc1wiLCBvcHRpb25zOiBbe3ZhbHVlOiBcInNldHRpbmdzXCJ9LCB7dmFsdWU6IFwiZGV0YWNoZWRcIn0sIHt2YWx1ZTogXCJzeXN0ZW1cIn1dfVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImRldmVsb3BlclwiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNob3duOiBmYWxzZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiZGV2ZWxvcGVyTW9kZVwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiY29weVNlbGVjdG9yXCIsIHZhbHVlOiBmYWxzZSwgZW5hYmxlV2l0aDogXCJkZXZlbG9wZXJNb2RlXCJ9XHJcbiAgICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgaWQ6IFwid2luZG93XCIsXHJcbiAgICAgICAgY29sbGFwc2libGU6IHRydWUsXHJcbiAgICAgICAgc2hvd246IGZhbHNlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJ0cmFuc3BhcmVuY3lcIiwgdmFsdWU6IGZhbHNlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImZyYW1lXCIsIHZhbHVlOiBmYWxzZSwgaGlkZGVuOiB0cnVlfVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/data/settings/config.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([{\n type: \"category\",\n id: \"general\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"emotes\",\n value: true\n }, {\n type: \"switch\",\n id: \"publicServers\",\n value: true\n }, {\n type: \"switch\",\n id: \"voiceDisconnect\",\n value: false\n }, {\n type: \"switch\",\n id: \"twentyFourHour\",\n value: false\n }, {\n type: \"switch\",\n id: \"classNormalizer\",\n value: true\n }, {\n type: \"switch\",\n id: \"showToasts\",\n value: true\n }]\n}, {\n type: \"category\",\n id: \"appearance\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"voiceMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"minimalMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"hideChannels\",\n value: false,\n enableWith: \"minimalMode\"\n }, {\n type: \"switch\",\n id: \"darkMode\",\n value: true\n }, {\n type: \"switch\",\n id: \"coloredText\",\n value: false\n }]\n}, {\n type: \"category\",\n id: \"addons\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"addonErrors\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoScroll\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoReload\",\n value: true\n }, {\n type: \"dropdown\",\n id: \"editAction\",\n value: \"detached\",\n options: [{\n value: \"detached\"\n }, {\n value: \"system\"\n }]\n }]\n}, {\n type: \"category\",\n id: \"customcss\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"customcss\",\n value: true\n }, {\n type: \"switch\",\n id: \"liveUpdate\",\n value: false\n }, {\n type: \"dropdown\",\n id: \"openAction\",\n value: \"settings\",\n options: [{\n value: \"settings\"\n }, {\n value: \"detached\"\n }, {\n value: \"system\"\n }]\n }]\n}, {\n type: \"category\",\n id: \"developer\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"developerMode\",\n value: false\n }, {\n type: \"switch\",\n id: \"copySelector\",\n value: false,\n enableWith: \"developerMode\"\n }]\n}, {\n type: \"category\",\n id: \"window\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"transparency\",\n value: false\n }, {\n type: \"switch\",\n id: \"frame\",\n value: false,\n hidden: true\n }]\n}]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc2V0dGluZ3MvY29uZmlnLmpzP2ZmOGUiXSwibmFtZXMiOlsidHlwZSIsImlkIiwiY29sbGFwc2libGUiLCJzZXR0aW5ncyIsInZhbHVlIiwiZW5hYmxlV2l0aCIsInNob3duIiwib3B0aW9ucyIsImhpZGRlbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZSxnRUFDWDtBQUNJQSxNQUFJLEVBQUUsVUFEVjtBQUVJQyxJQUFFLEVBQUUsU0FGUjtBQUdJQyxhQUFXLEVBQUUsSUFIakI7QUFJSUMsVUFBUSxFQUFFLENBQ047QUFBQ0gsUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxRQUFyQjtBQUErQkcsU0FBSyxFQUFFO0FBQXRDLEdBRE0sRUFFTjtBQUFDSixRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLGVBQXJCO0FBQXNDRyxTQUFLLEVBQUU7QUFBN0MsR0FGTSxFQUdOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsaUJBQXJCO0FBQXdDRyxTQUFLLEVBQUU7QUFBL0MsR0FITSxFQUlOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsZ0JBQXJCO0FBQXVDRyxTQUFLLEVBQUU7QUFBOUMsR0FKTSxFQUtOO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsaUJBQXJCO0FBQXdDRyxTQUFLLEVBQUU7QUFBL0MsR0FMTSxFQU1OO0FBQUNKLFFBQUksRUFBRSxRQUFQO0FBQWlCQyxNQUFFLEVBQUUsWUFBckI7QUFBbUNHLFNBQUssRUFBRTtBQUExQyxHQU5NO0FBSmQsQ0FEVyxFQWNYO0FBQ0lKLE1BQUksRUFBRSxVQURWO0FBRUlDLElBQUUsRUFBRSxZQUZSO0FBR0lDLGFBQVcsRUFBRSxJQUhqQjtBQUlJQyxVQUFRLEVBQUUsQ0FDTjtBQUFDSCxRQUFJLEVBQUUsUUFBUDtBQUFpQkMsTUFBRSxFQUFFLFdBQXJCO0FBQWtDRyxTQUFL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QUssRUFBRTtBQUE1QyxHQURNLEVBRU47QUFBQ0osUUFBSSxFQUFFLFFBQVA7QUFBaUJDLE1BQUUsRUFBRSxPQUFyQjtBQUE4QkcsU0FBSyxFQUFFLEtBQXJDO0FBQTRDSSxVQUFNLEVBQUU7QUFBcEQsR0FGTTtBQUxkLENBM0RXLENBQWYiLCJmaWxlIjoiLi9zcmMvZGF0YS9zZXR0aW5ncy9jb25maWcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBbXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImdlbmVyYWxcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiZW1vdGVzXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcInB1YmxpY1NlcnZlcnNcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwidm9pY2VEaXNjb25uZWN0XCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJ0d2VudHlGb3VySG91clwiLCB2YWx1ZTogZmFsc2V9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiY2xhc3NOb3JtYWxpemVyXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcInNob3dUb2FzdHNcIiwgdmFsdWU6IHRydWV9XHJcbiAgICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgaWQ6IFwiYXBwZWFyYW5jZVwiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJ2b2ljZU1vZGVcIiwgdmFsdWU6IGZhbHNlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcIm1pbmltYWxNb2RlXCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJoaWRlQ2hhbm5lbHNcIiwgdmFsdWU6IGZhbHNlLCBlbmFibGVXaXRoOiBcIm1pbmltYWxNb2RlXCJ9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiZGFya01vZGVcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiY29sb3JlZFRleHRcIiwgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImFkZG9uc1wiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNob3duOiBmYWxzZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiYWRkb25FcnJvcnNcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwiYXV0b1Njcm9sbFwiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJhdXRvUmVsb2FkXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwiZHJvcGRvd25cIiwgaWQ6IFwiZWRpdEFjdGlvblwiLCB2YWx1ZTogXCJkZXRhY2hlZFwiLCBvcHRpb25zOiBbe3ZhbHVlOiBcImRldGFjaGVkXCJ9LCB7dmFsdWU6IFwic3lzdGVtXCJ9XX1cclxuICAgICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJjdXN0b21jc3NcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzaG93bjogZmFsc2UsXHJcbiAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImN1c3RvbWNzc1wiLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJsaXZlVXBkYXRlXCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcImRyb3Bkb3duXCIsIGlkOiBcIm9wZW5BY3Rpb25cIiwgdmFsdWU6IFwic2V0dGluZ3NcIiwgb3B0aW9uczogW3t2YWx1ZTogXCJzZXR0aW5nc1wifSwge3ZhbHVlOiBcImRldGFjaGVkXCJ9LCB7dmFsdWU6IFwic3lzdGVtXCJ9XX1cclxuICAgICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJkZXZlbG9wZXJcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzaG93bjogZmFsc2UsXHJcbiAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImRldmVsb3Blck1vZGVcIiwgdmFsdWU6IGZhbHNlfSxcclxuICAgICAgICAgICAge3R5cGU6IFwic3dpdGNoXCIsIGlkOiBcImNvcHlTZWxlY3RvclwiLCB2YWx1ZTogZmFsc2UsIGVuYWJsZVdpdGg6IFwiZGV2ZWxvcGVyTW9kZVwifVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcIndpbmRvd1wiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNob3duOiBmYWxzZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7dHlwZTogXCJzd2l0Y2hcIiwgaWQ6IFwidHJhbnNwYXJlbmN5XCIsIHZhbHVlOiBmYWxzZX0sXHJcbiAgICAgICAgICAgIHt0eXBlOiBcInN3aXRjaFwiLCBpZDogXCJmcmFtZVwiLCB2YWx1ZTogZmFsc2UsIGhpZGRlbjogdHJ1ZX1cclxuICAgICAgICBdXHJcbiAgICB9XHJcbl07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/data/settings/config.js\n"); /***/ }), @@ -323,7 +323,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n Panels: {\n plugins: \"Plugins\",\n themes: \"Themes\",\n customcss: \"Custom CSS\"\n },\n Collections: {\n settings: {\n name: \"Settings\",\n general: {\n name: \"General\",\n emotes: {\n name: \"Emote System\",\n note: \"Enables BD's emote system\"\n },\n publicServers: {\n name: \"Public Servers\",\n note: \"Display public servers button\"\n },\n voiceDisconnect: {\n name: \"Voice Disconnect\",\n note: \"Disconnect from voice server when closing Discord\"\n },\n twentyFourHour: {\n name: \"24-Hour Timestamps\",\n note: \"Hides channels when in minimal mode\"\n },\n classNormalizer: {\n name: \"Normalize Classes\",\n note: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\"\n },\n showToasts: {\n name: \"Show Toasts\",\n note: \"Shows a small notification for important information\"\n }\n },\n appearance: {\n name: \"Appearance\",\n voiceMode: {\n name: \"Voice Mode\",\n note: \"Hides everything that isn't voice chat\"\n },\n minimalMode: {\n name: \"Minimal Mode\",\n note: \"Hide elements and reduce the size of elements\"\n },\n hideChannels: {\n name: \"Hide Channels\",\n note: \"Hides channels when in minimal mode\"\n },\n darkMode: {\n name: \"Dark Mode\",\n note: \"Make certain elements dark by default\"\n },\n coloredText: {\n name: \"Colored Text\",\n note: \"Make text colour the same as role color\"\n }\n },\n addons: {\n name: \"Addon Manager\",\n addonErrors: {\n name: \"Show Addon Errors\",\n note: \"Shows a modal with plugin/theme errors\"\n },\n autoScroll: {\n name: \"Scroll To Settings\",\n note: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\"\n },\n autoReload: {\n name: \"Automatic Loading\",\n note: \"Automatically loads, reloads, and unloads plugins and themes\"\n }\n },\n customcss: {\n name: \"Custom CSS\",\n customcss: {\n name: \"Custom CSS\",\n note: \"Enables the Custom CSS tab\"\n },\n liveUpdate: {\n name: \"Live Update\",\n note: \"Updates the css as you type\"\n },\n startDetached: {\n name: \"Start Detached\",\n note: \"Clicking the Custom CSS tab opens the editor in a separate window\"\n },\n nativeOpen: {\n name: \"Open in Native Editor\",\n note: \"Clicking the Custom CSS tab opens your custom css in your native editor\"\n },\n openAction: {\n name: \"Editor Location\",\n note: \"Where Custom CSS should open by default\",\n options: {\n settings: \"Settings Menu\",\n detached: \"Detached Window\",\n system: \"System Editor\"\n }\n }\n },\n developer: {\n name: \"Developer Settings\",\n developerMode: {\n name: \"Developer Mode\",\n note: \"Allows activating debugger when pressing F8\"\n },\n copySelector: {\n name: \"Copy Selector\",\n note: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\"\n }\n },\n window: {\n name: \"Window Preferences\",\n transparency: {\n name: \"Enable Transparency\",\n note: \"Enables the main window to be see-through (requires restart)\"\n },\n frame: {\n name: \"Window Frame\",\n note: \"Adds the native os window frame to the main window\"\n }\n }\n },\n emotes: {\n name: \"Emotes\",\n general: {\n name: \"General\",\n download: {\n name: \"Download Emotes\",\n note: \"Download emotes whenever they are out of date\"\n },\n emoteMenu: {\n name: \"Emote Menu\",\n note: \"Show Twitch/Favourite emotes in emote menu\"\n },\n hideEmojiMenu: {\n name: \"Hide Emoji Menu\",\n note: \"Hides Discord's emoji menu when using emote menu\"\n },\n autoCaps: {\n name: \"Emote Autocapitalization\",\n note: \"Autocapitalize emote commands\"\n },\n showNames: {\n name: \"Show Names\",\n note: \"Show emote names on hover\"\n },\n modifiers: {\n name: \"Show Emote Modifiers\",\n note: \"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)\"\n },\n animateOnHover: {\n name: \"Animate On Hover\",\n note: \"Only animate the emote modifiers on hover\"\n }\n },\n categories: {\n name: \"Categories\",\n twitchglobal: {\n name: \"Twitch Globals\",\n note: \"Show Twitch global emotes\"\n },\n twitchsubscriber: {\n name: \"Twitch Subscribers\",\n note: \"Show Twitch subscriber emotes\"\n },\n frankerfacez: {\n name: \"FrankerFaceZ\",\n note: \"Show emotes from FFZ\"\n },\n bttv: {\n name: \"BetterTTV\",\n note: \"Show emotes from BTTV\"\n }\n }\n }\n },\n Addons: {\n title: \"{{name}} v{{version}} by {{author}}\",\n openFolder: \"Open {{type}} Folder\",\n reload: \"Reload\",\n addonSettings: \"Settings\",\n website: \"Website\",\n source: \"Source\",\n server: \"Support Server\",\n donate: \"Donate\",\n name: \"Name\",\n author: \"Author\",\n version: \"Version\",\n added: \"Date Added\",\n modified: \"Date Modified\",\n search: \"Search {{type}}\"\n },\n Emotes: {\n loading: \"Loading emotes in the background do not reload.\",\n loaded: \"All emotes successfully loaded.\",\n clearEmotes: \"Clear Emote Data\",\n favoriteAction: \"Favorite!\"\n },\n CustomCSS: {\n confirmationText: \"You have unsaved changes to your Custom CSS. Closing this window will lose all those changes.\",\n update: \"Update\",\n save: \"Save\",\n openNative: \"Open in System Editor\",\n openDetached: \"Detach Window\",\n settings: \"Editor Settings\",\n editorTitle: \"Custom CSS Editor\"\n },\n PublicServers: {\n button: \"public\",\n join: \"Join\",\n joining: \"Joining\",\n joined: \"Joined\",\n loading: \"Loading\",\n loadMore: \"Load More\",\n notConnected: \"Not connected to DiscordServers.com!\",\n search: \"Search\",\n connect: \"Connect\",\n reconnect: \"Reconnect\",\n categories: \"Categories\",\n connection: \"Connected as: {{username}}#{{discriminator}}\",\n results: \"Showing {{start}}-{{end}} of {{total}} results in {{category}}\",\n query: \"for {{query}}\"\n },\n Modals: {\n confirmClose: \"Are You Sure?\",\n okay: \"Okay\",\n cancel: \"Cancel\",\n name: \"Name\",\n message: \"Message\",\n error: \"Error\",\n addonErrors: \"Addon Errors\"\n },\n Sorting: {\n sortBy: \"Sort By\",\n order: \"Order\",\n ascending: \"Ascending\",\n descending: \"Descending\"\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc3RyaW5ncy5qcz9iYzcxIl0sIm5hbWVzIjpbIlBhbmVscyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJjdXN0b21jc3MiLCJDb2xsZWN0aW9ucyIsInNldHRpbmdzIiwibmFtZSIsImdlbmVyYWwiLCJlbW90ZXMiLCJub3RlIiwicHVibGljU2VydmVycyIsInZvaWNlRGlzY29ubmVjdCIsInR3ZW50eUZvdXJIb3VyIiwiY2xhc3NOb3JtYWxpemVyIiwic2hvd1RvYXN0cyIsImFwcGVhcmFuY2UiLCJ2b2ljZU1vZGUiLCJtaW5pbWFsTW9kZSIsImhpZGVDaGFubmVscyIsImRhcmtNb2RlIiwiY29sb3JlZFRleHQiLCJhZGRvbnMiLCJhZGRvbkVycm9ycyIsImF1dG9TY3JvbGwiLCJhdXRvUmVsb2FkIiwibGl2ZVVwZGF0ZSIsInN0YXJ0RGV0YWNoZWQiLCJuYXRpdmVPcGVuIiwib3BlbkFjdGlvbiIsIm9wdGlvbnMiLCJkZXRhY2hlZCIsInN5c3RlbSIsImRldmVsb3BlciIsImRldmVsb3Blck1vZGUiLCJjb3B5U2VsZWN0b3IiLCJ3aW5kb3ciLCJ0cmFuc3BhcmVuY3kiLCJmcmFtZSIsImRvd25sb2FkIiwiZW1vdGVNZW51IiwiaGlkZUVtb2ppTWVudSIsImF1dG9DYXBzIiwic2hvd05hbWVzIiwibW9kaWZpZXJzIiwiYW5pbWF0ZU9uSG92ZXIiLCJjYXRlZ29yaWVzIiwidHdpdGNoZ2xvYmFsIiwidHdpdGNoc3Vic2NyaWJlciIsImZyYW5rZXJmYWNleiIsImJ0dHYiLCJBZGRvbnMiLCJ0aXRsZSIsIm9wZW5Gb2xkZXIiLCJyZWxvYWQiLCJhZGRvblNldHRpbmdzIiwid2Vic2l0ZSIsInNvdXJjZSIsInNlcnZlciIsImRvbmF0ZSIsImF1dGhvciIsInZlcnNpb24iLCJhZGRlZCIsIm1vZGlmaWVkIiwic2VhcmNoIiwiRW1vdGVzIiwibG9hZGluZyIsImxvYWRlZCIsImNsZWFyRW1vdGVzIiwiZmF2b3JpdGVBY3Rpb24iLCJDdXN0b21DU1MiLCJjb25maXJtYXRpb25UZXh0IiwidXBkYXRlIiwic2F2ZSIsIm9wZW5OYXRpdmUiLCJvcGVuRGV0YWNoZWQiLCJlZGl0b3JUaXRsZSIsIlB1YmxpY1NlcnZlcnMiLCJidXR0b24iLCJqb2luIiwiam9pbmluZyIsImpvaW5lZCIsImxvYWRNb3JlIiwibm90Q29ubmVjdGVkIiwiY29ubmVjdCIsInJlY29ubmVjdCIsImNvbm5lY3Rpb24iLCJyZXN1bHRzIiwicXVlcnkiLCJNb2RhbHMiLCJjb25maXJtQ2xvc2UiLCJva2F5IiwiY2FuY2VsIiwibWVzc2FnZSIsImVycm9yIiwiU29ydGluZyIsInNvcnRCeSIsIm9yZGVyIiwiYXNjZW5kaW5nIiwiZGVzY2VuZGluZyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZTtBQUNYQSxRQUFNLEVBQUU7QUFDSkMsV0FBTyxFQUFFLFNBREw7QUFFSkMsVUFBTSxFQUFFLFFBRko7QUFHSkMsYUFBUyxFQUFFO0FBSFAsR0FERztBQU1YQyxhQUFXLEVBQUU7QUFDVEMsWUFBUSxFQUFFO0FBQ05DLFVBQUksRUFBRSxVQURBO0FBRU5DLGFBQU8sRUFBRTtBQUNMRCxZQUFJLEVBQUUsU0FERDtBQUVMRSxjQUFNLEVBQUU7QUFDSkYsY0FBSSxFQUFFLGNBREY7QUFFSkcsY0FBSSxFQUFFO0FBRkYsU0FGSDtBQU1MQyxxQkFBYSxFQUFFO0FBQ1hKLGNBQUksRUFBRSxnQkFESztBQUVYRyxjQUFJLEVBQUU7QUFGSyxTQU5WO0FBVUxFLHVCQUFlLEVBQUU7QUFDYkwsY0FBSSxFQUFFLGtCQURPO0FBRWJHLGNBQUksRUFBRTtBQUZPLFNBVlo7QUFjTEcsc0JBQWMsRUFBRTtBQUNaTixjQUFJLEVBQUUsb0JBRE07QUFFWkcsY0FBSSxFQUFFO0FBRk0sU0FkWDtBQWtCTEksdUJBQWUsRUFBRTtBQUNiUCxjQUFJLEVBQUUsbUJBRE87QUFFYkcsY0FBSSxFQUFFO0FBRk8sU0FsQlo7QUFzQkxLLGtCQUFVLEVBQUU7QUFDUlIsY0FBSSxFQUFFLGFBREU7QUFFUkcs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anMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XHJcbiAgICBQYW5lbHM6IHtcclxuICAgICAgICBwbHVnaW5zOiBcIlBsdWdpbnNcIixcclxuICAgICAgICB0aGVtZXM6IFwiVGhlbWVzXCIsXHJcbiAgICAgICAgY3VzdG9tY3NzOiBcIkN1c3RvbSBDU1NcIlxyXG4gICAgfSxcclxuICAgIENvbGxlY3Rpb25zOiB7XHJcbiAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgICAgbmFtZTogXCJTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICBnZW5lcmFsOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkdlbmVyYWxcIixcclxuICAgICAgICAgICAgICAgIGVtb3Rlczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW1vdGUgU3lzdGVtXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJFbmFibGVzIEJEJ3MgZW1vdGUgc3lzdGVtXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwdWJsaWNTZXJ2ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJQdWJsaWMgU2VydmVyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRGlzcGxheSBwdWJsaWMgc2VydmVycyBidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHZvaWNlRGlzY29ubmVjdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVm9pY2UgRGlzY29ubmVjdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHdlbnR5Rm91ckhvdXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIjI0LUhvdXIgVGltZXN0YW1wc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSGlkZXMgY2hhbm5lbHMgd2hlbiBpbiBtaW5pbWFsIG1vZGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNsYXNzTm9ybWFsaXplcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTm9ybWFsaXplIENsYXNzZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgc3RhYmxlIGNsYXNzZXMgdG8gZWxlbWVudHMgdG8gaGVscCB0aGVtZXMuIChlLmcuIGFkZHMgLmRhLWNoYW5uZWxzIHRvIC5jaGFubmVscy1JZTJsNkEpXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaG93VG9hc3RzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTaG93IFRvYXN0c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvd3MgYSBzbWFsbCBub3RpZmljYXRpb24gZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvblwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQXBwZWFyYW5jZVwiLFxyXG4gICAgICAgICAgICAgICAgdm9pY2VNb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJWb2ljZSBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJIaWRlcyBldmVyeXRoaW5nIHRoYXQgaXNuJ3Qgdm9pY2UgY2hhdFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbWluaW1hbE1vZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk1pbmltYWwgTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSGlkZSBlbGVtZW50cyBhbmQgcmVkdWNlIHRoZSBzaXplIG9mIGVsZW1lbnRzXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBoaWRlQ2hhbm5lbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkhpZGUgQ2hhbm5lbHNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIGNoYW5uZWxzIHdoZW4gaW4gbWluaW1hbCBtb2RlXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBkYXJrTW9kZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGFyayBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJNYWtlIGNlcnRhaW4gZWxlbWVudHMgZGFyayBieSBkZWZhdWx0XCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb2xvcmVkVGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29sb3JlZCBUZXh0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJNYWtlIHRleHQgY29sb3VyIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhZGRvbnM6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQWRkb24gTWFuYWdlclwiLFxyXG4gICAgICAgICAgICAgICAgYWRkb25FcnJvcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNob3cgQWRkb24gRXJyb3JzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93cyBhIG1vZGFsIHdpdGggcGx1Z2luL3RoZW1lIGVycm9yc1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYXV0b1Njcm9sbDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2Nyb2xsIFRvIFNldHRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBdXRvLXNjcm9sbHMgdG8gYSBwbHVnaW4ncyBzZXR0aW5ncyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCAob25seSBpZiBvdXQgb2YgdmlldylcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGF1dG9SZWxvYWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkF1dG9tYXRpYyBMb2FkaW5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBdXRvbWF0aWNhbGx5IGxvYWRzLCByZWxvYWRzLCBhbmQgdW5sb2FkcyBwbHVnaW5zIGFuZCB0aGVtZXNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3VzdG9tY3NzOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkN1c3RvbSBDU1NcIixcclxuICAgICAgICAgICAgICAgIGN1c3RvbWNzczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ3VzdG9tIENTU1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRW5hYmxlcyB0aGUgQ3VzdG9tIENTUyB0YWJcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGxpdmVVcGRhdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkxpdmUgVXBkYXRlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJVcGRhdGVzIHRoZSBjc3MgYXMgeW91IHR5cGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGV0YWNoZWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlN0YXJ0IERldGFjaGVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJDbGlja2luZyB0aGUgQ3VzdG9tIENTUyB0YWIgb3BlbnMgdGhlIGVkaXRvciBpbiBhIHNlcGFyYXRlIHdpbmRvd1wiLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG5hdGl2ZU9wZW46IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk9wZW4gaW4gTmF0aXZlIEVkaXRvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQ2xpY2tpbmcgdGhlIEN1c3RvbSBDU1MgdGFiIG9wZW5zIHlvdXIgY3VzdG9tIGNzcyBpbiB5b3VyIG5hdGl2ZSBlZGl0b3JcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9wZW5BY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVkaXRvciBMb2NhdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiV2hlcmUgQ3VzdG9tIENTUyBzaG91bGQgb3BlbiBieSBkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nczogXCJTZXR0aW5ncyBNZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaGVkOiBcIkRldGFjaGVkIFdpbmRvd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06IFwiU3lzdGVtIEVkaXRvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZXZlbG9wZXI6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiRGV2ZWxvcGVyIFNldHRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICBkZXZlbG9wZXJNb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJEZXZlbG9wZXIgTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQWxsb3dzIGFjdGl2YXRpbmcgZGVidWdnZXIgd2hlbiBwcmVzc2luZyBGOFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29weVNlbGVjdG9yOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb3B5IFNlbGVjdG9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBZGRzIGEgXFxcIkNvcHkgU2VsZWN0b3JcXFwiIG9wdGlvbiB0byBjb250ZXh0IG1lbnVzIHdoZW4gZGV2ZWxvcGVyIG1vZGUgaXMgYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgd2luZG93OiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIldpbmRvdyBQcmVmZXJlbmNlc1wiLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNwYXJlbmN5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbmFibGUgVHJhbnNwYXJlbmN5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJFbmFibGVzIHRoZSBtYWluIHdpbmRvdyB0byBiZSBzZWUtdGhyb3VnaCAocmVxdWlyZXMgcmVzdGFydClcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZyYW1lOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJXaW5kb3cgRnJhbWVcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgdGhlIG5hdGl2ZSBvcyB3aW5kb3cgZnJhbWUgdG8gdGhlIG1haW4gd2luZG93XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW1vdGVzOiB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiRW1vdGVzXCIsXHJcbiAgICAgICAgICAgIGdlbmVyYWw6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiR2VuZXJhbFwiLFxyXG4gICAgICAgICAgICAgICAgZG93bmxvYWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRvd25sb2FkIEVtb3Rlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRG93bmxvYWQgZW1vdGVzIHdoZW5ldmVyIHRoZXkgYXJlIG91dCBvZiBkYXRlXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlbW90ZU1lbnU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVtb3RlIE1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgVHdpdGNoL0Zhdm91cml0ZSBlbW90ZXMgaW4gZW1vdGUgbWVudVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaGlkZUVtb2ppTWVudToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiSGlkZSBFbW9qaSBNZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJIaWRlcyBEaXNjb3JkJ3MgZW1vamkgbWVudSB3aGVuIHVzaW5nIGVtb3RlIG1lbnVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGF1dG9DYXBzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbW90ZSBBdXRvY2FwaXRhbGl6YXRpb25cIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkF1dG9jYXBpdGFsaXplIGVtb3RlIGNvbW1hbmRzXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaG93TmFtZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNob3cgTmFtZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgZW1vdGUgbmFtZXMgb24gaG92ZXJcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1vZGlmaWVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2hvdyBFbW90ZSBNb2RpZmllcnNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkVuYWJsZSBlbW90ZSBtb2RzIChmbGlwLCBzcGluLCBwdWxzZSwgc3BpbjIsIHNwaW4zLCAxc3BpbiwgMnNwaW4sIDNzcGluLCB0ciwgYmwsIGJyLCBzaGFrZSwgc2hha2UyLCBzaGFrZTMsIGZsYXApXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhbmltYXRlT25Ib3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQW5pbWF0ZSBPbiBIb3ZlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiT25seSBhbmltYXRlIHRoZSBlbW90ZSBtb2RpZmllcnMgb24gaG92ZXJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkNhdGVnb3JpZXNcIixcclxuICAgICAgICAgICAgICAgIHR3aXRjaGdsb2JhbDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVHdpdGNoIEdsb2JhbHNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgVHdpdGNoIGdsb2JhbCBlbW90ZXNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHR3aXRjaHN1YnNjcmliZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlR3aXRjaCBTdWJzY3JpYmVyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvdyBUd2l0Y2ggc3Vic2NyaWJlciBlbW90ZXNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZyYW5rZXJmYWNlejoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRnJhbmtlckZhY2VaXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93IGVtb3RlcyBmcm9tIEZGWlwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYnR0djoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQmV0dGVyVFRWXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93IGVtb3RlcyBmcm9tIEJUVFZcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIEFkZG9uczoge1xyXG4gICAgICAgIHRpdGxlOiBcInt7bmFtZX19IHZ7e3ZlcnNpb259fSBieSB7e2F1dGhvcn19XCIsXHJcbiAgICAgICAgb3BlbkZvbGRlcjogXCJPcGVuIHt7dHlwZX19IEZvbGRlclwiLFxyXG4gICAgICAgIHJlbG9hZDogXCJSZWxvYWRcIixcclxuICAgICAgICBhZGRvblNldHRpbmdzOiBcIlNldHRpbmdzXCIsXHJcbiAgICAgICAgd2Vic2l0ZTogXCJXZWJzaXRlXCIsXHJcbiAgICAgICAgc291cmNlOiBcIlNvdXJjZVwiLFxyXG4gICAgICAgIHNlcnZlcjogXCJTdXBwb3J0IFNlcnZlclwiLFxyXG4gICAgICAgIGRvbmF0ZTogXCJEb25hdGVcIixcclxuICAgICAgICBuYW1lOiBcIk5hbWVcIixcclxuICAgICAgICBhdXRob3I6IFwiQXV0aG9yXCIsXHJcbiAgICAgICAgdmVyc2lvbjogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgYWRkZWQ6IFwiRGF0ZSBBZGRlZFwiLFxyXG4gICAgICAgIG1vZGlmaWVkOiBcIkRhdGUgTW9kaWZpZWRcIixcclxuICAgICAgICBzZWFyY2g6IFwiU2VhcmNoIHt7dHlwZX19XCJcclxuICAgIH0sXHJcbiAgICBFbW90ZXM6IHtcclxuICAgICAgICBsb2FkaW5nOiBcIkxvYWRpbmcgZW1vdGVzIGluIHRoZSBiYWNrZ3JvdW5kIGRvIG5vdCByZWxvYWQuXCIsXHJcbiAgICAgICAgbG9hZGVkOiBcIkFsbCBlbW90ZXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cIixcclxuICAgICAgICBjbGVhckVtb3RlczogXCJDbGVhciBFbW90ZSBEYXRhXCIsXHJcbiAgICAgICAgZmF2b3JpdGVBY3Rpb246IFwiRmF2b3JpdGUhXCJcclxuICAgIH0sXHJcbiAgICBDdXN0b21DU1M6IHtcclxuICAgICAgICBjb25maXJtYXRpb25UZXh0OiBcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyB0byB5b3VyIEN1c3RvbSBDU1MuIENsb3NpbmcgdGhpcyB3aW5kb3cgd2lsbCBsb3NlIGFsbCB0aG9zZSBjaGFuZ2VzLlwiLFxyXG4gICAgICAgIHVwZGF0ZTogXCJVcGRhdGVcIixcclxuICAgICAgICBzYXZlOiBcIlNhdmVcIixcclxuICAgICAgICBvcGVuTmF0aXZlOiBcIk9wZW4gaW4gU3lzdGVtIEVkaXRvclwiLFxyXG4gICAgICAgIG9wZW5EZXRhY2hlZDogXCJEZXRhY2ggV2luZG93XCIsXHJcbiAgICAgICAgc2V0dGluZ3M6IFwiRWRpdG9yIFNldHRpbmdzXCIsXHJcbiAgICAgICAgZWRpdG9yVGl0bGU6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIlxyXG4gICAgfSxcclxuICAgIFB1YmxpY1NlcnZlcnM6IHtcclxuICAgICAgICBidXR0b246IFwicHVibGljXCIsXHJcbiAgICAgICAgam9pbjogXCJKb2luXCIsXHJcbiAgICAgICAgam9pbmluZzogXCJKb2luaW5nXCIsXHJcbiAgICAgICAgam9pbmVkOiBcIkpvaW5lZFwiLFxyXG4gICAgICAgIGxvYWRpbmc6IFwiTG9hZGluZ1wiLFxyXG4gICAgICAgIGxvYWRNb3JlOiBcIkxvYWQgTW9yZVwiLFxyXG4gICAgICAgIG5vdENvbm5lY3RlZDogXCJOb3QgY29ubmVjdGVkIHRvIERpc2NvcmRTZXJ2ZXJzLmNvbSFcIixcclxuICAgICAgICBzZWFyY2g6IFwiU2VhcmNoXCIsXHJcbiAgICAgICAgY29ubmVjdDogXCJDb25uZWN0XCIsXHJcbiAgICAgICAgcmVjb25uZWN0OiBcIlJlY29ubmVjdFwiLFxyXG4gICAgICAgIGNhdGVnb3JpZXM6IFwiQ2F0ZWdvcmllc1wiLFxyXG4gICAgICAgIGNvbm5lY3Rpb246IFwiQ29ubmVjdGVkIGFzOiB7e3VzZXJuYW1lfX0je3tkaXNjcmltaW5hdG9yfX1cIixcclxuICAgICAgICByZXN1bHRzOiBcIlNob3dpbmcge3tzdGFydH19LXt7ZW5kfX0gb2Yge3t0b3RhbH19IHJlc3VsdHMgaW4ge3tjYXRlZ29yeX19XCIsXHJcbiAgICAgICAgcXVlcnk6IFwiZm9yIHt7cXVlcnl9fVwiXHJcbiAgICB9LFxyXG4gICAgTW9kYWxzOiB7XHJcbiAgICAgICAgY29uZmlybUNsb3NlOiBcIkFyZSBZb3UgU3VyZT9cIixcclxuICAgICAgICBva2F5OiBcIk9rYXlcIixcclxuICAgICAgICBjYW5jZWw6IFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgbmFtZTogXCJOYW1lXCIsXHJcbiAgICAgICAgbWVzc2FnZTogXCJNZXNzYWdlXCIsXHJcbiAgICAgICAgZXJyb3I6IFwiRXJyb3JcIixcclxuICAgICAgICBhZGRvbkVycm9yczogXCJBZGRvbiBFcnJvcnNcIlxyXG4gICAgfSxcclxuICAgIFNvcnRpbmc6IHtcclxuICAgICAgICBzb3J0Qnk6IFwiU29ydCBCeVwiLFxyXG4gICAgICAgIG9yZGVyOiBcIk9yZGVyXCIsXHJcbiAgICAgICAgYXNjZW5kaW5nOiBcIkFzY2VuZGluZ1wiLFxyXG4gICAgICAgIGRlc2NlbmRpbmc6IFwiRGVzY2VuZGluZ1wiXHJcbiAgICB9XHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/data/strings.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n Panels: {\n plugins: \"Plugins\",\n themes: \"Themes\",\n customcss: \"Custom CSS\"\n },\n Collections: {\n settings: {\n name: \"Settings\",\n general: {\n name: \"General\",\n emotes: {\n name: \"Emote System\",\n note: \"Enables BD's emote system\"\n },\n publicServers: {\n name: \"Public Servers\",\n note: \"Display public servers button\"\n },\n voiceDisconnect: {\n name: \"Voice Disconnect\",\n note: \"Disconnect from voice server when closing Discord\"\n },\n twentyFourHour: {\n name: \"24-Hour Timestamps\",\n note: \"Hides channels when in minimal mode\"\n },\n classNormalizer: {\n name: \"Normalize Classes\",\n note: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\"\n },\n showToasts: {\n name: \"Show Toasts\",\n note: \"Shows a small notification for important information\"\n }\n },\n appearance: {\n name: \"Appearance\",\n voiceMode: {\n name: \"Voice Mode\",\n note: \"Hides everything that isn't voice chat\"\n },\n minimalMode: {\n name: \"Minimal Mode\",\n note: \"Hide elements and reduce the size of elements\"\n },\n hideChannels: {\n name: \"Hide Channels\",\n note: \"Hides channels when in minimal mode\"\n },\n darkMode: {\n name: \"Dark Mode\",\n note: \"Make certain elements dark by default\"\n },\n coloredText: {\n name: \"Colored Text\",\n note: \"Make text colour the same as role color\"\n }\n },\n addons: {\n name: \"Addon Manager\",\n addonErrors: {\n name: \"Show Addon Errors\",\n note: \"Shows a modal with plugin/theme errors\"\n },\n autoScroll: {\n name: \"Scroll To Settings\",\n note: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\"\n },\n autoReload: {\n name: \"Automatic Loading\",\n note: \"Automatically loads, reloads, and unloads plugins and themes\"\n },\n editAction: {\n name: \"Edit Action\",\n note: \"Where plugins & themes appear when editing\",\n options: {\n detached: \"Detached Window\",\n system: \"System Editor\"\n }\n }\n },\n customcss: {\n name: \"Custom CSS\",\n customcss: {\n name: \"Custom CSS\",\n note: \"Enables the Custom CSS tab\"\n },\n liveUpdate: {\n name: \"Live Update\",\n note: \"Updates the css as you type\"\n },\n startDetached: {\n name: \"Start Detached\",\n note: \"Clicking the Custom CSS tab opens the editor in a separate window\"\n },\n nativeOpen: {\n name: \"Open in Native Editor\",\n note: \"Clicking the Custom CSS tab opens your custom css in your native editor\"\n },\n openAction: {\n name: \"Editor Location\",\n note: \"Where Custom CSS should open by default\",\n options: {\n settings: \"Settings Menu\",\n detached: \"Detached Window\",\n system: \"System Editor\"\n }\n }\n },\n developer: {\n name: \"Developer Settings\",\n developerMode: {\n name: \"Developer Mode\",\n note: \"Allows activating debugger when pressing F8\"\n },\n copySelector: {\n name: \"Copy Selector\",\n note: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\"\n }\n },\n window: {\n name: \"Window Preferences\",\n transparency: {\n name: \"Enable Transparency\",\n note: \"Enables the main window to be see-through (requires restart)\"\n },\n frame: {\n name: \"Window Frame\",\n note: \"Adds the native os window frame to the main window\"\n }\n }\n },\n emotes: {\n name: \"Emotes\",\n general: {\n name: \"General\",\n download: {\n name: \"Download Emotes\",\n note: \"Download emotes whenever they are out of date\"\n },\n emoteMenu: {\n name: \"Emote Menu\",\n note: \"Show Twitch/Favourite emotes in emote menu\"\n },\n hideEmojiMenu: {\n name: \"Hide Emoji Menu\",\n note: \"Hides Discord's emoji menu when using emote menu\"\n },\n autoCaps: {\n name: \"Emote Autocapitalization\",\n note: \"Autocapitalize emote commands\"\n },\n showNames: {\n name: \"Show Names\",\n note: \"Show emote names on hover\"\n },\n modifiers: {\n name: \"Show Emote Modifiers\",\n note: \"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)\"\n },\n animateOnHover: {\n name: \"Animate On Hover\",\n note: \"Only animate the emote modifiers on hover\"\n }\n },\n categories: {\n name: \"Categories\",\n twitchglobal: {\n name: \"Twitch Globals\",\n note: \"Show Twitch global emotes\"\n },\n twitchsubscriber: {\n name: \"Twitch Subscribers\",\n note: \"Show Twitch subscriber emotes\"\n },\n frankerfacez: {\n name: \"FrankerFaceZ\",\n note: \"Show emotes from FFZ\"\n },\n bttv: {\n name: \"BetterTTV\",\n note: \"Show emotes from BTTV\"\n }\n }\n }\n },\n Addons: {\n title: \"{{name}} v{{version}} by {{author}}\",\n openFolder: \"Open {{type}} Folder\",\n reload: \"Reload\",\n addonSettings: \"Settings\",\n website: \"Website\",\n source: \"Source\",\n server: \"Support Server\",\n donate: \"Donate\",\n name: \"Name\",\n author: \"Author\",\n version: \"Version\",\n added: \"Date Added\",\n modified: \"Date Modified\",\n search: \"Search {{type}}\",\n editAddon: \"Edit\",\n deleteAddon: \"Delete\",\n confirmDelete: \"Are you sure you want to delete {{name}}?\",\n confirmationText: \"You have unsaved changes to {{name}}. Closing this window will lose all those changes.\"\n },\n Emotes: {\n loading: \"Loading emotes in the background do not reload.\",\n loaded: \"All emotes successfully loaded.\",\n clearEmotes: \"Clear Emote Data\",\n favoriteAction: \"Favorite!\"\n },\n CustomCSS: {\n confirmationText: \"You have unsaved changes to your Custom CSS. Closing this window will lose all those changes.\",\n update: \"Update\",\n save: \"Save\",\n openNative: \"Open in System Editor\",\n openDetached: \"Detach Window\",\n settings: \"Editor Settings\",\n editorTitle: \"Custom CSS Editor\"\n },\n PublicServers: {\n button: \"public\",\n join: \"Join\",\n joining: \"Joining\",\n joined: \"Joined\",\n loading: \"Loading\",\n loadMore: \"Load More\",\n notConnected: \"Not connected to DiscordServers.com!\",\n search: \"Search\",\n connect: \"Connect\",\n reconnect: \"Reconnect\",\n categories: \"Categories\",\n connection: \"Connected as: {{username}}#{{discriminator}}\",\n results: \"Showing {{start}}-{{end}} of {{total}} results in {{category}}\",\n query: \"for {{query}}\"\n },\n Modals: {\n confirmAction: \"Are You Sure?\",\n okay: \"Okay\",\n cancel: \"Cancel\",\n close: \"Close\",\n name: \"Name\",\n message: \"Message\",\n error: \"Error\",\n addonErrors: \"Addon Errors\"\n },\n Sorting: {\n sortBy: \"Sort By\",\n order: \"Order\",\n ascending: \"Ascending\",\n descending: \"Descending\"\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc3RyaW5ncy5qcz9iYzcxIl0sIm5hbWVzIjpbIlBhbmVscyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJjdXN0b21jc3MiLCJDb2xsZWN0aW9ucyIsInNldHRpbmdzIiwibmFtZSIsImdlbmVyYWwiLCJlbW90ZXMiLCJub3RlIiwicHVibGljU2VydmVycyIsInZvaWNlRGlzY29ubmVjdCIsInR3ZW50eUZvdXJIb3VyIiwiY2xhc3NOb3JtYWxpemVyIiwic2hvd1RvYXN0cyIsImFwcGVhcmFuY2UiLCJ2b2ljZU1vZGUiLCJtaW5pbWFsTW9kZSIsImhpZGVDaGFubmVscyIsImRhcmtNb2RlIiwiY29sb3JlZFRleHQiLCJhZGRvbnMiLCJhZGRvbkVycm9ycyIsImF1dG9TY3JvbGwiLCJhdXRvUmVsb2FkIiwiZWRpdEFjdGlvbiIsIm9wdGlvbnMiLCJkZXRhY2hlZCIsInN5c3RlbSIsImxpdmVVcGRhdGUiLCJzdGFydERldGFjaGVkIiwibmF0aXZlT3BlbiIsIm9wZW5BY3Rpb24iLCJkZXZlbG9wZXIiLCJkZXZlbG9wZXJNb2RlIiwiY29weVNlbGVjdG9yIiwid2luZG93IiwidHJhbnNwYXJlbmN5IiwiZnJhbWUiLCJkb3dubG9hZCIsImVtb3RlTWVudSIsImhpZGVFbW9qaU1lbnUiLCJhdXRvQ2FwcyIsInNob3dOYW1lcyIsIm1vZGlmaWVycyIsImFuaW1hdGVPbkhvdmVyIiwiY2F0ZWdvcmllcyIsInR3aXRjaGdsb2JhbCIsInR3aXRjaHN1YnNjcmliZXIiLCJmcmFua2VyZmFjZXoiLCJidHR2IiwiQWRkb25zIiwidGl0bGUiLCJvcGVuRm9sZGVyIiwicmVsb2FkIiwiYWRkb25TZXR0aW5ncyIsIndlYnNpdGUiLCJzb3VyY2UiLCJzZXJ2ZXIiLCJkb25hdGUiLCJhdXRob3IiLCJ2ZXJzaW9uIiwiYWRkZWQiLCJtb2RpZmllZCIsInNlYXJjaCIsImVkaXRBZGRvbiIsImRlbGV0ZUFkZG9uIiwiY29uZmlybURlbGV0ZSIsImNvbmZpcm1hdGlvblRleHQiLCJFbW90ZXMiLCJsb2FkaW5nIiwibG9hZGVkIiwiY2xlYXJFbW90ZXMiLCJmYXZvcml0ZUFjdGlvbiIsIkN1c3RvbUNTUyIsInVwZGF0ZSIsInNhdmUiLCJvcGVuTmF0aXZlIiwib3BlbkRldGFjaGVkIiwiZWRpdG9yVGl0bGUiLCJQdWJsaWNTZXJ2ZXJzIiwiYnV0dG9uIiwiam9pbiIsImpvaW5pbmciLCJqb2luZWQiLCJsb2FkTW9yZSIsIm5vdENvbm5lY3RlZCIsImNvbm5lY3QiLCJyZWNvbm5lY3QiLCJjb25uZWN0aW9uIiwicmVzdWx0cyIsInF1ZXJ5IiwiTW9kYWxzIiwiY29uZmlybUFjdGlvbiIsIm9rYXkiLCJjYW5jZWwiLCJjbG9zZSIsIm1lc3NhZ2UiLCJlcnJvciIsIlNvcnRpbmciLCJzb3J0QnkiLCJvcmRlciIsImFzY2VuZGluZyIsImRlc2NlbmRpbmciXSwibWFwcGluZ3MiOiJBQUFBO0FBQWU7QUFDWEEsUUFBTSxFQUFFO0FBQ0pDLFdBQU8sRUFBRSxTQURMO0FBRUpDLFVBQU0sRUFBRSxRQUZKO0FBR0pDLGFBQVMsRUFBRTtBQUhQLEdBREc7QUFNWEMsYUFBVyxFQUFFO0FBQ1RDLFlBQVEsRUFBRTtBQUNOQyxVQUFJLEVBQUUsVUFEQTtBQUVOQyxhQUFPLEVBQUU7QUFDTEQsWUFBSSxFQUFFLFNBREQ7QUFFTEUsY0FBTSxFQUFFO0FBQ0pGLGNBQUksRUFBRSxjQURGO0FBRUpHLGNBQUksRUFBRTtBQUZGLFNBRkg7QUFNTEMscUJBQWEsRUFBRTtBQUNYSixjQUFJLEVBQUUsZ0JBREs7QUFFWEcsY0FBSSxFQUFFO0FBRkssU0FOVjtBQVVMRSx1QkFBZSxFQUFFO0FBQ2JMLGNBQUksRUFBRSxrQkFETztBQUViRyxjQUFJLEVBQUU7QUFGTyxTQVZaO0FBY0xHLHNCQUFjLEVBQUU7QUFDWk4sY0FBSSxFQUFFLG9CQURNO0FBRVpHLGNBQUksRUFBRTtBQUZNLFNBZFg7QUFrQkxJLHVCQUFlLEVBQUU7QUFDYlAsY0FBSSxFQUFFLG1CQURPO0FBRWJHLGNB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QyxpQkFBYSxFQUFFLGVBRFg7QUFFSkMsUUFBSSxFQUFFLE1BRkY7QUFHSkMsVUFBTSxFQUFFLFFBSEo7QUFJSkMsU0FBSyxFQUFFLE9BSkg7QUFLSjFGLFFBQUksRUFBRSxNQUxGO0FBTUoyRixXQUFPLEVBQUUsU0FOTDtBQU9KQyxTQUFLLEVBQUUsT0FQSDtBQVFKNUUsZUFBVyxFQUFFO0FBUlQsR0E5T0c7QUF3UFg2RSxTQUFPLEVBQUU7QUFDTEMsVUFBTSxFQUFFLFNBREg7QUFFTEMsU0FBSyxFQUFFLE9BRkY7QUFHTEMsYUFBUyxFQUFFLFdBSE47QUFJTEMsY0FBVSxFQUFFO0FBSlA7QUF4UEUsQ0FBZiIsImZpbGUiOiIuL3NyYy9kYXRhL3N0cmluZ3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XHJcbiAgICBQYW5lbHM6IHtcclxuICAgICAgICBwbHVnaW5zOiBcIlBsdWdpbnNcIixcclxuICAgICAgICB0aGVtZXM6IFwiVGhlbWVzXCIsXHJcbiAgICAgICAgY3VzdG9tY3NzOiBcIkN1c3RvbSBDU1NcIlxyXG4gICAgfSxcclxuICAgIENvbGxlY3Rpb25zOiB7XHJcbiAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgICAgbmFtZTogXCJTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICBnZW5lcmFsOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkdlbmVyYWxcIixcclxuICAgICAgICAgICAgICAgIGVtb3Rlczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW1vdGUgU3lzdGVtXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJFbmFibGVzIEJEJ3MgZW1vdGUgc3lzdGVtXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwdWJsaWNTZXJ2ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJQdWJsaWMgU2VydmVyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRGlzcGxheSBwdWJsaWMgc2VydmVycyBidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHZvaWNlRGlzY29ubmVjdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVm9pY2UgRGlzY29ubmVjdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHdlbnR5Rm91ckhvdXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIjI0LUhvdXIgVGltZXN0YW1wc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSGlkZXMgY2hhbm5lbHMgd2hlbiBpbiBtaW5pbWFsIG1vZGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNsYXNzTm9ybWFsaXplcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTm9ybWFsaXplIENsYXNzZXNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgc3RhYmxlIGNsYXNzZXMgdG8gZWxlbWVudHMgdG8gaGVscCB0aGVtZXMuIChlLmcuIGFkZHMgLmRhLWNoYW5uZWxzIHRvIC5jaGFubmVscy1JZTJsNkEpXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaG93VG9hc3RzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTaG93IFRvYXN0c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvd3MgYSBzbWFsbCBub3RpZmljYXRpb24gZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvblwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQXBwZWFyYW5jZVwiLFxyXG4gICAgICAgICAgICAgICAgdm9pY2VNb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJWb2ljZSBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJIaWRlcyBldmVyeXRoaW5nIHRoYXQgaXNuJ3Qgdm9pY2UgY2hhdFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbWluaW1hbE1vZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk1pbmltYWwgTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSGlkZSBlbGVtZW50cyBhbmQgcmVkdWNlIHRoZSBzaXplIG9mIGVsZW1lbnRzXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBoaWRlQ2hhbm5lbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkhpZGUgQ2hhbm5lbHNcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIGNoYW5uZWxzIHdoZW4gaW4gbWluaW1hbCBtb2RlXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBkYXJrTW9kZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGFyayBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJNYWtlIGNlcnRhaW4gZWxlbWVudHMgZGFyayBieSBkZWZhdWx0XCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb2xvcmVkVGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29sb3JlZCBUZXh0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJNYWtlIHRleHQgY29sb3VyIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhZGRvbnM6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQWRkb24gTWFuYWdlclwiLFxyXG4gICAgICAgICAgICAgICAgYWRkb25FcnJvcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNob3cgQWRkb24gRXJyb3JzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93cyBhIG1vZGFsIHdpdGggcGx1Z2luL3RoZW1lIGVycm9yc1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYXV0b1Njcm9sbDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2Nyb2xsIFRvIFNldHRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBdXRvLXNjcm9sbHMgdG8gYSBwbHVnaW4ncyBzZXR0aW5ncyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCAob25seSBpZiBvdXQgb2YgdmlldylcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGF1dG9SZWxvYWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkF1dG9tYXRpYyBMb2FkaW5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBdXRvbWF0aWNhbGx5IGxvYWRzLCByZWxvYWRzLCBhbmQgdW5sb2FkcyBwbHVnaW5zIGFuZCB0aGVtZXNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVkaXRBY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVkaXQgQWN0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJXaGVyZSBwbHVnaW5zICYgdGhlbWVzIGFwcGVhciB3aGVuIGVkaXRpbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaGVkOiBcIkRldGFjaGVkIFdpbmRvd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06IFwiU3lzdGVtIEVkaXRvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXN0b21jc3M6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ3VzdG9tIENTU1wiLFxyXG4gICAgICAgICAgICAgICAgY3VzdG9tY3NzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDdXN0b20gQ1NTXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJFbmFibGVzIHRoZSBDdXN0b20gQ1NTIHRhYlwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbGl2ZVVwZGF0ZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiTGl2ZSBVcGRhdGVcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlVwZGF0ZXMgdGhlIGNzcyBhcyB5b3UgdHlwZVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3RhcnREZXRhY2hlZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU3RhcnQgRGV0YWNoZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkNsaWNraW5nIHRoZSBDdXN0b20gQ1NTIHRhYiBvcGVucyB0aGUgZWRpdG9yIGluIGEgc2VwYXJhdGUgd2luZG93XCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbmF0aXZlT3Blbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiT3BlbiBpbiBOYXRpdmUgRWRpdG9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJDbGlja2luZyB0aGUgQ3VzdG9tIENTUyB0YWIgb3BlbnMgeW91ciBjdXN0b20gY3NzIGluIHlvdXIgbmF0aXZlIGVkaXRvclwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb3BlbkFjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRWRpdG9yIExvY2F0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJXaGVyZSBDdXN0b20gQ1NTIHNob3VsZCBvcGVuIGJ5IGRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzOiBcIlNldHRpbmdzIE1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoZWQ6IFwiRGV0YWNoZWQgV2luZG93XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTogXCJTeXN0ZW0gRWRpdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRldmVsb3Blcjoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJEZXZlbG9wZXIgU2V0dGluZ3NcIixcclxuICAgICAgICAgICAgICAgIGRldmVsb3Blck1vZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkRldmVsb3BlciBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBbGxvd3MgYWN0aXZhdGluZyBkZWJ1Z2dlciB3aGVuIHByZXNzaW5nIEY4XCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb3B5U2VsZWN0b3I6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvcHkgU2VsZWN0b3JcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgYSBcXFwiQ29weSBTZWxlY3RvclxcXCIgb3B0aW9uIHRvIGNvbnRleHQgbWVudXMgd2hlbiBkZXZlbG9wZXIgbW9kZSBpcyBhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB3aW5kb3c6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiV2luZG93IFByZWZlcmVuY2VzXCIsXHJcbiAgICAgICAgICAgICAgICB0cmFuc3BhcmVuY3k6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVuYWJsZSBUcmFuc3BhcmVuY3lcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkVuYWJsZXMgdGhlIG1haW4gd2luZG93IHRvIGJlIHNlZS10aHJvdWdoIChyZXF1aXJlcyByZXN0YXJ0KVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZnJhbWU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIldpbmRvdyBGcmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQWRkcyB0aGUgbmF0aXZlIG9zIHdpbmRvdyBmcmFtZSB0byB0aGUgbWFpbiB3aW5kb3dcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbW90ZXM6IHtcclxuICAgICAgICAgICAgbmFtZTogXCJFbW90ZXNcIixcclxuICAgICAgICAgICAgZ2VuZXJhbDoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJHZW5lcmFsXCIsXHJcbiAgICAgICAgICAgICAgICBkb3dubG9hZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRG93bmxvYWQgRW1vdGVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJEb3dubG9hZCBlbW90ZXMgd2hlbmV2ZXIgdGhleSBhcmUgb3V0IG9mIGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVtb3RlTWVudToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW1vdGUgTWVudVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvdyBUd2l0Y2gvRmF2b3VyaXRlIGVtb3RlcyBpbiBlbW90ZSBtZW51XCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBoaWRlRW1vamlNZW51OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJIaWRlIEVtb2ppIE1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIERpc2NvcmQncyBlbW9qaSBtZW51IHdoZW4gdXNpbmcgZW1vdGUgbWVudVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYXV0b0NhcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVtb3RlIEF1dG9jYXBpdGFsaXphdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQXV0b2NhcGl0YWxpemUgZW1vdGUgY29tbWFuZHNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNob3dOYW1lczoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2hvdyBOYW1lc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvdyBlbW90ZSBuYW1lcyBvbiBob3ZlclwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTaG93IEVtb3RlIE1vZGlmaWVyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRW5hYmxlIGVtb3RlIG1vZHMgKGZsaXAsIHNwaW4sIHB1bHNlLCBzcGluMiwgc3BpbjMsIDFzcGluLCAyc3BpbiwgM3NwaW4sIHRyLCBibCwgYnIsIHNoYWtlLCBzaGFrZTIsIHNoYWtlMywgZmxhcClcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFuaW1hdGVPbkhvdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJBbmltYXRlIE9uIEhvdmVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJPbmx5IGFuaW1hdGUgdGhlIGVtb3RlIG1vZGlmaWVycyBvbiBob3ZlclwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ2F0ZWdvcmllc1wiLFxyXG4gICAgICAgICAgICAgICAgdHdpdGNoZ2xvYmFsOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUd2l0Y2ggR2xvYmFsc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvdyBUd2l0Y2ggZ2xvYmFsIGVtb3Rlc1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdHdpdGNoc3Vic2NyaWJlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVHdpdGNoIFN1YnNjcmliZXJzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93IFR3aXRjaCBzdWJzY3JpYmVyIGVtb3Rlc1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZnJhbmtlcmZhY2V6OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJGcmFua2VyRmFjZVpcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgZW1vdGVzIGZyb20gRkZaXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBidHR2OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJUVFZcIixcclxuICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgZW1vdGVzIGZyb20gQlRUVlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgQWRkb25zOiB7XHJcbiAgICAgICAgdGl0bGU6IFwie3tuYW1lfX0gdnt7dmVyc2lvbn19IGJ5IHt7YXV0aG9yfX1cIixcclxuICAgICAgICBvcGVuRm9sZGVyOiBcIk9wZW4ge3t0eXBlfX0gRm9sZGVyXCIsXHJcbiAgICAgICAgcmVsb2FkOiBcIlJlbG9hZFwiLFxyXG4gICAgICAgIGFkZG9uU2V0dGluZ3M6IFwiU2V0dGluZ3NcIixcclxuICAgICAgICB3ZWJzaXRlOiBcIldlYnNpdGVcIixcclxuICAgICAgICBzb3VyY2U6IFwiU291cmNlXCIsXHJcbiAgICAgICAgc2VydmVyOiBcIlN1cHBvcnQgU2VydmVyXCIsXHJcbiAgICAgICAgZG9uYXRlOiBcIkRvbmF0ZVwiLFxyXG4gICAgICAgIG5hbWU6IFwiTmFtZVwiLFxyXG4gICAgICAgIGF1dGhvcjogXCJBdXRob3JcIixcclxuICAgICAgICB2ZXJzaW9uOiBcIlZlcnNpb25cIixcclxuICAgICAgICBhZGRlZDogXCJEYXRlIEFkZGVkXCIsXHJcbiAgICAgICAgbW9kaWZpZWQ6IFwiRGF0ZSBNb2RpZmllZFwiLFxyXG4gICAgICAgIHNlYXJjaDogXCJTZWFyY2gge3t0eXBlfX1cIixcclxuICAgICAgICBlZGl0QWRkb246IFwiRWRpdFwiLFxyXG4gICAgICAgIGRlbGV0ZUFkZG9uOiBcIkRlbGV0ZVwiLFxyXG4gICAgICAgIGNvbmZpcm1EZWxldGU6IFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB7e25hbWV9fT9cIixcclxuICAgICAgICBjb25maXJtYXRpb25UZXh0OiBcIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyB0byB7e25hbWV9fS4gQ2xvc2luZyB0aGlzIHdpbmRvdyB3aWxsIGxvc2UgYWxsIHRob3NlIGNoYW5nZXMuXCIsXHJcbiAgICB9LFxyXG4gICAgRW1vdGVzOiB7XHJcbiAgICAgICAgbG9hZGluZzogXCJMb2FkaW5nIGVtb3RlcyBpbiB0aGUgYmFja2dyb3VuZCBkbyBub3QgcmVsb2FkLlwiLFxyXG4gICAgICAgIGxvYWRlZDogXCJBbGwgZW1vdGVzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXCIsXHJcbiAgICAgICAgY2xlYXJFbW90ZXM6IFwiQ2xlYXIgRW1vdGUgRGF0YVwiLFxyXG4gICAgICAgIGZhdm9yaXRlQWN0aW9uOiBcIkZhdm9yaXRlIVwiXHJcbiAgICB9LFxyXG4gICAgQ3VzdG9tQ1NTOiB7XHJcbiAgICAgICAgY29uZmlybWF0aW9uVGV4dDogXCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgdG8geW91ciBDdXN0b20gQ1NTLiBDbG9zaW5nIHRoaXMgd2luZG93IHdpbGwgbG9zZSBhbGwgdGhvc2UgY2hhbmdlcy5cIixcclxuICAgICAgICB1cGRhdGU6IFwiVXBkYXRlXCIsXHJcbiAgICAgICAgc2F2ZTogXCJTYXZlXCIsXHJcbiAgICAgICAgb3Blbk5hdGl2ZTogXCJPcGVuIGluIFN5c3RlbSBFZGl0b3JcIixcclxuICAgICAgICBvcGVuRGV0YWNoZWQ6IFwiRGV0YWNoIFdpbmRvd1wiLFxyXG4gICAgICAgIHNldHRpbmdzOiBcIkVkaXRvciBTZXR0aW5nc1wiLFxyXG4gICAgICAgIGVkaXRvclRpdGxlOiBcIkN1c3RvbSBDU1MgRWRpdG9yXCJcclxuICAgIH0sXHJcbiAgICBQdWJsaWNTZXJ2ZXJzOiB7XHJcbiAgICAgICAgYnV0dG9uOiBcInB1YmxpY1wiLFxyXG4gICAgICAgIGpvaW46IFwiSm9pblwiLFxyXG4gICAgICAgIGpvaW5pbmc6IFwiSm9pbmluZ1wiLFxyXG4gICAgICAgIGpvaW5lZDogXCJKb2luZWRcIixcclxuICAgICAgICBsb2FkaW5nOiBcIkxvYWRpbmdcIixcclxuICAgICAgICBsb2FkTW9yZTogXCJMb2FkIE1vcmVcIixcclxuICAgICAgICBub3RDb25uZWN0ZWQ6IFwiTm90IGNvbm5lY3RlZCB0byBEaXNjb3JkU2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgc2VhcmNoOiBcIlNlYXJjaFwiLFxyXG4gICAgICAgIGNvbm5lY3Q6IFwiQ29ubmVjdFwiLFxyXG4gICAgICAgIHJlY29ubmVjdDogXCJSZWNvbm5lY3RcIixcclxuICAgICAgICBjYXRlZ29yaWVzOiBcIkNhdGVnb3JpZXNcIixcclxuICAgICAgICBjb25uZWN0aW9uOiBcIkNvbm5lY3RlZCBhczoge3t1c2VybmFtZX19I3t7ZGlzY3JpbWluYXRvcn19XCIsXHJcbiAgICAgICAgcmVzdWx0czogXCJTaG93aW5nIHt7c3RhcnR9fS17e2VuZH19IG9mIHt7dG90YWx9fSByZXN1bHRzIGluIHt7Y2F0ZWdvcnl9fVwiLFxyXG4gICAgICAgIHF1ZXJ5OiBcImZvciB7e3F1ZXJ5fX1cIlxyXG4gICAgfSxcclxuICAgIE1vZGFsczoge1xyXG4gICAgICAgIGNvbmZpcm1BY3Rpb246IFwiQXJlIFlvdSBTdXJlP1wiLFxyXG4gICAgICAgIG9rYXk6IFwiT2theVwiLFxyXG4gICAgICAgIGNhbmNlbDogXCJDYW5jZWxcIixcclxuICAgICAgICBjbG9zZTogXCJDbG9zZVwiLFxyXG4gICAgICAgIG5hbWU6IFwiTmFtZVwiLFxyXG4gICAgICAgIG1lc3NhZ2U6IFwiTWVzc2FnZVwiLFxyXG4gICAgICAgIGVycm9yOiBcIkVycm9yXCIsXHJcbiAgICAgICAgYWRkb25FcnJvcnM6IFwiQWRkb24gRXJyb3JzXCJcclxuICAgIH0sXHJcbiAgICBTb3J0aW5nOiB7XHJcbiAgICAgICAgc29ydEJ5OiBcIlNvcnQgQnlcIixcclxuICAgICAgICBvcmRlcjogXCJPcmRlclwiLFxyXG4gICAgICAgIGFzY2VuZGluZzogXCJBc2NlbmRpbmdcIixcclxuICAgICAgICBkZXNjZW5kaW5nOiBcIkRlc2NlbmRpbmdcIlxyXG4gICAgfVxyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/data/strings.js\n"); /***/ }), @@ -347,7 +347,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonManager; });\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/addonerror */ \"./src/structs/addonerror.js\");\n/* harmony import */ var _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../structs/metaerror */ \"./src/structs/metaerror.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n\n\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst Module = __webpack_require__(/*! module */ \"module\").Module;\n\nModule.globalPaths.push(path.resolve(__webpack_require__(/*! electron */ \"electron\").remote.app.getAppPath(), \"node_modules\"));\nconst splitRegex = /[^\\S\\r\\n]*?\\n[^\\S\\r\\n]*?\\*[^\\S\\r\\n]?/;\nconst escapedAtRegex = /^\\\\@/;\n\nconst stripBOM = function (fileContent) {\n if (fileContent.charCodeAt(0) === 0xFEFF) {\n fileContent = fileContent.slice(1);\n }\n\n return fileContent;\n};\n\nclass AddonManager {\n get name() {\n return \"\";\n }\n\n get moduleExtension() {\n return \"\";\n }\n\n get extension() {\n return \"\";\n }\n\n get addonFolder() {\n return \"\";\n }\n\n get prefix() {\n return \"addon\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"addons\";\n }\n\n get id() {\n return \"autoReload\";\n }\n\n emit(event, ...args) {\n return _emitter__WEBPACK_IMPORTED_MODULE_3__[\"default\"].emit(`${this.prefix}-${event}`, ...args);\n }\n\n constructor() {\n this.timeCache = {};\n this.addonList = [];\n this.state = {};\n }\n\n initialize() {\n this.originalRequire = Module._extensions[this.moduleExtension];\n Module._extensions[this.moduleExtension] = this.getAddonRequire();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].on(this.collection, this.category, this.id, enabled => {\n if (enabled) this.watchAddons();else this.unwatchAddons();\n });\n return this.loadAllAddons();\n } // Subclasses should overload this and modify the addon object as needed to fully load it\n\n\n initializeAddon() {\n return;\n } // Subclasses should overload this and modify the fileContent as needed to require() the file\n\n\n getFileModification(module, fileContent) {\n return fileContent;\n }\n\n startAddon() {\n return;\n }\n\n stopAddon() {\n return;\n }\n\n loadState() {\n const saved = _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getData(`${this.prefix}s`);\n if (!saved) return;\n Object.assign(this.state, saved);\n }\n\n saveState() {\n _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setData(`${this.prefix}s`, this.state);\n }\n\n watchAddons() {\n if (this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, `Already watching ${this.prefix} addons.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(this.name, `Starting to watch ${this.prefix} addons.`);\n this.watcher = fs.watch(this.addonFolder, {\n persistent: false\n }, async (eventType, filename) => {\n if (!eventType || !filename || !filename.endsWith(this.extension)) return;\n await new Promise(r => setTimeout(r, 50));\n\n try {\n fs.statSync(path.resolve(this.addonFolder, filename));\n } catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete this.timeCache[filename];\n this.unloadAddon(filename, true);\n }\n\n if (!fs.statSync(path.resolve(this.addonFolder, filename)).isFile()) return;\n const stats = fs.statSync(path.resolve(this.addonFolder, filename));\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof stats.mtime.getTime() !== \"number\") return;\n if (this.timeCache[filename] == stats.mtime.getTime()) return;\n this.timeCache[filename] = stats.mtime.getTime();\n if (eventType == \"rename\") this.loadAddon(filename, true);\n if (eventType == \"change\") this.reloadAddon(filename, true);\n });\n }\n\n unwatchAddons() {\n if (!this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, `Was not watching ${this.prefix} addons.`);\n this.watcher.close();\n delete this.watcher;\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(this.name, `No longer watching ${this.prefix} addons.`);\n }\n\n extractMeta(fileContent) {\n const firstLine = fileContent.split(\"\\n\")[0];\n const hasOldMeta = firstLine.includes(\"//META\");\n if (hasOldMeta) return this.parseOldMeta(fileContent);\n const hasNewMeta = firstLine.includes(\"/**\");\n if (hasNewMeta) return this.parseNewMeta(fileContent);\n throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META was not found.\");\n }\n\n parseOldMeta(fileContent) {\n const meta = fileContent.split(\"\\n\")[0];\n const metaData = meta.substring(meta.lastIndexOf(\"//META\") + 6, meta.lastIndexOf(\"*//\"));\n const parsed = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(metaData);\n if (!parsed) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META could not be parsed.\");\n if (!parsed.name) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META missing name data.\");\n return parsed;\n }\n\n parseNewMeta(fileContent) {\n const block = fileContent.split(\"/**\", 2)[1].split(\"*/\", 1)[0];\n const out = {};\n let field = \"\";\n let accum = \"\";\n\n for (const line of block.split(splitRegex)) {\n if (line.length === 0) continue;\n\n if (line.charAt(0) === \"@\" && line.charAt(1) !== \" \") {\n out[field] = accum;\n const l = line.indexOf(\" \");\n field = line.substr(1, l - 1);\n accum = line.substr(l + 1);\n } else {\n accum += \" \" + line.replace(\"\\\\n\", \"\\n\").replace(escapedAtRegex, \"@\");\n }\n }\n\n out[field] = accum.trim();\n delete out[\"\"];\n return out;\n }\n\n getAddonRequire() {\n const self = this; // const baseFolder = this.addonFolder;\n\n const originalRequire = this.originalRequire;\n return function (module, filename) {\n const possiblePath = path.resolve(self.addonFolder, path.basename(filename));\n if (!fs.existsSync(possiblePath) || filename !== fs.realpathSync(possiblePath)) return Reflect.apply(originalRequire, this, arguments);\n let fileContent = fs.readFileSync(filename, \"utf8\");\n fileContent = stripBOM(fileContent);\n const stats = fs.statSync(filename);\n const meta = self.extractMeta(fileContent);\n meta.id = meta.name;\n meta.filename = path.basename(filename);\n meta.added = stats.atimeMs;\n meta.modified = stats.mtimeMs;\n meta.size = stats.size;\n fileContent = self.getFileModification(module, fileContent, meta);\n\n module._compile(fileContent, filename);\n };\n } // Subclasses should use the return (if not AddonError) and push to this.addonList\n\n\n loadAddon(filename, shouldToast = false) {\n if (typeof filename === \"undefined\") return;\n\n try {\n require(path.resolve(this.addonFolder, filename));\n } catch (error) {\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](filename, filename, \"Could not be compiled.\", {\n message: error.message,\n stack: error.stack\n });\n }\n\n const addon = require(path.resolve(this.addonFolder, filename));\n\n if (this.addonList.find(c => c.id == addon.id)) return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](addon.name, filename, `There is already a plugin with name ${addon.name}`);\n const error = this.initializeAddon(addon);\n if (error) return error;\n this.addonList.push(addon);\n if (shouldToast) _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].success(`${addon.name} v${addon.version} was loaded.`);\n this.emit(\"loaded\", addon.id);\n if (!this.state[addon.id]) return this.state[addon.id] = false;\n return this.startAddon(addon);\n }\n\n unloadAddon(idOrFileOrAddon, shouldToast = true, isReload = false) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n if (!addon) return false;\n if (this.state[addon.id]) isReload ? this.stopAddon(addon) : this.disableAddon(addon);\n delete require.cache[require.resolve(path.resolve(this.addonFolder, addon.filename))];\n this.addonList.splice(this.addonList.indexOf(addon), 1);\n this.emit(\"unloaded\", addon.id);\n if (shouldToast) _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].success(`${addon.name} was unloaded.`);\n return true;\n }\n\n reloadAddon(idOrFileOrAddon, shouldToast = true) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n const didUnload = this.unloadAddon(addon, shouldToast, true);\n if (!didUnload) return didUnload;\n return this.loadAddon(addon.filename, shouldToast);\n }\n\n isLoaded(idOrFile) {\n const addon = this.addonList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!addon) return false;\n return true;\n }\n\n isEnabled(idOrFile) {\n const addon = this.addonList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!addon) return false;\n return this.state[addon.id];\n }\n\n enableAddon(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n if (this.state[addon.id]) return;\n this.state[addon.id] = true;\n this.startAddon(addon);\n this.saveState();\n }\n\n disableAddon(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n if (!this.state[addon.id]) return;\n this.state[addon.id] = false;\n this.stopAddon(addon);\n this.saveState();\n }\n\n toggleAddon(id) {\n if (this.state[id]) this.disableAddon(id);else this.enableAddon(id);\n }\n\n loadNewAddons() {\n const files = fs.readdirSync(this.addonFolder);\n const removed = this.addonList.filter(t => !files.includes(t.filename)).map(c => c.id);\n const added = files.filter(f => !this.addonList.find(t => t.filename == f) && f.endsWith(this.extension) && fs.statSync(path.resolve(this.addonFolder, f)).isFile());\n return {\n added,\n removed\n };\n }\n\n updateList() {\n const results = this.loadNewAddons();\n\n for (const filename of results.added) this.loadAddon(filename);\n\n for (const name of results.removed) this.unloadAddon(name);\n }\n\n loadAllAddons() {\n this.loadState();\n const errors = [];\n const files = fs.readdirSync(this.addonFolder);\n\n for (const filename of files) {\n if (!fs.statSync(path.resolve(this.addonFolder, filename)).isFile() || !filename.endsWith(this.extension)) continue;\n const addon = this.loadAddon(filename, false);\n if (addon instanceof _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"]) errors.push(addon);\n }\n\n this.saveState();\n if (_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(this.collection, this.category, this.id)) this.watchAddons();\n return errors;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvYWRkb25tYW5hZ2VyLmpzP2NlYTkiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJmcyIsIk1vZHVsZSIsImdsb2JhbFBhdGhzIiwicHVzaCIsInJlc29sdmUiLCJyZW1vdGUiLCJhcHAiLCJnZXRBcHBQYXRoIiwic3BsaXRSZWdleCIsImVzY2FwZWRBdFJlZ2V4Iiwic3RyaXBCT00iLCJmaWxlQ29udGVudCIsImNoYXJDb2RlQXQiLCJzbGljZSIsIkFkZG9uTWFuYWdlciIsIm5hbWUiLCJtb2R1bGVFeHRlbnNpb24iLCJleHRlbnNpb24iLCJhZGRvbkZvbGRlciIsInByZWZpeCIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiZW1pdCIsImV2ZW50IiwiYXJncyIsIkV2ZW50cyIsImNvbnN0cnVjdG9yIiwidGltZUNhY2hlIiwiYWRkb25MaXN0Iiwic3RhdGUiLCJpbml0aWFsaXplIiwib3JpZ2luYWxSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJnZXRBZGRvblJlcXVpcmUiLCJTZXR0aW5ncyIsIm9uIiwiZW5hYmxlZCIsIndhdGNoQWRkb25zIiwidW53YXRjaEFkZG9ucyIsImxvYWRBbGxBZGRvbnMiLCJpbml0aWFsaXplQWRkb24iLCJnZXRGaWxlTW9kaWZpY2F0aW9uIiwibW9kdWxlIiwic3RhcnRBZGRvbiIsInN0b3BBZGRvbiIsImxvYWRTdGF0ZSIsInNhdmVkIiwiRGF0YVN0b3JlIiwiZ2V0RGF0YSIsIk9iamVjdCIsImFzc2lnbiIsInNhdmVTdGF0ZSIsInNldERhdGEiLCJ3YXRjaGVyIiwiTG9nZ2VyIiwiZXJyb3IiLCJsb2ciLCJ3YXRjaCIsInBlcnNpc3RlbnQiLCJldmVudFR5cGUiLCJmaWxlbmFtZSIsImVuZHNXaXRoIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkQWRkb24iLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRBZGRvbiIsInJlbG9hZEFkZG9uIiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsInNwbGl0IiwiaGFzT2xkTWV0YSIsImluY2x1ZGVzIiwicGFyc2VPbGRNZXRhIiwiaGFzTmV3TWV0YSIsInBhcnNlTmV3TWV0YSIsIk1ldGFFcnJvciIsIm1ldGEiLCJtZXRhRGF0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicGFyc2VkIiwiVXRpbGl0aWVzIiwidGVzdEpTT04iLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwibGVuZ3RoIiwiY2hhckF0IiwibCIsImluZGV4T2YiLCJzdWJzdHIiLCJyZXBsYWNlIiwidHJpbSIsInNlbGYiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFscGF0aFN5bmMiLCJSZWZsZWN0IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJyZWFkRmlsZVN5bmMiLCJhZGRlZCIsImF0aW1lTXMiLCJtb2RpZmllZCIsIm10aW1lTXMiLCJzaXplIiwiX2NvbXBpbGUiLCJzaG91bGRUb2FzdCIsIl9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fIiwiQWRkb25FcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsImFkZG9uIiwiZmluZCIsImMiLCJUb2FzdHMiLCJzdWNjZXNzIiwidmVyc2lvbiIsImlkT3JGaWxlT3JBZGRvbiIsImlzUmVsb2FkIiwiZGlzYWJsZUFkZG9uIiwiY2FjaGUiLCJzcGxpY2UiLCJkaWRVbmxvYWQiLCJpc0xvYWRlZCIsImlkT3JGaWxlIiwiaXNFbmFibGVkIiwiZW5hYmxlQWRkb24iLCJpZE9yQWRkb24iLCJwIiwidG9nZ2xlQWRkb24iLCJsb2FkTmV3QWRkb25zIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsInJlbW92ZWQiLCJmaWx0ZXIiLCJ0IiwibWFwIiwiZiIsInVwZGF0ZUxpc3QiLCJyZXN1bHRzIiwiZXJyb3JzIiwiZ2V0Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7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dWxlcy9hZGRvbm1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vZW1pdHRlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgQWRkb25FcnJvciBmcm9tIFwiLi4vc3RydWN0cy9hZGRvbmVycm9yXCI7XHJcbmltcG9ydCBNZXRhRXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvbWV0YWVycm9yXCI7XHJcbmltcG9ydCBUb2FzdHMgZnJvbSBcIi4uL3VpL3RvYXN0c1wiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKS5Nb2R1bGU7XHJcbk1vZHVsZS5nbG9iYWxQYXRocy5wdXNoKHBhdGgucmVzb2x2ZShyZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcC5nZXRBcHBQYXRoKCksIFwibm9kZV9tb2R1bGVzXCIpKTtcclxuXHJcbmNvbnN0IHNwbGl0UmVnZXggPSAvW15cXFNcXHJcXG5dKj9cXG5bXlxcU1xcclxcbl0qP1xcKlteXFxTXFxyXFxuXT8vO1xyXG5jb25zdCBlc2NhcGVkQXRSZWdleCA9IC9eXFxcXEAvO1xyXG5cclxuY29uc3Qgc3RyaXBCT00gPSBmdW5jdGlvbihmaWxlQ29udGVudCkge1xyXG4gICAgaWYgKGZpbGVDb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xyXG4gICAgICAgIGZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQuc2xpY2UoMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlsZUNvbnRlbnQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRvbk1hbmFnZXIge1xyXG5cclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBtb2R1bGVFeHRlbnNpb24oKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IGV4dGVuc2lvbigpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgYWRkb25Gb2xkZXIoKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IHByZWZpeCgpIHtyZXR1cm4gXCJhZGRvblwiO31cclxuICAgIGdldCBjb2xsZWN0aW9uKCkge3JldHVybiBcInNldHRpbmdzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImFkZG9uc1wiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJhdXRvUmVsb2FkXCI7fVxyXG4gICAgZW1pdChldmVudCwgLi4uYXJncykge3JldHVybiBFdmVudHMuZW1pdChgJHt0aGlzLnByZWZpeH0tJHtldmVudH1gLCAuLi5hcmdzKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLmFkZG9uTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW3RoaXMubW9kdWxlRXh0ZW5zaW9uXTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbdGhpcy5tb2R1bGVFeHRlbnNpb25dID0gdGhpcy5nZXRBZGRvblJlcXVpcmUoKTtcclxuICAgICAgICBTZXR0aW5ncy5vbih0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQsIChlbmFibGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB0aGlzLndhdGNoQWRkb25zKCk7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy51bndhdGNoQWRkb25zKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFsbEFkZG9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJsb2FkIHRoaXMgYW5kIG1vZGlmeSB0aGUgYWRkb24gb2JqZWN0IGFzIG5lZWRlZCB0byBmdWxseSBsb2FkIGl0XHJcbiAgICBpbml0aWFsaXplQWRkb24oKSB7cmV0dXJuO31cclxuXHJcbiAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCBvdmVybG9hZCB0aGlzIGFuZCBtb2RpZnkgdGhlIGZpbGVDb250ZW50IGFzIG5lZWRlZCB0byByZXF1aXJlKCkgdGhlIGZpbGVcclxuICAgIGdldEZpbGVNb2RpZmljYXRpb24obW9kdWxlLCBmaWxlQ29udGVudCkge3JldHVybiBmaWxlQ29udGVudDt9XHJcblxyXG4gICAgc3RhcnRBZGRvbigpIHtyZXR1cm47fVxyXG4gICAgc3RvcEFkZG9uKCkge3JldHVybjt9XHJcblxyXG4gICAgbG9hZFN0YXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldERhdGEoYCR7dGhpcy5wcmVmaXh9c2ApO1xyXG4gICAgICAgIGlmICghc2F2ZWQpIHJldHVybjtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuc3RhdGUsIHNhdmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlU3RhdGUoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldERhdGEoYCR7dGhpcy5wcmVmaXh9c2AsIHRoaXMuc3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHdhdGNoQWRkb25zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLndhdGNoZXIpIHJldHVybiBMb2dnZXIuZXJyb3IodGhpcy5uYW1lLCBgQWxyZWFkeSB3YXRjaGluZyAke3RoaXMucHJlZml4fSBhZGRvbnMuYCk7XHJcbiAgICAgICAgTG9nZ2VyLmxvZyh0aGlzLm5hbWUsIGBTdGFydGluZyB0byB3YXRjaCAke3RoaXMucHJlZml4fSBhZGRvbnMuYCk7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyID0gZnMud2F0Y2godGhpcy5hZGRvbkZvbGRlciwge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCh0aGlzLmV4dGVuc2lvbikpIHJldHVybjtcclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XHJcbiAgICAgICAgICAgIHRyeSB7ZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRU5PRU5UXCIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVubG9hZEFkZG9uKGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLm10aW1lIHx8ICFzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPT0gc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcInJlbmFtZVwiKSB0aGlzLmxvYWRBZGRvbihmaWxlbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikgdGhpcy5yZWxvYWRBZGRvbihmaWxlbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW53YXRjaEFkZG9ucygpIHtcclxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlcikgcmV0dXJuIExvZ2dlci5lcnJvcih0aGlzLm5hbWUsIGBXYXMgbm90IHdhdGNoaW5nICR7dGhpcy5wcmVmaXh9IGFkZG9ucy5gKTtcclxuICAgICAgICB0aGlzLndhdGNoZXIuY2xvc2UoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy53YXRjaGVyO1xyXG4gICAgICAgIExvZ2dlci5sb2codGhpcy5uYW1lLCBgTm8gbG9uZ2VyIHdhdGNoaW5nICR7dGhpcy5wcmVmaXh9IGFkZG9ucy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0TWV0YShmaWxlQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGZpbGVDb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGhhc09sZE1ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvL01FVEFcIik7XHJcbiAgICAgICAgaWYgKGhhc09sZE1ldGEpIHJldHVybiB0aGlzLnBhcnNlT2xkTWV0YShmaWxlQ29udGVudCk7XHJcbiAgICAgICAgY29uc3QgaGFzTmV3TWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8qKlwiKTtcclxuICAgICAgICBpZiAoaGFzTmV3TWV0YSkgcmV0dXJuIHRoaXMucGFyc2VOZXdNZXRhKGZpbGVDb250ZW50KTtcclxuICAgICAgICB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU9sZE1ldGEoZmlsZUNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0gZmlsZUNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgbWV0YURhdGEgPSBtZXRhLnN1YnN0cmluZyhtZXRhLmxhc3RJbmRleE9mKFwiLy9NRVRBXCIpICsgNiwgbWV0YS5sYXN0SW5kZXhPZihcIiovL1wiKSk7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbGl0aWVzLnRlc3RKU09OKG1ldGFEYXRhKTtcclxuICAgICAgICBpZiAoIXBhcnNlZCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgY291bGQgbm90IGJlIHBhcnNlZC5cIik7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQubmFtZSkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgbWlzc2luZyBuYW1lIGRhdGEuXCIpO1xyXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VOZXdNZXRhKGZpbGVDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgYmxvY2sgPSBmaWxlQ29udGVudC5zcGxpdChcIi8qKlwiLCAyKVsxXS5zcGxpdChcIiovXCIsIDEpWzBdO1xyXG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xyXG4gICAgICAgIGxldCBmaWVsZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGFjY3VtID0gXCJcIjtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2suc3BsaXQoc3BsaXRSZWdleCkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBcIkBcIiAmJiBsaW5lLmNoYXJBdCgxKSAhPT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBsaW5lLmluZGV4T2YoXCIgXCIpO1xyXG4gICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnN1YnN0cigxLCBsIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSA9IGxpbmUuc3Vic3RyKGwgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtICs9IFwiIFwiICsgbGluZS5yZXBsYWNlKFwiXFxcXG5cIiwgXCJcXG5cIikucmVwbGFjZShlc2NhcGVkQXRSZWdleCwgXCJAXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bS50cmltKCk7XHJcbiAgICAgICAgZGVsZXRlIG91dFtcIlwiXTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZG9uUmVxdWlyZSgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBjb25zdCBiYXNlRm9sZGVyID0gdGhpcy5hZGRvbkZvbGRlcjtcclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSB0aGlzLm9yaWdpbmFsUmVxdWlyZTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlLCBmaWxlbmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoc2VsZi5hZGRvbkZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocG9zc2libGVQYXRoKSB8fCBmaWxlbmFtZSAhPT0gZnMucmVhbHBhdGhTeW5jKHBvc3NpYmxlUGF0aCkpIHJldHVybiBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsUmVxdWlyZSwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCBcInV0ZjhcIik7XHJcbiAgICAgICAgICAgIGZpbGVDb250ZW50ID0gc3RyaXBCT00oZmlsZUNvbnRlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgbWV0YSA9IHNlbGYuZXh0cmFjdE1ldGEoZmlsZUNvbnRlbnQpO1xyXG4gICAgICAgICAgICBtZXRhLmlkID0gbWV0YS5uYW1lO1xyXG4gICAgICAgICAgICBtZXRhLmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIG1ldGEuYWRkZWQgPSBzdGF0cy5hdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLm1vZGlmaWVkID0gc3RhdHMubXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5zaXplID0gc3RhdHMuc2l6ZTtcclxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgPSBzZWxmLmdldEZpbGVNb2RpZmljYXRpb24obW9kdWxlLCBmaWxlQ29udGVudCwgbWV0YSk7XHJcbiAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShmaWxlQ29udGVudCwgZmlsZW5hbWUpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgdXNlIHRoZSByZXR1cm4gKGlmIG5vdCBBZGRvbkVycm9yKSBhbmQgcHVzaCB0byB0aGlzLmFkZG9uTGlzdFxyXG4gICAgbG9hZEFkZG9uKGZpbGVuYW1lLCBzaG91bGRUb2FzdCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICB0cnkge19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4gbmV3IEFkZG9uRXJyb3IoZmlsZW5hbWUsIGZpbGVuYW1lLCBcIkNvdWxkIG5vdCBiZSBjb21waWxlZC5cIiwge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja30pO31cclxuICAgICAgICBjb25zdCBhZGRvbiA9IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgIGlmICh0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBhZGRvbi5pZCkpIHJldHVybiBuZXcgQWRkb25FcnJvcihhZGRvbi5uYW1lLCBmaWxlbmFtZSwgYFRoZXJlIGlzIGFscmVhZHkgYSBwbHVnaW4gd2l0aCBuYW1lICR7YWRkb24ubmFtZX1gKTtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuaW5pdGlhbGl6ZUFkZG9uKGFkZG9uKTtcclxuICAgICAgICBpZiAoZXJyb3IpIHJldHVybiBlcnJvcjtcclxuICAgICAgICB0aGlzLmFkZG9uTGlzdC5wdXNoKGFkZG9uKTtcclxuICAgICAgICBpZiAoc2hvdWxkVG9hc3QpIFRvYXN0cy5zdWNjZXNzKGAke2FkZG9uLm5hbWV9IHYke2FkZG9uLnZlcnNpb259IHdhcyBsb2FkZWQuYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KFwibG9hZGVkXCIsIGFkZG9uLmlkKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2FkZG9uLmlkXSkgcmV0dXJuIHRoaXMuc3RhdGVbYWRkb24uaWRdID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRBZGRvbihhZGRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgdW5sb2FkQWRkb24oaWRPckZpbGVPckFkZG9uLCBzaG91bGRUb2FzdCA9IHRydWUsIGlzUmVsb2FkID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHR5cGVvZihpZE9yRmlsZU9yQWRkb24pID09IFwic3RyaW5nXCIgPyB0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZU9yQWRkb24gfHwgYy5maWxlbmFtZSA9PSBpZE9yRmlsZU9yQWRkb24pIDogaWRPckZpbGVPckFkZG9uO1xyXG4gICAgICAgIGlmICghYWRkb24pIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZVthZGRvbi5pZF0pIGlzUmVsb2FkID8gdGhpcy5zdG9wQWRkb24oYWRkb24pIDogdGhpcy5kaXNhYmxlQWRkb24oYWRkb24pO1xyXG4gICAgICAgIGRlbGV0ZSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5jYWNoZVtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5yZXNvbHZlKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBhZGRvbi5maWxlbmFtZSkpXTtcclxuICAgICAgICB0aGlzLmFkZG9uTGlzdC5zcGxpY2UodGhpcy5hZGRvbkxpc3QuaW5kZXhPZihhZGRvbiksIDEpO1xyXG4gICAgICAgIHRoaXMuZW1pdChcInVubG9hZGVkXCIsIGFkZG9uLmlkKTtcclxuICAgICAgICBpZiAoc2hvdWxkVG9hc3QpIFRvYXN0cy5zdWNjZXNzKGAke2FkZG9uLm5hbWV9IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRBZGRvbihpZE9yRmlsZU9yQWRkb24sIHNob3VsZFRvYXN0ID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JGaWxlT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JBZGRvbiB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JBZGRvbikgOiBpZE9yRmlsZU9yQWRkb247XHJcbiAgICAgICAgY29uc3QgZGlkVW5sb2FkID0gdGhpcy51bmxvYWRBZGRvbihhZGRvbiwgc2hvdWxkVG9hc3QsIHRydWUpO1xyXG4gICAgICAgIGlmICghZGlkVW5sb2FkKSByZXR1cm4gZGlkVW5sb2FkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRBZGRvbihhZGRvbi5maWxlbmFtZSwgc2hvdWxkVG9hc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTG9hZGVkKGlkT3JGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZSB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlKTtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmFibGVkKGlkT3JGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZSB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlKTtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVbYWRkb24uaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZUFkZG9uKGlkT3JBZGRvbikge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JBZGRvbikgOiBpZE9yQWRkb247XHJcbiAgICAgICAgaWYgKCFhZGRvbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2FkZG9uLmlkXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhdGVbYWRkb24uaWRdID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXJ0QWRkb24oYWRkb24pO1xyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUFkZG9uKGlkT3JBZGRvbikge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JBZGRvbikgOiBpZE9yQWRkb247XHJcbiAgICAgICAgaWYgKCFhZGRvbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZVthZGRvbi5pZF0pIHJldHVybjtcclxuICAgICAgICB0aGlzLnN0YXRlW2FkZG9uLmlkXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RvcEFkZG9uKGFkZG9uKTtcclxuICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUFkZG9uKGlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbaWRdKSB0aGlzLmRpc2FibGVBZGRvbihpZCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmVuYWJsZUFkZG9uKGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTmV3QWRkb25zKCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGhpcy5hZGRvbkZvbGRlcik7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuYWRkb25MaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gYy5pZCk7XHJcbiAgICAgICAgY29uc3QgYWRkZWQgPSBmaWxlcy5maWx0ZXIoZiA9PiAhdGhpcy5hZGRvbkxpc3QuZmluZCh0ID0+IHQuZmlsZW5hbWUgPT0gZikgJiYgZi5lbmRzV2l0aCh0aGlzLmV4dGVuc2lvbikgJiYgZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGYpKS5pc0ZpbGUoKSk7XHJcbiAgICAgICAgcmV0dXJuIHthZGRlZCwgcmVtb3ZlZH07XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGlzdCgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5sb2FkTmV3QWRkb25zKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRBZGRvbihmaWxlbmFtZSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRBZGRvbihuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQWxsQWRkb25zKCkge1xyXG4gICAgICAgIHRoaXMubG9hZFN0YXRlKCk7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLmFkZG9uRm9sZGVyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCh0aGlzLmV4dGVuc2lvbikpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMubG9hZEFkZG9uKGZpbGVuYW1lLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChhZGRvbiBpbnN0YW5jZW9mIEFkZG9uRXJyb3IpIGVycm9ycy5wdXNoKGFkZG9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICAgICAgaWYgKFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQpKSB0aGlzLndhdGNoQWRkb25zKCk7XHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/addonmanager.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonManager; });\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/addonerror */ \"./src/structs/addonerror.js\");\n/* harmony import */ var _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../structs/metaerror */ \"./src/structs/metaerror.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n/* harmony import */ var _ui_misc_addoneditor__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../ui/misc/addoneditor */ \"./src/ui/misc/addoneditor.jsx\");\n/* harmony import */ var _ui_floating_container__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../ui/floating/container */ \"./src/ui/floating/container.jsx\");\n\n\n\n\n\n\n\n\n\n\n\n\nconst React = _discordmodules__WEBPACK_IMPORTED_MODULE_8__[\"default\"].React;\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst Module = __webpack_require__(/*! module */ \"module\").Module;\n\nModule.globalPaths.push(path.resolve(__webpack_require__(/*! electron */ \"electron\").remote.app.getAppPath(), \"node_modules\"));\nconst splitRegex = /[^\\S\\r\\n]*?\\r?\\n[^\\S\\r\\n]*?\\*[^\\S\\r\\n]?/;\nconst escapedAtRegex = /^\\\\@/;\n\nconst stripBOM = function (fileContent) {\n if (fileContent.charCodeAt(0) === 0xFEFF) {\n fileContent = fileContent.slice(1);\n }\n\n return fileContent;\n};\n\nclass AddonManager {\n get name() {\n return \"\";\n }\n\n get moduleExtension() {\n return \"\";\n }\n\n get extension() {\n return \"\";\n }\n\n get addonFolder() {\n return \"\";\n }\n\n get language() {\n return \"\";\n }\n\n get prefix() {\n return \"addon\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"addons\";\n }\n\n get id() {\n return \"autoReload\";\n }\n\n emit(event, ...args) {\n return _emitter__WEBPACK_IMPORTED_MODULE_3__[\"default\"].emit(`${this.prefix}-${event}`, ...args);\n }\n\n constructor() {\n this.timeCache = {};\n this.addonList = [];\n this.state = {};\n }\n\n initialize() {\n this.originalRequire = Module._extensions[this.moduleExtension];\n Module._extensions[this.moduleExtension] = this.getAddonRequire();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].on(this.collection, this.category, this.id, enabled => {\n if (enabled) this.watchAddons();else this.unwatchAddons();\n });\n return this.loadAllAddons();\n } // Subclasses should overload this and modify the addon object as needed to fully load it\n\n\n initializeAddon() {\n return;\n } // Subclasses should overload this and modify the fileContent as needed to require() the file\n\n\n getFileModification(module, fileContent) {\n return fileContent;\n }\n\n startAddon() {\n return;\n }\n\n stopAddon() {\n return;\n }\n\n loadState() {\n const saved = _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getData(`${this.prefix}s`);\n if (!saved) return;\n Object.assign(this.state, saved);\n }\n\n saveState() {\n _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setData(`${this.prefix}s`, this.state);\n }\n\n watchAddons() {\n if (this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, `Already watching ${this.prefix} addons.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(this.name, `Starting to watch ${this.prefix} addons.`);\n this.watcher = fs.watch(this.addonFolder, {\n persistent: false\n }, async (eventType, filename) => {\n if (!eventType || !filename || !filename.endsWith(this.extension)) return;\n await new Promise(r => setTimeout(r, 50));\n\n try {\n fs.statSync(path.resolve(this.addonFolder, filename));\n } catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete this.timeCache[filename];\n this.unloadAddon(filename, true);\n }\n\n if (!fs.statSync(path.resolve(this.addonFolder, filename)).isFile()) return;\n const stats = fs.statSync(path.resolve(this.addonFolder, filename));\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof stats.mtime.getTime() !== \"number\") return;\n if (this.timeCache[filename] == stats.mtime.getTime()) return;\n this.timeCache[filename] = stats.mtime.getTime();\n if (eventType == \"rename\") this.loadAddon(filename, true);\n if (eventType == \"change\") this.reloadAddon(filename, true);\n });\n }\n\n unwatchAddons() {\n if (!this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, `Was not watching ${this.prefix} addons.`);\n this.watcher.close();\n delete this.watcher;\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(this.name, `No longer watching ${this.prefix} addons.`);\n }\n\n extractMeta(fileContent) {\n const firstLine = fileContent.split(\"\\n\")[0];\n const hasOldMeta = firstLine.includes(\"//META\");\n if (hasOldMeta) return this.parseOldMeta(fileContent);\n const hasNewMeta = firstLine.includes(\"/**\");\n if (hasNewMeta) return this.parseNewMeta(fileContent);\n throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META was not found.\");\n }\n\n parseOldMeta(fileContent) {\n const meta = fileContent.split(\"\\n\")[0];\n const metaData = meta.substring(meta.lastIndexOf(\"//META\") + 6, meta.lastIndexOf(\"*//\"));\n const parsed = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(metaData);\n if (!parsed) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META could not be parsed.\");\n if (!parsed.name) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META missing name data.\");\n return parsed;\n }\n\n parseNewMeta(fileContent) {\n const block = fileContent.split(\"/**\", 2)[1].split(\"*/\", 1)[0];\n const out = {};\n let field = \"\";\n let accum = \"\";\n\n for (const line of block.split(splitRegex)) {\n if (line.length === 0) continue;\n\n if (line.charAt(0) === \"@\" && line.charAt(1) !== \" \") {\n out[field] = accum;\n const l = line.indexOf(\" \");\n field = line.substr(1, l - 1);\n accum = line.substr(l + 1);\n } else {\n accum += \" \" + line.replace(\"\\\\n\", \"\\n\").replace(escapedAtRegex, \"@\");\n }\n }\n\n out[field] = accum.trim();\n delete out[\"\"];\n return out;\n }\n\n getAddonRequire() {\n const self = this; // const baseFolder = this.addonFolder;\n\n const originalRequire = this.originalRequire;\n return function (module, filename) {\n const possiblePath = path.resolve(self.addonFolder, path.basename(filename));\n if (!fs.existsSync(possiblePath) || filename !== fs.realpathSync(possiblePath)) return Reflect.apply(originalRequire, this, arguments);\n let fileContent = fs.readFileSync(filename, \"utf8\");\n fileContent = stripBOM(fileContent);\n const stats = fs.statSync(filename);\n const meta = self.extractMeta(fileContent);\n meta.id = meta.name;\n meta.filename = path.basename(filename);\n meta.added = stats.atimeMs;\n meta.modified = stats.mtimeMs;\n meta.size = stats.size;\n fileContent = self.getFileModification(module, fileContent, meta);\n\n module._compile(fileContent, filename);\n };\n } // Subclasses should use the return (if not AddonError) and push to this.addonList\n\n\n loadAddon(filename, shouldToast = false) {\n if (typeof filename === \"undefined\") return;\n\n try {\n require(path.resolve(this.addonFolder, filename));\n } catch (error) {\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](filename, filename, \"Could not be compiled.\", {\n message: error.message,\n stack: error.stack\n });\n }\n\n const addon = require(path.resolve(this.addonFolder, filename));\n\n if (this.addonList.find(c => c.id == addon.id)) return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](addon.name, filename, `There is already a plugin with name ${addon.name}`);\n const error = this.initializeAddon(addon);\n if (error) return error;\n this.addonList.push(addon);\n if (shouldToast) _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].success(`${addon.name} v${addon.version} was loaded.`);\n this.emit(\"loaded\", addon.id);\n if (!this.state[addon.id]) return this.state[addon.id] = false;\n return this.startAddon(addon);\n }\n\n unloadAddon(idOrFileOrAddon, shouldToast = true, isReload = false) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n if (!addon) return false;\n if (this.state[addon.id]) isReload ? this.stopAddon(addon) : this.disableAddon(addon);\n delete require.cache[require.resolve(path.resolve(this.addonFolder, addon.filename))];\n this.addonList.splice(this.addonList.indexOf(addon), 1);\n this.emit(\"unloaded\", addon.id);\n if (shouldToast) _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].success(`${addon.name} was unloaded.`);\n return true;\n }\n\n reloadAddon(idOrFileOrAddon, shouldToast = true) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n const didUnload = this.unloadAddon(addon, shouldToast, true);\n if (!didUnload) return didUnload;\n return this.loadAddon(addon.filename, shouldToast);\n }\n\n isLoaded(idOrFile) {\n const addon = this.addonList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!addon) return false;\n return true;\n }\n\n isEnabled(idOrFile) {\n const addon = this.addonList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!addon) return false;\n return this.state[addon.id];\n }\n\n enableAddon(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n if (this.state[addon.id]) return;\n this.state[addon.id] = true;\n this.startAddon(addon);\n this.saveState();\n }\n\n disableAddon(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n if (!this.state[addon.id]) return;\n this.state[addon.id] = false;\n this.stopAddon(addon);\n this.saveState();\n }\n\n toggleAddon(id) {\n if (this.state[id]) this.disableAddon(id);else this.enableAddon(id);\n }\n\n loadNewAddons() {\n const files = fs.readdirSync(this.addonFolder);\n const removed = this.addonList.filter(t => !files.includes(t.filename)).map(c => c.id);\n const added = files.filter(f => !this.addonList.find(t => t.filename == f) && f.endsWith(this.extension) && fs.statSync(path.resolve(this.addonFolder, f)).isFile());\n return {\n added,\n removed\n };\n }\n\n updateList() {\n const results = this.loadNewAddons();\n\n for (const filename of results.added) this.loadAddon(filename);\n\n for (const name of results.removed) this.unloadAddon(name);\n }\n\n loadAllAddons() {\n this.loadState();\n const errors = [];\n const files = fs.readdirSync(this.addonFolder);\n\n for (const filename of files) {\n if (!fs.statSync(path.resolve(this.addonFolder, filename)).isFile() || !filename.endsWith(this.extension)) continue;\n const addon = this.loadAddon(filename, false);\n if (addon instanceof _structs_addonerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"]) errors.push(addon);\n }\n\n this.saveState();\n if (_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(this.collection, this.category, this.id)) this.watchAddons();\n return errors;\n }\n\n deleteAddon(idOrFileOrAddon) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n return fs.unlinkSync(path.resolve(this.addonFolder, addon.filename));\n }\n\n saveAddon(idOrFileOrAddon, content) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n return fs.writeFileSync(path.resolve(this.addonFolder, addon.filename), content);\n }\n\n editAddon(idOrFileOrAddon, system) {\n const addon = typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n const fullPath = path.resolve(this.addonFolder, addon.filename);\n if (typeof system == \"undefined\") system = _settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].get(\"settings\", \"addons\", \"editAction\") == \"system\";\n if (system) return __webpack_require__(/*! electron */ \"electron\").shell.openItem(`${fullPath}`);\n return this.openDetached(addon);\n }\n\n openDetached(addon) {\n const fullPath = path.resolve(this.addonFolder, addon.filename);\n const content = fs.readFileSync(fullPath).toString();\n const editorRef = React.createRef();\n const editor = React.createElement(_ui_misc_addoneditor__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n id: \"bd-floating-editor-\" + addon.name,\n ref: editorRef,\n content: content,\n save: this.saveAddon.bind(this, addon),\n openNative: this.editAddon.bind(this, addon, true),\n language: this.language\n });\n _ui_floating_container__WEBPACK_IMPORTED_MODULE_11__[\"default\"].open({\n onClose: () => {\n this.isDetached = false;\n },\n onResize: () => {\n if (!editorRef || !editorRef.current || !editorRef.current.resize) return;\n editorRef.current.resize();\n },\n title: addon.name,\n id: content.id,\n className: \"floating-addon-window\",\n height: 470,\n width: 410,\n center: true,\n resizable: true,\n children: editor,\n confirmClose: () => {\n if (!editorRef || !editorRef.current) return false;\n return editorRef.current.hasUnsavedChanges;\n },\n confirmationText: _strings__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Addons.confirmationText.format({\n name: addon.name\n })\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvYWRkb25tYW5hZ2VyLmpzP2NlYTkiXSwibmFtZXMiOlsiUmVhY3QiLCJEaXNjb3JkTW9kdWxlcyIsInBhdGgiLCJyZXF1aXJlIiwiZnMiLCJNb2R1bGUiLCJnbG9iYWxQYXRocyIsInB1c2giLCJyZXNvbHZlIiwicmVtb3RlIiwiYXBwIiwiZ2V0QXBwUGF0aCIsInNwbGl0UmVnZXgiLCJlc2NhcGVkQXRSZWdleCIsInN0cmlwQk9NIiwiZmlsZUNvbnRlbnQiLCJjaGFyQ29kZUF0Iiwic2xpY2UiLCJBZGRvbk1hbmFnZXIiLCJuYW1lIiwibW9kdWxlRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiYWRkb25Gb2xkZXIiLCJsYW5ndWFnZSIsInByZWZpeCIsImNvbGxlY3Rpb24iLCJjYXRlZ29yeSIsImlkIiwiZW1pdCIsImV2ZW50IiwiYXJncyIsIkV2ZW50cyIsImNvbnN0cnVjdG9yIiwidGltZUNhY2hlIiwiYWRkb25MaXN0Iiwic3RhdGUiLCJpbml0aWFsaXplIiwib3JpZ2luYWxSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJnZXRBZGRvblJlcXVpcmUiLCJTZXR0aW5ncyIsIm9uIiwiZW5hYmxlZCIsIndhdGNoQWRkb25zIiwidW53YXRjaEFkZG9ucyIsImxvYWRBbGxBZGRvbnMiLCJpbml0aWFsaXplQWRkb24iLCJnZXRGaWxlTW9kaWZpY2F0aW9uIiwibW9kdWxlIiwic3RhcnRBZGRvbiIsInN0b3BBZGRvbiIsImxvYWRTdGF0ZSIsInNhdmVkIiwiRGF0YVN0b3JlIiwiZ2V0RGF0YSIsIk9iamVjdCIsImFzc2lnbiIsInNhdmVTdGF0ZSIsInNldERhdGEiLCJ3YXRjaGVyIiwiTG9nZ2VyIiwiZXJyb3IiLCJsb2ciLCJ3YXRjaCIsInBlcnNpc3RlbnQiLCJldmVudFR5cGUiLCJmaWxlbmFtZSIsImVuZHNXaXRoIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkQWRkb24iLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRBZGRvbiIsInJlbG9hZEFkZG9uIiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsInNwbGl0IiwiaGFzT2xkTWV0YSIsImluY2x1ZGVzIiwicGFyc2VPbGRNZXRhIiwiaGFzTmV3TWV0YSIsInBhcnNlTmV3TWV0YSIsIk1ldGFFcnJvciIsIm1ldGEiLCJtZXRhRGF0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicGFyc2VkIiwiVXRpbGl0aWVzIiwidGVzdEpTT04iLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwibGVuZ3RoIiwiY2hhckF0IiwibCIsImluZGV4T2YiLCJzdWJzdHIiLCJyZXBsYWNlIiwidHJpbSIsInNlbGYiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFscGF0aFN5bmMiLCJSZWZsZWN0IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJyZWFkRmlsZVN5bmMiLCJhZGRlZCIsImF0aW1lTXMiLCJtb2RpZmllZCIsIm10aW1lTXMiLCJzaXplIiwiX2NvbXBpbGUiLCJzaG91bGRUb2FzdCIsIl9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fIiwiQWRkb25FcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsImFkZG9uIiwiZmluZCIsImMiLCJUb2FzdHMiLCJzdWNjZXNzIiwidmVyc2lvbiIsImlkT3JGaWxlT3JBZGRvbiIsImlzUmVsb2FkIiwiZGlzYWJsZUFkZG9uIiwiY2FjaGUiLCJzcGxpY2UiLCJkaWRVbmxvYWQiLCJpc0xvYWRlZCIsImlkT3JGaWxlIiwiaXNFbmFibGVkIiwiZW5hYmxlQWRkb24iLCJpZE9yQWRkb24iLCJwIiwidG9nZ2xlQWRkb24iLCJsb2FkTmV3QWRkb25zIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsInJlbW92ZWQiLCJmaWx0ZXIiLCJ0IiwibWFwIiwiZiIsInVwZGF0ZUxpc3QiLCJyZXN1bHRzIiwiZXJyb3JzIiwiZ2V0IiwiZGVsZXRlQWRkb24iLCJ1bmxpbmtTeW5jIiwic2F2ZUFkZG9uIiwiY29udGVudCIsIndyaXRlRmlsZVN5bmMiLCJlZGl0QWRkb24iLCJzeXN0ZW0iLCJmdWxsUGF0aCIsInNoZWxsIiwib3Blbkl0ZW0iLCJvcGVuRGV0YWNoZWQiLCJ0b1N0cmluZyIsImVkaXRvclJlZiIsImNyZWF0ZVJlZiIsImVkaXRvciIsImNyZWF0ZUVsZW1lbnQiLCJBZGRvbkVkaXRvciIsInJlZiIsInNhdmUiLCJiaW5kIiwib3Blbk5hdGl2ZSIsIkZsb2F0aW5nV2luZG93Q29udGFpbmVyIiwib3BlbiIsIm9uQ2xvc2UiLCJpc0RldGFjaGVkIiwib25SZXNpemUiLCJjdXJyZW50IiwicmVzaXplIiwidGl0bGUiLCJjbGFzc05hbWUiLCJoZWlnaHQiLCJ3aWR0aCIsImNlbnRlciIsInJlc2l6YWJsZSIsImNoaWxkcmVuIiwiY29uZmlybUNsb3NlIiwiaGFzVW5zYXZlZENoYW5nZXMiLCJjb25maXJtYXRpb25UZXh0IiwiU3RyaW5ncyIsIkFkZG9ucyIsImZvcm1hdCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBLE1BQU1BLEtBQUssR0FBR0MsdURBQWMsQ0FBQ0QsS0FBN0I7O0FBRUEsTUFBTUUsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLE1BQU1DLEVBQUUsR0FBR0QsbUJBQU8sQ0FBQyxjQUFELENBQWxCOztBQUNBLE1BQU1FLE1BQU0sR0FBR0YsbUJBQU8sQ0FBQyxzQkFBRCxDQUFQLENBQWtCRSxNQUFqQzs7QUFDQUEsTUFBTSxDQUFDQyxXQUFQLENBQW1CQyxJQUFuQixDQUF3QkwsSUFBSSxDQUFDTSxPQUFMLENBQWFMLG1CQUFPLENBQUMsMEJBQUQsQ0FB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LE9BUHdCO0FBUXpCQyxXQUFLLEVBQUUzRCxLQUFLLENBQUMvRyxJQVJZO0FBU3pCUSxRQUFFLEVBQUV5SSxPQUFPLENBQUN6SSxFQVRhO0FBVXpCbUssZUFBUyxFQUFFLHVCQVZjO0FBV3pCQyxZQUFNLEVBQUUsR0FYaUI7QUFZekJDLFdBQUssRUFBRSxHQVprQjtBQWF6QkMsWUFBTSxFQUFFLElBYmlCO0FBY3pCQyxlQUFTLEVBQUUsSUFkYztBQWV6QkMsY0FBUSxFQUFFcEIsTUFmZTtBQWdCekJxQixrQkFBWSxFQUFFLE1BQU07QUFDaEIsWUFBSSxDQUFDdkIsU0FBRCxJQUFjLENBQUNBLFNBQVMsQ0FBQ2MsT0FBN0IsRUFBc0MsT0FBTyxLQUFQO0FBQ3RDLGVBQU9kLFNBQVMsQ0FBQ2MsT0FBVixDQUFrQlUsaUJBQXpCO0FBQ0gsT0FuQndCO0FBb0J6QkMsc0JBQWdCLEVBQUVDLGdEQUFPLENBQUNDLE1BQVIsQ0FBZUYsZ0JBQWYsQ0FBZ0NHLE1BQWhDLENBQXVDO0FBQUN0TCxZQUFJLEVBQUUrRyxLQUFLLENBQUMvRztBQUFiLE9BQXZDO0FBcEJPLEtBQTdCO0FBc0JIOztBQXBTNkIiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9hZGRvbm1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vZW1pdHRlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgQWRkb25FcnJvciBmcm9tIFwiLi4vc3RydWN0cy9hZGRvbmVycm9yXCI7XHJcbmltcG9ydCBNZXRhRXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvbWV0YWVycm9yXCI7XHJcbmltcG9ydCBUb2FzdHMgZnJvbSBcIi4uL3VpL3RvYXN0c1wiO1xyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuaW1wb3J0IFN0cmluZ3MgZnJvbSBcIi4vc3RyaW5nc1wiO1xyXG5cclxuaW1wb3J0IEFkZG9uRWRpdG9yIGZyb20gXCIuLi91aS9taXNjL2FkZG9uZWRpdG9yXCI7XHJcbmltcG9ydCBGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciBmcm9tIFwiLi4vdWkvZmxvYXRpbmcvY29udGFpbmVyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IERpc2NvcmRNb2R1bGVzLlJlYWN0O1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKS5Nb2R1bGU7XHJcbk1vZHVsZS5nbG9iYWxQYXRocy5wdXNoKHBhdGgucmVzb2x2ZShyZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcC5nZXRBcHBQYXRoKCksIFwibm9kZV9tb2R1bGVzXCIpKTtcclxuXHJcbmNvbnN0IHNwbGl0UmVnZXggPSAvW15cXFNcXHJcXG5dKj9cXHI/XFxuW15cXFNcXHJcXG5dKj9cXCpbXlxcU1xcclxcbl0/LztcclxuY29uc3QgZXNjYXBlZEF0UmVnZXggPSAvXlxcXFxALztcclxuXHJcbmNvbnN0IHN0cmlwQk9NID0gZnVuY3Rpb24oZmlsZUNvbnRlbnQpIHtcclxuICAgIGlmIChmaWxlQ29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcclxuICAgICAgICBmaWxlQ29udGVudCA9IGZpbGVDb250ZW50LnNsaWNlKDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVDb250ZW50O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRkb25NYW5hZ2VyIHtcclxuXHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgbW9kdWxlRXh0ZW5zaW9uKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IGFkZG9uRm9sZGVyKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBsYW5ndWFnZSgpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgcHJlZml4KCkge3JldHVybiBcImFkZG9uXCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwic2V0dGluZ3NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiYWRkb25zXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImF1dG9SZWxvYWRcIjt9XHJcbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7cmV0dXJuIEV2ZW50cy5lbWl0KGAke3RoaXMucHJlZml4fS0ke2V2ZW50fWAsIC4uLmFyZ3MpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRpbWVDYWNoZSA9IHt9O1xyXG4gICAgICAgIHRoaXMuYWRkb25MaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbdGhpcy5tb2R1bGVFeHRlbnNpb25dO1xyXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1t0aGlzLm1vZHVsZUV4dGVuc2lvbl0gPSB0aGlzLmdldEFkZG9uUmVxdWlyZSgpO1xyXG4gICAgICAgIFNldHRpbmdzLm9uKHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgdGhpcy5pZCwgKGVuYWJsZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHRoaXMud2F0Y2hBZGRvbnMoKTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnVud2F0Y2hBZGRvbnMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQWxsQWRkb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcmxvYWQgdGhpcyBhbmQgbW9kaWZ5IHRoZSBhZGRvbiBvYmplY3QgYXMgbmVlZGVkIHRvIGZ1bGx5IGxvYWQgaXRcclxuICAgIGluaXRpYWxpemVBZGRvbigpIHtyZXR1cm47fVxyXG5cclxuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJsb2FkIHRoaXMgYW5kIG1vZGlmeSB0aGUgZmlsZUNvbnRlbnQgYXMgbmVlZGVkIHRvIHJlcXVpcmUoKSB0aGUgZmlsZVxyXG4gICAgZ2V0RmlsZU1vZGlmaWNhdGlvbihtb2R1bGUsIGZpbGVDb250ZW50KSB7cmV0dXJuIGZpbGVDb250ZW50O31cclxuXHJcbiAgICBzdGFydEFkZG9uKCkge3JldHVybjt9XHJcbiAgICBzdG9wQWRkb24oKSB7cmV0dXJuO31cclxuXHJcbiAgICBsb2FkU3RhdGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0RGF0YShgJHt0aGlzLnByZWZpeH1zYCk7XHJcbiAgICAgICAgaWYgKCFzYXZlZCkgcmV0dXJuO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5zdGF0ZSwgc2F2ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTdGF0ZSgpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0RGF0YShgJHt0aGlzLnByZWZpeH1zYCwgdGhpcy5zdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2F0Y2hBZGRvbnMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcikgcmV0dXJuIExvZ2dlci5lcnJvcih0aGlzLm5hbWUsIGBBbHJlYWR5IHdhdGNoaW5nICR7dGhpcy5wcmVmaXh9IGFkZG9ucy5gKTtcclxuICAgICAgICBMb2dnZXIubG9nKHRoaXMubmFtZSwgYFN0YXJ0aW5nIHRvIHdhdGNoICR7dGhpcy5wcmVmaXh9IGFkZG9ucy5gKTtcclxuICAgICAgICB0aGlzLndhdGNoZXIgPSBmcy53YXRjaCh0aGlzLmFkZG9uRm9sZGVyLCB7cGVyc2lzdGVudDogZmFsc2V9LCBhc3luYyAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50VHlwZSB8fCAhZmlsZW5hbWUgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcclxuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5hZGRvbkZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5sb2FkQWRkb24oZmlsZW5hbWUsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5hZGRvbkZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubXRpbWUgfHwgIXN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHN0YXRzLm10aW1lLmdldFRpbWUoKSkgIT09IFwibnVtYmVyXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9PSBzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID0gc3RhdHMubXRpbWUuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwicmVuYW1lXCIpIHRoaXMubG9hZEFkZG9uKGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB0aGlzLnJlbG9hZEFkZG9uKGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bndhdGNoQWRkb25zKCkge1xyXG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyKSByZXR1cm4gTG9nZ2VyLmVycm9yKHRoaXMubmFtZSwgYFdhcyBub3Qgd2F0Y2hpbmcgJHt0aGlzLnByZWZpeH0gYWRkb25zLmApO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlci5jbG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLndhdGNoZXI7XHJcbiAgICAgICAgTG9nZ2VyLmxvZyh0aGlzLm5hbWUsIGBObyBsb25nZXIgd2F0Y2hpbmcgJHt0aGlzLnByZWZpeH0gYWRkb25zLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dHJhY3RNZXRhKGZpbGVDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gZmlsZUNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgaGFzT2xkTWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8vTUVUQVwiKTtcclxuICAgICAgICBpZiAoaGFzT2xkTWV0YSkgcmV0dXJuIHRoaXMucGFyc2VPbGRNZXRhKGZpbGVDb250ZW50KTtcclxuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xyXG4gICAgICAgIGlmIChoYXNOZXdNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU5ld01ldGEoZmlsZUNvbnRlbnQpO1xyXG4gICAgICAgIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlT2xkTWV0YShmaWxlQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IG1ldGEgPSBmaWxlQ29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCBtZXRhRGF0YSA9IG1ldGEuc3Vic3RyaW5nKG1ldGEubGFzdEluZGV4T2YoXCIvL01FVEFcIikgKyA2LCBtZXRhLmxhc3RJbmRleE9mKFwiKi8vXCIpKTtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBVdGlsaXRpZXMudGVzdEpTT04obWV0YURhdGEpO1xyXG4gICAgICAgIGlmICghcGFyc2VkKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBjb3VsZCBub3QgYmUgcGFyc2VkLlwiKTtcclxuICAgICAgICBpZiAoIXBhcnNlZC5uYW1lKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBtaXNzaW5nIG5hbWUgZGF0YS5cIik7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU5ld01ldGEoZmlsZUNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBibG9jayA9IGZpbGVDb250ZW50LnNwbGl0KFwiLyoqXCIsIDIpWzFdLnNwbGl0KFwiKi9cIiwgMSlbMF07XHJcbiAgICAgICAgY29uc3Qgb3V0ID0ge307XHJcbiAgICAgICAgbGV0IGZpZWxkID0gXCJcIjtcclxuICAgICAgICBsZXQgYWNjdW0gPSBcIlwiO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBibG9jay5zcGxpdChzcGxpdFJlZ2V4KSkge1xyXG4gICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoMCkgPT09IFwiQFwiICYmIGxpbmUuY2hhckF0KDEpICE9PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGxpbmUuaW5kZXhPZihcIiBcIik7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUuc3Vic3RyKDEsIGwgLSAxKTtcclxuICAgICAgICAgICAgICAgIGFjY3VtID0gbGluZS5zdWJzdHIobCArIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gKz0gXCIgXCIgKyBsaW5lLnJlcGxhY2UoXCJcXFxcblwiLCBcIlxcblwiKS5yZXBsYWNlKGVzY2FwZWRBdFJlZ2V4LCBcIkBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtLnRyaW0oKTtcclxuICAgICAgICBkZWxldGUgb3V0W1wiXCJdO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkb25SZXF1aXJlKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIGNvbnN0IGJhc2VGb2xkZXIgPSB0aGlzLmFkZG9uRm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWlyZSA9IHRoaXMub3JpZ2luYWxSZXF1aXJlO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb2R1bGUsIGZpbGVuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0aCA9IHBhdGgucmVzb2x2ZShzZWxmLmFkZG9uRm9sZGVyLCBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwb3NzaWJsZVBhdGgpIHx8IGZpbGVuYW1lICE9PSBmcy5yZWFscGF0aFN5bmMocG9zc2libGVQYXRoKSkgcmV0dXJuIFJlZmxlY3QuYXBwbHkob3JpZ2luYWxSZXF1aXJlLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICBsZXQgZmlsZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIFwidXRmOFwiKTtcclxuICAgICAgICAgICAgZmlsZUNvbnRlbnQgPSBzdHJpcEJPTShmaWxlQ29udGVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc2VsZi5leHRyYWN0TWV0YShmaWxlQ29udGVudCk7XHJcbiAgICAgICAgICAgIG1ldGEuaWQgPSBtZXRhLm5hbWU7XHJcbiAgICAgICAgICAgIG1ldGEuZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgbWV0YS5hZGRlZCA9IHN0YXRzLmF0aW1lTXM7XHJcbiAgICAgICAgICAgIG1ldGEubW9kaWZpZWQgPSBzdGF0cy5tdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLnNpemUgPSBzdGF0cy5zaXplO1xyXG4gICAgICAgICAgICBmaWxlQ29udGVudCA9IHNlbGYuZ2V0RmlsZU1vZGlmaWNhdGlvbihtb2R1bGUsIGZpbGVDb250ZW50LCBtZXRhKTtcclxuICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGZpbGVDb250ZW50LCBmaWxlbmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCB1c2UgdGhlIHJldHVybiAoaWYgbm90IEFkZG9uRXJyb3IpIGFuZCBwdXNoIHRvIHRoaXMuYWRkb25MaXN0XHJcbiAgICBsb2FkQWRkb24oZmlsZW5hbWUsIHNob3VsZFRvYXN0ID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIHRyeSB7X19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiBuZXcgQWRkb25FcnJvcihmaWxlbmFtZSwgZmlsZW5hbWUsIFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfSk7fVxyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gX19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGFkZG9uLmlkKSkgcmV0dXJuIG5ldyBBZGRvbkVycm9yKGFkZG9uLm5hbWUsIGZpbGVuYW1lLCBgVGhlcmUgaXMgYWxyZWFkeSBhIHBsdWdpbiB3aXRoIG5hbWUgJHthZGRvbi5uYW1lfWApO1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5pbml0aWFsaXplQWRkb24oYWRkb24pO1xyXG4gICAgICAgIGlmIChlcnJvcikgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgIHRoaXMuYWRkb25MaXN0LnB1c2goYWRkb24pO1xyXG4gICAgICAgIGlmIChzaG91bGRUb2FzdCkgVG9hc3RzLnN1Y2Nlc3MoYCR7YWRkb24ubmFtZX0gdiR7YWRkb24udmVyc2lvbn0gd2FzIGxvYWRlZC5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoXCJsb2FkZWRcIiwgYWRkb24uaWQpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGVbYWRkb24uaWRdKSByZXR1cm4gdGhpcy5zdGF0ZVthZGRvbi5pZF0gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydEFkZG9uKGFkZG9uKTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWRBZGRvbihpZE9yRmlsZU9yQWRkb24sIHNob3VsZFRvYXN0ID0gdHJ1ZSwgaXNSZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JGaWxlT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JBZGRvbiB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JBZGRvbikgOiBpZE9yRmlsZU9yQWRkb247XHJcbiAgICAgICAgaWYgKCFhZGRvbikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2FkZG9uLmlkXSkgaXNSZWxvYWQgPyB0aGlzLnN0b3BBZGRvbihhZGRvbikgOiB0aGlzLmRpc2FibGVBZGRvbihhZGRvbik7XHJcbiAgICAgICAgZGVsZXRlIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLmNhY2hlW19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLnJlc29sdmUocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGFkZG9uLmZpbGVuYW1lKSldO1xyXG4gICAgICAgIHRoaXMuYWRkb25MaXN0LnNwbGljZSh0aGlzLmFkZG9uTGlzdC5pbmRleE9mKGFkZG9uKSwgMSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KFwidW5sb2FkZWRcIiwgYWRkb24uaWQpO1xyXG4gICAgICAgIGlmIChzaG91bGRUb2FzdCkgVG9hc3RzLnN1Y2Nlc3MoYCR7YWRkb24ubmFtZX0gd2FzIHVubG9hZGVkLmApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZEFkZG9uKGlkT3JGaWxlT3JBZGRvbiwgc2hvdWxkVG9hc3QgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckZpbGVPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChjID0+IGMuaWQgPT0gaWRPckZpbGVPckFkZG9uIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGVPckFkZG9uKSA6IGlkT3JGaWxlT3JBZGRvbjtcclxuICAgICAgICBjb25zdCBkaWRVbmxvYWQgPSB0aGlzLnVubG9hZEFkZG9uKGFkZG9uLCBzaG91bGRUb2FzdCwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCFkaWRVbmxvYWQpIHJldHVybiBkaWRVbmxvYWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFkZG9uKGFkZG9uLmZpbGVuYW1lLCBzaG91bGRUb2FzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNMb2FkZWQoaWRPckZpbGUpIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGUpO1xyXG4gICAgICAgIGlmICghYWRkb24pIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0VuYWJsZWQoaWRPckZpbGUpIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGUpO1xyXG4gICAgICAgIGlmICghYWRkb24pIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZVthZGRvbi5pZF07XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlQWRkb24oaWRPckFkZG9uKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckFkZG9uKSA6IGlkT3JBZGRvbjtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbYWRkb24uaWRdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGF0ZVthZGRvbi5pZF0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhcnRBZGRvbihhZGRvbik7XHJcbiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlQWRkb24oaWRPckFkZG9uKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckFkZG9uKSA6IGlkT3JBZGRvbjtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2FkZG9uLmlkXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhdGVbYWRkb24uaWRdID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdG9wQWRkb24oYWRkb24pO1xyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlQWRkb24oaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZVtpZF0pIHRoaXMuZGlzYWJsZUFkZG9uKGlkKTtcclxuICAgICAgICBlbHNlIHRoaXMuZW5hYmxlQWRkb24oaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWROZXdBZGRvbnMoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLmFkZG9uRm9sZGVyKTtcclxuICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5hZGRvbkxpc3QuZmlsdGVyKHQgPT4gIWZpbGVzLmluY2x1ZGVzKHQuZmlsZW5hbWUpKS5tYXAoYyA9PiBjLmlkKTtcclxuICAgICAgICBjb25zdCBhZGRlZCA9IGZpbGVzLmZpbHRlcihmID0+ICF0aGlzLmFkZG9uTGlzdC5maW5kKHQgPT4gdC5maWxlbmFtZSA9PSBmKSAmJiBmLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSAmJiBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5hZGRvbkZvbGRlciwgZikpLmlzRmlsZSgpKTtcclxuICAgICAgICByZXR1cm4ge2FkZGVkLCByZW1vdmVkfTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMaXN0KCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmxvYWROZXdBZGRvbnMoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZEFkZG9uKGZpbGVuYW1lKTtcclxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZEFkZG9uKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBbGxBZGRvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkU3RhdGUoKTtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRoaXMuYWRkb25Gb2xkZXIpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5sb2FkQWRkb24oZmlsZW5hbWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKGFkZG9uIGluc3RhbmNlb2YgQWRkb25FcnJvcikgZXJyb3JzLnB1c2goYWRkb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcclxuICAgICAgICBpZiAoU2V0dGluZ3MuZ2V0KHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgdGhpcy5pZCkpIHRoaXMud2F0Y2hBZGRvbnMoKTtcclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUFkZG9uKGlkT3JGaWxlT3JBZGRvbikge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JGaWxlT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JBZGRvbiB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JBZGRvbikgOiBpZE9yRmlsZU9yQWRkb247XHJcbiAgICAgICAgcmV0dXJuIGZzLnVubGlua1N5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGFkZG9uLmZpbGVuYW1lKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUFkZG9uKGlkT3JGaWxlT3JBZGRvbiwgY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JGaWxlT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JBZGRvbiB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JBZGRvbikgOiBpZE9yRmlsZU9yQWRkb247XHJcbiAgICAgICAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMocGF0aC5yZXNvbHZlKHRoaXMuYWRkb25Gb2xkZXIsIGFkZG9uLmZpbGVuYW1lKSwgY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdEFkZG9uKGlkT3JGaWxlT3JBZGRvbiwgc3lzdGVtKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckZpbGVPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChjID0+IGMuaWQgPT0gaWRPckZpbGVPckFkZG9uIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGVPckFkZG9uKSA6IGlkT3JGaWxlT3JBZGRvbjtcclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBhZGRvbi5maWxlbmFtZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZihzeXN0ZW0pID09IFwidW5kZWZpbmVkXCIpIHN5c3RlbSA9IFNldHRpbmdzLmdldChcInNldHRpbmdzXCIsIFwiYWRkb25zXCIsIFwiZWRpdEFjdGlvblwiKSA9PSBcInN5c3RlbVwiO1xyXG4gICAgICAgIGlmIChzeXN0ZW0pIHJldHVybiByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkRldGFjaGVkKGFkZG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRGV0YWNoZWQoYWRkb24pIHtcclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmFkZG9uRm9sZGVyLCBhZGRvbi5maWxlbmFtZSk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmdWxsUGF0aCkudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWRpdG9yUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbiAgICAgICAgY29uc3QgZWRpdG9yID0gUmVhY3QuY3JlYXRlRWxlbWVudChBZGRvbkVkaXRvciwge1xyXG4gICAgICAgICAgICBpZDogXCJiZC1mbG9hdGluZy1lZGl0b3ItXCIgKyBhZGRvbi5uYW1lLFxyXG4gICAgICAgICAgICByZWY6IGVkaXRvclJlZixcclxuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcclxuICAgICAgICAgICAgc2F2ZTogdGhpcy5zYXZlQWRkb24uYmluZCh0aGlzLCBhZGRvbiksXHJcbiAgICAgICAgICAgIG9wZW5OYXRpdmU6IHRoaXMuZWRpdEFkZG9uLmJpbmQodGhpcywgYWRkb24sIHRydWUpLFxyXG4gICAgICAgICAgICBsYW5ndWFnZTogdGhpcy5sYW5ndWFnZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBGbG9hdGluZ1dpbmRvd0NvbnRhaW5lci5vcGVuKHtcclxuICAgICAgICAgICAgb25DbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uUmVzaXplOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVkaXRvclJlZiB8fCAhZWRpdG9yUmVmLmN1cnJlbnQgfHwgIWVkaXRvclJlZi5jdXJyZW50LnJlc2l6ZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQucmVzaXplKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRpdGxlOiBhZGRvbi5uYW1lLFxyXG4gICAgICAgICAgICBpZDogY29udGVudC5pZCxcclxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImZsb2F0aW5nLWFkZG9uLXdpbmRvd1wiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDQ3MCxcclxuICAgICAgICAgICAgd2lkdGg6IDQxMCxcclxuICAgICAgICAgICAgY2VudGVyOiB0cnVlLFxyXG4gICAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBlZGl0b3IsXHJcbiAgICAgICAgICAgIGNvbmZpcm1DbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlZGl0b3JSZWYgfHwgIWVkaXRvclJlZi5jdXJyZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWRpdG9yUmVmLmN1cnJlbnQuaGFzVW5zYXZlZENoYW5nZXM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbmZpcm1hdGlvblRleHQ6IFN0cmluZ3MuQWRkb25zLmNvbmZpcm1hdGlvblRleHQuZm9ybWF0KHtuYW1lOiBhZGRvbi5uYW1lfSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/addonmanager.js\n"); /***/ }), @@ -491,7 +491,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _uti /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _addonmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./addonmanager */ \"./src/modules/addonmanager.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../structs/addonerror */ \"./src/structs/addonerror.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _ui_settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../ui/settings */ \"./src/ui/settings.js\");\n\n\n\n\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst electronRemote = __webpack_require__(/*! electron */ \"electron\").remote;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PluginManager extends _addonmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n get name() {\n return \"PluginManager\";\n }\n\n get moduleExtension() {\n return \".js\";\n }\n\n get extension() {\n return \".plugin.js\";\n }\n\n get addonFolder() {\n return path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"plugins\");\n }\n\n get prefix() {\n return \"plugin\";\n }\n\n constructor() {\n super();\n this.onSwitch = this.onSwitch.bind(this);\n this.observer = new MutationObserver(mutations => {\n for (let i = 0, mlen = mutations.length; i < mlen; i++) {\n this.onMutation(mutations[i]);\n }\n });\n }\n\n initialize() {\n const errors = super.initialize();\n this.setupFunctions();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].registerPanel(\"plugins\", _strings__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Panels.plugins, {\n element: () => _ui_settings__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getAddonPanel(_strings__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Panels.plugins, this.addonList, this.state, {\n folder: this.addonFolder,\n onChange: this.togglePlugin.bind(this),\n reload: this.reloadPlugin.bind(this),\n refreshList: this.updatePluginList.bind(this)\n })\n });\n return errors;\n }\n /* Aliases */\n\n\n updatePluginList() {\n return this.updateList();\n }\n\n loadAllPlugins() {\n return this.loadAllAddons();\n }\n\n enablePlugin(idOrAddon) {\n return this.enableAddon(idOrAddon);\n }\n\n disablePlugin(idOrAddon) {\n return this.disableAddon(idOrAddon);\n }\n\n togglePlugin(id) {\n return this.toggleAddon(id);\n }\n\n unloadPlugin(idOrFileOrAddon) {\n return this.unloadAddon(idOrFileOrAddon);\n }\n\n loadPlugin(filename) {\n const error = this.loadAddon(filename);\n if (error) _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showAddonErrors({\n themes: [error]\n });\n }\n\n reloadPlugin(idOrFileOrAddon) {\n const error = this.reloadAddon(idOrFileOrAddon);\n if (error) _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showAddonErrors({\n plugins: [error]\n });\n return typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n }\n /* Overrides */\n\n\n initializeAddon(addon) {\n if (!addon.type) return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](addon.name, addon.filename, \"Plugin had no exports\", {\n message: \"Plugin had no exports or no name property.\",\n stack: \"\"\n });\n\n try {\n const thePlugin = new addon.type();\n addon.plugin = thePlugin;\n addon.name = thePlugin.getName() || addon.name;\n addon.author = thePlugin.getAuthor() || addon.author || \"No author\";\n addon.description = thePlugin.getDescription() || addon.description || \"No description\";\n addon.version = thePlugin.getVersion() || addon.version || \"No version\";\n\n try {\n if (typeof addon.plugin.load == \"function\") addon.plugin.load();\n } catch (error) {\n this.state[addon.id] = false;\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](addon.name, addon.filename, \"load() could not be fired.\", {\n message: error.message,\n stack: error.stack\n });\n }\n } catch (error) {\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](addon.name, addon.filename, \"Could not be constructed.\", {\n message: error.message,\n stack: error.stack\n });\n }\n }\n\n getFileModification(module, fileContent, meta) {\n module._compile(fileContent, module.filename);\n\n const didExport = !_utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isEmpty(module.exports);\n\n if (didExport) {\n meta.type = module.exports;\n module.exports = meta;\n return \"\";\n }\n\n fileContent += `\\nmodule.exports = ${JSON.stringify(meta)};\\nmodule.exports.type = ${meta.exports || meta.name};`;\n return fileContent;\n }\n\n startAddon(id) {\n return this.startPlugin(id);\n }\n\n stopAddon(id) {\n return this.stopPlugin(id);\n }\n\n startPlugin(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n const plugin = addon.plugin;\n\n try {\n plugin.start();\n this.emit(\"started\", addon.id);\n _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].show(`${addon.name} v${addon.version} has started.`);\n } catch (err) {\n this.state[addon.id] = false;\n _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].error(`${addon.name} v${addon.version} could not be started.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, addon.name + \" could not be started.\", err);\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](addon.name, addon.filename, \"start() could not be fired.\", {\n message: err.message,\n stack: err.stack\n });\n }\n }\n\n stopPlugin(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n const plugin = addon.plugin;\n\n try {\n plugin.stop();\n this.emit(\"stopped\", addon.id);\n _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].show(`${addon.name} v${addon.version} has stopped.`);\n } catch (err) {\n this.state[addon.id] = false;\n _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].error(`${addon.name} v${addon.version} could not be stopped.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, addon.name + \" could not be stopped.\", err);\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](addon.name, addon.filename, \"stop() could not be fired.\", {\n message: err.message,\n stack: err.stack\n });\n }\n }\n\n setupFunctions() {\n electronRemote.getCurrentWebContents().on(\"did-navigate-in-page\", this.onSwitch.bind(this));\n this.observer.observe(document, {\n childList: true,\n subtree: true\n });\n }\n\n onSwitch() {\n this.emit(\"page-switch\");\n\n for (let i = 0; i < this.addonList.length; i++) {\n const plugin = this.addonList[i].plugin;\n if (!this.state[this.addonList[i].id]) continue;\n\n if (typeof plugin.onSwitch === \"function\") {\n try {\n plugin.onSwitch();\n } catch (err) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, \"Unable to fire onSwitch for \" + this.addonList[i].name + \".\", err);\n }\n }\n }\n }\n\n onMutation(mutation) {\n for (let i = 0; i < this.addonList.length; i++) {\n const plugin = this.addonList[i].plugin;\n if (!this.state[this.addonList[i].id]) continue;\n\n if (typeof plugin.observer === \"function\") {\n try {\n plugin.observer(mutation);\n } catch (err) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, \"Unable to fire observer for \" + this.addonList[i].name + \".\", err);\n }\n }\n }\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2lubWFuYWdlci5qcz9kMTczIl0sIm5hbWVzIjpbInBhdGgiLCJyZXF1aXJlIiwiZWxlY3Ryb25SZW1vdGUiLCJyZW1vdGUiLCJQbHVnaW5NYW5hZ2VyIiwiQWRkb25NYW5hZ2VyIiwibmFtZSIsIm1vZHVsZUV4dGVuc2lvbiIsImV4dGVuc2lvbiIsImFkZG9uRm9sZGVyIiwicmVzb2x2ZSIsIkNvbmZpZyIsImRhdGFQYXRoIiwicHJlZml4IiwiY29uc3RydWN0b3IiLCJvblN3aXRjaCIsImJpbmQiLCJvYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJpIiwibWxlbiIsImxlbmd0aCIsIm9uTXV0YXRpb24iLCJpbml0aWFsaXplIiwiZXJyb3JzIiwic2V0dXBGdW5jdGlvbnMiLCJTZXR0aW5ncyIsInJlZ2lzdGVyUGFuZWwiLCJTdHJpbmdzIiwiUGFuZWxzIiwicGx1Z2lucyIsImVsZW1lbnQiLCJTZXR0aW5nc1JlbmRlcmVyIiwiZ2V0QWRkb25QYW5lbCIsImFkZG9uTGlzdCIsInN0YXRlIiwiZm9sZGVyIiwib25DaGFuZ2UiLCJ0b2dnbGVQbHVnaW4iLCJyZWxvYWQiLCJyZWxvYWRQbHVnaW4iLCJyZWZyZXNoTGlzdCIsInVwZGF0ZVBsdWdpbkxpc3QiLCJ1cGRhdGVMaXN0IiwibG9hZEFsbFBsdWdpbnMiLCJsb2FkQWxsQWRkb25zIiwiZW5hYmxlUGx1Z2luIiwiaWRPckFkZG9uIiwiZW5hYmxlQWRkb24iLCJkaXNhYmxlUGx1Z2luIiwiZGlzYWJsZUFkZG9uIiwiaWQiLCJ0b2dnbGVBZGRvbiIsInVubG9hZFBsdWdpbiIsImlkT3JGaWxlT3JBZGRvbiIsInVubG9hZEFkZG9uIiwibG9hZFBsdWdpbiIsImZpbGVuYW1lIiwiZXJyb3IiLCJsb2FkQWRkb24iLCJNb2RhbHMiLCJzaG93QWRkb25FcnJvcnMiLCJ0aGVtZXMiLCJyZWxvYWRBZGRvbiIsImZpbmQiLCJjIiwiaW5pdGlhbGl6ZUFkZG9uIiwiYWRkb24iLCJ0eXBlIiwiQWRkb25FcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsInRoZVBsdWdpbiIsInBsdWdpbiIsImdldE5hbWUiLCJhdXRob3IiLCJnZXRBdXRob3IiLCJkZXNjcmlwdGlvbiIsImdldERlc2NyaXB0aW9uIiwidmVyc2lvbiIsImdldFZlcnNpb24iLCJsb2FkIiwiZ2V0RmlsZU1vZGlmaWNhdGlvbiIsIm1vZHVsZSIsImZpbGVDb250ZW50IiwibWV0YSIsIl9jb21waWxlIiwiZGlkRXhwb3J0IiwiVXRpbGl0aWVzIiwiaXNFbXB0eSIsImV4cG9ydHMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRBZGRvbiIsInN0YXJ0UGx1Z2luIiwic3RvcEFkZG9uIiwic3RvcFBsdWdpbiIsInAiLCJzdGFydCIsImVtaXQiLCJUb2FzdHMiLCJzaG93IiwiZXJyIiwiTG9nZ2VyIiwic3RhY2t0cmFjZSIsInN0b3AiLCJnZXRDdXJyZW50V2ViQ29udGVudHMiLCJvbiIsIm9ic2VydmUiLCJkb2N1bWVudCIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJtdXRhdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBLE1BQU1BLElBQUksR0FBR0MsbUJBQU8sQ0FBQyxrQkFBRCxDQUFwQjs7QUFDQSxNQUFNQyxjQUFjLEdBQUdELG1CQUFPLENBQUMsMEJBQUQsQ0FBUCxDQUFvQkUsTUFBM0M7O0FBRWUsbUVBQUksTUFBTUMsYUFBTixTQUE0QkMscURBQTVCLENBQXlDO0FBQ3hELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sZUFBUDtBQUF3Qjs7QUFDcEMsTUFBSUMsZUFBSixHQUFzQjtBQUFDLFdBQU8sS0FBUDtBQUFjOztBQUNyQyxNQUFJQyxTQUFKLEdBQWdCO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUN0QyxNQUFJQyxXQUFKLEdBQWtCO0FBQUMsV0FBT1QsSUFBSSxDQUFDVSxPQUFMLENBQWFDLDJDQUFNLENBQUNDLFFBQXBCLEVBQThCLFNBQTlCLENBQVA7QUFBaUQ7O0FBQ3BFLE1BQUlDLE1BQUosR0FBYTtBQUFDLFdBQU8sUUFBUDtBQUFpQjs7QUFFL0JDLGFBQVcsR0FBRztBQUNWO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNDLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLElBQUlDLGdCQUFKLENBQXNCQyxTQUFELElBQWU7QUFDaEQsV0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBUixFQUFXQyxJQUFJLEdBQUdGLFNBQVMsQ0FBQ0csTUFBakMsRUFBeUNGLENBQUMsR0FBR0MsSUFBN0MsRUFBbURELENBQUMsRUFBcEQsRUFBd0Q7QUFDcEQsYUFBS0csVUFBTCxDQUFnQkosU0FBUyxDQUFDQyxDQUFELENBQXpCO0FBQ0g7QUFDSixLQUplLENBQWhCO0FBS0g7O0FBRURJLFlBQVUsR0FBRztBQUNULFVBQU1DLE1BQU0sR0FBRyxNQUFNRCxVQUFOLEVBQWY7QUFDQSxTQUFLRSxjQUFMO0FBQ0FDLDREQUFRLENBQUNDLGFBQVQsQ0FBdUIsU0FBdkIsRUFBa0NDLGdEQUFPLENBQUNDLE1BQVIsQ0FBZUMsT0FBakQsRUFBMEQ7QUFBQ0MsYUFBTyxFQUFFLE1BQU1DLG9EQUFnQixDQUFDQyxhQUFqQixDQUErQkwsZ0RBQU8sQ0FBQ0MsTUFBUixDQUFlQyxPQUE5QyxFQUF1RCxLQUFLSSxTQUE1RCxFQUF1RSxLQUFLQyxLQUE1RSxFQUFtRjtBQUN6SkMsY0FBTSxFQUFFLEtBQUs1QixXQUQ0STtBQUV6SjZCLGdCQUFRLEVBQUUsS0FBS0MsWUFBTCxDQUFrQnZCLElBQWxCLENBQXVCLElBQXZCLENBRitJO0FBR3pKd0IsY0FBTSxFQUFFLEtBQUtDLFlBQUwsQ0FBa0J6QixJQUFsQixDQUF1QixJQUF2QixDQUhpSjtBQUl6SjBCLG1CQUFXLEVBQUUsS0FBS0MsZ0JBQUwsQ0FBc0IzQixJQUF0QixDQUEyQixJQUEzQjtBQUo0SSxPQUFuRjtBQUFoQixLQUExRDtBQU1BLFdBQU9TLE1BQVA7QUFDSDtBQUVEOzs7QUFDQWtCLGtCQUFnQixHQUFHO0FBQUMsV0FBTyxLQUFLQyxVQUFMLEVBQVA7QUFBMEI7O0FBQzlDQyxnQkFBYyxHQUFHO0FBQUMsV0FBTyxLQUFLQyxhQUFMLEVBQVA7QUFBNkI7O0FBRS9DQyxjQUFZLENBQUNDLFNBQUQsRUFBWTtBQUFDLFdBQU8sS0FBS0MsV0FBTCxDQUFpQkQsU0FBakIsQ0FBUDtBQUFvQzs7QUFDN0RFLGVBQWEsQ0FBQ0YsU0FBRCxFQUFZO0FBQUMsV0FBTyxLQUFLRyxZQUFMLENBQWtCSCxTQUFsQixDQUFQO0FBQXFDOztBQUMvRFQsY0FBWSxDQUFDYSxFQUFELEVBQUs7QUFBQyxXQUFPLEtBQUtDLFdBQUwsQ0FBaUJELEVBQWpCLENBQVA7QUFBNkI7O0FBRS9DRSxjQUFZLENBQUNDLGVBQUQsRUFBa0I7QUFBQyxXQUFPLEtBQUtDLFdBQUwsQ0FBaUJELGVBQWpCLENBQVA7QUFBMEM7O0FBRXpFRSxZQUFVLENBQUNDLFFBQUQsRUFBVztBQUNqQixVQUFNQyxLQUFLLEdBQUcsS0FBS0MsU0FBTCxDQUFlRixRQUFmLENBQWQ7QUFDQSxRQUFJQyxLQUFKLEVBQVdFLGtEQUFNLENBQUNDLGVBQVAsQ0FBdUI7QUFBQ0MsWUFBTSxFQUFFLENBQUNKLEtBQUQ7QUFBVCxLQUF2QjtBQUNkOztBQUVEbEIsY0FBWSxDQUFDYyxlQUFELEVBQWtCO0FBQzFCLFVBQU1JLEtBQUssR0FBRyxLQUFLSyxXQUFMLENBQWlCVCxlQUFqQixDQUFkO0FBQ0EsUUFBSUksS0FBSixFQUFXRSxrREFBTSxDQUFDQyxlQUFQLENBQXVCO0FBQUMvQixhQUFPLEVBQUUsQ0FBQzRCLEtBQUQ7QUFBVixLQUF2QjtBQUNYLFdBQU8sT0FBT0osZUFBUCxJQUEyQixRQUEzQixHQUFzQyxLQUFLcEIsU0FBTCxDQUFlOEIsSUFBZixDQUFvQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUNkLEVBQUYsSUFBUUcsZUFBUixJQUEyQlcsQ0FBQyxDQUFDUixRQUFGLElBQWNILGVBQWxFLENBQXRDLEdBQTJIQSxlQUFsSTtBQUNIO0FBRUQ7OztBQUNBWSxpQkFBZSxDQUFDQyxLQUFELEVBQVE7QUFDbkIsUUFBSSxDQUFDQSxLQUFLLENBQUNDLElBQVgsRUFBaUIsT0FBTyxJQUFJQywyREFBSixDQUFlRixLQUFLLENBQUM5RCxJQUFyQixFQUEyQjhELEtBQUssQ0FBQ1YsUUFBakMsRUFBMkMsdUJBQTNDLEVBQW9FO0FBQUNhLGFBQU8sRUFBRSw0Q0FBVjtBQUF3REMsV0FBSyxFQUFFO0FBQS9ELEtBQXBFLENBQVA7O0FBQ2pCLFFBQUk7QUFDQSxZQUFNQyxTQUFTLEdBQUcsSUFBSUwsS0FBSyxDQUFDQyxJQUFWLEVBQWxCO0FBQ0FELFdBQUssQ0FBQ00sTUFBTixHQUFlRCxTQUFmO0FBQ0FMLFdBQUssQ0FBQzlELElBQU4sR0FBYW1FLFNBQVMsQ0FBQ0UsT0FBVixNQUF1QlAsS0FBSyxDQUFDOUQsSUFBMUM7QUFDQThELFdBQUssQ0FBQ1EsTUFBTixHQUFlSCxTQUFTLENBQUNJLFNBQVYsTUFBeUJULEtBQUssQ0FBQ1EsTUFBL0IsSUFBeUMsV0FBeEQ7QUFDQVIsV0FBSyxDQUFDVSxXQUFOLEdBQW9CTCxTQUFTLENBQUNNLGNBQVYsTUFBOEJYLEtBQUssQ0FBQ1UsV0FBcEMsSUFBbUQsZ0JBQXZFO0FBQ0FWLFdBQUssQ0FBQ1ksT0FBTixHQUFnQlAsU0FBUyxDQUFDUSxVQUFWLE1BQTBCYixLQUFLLENBQUNZLE9BQWhDLElBQTJDLFlBQTNEOztBQUNBLFVBQUk7QUFDQSxZQUFJLE9BQU9aLEtBQUssQ0FBQ00sTUFBTixDQUFhUSxJQUFwQixJQUE2QixVQUFqQyxFQUE2Q2QsS0FBSyxDQUFDTSxNQUFOLENBQWFRLElBQWI7QUFDaEQsT0FGRCxDQUdBLE9BQU92QixLQUFQLEVBQWM7QUFDVixhQUFLdkIsS0FBTCxDQUFXZ0MsS0FBSyxDQUFDaEIsRUFBakIsSUFBdUIsS0FBdkI7QUFDQSxlQUFPLElBQUlrQiwyREFBSixDQUFlRixLQUFLLENBQUM5RCxJQUFyQixFQUEyQjhELEtBQUssQ0FBQ1YsUUFBakMsRUFBMkMsNEJBQTNDLEVBQXlFO0FBQUNhLGlCQUFPLEVBQUVaLEtBQUssQ0FBQ1ksT0FBaEI7QUFBeUJDLGVBQUssRUFBRWIsS0FBSyxDQUFDYTtBQUF0QyxTQUF6RSxDQUFQO0FBQ0g7QUFDSixLQWRELENBZUEsT0FBT2IsS0FBUCxFQUFjO0FBQUMsYUFBTyxJQUFJVywyREFBSixDQUFlRixLQUFLLENBQUM5RCxJQUFyQixFQUEyQjhELEtBQUssQ0FBQ1YsUUFBakMsRUFBMkMsMkJBQTNDLEVBQXdFO0FBQUNhLGVBQU8sRUFBRVosS0FBSyxDQUFDWSxPQUFoQjtBQUF5QkMsYUFBSyxFQUFFYixLQUFLLENBQUNhO0FBQXRDLE9BQXhFLENBQVA7QUFBOEg7QUFDaEo7O0FBRURXLHFCQUFtQixDQUFDQyxNQUFELEVBQVNDLFdBQVQsRUFBc0JDLElBQXRCLEVBQTRCO0FBQzNDRixVQUFNLENBQUNHLFFBQVAsQ0FBZ0JGLFdBQWhCLEVBQTZCRCxNQUFNLENBQUMxQixRQUFwQzs7QUFDQSxVQUFNOEIsU0FBUyxHQUFHLENBQUNDLGtEQUFTLENBQUNDLE9BQVYsQ0FBa0JOLE1BQU0sQ0FBQ08sT0FBekIsQ0FBbkI7O0FBQ0EsUUFBSUgsU0FBSixFQUFlO0FBQ1hGLFVBQUksQ0FBQ2pCLElBQUwsR0FBWWUsTUFBTSxDQUFDTyxPQUFuQjtBQUNBUCxZQUFNLENBQUNPLE9BQVAsR0FBaUJMLElBQWpCO0FBQ0EsYUFBTyxFQUFQO0FBQ0g7O0FBQ0RELGVBQVcsSUFBSyxzQkFBcUJPLElBQUksQ0FBQ0MsU0FBTCxDQUFlUCxJQUFmLENBQXFCLDRCQUEyQkEsSUFBSSxDQUFDSyxPQUFMLElBQWdCTCxJQUFJLENBQUNoRixJQUFLLEdBQS9HO0FBQ0EsV0FBTytFLFdBQVA7QUFDSDs7QUFFRFMsWUFBVSxDQUFDMUMsRUFBRCxFQUFLO0FBQUMsV0FBTyxLQUFLMkMsV0FBTCxDQUFpQjNDLEVBQWpCLENBQVA7QUFBNkI7O0FBQzdDNEMsV0FBUyxDQUFDNUMsRUFBRCxFQUFLO0FBQUMsV0FBTyxLQUFLNkMsVUFBTCxDQUFnQjdDLEVBQWhCLENBQVA7QUFBNEI7O0FBRTNDMkMsYUFBVyxDQUFDL0MsU0FBRCxFQUFZO0FBQ25CLFVBQU1vQixLQUFLLEdBQUcsT0FBT3BCLFNBQVAsSUFBcUIsUUFBckIsR0FBZ0MsS0FBS2IsU0FBTCxDQUFlOEIsSUFBZixDQUFvQmlDLENBQUMsSUFBSUEsQ0FBQyxDQUFDOUMsRUFBRixJQUFRSixTQUFqQyxDQUFoQyxHQUE4RUEsU0FBNUY7QUFDQSxRQUFJLENBQUNvQixLQUFMLEVBQVk7QUFDWixVQUFNTSxNQUFNLEdBQUdOLEtBQUssQ0FBQ00sTUFBckI7O0FBQ0EsUUFBSTtBQUNBQSxZQUFNLENBQUN5QixLQUFQO0FBQ0EsV0FBS0MsSUFBTCxDQUFVLFNBQVYsRUFBcUJoQyxLQUFLLENBQUNoQixFQUEzQjtBQUNBaUQsd0RBQU0sQ0FBQ0MsSUFBUCxDQUFhLEdBQUVsQyxLQUFLLENBQUM5RCxJQUFLLEtBQUk4RCxLQUFLLENBQUNZLE9BQVEsZUFBNUM7QUFDSCxLQUpELENBS0EsT0FBT3VCLEdBQVAsRUFBWTtBQUNSLFdBQUtuRSxLQUFMLENBQVdnQyxLQUFLLENBQUNoQixFQUFqQixJQUF1QixLQUF2QjtBQUNBaUQsd0RBQU0sQ0FBQzFDLEtBQVAsQ0FBYyxHQUFFUyxLQUFLLENBQUM5RCxJQUFLLEtBQUk4RCxLQUFLLENBQUNZLE9BQVEsd0JBQTdDO0FBQ0F3QixxREFBTSxDQUFDQyxVQUFQLENBQWtCLEtBQUtuRyxJQUF2QixFQUE2QjhELEtBQUssQ0FBQzlELElBQU4sR0FBYSx3QkFBMUMsRUFBb0VpRyxHQUFwRTtBQUNBLGFBQU8sSUFBSWpDLDJEQUFKLENBQWVGLEtBQUssQ0FBQzlELElBQXJCLEVBQTJCOEQsS0FBSyxDQUFDVixRQUFqQyxFQUEyQyw2QkFBM0MsRUFBMEU7QUFBQ2EsZUFBTyxFQUFFZ0MsR0FBRyxDQUFDaEMsT0FBZDtBQUF1QkMsYUFBSyxFQUFFK0IsR0FBRyxDQUFDL0I7QUFBbEMsT0FBMUUsQ0FBUDtBQUNIO0FBQ0o7O0FBRUR5QixZQUFVLENBQUNqRCxTQUFELEVBQVk7QUFDbEIsVUFBTW9CLEtBQUssR0FBRyxPQUFPcEIsU0FBUCxJQUFxQixRQUFyQixHQUFnQyxLQUFLYixTQUFMLENBQWU4QixJQUFmLENBQW9CaUMsQ0FBQyxJQUFJQSxDQUFDLENBQUM5QyxFQUFGLElBQVFKLFNBQWpDLENBQWhDLEdBQThFQSxTQUE1RjtBQUNBLFFBQUksQ0FBQ29CLEtBQUwsRUFBWTtBQUNaLFVBQU1NLE1BQU0sR0FBR04sS0FBSyxDQUFDTSxNQUFyQjs7QUFDQSxRQUFJO0FBQ0FBLFlBQU0sQ0FBQ2dDLElBQVA7QUFDQSxXQUFLTixJQUFMLENBQVUsU0FBVixFQUFxQmhDLEtBQUssQ0FBQ2hCLEVBQTNCO0FBQ0FpRCx3REFBTSxDQUFDQyxJQUFQLENBQWEsR0FBRWxDLEtBQUssQ0FBQzlELElBQUssS0FBSThELEtBQUssQ0FBQ1ksT0FBUSxlQUE1QztBQUNILEtBSkQsQ0FLQSxPQUFPdUIsR0FBUCxFQUFZO0FBQ1IsV0FBS25FLEtBQUwsQ0FBV2dDLEtBQUssQ0FBQ2hCLEVBQWpCLElBQXVCLEtBQXZCO0FBQ0FpRCx3REFBTSxDQUFDMUMsS0FBUCxDQUFjLEdBQUVTLEtBQUssQ0FBQzlELElBQUssS0FBSThELEtBQUssQ0FBQ1ksT0FBUSx3QkFBN0M7QUFDQXdCLHFEQUFNLENBQUNDLFVBQVAsQ0FBa0IsS0FBS25HLElBQXZCLEVBQTZCOEQsS0FBSyxDQUFDOUQsSUFBTixHQUFhLHdCQUExQyxFQUFvRWlHLEdBQXBFO0FBQ0EsYUFBTyxJQUFJakMsMkRBQUosQ0FBZUYsS0FBSyxDQUFDOUQsSUFBckIsRUFBMkI4RCxLQUFLLENBQUNWLFFBQWpDLEVBQTJDLDRCQUEzQyxFQUF5RTtBQUFDYSxlQUFPLEVBQUVnQyxHQUFHLENBQUNoQyxPQUFkO0FBQXVCQyxhQUFLLEVBQUUrQixHQUFHLENBQUMvQjtBQUFsQyxPQUF6RSxDQUFQO0FBQ0g7QUFDSjs7QUFFRDlDLGdCQUFjLEdBQUc7QUFDYnhCLGtCQUFjLENBQUN5RyxxQkFBZixHQUF1Q0MsRUFBdkMsQ0FBMEMsc0JBQTFDLEVBQWtFLEtBQUs3RixRQUFMLENBQWNDLElBQWQsQ0FBbUIsSUFBbkIsQ0FBbEU7QUFDQSxTQUFLQyxRQUFMLENBQWM0RixPQUFkLENBQXNCQyxRQUF0QixFQUFnQztBQUM1QkMsZUFBUyxFQUFFLElBRGlCO0FBRTVCQyxhQUFPLEVBQUU7QUFGbUIsS0FBaEM7QUFJSDs7QUFFRGpHLFVBQVEsR0FBRztBQUNQLFNBQUtxRixJQUFMLENBQVUsYUFBVjs7QUFDQSxTQUFLLElBQUloRixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHLEtBQUtlLFNBQUwsQ0FBZWIsTUFBbkMsRUFBMkNGLENBQUMsRUFBNUMsRUFBZ0Q7QUFDNUMsWUFBTXNELE1BQU0sR0FBRyxLQUFLdkMsU0FBTCxDQUFlZixDQUFmLEVBQWtCc0QsTUFBakM7QUFDQSxVQUFJLENBQUMsS0FBS3RDLEtBQUwsQ0FBVyxLQUFLRCxTQUFMLENBQWVmLENBQWYsRUFBa0JnQyxFQUE3QixDQUFMLEVBQXVDOztBQUN2QyxVQUFJLE9BQU9zQixNQUFNLENBQUMzRCxRQUFkLEtBQTRCLFVBQWhDLEVBQTRDO0FBQ3hDLFlBQUk7QUFBRTJELGdCQUFNLENBQUMzRCxRQUFQO0FBQW9CLFNBQTFCLENBQ0EsT0FBT3dGLEdBQVAsRUFBWTtBQUFFQyx5REFBTSxDQUFDQyxVQUFQLENBQWtCLEtBQUtuRyxJQUF2QixFQUE2QixpQ0FBaUMsS0FBSzZCLFNBQUwsQ0FBZWYsQ0FBZixFQUFrQmQsSUFBbkQsR0FBMEQsR0FBdkYsRUFBNEZpRyxHQUE1RjtBQUFtRztBQUNwSDtBQUNKO0FBQ0o7O0FBRURoRixZQUFVLENBQUMwRixRQUFELEVBQVc7QUFDakIsU0FBSyxJQUFJN0YsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRyxLQUFLZSxTQUFMLENBQWViLE1BQW5DLEVBQTJDRixDQUFDLEVBQTVDLEVBQWdEO0FBQzVDLFlBQU1zRCxNQUFNLEdBQUcsS0FBS3ZDLFNBQUwsQ0FBZWYsQ0FBZixFQUFrQnNELE1BQWpDO0FBQ0EsVUFBSSxDQUFDLEtBQUt0QyxLQUFMLENBQVcsS0FBS0QsU0FBTCxDQUFlZixDQUFmLEVBQWtCZ0MsRUFBN0IsQ0FBTCxFQUF1Qzs7QUFDdkMsVUFBSSxPQUFPc0IsTUFBTSxDQUFDekQsUUFBZCxLQUEyQixVQUEvQixFQUEyQztBQUN2QyxZQUFJO0FBQUV5RCxnQkFBTSxDQUFDekQsUUFBUCxDQUFnQmdHLFFBQWhCO0FBQTRCLFNBQWxDLENBQ0EsT0FBT1YsR0FBUCxFQUFZO0FBQUVDLHlEQUFNLENBQUNDLFVBQVAsQ0FBa0IsS0FBS25HLElBQXZCLEVBQTZCLGlDQUFpQyxLQUFLNkIsU0FBTCxDQUFlZixDQUFmLEVBQWtCZCxJQUFuRCxHQUEwRCxHQUF2RixFQUE0RmlHLEdBQTVGO0FBQW1HO0FBQ3BIO0FBQ0o7QUFDSjs7QUFySnVELENBQTdDLEVBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9wbHVnaW5tYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4vbG9nZ2VyXCI7XHJcbmltcG9ydCBBZGRvbk1hbmFnZXIgZnJvbSBcIi4vYWRkb25tYW5hZ2VyXCI7XHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBBZGRvbkVycm9yIGZyb20gXCIuLi9zdHJ1Y3RzL2FkZG9uZXJyb3JcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgU3RyaW5ncyBmcm9tIFwiLi9zdHJpbmdzXCI7XHJcblxyXG5pbXBvcnQgVG9hc3RzIGZyb20gXCIuLi91aS90b2FzdHNcIjtcclxuaW1wb3J0IE1vZGFscyBmcm9tIFwiLi4vdWkvbW9kYWxzXCI7XHJcbmltcG9ydCBTZXR0aW5nc1JlbmRlcmVyIGZyb20gXCIuLi91aS9zZXR0aW5nc1wiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBlbGVjdHJvblJlbW90ZSA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUGx1Z2luTWFuYWdlciBleHRlbmRzIEFkZG9uTWFuYWdlciB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJQbHVnaW5NYW5hZ2VyXCI7fVxyXG4gICAgZ2V0IG1vZHVsZUV4dGVuc2lvbigpIHtyZXR1cm4gXCIuanNcIjt9XHJcbiAgICBnZXQgZXh0ZW5zaW9uKCkge3JldHVybiBcIi5wbHVnaW4uanNcIjt9XHJcbiAgICBnZXQgYWRkb25Gb2xkZXIoKSB7cmV0dXJuIHBhdGgucmVzb2x2ZShDb25maWcuZGF0YVBhdGgsIFwicGx1Z2luc1wiKTt9XHJcbiAgICBnZXQgcHJlZml4KCkge3JldHVybiBcInBsdWdpblwiO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMub25Td2l0Y2ggPSB0aGlzLm9uU3dpdGNoLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1sZW4gPSBtdXRhdGlvbnMubGVuZ3RoOyBpIDwgbWxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTXV0YXRpb24obXV0YXRpb25zW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gc3VwZXIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICAgIHRoaXMuc2V0dXBGdW5jdGlvbnMoKTtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlclBhbmVsKFwicGx1Z2luc1wiLCBTdHJpbmdzLlBhbmVscy5wbHVnaW5zLCB7ZWxlbWVudDogKCkgPT4gU2V0dGluZ3NSZW5kZXJlci5nZXRBZGRvblBhbmVsKFN0cmluZ3MuUGFuZWxzLnBsdWdpbnMsIHRoaXMuYWRkb25MaXN0LCB0aGlzLnN0YXRlLCB7XHJcbiAgICAgICAgICAgIGZvbGRlcjogdGhpcy5hZGRvbkZvbGRlcixcclxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMudG9nZ2xlUGx1Z2luLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHJlbG9hZDogdGhpcy5yZWxvYWRQbHVnaW4uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgcmVmcmVzaExpc3Q6IHRoaXMudXBkYXRlUGx1Z2luTGlzdC5iaW5kKHRoaXMpXHJcbiAgICAgICAgfSl9KTtcclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIEFsaWFzZXMgKi9cclxuICAgIHVwZGF0ZVBsdWdpbkxpc3QoKSB7cmV0dXJuIHRoaXMudXBkYXRlTGlzdCgpO31cclxuICAgIGxvYWRBbGxQbHVnaW5zKCkge3JldHVybiB0aGlzLmxvYWRBbGxBZGRvbnMoKTt9XHJcblxyXG4gICAgZW5hYmxlUGx1Z2luKGlkT3JBZGRvbikge3JldHVybiB0aGlzLmVuYWJsZUFkZG9uKGlkT3JBZGRvbik7fVxyXG4gICAgZGlzYWJsZVBsdWdpbihpZE9yQWRkb24pIHtyZXR1cm4gdGhpcy5kaXNhYmxlQWRkb24oaWRPckFkZG9uKTt9XHJcbiAgICB0b2dnbGVQbHVnaW4oaWQpIHtyZXR1cm4gdGhpcy50b2dnbGVBZGRvbihpZCk7fVxyXG5cclxuICAgIHVubG9hZFBsdWdpbihpZE9yRmlsZU9yQWRkb24pIHtyZXR1cm4gdGhpcy51bmxvYWRBZGRvbihpZE9yRmlsZU9yQWRkb24pO31cclxuXHJcbiAgICBsb2FkUGx1Z2luKGZpbGVuYW1lKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmxvYWRBZGRvbihmaWxlbmFtZSk7XHJcbiAgICAgICAgaWYgKGVycm9yKSBNb2RhbHMuc2hvd0FkZG9uRXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRQbHVnaW4oaWRPckZpbGVPckFkZG9uKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnJlbG9hZEFkZG9uKGlkT3JGaWxlT3JBZGRvbik7XHJcbiAgICAgICAgaWYgKGVycm9yKSBNb2RhbHMuc2hvd0FkZG9uRXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZihpZE9yRmlsZU9yQWRkb24pID09IFwic3RyaW5nXCIgPyB0aGlzLmFkZG9uTGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZU9yQWRkb24gfHwgYy5maWxlbmFtZSA9PSBpZE9yRmlsZU9yQWRkb24pIDogaWRPckZpbGVPckFkZG9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIE92ZXJyaWRlcyAqL1xyXG4gICAgaW5pdGlhbGl6ZUFkZG9uKGFkZG9uKSB7XHJcbiAgICAgICAgaWYgKCFhZGRvbi50eXBlKSByZXR1cm4gbmV3IEFkZG9uRXJyb3IoYWRkb24ubmFtZSwgYWRkb24uZmlsZW5hbWUsIFwiUGx1Z2luIGhhZCBubyBleHBvcnRzXCIsIHttZXNzYWdlOiBcIlBsdWdpbiBoYWQgbm8gZXhwb3J0cyBvciBubyBuYW1lIHByb3BlcnR5LlwiLCBzdGFjazogXCJcIn0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRoZVBsdWdpbiA9IG5ldyBhZGRvbi50eXBlKCk7XHJcbiAgICAgICAgICAgIGFkZG9uLnBsdWdpbiA9IHRoZVBsdWdpbjtcclxuICAgICAgICAgICAgYWRkb24ubmFtZSA9IHRoZVBsdWdpbi5nZXROYW1lKCkgfHwgYWRkb24ubmFtZTtcclxuICAgICAgICAgICAgYWRkb24uYXV0aG9yID0gdGhlUGx1Z2luLmdldEF1dGhvcigpIHx8IGFkZG9uLmF1dGhvciB8fCBcIk5vIGF1dGhvclwiO1xyXG4gICAgICAgICAgICBhZGRvbi5kZXNjcmlwdGlvbiA9IHRoZVBsdWdpbi5nZXREZXNjcmlwdGlvbigpIHx8IGFkZG9uLmRlc2NyaXB0aW9uIHx8IFwiTm8gZGVzY3JpcHRpb25cIjtcclxuICAgICAgICAgICAgYWRkb24udmVyc2lvbiA9IHRoZVBsdWdpbi5nZXRWZXJzaW9uKCkgfHwgYWRkb24udmVyc2lvbiB8fCBcIk5vIHZlcnNpb25cIjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoYWRkb24ucGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgYWRkb24ucGx1Z2luLmxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVbYWRkb24uaWRdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFkZG9uRXJyb3IoYWRkb24ubmFtZSwgYWRkb24uZmlsZW5hbWUsIFwibG9hZCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiBuZXcgQWRkb25FcnJvcihhZGRvbi5uYW1lLCBhZGRvbi5maWxlbmFtZSwgXCJDb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXCIsIHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9KTt9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZU1vZGlmaWNhdGlvbihtb2R1bGUsIGZpbGVDb250ZW50LCBtZXRhKSB7XHJcbiAgICAgICAgbW9kdWxlLl9jb21waWxlKGZpbGVDb250ZW50LCBtb2R1bGUuZmlsZW5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRpZEV4cG9ydCA9ICFVdGlsaXRpZXMuaXNFbXB0eShtb2R1bGUuZXhwb3J0cyk7XHJcbiAgICAgICAgaWYgKGRpZEV4cG9ydCkge1xyXG4gICAgICAgICAgICBtZXRhLnR5cGUgPSBtb2R1bGUuZXhwb3J0cztcclxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtZXRhO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsZUNvbnRlbnQgKz0gYFxcbm1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07XFxubW9kdWxlLmV4cG9ydHMudHlwZSA9ICR7bWV0YS5leHBvcnRzIHx8IG1ldGEubmFtZX07YDtcclxuICAgICAgICByZXR1cm4gZmlsZUNvbnRlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRBZGRvbihpZCkge3JldHVybiB0aGlzLnN0YXJ0UGx1Z2luKGlkKTt9XHJcbiAgICBzdG9wQWRkb24oaWQpIHtyZXR1cm4gdGhpcy5zdG9wUGx1Z2luKGlkKTt9XHJcblxyXG4gICAgc3RhcnRQbHVnaW4oaWRPckFkZG9uKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckFkZG9uKSA6IGlkT3JBZGRvbjtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYWRkb24ucGx1Z2luO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHBsdWdpbi5zdGFydCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJzdGFydGVkXCIsIGFkZG9uLmlkKTtcclxuICAgICAgICAgICAgVG9hc3RzLnNob3coYCR7YWRkb24ubmFtZX0gdiR7YWRkb24udmVyc2lvbn0gaGFzIHN0YXJ0ZWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZVthZGRvbi5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgVG9hc3RzLmVycm9yKGAke2FkZG9uLm5hbWV9IHYke2FkZG9uLnZlcnNpb259IGNvdWxkIG5vdCBiZSBzdGFydGVkLmApO1xyXG4gICAgICAgICAgICBMb2dnZXIuc3RhY2t0cmFjZSh0aGlzLm5hbWUsIGFkZG9uLm5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRvbkVycm9yKGFkZG9uLm5hbWUsIGFkZG9uLmZpbGVuYW1lLCBcInN0YXJ0KCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFBsdWdpbihpZE9yQWRkb24pIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHR5cGVvZihpZE9yQWRkb24pID09IFwic3RyaW5nXCIgPyB0aGlzLmFkZG9uTGlzdC5maW5kKHAgPT4gcC5pZCA9PSBpZE9yQWRkb24pIDogaWRPckFkZG9uO1xyXG4gICAgICAgIGlmICghYWRkb24pIHJldHVybjtcclxuICAgICAgICBjb25zdCBwbHVnaW4gPSBhZGRvbi5wbHVnaW47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcGx1Z2luLnN0b3AoKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KFwic3RvcHBlZFwiLCBhZGRvbi5pZCk7XHJcbiAgICAgICAgICAgIFRvYXN0cy5zaG93KGAke2FkZG9uLm5hbWV9IHYke2FkZG9uLnZlcnNpb259IGhhcyBzdG9wcGVkLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbYWRkb24uaWRdID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFRvYXN0cy5lcnJvcihgJHthZGRvbi5uYW1lfSB2JHthZGRvbi52ZXJzaW9ufSBjb3VsZCBub3QgYmUgc3RvcHBlZC5gKTtcclxuICAgICAgICAgICAgTG9nZ2VyLnN0YWNrdHJhY2UodGhpcy5uYW1lLCBhZGRvbi5uYW1lICsgXCIgY291bGQgbm90IGJlIHN0b3BwZWQuXCIsIGVycik7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWRkb25FcnJvcihhZGRvbi5uYW1lLCBhZGRvbi5maWxlbmFtZSwgXCJzdG9wKCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBGdW5jdGlvbnMoKSB7XHJcbiAgICAgICAgZWxlY3Ryb25SZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkub24oXCJkaWQtbmF2aWdhdGUtaW4tcGFnZVwiLCB0aGlzLm9uU3dpdGNoLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xyXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN3aXRjaCgpIHtcclxuICAgICAgICB0aGlzLmVtaXQoXCJwYWdlLXN3aXRjaFwiKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYWRkb25MaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuYWRkb25MaXN0W2ldLnBsdWdpbjtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlW3RoaXMuYWRkb25MaXN0W2ldLmlkXSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YocGx1Z2luLm9uU3dpdGNoKSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25Td2l0Y2goKTsgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBMb2dnZXIuc3RhY2t0cmFjZSh0aGlzLm5hbWUsIFwiVW5hYmxlIHRvIGZpcmUgb25Td2l0Y2ggZm9yIFwiICsgdGhpcy5hZGRvbkxpc3RbaV0ubmFtZSArIFwiLlwiLCBlcnIpOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25NdXRhdGlvbihtdXRhdGlvbikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hZGRvbkxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcy5hZGRvbkxpc3RbaV0ucGx1Z2luO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVbdGhpcy5hZGRvbkxpc3RbaV0uaWRdKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9ic2VydmVyKG11dGF0aW9uKTsgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBMb2dnZXIuc3RhY2t0cmFjZSh0aGlzLm5hbWUsIFwiVW5hYmxlIHRvIGZpcmUgb2JzZXJ2ZXIgZm9yIFwiICsgdGhpcy5hZGRvbkxpc3RbaV0ubmFtZSArIFwiLlwiLCBlcnIpOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/pluginmanager.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _addonmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./addonmanager */ \"./src/modules/addonmanager.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../structs/addonerror */ \"./src/structs/addonerror.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _ui_settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../ui/settings */ \"./src/ui/settings.js\");\n\n\n\n\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst electronRemote = __webpack_require__(/*! electron */ \"electron\").remote;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PluginManager extends _addonmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"] {\n get name() {\n return \"PluginManager\";\n }\n\n get moduleExtension() {\n return \".js\";\n }\n\n get extension() {\n return \".plugin.js\";\n }\n\n get addonFolder() {\n return path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"plugins\");\n }\n\n get prefix() {\n return \"plugin\";\n }\n\n get language() {\n return \"javascript\";\n }\n\n constructor() {\n super();\n this.onSwitch = this.onSwitch.bind(this);\n this.observer = new MutationObserver(mutations => {\n for (let i = 0, mlen = mutations.length; i < mlen; i++) {\n this.onMutation(mutations[i]);\n }\n });\n }\n\n initialize() {\n const errors = super.initialize();\n this.setupFunctions();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].registerPanel(\"plugins\", _strings__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Panels.plugins, {\n element: () => _ui_settings__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getAddonPanel(_strings__WEBPACK_IMPORTED_MODULE_6__[\"default\"].Panels.plugins, this.addonList, this.state, {\n folder: this.addonFolder,\n onChange: this.togglePlugin.bind(this),\n reload: this.reloadPlugin.bind(this),\n refreshList: this.updatePluginList.bind(this),\n saveAddon: this.saveAddon.bind(this),\n editAddon: this.editAddon.bind(this),\n deleteAddon: this.deleteAddon.bind(this),\n prefix: this.prefix\n })\n });\n return errors;\n }\n /* Aliases */\n\n\n updatePluginList() {\n return this.updateList();\n }\n\n loadAllPlugins() {\n return this.loadAllAddons();\n }\n\n enablePlugin(idOrAddon) {\n return this.enableAddon(idOrAddon);\n }\n\n disablePlugin(idOrAddon) {\n return this.disableAddon(idOrAddon);\n }\n\n togglePlugin(id) {\n return this.toggleAddon(id);\n }\n\n unloadPlugin(idOrFileOrAddon) {\n return this.unloadAddon(idOrFileOrAddon);\n }\n\n loadPlugin(filename) {\n const error = this.loadAddon(filename);\n if (error) _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showAddonErrors({\n themes: [error]\n });\n }\n\n reloadPlugin(idOrFileOrAddon) {\n const error = this.reloadAddon(idOrFileOrAddon);\n if (error) _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showAddonErrors({\n plugins: [error]\n });\n return typeof idOrFileOrAddon == \"string\" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon;\n }\n /* Overrides */\n\n\n initializeAddon(addon) {\n if (!addon.type) return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](addon.name, addon.filename, \"Plugin had no exports\", {\n message: \"Plugin had no exports or no name property.\",\n stack: \"\"\n });\n\n try {\n const thePlugin = new addon.type();\n addon.plugin = thePlugin;\n addon.name = thePlugin.getName() || addon.name;\n addon.author = thePlugin.getAuthor() || addon.author || \"No author\";\n addon.description = thePlugin.getDescription() || addon.description || \"No description\";\n addon.version = thePlugin.getVersion() || addon.version || \"No version\";\n\n try {\n if (typeof addon.plugin.load == \"function\") addon.plugin.load();\n } catch (error) {\n this.state[addon.id] = false;\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](addon.name, addon.filename, \"load() could not be fired.\", {\n message: error.message,\n stack: error.stack\n });\n }\n } catch (error) {\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](addon.name, addon.filename, \"Could not be constructed.\", {\n message: error.message,\n stack: error.stack\n });\n }\n }\n\n getFileModification(module, fileContent, meta) {\n module._compile(fileContent, module.filename);\n\n const didExport = !_utilities__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isEmpty(module.exports);\n\n if (didExport) {\n meta.type = module.exports;\n module.exports = meta;\n return \"\";\n }\n\n fileContent += `\\nmodule.exports = ${JSON.stringify(meta)};\\nmodule.exports.type = ${meta.exports || meta.name};`;\n return fileContent;\n }\n\n startAddon(id) {\n return this.startPlugin(id);\n }\n\n stopAddon(id) {\n return this.stopPlugin(id);\n }\n\n startPlugin(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n const plugin = addon.plugin;\n\n try {\n plugin.start();\n this.emit(\"started\", addon.id);\n _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].show(`${addon.name} v${addon.version} has started.`);\n } catch (err) {\n this.state[addon.id] = false;\n _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].error(`${addon.name} v${addon.version} could not be started.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, addon.name + \" could not be started.\", err);\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](addon.name, addon.filename, \"start() could not be fired.\", {\n message: err.message,\n stack: err.stack\n });\n }\n }\n\n stopPlugin(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n const plugin = addon.plugin;\n\n try {\n plugin.stop();\n this.emit(\"stopped\", addon.id);\n _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].show(`${addon.name} v${addon.version} has stopped.`);\n } catch (err) {\n this.state[addon.id] = false;\n _ui_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].error(`${addon.name} v${addon.version} could not be stopped.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, addon.name + \" could not be stopped.\", err);\n return new _structs_addonerror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](addon.name, addon.filename, \"stop() could not be fired.\", {\n message: err.message,\n stack: err.stack\n });\n }\n }\n\n setupFunctions() {\n electronRemote.getCurrentWebContents().on(\"did-navigate-in-page\", this.onSwitch.bind(this));\n this.observer.observe(document, {\n childList: true,\n subtree: true\n });\n }\n\n onSwitch() {\n this.emit(\"page-switch\");\n\n for (let i = 0; i < this.addonList.length; i++) {\n const plugin = this.addonList[i].plugin;\n if (!this.state[this.addonList[i].id]) continue;\n\n if (typeof plugin.onSwitch === \"function\") {\n try {\n plugin.onSwitch();\n } catch (err) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, \"Unable to fire onSwitch for \" + this.addonList[i].name + \".\", err);\n }\n }\n }\n }\n\n onMutation(mutation) {\n for (let i = 0; i < this.addonList.length; i++) {\n const plugin = this.addonList[i].plugin;\n if (!this.state[this.addonList[i].id]) continue;\n\n if (typeof plugin.observer === \"function\") {\n try {\n plugin.observer(mutation);\n } catch (err) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, \"Unable to fire observer for \" + this.addonList[i].name + \".\", err);\n }\n }\n }\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2lubWFuYWdlci5qcz9kMTczIl0sIm5hbWVzIjpbInBhdGgiLCJyZXF1aXJlIiwiZWxlY3Ryb25SZW1vdGUiLCJyZW1vdGUiLCJQbHVnaW5NYW5hZ2VyIiwiQWRkb25NYW5hZ2VyIiwibmFtZSIsIm1vZHVsZUV4dGVuc2lvbiIsImV4dGVuc2lvbiIsImFkZG9uRm9sZGVyIiwicmVzb2x2ZSIsIkNvbmZpZyIsImRhdGFQYXRoIiwicHJlZml4IiwibGFuZ3VhZ2UiLCJjb25zdHJ1Y3RvciIsIm9uU3dpdGNoIiwiYmluZCIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsImkiLCJtbGVuIiwibGVuZ3RoIiwib25NdXRhdGlvbiIsImluaXRpYWxpemUiLCJlcnJvcnMiLCJzZXR1cEZ1bmN0aW9ucyIsIlNldHRpbmdzIiwicmVnaXN0ZXJQYW5lbCIsIlN0cmluZ3MiLCJQYW5lbHMiLCJwbHVnaW5zIiwiZWxlbWVudCIsIlNldHRpbmdzUmVuZGVyZXIiLCJnZXRBZGRvblBhbmVsIiwiYWRkb25MaXN0Iiwic3RhdGUiLCJmb2xkZXIiLCJvbkNoYW5nZSIsInRvZ2dsZVBsdWdpbiIsInJlbG9hZCIsInJlbG9hZFBsdWdpbiIsInJlZnJlc2hMaXN0IiwidXBkYXRlUGx1Z2luTGlzdCIsInNhdmVBZGRvbiIsImVkaXRBZGRvbiIsImRlbGV0ZUFkZG9uIiwidXBkYXRlTGlzdCIsImxvYWRBbGxQbHVnaW5zIiwibG9hZEFsbEFkZG9ucyIsImVuYWJsZVBsdWdpbiIsImlkT3JBZGRvbiIsImVuYWJsZUFkZG9uIiwiZGlzYWJsZVBsdWdpbiIsImRpc2FibGVBZGRvbiIsImlkIiwidG9nZ2xlQWRkb24iLCJ1bmxvYWRQbHVnaW4iLCJpZE9yRmlsZU9yQWRkb24iLCJ1bmxvYWRBZGRvbiIsImxvYWRQbHVnaW4iLCJmaWxlbmFtZSIsImVycm9yIiwibG9hZEFkZG9uIiwiTW9kYWxzIiwic2hvd0FkZG9uRXJyb3JzIiwidGhlbWVzIiwicmVsb2FkQWRkb24iLCJmaW5kIiwiYyIsImluaXRpYWxpemVBZGRvbiIsImFkZG9uIiwidHlwZSIsIkFkZG9uRXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJ0aGVQbHVnaW4iLCJwbHVnaW4iLCJnZXROYW1lIiwiYXV0aG9yIiwiZ2V0QXV0aG9yIiwiZGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwibG9hZCIsImdldEZpbGVNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJmaWxlQ29udGVudCIsIm1ldGEiLCJfY29tcGlsZSIsImRpZEV4cG9ydCIsIlV0aWxpdGllcyIsImlzRW1wdHkiLCJleHBvcnRzIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXJ0QWRkb24iLCJzdGFydFBsdWdpbiIsInN0b3BBZGRvbiIsInN0b3BQbHVnaW4iLCJwIiwic3RhcnQiLCJlbWl0IiwiVG9hc3RzIiwic2hvdyIsImVyciIsIkxvZ2dlciIsInN0YWNrdHJhY2UiLCJzdG9wIiwiZ2V0Q3VycmVudFdlYkNvbnRlbnRzIiwib24iLCJvYnNlcnZlIiwiZG9jdW1lbnQiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwibXV0YXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxJQUFJLEdBQUdDLG1CQUFPLENBQUMsa0JBQUQsQ0FBcEI7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHRCxtQkFBTyxDQUFDLDBCQUFELENBQVAsQ0FBb0JFLE1BQTNDOztBQUVlLG1FQUFJLE1BQU1DLGFBQU4sU0FBNEJDLHFEQUE1QixDQUF5QztBQUN4RCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBQ3BDLE1BQUlDLGVBQUosR0FBc0I7QUFBQyxXQUFPLEtB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QzlELFFBQVA7QUFBb0IsU0FBMUIsQ0FDQSxPQUFPMkYsR0FBUCxFQUFZO0FBQUVDLHlEQUFNLENBQUNDLFVBQVAsQ0FBa0IsS0FBS3ZHLElBQXZCLEVBQTZCLGlDQUFpQyxLQUFLOEIsU0FBTCxDQUFlZixDQUFmLEVBQWtCZixJQUFuRCxHQUEwRCxHQUF2RixFQUE0RnFHLEdBQTVGO0FBQW1HO0FBQ3BIO0FBQ0o7QUFDSjs7QUFFRG5GLFlBQVUsQ0FBQzZGLFFBQUQsRUFBVztBQUNqQixTQUFLLElBQUloRyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHLEtBQUtlLFNBQUwsQ0FBZWIsTUFBbkMsRUFBMkNGLENBQUMsRUFBNUMsRUFBZ0Q7QUFDNUMsWUFBTXlELE1BQU0sR0FBRyxLQUFLMUMsU0FBTCxDQUFlZixDQUFmLEVBQWtCeUQsTUFBakM7QUFDQSxVQUFJLENBQUMsS0FBS3pDLEtBQUwsQ0FBVyxLQUFLRCxTQUFMLENBQWVmLENBQWYsRUFBa0JtQyxFQUE3QixDQUFMLEVBQXVDOztBQUN2QyxVQUFJLE9BQU9zQixNQUFNLENBQUM1RCxRQUFkLEtBQTJCLFVBQS9CLEVBQTJDO0FBQ3ZDLFlBQUk7QUFBRTRELGdCQUFNLENBQUM1RCxRQUFQLENBQWdCbUcsUUFBaEI7QUFBNEIsU0FBbEMsQ0FDQSxPQUFPVixHQUFQLEVBQVk7QUFBRUMseURBQU0sQ0FBQ0MsVUFBUCxDQUFrQixLQUFLdkcsSUFBdkIsRUFBNkIsaUNBQWlDLEtBQUs4QixTQUFMLENBQWVmLENBQWYsRUFBa0JmLElBQW5ELEdBQTBELEdBQXZGLEVBQTRGcUcsR0FBNUY7QUFBbUc7QUFDcEg7QUFDSjtBQUNKOztBQTFKdUQsQ0FBN0MsRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL3BsdWdpbm1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IEFkZG9uTWFuYWdlciBmcm9tIFwiLi9hZGRvbm1hbmFnZXJcIjtcclxuaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IEFkZG9uRXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvYWRkb25lcnJvclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCBTdHJpbmdzIGZyb20gXCIuL3N0cmluZ3NcIjtcclxuXHJcbmltcG9ydCBUb2FzdHMgZnJvbSBcIi4uL3VpL3RvYXN0c1wiO1xyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi91aS9tb2RhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzUmVuZGVyZXIgZnJvbSBcIi4uL3VpL3NldHRpbmdzXCI7XHJcblxyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IGVsZWN0cm9uUmVtb3RlID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBQbHVnaW5NYW5hZ2VyIGV4dGVuZHMgQWRkb25NYW5hZ2VyIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlBsdWdpbk1hbmFnZXJcIjt9XHJcbiAgICBnZXQgbW9kdWxlRXh0ZW5zaW9uKCkge3JldHVybiBcIi5qc1wiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiLnBsdWdpbi5qc1wiO31cclxuICAgIGdldCBhZGRvbkZvbGRlcigpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbmZpZy5kYXRhUGF0aCwgXCJwbHVnaW5zXCIpO31cclxuICAgIGdldCBwcmVmaXgoKSB7cmV0dXJuIFwicGx1Z2luXCI7fVxyXG4gICAgZ2V0IGxhbmd1YWdlKCkge3JldHVybiBcImphdmFzY3JpcHRcIjt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLm9uU3dpdGNoID0gdGhpcy5vblN3aXRjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk11dGF0aW9uKG11dGF0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICB0aGlzLnNldHVwRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgU2V0dGluZ3MucmVnaXN0ZXJQYW5lbChcInBsdWdpbnNcIiwgU3RyaW5ncy5QYW5lbHMucGx1Z2lucywge2VsZW1lbnQ6ICgpID0+IFNldHRpbmdzUmVuZGVyZXIuZ2V0QWRkb25QYW5lbChTdHJpbmdzLlBhbmVscy5wbHVnaW5zLCB0aGlzLmFkZG9uTGlzdCwgdGhpcy5zdGF0ZSwge1xyXG4gICAgICAgICAgICBmb2xkZXI6IHRoaXMuYWRkb25Gb2xkZXIsXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLnRvZ2dsZVBsdWdpbi5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICByZWxvYWQ6IHRoaXMucmVsb2FkUGx1Z2luLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHJlZnJlc2hMaXN0OiB0aGlzLnVwZGF0ZVBsdWdpbkxpc3QuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgc2F2ZUFkZG9uOiB0aGlzLnNhdmVBZGRvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBlZGl0QWRkb246IHRoaXMuZWRpdEFkZG9uLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGRlbGV0ZUFkZG9uOiB0aGlzLmRlbGV0ZUFkZG9uLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHByZWZpeDogdGhpcy5wcmVmaXhcclxuICAgICAgICB9KX0pO1xyXG4gICAgICAgIHJldHVybiBlcnJvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyogQWxpYXNlcyAqL1xyXG4gICAgdXBkYXRlUGx1Z2luTGlzdCgpIHtyZXR1cm4gdGhpcy51cGRhdGVMaXN0KCk7fVxyXG4gICAgbG9hZEFsbFBsdWdpbnMoKSB7cmV0dXJuIHRoaXMubG9hZEFsbEFkZG9ucygpO31cclxuXHJcbiAgICBlbmFibGVQbHVnaW4oaWRPckFkZG9uKSB7cmV0dXJuIHRoaXMuZW5hYmxlQWRkb24oaWRPckFkZG9uKTt9XHJcbiAgICBkaXNhYmxlUGx1Z2luKGlkT3JBZGRvbikge3JldHVybiB0aGlzLmRpc2FibGVBZGRvbihpZE9yQWRkb24pO31cclxuICAgIHRvZ2dsZVBsdWdpbihpZCkge3JldHVybiB0aGlzLnRvZ2dsZUFkZG9uKGlkKTt9XHJcblxyXG4gICAgdW5sb2FkUGx1Z2luKGlkT3JGaWxlT3JBZGRvbikge3JldHVybiB0aGlzLnVubG9hZEFkZG9uKGlkT3JGaWxlT3JBZGRvbik7fVxyXG5cclxuICAgIGxvYWRQbHVnaW4oZmlsZW5hbWUpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubG9hZEFkZG9uKGZpbGVuYW1lKTtcclxuICAgICAgICBpZiAoZXJyb3IpIE1vZGFscy5zaG93QWRkb25FcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZFBsdWdpbihpZE9yRmlsZU9yQWRkb24pIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucmVsb2FkQWRkb24oaWRPckZpbGVPckFkZG9uKTtcclxuICAgICAgICBpZiAoZXJyb3IpIE1vZGFscy5zaG93QWRkb25FcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mKGlkT3JGaWxlT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JBZGRvbiB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JBZGRvbikgOiBpZE9yRmlsZU9yQWRkb247XHJcbiAgICB9XHJcblxyXG4gICAgLyogT3ZlcnJpZGVzICovXHJcbiAgICBpbml0aWFsaXplQWRkb24oYWRkb24pIHtcclxuICAgICAgICBpZiAoIWFkZG9uLnR5cGUpIHJldHVybiBuZXcgQWRkb25FcnJvcihhZGRvbi5uYW1lLCBhZGRvbi5maWxlbmFtZSwgXCJQbHVnaW4gaGFkIG5vIGV4cG9ydHNcIiwge21lc3NhZ2U6IFwiUGx1Z2luIGhhZCBubyBleHBvcnRzIG9yIG5vIG5hbWUgcHJvcGVydHkuXCIsIHN0YWNrOiBcIlwifSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdGhlUGx1Z2luID0gbmV3IGFkZG9uLnR5cGUoKTtcclxuICAgICAgICAgICAgYWRkb24ucGx1Z2luID0gdGhlUGx1Z2luO1xyXG4gICAgICAgICAgICBhZGRvbi5uYW1lID0gdGhlUGx1Z2luLmdldE5hbWUoKSB8fCBhZGRvbi5uYW1lO1xyXG4gICAgICAgICAgICBhZGRvbi5hdXRob3IgPSB0aGVQbHVnaW4uZ2V0QXV0aG9yKCkgfHwgYWRkb24uYXV0aG9yIHx8IFwiTm8gYXV0aG9yXCI7XHJcbiAgICAgICAgICAgIGFkZG9uLmRlc2NyaXB0aW9uID0gdGhlUGx1Z2luLmdldERlc2NyaXB0aW9uKCkgfHwgYWRkb24uZGVzY3JpcHRpb24gfHwgXCJObyBkZXNjcmlwdGlvblwiO1xyXG4gICAgICAgICAgICBhZGRvbi52ZXJzaW9uID0gdGhlUGx1Z2luLmdldFZlcnNpb24oKSB8fCBhZGRvbi52ZXJzaW9uIHx8IFwiTm8gdmVyc2lvblwiO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhZGRvbi5wbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBhZGRvbi5wbHVnaW4ubG9hZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVthZGRvbi5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQWRkb25FcnJvcihhZGRvbi5uYW1lLCBhZGRvbi5maWxlbmFtZSwgXCJsb2FkKCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIG5ldyBBZGRvbkVycm9yKGFkZG9uLm5hbWUsIGFkZG9uLmZpbGVuYW1lLCBcIkNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cIiwge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja30pO31cclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWxlTW9kaWZpY2F0aW9uKG1vZHVsZSwgZmlsZUNvbnRlbnQsIG1ldGEpIHtcclxuICAgICAgICBtb2R1bGUuX2NvbXBpbGUoZmlsZUNvbnRlbnQsIG1vZHVsZS5maWxlbmFtZSk7XHJcbiAgICAgICAgY29uc3QgZGlkRXhwb3J0ID0gIVV0aWxpdGllcy5pc0VtcHR5KG1vZHVsZS5leHBvcnRzKTtcclxuICAgICAgICBpZiAoZGlkRXhwb3J0KSB7XHJcbiAgICAgICAgICAgIG1ldGEudHlwZSA9IG1vZHVsZS5leHBvcnRzO1xyXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1ldGE7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWxlQ29udGVudCArPSBgXFxubW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtcXG5tb2R1bGUuZXhwb3J0cy50eXBlID0gJHttZXRhLmV4cG9ydHMgfHwgbWV0YS5uYW1lfTtgO1xyXG4gICAgICAgIHJldHVybiBmaWxlQ29udGVudDtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydEFkZG9uKGlkKSB7cmV0dXJuIHRoaXMuc3RhcnRQbHVnaW4oaWQpO31cclxuICAgIHN0b3BBZGRvbihpZCkge3JldHVybiB0aGlzLnN0b3BQbHVnaW4oaWQpO31cclxuXHJcbiAgICBzdGFydFBsdWdpbihpZE9yQWRkb24pIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHR5cGVvZihpZE9yQWRkb24pID09IFwic3RyaW5nXCIgPyB0aGlzLmFkZG9uTGlzdC5maW5kKHAgPT4gcC5pZCA9PSBpZE9yQWRkb24pIDogaWRPckFkZG9uO1xyXG4gICAgICAgIGlmICghYWRkb24pIHJldHVybjtcclxuICAgICAgICBjb25zdCBwbHVnaW4gPSBhZGRvbi5wbHVnaW47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcGx1Z2luLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChcInN0YXJ0ZWRcIiwgYWRkb24uaWQpO1xyXG4gICAgICAgICAgICBUb2FzdHMuc2hvdyhgJHthZGRvbi5uYW1lfSB2JHthZGRvbi52ZXJzaW9ufSBoYXMgc3RhcnRlZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlW2FkZG9uLmlkXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBUb2FzdHMuZXJyb3IoYCR7YWRkb24ubmFtZX0gdiR7YWRkb24udmVyc2lvbn0gY291bGQgbm90IGJlIHN0YXJ0ZWQuYCk7XHJcbiAgICAgICAgICAgIExvZ2dlci5zdGFja3RyYWNlKHRoaXMubmFtZSwgYWRkb24ubmFtZSArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFkZG9uRXJyb3IoYWRkb24ubmFtZSwgYWRkb24uZmlsZW5hbWUsIFwic3RhcnQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wUGx1Z2luKGlkT3JBZGRvbikge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JBZGRvbikgOiBpZE9yQWRkb247XHJcbiAgICAgICAgaWYgKCFhZGRvbikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGFkZG9uLnBsdWdpbjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwbHVnaW4uc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJzdG9wcGVkXCIsIGFkZG9uLmlkKTtcclxuICAgICAgICAgICAgVG9hc3RzLnNob3coYCR7YWRkb24ubmFtZX0gdiR7YWRkb24udmVyc2lvbn0gaGFzIHN0b3BwZWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZVthZGRvbi5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgVG9hc3RzLmVycm9yKGAke2FkZG9uLm5hbWV9IHYke2FkZG9uLnZlcnNpb259IGNvdWxkIG5vdCBiZSBzdG9wcGVkLmApO1xyXG4gICAgICAgICAgICBMb2dnZXIuc3RhY2t0cmFjZSh0aGlzLm5hbWUsIGFkZG9uLm5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RvcHBlZC5cIiwgZXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBZGRvbkVycm9yKGFkZG9uLm5hbWUsIGFkZG9uLmZpbGVuYW1lLCBcInN0b3AoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXR1cEZ1bmN0aW9ucygpIHtcclxuICAgICAgICBlbGVjdHJvblJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5vbihcImRpZC1uYXZpZ2F0ZS1pbi1wYWdlXCIsIHRoaXMub25Td2l0Y2guYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU3dpdGNoKCkge1xyXG4gICAgICAgIHRoaXMuZW1pdChcInBhZ2Utc3dpdGNoXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hZGRvbkxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcy5hZGRvbkxpc3RbaV0ucGx1Z2luO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVbdGhpcy5hZGRvbkxpc3RbaV0uaWRdKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihwbHVnaW4ub25Td2l0Y2gpID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vblN3aXRjaCgpOyB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7IExvZ2dlci5zdGFja3RyYWNlKHRoaXMubmFtZSwgXCJVbmFibGUgdG8gZmlyZSBvblN3aXRjaCBmb3IgXCIgKyB0aGlzLmFkZG9uTGlzdFtpXS5uYW1lICsgXCIuXCIsIGVycik7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk11dGF0aW9uKG11dGF0aW9uKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFkZG9uTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzLmFkZG9uTGlzdFtpXS5wbHVnaW47XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGF0ZVt0aGlzLmFkZG9uTGlzdFtpXS5pZF0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkgeyBwbHVnaW4ub2JzZXJ2ZXIobXV0YXRpb24pOyB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7IExvZ2dlci5zdGFja3RyYWNlKHRoaXMubmFtZSwgXCJVbmFibGUgdG8gZmlyZSBvYnNlcnZlciBmb3IgXCIgKyB0aGlzLmFkZG9uTGlzdFtpXS5uYW1lICsgXCIuXCIsIGVycik7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/pluginmanager.js\n"); /***/ }), @@ -539,7 +539,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _loc /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _addonmanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./addonmanager */ \"./src/modules/addonmanager.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _ui_settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/settings */ \"./src/ui/settings.js\");\n\n\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ThemeManager extends _addonmanager__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n get name() {\n return \"ThemeManager\";\n }\n\n get moduleExtension() {\n return \".css\";\n }\n\n get extension() {\n return \".theme.css\";\n }\n\n get addonFolder() {\n return path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"themes\");\n }\n\n get prefix() {\n return \"theme\";\n }\n\n initialize() {\n const errors = super.initialize();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].registerPanel(\"themes\", _strings__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Panels.themes, {\n element: () => _ui_settings__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getAddonPanel(_strings__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Panels.themes, this.addonList, this.state, {\n folder: this.addonFolder,\n onChange: this.toggleTheme.bind(this),\n reload: this.reloadTheme.bind(this),\n refreshList: this.updateThemeList.bind(this)\n })\n });\n return errors;\n }\n /* Aliases */\n\n\n updateThemeList() {\n return this.updateList();\n }\n\n loadAllThemes() {\n return this.loadAllAddons();\n }\n\n enableTheme(idOrAddon) {\n return this.enableAddon(idOrAddon);\n }\n\n disableTheme(idOrAddon) {\n return this.disableAddon(idOrAddon);\n }\n\n toggleTheme(id) {\n return this.toggleAddon(id);\n }\n\n unloadTheme(idOrFileOrAddon) {\n return this.unloadAddon(idOrFileOrAddon);\n }\n\n loadTheme(filename) {\n const error = this.loadAddon(filename);\n if (error) _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].showAddonErrors({\n themes: [error]\n });\n }\n\n reloadTheme(idOrFileOrAddon) {\n const error = this.reloadAddon(idOrFileOrAddon);\n if (error) _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].showAddonErrors({\n themes: [error]\n });\n }\n /* Overrides */\n\n\n getFileModification(module, fileContent, meta) {\n meta.css = fileContent;\n return `module.exports = ${JSON.stringify(meta)};`;\n }\n\n startAddon(id) {\n return this.addTheme(id);\n }\n\n stopAddon(id) {\n return this.removeTheme(id);\n }\n\n addTheme(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].injectTheme(addon.id, addon.css);\n _ui_toasts__WEBPACK_IMPORTED_MODULE_5__[\"default\"].show(`${addon.name} v${addon.version} has been applied.`);\n }\n\n removeTheme(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].removeTheme(addon.id);\n _ui_toasts__WEBPACK_IMPORTED_MODULE_5__[\"default\"].show(`${addon.name} v${addon.version} has been removed.`);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvdGhlbWVtYW5hZ2VyLmpzPzQwNzgiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJUaGVtZU1hbmFnZXIiLCJBZGRvbk1hbmFnZXIiLCJuYW1lIiwibW9kdWxlRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiYWRkb25Gb2xkZXIiLCJyZXNvbHZlIiwiQ29uZmlnIiwiZGF0YVBhdGgiLCJwcmVmaXgiLCJpbml0aWFsaXplIiwiZXJyb3JzIiwiU2V0dGluZ3MiLCJyZWdpc3RlclBhbmVsIiwiU3RyaW5ncyIsIlBhbmVscyIsInRoZW1lcyIsImVsZW1lbnQiLCJTZXR0aW5nc1JlbmRlcmVyIiwiZ2V0QWRkb25QYW5lbCIsImFkZG9uTGlzdCIsInN0YXRlIiwiZm9sZGVyIiwib25DaGFuZ2UiLCJ0b2dnbGVUaGVtZSIsImJpbmQiLCJyZWxvYWQiLCJyZWxvYWRUaGVtZSIsInJlZnJlc2hMaXN0IiwidXBkYXRlVGhlbWVMaXN0IiwidXBkYXRlTGlzdCIsImxvYWRBbGxUaGVtZXMiLCJsb2FkQWxsQWRkb25zIiwiZW5hYmxlVGhlbWUiLCJpZE9yQWRkb24iLCJlbmFibGVBZGRvbiIsImRpc2FibGVUaGVtZSIsImRpc2FibGVBZGRvbiIsImlkIiwidG9nZ2xlQWRkb24iLCJ1bmxvYWRUaGVtZSIsImlkT3JGaWxlT3JBZGRvbiIsInVubG9hZEFkZG9uIiwibG9hZFRoZW1lIiwiZmlsZW5hbWUiLCJlcnJvciIsImxvYWRBZGRvbiIsIk1vZGFscyIsInNob3dBZGRvbkVycm9ycyIsInJlbG9hZEFkZG9uIiwiZ2V0RmlsZU1vZGlmaWNhdGlvbiIsIm1vZHVsZSIsImZpbGVDb250ZW50IiwibWV0YSIsImNzcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFydEFkZG9uIiwiYWRkVGhlbWUiLCJzdG9wQWRkb24iLCJyZW1vdmVUaGVtZSIsImFkZG9uIiwiZmluZCIsInAiLCJET01NYW5hZ2VyIiwiaW5qZWN0VGhlbWUiLCJUb2FzdHMiLCJzaG93IiwidmVyc2lvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxJQUFJLEdBQUdDLG1CQUFPLENBQUMsa0JBQUQsQ0FBcEI7O0FBRWUsbUVBQUksTUFBTUMsWUFBTixTQUEyQkMscURBQTNCLENBQXdDO0FBQ3ZELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sY0FBUDtBQUF1Qjs7QUFDbkMsTUFBSUMsZUFBSixHQUFzQjtBQUFDLFdBQU8sTUFBUDtBQUFlOztBQUN0QyxNQUFJQyxTQUFKLEdBQWdCO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUN0QyxNQUFJQyxXQUFKLEdBQWtCO0FBQUMsV0FBT1AsSUFBSSxDQUFDUSxPQUFMLENBQWFDLDJDQUFNLENBQUNDLFFBQXBCLEVBQThCLFFBQTlCLENBQVA7QUFBZ0Q7O0FBQ25FLE1BQUlDLE1BQUosR0FBYTtBQUFDLFdBQU8sT0FBUDtBQUFnQjs7QUFFOUJDLFlBQVUsR0FBRztBQUNULFVBQU1DLE1BQU0sR0FBRyxNQUFNRCxVQUFOLEVBQWY7QUFDQUUsNERBQVEsQ0FBQ0MsYUFBVCxDQUF1QixRQUF2QixFQUFpQ0MsZ0RBQU8sQ0FBQ0MsTUFBUixDQUFlQyxNQUFoRCxFQUF3RDtBQUFDQyxhQUFPLEVBQUUsTUFBTUMsb0RBQWdCLENBQUNDLGFBQWpCLENBQStCTCxnREFBTyxDQUFDQyxNQUFSLENBQWVDLE1BQTlDLEVBQXNELEtBQUtJLFNBQTNELEVBQXNFLEtBQUtDLEtBQTNFLEVBQWtGO0FBQ3RKQyxjQUFNLEVBQUUsS0FBS2pCLFdBRHlJO0FBRXRKa0IsZ0JBQVEsRUFBRSxLQUFLQyxXQUFMLENBQWlCQyxJQUFqQixDQUFzQixJQUF0QixDQUY0STtBQUd0SkMsY0FBTSxFQUFFLEtBQUtDLFdBQUwsQ0FBaUJGLElBQWpCLENBQXNCLElBQXRCLENBSDhJO0FBSXRKRyxtQkFBVyxFQUFFLEtBQUtDLGVBQUwsQ0FBcUJKLElBQXJCLENBQTBCLElBQTFCO0FBSnlJLE9BQWxGO0FBQWhCLEtBQXhEO0FBTUEsV0FBT2QsTUFBUDtBQUNIO0FBRUQ7OztBQUNBa0IsaUJBQWUsR0FBRztBQUFDLFdBQU8sS0FBS0MsVUFBTCxFQUFQO0FBQTBCOztBQUM3Q0MsZUFBYSxHQUFHO0FBQUMsV0FBTyxLQUFLQyxhQUFMLEVBQVA7QUFBNkI7O0FBRTlDQyxhQUFXLENBQUNDLFNBQUQsRUFBWTtBQUFDLFdBQU8sS0FBS0MsV0FBTCxDQUFpQkQsU0FBakIsQ0FBUDtBQUFvQzs7QUFDNURFLGNBQVksQ0FBQ0YsU0FBRCxFQUFZO0FBQUMsV0FBTyxLQUFLRyxZQUFMLENBQWtCSCxTQUFsQixDQUFQO0FBQXFDOztBQUM5RFYsYUFBVyxDQUFDYyxFQUFELEVBQUs7QUFBQyxXQUFPLEtBQUtDLFdBQUwsQ0FBaUJELEVBQWpCLENBQVA7QUFBNkI7O0FBRTlDRSxhQUFXLENBQUNDLGVBQUQsRUFBa0I7QUFBQyxXQUFPLEtBQUtDLFdBQUwsQ0FBaUJELGVBQWpCLENBQVA7QUFBMEM7O0FBRXhFRSxXQUFTLENBQUNDLFFBQUQsRUFBVztBQUNoQixVQUFNQyxLQUFLLEdBQUcsS0FBS0MsU0FBTCxDQUFlRixRQUFmLENBQWQ7QUFDQSxRQUFJQyxLQUFKLEVBQVdFLGtEQUFNLENBQUNDLGVBQVAsQ0FBdUI7QUFBQ2hDLFlBQU0sRUFBRSxDQUFDNkIsS0FBRDtBQUFULEtBQXZCO0FBQ2Q7O0FBRURsQixhQUFXLENBQUNjLGVBQUQsRUFBa0I7QUFDekIsVUFBTUksS0FBSyxHQUFHLEtBQUtJLFdBQUwsQ0FBaUJSLGVBQWpCLENBQWQ7QUFDQSxRQUFJSSxLQUFKLEVBQVdFLGtEQUFNLENBQUNDLGVBQVAsQ0FBdUI7QUFBQ2hDLFlBQU0sRUFBRSxDQUFDNkIsS0FBRDtBQUFULEtBQXZCO0FBQ2Q7QUFFRDs7O0FBQ0FLLHFCQUFtQixDQUFDQyxNQUFELEVBQVNDLFdBQVQsRUFBc0JDLElBQXRCLEVBQTRCO0FBQzNDQSxRQUFJLENBQUNDLEdBQUwsR0FBV0YsV0FBWDtBQUNBLFdBQVEsb0JBQW1CRyxJQUFJLENBQUNDLFNBQUwsQ0FBZUgsSUFBZixDQUFxQixHQUFoRDtBQUNIOztBQUVESSxZQUFVLENBQUNuQixFQUFELEVBQUs7QUFBQyxXQUFPLEtBQUtvQixRQUFMLENBQWNwQixFQUFkLENBQVA7QUFBMEI7O0FBQzFDcUIsV0FBUyxDQUFDckIsRUFBRCxFQUFLO0FBQUMsV0FBTyxLQUFLc0IsV0FBTCxDQUFpQnRCLEVBQWpCLENBQVA7QUFBNkI7O0FBRTVDb0IsVUFBUSxDQUFDeEIsU0FBRCxFQUFZO0FBQ2hCLFVBQU0yQixLQUFLLEdBQUcsT0FBTzNCLFNBQVAsSUFBcUIsUUFBckIsR0FBZ0MsS0FBS2QsU0FBTCxDQUFlMEMsSUFBZixDQUFvQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUN6QixFQUFGLElBQVFKLFNBQWpDLENBQWhDLEdBQThFQSxTQUE1RjtBQUNBLFFBQUksQ0FBQzJCLEtBQUwsRUFBWTtBQUNaRyx1REFBVSxDQUFDQyxXQUFYLENBQXVCSixLQUFLLENBQUN2QixFQUE3QixFQUFpQ3VCLEtBQUssQ0FBQ1AsR0FBdkM7QUFDQVksc0RBQU0sQ0FBQ0MsSUFBUCxDQUFhLEdBQUVOLEtBQUssQ0FBQzNELElBQUssS0FBSTJELEtBQUssQ0FBQ08sT0FBUSxvQkFBNUM7QUFDSDs7QUFFRFIsYUFBVyxDQUFDMUIsU0FBRCxFQUFZO0FBQ25CLFVBQU0yQixLQUFLLEdBQUcsT0FBTzNCLFNBQVAsSUFBcUIsUUFBckIsR0FBZ0MsS0FBS2QsU0FBTCxDQUFlMEMsSUFBZixDQUFvQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUN6QixFQUFGLElBQVFKLFNBQWpDLENBQWhDLEdBQThFQSxTQUE1RjtBQUNBLFFBQUksQ0FBQzJCLEtBQUwsRUFBWTtBQUNaRyx1REFBVSxDQUFDSixXQUFYLENBQXVCQyxLQUFLLENBQUN2QixFQUE3QjtBQUNBNEIsc0RBQU0sQ0FBQ0MsSUFBUCxDQUFhLEdBQUVOLEtBQUssQ0FBQzNELElBQUssS0FBSTJELEtBQUssQ0FBQ08sT0FBUSxvQkFBNUM7QUFDSDs7QUEzRHNELENBQTVDLEVBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy90aGVtZW1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IEFkZG9uTWFuYWdlciBmcm9tIFwiLi9hZGRvbm1hbmFnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcbmltcG9ydCBTdHJpbmdzIGZyb20gXCIuL3N0cmluZ3NcIjtcclxuXHJcbmltcG9ydCBUb2FzdHMgZnJvbSBcIi4uL3VpL3RvYXN0c1wiO1xyXG5pbXBvcnQgTW9kYWxzIGZyb20gXCIuLi91aS9tb2RhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzUmVuZGVyZXIgZnJvbSBcIi4uL3VpL3NldHRpbmdzXCI7XHJcblxyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVGhlbWVNYW5hZ2VyIGV4dGVuZHMgQWRkb25NYW5hZ2VyIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlRoZW1lTWFuYWdlclwiO31cclxuICAgIGdldCBtb2R1bGVFeHRlbnNpb24oKSB7cmV0dXJuIFwiLmNzc1wiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiLnRoZW1lLmNzc1wiO31cclxuICAgIGdldCBhZGRvbkZvbGRlcigpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbmZpZy5kYXRhUGF0aCwgXCJ0aGVtZXNcIik7fVxyXG4gICAgZ2V0IHByZWZpeCgpIHtyZXR1cm4gXCJ0aGVtZVwiO31cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlclBhbmVsKFwidGhlbWVzXCIsIFN0cmluZ3MuUGFuZWxzLnRoZW1lcywge2VsZW1lbnQ6ICgpID0+IFNldHRpbmdzUmVuZGVyZXIuZ2V0QWRkb25QYW5lbChTdHJpbmdzLlBhbmVscy50aGVtZXMsIHRoaXMuYWRkb25MaXN0LCB0aGlzLnN0YXRlLCB7XHJcbiAgICAgICAgICAgIGZvbGRlcjogdGhpcy5hZGRvbkZvbGRlcixcclxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMudG9nZ2xlVGhlbWUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgcmVsb2FkOiB0aGlzLnJlbG9hZFRoZW1lLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHJlZnJlc2hMaXN0OiB0aGlzLnVwZGF0ZVRoZW1lTGlzdC5iaW5kKHRoaXMpXHJcbiAgICAgICAgfSl9KTtcclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIEFsaWFzZXMgKi9cclxuICAgIHVwZGF0ZVRoZW1lTGlzdCgpIHtyZXR1cm4gdGhpcy51cGRhdGVMaXN0KCk7fVxyXG4gICAgbG9hZEFsbFRoZW1lcygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQWRkb25zKCk7fVxyXG5cclxuICAgIGVuYWJsZVRoZW1lKGlkT3JBZGRvbikge3JldHVybiB0aGlzLmVuYWJsZUFkZG9uKGlkT3JBZGRvbik7fVxyXG4gICAgZGlzYWJsZVRoZW1lKGlkT3JBZGRvbikge3JldHVybiB0aGlzLmRpc2FibGVBZGRvbihpZE9yQWRkb24pO31cclxuICAgIHRvZ2dsZVRoZW1lKGlkKSB7cmV0dXJuIHRoaXMudG9nZ2xlQWRkb24oaWQpO31cclxuXHJcbiAgICB1bmxvYWRUaGVtZShpZE9yRmlsZU9yQWRkb24pIHtyZXR1cm4gdGhpcy51bmxvYWRBZGRvbihpZE9yRmlsZU9yQWRkb24pO31cclxuXHJcbiAgICBsb2FkVGhlbWUoZmlsZW5hbWUpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubG9hZEFkZG9uKGZpbGVuYW1lKTtcclxuICAgICAgICBpZiAoZXJyb3IpIE1vZGFscy5zaG93QWRkb25FcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZFRoZW1lKGlkT3JGaWxlT3JBZGRvbikge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5yZWxvYWRBZGRvbihpZE9yRmlsZU9yQWRkb24pO1xyXG4gICAgICAgIGlmIChlcnJvcikgTW9kYWxzLnNob3dBZGRvbkVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogT3ZlcnJpZGVzICovXHJcbiAgICBnZXRGaWxlTW9kaWZpY2F0aW9uKG1vZHVsZSwgZmlsZUNvbnRlbnQsIG1ldGEpIHtcclxuICAgICAgICBtZXRhLmNzcyA9IGZpbGVDb250ZW50O1xyXG4gICAgICAgIHJldHVybiBgbW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtgO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0QWRkb24oaWQpIHtyZXR1cm4gdGhpcy5hZGRUaGVtZShpZCk7fVxyXG4gICAgc3RvcEFkZG9uKGlkKSB7cmV0dXJuIHRoaXMucmVtb3ZlVGhlbWUoaWQpO31cclxuXHJcbiAgICBhZGRUaGVtZShpZE9yQWRkb24pIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHR5cGVvZihpZE9yQWRkb24pID09IFwic3RyaW5nXCIgPyB0aGlzLmFkZG9uTGlzdC5maW5kKHAgPT4gcC5pZCA9PSBpZE9yQWRkb24pIDogaWRPckFkZG9uO1xyXG4gICAgICAgIGlmICghYWRkb24pIHJldHVybjtcclxuICAgICAgICBET01NYW5hZ2VyLmluamVjdFRoZW1lKGFkZG9uLmlkLCBhZGRvbi5jc3MpO1xyXG4gICAgICAgIFRvYXN0cy5zaG93KGAke2FkZG9uLm5hbWV9IHYke2FkZG9uLnZlcnNpb259IGhhcyBiZWVuIGFwcGxpZWQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVGhlbWUoaWRPckFkZG9uKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckFkZG9uKSA6IGlkT3JBZGRvbjtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm47XHJcbiAgICAgICAgRE9NTWFuYWdlci5yZW1vdmVUaGVtZShhZGRvbi5pZCk7XHJcbiAgICAgICAgVG9hc3RzLnNob3coYCR7YWRkb24ubmFtZX0gdiR7YWRkb24udmVyc2lvbn0gaGFzIGJlZW4gcmVtb3ZlZC5gKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/thememanager.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _addonmanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./addonmanager */ \"./src/modules/addonmanager.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _strings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./strings */ \"./src/modules/strings.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _ui_settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/settings */ \"./src/ui/settings.js\");\n\n\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ThemeManager extends _addonmanager__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n get name() {\n return \"ThemeManager\";\n }\n\n get moduleExtension() {\n return \".css\";\n }\n\n get extension() {\n return \".theme.css\";\n }\n\n get addonFolder() {\n return path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"themes\");\n }\n\n get prefix() {\n return \"theme\";\n }\n\n get language() {\n return \"css\";\n }\n\n initialize() {\n const errors = super.initialize();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"default\"].registerPanel(\"themes\", _strings__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Panels.themes, {\n element: () => _ui_settings__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getAddonPanel(_strings__WEBPACK_IMPORTED_MODULE_4__[\"default\"].Panels.themes, this.addonList, this.state, {\n folder: this.addonFolder,\n onChange: this.toggleTheme.bind(this),\n reload: this.reloadTheme.bind(this),\n refreshList: this.updateThemeList.bind(this),\n saveAddon: this.saveAddon.bind(this),\n editAddon: this.editAddon.bind(this),\n deleteAddon: this.deleteAddon.bind(this),\n prefix: this.prefix\n })\n });\n return errors;\n }\n /* Aliases */\n\n\n updateThemeList() {\n return this.updateList();\n }\n\n loadAllThemes() {\n return this.loadAllAddons();\n }\n\n enableTheme(idOrAddon) {\n return this.enableAddon(idOrAddon);\n }\n\n disableTheme(idOrAddon) {\n return this.disableAddon(idOrAddon);\n }\n\n toggleTheme(id) {\n return this.toggleAddon(id);\n }\n\n unloadTheme(idOrFileOrAddon) {\n return this.unloadAddon(idOrFileOrAddon);\n }\n\n loadTheme(filename) {\n const error = this.loadAddon(filename);\n if (error) _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].showAddonErrors({\n themes: [error]\n });\n }\n\n reloadTheme(idOrFileOrAddon) {\n const error = this.reloadAddon(idOrFileOrAddon);\n if (error) _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].showAddonErrors({\n themes: [error]\n });\n }\n /* Overrides */\n\n\n getFileModification(module, fileContent, meta) {\n meta.css = fileContent;\n return `module.exports = ${JSON.stringify(meta)};`;\n }\n\n startAddon(id) {\n return this.addTheme(id);\n }\n\n stopAddon(id) {\n return this.removeTheme(id);\n }\n\n addTheme(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].injectTheme(addon.id, addon.css);\n _ui_toasts__WEBPACK_IMPORTED_MODULE_5__[\"default\"].show(`${addon.name} v${addon.version} has been applied.`);\n }\n\n removeTheme(idOrAddon) {\n const addon = typeof idOrAddon == \"string\" ? this.addonList.find(p => p.id == idOrAddon) : idOrAddon;\n if (!addon) return;\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].removeTheme(addon.id);\n _ui_toasts__WEBPACK_IMPORTED_MODULE_5__[\"default\"].show(`${addon.name} v${addon.version} has been removed.`);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvdGhlbWVtYW5hZ2VyLmpzPzQwNzgiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJUaGVtZU1hbmFnZXIiLCJBZGRvbk1hbmFnZXIiLCJuYW1lIiwibW9kdWxlRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiYWRkb25Gb2xkZXIiLCJyZXNvbHZlIiwiQ29uZmlnIiwiZGF0YVBhdGgiLCJwcmVmaXgiLCJsYW5ndWFnZSIsImluaXRpYWxpemUiLCJlcnJvcnMiLCJTZXR0aW5ncyIsInJlZ2lzdGVyUGFuZWwiLCJTdHJpbmdzIiwiUGFuZWxzIiwidGhlbWVzIiwiZWxlbWVudCIsIlNldHRpbmdzUmVuZGVyZXIiLCJnZXRBZGRvblBhbmVsIiwiYWRkb25MaXN0Iiwic3RhdGUiLCJmb2xkZXIiLCJvbkNoYW5nZSIsInRvZ2dsZVRoZW1lIiwiYmluZCIsInJlbG9hZCIsInJlbG9hZFRoZW1lIiwicmVmcmVzaExpc3QiLCJ1cGRhdGVUaGVtZUxpc3QiLCJzYXZlQWRkb24iLCJlZGl0QWRkb24iLCJkZWxldGVBZGRvbiIsInVwZGF0ZUxpc3QiLCJsb2FkQWxsVGhlbWVzIiwibG9hZEFsbEFkZG9ucyIsImVuYWJsZVRoZW1lIiwiaWRPckFkZG9uIiwiZW5hYmxlQWRkb24iLCJkaXNhYmxlVGhlbWUiLCJkaXNhYmxlQWRkb24iLCJpZCIsInRvZ2dsZUFkZG9uIiwidW5sb2FkVGhlbWUiLCJpZE9yRmlsZU9yQWRkb24iLCJ1bmxvYWRBZGRvbiIsImxvYWRUaGVtZSIsImZpbGVuYW1lIiwiZXJyb3IiLCJsb2FkQWRkb24iLCJNb2RhbHMiLCJzaG93QWRkb25FcnJvcnMiLCJyZWxvYWRBZGRvbiIsImdldEZpbGVNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJmaWxlQ29udGVudCIsIm1ldGEiLCJjc3MiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRBZGRvbiIsImFkZFRoZW1lIiwic3RvcEFkZG9uIiwicmVtb3ZlVGhlbWUiLCJhZGRvbiIsImZpbmQiLCJwIiwiRE9NTWFuYWdlciIsImluamVjdFRoZW1lIiwiVG9hc3RzIiwic2hvdyIsInZlcnNpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTUEsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUVlLG1FQUFJLE1BQU1DLFlBQU4sU0FBMkJDLHFEQUEzQixDQUF3QztBQUN2RCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLGNBQVA7QUFBdUI7O0FBQ25DLE1BQUlDLGVBQUosR0FBc0I7QUFBQyxXQUFPLE1BQVA7QUFBZTs7QUFDdEMsTUFBSUMsU0FBSixHQUFnQjtBQUFDLFdBQU8sWUFBUDtBQUFxQjs7QUFDdEMsTUFBSUMsV0FBSixHQUFrQjtBQUFDLFdBQU9QLElBQUksQ0FBQ1EsT0FBTCxDQUFhQywyQ0FBTSxDQUFDQyxRQUFwQixFQUE4QixRQUE5QixDQUFQO0FBQWdEOztBQUNuRSxNQUFJQyxNQUFKLEdBQWE7QUFBQyxXQUFPLE9BQVA7QUFBZ0I7O0FBQzlCLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sS0FBUDtBQUFjOztBQUU5QkMsWUFBVSxHQUFHO0FBQ1QsVUFBTUMsTUFBTSxHQUFHLE1BQU1ELFVBQU4sRUFBZjtBQUNBRSw0REFBUSxDQUFDQyxhQUFULENBQXVCLFFBQXZCLEVBQWlDQyxnREFBTyxDQUFDQyxNQUFSLENBQWVDLE1BQWhELEVBQXdEO0FBQUNDLGFBQU8sRUFBRSxNQUFNQyxvREFBZ0IsQ0FBQ0MsYUFBakIsQ0FBK0JMLGdEQUFPLENBQUNDLE1BQVIsQ0FBZUMsTUFBOUMsRUFBc0QsS0FBS0ksU0FBM0QsRUFBc0UsS0FBS0MsS0FBM0UsRUFBa0Y7QUFDdEpDLGNBQU0sRUFBRSxLQUFLbEIsV0FEeUk7QUFFdEptQixnQkFBUSxFQUFFLEtBQUtDLFdBQUwsQ0FBaUJDLElBQWpC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RURSLGFBQVcsQ0FBQzFCLFNBQUQsRUFBWTtBQUNuQixVQUFNMkIsS0FBSyxHQUFHLE9BQU8zQixTQUFQLElBQXFCLFFBQXJCLEdBQWdDLEtBQUtqQixTQUFMLENBQWU2QyxJQUFmLENBQW9CQyxDQUFDLElBQUlBLENBQUMsQ0FBQ3pCLEVBQUYsSUFBUUosU0FBakMsQ0FBaEMsR0FBOEVBLFNBQTVGO0FBQ0EsUUFBSSxDQUFDMkIsS0FBTCxFQUFZO0FBQ1pHLHVEQUFVLENBQUNKLFdBQVgsQ0FBdUJDLEtBQUssQ0FBQ3ZCLEVBQTdCO0FBQ0E0QixzREFBTSxDQUFDQyxJQUFQLENBQWEsR0FBRU4sS0FBSyxDQUFDL0QsSUFBSyxLQUFJK0QsS0FBSyxDQUFDTyxPQUFRLG9CQUE1QztBQUNIOztBQWhFc0QsQ0FBNUMsRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL3RoZW1lbWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgQWRkb25NYW5hZ2VyIGZyb20gXCIuL2FkZG9ubWFuYWdlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCBET01NYW5hZ2VyIGZyb20gXCIuL2RvbW1hbmFnZXJcIjtcclxuaW1wb3J0IFN0cmluZ3MgZnJvbSBcIi4vc3RyaW5nc1wiO1xyXG5cclxuaW1wb3J0IFRvYXN0cyBmcm9tIFwiLi4vdWkvdG9hc3RzXCI7XHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL3VpL21vZGFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3NSZW5kZXJlciBmcm9tIFwiLi4vdWkvc2V0dGluZ3NcIjtcclxuXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBUaGVtZU1hbmFnZXIgZXh0ZW5kcyBBZGRvbk1hbmFnZXIge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiVGhlbWVNYW5hZ2VyXCI7fVxyXG4gICAgZ2V0IG1vZHVsZUV4dGVuc2lvbigpIHtyZXR1cm4gXCIuY3NzXCI7fVxyXG4gICAgZ2V0IGV4dGVuc2lvbigpIHtyZXR1cm4gXCIudGhlbWUuY3NzXCI7fVxyXG4gICAgZ2V0IGFkZG9uRm9sZGVyKCkge3JldHVybiBwYXRoLnJlc29sdmUoQ29uZmlnLmRhdGFQYXRoLCBcInRoZW1lc1wiKTt9XHJcbiAgICBnZXQgcHJlZml4KCkge3JldHVybiBcInRoZW1lXCI7fVxyXG4gICAgZ2V0IGxhbmd1YWdlKCkge3JldHVybiBcImNzc1wiO31cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlclBhbmVsKFwidGhlbWVzXCIsIFN0cmluZ3MuUGFuZWxzLnRoZW1lcywge2VsZW1lbnQ6ICgpID0+IFNldHRpbmdzUmVuZGVyZXIuZ2V0QWRkb25QYW5lbChTdHJpbmdzLlBhbmVscy50aGVtZXMsIHRoaXMuYWRkb25MaXN0LCB0aGlzLnN0YXRlLCB7XHJcbiAgICAgICAgICAgIGZvbGRlcjogdGhpcy5hZGRvbkZvbGRlcixcclxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMudG9nZ2xlVGhlbWUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgcmVsb2FkOiB0aGlzLnJlbG9hZFRoZW1lLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHJlZnJlc2hMaXN0OiB0aGlzLnVwZGF0ZVRoZW1lTGlzdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBzYXZlQWRkb246IHRoaXMuc2F2ZUFkZG9uLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGVkaXRBZGRvbjogdGhpcy5lZGl0QWRkb24uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgZGVsZXRlQWRkb246IHRoaXMuZGVsZXRlQWRkb24uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgcHJlZml4OiB0aGlzLnByZWZpeFxyXG4gICAgICAgIH0pfSk7XHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxuXHJcbiAgICAvKiBBbGlhc2VzICovXHJcbiAgICB1cGRhdGVUaGVtZUxpc3QoKSB7cmV0dXJuIHRoaXMudXBkYXRlTGlzdCgpO31cclxuICAgIGxvYWRBbGxUaGVtZXMoKSB7cmV0dXJuIHRoaXMubG9hZEFsbEFkZG9ucygpO31cclxuXHJcbiAgICBlbmFibGVUaGVtZShpZE9yQWRkb24pIHtyZXR1cm4gdGhpcy5lbmFibGVBZGRvbihpZE9yQWRkb24pO31cclxuICAgIGRpc2FibGVUaGVtZShpZE9yQWRkb24pIHtyZXR1cm4gdGhpcy5kaXNhYmxlQWRkb24oaWRPckFkZG9uKTt9XHJcbiAgICB0b2dnbGVUaGVtZShpZCkge3JldHVybiB0aGlzLnRvZ2dsZUFkZG9uKGlkKTt9XHJcblxyXG4gICAgdW5sb2FkVGhlbWUoaWRPckZpbGVPckFkZG9uKSB7cmV0dXJuIHRoaXMudW5sb2FkQWRkb24oaWRPckZpbGVPckFkZG9uKTt9XHJcblxyXG4gICAgbG9hZFRoZW1lKGZpbGVuYW1lKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmxvYWRBZGRvbihmaWxlbmFtZSk7XHJcbiAgICAgICAgaWYgKGVycm9yKSBNb2RhbHMuc2hvd0FkZG9uRXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRUaGVtZShpZE9yRmlsZU9yQWRkb24pIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucmVsb2FkQWRkb24oaWRPckZpbGVPckFkZG9uKTtcclxuICAgICAgICBpZiAoZXJyb3IpIE1vZGFscy5zaG93QWRkb25FcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIE92ZXJyaWRlcyAqL1xyXG4gICAgZ2V0RmlsZU1vZGlmaWNhdGlvbihtb2R1bGUsIGZpbGVDb250ZW50LCBtZXRhKSB7XHJcbiAgICAgICAgbWV0YS5jc3MgPSBmaWxlQ29udGVudDtcclxuICAgICAgICByZXR1cm4gYG1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07YDtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydEFkZG9uKGlkKSB7cmV0dXJuIHRoaXMuYWRkVGhlbWUoaWQpO31cclxuICAgIHN0b3BBZGRvbihpZCkge3JldHVybiB0aGlzLnJlbW92ZVRoZW1lKGlkKTt9XHJcblxyXG4gICAgYWRkVGhlbWUoaWRPckFkZG9uKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0eXBlb2YoaWRPckFkZG9uKSA9PSBcInN0cmluZ1wiID8gdGhpcy5hZGRvbkxpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckFkZG9uKSA6IGlkT3JBZGRvbjtcclxuICAgICAgICBpZiAoIWFkZG9uKSByZXR1cm47XHJcbiAgICAgICAgRE9NTWFuYWdlci5pbmplY3RUaGVtZShhZGRvbi5pZCwgYWRkb24uY3NzKTtcclxuICAgICAgICBUb2FzdHMuc2hvdyhgJHthZGRvbi5uYW1lfSB2JHthZGRvbi52ZXJzaW9ufSBoYXMgYmVlbiBhcHBsaWVkLmApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVRoZW1lKGlkT3JBZGRvbikge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdHlwZW9mKGlkT3JBZGRvbikgPT0gXCJzdHJpbmdcIiA/IHRoaXMuYWRkb25MaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JBZGRvbikgOiBpZE9yQWRkb247XHJcbiAgICAgICAgaWYgKCFhZGRvbikgcmV0dXJuO1xyXG4gICAgICAgIERPTU1hbmFnZXIucmVtb3ZlVGhlbWUoYWRkb24uaWQpO1xyXG4gICAgICAgIFRvYXN0cy5zaG93KGAke2FkZG9uLm5hbWV9IHYke2FkZG9uLnZlcnNpb259IGhhcyBiZWVuIHJlbW92ZWQuYCk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/thememanager.js\n"); /***/ }), @@ -707,7 +707,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modu /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return FloatingWindow; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _structs_screen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../structs/screen */ \"./src/structs/screen.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modals */ \"./src/ui/modals.js\");\n\n\n\n\nclass FloatingWindow extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n modalOpen: false\n };\n this.offX = 0;\n this.offY = 0;\n this.titlebar = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.window = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.close = this.close.bind(this);\n this.onDrag = this.onDrag.bind(this);\n this.onDragStart = this.onDragStart.bind(this);\n this.onDragStop = this.onDragStop.bind(this);\n this.onResizeStart = this.onResizeStart.bind(this);\n }\n\n componentDidMount() {\n this.window.current.addEventListener(\"mousedown\", this.onResizeStart, false);\n this.titlebar.current.addEventListener(\"mousedown\", this.onDragStart, false);\n document.addEventListener(\"mouseup\", this.onDragStop, false);\n }\n\n onResizeStart() {\n this.currentWidth = this.window.current.style.width;\n this.currentHeight = this.window.current.style.height;\n }\n\n onDragStop() {\n document.removeEventListener(\"mousemove\", this.onDrag, true);\n\n if (this.props.onResize) {\n const width = this.window.current.style.width;\n const height = this.window.current.style.height;\n if (width != this.currentWidth || height != this.currentHeight) this.props.onResize();\n this.currentWidth = width;\n this.currentHeight = height;\n }\n }\n\n onDragStart(e) {\n const div = this.window.current;\n this.offY = e.clientY - parseInt(div.offsetTop);\n this.offX = e.clientX - parseInt(div.offsetLeft);\n document.addEventListener(\"mousemove\", this.onDrag, true);\n }\n\n onDrag(e) {\n const div = this.window.current;\n div.style.position = \"fixed\";\n div.style.top = e.clientY - this.offY + \"px\";\n div.style.left = e.clientX - this.offX + \"px\";\n }\n\n componentWillUnmount() {\n this.titlebar.current.removeEventListener(\"mousedown\", this.onDragStart, false);\n document.removeEventListener(\"mouseup\", this.onDragStop, false);\n }\n\n render() {\n const top = this.props.center ? _structs_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"].height / 2 - this.props.height / 2 : this.props.top;\n const left = this.props.center ? _structs_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"].width / 2 - this.props.width / 2 : this.props.left; // console.log(top, left);\n\n const className = `floating-window${` ${this.props.className}` || \"\"}${this.props.resizable ? \" resizable\" : \"\"}${this.state.modalOpen ? \" modal-open\" : \"\"}`;\n const styles = {\n height: this.props.height,\n width: this.props.width,\n left: left || 0,\n top: top || 0\n };\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: this.props.id,\n className: className,\n ref: this.window,\n style: styles\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-titlebar\",\n ref: this.titlebar\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"title\"\n }, this.props.title), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-buttons\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"button close-button\",\n onClick: this.close\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null)))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-content\"\n }, this.props.children));\n }\n\n async close() {\n let shouldClose = true;\n const confirmClose = typeof this.props.confirmClose == \"function\" ? this.props.confirmClose() : this.props.confirmClose;\n\n if (confirmClose) {\n this.setState({\n modalOpen: true\n });\n shouldClose = await this.confirmClose();\n this.setState({\n modalOpen: false\n });\n }\n\n if (this.props.close && shouldClose) this.props.close();\n }\n\n confirmClose() {\n return new Promise(resolve => {\n _modals__WEBPACK_IMPORTED_MODULE_3__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.confirmClose, this.props.confirmationText, {\n danger: true,\n confirmText: \"Close\",\n onConfirm: () => {\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n }\n });\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Zsb2F0aW5nL3dpbmRvdy5qc3g/Y2YzZCJdLCJuYW1lcyI6WyJGbG9hdGluZ1dpbmRvdyIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwibW9kYWxPcGVuIiwib2ZmWCIsIm9mZlkiLCJ0aXRsZWJhciIsImNyZWF0ZVJlZiIsIndpbmRvdyIsImNsb3NlIiwiYmluZCIsIm9uRHJhZyIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnU3RvcCIsIm9uUmVzaXplU3RhcnQiLCJjb21wb25lbnREaWRNb3VudCIsImN1cnJlbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiZG9jdW1lbnQiLCJjdXJyZW50V2lkdGgiLCJzdHlsZSIsIndpZHRoIiwiY3VycmVudEhlaWdodCIsImhlaWdodCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvblJlc2l6ZSIsImUiLCJkaXYiLCJjbGllbnRZIiwicGFyc2VJbnQiLCJvZmZzZXRUb3AiLCJjbGllbnRYIiwib2Zmc2V0TGVmdCIsInBvc2l0aW9uIiwidG9wIiwibGVmdCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiY2VudGVyIiwiU2NyZWVuIiwiY2xhc3NOYW1lIiwicmVzaXphYmxlIiwic3R5bGVzIiwiaWQiLCJ0aXRsZSIsImNoaWxkcmVuIiwic2hvdWxkQ2xvc2UiLCJjb25maXJtQ2xvc2UiLCJzZXRTdGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiTW9kYWxzIiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiU3RyaW5ncyIsImNvbmZpcm1hdGlvblRleHQiLCJkYW5nZXIiLCJjb25maXJtVGV4dCIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLGNBQU4sU0FBNkJDLDZDQUFLLENBQUNDLFNBQW5DLENBQTZDO0FBRXhEQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFFQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBYjtBQUVBLFNBQUtDLElBQUwsR0FBWSxDQUFaO0FBQ0EsU0FBS0MsSUFBTCxHQUFZLENBQVo7QUFFQSxTQUFLQyxRQUFMLEdBQWdCUiw2Q0FBSyxDQUFDUyxTQUFOLEVBQWhCO0FBQ0EsU0FBS0MsTUFBTCxHQUFjViw2Q0FBSyxDQUFDUyxTQUFOLEVBQWQ7QUFFQSxTQUFLRSxLQUFMLEdBQWEsS0FBS0EsS0FBTCxDQUFXQyxJQUFYLENBQWdCLElBQWhCLENBQWI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZRCxJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDQSxTQUFLRSxXQUFMLEdBQW1CLEtBQUtBLFdBQUwsQ0FBaUJGLElBQWpCLENBQXNCLElBQXRCLENBQW5CO0FBQ0EsU0FBS0csVUFBTCxHQUFrQixLQUFLQSxVQUFMLENBQWdCSCxJQUFoQixDQUFxQixJQUFyQixDQUFsQjtBQUNBLFNBQUtJLGFBQUwsR0FBcUIsS0FBS0EsYUFBTCxDQUFtQkosSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBckI7QUFDSDs7QUFFREssbUJBQWlCLEdBQUc7QUFDaEIsU0FBS1AsTUFBTCxDQUFZUSxPQUFaLENBQW9CQyxnQkFBcEIsQ0FBcUMsV0FBckMsRUFBa0QsS0FBS0gsYUFBdkQsRUFBc0UsS0FBdEU7QUFDQSxTQUFLUixRQUFMLENBQWNVLE9BQWQsQ0FBc0JDLGdCQUF0QixDQUF1QyxXQUF2QyxFQUFvRCxLQUFLTCxXQUF6RCxFQUFzRSxLQUF0RTtBQUNBTSxZQUFRLENBQUNELGdCQUFULENBQTBCLFNBQTFCLEVBQXFDLEtBQUtKLFVBQTFDLEVBQXNELEtBQXREO0FBQ0g7O0FBRURDLGVBQWEsR0FBRztBQUNaLFNBQUtLLFlBQUwsR0FBb0IsS0FBS1gsTUFBTCxDQUFZUSxPQUFaLENBQW9CSSxLQUFwQixDQUEwQkMsS0FBOUM7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEtBQUtkLE1BQUwsQ0FBWVEsT0FBWixDQUFvQkksS0FBcEIsQ0FBMEJHLE1BQS9DO0FBQ0g7O0FBRURWLFlBQVUsR0FBRztBQUNUSyxZQUFRLENBQUNNLG1CQUFULENBQTZCLFdBQTdCLEVBQTBDLEtBQUtiLE1BQS9DLEVBQXVELElBQXZEOztBQUNBLFFBQUksS0FBS1YsS0FBTCxDQUFXd0IsUUFBZixFQUF5QjtBQUNyQixZQUFNSixLQUFLLEdBQUcsS0FBS2IsTUFBTCxDQUFZUSxPQUFaLENBQW9CSSxLQUFwQixDQUEwQkMsS0FBeEM7QUFDQSxZQUFNRSxNQUFNLEdBQUcsS0FBS2YsTUFBTCxDQUFZUSxPQUFaLENBQW9CSSxLQUFwQixDQUEwQkcsTUFBekM7QUFDQSxVQUFJRixLQUFLLElBQUksS0FBS0YsWUFBZCxJQUE4QkksTUFBTSxJQUFJLEtBQUtELGFBQWpELEVBQWdFLEtBQUtyQixLQUFMLENBQVd3QixRQUFYO0FBQ2hFLFdBQUtOLFlBQUwsR0FBb0JFLEtBQXBCO0FBQ0EsV0FBS0MsYUFBTCxHQUFxQkMsTUFBckI7QUFDSDtBQUNKOztBQUVEWCxhQUFXLENBQUNjLENBQUQsRUFBSTtBQUNYLFVBQU1DLEdBQUcsR0FBRyxLQUFLbkIsTUFBTCxDQUFZUSxPQUF4QjtBQUNBLFNBQUtYLElBQUwsR0FBWXFCLENBQUMsQ0FBQ0UsT0FBRixHQUFZQyxRQUFRLENBQUNGLEdBQUcsQ0FBQ0csU0FBTCxDQUFoQztBQUNBLFNBQUsxQixJQUFMLEdBQVlzQixDQUFDLENBQUNLLE9BQUYsR0FBWUYsUUFBUSxDQUFDRixHQUFHLENBQUNLLFVBQUwsQ0FBaEM7QUFDQWQsWUFBUSxDQUFDRCxnQkFBVCxDQUEwQixXQUExQixFQUF1QyxLQUFLTixNQUE1QyxFQUFvRCxJQUFwRDtBQUNIOztBQUVEQSxRQUFNLENBQUNlLENBQUQsRUFBSTtBQUNOLFVBQU1DLEdBQUcsR0FBRyxLQUFLbkIsTUFBTCxDQUFZUSxPQUF4QjtBQUNBVyxPQUFHLENBQUNQLEtBQUosQ0FBVWEsUUFBVixHQUFxQixPQUFyQjtBQUNBTixPQUFHLENBQUNQLEtBQUosQ0FBVWMsR0FBVixHQUFpQlIsQ0FBQyxDQUFDRSxPQUFGLEdBQVksS0FBS3ZCLElBQWxCLEdBQTBCLElBQTFDO0FBQ0FzQixPQUFHLENBQUNQLEtBQUosQ0FBVWUsSUFBVixHQUFrQlQsQ0FBQyxDQUFDSyxPQUFGLEdBQVksS0FBSzNCLElBQWxCLEdBQTBCLElBQTNDO0FBQ0g7O0FBRURnQyxzQkFBb0IsR0FBRztBQUNuQixTQUFLOUIsUUFBTCxDQUFjVSxPQUFkLENBQXNCUSxtQkFBdEIsQ0FBMEMsV0FBMUMsRUFBdUQsS0FBS1osV0FBNUQsRUFBeUUsS0FBekU7QUFDQU0sWUFBUSxDQUFDTSxtQkFBVCxDQUE2QixTQUE3QixFQUF3QyxLQUFLWCxVQUE3QyxFQUF5RCxLQUF6RDtBQUNIOztBQUVEd0IsUUFBTSxHQUFHO0FBQ0wsVUFBTUgsR0FBRyxHQUFHLEtBQUtqQyxLQUFMLENBQVdxQyxNQUFYLEdBQXFCQyx1REFBTSxDQUFDaEIsTUFBUCxHQUFnQixDQUFqQixHQUF1QixLQUFLdEIsS0FBTCxDQUFXc0IsTUFBWCxHQUFvQixDQUEvRCxHQUFvRSxLQUFLdEIsS0FBTCxDQUFXaUMsR0FBM0Y7QUFDQSxVQUFNQyxJQUFJLEdBQUcsS0FBS2xDLEtBQUwsQ0FBV3FDLE1BQVgsR0FBcUJDLHVEQUFNLENBQUNsQixLQUFQLEdBQWUsQ0FBaEIsR0FBc0IsS0FBS3BCLEtBQUwsQ0FBV29CLEtBQVgsR0FBbUIsQ0FBN0QsR0FBa0UsS0FBS3BCLEtBQUwsQ0FBV2tDLElBQTFGLENBRkssQ0FHTDs7QUFDQSxVQUFNSyxTQUFTLEdBQUksa0JBQWtCLElBQUcsS0FBS3ZDLEtBQUwsQ0FBV3VDLFNBQVUsRUFBekIsSUFBOEIsRUFBRyxHQUFFLEtBQUt2QyxLQUFMLENBQVd3QyxTQUFYLEdBQXVCLFlBQXZCLEdBQXNDLEVBQUcsR0FBRSxLQUFLdkMsS0FBTCxDQUFXQyxTQUFYLEdBQXVCLGFBQXZCLEdBQXVDLEVBQUcsRUFBNUo7QUFDQSxVQUFNdUMsTUFBTSxHQUFHO0FBQUNuQixZQUFNLEVBQUUsS0FBS3RCLEtBQUwsQ0FBV3NCLE1BQXBCO0FBQTRCRixXQUFLLEVBQUUsS0FBS3BCLEtBQUwsQ0FBV29CLEtBQTlDO0FBQXFEYyxVQUFJLEVBQUVBLElBQUksSUFBSSxDQUFuRTtBQUFzRUQsU0FBRyxFQUFFQSxHQUFHLElBQUk7QUFBbEYsS0FBZjtBQUNBLFdBQU87QUFBSyxRQUFFLEVBQUUsS0FBS2pDLEtBQUwsQ0FBVzBDLEVBQXBCO0FBQXdCLGVBQVMsRUFBRUgsU0FBbkM7QUFBOEMsU0FBRyxFQUFFLEtBQUtoQyxNQUF4RDtBQUFnRSxXQUFLLEVBQUVrQztBQUF2RSxPQUNLO0FBQUssZUFBUyxFQUFDLDBCQUFmO0FBQTBDLFNBQUcsRUFBRSxLQUFLcEM7QUFBcEQsT0FDSTtBQUFNLGVBQVMsRUFBQztBQUFoQixPQUF5QixLQUFLTCxLQUFMLENBQVcyQyxLQUFwQyxDQURKLEVBRUk7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNJO0FBQUssZUFBUyxFQUFDLHFCQUFmO0FBQXFDLGFBQU8sRUFBRSxLQUFLbkM7QUFBbkQsT0FDSSw0REFBQyxvREFBRCxPQURKLENBREosQ0FGSixDQURMLEVBU0s7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNLLEtBQUtSLEtBQUwsQ0FBVzRDLFFBRGhCLENBVEwsQ0FBUDtBQWFIOztBQUVELFFBQU1wQyxLQUFOLEdBQWM7QUFDVixRQUFJcUMsV0FBVyxHQUFHLElBQWxCO0FBQ0EsVUFBTUMsWUFBWSxHQUFHLE9BQU8sS0FBSzlDLEtBQUwsQ0FBVzhDLFlBQWxCLElBQW1DLFVBQW5DLEdBQWdELEtBQUs5QyxLQUFMLENBQVc4QyxZQUFYLEVBQWhELEdBQTRFLEtBQUs5QyxLQUFMLENBQVc4QyxZQUE1Rzs7QUFDQSxRQUFJQSxZQUFKLEVBQWtCO0FBQ2QsV0FBS0MsUUFBTCxDQUFjO0FBQUM3QyxpQkFBUyxFQUFFO0FBQVosT0FBZDtBQUNBMkMsaUJBQVcsR0FBRyxNQUFNLEtBQUtDLFlBQUwsRUFBcEI7QUFDQSxXQUFLQyxRQUFMLENBQWM7QUFBQzdDLGlCQUFTLEVBQUU7QUFBWixPQUFkO0FBQ0g7O0FBQ0QsUUFBSSxLQUFLRixLQUFMLENBQVdRLEtBQVgsSUFBb0JxQyxXQUF4QixFQUFxQyxLQUFLN0MsS0FBTCxDQUFXUSxLQUFYO0FBQ3hDOztBQUVEc0MsY0FBWSxHQUFHO0FBQ1gsV0FBTyxJQUFJRSxPQUFKLENBQVlDLE9BQU8sSUFBSTtBQUMxQkMscURBQU0sQ0FBQ0MscUJBQVAsQ0FBNkJDLCtDQUFPLENBQUNGLE1BQVIsQ0FBZUosWUFBNUMsRUFBMEQsS0FBSzlDLEtBQUwsQ0FBV3FELGdCQUFyRSxFQUF1RjtBQUNuRkMsY0FBTSxFQUFFLElBRDJFO0FBRW5GQyxtQkFBVyxFQUFFLE9BRnNFO0FBR25GQyxpQkFBUyxFQUFFLE1BQU07QUFBQ1AsaUJBQU8sQ0FBQyxJQUFELENBQVA7QUFBZSxTQUhrRDtBQUluRlEsZ0JBQVEsRUFBRSxNQUFNO0FBQUNSLGlCQUFPLENBQUMsS0FBRCxDQUFQO0FBQWdCO0FBSmtELE9BQXZGO0FBTUgsS0FQTSxDQUFQO0FBUUg7O0FBdEd1RCIsImZpbGUiOiIuL3NyYy91aS9mbG9hdGluZy93aW5kb3cuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBTY3JlZW4gZnJvbSBcIi4uLy4uL3N0cnVjdHMvc2NyZWVuXCI7XHJcbmltcG9ydCBDbG9zZUJ1dHRvbiBmcm9tIFwiLi4vaWNvbnMvY2xvc2VcIjtcclxuaW1wb3J0IE1vZGFscyBmcm9tIFwiLi4vbW9kYWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbG9hdGluZ1dpbmRvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7bW9kYWxPcGVuOiBmYWxzZX07XHJcblxyXG4gICAgICAgIHRoaXMub2ZmWCA9IDA7XHJcbiAgICAgICAgdGhpcy5vZmZZID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy50aXRsZWJhciA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gICAgICAgIHRoaXMud2luZG93ID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UgPSB0aGlzLmNsb3NlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkRyYWcgPSB0aGlzLm9uRHJhZy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25EcmFnU3RhcnQgPSB0aGlzLm9uRHJhZ1N0YXJ0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkRyYWdTdG9wID0gdGhpcy5vbkRyYWdTdG9wLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZVN0YXJ0ID0gdGhpcy5vblJlc2l6ZVN0YXJ0LmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy53aW5kb3cuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMub25SZXNpemVTdGFydCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudGl0bGViYXIuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMub25EcmFnU3RhcnQsIGZhbHNlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLm9uRHJhZ1N0b3AsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBvblJlc2l6ZVN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS53aWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRIZWlnaHQgPSB0aGlzLndpbmRvdy5jdXJyZW50LnN0eWxlLmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBvbkRyYWdTdG9wKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5vbkRyYWcsIHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uUmVzaXplKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS53aWR0aDtcclxuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCAhPSB0aGlzLmN1cnJlbnRXaWR0aCB8fCBoZWlnaHQgIT0gdGhpcy5jdXJyZW50SGVpZ2h0KSB0aGlzLnByb3BzLm9uUmVzaXplKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25EcmFnU3RhcnQoZSkge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IHRoaXMud2luZG93LmN1cnJlbnQ7XHJcbiAgICAgICAgdGhpcy5vZmZZID0gZS5jbGllbnRZIC0gcGFyc2VJbnQoZGl2Lm9mZnNldFRvcCk7XHJcbiAgICAgICAgdGhpcy5vZmZYID0gZS5jbGllbnRYIC0gcGFyc2VJbnQoZGl2Lm9mZnNldExlZnQpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5vbkRyYWcsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRHJhZyhlKSB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gdGhpcy53aW5kb3cuY3VycmVudDtcclxuICAgICAgICBkaXYuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XHJcbiAgICAgICAgZGl2LnN0eWxlLnRvcCA9IChlLmNsaWVudFkgLSB0aGlzLm9mZlkpICsgXCJweFwiO1xyXG4gICAgICAgIGRpdi5zdHlsZS5sZWZ0ID0gKGUuY2xpZW50WCAtIHRoaXMub2ZmWCkgKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZWJhci5jdXJyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdGhpcy5vbkRyYWdTdGFydCwgZmFsc2UpO1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMub25EcmFnU3RvcCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLnByb3BzLmNlbnRlciA/IChTY3JlZW4uaGVpZ2h0IC8gMikgLSAodGhpcy5wcm9wcy5oZWlnaHQgLyAyKSA6IHRoaXMucHJvcHMudG9wO1xyXG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLnByb3BzLmNlbnRlciA/IChTY3JlZW4ud2lkdGggLyAyKSAtICh0aGlzLnByb3BzLndpZHRoIC8gMikgOiB0aGlzLnByb3BzLmxlZnQgO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRvcCwgbGVmdCk7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gYGZsb2F0aW5nLXdpbmRvdyR7YCAke3RoaXMucHJvcHMuY2xhc3NOYW1lfWAgfHwgXCJcIn0ke3RoaXMucHJvcHMucmVzaXphYmxlID8gXCIgcmVzaXphYmxlXCIgOiBcIlwifSR7dGhpcy5zdGF0ZS5tb2RhbE9wZW4gPyBcIiBtb2RhbC1vcGVuXCIgOiBcIlwifWA7XHJcbiAgICAgICAgY29uc3Qgc3R5bGVzID0ge2hlaWdodDogdGhpcy5wcm9wcy5oZWlnaHQsIHdpZHRoOiB0aGlzLnByb3BzLndpZHRoLCBsZWZ0OiBsZWZ0IHx8IDAsIHRvcDogdG9wIHx8IDB9O1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGlkPXt0aGlzLnByb3BzLmlkfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gcmVmPXt0aGlzLndpbmRvd30gc3R5bGU9e3N0eWxlc30+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbG9hdGluZy13aW5kb3ctdGl0bGViYXJcIiByZWY9e3RoaXMudGl0bGViYXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0aXRsZVwiPnt0aGlzLnByb3BzLnRpdGxlfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbG9hdGluZy13aW5kb3ctYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidXR0b24gY2xvc2UtYnV0dG9uXCIgb25DbGljaz17dGhpcy5jbG9zZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENsb3NlQnV0dG9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbG9hdGluZy13aW5kb3ctY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbG9zZSgpIHtcclxuICAgICAgICBsZXQgc2hvdWxkQ2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1DbG9zZSA9IHR5cGVvZih0aGlzLnByb3BzLmNvbmZpcm1DbG9zZSkgPT0gXCJmdW5jdGlvblwiID8gdGhpcy5wcm9wcy5jb25maXJtQ2xvc2UoKSA6IHRoaXMucHJvcHMuY29uZmlybUNsb3NlO1xyXG4gICAgICAgIGlmIChjb25maXJtQ2xvc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kYWxPcGVuOiB0cnVlfSk7XHJcbiAgICAgICAgICAgIHNob3VsZENsb3NlID0gYXdhaXQgdGhpcy5jb25maXJtQ2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kYWxPcGVuOiBmYWxzZX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5jbG9zZSAmJiBzaG91bGRDbG9zZSkgdGhpcy5wcm9wcy5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1DbG9zZSgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIE1vZGFscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoU3RyaW5ncy5Nb2RhbHMuY29uZmlybUNsb3NlLCB0aGlzLnByb3BzLmNvbmZpcm1hdGlvblRleHQsIHtcclxuICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkNsb3NlXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/floating/window.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return FloatingWindow; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _structs_screen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../structs/screen */ \"./src/structs/screen.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_fullscreen__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/fullscreen */ \"./src/ui/icons/fullscreen.jsx\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../modals */ \"./src/ui/modals.js\");\n\n\n\n\n\nclass FloatingWindow extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n modalOpen: false\n };\n this.offX = 0;\n this.offY = 0;\n this.titlebar = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.window = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.close = this.close.bind(this);\n this.maximize = this.maximize.bind(this);\n this.onDrag = this.onDrag.bind(this);\n this.onDragStart = this.onDragStart.bind(this);\n this.onDragStop = this.onDragStop.bind(this);\n this.onResizeStart = this.onResizeStart.bind(this);\n }\n\n componentDidMount() {\n this.window.current.addEventListener(\"mousedown\", this.onResizeStart, false);\n this.titlebar.current.addEventListener(\"mousedown\", this.onDragStart, false);\n document.addEventListener(\"mouseup\", this.onDragStop, false);\n }\n\n onResizeStart() {\n this.currentWidth = this.window.current.style.width;\n this.currentHeight = this.window.current.style.height;\n }\n\n onDragStop() {\n document.removeEventListener(\"mousemove\", this.onDrag, true);\n\n if (this.props.onResize) {\n const width = this.window.current.style.width;\n const height = this.window.current.style.height;\n if (width != this.currentWidth || height != this.currentHeight) this.props.onResize();\n this.currentWidth = width;\n this.currentHeight = height;\n }\n }\n\n onDragStart(e) {\n const div = this.window.current;\n this.offY = e.clientY - parseInt(div.offsetTop);\n this.offX = e.clientX - parseInt(div.offsetLeft);\n document.addEventListener(\"mousemove\", this.onDrag, true);\n }\n\n onDrag(e) {\n const div = this.window.current;\n div.style.top = e.clientY - this.offY + \"px\";\n div.style.left = e.clientX - this.offX + \"px\";\n }\n\n componentWillUnmount() {\n this.titlebar.current.removeEventListener(\"mousedown\", this.onDragStart, false);\n document.removeEventListener(\"mouseup\", this.onDragStop, false);\n }\n\n render() {\n const top = this.props.center ? _structs_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"].height / 2 - this.props.height / 2 : this.props.top;\n const left = this.props.center ? _structs_screen__WEBPACK_IMPORTED_MODULE_1__[\"default\"].width / 2 - this.props.width / 2 : this.props.left; // console.log(top, left);\n\n const className = `floating-window${` ${this.props.className}` || \"\"}${this.props.resizable ? \" resizable\" : \"\"}${this.state.modalOpen ? \" modal-open\" : \"\"}`;\n const styles = {\n height: this.props.height,\n width: this.props.width,\n left: left || 0,\n top: top || 0\n };\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: this.props.id,\n className: className,\n ref: this.window,\n style: styles\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-titlebar\",\n ref: this.titlebar\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"title\"\n }, this.props.title), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-buttons\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"button maximize-button\",\n onClick: this.maximize\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_fullscreen__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n size: \"18px\"\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"button close-button\",\n onClick: this.close\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null)))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"floating-window-content\"\n }, this.props.children));\n }\n\n async close() {\n let shouldClose = true;\n const confirmClose = typeof this.props.confirmClose == \"function\" ? this.props.confirmClose() : this.props.confirmClose;\n\n if (confirmClose) {\n this.setState({\n modalOpen: true\n });\n shouldClose = await this.confirmClose();\n this.setState({\n modalOpen: false\n });\n }\n\n if (this.props.close && shouldClose) this.props.close();\n }\n\n maximize() {\n this.window.current.style.width = \"100%\";\n this.window.current.style.height = \"100%\";\n this.window.current.style.top = \"20px\";\n this.window.current.style.left = \"0px\";\n if (this.props.onResize) this.props.onResize();\n }\n\n confirmClose() {\n return new Promise(resolve => {\n _modals__WEBPACK_IMPORTED_MODULE_4__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.confirmAction, this.props.confirmationText, {\n danger: true,\n confirmText: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.close,\n onConfirm: () => {\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n }\n });\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Zsb2F0aW5nL3dpbmRvdy5qc3g/Y2YzZCJdLCJuYW1lcyI6WyJGbG9hdGluZ1dpbmRvdyIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwibW9kYWxPcGVuIiwib2ZmWCIsIm9mZlkiLCJ0aXRsZWJhciIsImNyZWF0ZVJlZiIsIndpbmRvdyIsImNsb3NlIiwiYmluZCIsIm1heGltaXplIiwib25EcmFnIiwib25EcmFnU3RhcnQiLCJvbkRyYWdTdG9wIiwib25SZXNpemVTdGFydCIsImNvbXBvbmVudERpZE1vdW50IiwiY3VycmVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkb2N1bWVudCIsImN1cnJlbnRXaWR0aCIsInN0eWxlIiwid2lkdGgiLCJjdXJyZW50SGVpZ2h0IiwiaGVpZ2h0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uUmVzaXplIiwiZSIsImRpdiIsImNsaWVudFkiLCJwYXJzZUludCIsIm9mZnNldFRvcCIsImNsaWVudFgiLCJvZmZzZXRMZWZ0IiwidG9wIiwibGVmdCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiY2VudGVyIiwiU2NyZWVuIiwiY2xhc3NOYW1lIiwicmVzaXphYmxlIiwic3R5bGVzIiwiaWQiLCJ0aXRsZSIsImNoaWxkcmVuIiwic2hvdWxkQ2xvc2UiLCJjb25maXJtQ2xvc2UiLCJzZXRTdGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiTW9kYWxzIiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiU3RyaW5ncyIsImNvbmZpcm1BY3Rpb24iLCJjb25maXJtYXRpb25UZXh0IiwiZGFuZ2VyIiwiY29uZmlybVRleHQiLCJvbkNvbmZpcm0iLCJvbkNhbmNlbCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRWUsTUFBTUEsY0FBTixTQUE2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O0FBSXBGUyxnQkFBUSxFQUFFLE1BQU07QUFBQ1QsaUJBQU8sQ0FBQyxLQUFELENBQVA7QUFBZ0I7QUFKbUQsT0FBeEY7QUFNSCxLQVBNLENBQVA7QUFRSDs7QUFqSHVEIiwiZmlsZSI6Ii4vc3JjL3VpL2Zsb2F0aW5nL3dpbmRvdy5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBTdHJpbmdzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IFNjcmVlbiBmcm9tIFwiLi4vLi4vc3RydWN0cy9zY3JlZW5cIjtcclxuaW1wb3J0IENsb3NlQnV0dG9uIGZyb20gXCIuLi9pY29ucy9jbG9zZVwiO1xyXG5pbXBvcnQgTWF4aW1pemVJY29uIGZyb20gXCIuLi9pY29ucy9mdWxsc2NyZWVuXCI7XHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL21vZGFsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvYXRpbmdXaW5kb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge21vZGFsT3BlbjogZmFsc2V9O1xyXG5cclxuICAgICAgICB0aGlzLm9mZlggPSAwO1xyXG4gICAgICAgIHRoaXMub2ZmWSA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMudGl0bGViYXIgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICAgICAgICB0aGlzLndpbmRvdyA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWF4aW1pemUgPSB0aGlzLm1heGltaXplLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkRyYWcgPSB0aGlzLm9uRHJhZy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25EcmFnU3RhcnQgPSB0aGlzLm9uRHJhZ1N0YXJ0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkRyYWdTdG9wID0gdGhpcy5vbkRyYWdTdG9wLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZVN0YXJ0ID0gdGhpcy5vblJlc2l6ZVN0YXJ0LmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy53aW5kb3cuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMub25SZXNpemVTdGFydCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudGl0bGViYXIuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMub25EcmFnU3RhcnQsIGZhbHNlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLm9uRHJhZ1N0b3AsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBvblJlc2l6ZVN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS53aWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRIZWlnaHQgPSB0aGlzLndpbmRvdy5jdXJyZW50LnN0eWxlLmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBvbkRyYWdTdG9wKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5vbkRyYWcsIHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uUmVzaXplKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS53aWR0aDtcclxuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCAhPSB0aGlzLmN1cnJlbnRXaWR0aCB8fCBoZWlnaHQgIT0gdGhpcy5jdXJyZW50SGVpZ2h0KSB0aGlzLnByb3BzLm9uUmVzaXplKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25EcmFnU3RhcnQoZSkge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IHRoaXMud2luZG93LmN1cnJlbnQ7XHJcbiAgICAgICAgdGhpcy5vZmZZID0gZS5jbGllbnRZIC0gcGFyc2VJbnQoZGl2Lm9mZnNldFRvcCk7XHJcbiAgICAgICAgdGhpcy5vZmZYID0gZS5jbGllbnRYIC0gcGFyc2VJbnQoZGl2Lm9mZnNldExlZnQpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5vbkRyYWcsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRHJhZyhlKSB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gdGhpcy53aW5kb3cuY3VycmVudDtcclxuICAgICAgICBkaXYuc3R5bGUudG9wID0gKGUuY2xpZW50WSAtIHRoaXMub2ZmWSkgKyBcInB4XCI7XHJcbiAgICAgICAgZGl2LnN0eWxlLmxlZnQgPSAoZS5jbGllbnRYIC0gdGhpcy5vZmZYKSArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLnRpdGxlYmFyLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCB0aGlzLm9uRHJhZ1N0YXJ0LCBmYWxzZSk7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5vbkRyYWdTdG9wLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMucHJvcHMuY2VudGVyID8gKFNjcmVlbi5oZWlnaHQgLyAyKSAtICh0aGlzLnByb3BzLmhlaWdodCAvIDIpIDogdGhpcy5wcm9wcy50b3A7XHJcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMucHJvcHMuY2VudGVyID8gKFNjcmVlbi53aWR0aCAvIDIpIC0gKHRoaXMucHJvcHMud2lkdGggLyAyKSA6IHRoaXMucHJvcHMubGVmdCA7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codG9wLCBsZWZ0KTtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBgZmxvYXRpbmctd2luZG93JHtgICR7dGhpcy5wcm9wcy5jbGFzc05hbWV9YCB8fCBcIlwifSR7dGhpcy5wcm9wcy5yZXNpemFibGUgPyBcIiByZXNpemFibGVcIiA6IFwiXCJ9JHt0aGlzLnN0YXRlLm1vZGFsT3BlbiA/IFwiIG1vZGFsLW9wZW5cIiA6IFwiXCJ9YDtcclxuICAgICAgICBjb25zdCBzdHlsZXMgPSB7aGVpZ2h0OiB0aGlzLnByb3BzLmhlaWdodCwgd2lkdGg6IHRoaXMucHJvcHMud2lkdGgsIGxlZnQ6IGxlZnQgfHwgMCwgdG9wOiB0b3AgfHwgMH07XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgaWQ9e3RoaXMucHJvcHMuaWR9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSByZWY9e3RoaXMud2luZG93fSBzdHlsZT17c3R5bGVzfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb2F0aW5nLXdpbmRvdy10aXRsZWJhclwiIHJlZj17dGhpcy50aXRsZWJhcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRpdGxlXCI+e3RoaXMucHJvcHMudGl0bGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsb2F0aW5nLXdpbmRvdy1idXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJ1dHRvbiBtYXhpbWl6ZS1idXR0b25cIiBvbkNsaWNrPXt0aGlzLm1heGltaXplfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWF4aW1pemVJY29uIHNpemU9XCIxOHB4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidXR0b24gY2xvc2UtYnV0dG9uXCIgb25DbGljaz17dGhpcy5jbG9zZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENsb3NlQnV0dG9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbG9hdGluZy13aW5kb3ctY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbG9zZSgpIHtcclxuICAgICAgICBsZXQgc2hvdWxkQ2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1DbG9zZSA9IHR5cGVvZih0aGlzLnByb3BzLmNvbmZpcm1DbG9zZSkgPT0gXCJmdW5jdGlvblwiID8gdGhpcy5wcm9wcy5jb25maXJtQ2xvc2UoKSA6IHRoaXMucHJvcHMuY29uZmlybUNsb3NlO1xyXG4gICAgICAgIGlmIChjb25maXJtQ2xvc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kYWxPcGVuOiB0cnVlfSk7XHJcbiAgICAgICAgICAgIHNob3VsZENsb3NlID0gYXdhaXQgdGhpcy5jb25maXJtQ2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kYWxPcGVuOiBmYWxzZX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5jbG9zZSAmJiBzaG91bGRDbG9zZSkgdGhpcy5wcm9wcy5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG1heGltaXplKCkge1xyXG4gICAgICAgIHRoaXMud2luZG93LmN1cnJlbnQuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcclxuICAgICAgICB0aGlzLndpbmRvdy5jdXJyZW50LnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xyXG4gICAgICAgIHRoaXMud2luZG93LmN1cnJlbnQuc3R5bGUudG9wID0gXCIyMHB4XCI7XHJcbiAgICAgICAgdGhpcy53aW5kb3cuY3VycmVudC5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vblJlc2l6ZSkgdGhpcy5wcm9wcy5vblJlc2l6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1DbG9zZSgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIE1vZGFscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoU3RyaW5ncy5Nb2RhbHMuY29uZmlybUFjdGlvbiwgdGhpcy5wcm9wcy5jb25maXJtYXRpb25UZXh0LCB7XHJcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogU3RyaW5ncy5Nb2RhbHMuY2xvc2UsXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/floating/window.jsx\n"); /***/ }), @@ -747,6 +747,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./src/ui/icons/delete.jsx": +/*!*********************************!*\ + !*** ./src/ui/icons/delete.jsx ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Delete; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass Delete extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n render() {\n const size = this.props.size || \"24px\";\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"svg\", {\n className: this.props.className || \"\",\n fill: \"#FFFFFF\",\n viewBox: \"0 0 24 24\",\n style: {\n width: size,\n height: size\n },\n onClick: this.props.onClick\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n fill: \"none\",\n d: \"M0 0h24v24H0V0z\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n fill: \"none\",\n d: \"M0 0h24v24H0z\"\n }));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2ljb25zL2RlbGV0ZS5qc3g/NWIwYiJdLCJuYW1lcyI6WyJEZWxldGUiLCJSZWFjdCIsIkNvbXBvbmVudCIsInJlbmRlciIsInNpemUiLCJwcm9wcyIsImNsYXNzTmFtZSIsIndpZHRoIiwiaGVpZ2h0Iiwib25DbGljayJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFZSxNQUFNQSxNQUFOLFNBQXFCQyw2Q0FBSyxDQUFDQyxTQUEzQixDQUFxQztBQUNoREMsUUFBTSxHQUFHO0FBQ0wsVUFBTUMsSUFBSSxHQUFHLEtBQUtDLEtBQUwsQ0FBV0QsSUFBWCxJQUFtQixNQUFoQztBQUNBLFdBQU87QUFBSyxlQUFTLEVBQUUsS0FBS0MsS0FBTCxDQUFXQyxTQUFYLElBQXdCLEVBQXhDO0FBQTRDLFVBQUksRUFBQyxTQUFqRDtBQUEyRCxhQUFPLEVBQUMsV0FBbkU7QUFBK0UsV0FBSyxFQUFFO0FBQUNDLGFBQUssRUFBRUgsSUFBUjtBQUFjSSxjQUFNLEVBQUVKO0FBQXRCLE9BQXRGO0FBQW1ILGFBQU8sRUFBRSxLQUFLQyxLQUFMLENBQVdJO0FBQXZJLE9BQ0s7QUFBTSxVQUFJLEVBQUMsTUFBWDtBQUFrQixPQUFDLEVBQUM7QUFBcEIsTUFETCxFQUM0QztBQUFNLE9BQUMsRUFBQztBQUFSLE1BRDVDLEVBRUs7QUFBTSxVQUFJLEVBQUMsTUFBWDtBQUFrQixPQUFDLEVBQUM7QUFBcEIsTUFGTCxDQUFQO0FBSUg7O0FBUCtDIiwiZmlsZSI6Ii4vc3JjL3VpL2ljb25zL2RlbGV0ZS5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0fSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cIiNGRkZGRkZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+PHBhdGggZD1cIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/icons/delete.jsx\n"); + +/***/ }), + /***/ "./src/ui/icons/detach.jsx": /*!*********************************!*\ !*** ./src/ui/icons/detach.jsx ***! @@ -779,7 +791,19 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Edit; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass Edit extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n render() {\n const size = this.props.size || \"24px\";\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"svg\", {\n viewBox: \"0 0 24 24\",\n style: {\n width: size,\n height: size\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n }));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4PzQ2ZTMiXSwibmFtZXMiOlsiRWRpdCIsIlJlYWN0IiwiQ29tcG9uZW50IiwicmVuZGVyIiwic2l6ZSIsInByb3BzIiwid2lkdGgiLCJoZWlnaHQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTUEsSUFBTixTQUFtQkMsNkNBQUssQ0FBQ0MsU0FBekIsQ0FBbUM7QUFDOUNDLFFBQU0sR0FBRztBQUNMLFVBQU1DLElBQUksR0FBRyxLQUFLQyxLQUFMLENBQVdELElBQVgsSUFBbUIsTUFBaEM7QUFDQSxXQUFPO0FBQUssYUFBTyxFQUFDLFdBQWI7QUFBeUIsV0FBSyxFQUFFO0FBQUNFLGFBQUssRUFBRUYsSUFBUjtBQUFjRyxjQUFNLEVBQUVIO0FBQXRCO0FBQWhDLE9BQ0M7QUFBTSxPQUFDLEVBQUM7QUFBUixNQURELEVBRUM7QUFBTSxPQUFDLEVBQUMsZUFBUjtBQUF3QixVQUFJLEVBQUM7QUFBN0IsTUFGRCxDQUFQO0FBSUg7O0FBUDZDIiwiZmlsZSI6Ii4vc3JjL3VpL2ljb25zL2VkaXQuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdH0gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/icons/edit.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Edit; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass Edit extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n render() {\n const size = this.props.size || \"24px\";\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"svg\", {\n viewBox: \"0 0 24 24\",\n fill: \"#FFFFFF\",\n style: {\n width: size,\n height: size\n },\n onClick: this.props.onClick\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n }));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4PzQ2ZTMiXSwibmFtZXMiOlsiRWRpdCIsIlJlYWN0IiwiQ29tcG9uZW50IiwicmVuZGVyIiwic2l6ZSIsInByb3BzIiwid2lkdGgiLCJoZWlnaHQiLCJvbkNsaWNrIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU1BLElBQU4sU0FBbUJDLDZDQUFLLENBQUNDLFNBQXpCLENBQW1DO0FBQzlDQyxRQUFNLEdBQUc7QUFDTCxVQUFNQyxJQUFJLEdBQUcsS0FBS0MsS0FBTCxDQUFXRCxJQUFYLElBQW1CLE1BQWhDO0FBQ0EsV0FBTztBQUFLLGFBQU8sRUFBQyxXQUFiO0FBQXlCLFVBQUksRUFBQyxTQUE5QjtBQUF3QyxXQUFLLEVBQUU7QUFBQ0UsYUFBSyxFQUFFRixJQUFSO0FBQWNHLGNBQU0sRUFBRUg7QUFBdEIsT0FBL0M7QUFBNEUsYUFBTyxFQUFFLEtBQUtDLEtBQUwsQ0FBV0c7QUFBaEcsT0FDQztBQUFNLE9BQUMsRUFBQztBQUFSLE1BREQsRUFFQztBQUFNLE9BQUMsRUFBQyxlQUFSO0FBQXdCLFVBQUksRUFBQztBQUE3QixNQUZELENBQVA7QUFJSDs7QUFQNkMiLCJmaWxlIjoiLi9zcmMvdWkvaWNvbnMvZWRpdC5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0fSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIiNGRkZGRkZcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/icons/edit.jsx\n"); + +/***/ }), + +/***/ "./src/ui/icons/fullscreen.jsx": +/*!*************************************!*\ + !*** ./src/ui/icons/fullscreen.jsx ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return FullScreen; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass FullScreen extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n render() {\n const size = this.props.size || \"24px\";\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"svg\", {\n className: this.props.className || \"\",\n fill: \"#FFFFFF\",\n viewBox: \"0 0 24 24\",\n style: {\n width: size,\n height: size\n },\n onClick: this.props.onClick\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n fill: \"none\",\n d: \"M0 0h24v24H0V0z\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n d: \"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"\n }));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2ljb25zL2Z1bGxzY3JlZW4uanN4P2Y1MzEiXSwibmFtZXMiOlsiRnVsbFNjcmVlbiIsIlJlYWN0IiwiQ29tcG9uZW50IiwicmVuZGVyIiwic2l6ZSIsInByb3BzIiwiY2xhc3NOYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJvbkNsaWNrIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU1BLFVBQU4sU0FBeUJDLDZDQUFLLENBQUNDLFNBQS9CLENBQXlDO0FBQ3BEQyxRQUFNLEdBQUc7QUFDTCxVQUFNQyxJQUFJLEdBQUcsS0FBS0MsS0FBTCxDQUFXRCxJQUFYLElBQW1CLE1BQWhDO0FBQ0EsV0FBTztBQUFLLGVBQVMsRUFBRSxLQUFLQyxLQUFMLENBQVdDLFNBQVgsSUFBd0IsRUFBeEM7QUFBNEMsVUFBSSxFQUFDLFNBQWpEO0FBQTJELGFBQU8sRUFBQyxXQUFuRTtBQUErRSxXQUFLLEVBQUU7QUFBQ0MsYUFBSyxFQUFFSCxJQUFSO0FBQWNJLGNBQU0sRUFBRUo7QUFBdEIsT0FBdEY7QUFBbUgsYUFBTyxFQUFFLEtBQUtDLEtBQUwsQ0FBV0k7QUFBdkksT0FDSztBQUFNLFVBQUksRUFBQyxNQUFYO0FBQWtCLE9BQUMsRUFBQztBQUFwQixNQURMLEVBRUs7QUFBTSxPQUFDLEVBQUM7QUFBUixNQUZMLENBQVA7QUFJSDs7QUFQbUQiLCJmaWxlIjoiLi9zcmMvdWkvaWNvbnMvZnVsbHNjcmVlbi5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0fSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnVsbFNjcmVlbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCIjRkZGRkZGXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXpcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/icons/fullscreen.jsx\n"); /***/ }), @@ -819,6 +843,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./src/ui/misc/addoneditor.jsx": +/*!*************************************!*\ + !*** ./src/ui/misc/addoneditor.jsx ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonEditor; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _customcss_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../customcss/editor */ \"./src/ui/customcss/editor.jsx\");\n/* harmony import */ var _icons_save__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/save */ \"./src/ui/icons/save.jsx\");\n/* harmony import */ var _icons_edit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/edit */ \"./src/ui/icons/edit.jsx\");\n/* harmony import */ var _icons_cog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../icons/cog */ \"./src/ui/icons/cog.jsx\");\n\n\n\n\n\nclass AddonEditor extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.hasUnsavedChanges = false;\n this.onChange = this.onChange.bind(this);\n this.save = this.save.bind(this);\n this.openNative = this.openNative.bind(this);\n this.update = this.update.bind(this);\n this.controls = [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_save__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n size: \"18px\"\n }),\n tooltip: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].CustomCSS.save,\n onClick: this.save\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_edit__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n size: \"18px\"\n }),\n tooltip: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].CustomCSS.openNative,\n onClick: this.openNative\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_cog__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n size: \"18px\"\n }),\n tooltip: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].CustomCSS.settings,\n onClick: \"showSettings\"\n }];\n }\n\n update() {\n this.forceUpdate();\n }\n\n updateEditor(newCSS) {\n if (!this.editor) return;\n this.editor.value = newCSS;\n }\n\n get value() {\n return this.editor.session.getValue();\n }\n\n set value(newValue) {\n this.editor.setValue(newValue);\n }\n\n showSettings() {\n return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor);\n }\n\n resize() {\n return this.editor.resize();\n }\n\n setEditorRef(editor) {\n this.editor = editor;\n if (this.props.editorRef && typeof this.props.editorRef.current !== \"undefined\") this.props.editorRef.current = editor;else if (this.props.editorRef) this.props.editorRef = editor;\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_customcss_editor__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n ref: this.setEditorRef.bind(this),\n language: this.props.language,\n id: this.props.id || \"bd-addon-editor\",\n controls: this.controls,\n value: this.props.content,\n onChange: this.onChange\n });\n }\n\n onChange() {\n this.hasUnsavedChanges = true;\n }\n\n save(event, content) {\n this.hasUnsavedChanges = false;\n if (this.props.save) this.props.save(content);\n }\n\n openNative() {\n if (this.props.openNative) this.props.openNative();\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL21pc2MvYWRkb25lZGl0b3IuanN4P2ViOWMiXSwibmFtZXMiOlsiQWRkb25FZGl0b3IiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJoYXNVbnNhdmVkQ2hhbmdlcyIsIm9uQ2hhbmdlIiwiYmluZCIsInNhdmUiLCJvcGVuTmF0aXZlIiwidXBkYXRlIiwiY29udHJvbHMiLCJsYWJlbCIsImNyZWF0ZUVsZW1lbnQiLCJTYXZlIiwic2l6ZSIsInRvb2x0aXAiLCJTdHJpbmdzIiwiQ3VzdG9tQ1NTIiwib25DbGljayIsIkVkaXQiLCJDb2ciLCJzZXR0aW5ncyIsImZvcmNlVXBkYXRlIiwidXBkYXRlRWRpdG9yIiwibmV3Q1NTIiwiZWRpdG9yIiwidmFsdWUiLCJzZXNzaW9uIiwiZ2V0VmFsdWUiLCJuZXdWYWx1ZSIsInNldFZhbHVlIiwic2hvd1NldHRpbmdzIiwia2V5QmluZGluZyIsIiRkZWZhdWx0SGFuZGxlciIsImNvbW1hbmRzIiwic2hvd1NldHRpbmdzTWVudSIsImV4ZWMiLCJyZXNpemUiLCJzZXRFZGl0b3JSZWYiLCJlZGl0b3JSZWYiLCJjdXJyZW50IiwicmVuZGVyIiwibGFuZ3VhZ2UiLCJpZCIsImNvbnRlbnQiLCJldmVudCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRWUsTUFBTUEsV0FBTixTQUEwQkMsNkNBQUssQ0FBQ0MsU0FBaEMsQ0FBMEM7QUFFckRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUVBLFNBQUtDLGlCQUFMLEdBQXlCLEtBQXpCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNDLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLQyxJQUFMLEdBQVksS0FBS0EsSUFBTCxDQUFVRCxJQUFWLENBQWUsSUFB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LEdBQXlCLElBQXpCO0FBQ0g7O0FBRURHLE1BQUksQ0FBQ3NDLEtBQUQsRUFBUUQsT0FBUixFQUFpQjtBQUNqQixTQUFLeEMsaUJBQUwsR0FBeUIsS0FBekI7QUFDQSxRQUFJLEtBQUtELEtBQUwsQ0FBV0ksSUFBZixFQUFxQixLQUFLSixLQUFMLENBQVdJLElBQVgsQ0FBZ0JxQyxPQUFoQjtBQUN4Qjs7QUFFRHBDLFlBQVUsR0FBRztBQUNULFFBQUksS0FBS0wsS0FBTCxDQUFXSyxVQUFmLEVBQTJCLEtBQUtMLEtBQUwsQ0FBV0ssVUFBWDtBQUM5Qjs7QUF4RG9EIiwiZmlsZSI6Ii4vc3JjL3VpL21pc2MvYWRkb25lZGl0b3IuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBFZGl0b3IgZnJvbSBcIi4uL2N1c3RvbWNzcy9lZGl0b3JcIjtcclxuaW1wb3J0IFNhdmUgZnJvbSBcIi4uL2ljb25zL3NhdmVcIjtcclxuaW1wb3J0IEVkaXQgZnJvbSBcIi4uL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IENvZyBmcm9tIFwiLi4vaWNvbnMvY29nXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRvbkVkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgICAgIHRoaXMuaGFzVW5zYXZlZENoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2F2ZSA9IHRoaXMuc2F2ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub3Blbk5hdGl2ZSA9IHRoaXMub3Blbk5hdGl2ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250cm9scyA9IFtcclxuICAgICAgICAgICAge2xhYmVsOiBSZWFjdC5jcmVhdGVFbGVtZW50KFNhdmUsIHtzaXplOiBcIjE4cHhcIn0pLCB0b29sdGlwOiBTdHJpbmdzLkN1c3RvbUNTUy5zYXZlLCBvbkNsaWNrOiB0aGlzLnNhdmV9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoRWRpdCwge3NpemU6IFwiMThweFwifSksIHRvb2x0aXA6IFN0cmluZ3MuQ3VzdG9tQ1NTLm9wZW5OYXRpdmUsIG9uQ2xpY2s6IHRoaXMub3Blbk5hdGl2ZX0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogUmVhY3QuY3JlYXRlRWxlbWVudChDb2csIHtzaXplOiBcIjE4cHhcIn0pLCB0b29sdGlwOiBTdHJpbmdzLkN1c3RvbUNTUy5zZXR0aW5ncywgb25DbGljazogXCJzaG93U2V0dGluZ3NcIn1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSgpIHtcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRWRpdG9yKG5ld0NTUykge1xyXG4gICAgICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcclxuICAgICAgICB0aGlzLmVkaXRvci52YWx1ZSA9IG5ld0NTUztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmFsdWUoKSB7cmV0dXJuIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKTt9XHJcbiAgICBzZXQgdmFsdWUobmV3VmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NldHRpbmdzKCkge3JldHVybiB0aGlzLmVkaXRvci5rZXlCaW5kaW5nLiRkZWZhdWx0SGFuZGxlci5jb21tYW5kcy5zaG93U2V0dGluZ3NNZW51LmV4ZWModGhpcy5lZGl0b3IpO31cclxuICAgIHJlc2l6ZSgpIHtyZXR1cm4gdGhpcy5lZGl0b3IucmVzaXplKCk7fVxyXG5cclxuICAgIHNldEVkaXRvclJlZihlZGl0b3IpIHtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5lZGl0b3JSZWYgJiYgdHlwZW9mKHRoaXMucHJvcHMuZWRpdG9yUmVmLmN1cnJlbnQpICE9PSBcInVuZGVmaW5lZFwiKSB0aGlzLnByb3BzLmVkaXRvclJlZi5jdXJyZW50ID0gZWRpdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvcHMuZWRpdG9yUmVmKSB0aGlzLnByb3BzLmVkaXRvclJlZiA9IGVkaXRvcjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIDxFZGl0b3IgcmVmPXt0aGlzLnNldEVkaXRvclJlZi5iaW5kKHRoaXMpfSBsYW5ndWFnZT17dGhpcy5wcm9wcy5sYW5ndWFnZX0gaWQ9e3RoaXMucHJvcHMuaWQgfHwgXCJiZC1hZGRvbi1lZGl0b3JcIn0gY29udHJvbHM9e3RoaXMuY29udHJvbHN9IHZhbHVlPXt0aGlzLnByb3BzLmNvbnRlbnR9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSAvPjtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKGV2ZW50LCBjb250ZW50KSB7XHJcbiAgICAgICAgdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNhdmUpIHRoaXMucHJvcHMuc2F2ZShjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuTmF0aXZlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9wZW5OYXRpdmUpIHRoaXMucHJvcHMub3Blbk5hdGl2ZSgpO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/misc/addoneditor.jsx\n"); + +/***/ }), + /***/ "./src/ui/modals.js": /*!**************************!*\ !*** ./src/ui/modals.js ***! @@ -875,7 +911,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var modu /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _components_switch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/switch */ \"./src/ui/settings/components/switch.jsx\");\n\n\n\n\nclass AddonCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n settingsOpen: false\n };\n this.settingsPanel = \"\";\n this.panelRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.onChange = this.onChange.bind(this);\n this.reload = this.reload.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.closeSettings = this.closeSettings.bind(this);\n }\n\n reload() {\n if (!this.props.reload) return;\n this.props.addon = this.props.reload(this.props.addon.id);\n this.forceUpdate();\n }\n\n componentDidUpdate() {\n if (!this.state.settingsOpen) return;\n if (this.settingsPanel instanceof Node) this.panelRef.current.appendChild(this.settingsPanel); // if (!SettingsCookie[\"fork-ps-3\"]) return;\n\n const isHidden = (container, element) => {\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return eTop < cTop || eBottom > cBottom;\n };\n\n const panel = $(this.panelRef.current);\n const container = panel.parents(\".scroller-2FKFPG\");\n if (!isHidden(container[0], panel[0])) return;\n container.animate({\n scrollTop: panel.offset().top - container.offset().top + container.scrollTop() - 30\n }, 300);\n }\n\n getString(value) {\n return typeof value == \"string\" ? value : value.toString();\n }\n\n onChange() {\n this.props.onChange && this.props.onChange(this.props.addon.id);\n this.props.enabled = !this.props.enabled;\n }\n\n showSettings() {\n if (!this.props.hasSettings) return;\n this.setState({\n settingsOpen: true\n });\n }\n\n closeSettings() {\n this.panelRef.current.innerHTML = \"\";\n this.setState({\n settingsOpen: false\n });\n }\n\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-name\"\n }, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-version\"\n }, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-author\"\n }, author);\n return title.flat();\n }\n\n get settingsComponent() {\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n\n try {\n this.settingsPanel = this.props.getSettingsPanel();\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].stacktrace(\"Addon Settings\", \"Unable to get settings panel for \" + name + \".\", err);\n }\n\n const props = {\n id: `${name}-settings`,\n className: \"addon-settings\",\n ref: this.panelRef\n };\n if (typeof settingsPanel == \"string\") props.dangerouslySetInnerHTML = this.settingsPanel;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-card settings-open bd-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-close\",\n onClick: this.closeSettings\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", props, this.settingsPanel instanceof modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component ? this.settingsPanel : null));\n }\n\n buildLink(which) {\n const url = this.props.addon[which];\n if (!url) return null;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bd-link bd-link-website\",\n href: url,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons[which]);\n }\n\n get footer() {\n const links = [\"website\", \"source\"];\n if (!links.some(l => this.props.addon[l]) && !this.props.hasSettings) return null;\n const linkComponents = links.map(this.buildLink.bind(this)).filter(c => c);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-links\"\n }, linkComponents.map((comp, i) => i < linkComponents.length - 1 ? [comp, \" | \"] : [comp]).flat()), this.props.hasSettings && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.showSettings,\n className: \"bd-button bd-button-addon-settings\",\n disabled: !this.props.enabled\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.addonSettings));\n }\n\n render() {\n if (this.state.settingsOpen) return this.settingsComponent;\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n const author = this.getString(addon.author);\n const description = this.getString(addon.description);\n const version = this.getString(addon.version);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: `${addon.id}-card`,\n className: \"bd-addon-card settings-closed\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-title\"\n }, this.buildTitle(name, version, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls\"\n }, this.props.showReloadIcon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"bd-reload bd-reload-card\",\n onClick: this.reload\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_switch__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n checked: this.props.enabled,\n onChange: this.onChange\n }))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description scroller\"\n }, description)), this.footer);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9uY2FyZC5qc3g/NjM3MyJdLCJuYW1lcyI6WyJBZGRvbkNhcmQiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsInNldHRpbmdzT3BlbiIsInNldHRpbmdzUGFuZWwiLCJwYW5lbFJlZiIsImNyZWF0ZVJlZiIsIm9uQ2hhbmdlIiwiYmluZCIsInJlbG9hZCIsInNob3dTZXR0aW5ncyIsImNsb3NlU2V0dGluZ3MiLCJhZGRvbiIsImlkIiwiZm9yY2VVcGRhdGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJOb2RlIiwiY3VycmVudCIsImFwcGVuZENoaWxkIiwiaXNIaWRkZW4iLCJjb250YWluZXIiLCJlbGVtZW50IiwiY1RvcCIsInNjcm9sbFRvcCIsImNCb3R0b20iLCJjbGllbnRIZWlnaHQiLCJlVG9wIiwib2Zmc2V0VG9wIiwiZUJvdHRvbSIsInBhbmVsIiwiJCIsInBhcmVudHMiLCJhbmltYXRlIiwib2Zmc2V0IiwidG9wIiwiZ2V0U3RyaW5nIiwidmFsdWUiLCJ0b1N0cmluZyIsImVuYWJsZWQiLCJoYXNTZXR0aW5ncyIsInNldFN0YXRlIiwiaW5uZXJIVE1MIiwiYnVpbGRUaXRsZSIsIm5hbWUiLCJ2ZXJzaW9uIiwiYXV0aG9yIiwidGl0bGUiLCJTdHJpbmdzIiwiQWRkb25zIiwic3BsaXQiLCJuYW1lSW5kZXgiLCJmaW5kSW5kZXgiLCJzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInZlcnNpb25JbmRleCIsImF1dGhvckluZGV4IiwiZmxhdCIsInNldHRpbmdzQ29tcG9uZW50IiwiZ2V0U2V0dGluZ3NQYW5lbCIsImVyciIsIkxvZ2dlciIsInN0YWNrdHJhY2UiLCJyZWYiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImJ1aWxkTGluayIsIndoaWNoIiwidXJsIiwiZm9vdGVyIiwibGlua3MiLCJzb21lIiwibCIsImxpbmtDb21wb25lbnRzIiwibWFwIiwiZmlsdGVyIiwiYyIsImNvbXAiLCJpIiwibGVuZ3RoIiwiYWRkb25TZXR0aW5ncyIsInJlbmRlciIsImRlc2NyaXB0aW9uIiwic2hvd1JlbG9hZEljb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRWUsTUFBTUEsU0FBTixTQUF3QkMsNkNBQUssQ0FBQ0MsU0FBOUIsQ0FBd0M7QUFFbkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxrQkFBWSxFQUFFO0FBREwsS0FBYjtBQUlBLFNBQUtDLGFBQUwsR0FBcUIsRUFBckI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCUCw2Q0FBSyxDQUFDUSxTQUFOLEVBQWhCO0FBRUEsU0FBS0MsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNDLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZRCxJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDQSxTQUFLRSxZQUFMLEdBQW9CLEtBQUtBLFlBQUwsQ0FBa0JGLElBQWxCLENBQXVCLElBQXZCLENBQXBCO0FBQ0EsU0FBS0csYUFBTCxHQUFxQixLQUFLQSxhQUFMLENBQW1CSCxJQUFuQixDQUF3QixJQUF4QixDQUFyQjtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxRQUFJLENBQUMsS0FBS1IsS0FBTCxDQUFXUSxNQUFoQixFQUF3QjtBQUN4QixTQUFLUixLQUFMLENBQVdXLEtBQVgsR0FBbUIsS0FBS1gsS0FBTCxDQUFXUSxNQUFYLENBQWtCLEtBQUtSLEtBQUwsQ0FBV1csS0FBWCxDQUFpQkMsRUFBbkMsQ0FBbkI7QUFDQSxTQUFLQyxXQUFMO0FBQ0g7O0FBRURDLG9CQUFrQixHQUFHO0FBQ2pCLFFBQUksQ0FBQyxLQUFLYixLQUFMLENBQVdDLFlBQWhCLEVBQThCO0FBQzlCLFFBQUksS0FBS0Ms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QyxxREFBRDtBQUFZLGVBQVMsRUFBQywwQkFBdEI7QUFBaUQsYUFBTyxFQUFFLEtBQUt6RTtBQUEvRCxNQURsQyxFQUVJLDREQUFDLDBEQUFEO0FBQVEsYUFBTyxFQUFFLEtBQUtSLEtBQUwsQ0FBV3FDLE9BQTVCO0FBQXFDLGNBQVEsRUFBRSxLQUFLL0I7QUFBcEQsTUFGSixDQUZSLENBREwsRUFRSztBQUFLLGVBQVMsRUFBQztBQUFmLE9BQXdEO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FBMEMwRSxXQUExQyxDQUF4RCxDQVJMLEVBU00sS0FBS2IsTUFUWCxDQUFQO0FBV0g7O0FBM0hrRCIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy9hZGRvbmNhcmQuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgTG9nZ2VyLCBTdHJpbmdzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgQ2xvc2VCdXR0b24gZnJvbSBcIi4uL2ljb25zL2Nsb3NlXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuLi9pY29ucy9yZWxvYWRcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRkb25DYXJkIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZXR0aW5nc09wZW46IGZhbHNlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuICAgICAgICB0aGlzLnBhbmVsUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZWxvYWQgPSB0aGlzLnJlbG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzID0gdGhpcy5zaG93U2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNsb3NlU2V0dGluZ3MgPSB0aGlzLmNsb3NlU2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLnJlbG9hZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJvcHMuYWRkb24gPSB0aGlzLnByb3BzLnJlbG9hZCh0aGlzLnByb3BzLmFkZG9uLmlkKTtcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5zZXR0aW5nc09wZW4pIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc1BhbmVsIGluc3RhbmNlb2YgTm9kZSkgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmFwcGVuZENoaWxkKHRoaXMuc2V0dGluZ3NQYW5lbCk7XHJcblxyXG4gICAgICAgIC8vIGlmICghU2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGNCb3R0b20gPSBjVG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgZVRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICByZXR1cm4gIChlVG9wIDwgY1RvcCB8fCBlQm90dG9tID4gY0JvdHRvbSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFuZWwgPSAkKHRoaXMucGFuZWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gcGFuZWwucGFyZW50cyhcIi5zY3JvbGxlci0yRktGUEdcIik7XHJcbiAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXJbMF0sIHBhbmVsWzBdKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnRhaW5lci5hbmltYXRlKHtcclxuICAgICAgICAgICAgc2Nyb2xsVG9wOiBwYW5lbC5vZmZzZXQoKS50b3AgLSBjb250YWluZXIub2Zmc2V0KCkudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCgpIC0gMzBcclxuICAgICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge3JldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTt9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSAmJiB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuYWRkb24uaWQpO1xyXG4gICAgICAgIHRoaXMucHJvcHMuZW5hYmxlZCA9ICF0aGlzLnByb3BzLmVuYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NldHRpbmdzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5oYXNTZXR0aW5ncykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKSB7XHJcbiAgICAgICAgY29uc3QgdGl0bGUgPSBTdHJpbmdzLkFkZG9ucy50aXRsZS5zcGxpdCgvKHt7W0EtWmEtel0rfX0pLyk7XHJcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7bmFtZX19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW25hbWVJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLW5hbWVcIn0sIG5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb25JbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e3ZlcnNpb259fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVt2ZXJzaW9uSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC12ZXJzaW9uXCJ9LCB2ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCBhdXRob3JJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e2F1dGhvcn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtYXV0aG9yXCJ9LCBhdXRob3IpO1xyXG4gICAgICAgIHJldHVybiB0aXRsZS5mbGF0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTdHJpbmcoYWRkb24ubmFtZSk7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5nZXRTZXR0aW5nc1BhbmVsKCk7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IExvZ2dlci5zdGFja3RyYWNlKFwiQWRkb24gU2V0dGluZ3NcIiwgXCJVbmFibGUgdG8gZ2V0IHNldHRpbmdzIHBhbmVsIGZvciBcIiArIG5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wcyA9IHtpZDogYCR7bmFtZX0tc2V0dGluZ3NgLCBjbGFzc05hbWU6IFwiYWRkb24tc2V0dGluZ3NcIiwgcmVmOiB0aGlzLnBhbmVsUmVmfTtcclxuICAgICAgICBpZiAodHlwZW9mKHNldHRpbmdzUGFuZWwpID09IFwic3RyaW5nXCIpIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0gdGhpcy5zZXR0aW5nc1BhbmVsO1xyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gYmQtc3dpdGNoLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNsb3NlXCIgb25DbGljaz17dGhpcy5jbG9zZVNldHRpbmdzfT48Q2xvc2VCdXR0b24gLz48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHsuLi5wcm9wc30+e3RoaXMuc2V0dGluZ3NQYW5lbCBpbnN0YW5jZW9mIFJlYWN0LkNvbXBvbmVudCA/IHRoaXMuc2V0dGluZ3NQYW5lbCA6IG51bGx9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRMaW5rKHdoaWNoKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5wcm9wcy5hZGRvblt3aGljaF07XHJcbiAgICAgICAgaWYgKCF1cmwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiA8YSBjbGFzc05hbWU9XCJiZC1saW5rIGJkLWxpbmstd2Vic2l0ZVwiIGhyZWY9e3VybH0gdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPntTdHJpbmdzLkFkZG9uc1t3aGljaF19PC9hPjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gW1wid2Vic2l0ZVwiLCBcInNvdXJjZVwiXTtcclxuICAgICAgICBpZiAoIWxpbmtzLnNvbWUobCA9PiB0aGlzLnByb3BzLmFkZG9uW2xdKSAmJiAhdGhpcy5wcm9wcy5oYXNTZXR0aW5ncykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgbGlua0NvbXBvbmVudHMgPSBsaW5rcy5tYXAodGhpcy5idWlsZExpbmsuYmluZCh0aGlzKSkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmQtbGlua3NcIj57bGlua0NvbXBvbmVudHMubWFwKChjb21wLCBpKSA9PiBpIDwgbGlua0NvbXBvbmVudHMubGVuZ3RoIC0gMSA/IFtjb21wLCBcIiB8IFwiXSA6IFtjb21wXSkuZmxhdCgpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5oYXNTZXR0aW5ncyAmJiA8YnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2hvd1NldHRpbmdzfSBjbGFzc05hbWU9XCJiZC1idXR0b24gYmQtYnV0dG9uLWFkZG9uLXNldHRpbmdzXCIgZGlzYWJsZWQ9eyF0aGlzLnByb3BzLmVuYWJsZWR9PntTdHJpbmdzLkFkZG9ucy5hZGRvblNldHRpbmdzfTwvYnV0dG9uPn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2V0dGluZ3NPcGVuKSByZXR1cm4gdGhpcy5zZXR0aW5nc0NvbXBvbmVudDtcclxuXHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFN0cmluZyhhZGRvbi5uYW1lKTtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldFN0cmluZyhhZGRvbi5hdXRob3IpO1xyXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXRTdHJpbmcoYWRkb24uZGVzY3JpcHRpb24pO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFN0cmluZyhhZGRvbi52ZXJzaW9uKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgaWQ9e2Ake2FkZG9uLmlkfS1jYXJkYH0gY2xhc3NOYW1lPVwiYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmQtdGl0bGVcIj57dGhpcy5idWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcil9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNob3dSZWxvYWRJY29uICYmIDxSZWxvYWRJY29uIGNsYXNzTmFtZT1cImJkLXJlbG9hZCBiZC1yZWxvYWQtY2FyZFwiIG9uQ2xpY2s9e3RoaXMucmVsb2FkfSAvPn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoIGNoZWNrZWQ9e3RoaXMucHJvcHMuZW5hYmxlZH0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCI+PGRpdiBjbGFzc05hbWU9XCJiZC1kZXNjcmlwdGlvbiBzY3JvbGxlclwiPntkZXNjcmlwdGlvbn08L2Rpdj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5mb290ZXJ9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/settings/addoncard.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _icons_edit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/edit */ \"./src/ui/icons/edit.jsx\");\n/* harmony import */ var _icons_delete__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../icons/delete */ \"./src/ui/icons/delete.jsx\");\n/* harmony import */ var _components_switch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/switch */ \"./src/ui/settings/components/switch.jsx\");\n\n\n\n\n\n\nclass AddonCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n settingsOpen: false\n };\n this.settingsPanel = \"\";\n this.panelRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.onChange = this.onChange.bind(this);\n this.reload = this.reload.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.closeSettings = this.closeSettings.bind(this);\n }\n\n reload() {\n if (!this.props.reload) return;\n this.props.addon = this.props.reload(this.props.addon.id);\n this.forceUpdate();\n }\n\n componentDidUpdate() {\n if (!this.state.settingsOpen) return;\n if (this.settingsPanel instanceof Node) this.panelRef.current.appendChild(this.settingsPanel); // if (!SettingsCookie[\"fork-ps-3\"]) return;\n\n const isHidden = (container, element) => {\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return eTop < cTop || eBottom > cBottom;\n };\n\n const panel = $(this.panelRef.current);\n const container = panel.parents(\".scroller-2FKFPG\");\n if (!isHidden(container[0], panel[0])) return;\n container.animate({\n scrollTop: panel.offset().top - container.offset().top + container.scrollTop() - 30\n }, 300);\n }\n\n getString(value) {\n return typeof value == \"string\" ? value : value.toString();\n }\n\n onChange() {\n this.props.onChange && this.props.onChange(this.props.addon.id);\n this.props.enabled = !this.props.enabled;\n }\n\n showSettings() {\n if (!this.props.hasSettings) return;\n this.setState({\n settingsOpen: true\n });\n }\n\n closeSettings() {\n this.panelRef.current.innerHTML = \"\";\n this.setState({\n settingsOpen: false\n });\n }\n\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-name\"\n }, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-version\"\n }, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-author\"\n }, author);\n return title.flat();\n }\n\n get settingsComponent() {\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n\n try {\n this.settingsPanel = this.props.getSettingsPanel();\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].stacktrace(\"Addon Settings\", \"Unable to get settings panel for \" + name + \".\", err);\n }\n\n const props = {\n id: `${name}-settings`,\n className: \"addon-settings\",\n ref: this.panelRef\n };\n if (typeof settingsPanel == \"string\") props.dangerouslySetInnerHTML = this.settingsPanel;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-card settings-open bd-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-close\",\n onClick: this.closeSettings\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", props, this.settingsPanel instanceof modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component ? this.settingsPanel : null));\n }\n\n buildLink(which) {\n const url = this.props.addon[which];\n if (!url) return null;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bd-link bd-link-website\",\n href: url,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons[which]);\n }\n\n get footer() {\n const links = [\"website\", \"source\"];\n if (!links.some(l => this.props.addon[l]) && !this.props.hasSettings) return null;\n const linkComponents = links.map(this.buildLink.bind(this)).filter(c => c);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-links\"\n }, linkComponents.map((comp, i) => i < linkComponents.length - 1 ? [comp, \" | \"] : [comp]).flat()), this.props.hasSettings && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.showSettings,\n className: \"bd-button bd-button-addon-settings\",\n disabled: !this.props.enabled\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.addonSettings));\n }\n\n render() {\n if (this.state.settingsOpen) return this.settingsComponent;\n const addon = this.props.addon;\n const name = this.getString(addon.name);\n const author = this.getString(addon.author);\n const description = this.getString(addon.description);\n const version = this.getString(addon.version);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: `${addon.id}-card`,\n className: \"bd-addon-card settings-closed\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bd-title\"\n }, this.buildTitle(name, version, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls\"\n }, this.props.editAddon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-button\",\n onClick: this.props.editAddon\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_edit__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null)), this.props.deleteAddon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-button\",\n onClick: this.props.deleteAddon\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_delete__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null)), this.props.showReloadIcon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-button\",\n onClick: this.reload\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"bd-reload bd-reload-card\"\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_switch__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n checked: this.props.enabled,\n onChange: this.onChange\n }))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-description scroller\"\n }, description)), this.footer);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9uY2FyZC5qc3g/NjM3MyJdLCJuYW1lcyI6WyJBZGRvbkNhcmQiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsInNldHRpbmdzT3BlbiIsInNldHRpbmdzUGFuZWwiLCJwYW5lbFJlZiIsImNyZWF0ZVJlZiIsIm9uQ2hhbmdlIiwiYmluZCIsInJlbG9hZCIsInNob3dTZXR0aW5ncyIsImNsb3NlU2V0dGluZ3MiLCJhZGRvbiIsImlkIiwiZm9yY2VVcGRhdGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJOb2RlIiwiY3VycmVudCIsImFwcGVuZENoaWxkIiwiaXNIaWRkZW4iLCJjb250YWluZXIiLCJlbGVtZW50IiwiY1RvcCIsInNjcm9sbFRvcCIsImNCb3R0b20iLCJjbGllbnRIZWlnaHQiLCJlVG9wIiwib2Zmc2V0VG9wIiwiZUJvdHRvbSIsInBhbmVsIiwiJCIsInBhcmVudHMiLCJhbmltYXRlIiwib2Zmc2V0IiwidG9wIiwiZ2V0U3RyaW5nIiwidmFsdWUiLCJ0b1N0cmluZyIsImVuYWJsZWQiLCJoYXNTZXR0aW5ncyIsInNldFN0YXRlIiwiaW5uZXJIVE1MIiwiYnVpbGRUaXRsZSIsIm5hbWUiLCJ2ZXJzaW9uIiwiYXV0aG9yIiwidGl0bGUiLCJTdHJpbmdzIiwiQWRkb25zIiwic3BsaXQiLCJuYW1lSW5kZXgiLCJmaW5kSW5kZXgiLCJzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInZlcnNpb25JbmRleCIsImF1dGhvckluZGV4IiwiZmxhdCIsInNldHRpbmdzQ29tcG9uZW50IiwiZ2V0U2V0dGluZ3NQYW5lbCIsImVyciIsIkxvZ2dlciIsInN0YWNrdHJhY2UiLCJyZWYiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImJ1aWxkTGluayIsIndoaWNoIiwidXJsIiwiZm9vdGVyIiwibGlua3MiLCJzb21lIiwibCIsImxpbmtDb21wb25lbnRzIiwibWFwIiwiZmlsdGVyIiwiYyIsImNvbXAiLCJpIiwibGVuZ3RoIiwiYWRkb25TZXR0aW5ncyIsInJlbmRlciIsImRlc2NyaXB0aW9uIiwiZWRpdEFkZG9uIiwiZGVsZXRlQWRkb24iLCJzaG93UmVsb2FkSWNvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLFNBQU4sU0FBd0JDLDZDQUFLLENBQUNDLFNBQTlCLENBQXdDO0FBRW5EQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFDVEMsa0JBQVksRUFBRTtBQURMLEtBQWI7QUFJQSxTQUFLQyxhQUFMLEdBQXFCLEVBQXJCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQlAsNkNBQUssQ0FBQ1EsU0FBTixFQUFoQjtBQUVBLFNBQUtDLFFBQUwsR0FBZ0IsS0FBS0EsUUFBTCxDQUFjQyxJQUFkLENBQW1CLElBQW5CLENBQWhCO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWUQsSUFBWixDQUFpQixJQUFqQixDQUFkO0FBQ0EsU0FBS0UsWUFBTCxHQUFvQixLQUFLQSxZQUFMLENBQWtCRixJQUFsQixDQUF1QixJQUF2QixDQUFwQjtBQUNBLFNBQUtHLGFBQUwsR0FBcUIsS0FBS0EsYUFBTCxDQUFtQkgsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBckI7QUFDSDs7QUFFREMsUUFBTSxHQUFHO0FBQ0wsUUFBSSxDQUFDLEtBQUtSLEtBQUwsQ0FBV1EsTUFBaEIsRUFBd0I7QUFDeEIsU0FBS1IsS0FBTCxDQUFXVyxLQUFYLEdBQW1CLEtBQUtYLEtBQUwsQ0FBV1EsTUFBWCxDQUFrQixLQUFLUixLQUFMLENBQVdXLEtBQVgsQ0FBaUJDLEVBQW5DLENBQW5CO0FBQ0EsU0FBS0MsV0FBTDtBQUNIOztBQUVEQyxvQkFBa0IsR0FBRztBQUNqQixRQUFJLENBQUMs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QztBQUFmLE9BQ0ssS0FBSzVDLEtBQUwsQ0FBV2lGLFNBQVgsSUFBd0I7QUFBSyxlQUFTLEVBQUMsaUJBQWY7QUFBaUMsYUFBTyxFQUFFLEtBQUtqRixLQUFMLENBQVdpRjtBQUFyRCxPQUFnRSw0REFBQyxtREFBRCxPQUFoRSxDQUQ3QixFQUVLLEtBQUtqRixLQUFMLENBQVdrRixXQUFYLElBQTBCO0FBQUssZUFBUyxFQUFDLGlCQUFmO0FBQWlDLGFBQU8sRUFBRSxLQUFLbEYsS0FBTCxDQUFXa0Y7QUFBckQsT0FBa0UsNERBQUMscURBQUQsT0FBbEUsQ0FGL0IsRUFHSyxLQUFLbEYsS0FBTCxDQUFXbUYsY0FBWCxJQUE2QjtBQUFLLGVBQVMsRUFBQyxpQkFBZjtBQUFpQyxhQUFPLEVBQUUsS0FBSzNFO0FBQS9DLE9BQXVELDREQUFDLHFEQUFEO0FBQVksZUFBUyxFQUFDO0FBQXRCLE1BQXZELENBSGxDLEVBSUksNERBQUMsMERBQUQ7QUFBUSxhQUFPLEVBQUUsS0FBS1IsS0FBTCxDQUFXcUMsT0FBNUI7QUFBcUMsY0FBUSxFQUFFLEtBQUsvQjtBQUFwRCxNQUpKLENBRlIsQ0FETCxFQVVLO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FBd0Q7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUEwQzBFLFdBQTFDLENBQXhELENBVkwsRUFXTSxLQUFLYixNQVhYLENBQVA7QUFhSDs7QUE3SGtEIiwiZmlsZSI6Ii4vc3JjL3VpL3NldHRpbmdzL2FkZG9uY2FyZC5qc3guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBMb2dnZXIsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBDbG9zZUJ1dHRvbiBmcm9tIFwiLi4vaWNvbnMvY2xvc2VcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4uL2ljb25zL3JlbG9hZFwiO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSBcIi4uL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4uL2ljb25zL2RlbGV0ZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL2NvbXBvbmVudHMvc3dpdGNoXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRvbkNhcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbjogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0dGluZ3MgPSB0aGlzLnNob3dTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTZXR0aW5ncyA9IHRoaXMuY2xvc2VTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVsb2FkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5hZGRvbiA9IHRoaXMucHJvcHMucmVsb2FkKHRoaXMucHJvcHMuYWRkb24uaWQpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzT3BlbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzUGFuZWwgaW5zdGFuY2VvZiBOb2RlKSB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuXHJcbiAgICAgICAgLy8gaWYgKCFTZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGVCb3R0b20gPSBlVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBwYW5lbCA9ICQodGhpcy5wYW5lbFJlZi5jdXJyZW50KTtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBwYW5lbC5wYXJlbnRzKFwiLnNjcm9sbGVyLTJGS0ZQR1wiKTtcclxuICAgICAgICBpZiAoIWlzSGlkZGVuKGNvbnRhaW5lclswXSwgcGFuZWxbMF0pKSByZXR1cm47XHJcbiAgICAgICAgY29udGFpbmVyLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBzY3JvbGxUb3A6IHBhbmVsLm9mZnNldCgpLnRvcCAtIGNvbnRhaW5lci5vZmZzZXQoKS50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wKCkgLSAzMFxyXG4gICAgICAgIH0sIDMwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO31cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlICYmIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5hZGRvbi5pZCk7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5lbmFibGVkID0gIXRoaXMucHJvcHMuZW5hYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IFN0cmluZ3MuQWRkb25zLnRpdGxlLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbYXV0aG9ySW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hdXRob3JcIn0sIGF1dGhvcik7XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFN0cmluZyhhZGRvbi5uYW1lKTtcclxuICAgICAgICB0cnkgeyB0aGlzLnNldHRpbmdzUGFuZWwgPSB0aGlzLnByb3BzLmdldFNldHRpbmdzUGFuZWwoKTsgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHsgTG9nZ2VyLnN0YWNrdHJhY2UoXCJBZGRvbiBTZXR0aW5nc1wiLCBcIlVuYWJsZSB0byBnZXQgc2V0dGluZ3MgcGFuZWwgZm9yIFwiICsgbmFtZSArIFwiLlwiLCBlcnIpOyB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByb3BzID0ge2lkOiBgJHtuYW1lfS1zZXR0aW5nc2AsIGNsYXNzTmFtZTogXCJhZGRvbi1zZXR0aW5nc1wiLCByZWY6IHRoaXMucGFuZWxSZWZ9O1xyXG4gICAgICAgIGlmICh0eXBlb2Yoc2V0dGluZ3NQYW5lbCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB0aGlzLnNldHRpbmdzUGFuZWw7XHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWNhcmQgc2V0dGluZ3Mtb3BlbiBiZC1zd2l0Y2gtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY2xvc2VcIiBvbkNsaWNrPXt0aGlzLmNsb3NlU2V0dGluZ3N9PjxDbG9zZUJ1dHRvbiAvPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgey4uLnByb3BzfT57dGhpcy5zZXR0aW5nc1BhbmVsIGluc3RhbmNlb2YgUmVhY3QuQ29tcG9uZW50ID8gdGhpcy5zZXR0aW5nc1BhbmVsIDogbnVsbH08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZExpbmsod2hpY2gpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnByb3BzLmFkZG9uW3doaWNoXTtcclxuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIDxhIGNsYXNzTmFtZT1cImJkLWxpbmsgYmQtbGluay13ZWJzaXRlXCIgaHJlZj17dXJsfSB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+e1N0cmluZ3MuQWRkb25zW3doaWNoXX08L2E+O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSBbXCJ3ZWJzaXRlXCIsIFwic291cmNlXCJdO1xyXG4gICAgICAgIGlmICghbGlua3Muc29tZShsID0+IHRoaXMucHJvcHMuYWRkb25bbF0pICYmICF0aGlzLnByb3BzLmhhc1NldHRpbmdzKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBsaW5rQ29tcG9uZW50cyA9IGxpbmtzLm1hcCh0aGlzLmJ1aWxkTGluay5iaW5kKHRoaXMpKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJiZC1saW5rc1wiPntsaW5rQ29tcG9uZW50cy5tYXAoKGNvbXAsIGkpID0+IGkgPCBsaW5rQ29tcG9uZW50cy5sZW5ndGggLSAxID8gW2NvbXAsIFwiIHwgXCJdIDogW2NvbXBdKS5mbGF0KCl9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmhhc1NldHRpbmdzICYmIDxidXR0b24gb25DbGljaz17dGhpcy5zaG93U2V0dGluZ3N9IGNsYXNzTmFtZT1cImJkLWJ1dHRvbiBiZC1idXR0b24tYWRkb24tc2V0dGluZ3NcIiBkaXNhYmxlZD17IXRoaXMucHJvcHMuZW5hYmxlZH0+e1N0cmluZ3MuQWRkb25zLmFkZG9uU2V0dGluZ3N9PC9idXR0b24+fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5nc09wZW4pIHJldHVybiB0aGlzLnNldHRpbmdzQ29tcG9uZW50O1xyXG5cclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMucHJvcHMuYWRkb247XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0U3RyaW5nKGFkZG9uLm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0U3RyaW5nKGFkZG9uLmF1dGhvcik7XHJcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldFN0cmluZyhhZGRvbi5kZXNjcmlwdGlvbik7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnZlcnNpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBpZD17YCR7YWRkb24uaWR9LWNhcmRgfSBjbGFzc05hbWU9XCJiZC1hZGRvbi1jYXJkIHNldHRpbmdzLWNsb3NlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJiZC10aXRsZVwiPnt0aGlzLmJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuZWRpdEFkZG9uICYmIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tYnV0dG9uXCIgb25DbGljaz17dGhpcy5wcm9wcy5lZGl0QWRkb259PjxFZGl0SWNvbiAvPjwvZGl2Pn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5kZWxldGVBZGRvbiAmJiA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMucHJvcHMuZGVsZXRlQWRkb259PjxEZWxldGVJY29uIC8+PC9kaXY+fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNob3dSZWxvYWRJY29uICYmIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tYnV0dG9uXCIgb25DbGljaz17dGhpcy5yZWxvYWR9PjxSZWxvYWRJY29uIGNsYXNzTmFtZT1cImJkLXJlbG9hZCBiZC1yZWxvYWQtY2FyZFwiIC8+PC9kaXY+fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2ggY2hlY2tlZD17dGhpcy5wcm9wcy5lbmFibGVkfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIj48ZGl2IGNsYXNzTmFtZT1cImJkLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCI+e2Rlc2NyaXB0aW9ufTwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLmZvb3Rlcn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings/addoncard.jsx\n"); /***/ }), @@ -887,7 +923,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonList; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _addoncard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./addoncard */ \"./src/ui/settings/addoncard.jsx\");\n/* harmony import */ var _components_dropdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/dropdown */ \"./src/ui/settings/components/dropdown.jsx\");\n/* harmony import */ var _components_search__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/search */ \"./src/ui/settings/components/search.jsx\");\n\n\n\n\n\n\nclass AddonList extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n sort: \"name\",\n ascending: true,\n query: \"\"\n };\n this.sort = this.sort.bind(this);\n this.reverse = this.reverse.bind(this);\n this.search = this.search.bind(this);\n }\n\n reload() {\n if (this.props.refreshList) this.props.refreshList();\n this.forceUpdate();\n }\n\n reverse(value) {\n this.setState({\n ascending: value\n });\n }\n\n sort(value) {\n this.setState({\n sort: value\n });\n }\n\n search(event) {\n this.setState({\n query: event.target.value.toLocaleLowerCase()\n });\n }\n\n get sortOptions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.name,\n value: \"name\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.author,\n value: \"author\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.version,\n value: \"version\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.added,\n value: \"added\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.modified,\n value: \"modified\"\n }];\n }\n\n get directions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.ascending,\n value: true\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.descending,\n value: false\n }];\n }\n\n render() {\n const {\n title,\n folder,\n addonList,\n addonState,\n onChange,\n reload\n } = this.props;\n const showReloadIcon = !modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"addons\", \"autoReload\");\n const button = folder ? {\n title: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.openFolder.format({\n type: title\n }),\n onClick: () => {\n __webpack_require__(/*! electron */ \"electron\").shell.openItem(folder);\n }\n } : null;\n const sortedAddons = addonList.sort((a, b) => {\n const first = a[this.state.sort];\n const second = b[this.state.sort];\n if (typeof first == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\n if (first > second) return 1;\n if (second > first) return -1;\n return 0;\n });\n if (!this.state.ascending) sortedAddons.reverse();\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n key: \"title\",\n text: title,\n button: button,\n otherChildren: showReloadIcon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"bd-reload\",\n onClick: this.reload.bind(this)\n })\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls bd-addon-controls\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_search__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onChange: this.search,\n placeholder: `${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.search.format({\n type: this.props.title\n })}...`\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-dropdowns\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.sortBy, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n options: this.sortOptions,\n onChange: this.sort,\n style: \"transparent\"\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.order, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n options: this.directions,\n onChange: this.reverse,\n style: \"transparent\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n key: \"addonList\",\n className: \"bd-addon-list\"\n }, sortedAddons.map(addon => {\n if (this.state.query) {\n let matches = addon.name.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.author.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.description.toLocaleLowerCase().includes(this.state.query);\n if (!matches) return null;\n }\n\n const hasSettings = addon.type && typeof addon.plugin.getSettingsPanel === \"function\";\n const getSettings = hasSettings && addon.plugin.getSettingsPanel.bind(addon.plugin);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_addoncard__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n showReloadIcon: showReloadIcon,\n key: addon.id,\n enabled: addonState[addon.id],\n addon: addon,\n onChange: onChange,\n reload: reload,\n hasSettings: hasSettings,\n getSettingsPanel: getSettings\n });\n }))];\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9ubGlzdC5qc3g/NjRkMiJdLCJuYW1lcyI6WyJBZGRvbkxpc3QiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsInNvcnQiLCJhc2NlbmRpbmciLCJxdWVyeSIsImJpbmQiLCJyZXZlcnNlIiwic2VhcmNoIiwicmVsb2FkIiwicmVmcmVzaExpc3QiLCJmb3JjZVVwZGF0ZSIsInZhbHVlIiwic2V0U3RhdGUiLCJldmVudCIsInRhcmdldCIsInRvTG9jYWxlTG93ZXJDYXNlIiwic29ydE9wdGlvbnMiLCJsYWJlbCIsIlN0cmluZ3MiLCJBZGRvbnMiLCJuYW1lIiwiYXV0aG9yIiwidmVyc2lvbiIsImFkZGVkIiwibW9kaWZpZWQiLCJkaXJlY3Rpb25zIiwiU29ydGluZyIsImRlc2NlbmRpbmciLCJyZW5kZXIiLCJ0aXRsZSIsImZvbGRlciIsImFkZG9uTGlzdCIsImFkZG9uU3RhdGUiLCJvbkNoYW5nZSIsInNob3dSZWxvYWRJY29uIiwiU2V0dGluZ3MiLCJnZXQiLCJidXR0b24iLCJvcGVuRm9sZGVyIiwiZm9ybWF0IiwidHlwZSIsIm9uQ2xpY2siLCJyZXF1aXJlIiwic2hlbGwiLCJvcGVuSXRlbSIsInNvcnRlZEFkZG9ucyIsImEiLCJiIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwic29ydEJ5Iiwib3JkZXIiLCJtYXAiLCJhZGRvbiIsIm1hdGNoZXMiLCJpbmNsdWRlcyIsImRlc2NyaXB0aW9uIiwiaGFzU2V0dGluZ3MiLCJwbHVnaW4iLCJnZXRTZXR0aW5nc1BhbmVsIiwiZ2V0U2V0dGluZ3MiLCJpZCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLFNBQU4sU0FBd0JDLDZDQUFLLENBQUNDLFNBQTlCLENB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QUFXRyxLQUExRCxDQUFyQjtBQUNBLFlBQUksQ0FBQ21ELE9BQUwsRUFBYyxPQUFPLElBQVA7QUFDakI7O0FBQ0QsWUFBTUcsV0FBVyxHQUFHSixLQUFLLENBQUNkLElBQU4sSUFBYyxPQUFPYyxLQUFLLENBQUNLLE1BQU4sQ0FBYUMsZ0JBQXBCLEtBQTBDLFVBQTVFO0FBQ0EsWUFBTUMsV0FBVyxHQUFHSCxXQUFXLElBQUlKLEtBQUssQ0FBQ0ssTUFBTixDQUFhQyxnQkFBYixDQUE4QnZELElBQTlCLENBQW1DaUQsS0FBSyxDQUFDSyxNQUF6QyxDQUFuQztBQUNBLGFBQU8sNERBQUMsa0RBQUQ7QUFBVyxzQkFBYyxFQUFFekIsY0FBM0I7QUFBMkMsV0FBRyxFQUFFb0IsS0FBSyxDQUFDUSxFQUF0RDtBQUEwRCxlQUFPLEVBQUU5QixVQUFVLENBQUNzQixLQUFLLENBQUNRLEVBQVAsQ0FBN0U7QUFBeUYsYUFBSyxFQUFFUixLQUFoRztBQUF1RyxnQkFBUSxFQUFFckIsUUFBakg7QUFBMkgsY0FBTSxFQUFFekIsTUFBbkk7QUFBMkksbUJBQVcsRUFBRWtELFdBQXhKO0FBQXFLLHdCQUFnQixFQUFFRztBQUF2TCxRQUFQO0FBQ0gsS0FWQSxDQURELENBaEJHLENBQVA7QUE4Qkg7O0FBdkZrRCIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy9hZGRvbmxpc3QuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgU2V0dGluZ3MsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi90aXRsZVwiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi4vaWNvbnMvcmVsb2FkXCI7XHJcbmltcG9ydCBBZGRvbkNhcmQgZnJvbSBcIi4vYWRkb25jYXJkXCI7XHJcbmltcG9ydCBEcm9wZG93biBmcm9tIFwiLi9jb21wb25lbnRzL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCBTZWFyY2ggZnJvbSBcIi4vY29tcG9uZW50cy9zZWFyY2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkZG9uTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XHJcbiAgICAgICAgdGhpcy5zb3J0ID0gdGhpcy5zb3J0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gdGhpcy5yZXZlcnNlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5yZWZyZXNoTGlzdCkgdGhpcy5wcm9wcy5yZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnNlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YXNjZW5kaW5nOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3F1ZXJ5OiBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzb3J0T3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuQWRkb25zLm5hbWUsIHZhbHVlOiBcIm5hbWVcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMuYXV0aG9yLCB2YWx1ZTogXCJhdXRob3JcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMudmVyc2lvbiwgdmFsdWU6IFwidmVyc2lvblwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLkFkZG9ucy5hZGRlZCwgdmFsdWU6IFwiYWRkZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMubW9kaWZpZWQsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuU29ydGluZy5hc2NlbmRpbmcsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLlNvcnRpbmcuZGVzY2VuZGluZywgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHt0aXRsZSwgZm9sZGVyLCBhZGRvbkxpc3QsIGFkZG9uU3RhdGUsIG9uQ2hhbmdlLCByZWxvYWR9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBzaG93UmVsb2FkSWNvbiA9ICFTZXR0aW5ncy5nZXQoXCJzZXR0aW5nc1wiLCBcImFkZG9uc1wiLCBcImF1dG9SZWxvYWRcIik7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZm9sZGVyID8ge3RpdGxlOiBTdHJpbmdzLkFkZG9ucy5vcGVuRm9sZGVyLmZvcm1hdCh7dHlwZTogdGl0bGV9KSwgb25DbGljazogKCkgPT4ge3JlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShmb2xkZXIpO319IDogbnVsbDtcclxuICAgICAgICBjb25zdCBzb3J0ZWRBZGRvbnMgPSBhZGRvbkxpc3Quc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGFbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gYlt0aGlzLnN0YXRlLnNvcnRdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKGZpcnN0KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gZmlyc3QudG9Mb2NhbGVMb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKHNlY29uZC50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0ID4gc2Vjb25kKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgaWYgKHNlY29uZCA+IGZpcnN0KSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5hc2NlbmRpbmcpIHNvcnRlZEFkZG9ucy5yZXZlcnNlKCk7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPFNldHRpbmdzVGl0bGUga2V5PVwidGl0bGVcIiB0ZXh0PXt0aXRsZX0gYnV0dG9uPXtidXR0b259IG90aGVyQ2hpbGRyZW49e3Nob3dSZWxvYWRJY29uICYmIDxSZWxvYWRJY29uIGNsYXNzTmFtZT1cImJkLXJlbG9hZFwiIG9uQ2xpY2s9e3RoaXMucmVsb2FkLmJpbmQodGhpcyl9IC8+fSAvPixcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9scyBiZC1hZGRvbi1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgPFNlYXJjaCBvbkNoYW5nZT17dGhpcy5zZWFyY2h9IHBsYWNlaG9sZGVyPXtgJHtTdHJpbmdzLkFkZG9ucy5zZWFyY2guZm9ybWF0KHt0eXBlOiB0aGlzLnByb3BzLnRpdGxlfSl9Li4uYH0gLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tZHJvcGRvd25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj57U3RyaW5ncy5Tb3J0aW5nLnNvcnRCeX06PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuc29ydE9wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnNvcnR9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+e1N0cmluZ3MuU29ydGluZy5vcmRlcn06PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuZGlyZWN0aW9uc30gb25DaGFuZ2U9e3RoaXMucmV2ZXJzZX0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+LFxyXG4gICAgICAgICAgICA8ZGl2IGtleT1cImFkZG9uTGlzdFwiIGNsYXNzTmFtZT17XCJiZC1hZGRvbi1saXN0XCJ9PlxyXG4gICAgICAgICAgICB7c29ydGVkQWRkb25zLm1hcChhZGRvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5xdWVyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gYWRkb24ubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGFkZG9uLmF1dGhvci50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGFkZG9uLmRlc2NyaXB0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1NldHRpbmdzID0gYWRkb24udHlwZSAmJiB0eXBlb2YoYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwpID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBnZXRTZXR0aW5ncyA9IGhhc1NldHRpbmdzICYmIGFkZG9uLnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsLmJpbmQoYWRkb24ucGx1Z2luKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiA8QWRkb25DYXJkIHNob3dSZWxvYWRJY29uPXtzaG93UmVsb2FkSWNvbn0ga2V5PXthZGRvbi5pZH0gZW5hYmxlZD17YWRkb25TdGF0ZVthZGRvbi5pZF19IGFkZG9uPXthZGRvbn0gb25DaGFuZ2U9e29uQ2hhbmdlfSByZWxvYWQ9e3JlbG9hZH0gaGFzU2V0dGluZ3M9e2hhc1NldHRpbmdzfSBnZXRTZXR0aW5nc1BhbmVsPXtnZXRTZXR0aW5nc30gLz47XHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/settings/addonlist.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return AddonList; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n/* harmony import */ var _addoncard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./addoncard */ \"./src/ui/settings/addoncard.jsx\");\n/* harmony import */ var _components_dropdown__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/dropdown */ \"./src/ui/settings/components/dropdown.jsx\");\n/* harmony import */ var _components_search__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/search */ \"./src/ui/settings/components/search.jsx\");\n\n\n\n\n\n\n\nclass AddonList extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n sort: \"name\",\n ascending: true,\n query: \"\"\n };\n this.sort = this.sort.bind(this);\n this.reverse = this.reverse.bind(this);\n this.search = this.search.bind(this);\n this.update = this.update.bind(this);\n }\n\n componentDidMount() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(`${this.props.prefix}-loaded`, this.update);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].on(`${this.props.prefix}-unloaded`, this.update);\n }\n\n componentWillUnmount() {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].off(`${this.props.prefix}-loaded`, this.update);\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Events\"].off(`${this.props.prefix}-unloaded`, this.update);\n }\n\n update() {\n this.forceUpdate();\n }\n\n reload() {\n if (this.props.refreshList) this.props.refreshList();\n this.forceUpdate();\n }\n\n reverse(value) {\n this.setState({\n ascending: value\n });\n }\n\n sort(value) {\n this.setState({\n sort: value\n });\n }\n\n search(event) {\n this.setState({\n query: event.target.value.toLocaleLowerCase()\n });\n }\n\n get sortOptions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.name,\n value: \"name\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.author,\n value: \"author\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.version,\n value: \"version\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.added,\n value: \"added\"\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.modified,\n value: \"modified\"\n }];\n }\n\n get directions() {\n return [{\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.ascending,\n value: true\n }, {\n label: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.descending,\n value: false\n }];\n }\n\n render() {\n const {\n title,\n folder,\n addonList,\n addonState,\n onChange,\n reload\n } = this.props;\n const showReloadIcon = !modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"addons\", \"autoReload\");\n const button = folder ? {\n title: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.openFolder.format({\n type: title\n }),\n onClick: () => {\n __webpack_require__(/*! electron */ \"electron\").shell.openItem(folder);\n }\n } : null;\n const sortedAddons = addonList.sort((a, b) => {\n const first = a[this.state.sort];\n const second = b[this.state.sort];\n if (typeof first == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\n if (first > second) return 1;\n if (second > first) return -1;\n return 0;\n });\n if (!this.state.ascending) sortedAddons.reverse();\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: \"title\",\n text: title,\n button: button,\n otherChildren: showReloadIcon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"bd-reload\",\n onClick: this.reload.bind(this)\n })\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-controls bd-addon-controls\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_search__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onChange: this.search,\n placeholder: `${modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.search.format({\n type: this.props.title\n })}...`\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-addon-dropdowns\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.sortBy, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n options: this.sortOptions,\n onChange: this.sort,\n style: \"transparent\"\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-select-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"bd-label\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Sorting.order, \":\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_components_dropdown__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n options: this.directions,\n onChange: this.reverse,\n style: \"transparent\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n key: \"addonList\",\n className: \"bd-addon-list\"\n }, sortedAddons.map(addon => {\n if (this.state.query) {\n let matches = addon.name.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.author.toLocaleLowerCase().includes(this.state.query);\n matches = matches || addon.description.toLocaleLowerCase().includes(this.state.query);\n if (!matches) return null;\n }\n\n const hasSettings = addon.type && typeof addon.plugin.getSettingsPanel === \"function\";\n const getSettings = hasSettings && addon.plugin.getSettingsPanel.bind(addon.plugin);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_addoncard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n editAddon: this.editAddon.bind(this, addon.id),\n deleteAddon: this.deleteAddon.bind(this, addon.id),\n showReloadIcon: showReloadIcon,\n key: addon.id,\n enabled: addonState[addon.id],\n addon: addon,\n onChange: onChange,\n reload: reload,\n hasSettings: hasSettings,\n getSettingsPanel: getSettings\n });\n }))];\n }\n\n editAddon(id) {\n if (this.props.editAddon) this.props.editAddon(id);\n }\n\n async deleteAddon(id) {\n const addon = this.props.addonList.find(a => a.id == id);\n const shouldDelete = await this.confirmDelete(addon);\n if (!shouldDelete) return;\n if (this.props.deleteAddon) this.props.deleteAddon(addon);\n }\n\n confirmDelete(addon) {\n return new Promise(resolve => {\n _modals__WEBPACK_IMPORTED_MODULE_1__[\"default\"].showConfirmationModal(modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Modals.confirmAction, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.confirmDelete.format({\n name: addon.name\n }), {\n danger: true,\n confirmText: modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.deleteAddon,\n onConfirm: () => {\n resolve(true);\n },\n onCancel: () => {\n resolve(false);\n }\n });\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL2FkZG9ubGlzdC5qc3g/NjRkMiJdLCJuYW1lcyI6WyJBZGRvbkxpc3QiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsInNvcnQiLCJhc2NlbmRpbmciLCJxdWVyeSIsImJpbmQiLCJyZXZlcnNlIiwic2VhcmNoIiwidXBkYXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJFdmVudHMiLCJvbiIsInByZWZpeCIsImNvbXBvbmVudFdpbGxVbm1vdW50Iiwib2ZmIiwiZm9yY2VVcGRhdGUiLCJyZWxvYWQiLCJyZWZyZXNoTGlzdCIsInZhbHVlIiwic2V0U3RhdGUiLCJldmVudCIsInRhcmdldCIsInRvTG9jYWxlTG93ZXJDYXNlIiwic29ydE9wdGlvbnMiLCJsYWJlbCIsIlN0cmluZ3MiLCJBZGRvbnMiLCJuYW1lIiwiYXV0aG9yIiwidmVyc2lvbiIsImFkZGVkIiwibW9kaWZpZWQiLCJkaXJlY3Rpb25zIiwiU29ydGluZyIsImRlc2NlbmRpbmciLCJyZW5kZXIiLCJ0aXRsZSIsImZvbGRlciIsImFkZG9uTGlzdCIsImFkZG9uU3RhdGUiLCJvbkNoYW5nZSIsInNob3dSZWxvYWRJY29uIiwiU2V0dGluZ3MiLCJnZXQiLCJidXR0b24iLCJvcGVuRm9sZGVyIiwiZm9ybWF0IiwidHlwZSIsIm9uQ2xpY2siLCJyZXF1aXJlIiwic2hlbGwiLCJvcGVuSXRlbSIsInNvcnRlZEFkZG9ucyIsImEiLCJiIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwic29ydEJ5Iiwib3JkZXIiLCJtYXAiLCJhZGRvbiIsIm1hdGNoZXMiLCJpbmNsdWRlcyIsImRlc2NyaXB0aW9uIiwiaGFzU2V0dGluZ3MiLCJwbHVnaW4iLCJnZXRTZXR0aW5nc1BhbmVsIiwiZ2V0U2V0dGluZ3MiLCJlZGl0QWRkb24iLCJpZCIsImRlbGV0ZUFkZG9uIiwiZmluZCIsInNob3VsZERlbGV0ZSIsImNvbmZpcm1EZWxldGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsImNvbmZpcm1BY3Rpb24iLCJkYW5nZXIiLCJjb25maXJtVGV4dCIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLFNBQU4sU0FBd0JDLDZDQUFLLENBQUNDLFNBQTlCLENBQXdDO0FBRW5EQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsVUFBSSxFQUFFLE1BQVA7QUFBZUMsZUFBUyxFQUFFLElBQTFCO0FBQWdDQyxXQUFLLEVBQUU7QUFBdkMsS0FBYjtBQUNBLFNBQUtGLElBQUwsR0FBWSxLQUFLQSxJQUFMLENBQVVHLElBQVYsQ0FBZSxJQUFmLENBQVo7QUFDQSxTQUFLQyxPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhRCxJQUFiLENBQWtCLElBQWxCLENBQWY7QUFDQSxTQUFLRSxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZRixJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDQSxTQUFLRyxNQUFMLEdBQWMsS0FBS0EsTUFBTCxDQUFZSCxJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDSDs7QUFFREksbUJBQWlCLEdBQUc7QUFDaEJDLGtEQUFNLENBQUNDLEVBQVAsQ0FBVyxHQUFFLEtBQUtYLEtBQUwsQ0FBV1ksTUFBTyxTQUEvQixFQUF5QyxLQUFLSixNQUE5QztBQUNBRSxrREFBTSxDQUFDQyxFQUFQLENBQVcsR0FBRSxLQUFLWCxLQUFMLENBQVdZLE1BQU8sV0FBL0IsRUFBMkMsS0FBS0osTUFBaEQ7QUFDSDs7QUFFREssc0JBQW9CLEdBQUc7QUFDbkJILGtEQUFNLENBQUNJLEdBQVAsQ0FBWSxHQUFFLEtBQUtkLEtBQUws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TCxFQUFtQjtBQUNuQixRQUFJLEtBQUt6RSxLQUFMLENBQVd1RSxXQUFmLEVBQTRCLEtBQUt2RSxLQUFMLENBQVd1RSxXQUFYLENBQXVCVixLQUF2QjtBQUMvQjs7QUFFRGEsZUFBYSxDQUFDYixLQUFELEVBQVE7QUFDakIsV0FBTyxJQUFJYyxPQUFKLENBQVlDLE9BQU8sSUFBSTtBQUMxQkMscURBQU0sQ0FBQ0MscUJBQVAsQ0FBNkJyRCwrQ0FBTyxDQUFDb0QsTUFBUixDQUFlRSxhQUE1QyxFQUEyRHRELCtDQUFPLENBQUNDLE1BQVIsQ0FBZWdELGFBQWYsQ0FBNkI1QixNQUE3QixDQUFvQztBQUFDbkIsWUFBSSxFQUFFa0MsS0FBSyxDQUFDbEM7QUFBYixPQUFwQyxDQUEzRCxFQUFvSDtBQUNoSHFELGNBQU0sRUFBRSxJQUR3RztBQUVoSEMsbUJBQVcsRUFBRXhELCtDQUFPLENBQUNDLE1BQVIsQ0FBZTZDLFdBRm9GO0FBR2hIVyxpQkFBUyxFQUFFLE1BQU07QUFBQ04saUJBQU8sQ0FBQyxJQUFELENBQVA7QUFBZSxTQUgrRTtBQUloSE8sZ0JBQVEsRUFBRSxNQUFNO0FBQUNQLGlCQUFPLENBQUMsS0FBRCxDQUFQO0FBQWdCO0FBSitFLE9BQXBIO0FBTUgsS0FQTSxDQUFQO0FBUUg7O0FBNUhrRCIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy9hZGRvbmxpc3QuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgU2V0dGluZ3MsIFN0cmluZ3MsIEV2ZW50c30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL21vZGFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi90aXRsZVwiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi4vaWNvbnMvcmVsb2FkXCI7XHJcbmltcG9ydCBBZGRvbkNhcmQgZnJvbSBcIi4vYWRkb25jYXJkXCI7XHJcbmltcG9ydCBEcm9wZG93biBmcm9tIFwiLi9jb21wb25lbnRzL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCBTZWFyY2ggZnJvbSBcIi4vY29tcG9uZW50cy9zZWFyY2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkZG9uTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XHJcbiAgICAgICAgdGhpcy5zb3J0ID0gdGhpcy5zb3J0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gdGhpcy5yZXZlcnNlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgRXZlbnRzLm9uKGAke3RoaXMucHJvcHMucHJlZml4fS1sb2FkZWRgLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgRXZlbnRzLm9uKGAke3RoaXMucHJvcHMucHJlZml4fS11bmxvYWRlZGAsIHRoaXMudXBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICBFdmVudHMub2ZmKGAke3RoaXMucHJvcHMucHJlZml4fS1sb2FkZWRgLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgRXZlbnRzLm9mZihgJHt0aGlzLnByb3BzLnByZWZpeH0tdW5sb2FkZWRgLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKCkge1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVmcmVzaExpc3QpIHRoaXMucHJvcHMucmVmcmVzaExpc3QoKTtcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJzZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2FzY2VuZGluZzogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c29ydDogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2goZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtxdWVyeTogZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc29ydE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLkFkZG9ucy5uYW1lLCB2YWx1ZTogXCJuYW1lXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuQWRkb25zLmF1dGhvciwgdmFsdWU6IFwiYXV0aG9yXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuQWRkb25zLnZlcnNpb24sIHZhbHVlOiBcInZlcnNpb25cIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5BZGRvbnMuYWRkZWQsIHZhbHVlOiBcImFkZGVkXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFN0cmluZ3MuQWRkb25zLm1vZGlmaWVkLCB2YWx1ZTogXCJtb2RpZmllZFwifVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRpcmVjdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge2xhYmVsOiBTdHJpbmdzLlNvcnRpbmcuYXNjZW5kaW5nLCB2YWx1ZTogdHJ1ZX0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogU3RyaW5ncy5Tb3J0aW5nLmRlc2NlbmRpbmcsIHZhbHVlOiBmYWxzZX1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7dGl0bGUsIGZvbGRlciwgYWRkb25MaXN0LCBhZGRvblN0YXRlLCBvbkNoYW5nZSwgcmVsb2FkfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgY29uc3Qgc2hvd1JlbG9hZEljb24gPSAhU2V0dGluZ3MuZ2V0KFwic2V0dGluZ3NcIiwgXCJhZGRvbnNcIiwgXCJhdXRvUmVsb2FkXCIpO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGZvbGRlciA/IHt0aXRsZTogU3RyaW5ncy5BZGRvbnMub3BlbkZvbGRlci5mb3JtYXQoe3R5cGU6IHRpdGxlfSksIG9uQ2xpY2s6ICgpID0+IHtyZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oZm9sZGVyKTt9fSA6IG51bGw7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWRkb25zID0gYWRkb25MaXN0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBhW3RoaXMuc3RhdGUuc29ydF07XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IGJbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihmaXJzdCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZpcnN0LnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShzZWNvbmQudG9Mb2NhbGVMb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCA+IHNlY29uZCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPiBmaXJzdCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuYXNjZW5kaW5nKSBzb3J0ZWRBZGRvbnMucmV2ZXJzZSgpO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxTZXR0aW5nc1RpdGxlIGtleT1cInRpdGxlXCIgdGV4dD17dGl0bGV9IGJ1dHRvbj17YnV0dG9ufSBvdGhlckNoaWxkcmVuPXtzaG93UmVsb2FkSWNvbiAmJiA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1yZWxvYWRcIiBvbkNsaWNrPXt0aGlzLnJlbG9hZC5iaW5kKHRoaXMpfSAvPn0gLz4sXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY29udHJvbHMgYmQtYWRkb24tY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgIDxTZWFyY2ggb25DaGFuZ2U9e3RoaXMuc2VhcmNofSBwbGFjZWhvbGRlcj17YCR7U3RyaW5ncy5BZGRvbnMuc2VhcmNoLmZvcm1hdCh7dHlwZTogdGhpcy5wcm9wcy50aXRsZX0pfS4uLmB9IC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWRyb3Bkb3duc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+e1N0cmluZ3MuU29ydGluZy5zb3J0Qnl9OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLnNvcnRPcHRpb25zfSBvbkNoYW5nZT17dGhpcy5zb3J0fSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPntTdHJpbmdzLlNvcnRpbmcub3JkZXJ9OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLmRpcmVjdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnJldmVyc2V9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdiBrZXk9XCJhZGRvbkxpc3RcIiBjbGFzc05hbWU9e1wiYmQtYWRkb24tbGlzdFwifT5cclxuICAgICAgICAgICAge3NvcnRlZEFkZG9ucy5tYXAoYWRkb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucXVlcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGFkZG9uLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhZGRvbi5hdXRob3IudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhZGRvbi5kZXNjcmlwdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNTZXR0aW5ncyA9IGFkZG9uLnR5cGUgJiYgdHlwZW9mKGFkZG9uLnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKSA9PT0gXCJmdW5jdGlvblwiO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2V0U2V0dGluZ3MgPSBoYXNTZXR0aW5ncyAmJiBhZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbC5iaW5kKGFkZG9uLnBsdWdpbik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPEFkZG9uQ2FyZCBlZGl0QWRkb249e3RoaXMuZWRpdEFkZG9uLmJpbmQodGhpcywgYWRkb24uaWQpfSBkZWxldGVBZGRvbj17dGhpcy5kZWxldGVBZGRvbi5iaW5kKHRoaXMsIGFkZG9uLmlkKX0gc2hvd1JlbG9hZEljb249e3Nob3dSZWxvYWRJY29ufSBrZXk9e2FkZG9uLmlkfSBlbmFibGVkPXthZGRvblN0YXRlW2FkZG9uLmlkXX0gYWRkb249e2FkZG9ufSBvbkNoYW5nZT17b25DaGFuZ2V9IHJlbG9hZD17cmVsb2FkfSBoYXNTZXR0aW5ncz17aGFzU2V0dGluZ3N9IGdldFNldHRpbmdzUGFuZWw9e2dldFNldHRpbmdzfSAvPjtcclxuICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdEFkZG9uKGlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZWRpdEFkZG9uKSB0aGlzLnByb3BzLmVkaXRBZGRvbihpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlQWRkb24oaWQpIHtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMucHJvcHMuYWRkb25MaXN0LmZpbmQoYSA9PiBhLmlkID09IGlkKTtcclxuICAgICAgICBjb25zdCBzaG91bGREZWxldGUgPSBhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGUoYWRkb24pO1xyXG4gICAgICAgIGlmICghc2hvdWxkRGVsZXRlKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVsZXRlQWRkb24pIHRoaXMucHJvcHMuZGVsZXRlQWRkb24oYWRkb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1EZWxldGUoYWRkb24pIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIE1vZGFscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoU3RyaW5ncy5Nb2RhbHMuY29uZmlybUFjdGlvbiwgU3RyaW5ncy5BZGRvbnMuY29uZmlybURlbGV0ZS5mb3JtYXQoe25hbWU6IGFkZG9uLm5hbWV9KSwge1xyXG4gICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFN0cmluZ3MuQWRkb25zLmRlbGV0ZUFkZG9uLFxyXG4gICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7cmVzb2x2ZSh0cnVlKTt9LFxyXG4gICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHtyZXNvbHZlKGZhbHNlKTt9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/settings/addonlist.jsx\n"); /***/ }), diff --git a/src/data/settings/config.js b/src/data/settings/config.js index 510f63d9..de3d55e1 100644 --- a/src/data/settings/config.js +++ b/src/data/settings/config.js @@ -28,10 +28,12 @@ export default [ type: "category", id: "addons", collapsible: true, + shown: false, settings: [ {type: "switch", id: "addonErrors", value: true}, {type: "switch", id: "autoScroll", value: true}, - {type: "switch", id: "autoReload", value: true} + {type: "switch", id: "autoReload", value: true}, + {type: "dropdown", id: "editAction", value: "detached", options: [{value: "detached"}, {value: "system"}]} ] }, { diff --git a/src/data/strings.js b/src/data/strings.js index 545e11e3..ec3eca22 100644 --- a/src/data/strings.js +++ b/src/data/strings.js @@ -71,6 +71,14 @@ export default { name: "Automatic Loading", note: "Automatically loads, reloads, and unloads plugins and themes" }, + editAction: { + name: "Edit Action", + note: "Where plugins & themes appear when editing", + options: { + detached: "Detached Window", + system: "System Editor" + } + } }, customcss: { name: "Custom CSS", @@ -191,7 +199,11 @@ export default { version: "Version", added: "Date Added", modified: "Date Modified", - search: "Search {{type}}" + search: "Search {{type}}", + editAddon: "Edit", + deleteAddon: "Delete", + confirmDelete: "Are you sure you want to delete {{name}}?", + confirmationText: "You have unsaved changes to {{name}}. Closing this window will lose all those changes.", }, Emotes: { loading: "Loading emotes in the background do not reload.", @@ -225,9 +237,10 @@ export default { query: "for {{query}}" }, Modals: { - confirmClose: "Are You Sure?", + confirmAction: "Are You Sure?", okay: "Okay", cancel: "Cancel", + close: "Close", name: "Name", message: "Message", error: "Error", diff --git a/src/modules/addonmanager.js b/src/modules/addonmanager.js index e8ae3ad0..2a80336b 100644 --- a/src/modules/addonmanager.js +++ b/src/modules/addonmanager.js @@ -6,13 +6,20 @@ import DataStore from "./datastore"; import AddonError from "../structs/addonerror"; import MetaError from "../structs/metaerror"; import Toasts from "../ui/toasts"; +import DiscordModules from "./discordmodules"; +import Strings from "./strings"; + +import AddonEditor from "../ui/misc/addoneditor"; +import FloatingWindowContainer from "../ui/floating/container"; + +const React = DiscordModules.React; const path = require("path"); const fs = require("fs"); const Module = require("module").Module; Module.globalPaths.push(path.resolve(require("electron").remote.app.getAppPath(), "node_modules")); -const splitRegex = /[^\S\r\n]*?\n[^\S\r\n]*?\*[^\S\r\n]?/; +const splitRegex = /[^\S\r\n]*?\r?\n[^\S\r\n]*?\*[^\S\r\n]?/; const escapedAtRegex = /^\\@/; const stripBOM = function(fileContent) { @@ -28,6 +35,7 @@ export default class AddonManager { get moduleExtension() {return "";} get extension() {return "";} get addonFolder() {return "";} + get language() {return "";} get prefix() {return "addon";} get collection() {return "settings";} get category() {return "addons";} @@ -258,4 +266,60 @@ export default class AddonManager { if (Settings.get(this.collection, this.category, this.id)) this.watchAddons(); return errors; } + + deleteAddon(idOrFileOrAddon) { + const addon = typeof(idOrFileOrAddon) == "string" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon; + return fs.unlinkSync(path.resolve(this.addonFolder, addon.filename)); + } + + saveAddon(idOrFileOrAddon, content) { + const addon = typeof(idOrFileOrAddon) == "string" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon; + return fs.writeFileSync(path.resolve(this.addonFolder, addon.filename), content); + } + + editAddon(idOrFileOrAddon, system) { + const addon = typeof(idOrFileOrAddon) == "string" ? this.addonList.find(c => c.id == idOrFileOrAddon || c.filename == idOrFileOrAddon) : idOrFileOrAddon; + const fullPath = path.resolve(this.addonFolder, addon.filename); + if (typeof(system) == "undefined") system = Settings.get("settings", "addons", "editAction") == "system"; + if (system) return require("electron").shell.openItem(`${fullPath}`); + return this.openDetached(addon); + } + + openDetached(addon) { + const fullPath = path.resolve(this.addonFolder, addon.filename); + const content = fs.readFileSync(fullPath).toString(); + + const editorRef = React.createRef(); + const editor = React.createElement(AddonEditor, { + id: "bd-floating-editor-" + addon.name, + ref: editorRef, + content: content, + save: this.saveAddon.bind(this, addon), + openNative: this.editAddon.bind(this, addon, true), + language: this.language + }); + + FloatingWindowContainer.open({ + onClose: () => { + this.isDetached = false; + }, + onResize: () => { + if (!editorRef || !editorRef.current || !editorRef.current.resize) return; + editorRef.current.resize(); + }, + title: addon.name, + id: content.id, + className: "floating-addon-window", + height: 470, + width: 410, + center: true, + resizable: true, + children: editor, + confirmClose: () => { + if (!editorRef || !editorRef.current) return false; + return editorRef.current.hasUnsavedChanges; + }, + confirmationText: Strings.Addons.confirmationText.format({name: addon.name}) + }); + } } \ No newline at end of file diff --git a/src/modules/pluginmanager.js b/src/modules/pluginmanager.js index b28e7cbc..316d5707 100644 --- a/src/modules/pluginmanager.js +++ b/src/modules/pluginmanager.js @@ -19,6 +19,7 @@ export default new class PluginManager extends AddonManager { get extension() {return ".plugin.js";} get addonFolder() {return path.resolve(Config.dataPath, "plugins");} get prefix() {return "plugin";} + get language() {return "javascript";} constructor() { super(); @@ -37,7 +38,11 @@ export default new class PluginManager extends AddonManager { folder: this.addonFolder, onChange: this.togglePlugin.bind(this), reload: this.reloadPlugin.bind(this), - refreshList: this.updatePluginList.bind(this) + refreshList: this.updatePluginList.bind(this), + saveAddon: this.saveAddon.bind(this), + editAddon: this.editAddon.bind(this), + deleteAddon: this.deleteAddon.bind(this), + prefix: this.prefix })}); return errors; } diff --git a/src/modules/thememanager.js b/src/modules/thememanager.js index bad709c0..4a40ff5a 100644 --- a/src/modules/thememanager.js +++ b/src/modules/thememanager.js @@ -16,6 +16,7 @@ export default new class ThemeManager extends AddonManager { get extension() {return ".theme.css";} get addonFolder() {return path.resolve(Config.dataPath, "themes");} get prefix() {return "theme";} + get language() {return "css";} initialize() { const errors = super.initialize(); @@ -23,7 +24,11 @@ export default new class ThemeManager extends AddonManager { folder: this.addonFolder, onChange: this.toggleTheme.bind(this), reload: this.reloadTheme.bind(this), - refreshList: this.updateThemeList.bind(this) + refreshList: this.updateThemeList.bind(this), + saveAddon: this.saveAddon.bind(this), + editAddon: this.editAddon.bind(this), + deleteAddon: this.deleteAddon.bind(this), + prefix: this.prefix })}); return errors; } diff --git a/src/ui/floating/window.jsx b/src/ui/floating/window.jsx index 4dfc7319..66dfb440 100644 --- a/src/ui/floating/window.jsx +++ b/src/ui/floating/window.jsx @@ -2,6 +2,7 @@ import {React, Strings} from "modules"; import Screen from "../../structs/screen"; import CloseButton from "../icons/close"; +import MaximizeIcon from "../icons/fullscreen"; import Modals from "../modals"; export default class FloatingWindow extends React.Component { @@ -18,6 +19,7 @@ export default class FloatingWindow extends React.Component { this.window = React.createRef(); this.close = this.close.bind(this); + this.maximize = this.maximize.bind(this); this.onDrag = this.onDrag.bind(this); this.onDragStart = this.onDragStart.bind(this); this.onDragStop = this.onDragStop.bind(this); @@ -55,7 +57,6 @@ export default class FloatingWindow extends React.Component { onDrag(e) { const div = this.window.current; - div.style.position = "fixed"; div.style.top = (e.clientY - this.offY) + "px"; div.style.left = (e.clientX - this.offX) + "px"; } @@ -75,6 +76,9 @@ export default class FloatingWindow extends React.Component {
{this.props.title}
+
+ +
@@ -97,11 +101,19 @@ export default class FloatingWindow extends React.Component { if (this.props.close && shouldClose) this.props.close(); } + maximize() { + this.window.current.style.width = "100%"; + this.window.current.style.height = "100%"; + this.window.current.style.top = "20px"; + this.window.current.style.left = "0px"; + if (this.props.onResize) this.props.onResize(); + } + confirmClose() { return new Promise(resolve => { - Modals.showConfirmationModal(Strings.Modals.confirmClose, this.props.confirmationText, { + Modals.showConfirmationModal(Strings.Modals.confirmAction, this.props.confirmationText, { danger: true, - confirmText: "Close", + confirmText: Strings.Modals.close, onConfirm: () => {resolve(true);}, onCancel: () => {resolve(false);} }); diff --git a/src/ui/icons/delete.jsx b/src/ui/icons/delete.jsx new file mode 100644 index 00000000..4dcc5d16 --- /dev/null +++ b/src/ui/icons/delete.jsx @@ -0,0 +1,11 @@ +import {React} from "modules"; + +export default class Delete extends React.Component { + render() { + const size = this.props.size || "24px"; + return + + + ; + } +} \ No newline at end of file diff --git a/src/ui/icons/edit.jsx b/src/ui/icons/edit.jsx index 4d44dcf3..17e407d6 100644 --- a/src/ui/icons/edit.jsx +++ b/src/ui/icons/edit.jsx @@ -3,7 +3,7 @@ import {React} from "modules"; export default class Edit extends React.Component { render() { const size = this.props.size || "24px"; - return + return ; diff --git a/src/ui/icons/fullscreen.jsx b/src/ui/icons/fullscreen.jsx new file mode 100644 index 00000000..06ffc02d --- /dev/null +++ b/src/ui/icons/fullscreen.jsx @@ -0,0 +1,11 @@ +import {React} from "modules"; + +export default class FullScreen extends React.Component { + render() { + const size = this.props.size || "24px"; + return + + + ; + } +} \ No newline at end of file diff --git a/src/ui/misc/addoneditor.jsx b/src/ui/misc/addoneditor.jsx new file mode 100644 index 00000000..348b0801 --- /dev/null +++ b/src/ui/misc/addoneditor.jsx @@ -0,0 +1,65 @@ +import {React, Strings} from "modules"; + +import Editor from "../customcss/editor"; +import Save from "../icons/save"; +import Edit from "../icons/edit"; +import Cog from "../icons/cog"; + +export default class AddonEditor extends React.Component { + + constructor(props) { + super(props); + + this.hasUnsavedChanges = false; + this.onChange = this.onChange.bind(this); + this.save = this.save.bind(this); + this.openNative = this.openNative.bind(this); + this.update = this.update.bind(this); + + this.controls = [ + {label: React.createElement(Save, {size: "18px"}), tooltip: Strings.CustomCSS.save, onClick: this.save}, + {label: React.createElement(Edit, {size: "18px"}), tooltip: Strings.CustomCSS.openNative, onClick: this.openNative}, + {label: React.createElement(Cog, {size: "18px"}), tooltip: Strings.CustomCSS.settings, onClick: "showSettings"} + ]; + } + + update() { + this.forceUpdate(); + } + + updateEditor(newCSS) { + if (!this.editor) return; + this.editor.value = newCSS; + } + + get value() {return this.editor.session.getValue();} + set value(newValue) { + this.editor.setValue(newValue); + } + + showSettings() {return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor);} + resize() {return this.editor.resize();} + + setEditorRef(editor) { + this.editor = editor; + if (this.props.editorRef && typeof(this.props.editorRef.current) !== "undefined") this.props.editorRef.current = editor; + else if (this.props.editorRef) this.props.editorRef = editor; + } + + render() { + return ; + } + + onChange() { + this.hasUnsavedChanges = true; + } + + save(event, content) { + this.hasUnsavedChanges = false; + if (this.props.save) this.props.save(content); + } + + openNative() { + if (this.props.openNative) this.props.openNative(); + } +} \ No newline at end of file diff --git a/src/ui/settings/addoncard.jsx b/src/ui/settings/addoncard.jsx index 776dec6f..b3639a99 100644 --- a/src/ui/settings/addoncard.jsx +++ b/src/ui/settings/addoncard.jsx @@ -1,6 +1,8 @@ import {React, Logger, Strings} from "modules"; import CloseButton from "../icons/close"; import ReloadIcon from "../icons/reload"; +import EditIcon from "../icons/edit"; +import DeleteIcon from "../icons/delete"; import Switch from "./components/switch"; export default class AddonCard extends React.Component { @@ -119,7 +121,9 @@ export default class AddonCard extends React.Component {
{this.buildTitle(name, version, author)}
- {this.props.showReloadIcon && } + {this.props.editAddon &&
} + {this.props.deleteAddon &&
} + {this.props.showReloadIcon &&
}
diff --git a/src/ui/settings/addonlist.jsx b/src/ui/settings/addonlist.jsx index af038233..75cc9a79 100644 --- a/src/ui/settings/addonlist.jsx +++ b/src/ui/settings/addonlist.jsx @@ -1,5 +1,6 @@ -import {React, Settings, Strings} from "modules"; +import {React, Settings, Strings, Events} from "modules"; +import Modals from "../modals"; import SettingsTitle from "./title"; import ReloadIcon from "../icons/reload"; import AddonCard from "./addoncard"; @@ -14,6 +15,21 @@ export default class AddonList extends React.Component { this.sort = this.sort.bind(this); this.reverse = this.reverse.bind(this); this.search = this.search.bind(this); + this.update = this.update.bind(this); + } + + componentDidMount() { + Events.on(`${this.props.prefix}-loaded`, this.update); + Events.on(`${this.props.prefix}-unloaded`, this.update); + } + + componentWillUnmount() { + Events.off(`${this.props.prefix}-loaded`, this.update); + Events.off(`${this.props.prefix}-unloaded`, this.update); + } + + update() { + this.forceUpdate(); } reload() { @@ -89,9 +105,31 @@ export default class AddonList extends React.Component { } const hasSettings = addon.type && typeof(addon.plugin.getSettingsPanel) === "function"; const getSettings = hasSettings && addon.plugin.getSettingsPanel.bind(addon.plugin); - return ; + return ; })}
]; } + + editAddon(id) { + if (this.props.editAddon) this.props.editAddon(id); + } + + async deleteAddon(id) { + const addon = this.props.addonList.find(a => a.id == id); + const shouldDelete = await this.confirmDelete(addon); + if (!shouldDelete) return; + if (this.props.deleteAddon) this.props.deleteAddon(addon); + } + + confirmDelete(addon) { + return new Promise(resolve => { + Modals.showConfirmationModal(Strings.Modals.confirmAction, Strings.Addons.confirmDelete.format({name: addon.name}), { + danger: true, + confirmText: Strings.Addons.deleteAddon, + onConfirm: () => {resolve(true);}, + onCancel: () => {resolve(false);} + }); + }); + } } \ No newline at end of file