diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index ca0e6ad997..f79100f563 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -2,6 +2,8 @@
"recommendations": [
"gbasood.byond-dm-language-support",
"platymuus.dm-langclient",
- "EditorConfig.EditorConfig"
+ "EditorConfig.EditorConfig",
+ "arcanis.vscode-zipfs",
+ "dbaeumer.vscode-eslint"
]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000..f95b8f7cc6
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,18 @@
+{
+ "eslint.nodePath": "tgui/.yarn/sdks",
+ "eslint.workingDirectories": [
+ "./tgui"
+ ],
+ "search.exclude": {
+ "tgui/.yarn": true,
+ "tgui/.pnp.*": true
+ },
+ "workbench.editorAssociations": [
+ {
+ "filenamePattern": "*.dmi",
+ "viewType": "imagePreview.previewEditor"
+ }
+ ],
+ "files.eol": "\n",
+ "gitlens.advanced.blame.customArguments": ["-w"]
+}
diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm
index 23583e8b53..f24a46e33d 100644
--- a/code/modules/tgui/tgui_window.dm
+++ b/code/modules/tgui/tgui_window.dm
@@ -71,21 +71,21 @@
// Generate page html
var/html = SStgui.basehtml
html = replacetextEx(html, "\[tgui:windowId]", id)
- // Process inline assets
- var/inline_styles = ""
- var/inline_scripts = ""
+ // Inject inline assets
+ var/inline_assets_str = ""
for(var/datum/asset/asset in inline_assets)
var/mappings = asset.get_url_mappings()
for(var/name in mappings)
var/url = mappings[name]
- // Not urlencoding since asset strings are considered safe
+ // Not encoding since asset strings are considered safe
if(copytext(name, -4) == ".css")
- inline_styles += "\n"
+ inline_assets_str += "Byond.loadCss('[url]', true);\n"
else if(copytext(name, -3) == ".js")
- inline_scripts += "\n"
+ inline_assets_str += "Byond.loadJs('[url]', true);\n"
asset.send(client)
- html = replacetextEx(html, "\n", inline_styles)
- html = replacetextEx(html, "\n", inline_scripts)
+ if(length(inline_assets_str))
+ inline_assets_str = "\n"
+ html = replacetextEx(html, "\n", inline_assets_str)
// Inject custom HTML
html = replacetextEx(html, "\n", inline_html)
// Open the window
diff --git a/tgui/.yarn/sdks/eslint/bin/eslint.js b/tgui/.yarn/sdks/eslint/bin/eslint.js
new file mode 100644
index 0000000000..c5d4c64928
--- /dev/null
+++ b/tgui/.yarn/sdks/eslint/bin/eslint.js
@@ -0,0 +1,20 @@
+#!/usr/bin/env node
+
+const {existsSync} = require(`fs`);
+const {createRequire, createRequireFromPath} = require(`module`);
+const {resolve, dirname} = require(`path`);
+
+const relPnpApiPath = "../../../../.pnp.js";
+
+const absPnpApiPath = resolve(__dirname, relPnpApiPath);
+const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
+
+if (existsSync(absPnpApiPath)) {
+ if (!process.versions.pnp) {
+ // Setup the environment to be able to require eslint/bin/eslint.js
+ require(absPnpApiPath).setup();
+ }
+}
+
+// Defer to the real eslint/bin/eslint.js your application uses
+module.exports = absRequire(`eslint/bin/eslint.js`);
diff --git a/tgui/.yarn/sdks/eslint/package.json b/tgui/.yarn/sdks/eslint/package.json
new file mode 100644
index 0000000000..620b0a937a
--- /dev/null
+++ b/tgui/.yarn/sdks/eslint/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "eslint",
+ "version": "7.4.0-pnpify",
+ "main": "./lib/api.js",
+ "type": "commonjs"
+}
diff --git a/tgui/.yarn/sdks/integrations.yml b/tgui/.yarn/sdks/integrations.yml
new file mode 100644
index 0000000000..76ed42ba94
--- /dev/null
+++ b/tgui/.yarn/sdks/integrations.yml
@@ -0,0 +1,5 @@
+# This file is automatically generated by PnPify.
+# Manual changes will be lost!
+
+integrations:
+ - vscode
diff --git a/tgui/global.d.ts b/tgui/global.d.ts
index 31fc6a1057..594ce7f9d4 100644
--- a/tgui/global.d.ts
+++ b/tgui/global.d.ts
@@ -97,11 +97,21 @@ interface ByondType {
winset(id: string, propName: string, propValue: any): void;
/**
- * Parses BYOND JSON
+ * Parses BYOND JSON.
*
* Uses a special encoding to preverse Infinity and NaN.
*/
parseJson(text: string): any;
+
+ /**
+ * Loads a stylesheet into the document.
+ */
+ loadCss(url: string): void;
+
+ /**
+ * Loads a script into the document.
+ */
+ loadJs(url: string): void;
}
declare const Byond: ByondType;
diff --git a/tgui/packages/tgui-panel/styles/main.scss b/tgui/packages/tgui-panel/styles/main.scss
index 86a2986920..6f090392ab 100644
--- a/tgui/packages/tgui-panel/styles/main.scss
+++ b/tgui/packages/tgui-panel/styles/main.scss
@@ -30,7 +30,6 @@
@include meta.load-css('~tgui/styles/components/Dimmer.scss');
@include meta.load-css('~tgui/styles/components/Divider.scss');
@include meta.load-css('~tgui/styles/components/Dropdown.scss');
-@include meta.load-css('~tgui/styles/components/FatalError.scss');
@include meta.load-css('~tgui/styles/components/Flex.scss');
@include meta.load-css('~tgui/styles/components/Input.scss');
@include meta.load-css('~tgui/styles/components/Knob.scss');
diff --git a/tgui/packages/tgui/assets.js b/tgui/packages/tgui/assets.js
index 2f2e2ba543..db6dd635c0 100644
--- a/tgui/packages/tgui/assets.js
+++ b/tgui/packages/tgui/assets.js
@@ -4,68 +4,9 @@
* @license MIT
*/
-import { loadCSS as fgLoadCss } from 'fg-loadcss';
-import { createLogger } from './logging';
-
-const logger = createLogger('assets');
-
const EXCLUDED_PATTERNS = [/v4shim/i];
-const RETRY_ATTEMPTS = 5;
-const RETRY_INTERVAL = 3000;
-
-const loadedStyleSheetByUrl = {};
const loadedMappings = {};
-export const loadStyleSheet = (url, attempt = 1) => {
- if (loadedStyleSheetByUrl[url]) {
- return;
- }
- loadedStyleSheetByUrl[url] = true;
- logger.log(`loading stylesheet '${url}'`);
- /** @type {HTMLLinkElement} */
- let node = fgLoadCss(url);
- node.addEventListener('load', () => {
- if (!isStyleSheetReallyLoaded(node, url)) {
- node.parentNode.removeChild(node);
- node = null;
- loadedStyleSheetByUrl[url] = null;
- if (attempt >= RETRY_ATTEMPTS) {
- logger.error(`Error: Failed to load the stylesheet `
- + `'${url}' after ${RETRY_ATTEMPTS} attempts.\nIt was either `
- + `not found, or you're trying to load an empty stylesheet `
- + `that has no CSS rules in it.`);
- return;
- }
- setTimeout(() => loadStyleSheet(url, attempt + 1), RETRY_INTERVAL);
- return;
- }
- });
-};
-
-/**
- * Checks whether the stylesheet was registered in the DOM
- * and is not empty.
- */
-const isStyleSheetReallyLoaded = (node, url) => {
- // Method #1 (works on IE10+)
- const styleSheet = node.sheet;
- if (styleSheet) {
- return styleSheet.rules.length > 0;
- }
- // Method #2
- const styleSheets = document.styleSheets;
- const len = styleSheets.length;
- for (let i = 0; i < len; i++) {
- const styleSheet = styleSheets[i];
- if (styleSheet.href.includes(url)) {
- return styleSheet.rules.length > 0;
- }
- }
- // All methods failed
- logger.warn(`Warning: stylesheet '${url}' was not found in the DOM`);
- return false;
-};
-
export const resolveAsset = name => (
loadedMappings[name] || name
);
@@ -73,7 +14,7 @@ export const resolveAsset = name => (
export const assetMiddleware = store => next => action => {
const { type, payload } = action;
if (type === 'asset/stylesheet') {
- loadStyleSheet(payload);
+ Byond.loadCss(payload);
return;
}
if (type === 'asset/mappings') {
@@ -86,7 +27,10 @@ export const assetMiddleware = store => next => action => {
const ext = name.split('.').pop();
loadedMappings[name] = url;
if (ext === 'css') {
- loadStyleSheet(url);
+ Byond.loadCss(url);
+ }
+ if (ext === 'js') {
+ Byond.loadJs(url);
}
}
return;
diff --git a/tgui/packages/tgui/backend.js b/tgui/packages/tgui/backend.js
index 1cfd4294f6..06f45ad55e 100644
--- a/tgui/packages/tgui/backend.js
+++ b/tgui/packages/tgui/backend.js
@@ -189,6 +189,9 @@ export const backendMiddleware = store => {
// Resume on incoming update
if (type === 'backend/update' && suspended) {
+ // Show the payload
+ logger.log('backend/update', payload);
+ // Signal renderer that we have resumed
resumeRenderer();
// Setup drag
setupDrag();
diff --git a/tgui/packages/tgui/debug/middleware.js b/tgui/packages/tgui/debug/middleware.js
index 2fa3ed42e6..6c11d32e0f 100644
--- a/tgui/packages/tgui/debug/middleware.js
+++ b/tgui/packages/tgui/debug/middleware.js
@@ -24,7 +24,7 @@ export const debugMiddleware = store => {
if (key.code === KEY_F12) {
store.dispatch(toggleKitchenSink());
}
- if (key.ctrl && key.shift && key.code === KEY_BACKSPACE) {
+ if (key.ctrl && key.alt && key.code === KEY_BACKSPACE) {
// NOTE: We need to call this in a timeout, because we need a clean
// stack in order for this to be a fatal error.
setTimeout(() => {
diff --git a/tgui/packages/tgui/package.json b/tgui/packages/tgui/package.json
index 4597fedab1..15e2974f9b 100644
--- a/tgui/packages/tgui/package.json
+++ b/tgui/packages/tgui/package.json
@@ -4,8 +4,7 @@
"version": "4.2.0",
"dependencies": {
"common": "workspace:*",
- "dompurify": "^2.0.11",
- "fg-loadcss": "^2.1.0",
+ "dompurify": "^2.0.12",
"inferno": "^7.4.2",
"inferno-vnode-flags": "^7.4.2",
"marked": "^1.1.0",
diff --git a/tgui/packages/tgui/styles/components/FatalError.scss b/tgui/packages/tgui/styles/components/FatalError.scss
deleted file mode 100644
index 293b7f0285..0000000000
--- a/tgui/packages/tgui/styles/components/FatalError.scss
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Copyright (c) 2020 Aleksej Komarov
- * SPDX-License-Identifier: MIT
- */
-
-.FatalError {
- display: block !important;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- padding: 12px;
- font-size: 12px;
- font-family: Consolas, monospace;
- color: #ffffff;
- background-color: #0000dd;
- z-index: 1000;
- overflow: hidden;
- text-align: center;
-}
-
-.FatalError__logo {
- display: inline-block;
- text-align: left;
- font-size: 10px;
- line-height: 8px;
- position: relative;
- margin-top: 12px;
- top: 0;
- left: 0;
- animation:
- FatalError__rainbow 2s linear infinite alternate,
- FatalError__shadow 4s linear infinite alternate,
- FatalError__tfmX 3s infinite alternate,
- FatalError__tfmY 4s infinite alternate;
- white-space: pre-wrap;
- word-break: break-all;
-}
-
-.FatalError__header {
- margin-top: 12px;
-}
-
-.FatalError__stack {
- text-align: left;
- white-space: pre-wrap;
- word-break: break-all;
- margin-top: 24px;
- margin-bottom: 24px;
-}
-
-.FatalError__footer {
- margin-bottom: 24px;
-}
-
-@keyframes FatalError__rainbow {
- 0% {
- color: #ff0;
- }
- 50% {
- color: #0ff;
- }
- 100% {
- color: #f0f;
- }
-}
-
-@keyframes FatalError__shadow {
- 0% {
- left: -2px;
- text-shadow: 4px 0 #f0f;
- }
- 50% {
- left: 0px;
- text-shadow: 0px 0 #0ff;
- }
- 100% {
- left: 2px;
- text-shadow: -4px 0 #ff0;
- }
-}
-
-@keyframes FatalError__tfmX {
- 0% {
- left: 15px;
- }
- 100% {
- left: -15px;
- }
-}
-
-@keyframes FatalError__tfmY {
- 100% {
- top: -15px;
- }
-}
diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss
index 060291bce9..2b9d31766d 100644
--- a/tgui/packages/tgui/styles/main.scss
+++ b/tgui/packages/tgui/styles/main.scss
@@ -23,7 +23,6 @@
@include meta.load-css('./components/Dimmer.scss');
@include meta.load-css('./components/Divider.scss');
@include meta.load-css('./components/Dropdown.scss');
-@include meta.load-css('./components/FatalError.scss');
@include meta.load-css('./components/Flex.scss');
@include meta.load-css('./components/Input.scss');
@include meta.load-css('./components/Knob.scss');
diff --git a/tgui/public/tgui-common.chunk.js b/tgui/public/tgui-common.chunk.js
index fabad4042f..974d43f7a5 100644
--- a/tgui/public/tgui-common.chunk.js
+++ b/tgui/public/tgui-common.chunk.js
@@ -1 +1 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[function(e,t,n){"use strict";t.__esModule=!0;var r=n(448);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(t[e]=r[e])}))},function(e,t,n){"use strict";t.__esModule=!0,t.TimeDisplay=t.Tooltip=t.Tabs=t.TextArea=t.Table=t.Slider=t.Section=t.ProgressBar=t.NumberInput=t.NoticeBox=t.Modal=t.LabeledList=t.LabeledControls=t.Knob=t.Input=t.Icon=t.Grid=t.Flex=t.Dropdown=t.DraggableControl=t.Divider=t.Dimmer=t.ColorBox=t.Collapsible=t.Chart=t.ByondUi=t.Button=t.Box=t.BlockQuote=t.AnimatedNumber=void 0;var r=n(138);t.AnimatedNumber=r.AnimatedNumber;var o=n(464);t.BlockQuote=o.BlockQuote;var i=n(17);t.Box=i.Box;var a=n(191);t.Button=a.Button;var c=n(466);t.ByondUi=c.ByondUi;var u=n(468);t.Chart=u.Chart;var s=n(469);t.Collapsible=s.Collapsible;var l=n(470);t.ColorBox=l.ColorBox;var f=n(193);t.Dimmer=f.Dimmer;var d=n(194);t.Divider=d.Divider;var p=n(139);t.DraggableControl=p.DraggableControl;var h=n(471);t.Dropdown=h.Dropdown;var g=n(195);t.Flex=g.Flex;var v=n(472);t.Grid=v.Grid;var m=n(104);t.Icon=m.Icon;var y=n(197);t.Input=y.Input;var b=n(473);t.Knob=b.Knob;var x=n(474);t.LabeledControls=x.LabeledControls;var w=n(198);t.LabeledList=w.LabeledList;var _=n(475);t.Modal=_.Modal;var E=n(476);t.NoticeBox=E.NoticeBox;var k=n(140);t.NumberInput=k.NumberInput;var S=n(477);t.ProgressBar=S.ProgressBar;var C=n(478);t.Section=C.Section;var N=n(479);t.Slider=N.Slider;var A=n(196);t.Table=A.Table;var T=n(480);t.TextArea=T.TextArea;var O=n(481);t.Tabs=O.Tabs;var I=n(192);t.Tooltip=I.Tooltip;var M=n(482);t.TimeDisplay=M.TimeDisplay},function(e,t,n){"use strict";(function(e){t.__esModule=!0,t.useSharedState=t.useLocalState=t.useBackend=t.selectBackend=t.sendAct=t.sendMessage=t.backendMiddleware=t.backendReducer=t.backendSuspendSuccess=t.backendSuspendStart=t.backendSetSharedState=t.backendUpdate=void 0;var r=n(100),o=n(188),i=n(189),a=n(25),c=n(136);var u=(0,a.createLogger)("backend"),s=function(e){return{type:"backend/update",payload:e}};t.backendUpdate=s;var l=function(e,t){return{type:"backend/setSharedState",payload:{key:e,nextState:t}}};t.backendSetSharedState=l;t.backendSuspendStart=function(){return{type:"backend/suspendStart"}};var f=function(){return{type:"backend/suspendSuccess",payload:{timestamp:Date.now()}}};t.backendSuspendSuccess=f;var d={config:{},data:{},shared:{},suspended:Date.now(),suspending:!1};t.backendReducer=function(e,t){void 0===e&&(e=d);var n=t.type,r=t.payload;if("backend/update"===n){var o=Object.assign({},e.config,r.config),i=Object.assign({},e.data,r.static_data,r.data),a=Object.assign({},e.shared);if(r.shared)for(var c=0,u=Object.keys(r.shared);c "+e+"
/gi,"\n").replace(/<\/?[a-z0-9-_]+[^>]*>/gi,"").replace(/&(nbsp|amp|quot|lt|gt|apos);/g,(function(e,n){return t[n]})).replace(/?([0-9]+);/gi,(function(e,t){var n=parseInt(t,10);return String.fromCharCode(n)})).replace(/?([0-9a-f]+);/gi,(function(e,t){var n=parseInt(t,16);return String.fromCharCode(n)}))};t.buildQueryString=function(e){return Object.keys(e).map((function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])})).join("&")}},function(e,t,n){"use strict";var r={}.hasOwnProperty;e.exports=function(e,t){return r.call(e,t)}},function(e,t,n){"use strict";var r=n(53),o=n(66),i=n(18),a=n(12),c=n(72),u=[].push,s=function(e){var t=1==e,n=2==e,s=3==e,l=4==e,f=6==e,d=5==e||f;return function(p,h,g,v){for(var m,y,b=i(p),x=o(b),w=r(h,g,3),_=a(x.length),E=0,k=v||c,S=t?k(p,_):n?k(p,0):undefined;_>E;E++)if((d||E in x)&&(y=w(m=x[E],E,b),e))if(t)S[E]=y;else if(y)switch(e){case 3:return!0;case 5:return m;case 6:return E;case 2:u.call(S,m)}else if(l)return!1;return f?-1:s||l?l:S}};e.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6)}},function(e,t,n){"use strict";t.__esModule=!0,t.useSelector=t.useDispatch=t.createAction=t.combineReducers=t.applyMiddleware=t.createStore=void 0;var r=n(30);function o(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nu||n!=n?l*Infinity:l*n}},function(e,t,n){"use strict";var r=n(4),o=Math.hypot,i=Math.abs,a=Math.sqrt;r({target:"Math",stat:!0,forced:!!o&&o(Infinity,NaN)!==Infinity},{hypot:function(e,t){for(var n,r,o=0,c=0,u=arguments.length,s=0;c0?(r=n/s)*r:n;return s===Infinity?Infinity:s*a(o)}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=Math.imul;r({target:"Math",stat:!0,forced:o((function(){return-5!=i(4294967295,5)||2!=i.length}))},{imul:function(e,t){var n=+e,r=+t,o=65535&n,i=65535&r;return 0|o*i+((65535&n>>>16)*i+o*(65535&r>>>16)<<16>>>0)}})},function(e,t,n){"use strict";var r=n(4),o=Math.log,i=Math.LOG10E;r({target:"Math",stat:!0},{log10:function(e){return o(e)*i}})},function(e,t,n){"use strict";n(4)({target:"Math",stat:!0},{log1p:n(171)})},function(e,t,n){"use strict";var r=n(4),o=Math.log,i=Math.LN2;r({target:"Math",stat:!0},{log2:function(e){return o(e)/i}})},function(e,t,n){"use strict";n(4)({target:"Math",stat:!0},{sign:n(126)})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(91),a=Math.abs,c=Math.exp,u=Math.E;r({target:"Math",stat:!0,forced:o((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(e){return a(e=+e)<1?(i(e)-i(-e))/2:(c(e-1)-c(-e-1))*(u/2)}})},function(e,t,n){"use strict";var r=n(4),o=n(91),i=Math.exp;r({target:"Math",stat:!0},{tanh:function(e){var t=o(e=+e),n=o(-e);return t==Infinity?1:n==Infinity?-1:(t-n)/(i(e)+i(-e))}})},function(e,t,n){"use strict";n(49)(Math,"Math",!0)},function(e,t,n){"use strict";var r=n(4),o=Math.ceil,i=Math.floor;r({target:"Math",stat:!0},{trunc:function(e){return(e>0?i:o)(e)}})},function(e,t,n){"use strict";var r=n(10),o=n(7),i=n(70),a=n(26),c=n(20),u=n(37),s=n(90),l=n(40),f=n(5),d=n(48),p=n(52).f,h=n(23).f,g=n(16).f,v=n(62).trim,m=o.Number,y=m.prototype,b="Number"==u(d(y)),x=function(e){var t,n,r,o,i,a,c,u,s=l(e,!1);if("string"==typeof s&&s.length>2)if(43===(t=(s=v(s)).charCodeAt(0))||45===t){if(88===(n=s.charCodeAt(2))||120===n)return NaN}else if(48===t){switch(s.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+s}for(a=(i=s.slice(2)).length,c=0;co)return NaN;return parseInt(i,r)}return+s};if(i("Number",!m(" 0o1")||!m("0b1")||m("+0x1"))){for(var w,_=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof _&&(b?f((function(){y.valueOf.call(n)})):"Number"!=u(n))?s(new m(x(t)),n,_):x(t)},E=r?p(m):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),k=0;E.length>k;k++)c(m,w=E[k])&&!c(_,w)&&g(_,w,h(m,w));_.prototype=y,y.constructor=_,a(o,"Number",_)}},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{isFinite:n(308)})},function(e,t,n){"use strict";var r=n(7).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&r(e)}},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{isInteger:n(172)})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},function(e,t,n){"use strict";var r=n(4),o=n(172),i=Math.abs;r({target:"Number",stat:!0},{isSafeInteger:function(e){return o(e)&&i(e)<=9007199254740991}})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(e,t,n){"use strict";var r=n(4),o=n(315);r({target:"Number",stat:!0,forced:Number.parseFloat!=o},{parseFloat:o})},function(e,t,n){"use strict";var r=n(7),o=n(62).trim,i=n(92),a=r.parseFloat,c=1/a(i+"-0")!=-Infinity;e.exports=c?function(e){var t=o(String(e)),n=a(t);return 0===n&&"-"==t.charAt(0)?-0:n}:a},function(e,t,n){"use strict";var r=n(4),o=n(173);r({target:"Number",stat:!0,forced:Number.parseInt!=o},{parseInt:o})},function(e,t,n){"use strict";var r=n(4),o=n(38),i=n(318),a=n(125),c=n(5),u=1..toFixed,s=Math.floor,l=function f(e,t,n){return 0===t?n:t%2==1?f(e,t-1,n*e):f(e*e,t/2,n)};r({target:"Number",proto:!0,forced:u&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!c((function(){u.call({})}))},{toFixed:function(e){var t,n,r,c,u=i(this),f=o(e),d=[0,0,0,0,0,0],p="",h="0",g=function(e,t){for(var n=-1,r=t;++n<6;)r+=e*d[n],d[n]=r%1e7,r=s(r/1e7)},v=function(e){for(var t=6,n=0;--t>=0;)n+=d[t],d[t]=s(n/e),n=n%e*1e7},m=function(){for(var e=6,t="";--e>=0;)if(""!==t||0===e||0!==d[e]){var n=String(d[e]);t=""===t?n:t+a.call("0",7-n.length)+n}return t};if(f<0||f>20)throw RangeError("Incorrect fraction digits");if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return String(u);if(u<0&&(p="-",u=-u),u>1e-21)if(n=(t=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}(u*l(2,69,1))-69)<0?u*l(2,-t,1):u/l(2,t,1),n*=4503599627370496,(t=52-t)>0){for(g(0,n),r=f;r>=7;)g(1e7,0),r-=7;for(g(l(10,r,1),0),r=t-1;r>=23;)v(1<<23),r-=23;v(1<
\n":"'+(n?e:Y(e,!0))+"
\n"},t.blockquote=function(e){return""+(n?e:Y(e,!0))+"\n"+e+"
\n"},t.html=function(e){return e},t.heading=function(e,t,n,r){return this.options.headerIds?"
\n":"
\n"},t.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+""+r+">\n"},t.listitem=function(e){return"\n\n"+e+"\n"+t+"
\n"},t.tablerow=function(e){return"\n"+e+" \n"},t.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+""+n+">\n"},t.strong=function(e){return""+e+""},t.em=function(e){return""+e+""},t.codespan=function(e){return""+e+""},t.br=function(){return this.options.xhtml?"
":"
"},t.del=function(e){return""+e+""},t.link=function(e,t,n){if(null===(e=z(this.options.sanitize,this.options.baseUrl,e)))return n;var r='"+n+""},t.image=function(e,t,n){if(null===(e=z(this.options.sanitize,this.options.baseUrl,e)))return n;var r='":">"},t.text=function(e){return e},e}(),$=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,n){return""+n},t.image=function(e,t,n){return""+n},t.br=function(){return""},e}(),H=function(){function e(){this.seen={}}return e.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var n=t;do{this.seen[n]++,t=n+"-"+this.seen[n]}while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},e}(),W=r.defaults,q=w.unescape,G=function(){function e(e){this.options=e||W,this.options.renderer=this.options.renderer||new U,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new $,this.slugger=new H}e.parse=function(t,n){return new e(n).parse(t)};var t=e.prototype;return t.parse=function(e,t){void 0===t&&(t=!0);var n,r,o,i,a,c,u,s,l,f,d,p,h,g,v,m,y,b,x="",w=e.length;for(n=0;n
"+Q(u.message+"",!0)+"";throw u}}return ne.options=ne.setOptions=function(e){return X(ne.defaults,e),ee(ne.defaults),ne},ne.getDefaults=J,ne.defaults=te,ne.use=function(e){var t=X({},e);if(e.renderer&&function(){var n=ne.defaults.renderer||new U,r=function(t){var r=n[t];n[t]=function(){for(var o=arguments.length,i=new Array(o),a=0;a
'+(n?e:Y(e,!0))+"\n":""+(n?e:Y(e,!0))+"\n"},t.blockquote=function(e){return"\n"+e+"\n"},t.html=function(e){return e},t.heading=function(e,t,n,r){return this.options.headerIds?"
"+e+"
\n"},t.table=function(e,t){return t&&(t=""+t+""),""+e+""},t.br=function(){return this.options.xhtml?""+Q(u.message+"",!0)+"";throw u}}return ne.options=ne.setOptions=function(e){return X(ne.defaults,e),ee(ne.defaults),ne},ne.getDefaults=J,ne.defaults=te,ne.use=function(e){var t=X({},e);if(e.renderer&&function(){var n=ne.defaults.renderer||new U,r=function(t){var r=n[t];n[t]=function(){for(var o=arguments.length,i=new Array(o),a=0;a