Index: frontend/node_modules/es-abstract/helpers/CharSet.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/CharSet.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/CharSet.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,130 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bound');
+var hasOwn = require('hasown');
+
+var caseFolding = require('./caseFolding.json');
+var IsArray = require('./IsArray');
+var isLeadingSurrogate = require('./isLeadingSurrogate');
+var isTrailingSurrogate = require('./isTrailingSurrogate');
+
+var $charCodeAt = callBound('%String.prototype.charCodeAt%');
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+
+/* eslint func-style: 0  */
+
+function CharSet(test, yieldCh) {
+	if (typeof test !== 'function') {
+		throw new $TypeError('Assertion failed: `test` must be a function');
+	}
+	if (typeof yieldCh !== 'function') {
+		throw new $TypeError('Assertion failed: `yield` must be a function');
+	}
+	this.test = test;
+	this.yield = yieldCh;
+}
+CharSet.prototype.count = function () {
+	var count = 0;
+	this.yield(function () { count += 1; });
+	return count;
+};
+
+function testCodeUnits(CharSetElement) {
+	if (typeof CharSetElement !== 'string') {
+		throw new $TypeError('Assertion failed: `CharSetElement` must be a string');
+	}
+	return CharSetElement.length !== 1;
+}
+function yieldCodeUnits(emit) {
+	for (var i = 0; i <= 0xDFFF; i += 1) {
+		emit($fromCharCode(i));
+	}
+}
+
+function testCodePoints(CharSetElement) {
+	if (typeof CharSetElement !== 'string') {
+		throw new $TypeError('Assertion failed: `CharSetElement` must be a string');
+	}
+
+	if (CharSetElement.length === 1) {
+		return true;
+	}
+	if (CharSetElement.length === 2) {
+		var hi = $charCodeAt(CharSetElement, 0);
+		var lo = $charCodeAt(CharSetElement, 1);
+		return isLeadingSurrogate(hi) && isTrailingSurrogate(lo);
+	}
+
+	return false;
+}
+
+function yieldCodePoints(emit) {
+	for (var i = 0; i <= 0xDFFF; i += 1) {
+		emit($fromCharCode(i));
+	}
+	for (var u = 0x10000; u <= 0x10FFFF; u += 1) {
+		var cp = u - 0x10000;
+		var high = (cp >> 10) + 0xD800;
+		var low = (cp & 0x3FF) + 0xDC00;
+		emit($fromCharCode(high, low));
+	}
+}
+
+function charsToMap(chars) {
+	if (!IsArray(chars)) {
+		throw new $TypeError('Assertion failed: `chars` must be an array');
+	}
+
+	var map = { __proto__: null };
+	for (var i = 0; i < chars.length; i += 1) {
+		var char = chars[i];
+		if (typeof char !== 'string' || (char.length !== 1 && char.length !== 2)) {
+			throw new $TypeError('Assertion failed: `chars` must be an array of strings of length 1');
+		}
+		map[char] = true;
+	}
+	return map;
+}
+
+module.exports = {
+	CharSet: CharSet,
+	from: function from(chars) {
+		var map = charsToMap(chars);
+		return new CharSet(
+			function test(CharSetElement) {
+				return hasOwn(map, CharSetElement);
+			},
+			function yieldChar(emit) {
+				// eslint-disable-next-line no-restricted-syntax
+				for (var k in map) {
+					if (hasOwn(map, k)) {
+						emit(k);
+					}
+				}
+			}
+		);
+	},
+	getCodeUnits: function () {
+		return new CharSet(testCodeUnits, yieldCodeUnits);
+	},
+	getCodePoints: function () {
+		return new CharSet(testCodePoints, yieldCodePoints);
+	},
+	getNonSimpleCaseFoldingCodePoints: function () {
+		return new CharSet(
+			function test(CharSetElement) {
+				return testCodePoints(CharSetElement) && !hasOwn(caseFolding.S, CharSetElement);
+			},
+			function yieldChar(emit) {
+				yieldCodePoints(function (CharSetElement) {
+					if (!hasOwn(caseFolding.S, CharSetElement)) {
+						emit(CharSetElement);
+					}
+				});
+			}
+		);
+	}
+};
Index: frontend/node_modules/es-abstract/helpers/DefineOwnProperty.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/DefineOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/DefineOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,53 @@
+'use strict';
+
+var hasPropertyDescriptors = require('has-property-descriptors');
+
+var $defineProperty = require('es-define-property');
+
+var hasArrayLengthDefineBug = hasPropertyDescriptors.hasArrayLengthDefineBug();
+
+// eslint-disable-next-line global-require
+var isArray = hasArrayLengthDefineBug && require('../helpers/IsArray');
+
+var callBound = require('call-bound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+// eslint-disable-next-line max-params
+module.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {
+	if (!$defineProperty) {
+		if (!IsDataDescriptor(desc)) {
+			// ES3 does not support getters/setters
+			return false;
+		}
+		if (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {
+			return false;
+		}
+
+		// fallback for ES3
+		if (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {
+			// a non-enumerable existing property
+			return false;
+		}
+
+		// property does not exist at all, or exists but is enumerable
+		var V = desc['[[Value]]'];
+		// eslint-disable-next-line no-param-reassign
+		O[P] = V; // will use [[Define]]
+		return SameValue(O[P], V);
+	}
+	if (
+		hasArrayLengthDefineBug
+		&& P === 'length'
+		&& '[[Value]]' in desc
+		&& isArray(O)
+		&& O.length !== desc['[[Value]]']
+	) {
+		// eslint-disable-next-line no-param-reassign
+		O.length = desc['[[Value]]'];
+		return O.length === desc['[[Value]]'];
+	}
+
+	$defineProperty(O, P, FromPropertyDescriptor(desc));
+	return true;
+};
Index: frontend/node_modules/es-abstract/helpers/IsArray.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/IsArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/IsArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+
+// eslint-disable-next-line global-require
+var toStr = !$Array.isArray && require('call-bound')('Object.prototype.toString');
+
+module.exports = $Array.isArray || function IsArray(argument) {
+	return toStr(argument) === '[object Array]';
+};
Index: frontend/node_modules/es-abstract/helpers/OwnPropertyKeys.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/OwnPropertyKeys.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/OwnPropertyKeys.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO, semver-major: remove
+module.exports = require('own-keys');
Index: frontend/node_modules/es-abstract/helpers/assertRecord.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/assertRecord.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/assertRecord.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,32 @@
+'use strict';
+
+// TODO, semver-major: delete this
+
+var $TypeError = require('es-errors/type');
+var $SyntaxError = require('es-errors/syntax');
+
+var isMatchRecord = require('./records/match-record');
+var isPropertyDescriptor = require('./records/property-descriptor');
+var isIteratorRecord = require('./records/iterator-record-2023');
+var isPromiseCapabilityRecord = require('./records/promise-capability-record');
+var isAsyncGeneratorRequestRecord = require('./records/async-generator-request-record');
+var isRegExpRecord = require('./records/regexp-record');
+
+var predicates = {
+	'Property Descriptor': isPropertyDescriptor,
+	'Match Record': isMatchRecord,
+	'Iterator Record': isIteratorRecord,
+	'PromiseCapability Record': isPromiseCapabilityRecord,
+	'AsyncGeneratorRequest Record': isAsyncGeneratorRequestRecord,
+	'RegExp Record': isRegExpRecord
+};
+
+module.exports = function assertRecord(Type, recordType, argumentName, value) {
+	var predicate = predicates[recordType];
+	if (typeof predicate !== 'function') {
+		throw new $SyntaxError('unknown record type: ' + recordType);
+	}
+	if (!predicate(value)) {
+		throw new $TypeError(argumentName + ' must be a ' + recordType);
+	}
+};
Index: frontend/node_modules/es-abstract/helpers/assign.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/assign.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/assign.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var hasOwn = require('hasown');
+
+var $assign = GetIntrinsic('%Object.assign%', true);
+
+module.exports = function assign(target, source) {
+	if ($assign) {
+		return $assign(target, source);
+	}
+
+	// eslint-disable-next-line no-restricted-syntax
+	for (var key in source) {
+		if (hasOwn(source, key)) {
+			// eslint-disable-next-line no-param-reassign
+			target[key] = source[key];
+		}
+	}
+	return target;
+};
Index: frontend/node_modules/es-abstract/helpers/bytesAsFloat16.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/bytesAsFloat16.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/bytesAsFloat16.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,47 @@
+'use strict';
+
+var $pow = require('math-intrinsics/pow');
+
+module.exports = function bytesAsFloat32(rawBytes) {
+	// return new $Float16Array(new $Uint8Array(rawBytes).buffer)[0];
+	/*
+        Let value be the byte elements of rawBytes concatenated and interpreted as a little-endian bit string encoding of an IEEE 754-2019 binary16 value.
+        If value is a NaN, return NaN.
+        Return the Number value that corresponds to value.
+    */
+
+	var bits = (rawBytes[1] << 8) | rawBytes[0];
+
+	// extract sign, exponent, mantissa
+	var sign = bits & 0x8000 ? -1 : 1;
+	var exponent = (bits & 0x7C00) >> 10;
+	var mantissa = bits & 0x03FF;
+
+	// zero (±0)
+	if (exponent === 0 && mantissa === 0) {
+		return sign === 1 ? 0 : -0;
+	}
+
+	// infinities
+	if (exponent === 0x1F && mantissa === 0) {
+		return sign === 1 ? Infinity : -Infinity;
+	}
+
+	// NaN
+	if (exponent === 0x1F && mantissa !== 0) {
+		return NaN;
+	}
+
+	// remove bias (15)
+	exponent -= 15;
+
+	// subnormals
+	if (exponent === -15) {
+		// value = sign * (mantissa) * 2^(1-bias-10) = mantissa * 2^(-14-10)
+		return sign * mantissa * $pow(2, -24);
+	}
+
+	// normals
+	// value = sign * (1 + mantissa/2^10) * 2^exponent
+	return sign * (1 + (mantissa * $pow(2, -10))) * $pow(2, exponent);
+};
Index: frontend/node_modules/es-abstract/helpers/bytesAsFloat32.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/bytesAsFloat32.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/bytesAsFloat32.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,36 @@
+'use strict';
+
+var $pow = require('math-intrinsics/pow');
+
+module.exports = function bytesAsFloat32(rawBytes) {
+	// return new $Float32Array(new $Uint8Array(rawBytes).buffer)[0];
+
+	/*
+        Let value be the byte elements of rawBytes concatenated and interpreted as a little-endian bit string encoding of an IEEE 754-2008 binary32 value.
+If value is an IEEE 754-2008 binary32 NaN value, return the NaN Number value.
+Return the Number value that corresponds to value.
+        */
+	var sign = rawBytes[3] & 0x80 ? -1 : 1; // Check the sign bit
+	var exponent = ((rawBytes[3] & 0x7F) << 1)
+		| (rawBytes[2] >> 7); // Combine bits for exponent
+	var mantissa = ((rawBytes[2] & 0x7F) << 16)
+		| (rawBytes[1] << 8)
+		| rawBytes[0]; // Combine bits for mantissa
+
+	if (exponent === 0 && mantissa === 0) {
+		return sign === 1 ? 0 : -0;
+	}
+	if (exponent === 0xFF && mantissa === 0) {
+		return sign === 1 ? Infinity : -Infinity;
+	}
+	if (exponent === 0xFF && mantissa !== 0) {
+		return NaN;
+	}
+
+	exponent -= 127; // subtract the bias
+
+	if (exponent === -127) {
+		return sign * mantissa * $pow(2, -126 - 23);
+	}
+	return sign * (1 + (mantissa * $pow(2, -23))) * $pow(2, exponent);
+};
Index: frontend/node_modules/es-abstract/helpers/bytesAsFloat64.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/bytesAsFloat64.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/bytesAsFloat64.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,42 @@
+'use strict';
+
+var $pow = require('math-intrinsics/pow');
+
+module.exports = function bytesAsFloat64(rawBytes) {
+	// return new $Float64Array(new $Uint8Array(rawBytes).buffer)[0];
+
+	/*
+    Let value be the byte elements of rawBytes concatenated and interpreted as a little-endian bit string encoding of an IEEE 754-2008 binary64 value.
+If value is an IEEE 754-2008 binary64 NaN value, return the NaN Number value.
+Return the Number value that corresponds to value.
+    */
+	var sign = rawBytes[7] & 0x80 ? -1 : 1; // first bit
+	var exponent = ((rawBytes[7] & 0x7F) << 4) // 7 bits from index 7
+        | ((rawBytes[6] & 0xF0) >> 4); // 4 bits from index 6
+	var mantissa = ((rawBytes[6] & 0x0F) * 0x1000000000000) // 4 bits from index 6
+        + (rawBytes[5] * 0x10000000000) // 8 bits from index 5
+        + (rawBytes[4] * 0x100000000) // 8 bits from index 4
+        + (rawBytes[3] * 0x1000000) // 8 bits from index 3
+        + (rawBytes[2] * 0x10000) // 8 bits from index 2
+        + (rawBytes[1] * 0x100) // 8 bits from index 1
+        + rawBytes[0]; // 8 bits from index 0
+
+	if (exponent === 0 && mantissa === 0) {
+		return sign * 0;
+	}
+	if (exponent === 0x7FF && mantissa !== 0) {
+		return NaN;
+	}
+	if (exponent === 0x7FF && mantissa === 0) {
+		return sign * Infinity;
+	}
+
+	exponent -= 1023; // subtract the bias
+
+	// Handle subnormal numbers
+	if (exponent === -1023) {
+		return sign * mantissa * 5e-324; // $pow(2, -1022 - 52)
+	}
+
+	return sign * (1 + (mantissa / 0x10000000000000)) * $pow(2, exponent);
+};
Index: frontend/node_modules/es-abstract/helpers/bytesAsInteger.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/bytesAsInteger.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/bytesAsInteger.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $pow = require('math-intrinsics/pow');
+
+var $Number = GetIntrinsic('%Number%');
+var $BigInt = GetIntrinsic('%BigInt%', true);
+
+module.exports = function bytesAsInteger(rawBytes, elementSize, isUnsigned, isBigInt) {
+	var Z = isBigInt ? $BigInt : $Number;
+
+	// this is common to both branches
+	var intValue = Z(0);
+	for (var i = 0; i < rawBytes.length; i++) {
+		intValue += Z(rawBytes[i] * $pow(2, 8 * i));
+	}
+	/*
+	Let intValue be the byte elements of rawBytes concatenated and interpreted as a bit string encoding of an unsigned little-endian binary number.
+	*/
+
+	if (!isUnsigned) { // steps 5-6
+		// Let intValue be the byte elements of rawBytes concatenated and interpreted as a bit string encoding of a binary little-endian 2's complement number of bit length elementSize × 8.
+		var bitLength = elementSize * 8;
+
+		if (rawBytes[elementSize - 1] & 0x80) {
+			intValue -= Z($pow(2, bitLength));
+		}
+	}
+
+	return intValue; // step 7
+};
Index: frontend/node_modules/es-abstract/helpers/callBind.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/callBind.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/callBind.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// TODO; semver-major: remove
+
+module.exports = require('call-bind');
Index: frontend/node_modules/es-abstract/helpers/callBound.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/callBound.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/callBound.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// TODO; semver-major: remove
+
+module.exports = require('call-bound');
Index: frontend/node_modules/es-abstract/helpers/caseFolding.json
===================================================================
--- frontend/node_modules/es-abstract/helpers/caseFolding.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/caseFolding.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1430 @@
+{
+	"C": {
+		"a": "A",
+		"b": "B",
+		"c": "C",
+		"d": "D",
+		"e": "E",
+		"f": "F",
+		"g": "G",
+		"h": "H",
+		"i": "I",
+		"j": "J",
+		"k": "K",
+		"l": "L",
+		"m": "M",
+		"n": "N",
+		"o": "O",
+		"p": "P",
+		"q": "Q",
+		"r": "R",
+		"s": "ſ",
+		"t": "T",
+		"u": "U",
+		"v": "V",
+		"w": "W",
+		"x": "X",
+		"y": "Y",
+		"z": "Z",
+		"μ": "Μ",
+		"à": "À",
+		"á": "Á",
+		"â": "Â",
+		"ã": "Ã",
+		"ä": "Ä",
+		"å": "Å",
+		"æ": "Æ",
+		"ç": "Ç",
+		"è": "È",
+		"é": "É",
+		"ê": "Ê",
+		"ë": "Ë",
+		"ì": "Ì",
+		"í": "Í",
+		"î": "Î",
+		"ï": "Ï",
+		"ð": "Ð",
+		"ñ": "Ñ",
+		"ò": "Ò",
+		"ó": "Ó",
+		"ô": "Ô",
+		"õ": "Õ",
+		"ö": "Ö",
+		"ø": "Ø",
+		"ù": "Ù",
+		"ú": "Ú",
+		"û": "Û",
+		"ü": "Ü",
+		"ý": "Ý",
+		"þ": "Þ",
+		"ā": "Ā",
+		"ă": "Ă",
+		"ą": "Ą",
+		"ć": "Ć",
+		"ĉ": "Ĉ",
+		"ċ": "Ċ",
+		"č": "Č",
+		"ď": "Ď",
+		"đ": "Đ",
+		"ē": "Ē",
+		"ĕ": "Ĕ",
+		"ė": "Ė",
+		"ę": "Ę",
+		"ě": "Ě",
+		"ĝ": "Ĝ",
+		"ğ": "Ğ",
+		"ġ": "Ġ",
+		"ģ": "Ģ",
+		"ĥ": "Ĥ",
+		"ħ": "Ħ",
+		"ĩ": "Ĩ",
+		"ī": "Ī",
+		"ĭ": "Ĭ",
+		"į": "Į",
+		"ĳ": "Ĳ",
+		"ĵ": "Ĵ",
+		"ķ": "Ķ",
+		"ĺ": "Ĺ",
+		"ļ": "Ļ",
+		"ľ": "Ľ",
+		"ŀ": "Ŀ",
+		"ł": "Ł",
+		"ń": "Ń",
+		"ņ": "Ņ",
+		"ň": "Ň",
+		"ŋ": "Ŋ",
+		"ō": "Ō",
+		"ŏ": "Ŏ",
+		"ő": "Ő",
+		"œ": "Œ",
+		"ŕ": "Ŕ",
+		"ŗ": "Ŗ",
+		"ř": "Ř",
+		"ś": "Ś",
+		"ŝ": "Ŝ",
+		"ş": "Ş",
+		"š": "Š",
+		"ţ": "Ţ",
+		"ť": "Ť",
+		"ŧ": "Ŧ",
+		"ũ": "Ũ",
+		"ū": "Ū",
+		"ŭ": "Ŭ",
+		"ů": "Ů",
+		"ű": "Ű",
+		"ų": "Ų",
+		"ŵ": "Ŵ",
+		"ŷ": "Ŷ",
+		"ÿ": "Ÿ",
+		"ź": "Ź",
+		"ż": "Ż",
+		"ž": "Ž",
+		"ɓ": "Ɓ",
+		"ƃ": "Ƃ",
+		"ƅ": "Ƅ",
+		"ɔ": "Ɔ",
+		"ƈ": "Ƈ",
+		"ɖ": "Ɖ",
+		"ɗ": "Ɗ",
+		"ƌ": "Ƌ",
+		"ǝ": "Ǝ",
+		"ə": "Ə",
+		"ɛ": "Ɛ",
+		"ƒ": "Ƒ",
+		"ɠ": "Ɠ",
+		"ɣ": "Ɣ",
+		"ɩ": "Ɩ",
+		"ɨ": "Ɨ",
+		"ƙ": "Ƙ",
+		"ɯ": "Ɯ",
+		"ɲ": "Ɲ",
+		"ɵ": "Ɵ",
+		"ơ": "Ơ",
+		"ƣ": "Ƣ",
+		"ƥ": "Ƥ",
+		"ʀ": "Ʀ",
+		"ƨ": "Ƨ",
+		"ʃ": "Ʃ",
+		"ƭ": "Ƭ",
+		"ʈ": "Ʈ",
+		"ư": "Ư",
+		"ʊ": "Ʊ",
+		"ʋ": "Ʋ",
+		"ƴ": "Ƴ",
+		"ƶ": "Ƶ",
+		"ʒ": "Ʒ",
+		"ƹ": "Ƹ",
+		"ƽ": "Ƽ",
+		"ǆ": "ǅ",
+		"ǉ": "ǈ",
+		"ǌ": "ǋ",
+		"ǎ": "Ǎ",
+		"ǐ": "Ǐ",
+		"ǒ": "Ǒ",
+		"ǔ": "Ǔ",
+		"ǖ": "Ǖ",
+		"ǘ": "Ǘ",
+		"ǚ": "Ǚ",
+		"ǜ": "Ǜ",
+		"ǟ": "Ǟ",
+		"ǡ": "Ǡ",
+		"ǣ": "Ǣ",
+		"ǥ": "Ǥ",
+		"ǧ": "Ǧ",
+		"ǩ": "Ǩ",
+		"ǫ": "Ǫ",
+		"ǭ": "Ǭ",
+		"ǯ": "Ǯ",
+		"ǳ": "ǲ",
+		"ǵ": "Ǵ",
+		"ƕ": "Ƕ",
+		"ƿ": "Ƿ",
+		"ǹ": "Ǹ",
+		"ǻ": "Ǻ",
+		"ǽ": "Ǽ",
+		"ǿ": "Ǿ",
+		"ȁ": "Ȁ",
+		"ȃ": "Ȃ",
+		"ȅ": "Ȅ",
+		"ȇ": "Ȇ",
+		"ȉ": "Ȉ",
+		"ȋ": "Ȋ",
+		"ȍ": "Ȍ",
+		"ȏ": "Ȏ",
+		"ȑ": "Ȑ",
+		"ȓ": "Ȓ",
+		"ȕ": "Ȕ",
+		"ȗ": "Ȗ",
+		"ș": "Ș",
+		"ț": "Ț",
+		"ȝ": "Ȝ",
+		"ȟ": "Ȟ",
+		"ƞ": "Ƞ",
+		"ȣ": "Ȣ",
+		"ȥ": "Ȥ",
+		"ȧ": "Ȧ",
+		"ȩ": "Ȩ",
+		"ȫ": "Ȫ",
+		"ȭ": "Ȭ",
+		"ȯ": "Ȯ",
+		"ȱ": "Ȱ",
+		"ȳ": "Ȳ",
+		"ⱥ": "Ⱥ",
+		"ȼ": "Ȼ",
+		"ƚ": "Ƚ",
+		"ⱦ": "Ⱦ",
+		"ɂ": "Ɂ",
+		"ƀ": "Ƀ",
+		"ʉ": "Ʉ",
+		"ʌ": "Ʌ",
+		"ɇ": "Ɇ",
+		"ɉ": "Ɉ",
+		"ɋ": "Ɋ",
+		"ɍ": "Ɍ",
+		"ɏ": "Ɏ",
+		"ι": "ι",
+		"ͱ": "Ͱ",
+		"ͳ": "Ͳ",
+		"ͷ": "Ͷ",
+		"ϳ": "Ϳ",
+		"ά": "Ά",
+		"έ": "Έ",
+		"ή": "Ή",
+		"ί": "Ί",
+		"ό": "Ό",
+		"ύ": "Ύ",
+		"ώ": "Ώ",
+		"α": "Α",
+		"β": "ϐ",
+		"γ": "Γ",
+		"δ": "Δ",
+		"ε": "ϵ",
+		"ζ": "Ζ",
+		"η": "Η",
+		"θ": "ϴ",
+		"κ": "ϰ",
+		"λ": "Λ",
+		"ν": "Ν",
+		"ξ": "Ξ",
+		"ο": "Ο",
+		"π": "ϖ",
+		"ρ": "ϱ",
+		"σ": "ς",
+		"τ": "Τ",
+		"υ": "Υ",
+		"φ": "ϕ",
+		"χ": "Χ",
+		"ψ": "Ψ",
+		"ω": "Ω",
+		"ϊ": "Ϊ",
+		"ϋ": "Ϋ",
+		"ϗ": "Ϗ",
+		"ϙ": "Ϙ",
+		"ϛ": "Ϛ",
+		"ϝ": "Ϝ",
+		"ϟ": "Ϟ",
+		"ϡ": "Ϡ",
+		"ϣ": "Ϣ",
+		"ϥ": "Ϥ",
+		"ϧ": "Ϧ",
+		"ϩ": "Ϩ",
+		"ϫ": "Ϫ",
+		"ϭ": "Ϭ",
+		"ϯ": "Ϯ",
+		"ϸ": "Ϸ",
+		"ϲ": "Ϲ",
+		"ϻ": "Ϻ",
+		"ͻ": "Ͻ",
+		"ͼ": "Ͼ",
+		"ͽ": "Ͽ",
+		"ѐ": "Ѐ",
+		"ё": "Ё",
+		"ђ": "Ђ",
+		"ѓ": "Ѓ",
+		"є": "Є",
+		"ѕ": "Ѕ",
+		"і": "І",
+		"ї": "Ї",
+		"ј": "Ј",
+		"љ": "Љ",
+		"њ": "Њ",
+		"ћ": "Ћ",
+		"ќ": "Ќ",
+		"ѝ": "Ѝ",
+		"ў": "Ў",
+		"џ": "Џ",
+		"а": "А",
+		"б": "Б",
+		"в": "ᲀ",
+		"г": "Г",
+		"д": "ᲁ",
+		"е": "Е",
+		"ж": "Ж",
+		"з": "З",
+		"и": "И",
+		"й": "Й",
+		"к": "К",
+		"л": "Л",
+		"м": "М",
+		"н": "Н",
+		"о": "ᲂ",
+		"п": "П",
+		"р": "Р",
+		"с": "ᲃ",
+		"т": "ᲅ",
+		"у": "У",
+		"ф": "Ф",
+		"х": "Х",
+		"ц": "Ц",
+		"ч": "Ч",
+		"ш": "Ш",
+		"щ": "Щ",
+		"ъ": "ᲆ",
+		"ы": "Ы",
+		"ь": "Ь",
+		"э": "Э",
+		"ю": "Ю",
+		"я": "Я",
+		"ѡ": "Ѡ",
+		"ѣ": "ᲇ",
+		"ѥ": "Ѥ",
+		"ѧ": "Ѧ",
+		"ѩ": "Ѩ",
+		"ѫ": "Ѫ",
+		"ѭ": "Ѭ",
+		"ѯ": "Ѯ",
+		"ѱ": "Ѱ",
+		"ѳ": "Ѳ",
+		"ѵ": "Ѵ",
+		"ѷ": "Ѷ",
+		"ѹ": "Ѹ",
+		"ѻ": "Ѻ",
+		"ѽ": "Ѽ",
+		"ѿ": "Ѿ",
+		"ҁ": "Ҁ",
+		"ҋ": "Ҋ",
+		"ҍ": "Ҍ",
+		"ҏ": "Ҏ",
+		"ґ": "Ґ",
+		"ғ": "Ғ",
+		"ҕ": "Ҕ",
+		"җ": "Җ",
+		"ҙ": "Ҙ",
+		"қ": "Қ",
+		"ҝ": "Ҝ",
+		"ҟ": "Ҟ",
+		"ҡ": "Ҡ",
+		"ң": "Ң",
+		"ҥ": "Ҥ",
+		"ҧ": "Ҧ",
+		"ҩ": "Ҩ",
+		"ҫ": "Ҫ",
+		"ҭ": "Ҭ",
+		"ү": "Ү",
+		"ұ": "Ұ",
+		"ҳ": "Ҳ",
+		"ҵ": "Ҵ",
+		"ҷ": "Ҷ",
+		"ҹ": "Ҹ",
+		"һ": "Һ",
+		"ҽ": "Ҽ",
+		"ҿ": "Ҿ",
+		"ӏ": "Ӏ",
+		"ӂ": "Ӂ",
+		"ӄ": "Ӄ",
+		"ӆ": "Ӆ",
+		"ӈ": "Ӈ",
+		"ӊ": "Ӊ",
+		"ӌ": "Ӌ",
+		"ӎ": "Ӎ",
+		"ӑ": "Ӑ",
+		"ӓ": "Ӓ",
+		"ӕ": "Ӕ",
+		"ӗ": "Ӗ",
+		"ә": "Ә",
+		"ӛ": "Ӛ",
+		"ӝ": "Ӝ",
+		"ӟ": "Ӟ",
+		"ӡ": "Ӡ",
+		"ӣ": "Ӣ",
+		"ӥ": "Ӥ",
+		"ӧ": "Ӧ",
+		"ө": "Ө",
+		"ӫ": "Ӫ",
+		"ӭ": "Ӭ",
+		"ӯ": "Ӯ",
+		"ӱ": "Ӱ",
+		"ӳ": "Ӳ",
+		"ӵ": "Ӵ",
+		"ӷ": "Ӷ",
+		"ӹ": "Ӹ",
+		"ӻ": "Ӻ",
+		"ӽ": "Ӽ",
+		"ӿ": "Ӿ",
+		"ԁ": "Ԁ",
+		"ԃ": "Ԃ",
+		"ԅ": "Ԅ",
+		"ԇ": "Ԇ",
+		"ԉ": "Ԉ",
+		"ԋ": "Ԋ",
+		"ԍ": "Ԍ",
+		"ԏ": "Ԏ",
+		"ԑ": "Ԑ",
+		"ԓ": "Ԓ",
+		"ԕ": "Ԕ",
+		"ԗ": "Ԗ",
+		"ԙ": "Ԙ",
+		"ԛ": "Ԛ",
+		"ԝ": "Ԝ",
+		"ԟ": "Ԟ",
+		"ԡ": "Ԡ",
+		"ԣ": "Ԣ",
+		"ԥ": "Ԥ",
+		"ԧ": "Ԧ",
+		"ԩ": "Ԩ",
+		"ԫ": "Ԫ",
+		"ԭ": "Ԭ",
+		"ԯ": "Ԯ",
+		"ա": "Ա",
+		"բ": "Բ",
+		"գ": "Գ",
+		"դ": "Դ",
+		"ե": "Ե",
+		"զ": "Զ",
+		"է": "Է",
+		"ը": "Ը",
+		"թ": "Թ",
+		"ժ": "Ժ",
+		"ի": "Ի",
+		"լ": "Լ",
+		"խ": "Խ",
+		"ծ": "Ծ",
+		"կ": "Կ",
+		"հ": "Հ",
+		"ձ": "Ձ",
+		"ղ": "Ղ",
+		"ճ": "Ճ",
+		"մ": "Մ",
+		"յ": "Յ",
+		"ն": "Ն",
+		"շ": "Շ",
+		"ո": "Ո",
+		"չ": "Չ",
+		"պ": "Պ",
+		"ջ": "Ջ",
+		"ռ": "Ռ",
+		"ս": "Ս",
+		"վ": "Վ",
+		"տ": "Տ",
+		"ր": "Ր",
+		"ց": "Ց",
+		"ւ": "Ւ",
+		"փ": "Փ",
+		"ք": "Ք",
+		"օ": "Օ",
+		"ֆ": "Ֆ",
+		"ⴀ": "Ⴀ",
+		"ⴁ": "Ⴁ",
+		"ⴂ": "Ⴂ",
+		"ⴃ": "Ⴃ",
+		"ⴄ": "Ⴄ",
+		"ⴅ": "Ⴅ",
+		"ⴆ": "Ⴆ",
+		"ⴇ": "Ⴇ",
+		"ⴈ": "Ⴈ",
+		"ⴉ": "Ⴉ",
+		"ⴊ": "Ⴊ",
+		"ⴋ": "Ⴋ",
+		"ⴌ": "Ⴌ",
+		"ⴍ": "Ⴍ",
+		"ⴎ": "Ⴎ",
+		"ⴏ": "Ⴏ",
+		"ⴐ": "Ⴐ",
+		"ⴑ": "Ⴑ",
+		"ⴒ": "Ⴒ",
+		"ⴓ": "Ⴓ",
+		"ⴔ": "Ⴔ",
+		"ⴕ": "Ⴕ",
+		"ⴖ": "Ⴖ",
+		"ⴗ": "Ⴗ",
+		"ⴘ": "Ⴘ",
+		"ⴙ": "Ⴙ",
+		"ⴚ": "Ⴚ",
+		"ⴛ": "Ⴛ",
+		"ⴜ": "Ⴜ",
+		"ⴝ": "Ⴝ",
+		"ⴞ": "Ⴞ",
+		"ⴟ": "Ⴟ",
+		"ⴠ": "Ⴠ",
+		"ⴡ": "Ⴡ",
+		"ⴢ": "Ⴢ",
+		"ⴣ": "Ⴣ",
+		"ⴤ": "Ⴤ",
+		"ⴥ": "Ⴥ",
+		"ⴧ": "Ⴧ",
+		"ⴭ": "Ⴭ",
+		"Ᏸ": "ᏸ",
+		"Ᏹ": "ᏹ",
+		"Ᏺ": "ᏺ",
+		"Ᏻ": "ᏻ",
+		"Ᏼ": "ᏼ",
+		"Ᏽ": "ᏽ",
+		"ꙋ": "Ꙋ",
+		"ა": "Ა",
+		"ბ": "Ბ",
+		"გ": "Გ",
+		"დ": "Დ",
+		"ე": "Ე",
+		"ვ": "Ვ",
+		"ზ": "Ზ",
+		"თ": "Თ",
+		"ი": "Ი",
+		"კ": "Კ",
+		"ლ": "Ლ",
+		"მ": "Მ",
+		"ნ": "Ნ",
+		"ო": "Ო",
+		"პ": "Პ",
+		"ჟ": "Ჟ",
+		"რ": "Რ",
+		"ს": "Ს",
+		"ტ": "Ტ",
+		"უ": "Უ",
+		"ფ": "Ფ",
+		"ქ": "Ქ",
+		"ღ": "Ღ",
+		"ყ": "Ყ",
+		"შ": "Შ",
+		"ჩ": "Ჩ",
+		"ც": "Ც",
+		"ძ": "Ძ",
+		"წ": "Წ",
+		"ჭ": "Ჭ",
+		"ხ": "Ხ",
+		"ჯ": "Ჯ",
+		"ჰ": "Ჰ",
+		"ჱ": "Ჱ",
+		"ჲ": "Ჲ",
+		"ჳ": "Ჳ",
+		"ჴ": "Ჴ",
+		"ჵ": "Ჵ",
+		"ჶ": "Ჶ",
+		"ჷ": "Ჷ",
+		"ჸ": "Ჸ",
+		"ჹ": "Ჹ",
+		"ჺ": "Ჺ",
+		"ჽ": "Ჽ",
+		"ჾ": "Ჾ",
+		"ჿ": "Ჿ",
+		"ḁ": "Ḁ",
+		"ḃ": "Ḃ",
+		"ḅ": "Ḅ",
+		"ḇ": "Ḇ",
+		"ḉ": "Ḉ",
+		"ḋ": "Ḋ",
+		"ḍ": "Ḍ",
+		"ḏ": "Ḏ",
+		"ḑ": "Ḑ",
+		"ḓ": "Ḓ",
+		"ḕ": "Ḕ",
+		"ḗ": "Ḗ",
+		"ḙ": "Ḙ",
+		"ḛ": "Ḛ",
+		"ḝ": "Ḝ",
+		"ḟ": "Ḟ",
+		"ḡ": "Ḡ",
+		"ḣ": "Ḣ",
+		"ḥ": "Ḥ",
+		"ḧ": "Ḧ",
+		"ḩ": "Ḩ",
+		"ḫ": "Ḫ",
+		"ḭ": "Ḭ",
+		"ḯ": "Ḯ",
+		"ḱ": "Ḱ",
+		"ḳ": "Ḳ",
+		"ḵ": "Ḵ",
+		"ḷ": "Ḷ",
+		"ḹ": "Ḹ",
+		"ḻ": "Ḻ",
+		"ḽ": "Ḽ",
+		"ḿ": "Ḿ",
+		"ṁ": "Ṁ",
+		"ṃ": "Ṃ",
+		"ṅ": "Ṅ",
+		"ṇ": "Ṇ",
+		"ṉ": "Ṉ",
+		"ṋ": "Ṋ",
+		"ṍ": "Ṍ",
+		"ṏ": "Ṏ",
+		"ṑ": "Ṑ",
+		"ṓ": "Ṓ",
+		"ṕ": "Ṕ",
+		"ṗ": "Ṗ",
+		"ṙ": "Ṙ",
+		"ṛ": "Ṛ",
+		"ṝ": "Ṝ",
+		"ṟ": "Ṟ",
+		"ṡ": "ẛ",
+		"ṣ": "Ṣ",
+		"ṥ": "Ṥ",
+		"ṧ": "Ṧ",
+		"ṩ": "Ṩ",
+		"ṫ": "Ṫ",
+		"ṭ": "Ṭ",
+		"ṯ": "Ṯ",
+		"ṱ": "Ṱ",
+		"ṳ": "Ṳ",
+		"ṵ": "Ṵ",
+		"ṷ": "Ṷ",
+		"ṹ": "Ṹ",
+		"ṻ": "Ṻ",
+		"ṽ": "Ṽ",
+		"ṿ": "Ṿ",
+		"ẁ": "Ẁ",
+		"ẃ": "Ẃ",
+		"ẅ": "Ẅ",
+		"ẇ": "Ẇ",
+		"ẉ": "Ẉ",
+		"ẋ": "Ẋ",
+		"ẍ": "Ẍ",
+		"ẏ": "Ẏ",
+		"ẑ": "Ẑ",
+		"ẓ": "Ẓ",
+		"ẕ": "Ẕ",
+		"ạ": "Ạ",
+		"ả": "Ả",
+		"ấ": "Ấ",
+		"ầ": "Ầ",
+		"ẩ": "Ẩ",
+		"ẫ": "Ẫ",
+		"ậ": "Ậ",
+		"ắ": "Ắ",
+		"ằ": "Ằ",
+		"ẳ": "Ẳ",
+		"ẵ": "Ẵ",
+		"ặ": "Ặ",
+		"ẹ": "Ẹ",
+		"ẻ": "Ẻ",
+		"ẽ": "Ẽ",
+		"ế": "Ế",
+		"ề": "Ề",
+		"ể": "Ể",
+		"ễ": "Ễ",
+		"ệ": "Ệ",
+		"ỉ": "Ỉ",
+		"ị": "Ị",
+		"ọ": "Ọ",
+		"ỏ": "Ỏ",
+		"ố": "Ố",
+		"ồ": "Ồ",
+		"ổ": "Ổ",
+		"ỗ": "Ỗ",
+		"ộ": "Ộ",
+		"ớ": "Ớ",
+		"ờ": "Ờ",
+		"ở": "Ở",
+		"ỡ": "Ỡ",
+		"ợ": "Ợ",
+		"ụ": "Ụ",
+		"ủ": "Ủ",
+		"ứ": "Ứ",
+		"ừ": "Ừ",
+		"ử": "Ử",
+		"ữ": "Ữ",
+		"ự": "Ự",
+		"ỳ": "Ỳ",
+		"ỵ": "Ỵ",
+		"ỷ": "Ỷ",
+		"ỹ": "Ỹ",
+		"ỻ": "Ỻ",
+		"ỽ": "Ỽ",
+		"ỿ": "Ỿ",
+		"ἀ": "Ἀ",
+		"ἁ": "Ἁ",
+		"ἂ": "Ἂ",
+		"ἃ": "Ἃ",
+		"ἄ": "Ἄ",
+		"ἅ": "Ἅ",
+		"ἆ": "Ἆ",
+		"ἇ": "Ἇ",
+		"ἐ": "Ἐ",
+		"ἑ": "Ἑ",
+		"ἒ": "Ἒ",
+		"ἓ": "Ἓ",
+		"ἔ": "Ἔ",
+		"ἕ": "Ἕ",
+		"ἠ": "Ἠ",
+		"ἡ": "Ἡ",
+		"ἢ": "Ἢ",
+		"ἣ": "Ἣ",
+		"ἤ": "Ἤ",
+		"ἥ": "Ἥ",
+		"ἦ": "Ἦ",
+		"ἧ": "Ἧ",
+		"ἰ": "Ἰ",
+		"ἱ": "Ἱ",
+		"ἲ": "Ἲ",
+		"ἳ": "Ἳ",
+		"ἴ": "Ἴ",
+		"ἵ": "Ἵ",
+		"ἶ": "Ἶ",
+		"ἷ": "Ἷ",
+		"ὀ": "Ὀ",
+		"ὁ": "Ὁ",
+		"ὂ": "Ὂ",
+		"ὃ": "Ὃ",
+		"ὄ": "Ὄ",
+		"ὅ": "Ὅ",
+		"ὑ": "Ὑ",
+		"ὓ": "Ὓ",
+		"ὕ": "Ὕ",
+		"ὗ": "Ὗ",
+		"ὠ": "Ὠ",
+		"ὡ": "Ὡ",
+		"ὢ": "Ὢ",
+		"ὣ": "Ὣ",
+		"ὤ": "Ὤ",
+		"ὥ": "Ὥ",
+		"ὦ": "Ὦ",
+		"ὧ": "Ὧ",
+		"ᾰ": "Ᾰ",
+		"ᾱ": "Ᾱ",
+		"ὰ": "Ὰ",
+		"ά": "Ά",
+		"ὲ": "Ὲ",
+		"έ": "Έ",
+		"ὴ": "Ὴ",
+		"ή": "Ή",
+		"ῐ": "Ῐ",
+		"ῑ": "Ῑ",
+		"ὶ": "Ὶ",
+		"ί": "Ί",
+		"ῠ": "Ῠ",
+		"ῡ": "Ῡ",
+		"ὺ": "Ὺ",
+		"ύ": "Ύ",
+		"ῥ": "Ῥ",
+		"ὸ": "Ὸ",
+		"ό": "Ό",
+		"ὼ": "Ὼ",
+		"ώ": "Ώ",
+		"ⅎ": "Ⅎ",
+		"ⅰ": "Ⅰ",
+		"ⅱ": "Ⅱ",
+		"ⅲ": "Ⅲ",
+		"ⅳ": "Ⅳ",
+		"ⅴ": "Ⅴ",
+		"ⅵ": "Ⅵ",
+		"ⅶ": "Ⅶ",
+		"ⅷ": "Ⅷ",
+		"ⅸ": "Ⅸ",
+		"ⅹ": "Ⅹ",
+		"ⅺ": "Ⅺ",
+		"ⅻ": "Ⅻ",
+		"ⅼ": "Ⅼ",
+		"ⅽ": "Ⅽ",
+		"ⅾ": "Ⅾ",
+		"ⅿ": "Ⅿ",
+		"ↄ": "Ↄ",
+		"ⓐ": "Ⓐ",
+		"ⓑ": "Ⓑ",
+		"ⓒ": "Ⓒ",
+		"ⓓ": "Ⓓ",
+		"ⓔ": "Ⓔ",
+		"ⓕ": "Ⓕ",
+		"ⓖ": "Ⓖ",
+		"ⓗ": "Ⓗ",
+		"ⓘ": "Ⓘ",
+		"ⓙ": "Ⓙ",
+		"ⓚ": "Ⓚ",
+		"ⓛ": "Ⓛ",
+		"ⓜ": "Ⓜ",
+		"ⓝ": "Ⓝ",
+		"ⓞ": "Ⓞ",
+		"ⓟ": "Ⓟ",
+		"ⓠ": "Ⓠ",
+		"ⓡ": "Ⓡ",
+		"ⓢ": "Ⓢ",
+		"ⓣ": "Ⓣ",
+		"ⓤ": "Ⓤ",
+		"ⓥ": "Ⓥ",
+		"ⓦ": "Ⓦ",
+		"ⓧ": "Ⓧ",
+		"ⓨ": "Ⓨ",
+		"ⓩ": "Ⓩ",
+		"ⰰ": "Ⰰ",
+		"ⰱ": "Ⰱ",
+		"ⰲ": "Ⰲ",
+		"ⰳ": "Ⰳ",
+		"ⰴ": "Ⰴ",
+		"ⰵ": "Ⰵ",
+		"ⰶ": "Ⰶ",
+		"ⰷ": "Ⰷ",
+		"ⰸ": "Ⰸ",
+		"ⰹ": "Ⰹ",
+		"ⰺ": "Ⰺ",
+		"ⰻ": "Ⰻ",
+		"ⰼ": "Ⰼ",
+		"ⰽ": "Ⰽ",
+		"ⰾ": "Ⰾ",
+		"ⰿ": "Ⰿ",
+		"ⱀ": "Ⱀ",
+		"ⱁ": "Ⱁ",
+		"ⱂ": "Ⱂ",
+		"ⱃ": "Ⱃ",
+		"ⱄ": "Ⱄ",
+		"ⱅ": "Ⱅ",
+		"ⱆ": "Ⱆ",
+		"ⱇ": "Ⱇ",
+		"ⱈ": "Ⱈ",
+		"ⱉ": "Ⱉ",
+		"ⱊ": "Ⱊ",
+		"ⱋ": "Ⱋ",
+		"ⱌ": "Ⱌ",
+		"ⱍ": "Ⱍ",
+		"ⱎ": "Ⱎ",
+		"ⱏ": "Ⱏ",
+		"ⱐ": "Ⱐ",
+		"ⱑ": "Ⱑ",
+		"ⱒ": "Ⱒ",
+		"ⱓ": "Ⱓ",
+		"ⱔ": "Ⱔ",
+		"ⱕ": "Ⱕ",
+		"ⱖ": "Ⱖ",
+		"ⱗ": "Ⱗ",
+		"ⱘ": "Ⱘ",
+		"ⱙ": "Ⱙ",
+		"ⱚ": "Ⱚ",
+		"ⱛ": "Ⱛ",
+		"ⱜ": "Ⱜ",
+		"ⱝ": "Ⱝ",
+		"ⱞ": "Ⱞ",
+		"ⱟ": "Ⱟ",
+		"ⱡ": "Ⱡ",
+		"ɫ": "Ɫ",
+		"ᵽ": "Ᵽ",
+		"ɽ": "Ɽ",
+		"ⱨ": "Ⱨ",
+		"ⱪ": "Ⱪ",
+		"ⱬ": "Ⱬ",
+		"ɑ": "Ɑ",
+		"ɱ": "Ɱ",
+		"ɐ": "Ɐ",
+		"ɒ": "Ɒ",
+		"ⱳ": "Ⱳ",
+		"ⱶ": "Ⱶ",
+		"ȿ": "Ȿ",
+		"ɀ": "Ɀ",
+		"ⲁ": "Ⲁ",
+		"ⲃ": "Ⲃ",
+		"ⲅ": "Ⲅ",
+		"ⲇ": "Ⲇ",
+		"ⲉ": "Ⲉ",
+		"ⲋ": "Ⲋ",
+		"ⲍ": "Ⲍ",
+		"ⲏ": "Ⲏ",
+		"ⲑ": "Ⲑ",
+		"ⲓ": "Ⲓ",
+		"ⲕ": "Ⲕ",
+		"ⲗ": "Ⲗ",
+		"ⲙ": "Ⲙ",
+		"ⲛ": "Ⲛ",
+		"ⲝ": "Ⲝ",
+		"ⲟ": "Ⲟ",
+		"ⲡ": "Ⲡ",
+		"ⲣ": "Ⲣ",
+		"ⲥ": "Ⲥ",
+		"ⲧ": "Ⲧ",
+		"ⲩ": "Ⲩ",
+		"ⲫ": "Ⲫ",
+		"ⲭ": "Ⲭ",
+		"ⲯ": "Ⲯ",
+		"ⲱ": "Ⲱ",
+		"ⲳ": "Ⲳ",
+		"ⲵ": "Ⲵ",
+		"ⲷ": "Ⲷ",
+		"ⲹ": "Ⲹ",
+		"ⲻ": "Ⲻ",
+		"ⲽ": "Ⲽ",
+		"ⲿ": "Ⲿ",
+		"ⳁ": "Ⳁ",
+		"ⳃ": "Ⳃ",
+		"ⳅ": "Ⳅ",
+		"ⳇ": "Ⳇ",
+		"ⳉ": "Ⳉ",
+		"ⳋ": "Ⳋ",
+		"ⳍ": "Ⳍ",
+		"ⳏ": "Ⳏ",
+		"ⳑ": "Ⳑ",
+		"ⳓ": "Ⳓ",
+		"ⳕ": "Ⳕ",
+		"ⳗ": "Ⳗ",
+		"ⳙ": "Ⳙ",
+		"ⳛ": "Ⳛ",
+		"ⳝ": "Ⳝ",
+		"ⳟ": "Ⳟ",
+		"ⳡ": "Ⳡ",
+		"ⳣ": "Ⳣ",
+		"ⳬ": "Ⳬ",
+		"ⳮ": "Ⳮ",
+		"ⳳ": "Ⳳ",
+		"ꙁ": "Ꙁ",
+		"ꙃ": "Ꙃ",
+		"ꙅ": "Ꙅ",
+		"ꙇ": "Ꙇ",
+		"ꙉ": "Ꙉ",
+		"ꙍ": "Ꙍ",
+		"ꙏ": "Ꙏ",
+		"ꙑ": "Ꙑ",
+		"ꙓ": "Ꙓ",
+		"ꙕ": "Ꙕ",
+		"ꙗ": "Ꙗ",
+		"ꙙ": "Ꙙ",
+		"ꙛ": "Ꙛ",
+		"ꙝ": "Ꙝ",
+		"ꙟ": "Ꙟ",
+		"ꙡ": "Ꙡ",
+		"ꙣ": "Ꙣ",
+		"ꙥ": "Ꙥ",
+		"ꙧ": "Ꙧ",
+		"ꙩ": "Ꙩ",
+		"ꙫ": "Ꙫ",
+		"ꙭ": "Ꙭ",
+		"ꚁ": "Ꚁ",
+		"ꚃ": "Ꚃ",
+		"ꚅ": "Ꚅ",
+		"ꚇ": "Ꚇ",
+		"ꚉ": "Ꚉ",
+		"ꚋ": "Ꚋ",
+		"ꚍ": "Ꚍ",
+		"ꚏ": "Ꚏ",
+		"ꚑ": "Ꚑ",
+		"ꚓ": "Ꚓ",
+		"ꚕ": "Ꚕ",
+		"ꚗ": "Ꚗ",
+		"ꚙ": "Ꚙ",
+		"ꚛ": "Ꚛ",
+		"ꜣ": "Ꜣ",
+		"ꜥ": "Ꜥ",
+		"ꜧ": "Ꜧ",
+		"ꜩ": "Ꜩ",
+		"ꜫ": "Ꜫ",
+		"ꜭ": "Ꜭ",
+		"ꜯ": "Ꜯ",
+		"ꜳ": "Ꜳ",
+		"ꜵ": "Ꜵ",
+		"ꜷ": "Ꜷ",
+		"ꜹ": "Ꜹ",
+		"ꜻ": "Ꜻ",
+		"ꜽ": "Ꜽ",
+		"ꜿ": "Ꜿ",
+		"ꝁ": "Ꝁ",
+		"ꝃ": "Ꝃ",
+		"ꝅ": "Ꝅ",
+		"ꝇ": "Ꝇ",
+		"ꝉ": "Ꝉ",
+		"ꝋ": "Ꝋ",
+		"ꝍ": "Ꝍ",
+		"ꝏ": "Ꝏ",
+		"ꝑ": "Ꝑ",
+		"ꝓ": "Ꝓ",
+		"ꝕ": "Ꝕ",
+		"ꝗ": "Ꝗ",
+		"ꝙ": "Ꝙ",
+		"ꝛ": "Ꝛ",
+		"ꝝ": "Ꝝ",
+		"ꝟ": "Ꝟ",
+		"ꝡ": "Ꝡ",
+		"ꝣ": "Ꝣ",
+		"ꝥ": "Ꝥ",
+		"ꝧ": "Ꝧ",
+		"ꝩ": "Ꝩ",
+		"ꝫ": "Ꝫ",
+		"ꝭ": "Ꝭ",
+		"ꝯ": "Ꝯ",
+		"ꝺ": "Ꝺ",
+		"ꝼ": "Ꝼ",
+		"ᵹ": "Ᵹ",
+		"ꝿ": "Ꝿ",
+		"ꞁ": "Ꞁ",
+		"ꞃ": "Ꞃ",
+		"ꞅ": "Ꞅ",
+		"ꞇ": "Ꞇ",
+		"ꞌ": "Ꞌ",
+		"ɥ": "Ɥ",
+		"ꞑ": "Ꞑ",
+		"ꞓ": "Ꞓ",
+		"ꞗ": "Ꞗ",
+		"ꞙ": "Ꞙ",
+		"ꞛ": "Ꞛ",
+		"ꞝ": "Ꞝ",
+		"ꞟ": "Ꞟ",
+		"ꞡ": "Ꞡ",
+		"ꞣ": "Ꞣ",
+		"ꞥ": "Ꞥ",
+		"ꞧ": "Ꞧ",
+		"ꞩ": "Ꞩ",
+		"ɦ": "Ɦ",
+		"ɜ": "Ɜ",
+		"ɡ": "Ɡ",
+		"ɬ": "Ɬ",
+		"ɪ": "Ɪ",
+		"ʞ": "Ʞ",
+		"ʇ": "Ʇ",
+		"ʝ": "Ʝ",
+		"ꭓ": "Ꭓ",
+		"ꞵ": "Ꞵ",
+		"ꞷ": "Ꞷ",
+		"ꞹ": "Ꞹ",
+		"ꞻ": "Ꞻ",
+		"ꞽ": "Ꞽ",
+		"ꞿ": "Ꞿ",
+		"ꟁ": "Ꟁ",
+		"ꟃ": "Ꟃ",
+		"ꞔ": "Ꞔ",
+		"ʂ": "Ʂ",
+		"ᶎ": "Ᶎ",
+		"ꟈ": "Ꟈ",
+		"ꟊ": "Ꟊ",
+		"ꟑ": "Ꟑ",
+		"ꟗ": "Ꟗ",
+		"ꟙ": "Ꟙ",
+		"ꟶ": "Ꟶ",
+		"Ꭰ": "ꭰ",
+		"Ꭱ": "ꭱ",
+		"Ꭲ": "ꭲ",
+		"Ꭳ": "ꭳ",
+		"Ꭴ": "ꭴ",
+		"Ꭵ": "ꭵ",
+		"Ꭶ": "ꭶ",
+		"Ꭷ": "ꭷ",
+		"Ꭸ": "ꭸ",
+		"Ꭹ": "ꭹ",
+		"Ꭺ": "ꭺ",
+		"Ꭻ": "ꭻ",
+		"Ꭼ": "ꭼ",
+		"Ꭽ": "ꭽ",
+		"Ꭾ": "ꭾ",
+		"Ꭿ": "ꭿ",
+		"Ꮀ": "ꮀ",
+		"Ꮁ": "ꮁ",
+		"Ꮂ": "ꮂ",
+		"Ꮃ": "ꮃ",
+		"Ꮄ": "ꮄ",
+		"Ꮅ": "ꮅ",
+		"Ꮆ": "ꮆ",
+		"Ꮇ": "ꮇ",
+		"Ꮈ": "ꮈ",
+		"Ꮉ": "ꮉ",
+		"Ꮊ": "ꮊ",
+		"Ꮋ": "ꮋ",
+		"Ꮌ": "ꮌ",
+		"Ꮍ": "ꮍ",
+		"Ꮎ": "ꮎ",
+		"Ꮏ": "ꮏ",
+		"Ꮐ": "ꮐ",
+		"Ꮑ": "ꮑ",
+		"Ꮒ": "ꮒ",
+		"Ꮓ": "ꮓ",
+		"Ꮔ": "ꮔ",
+		"Ꮕ": "ꮕ",
+		"Ꮖ": "ꮖ",
+		"Ꮗ": "ꮗ",
+		"Ꮘ": "ꮘ",
+		"Ꮙ": "ꮙ",
+		"Ꮚ": "ꮚ",
+		"Ꮛ": "ꮛ",
+		"Ꮜ": "ꮜ",
+		"Ꮝ": "ꮝ",
+		"Ꮞ": "ꮞ",
+		"Ꮟ": "ꮟ",
+		"Ꮠ": "ꮠ",
+		"Ꮡ": "ꮡ",
+		"Ꮢ": "ꮢ",
+		"Ꮣ": "ꮣ",
+		"Ꮤ": "ꮤ",
+		"Ꮥ": "ꮥ",
+		"Ꮦ": "ꮦ",
+		"Ꮧ": "ꮧ",
+		"Ꮨ": "ꮨ",
+		"Ꮩ": "ꮩ",
+		"Ꮪ": "ꮪ",
+		"Ꮫ": "ꮫ",
+		"Ꮬ": "ꮬ",
+		"Ꮭ": "ꮭ",
+		"Ꮮ": "ꮮ",
+		"Ꮯ": "ꮯ",
+		"Ꮰ": "ꮰ",
+		"Ꮱ": "ꮱ",
+		"Ꮲ": "ꮲ",
+		"Ꮳ": "ꮳ",
+		"Ꮴ": "ꮴ",
+		"Ꮵ": "ꮵ",
+		"Ꮶ": "ꮶ",
+		"Ꮷ": "ꮷ",
+		"Ꮸ": "ꮸ",
+		"Ꮹ": "ꮹ",
+		"Ꮺ": "ꮺ",
+		"Ꮻ": "ꮻ",
+		"Ꮼ": "ꮼ",
+		"Ꮽ": "ꮽ",
+		"Ꮾ": "ꮾ",
+		"Ꮿ": "ꮿ",
+		"ａ": "Ａ",
+		"ｂ": "Ｂ",
+		"ｃ": "Ｃ",
+		"ｄ": "Ｄ",
+		"ｅ": "Ｅ",
+		"ｆ": "Ｆ",
+		"ｇ": "Ｇ",
+		"ｈ": "Ｈ",
+		"ｉ": "Ｉ",
+		"ｊ": "Ｊ",
+		"ｋ": "Ｋ",
+		"ｌ": "Ｌ",
+		"ｍ": "Ｍ",
+		"ｎ": "Ｎ",
+		"ｏ": "Ｏ",
+		"ｐ": "Ｐ",
+		"ｑ": "Ｑ",
+		"ｒ": "Ｒ",
+		"ｓ": "Ｓ",
+		"ｔ": "Ｔ",
+		"ｕ": "Ｕ",
+		"ｖ": "Ｖ",
+		"ｗ": "Ｗ",
+		"ｘ": "Ｘ",
+		"ｙ": "Ｙ",
+		"ｚ": "Ｚ",
+		"𐐨": "𐐀",
+		"𐐩": "𐐁",
+		"𐐪": "𐐂",
+		"𐐫": "𐐃",
+		"𐐬": "𐐄",
+		"𐐭": "𐐅",
+		"𐐮": "𐐆",
+		"𐐯": "𐐇",
+		"𐐰": "𐐈",
+		"𐐱": "𐐉",
+		"𐐲": "𐐊",
+		"𐐳": "𐐋",
+		"𐐴": "𐐌",
+		"𐐵": "𐐍",
+		"𐐶": "𐐎",
+		"𐐷": "𐐏",
+		"𐐸": "𐐐",
+		"𐐹": "𐐑",
+		"𐐺": "𐐒",
+		"𐐻": "𐐓",
+		"𐐼": "𐐔",
+		"𐐽": "𐐕",
+		"𐐾": "𐐖",
+		"𐐿": "𐐗",
+		"𐑀": "𐐘",
+		"𐑁": "𐐙",
+		"𐑂": "𐐚",
+		"𐑃": "𐐛",
+		"𐑄": "𐐜",
+		"𐑅": "𐐝",
+		"𐑆": "𐐞",
+		"𐑇": "𐐟",
+		"𐑈": "𐐠",
+		"𐑉": "𐐡",
+		"𐑊": "𐐢",
+		"𐑋": "𐐣",
+		"𐑌": "𐐤",
+		"𐑍": "𐐥",
+		"𐑎": "𐐦",
+		"𐑏": "𐐧",
+		"𐓘": "𐒰",
+		"𐓙": "𐒱",
+		"𐓚": "𐒲",
+		"𐓛": "𐒳",
+		"𐓜": "𐒴",
+		"𐓝": "𐒵",
+		"𐓞": "𐒶",
+		"𐓟": "𐒷",
+		"𐓠": "𐒸",
+		"𐓡": "𐒹",
+		"𐓢": "𐒺",
+		"𐓣": "𐒻",
+		"𐓤": "𐒼",
+		"𐓥": "𐒽",
+		"𐓦": "𐒾",
+		"𐓧": "𐒿",
+		"𐓨": "𐓀",
+		"𐓩": "𐓁",
+		"𐓪": "𐓂",
+		"𐓫": "𐓃",
+		"𐓬": "𐓄",
+		"𐓭": "𐓅",
+		"𐓮": "𐓆",
+		"𐓯": "𐓇",
+		"𐓰": "𐓈",
+		"𐓱": "𐓉",
+		"𐓲": "𐓊",
+		"𐓳": "𐓋",
+		"𐓴": "𐓌",
+		"𐓵": "𐓍",
+		"𐓶": "𐓎",
+		"𐓷": "𐓏",
+		"𐓸": "𐓐",
+		"𐓹": "𐓑",
+		"𐓺": "𐓒",
+		"𐓻": "𐓓",
+		"𐖗": "𐕰",
+		"𐖘": "𐕱",
+		"𐖙": "𐕲",
+		"𐖚": "𐕳",
+		"𐖛": "𐕴",
+		"𐖜": "𐕵",
+		"𐖝": "𐕶",
+		"𐖞": "𐕷",
+		"𐖟": "𐕸",
+		"𐖠": "𐕹",
+		"𐖡": "𐕺",
+		"𐖣": "𐕼",
+		"𐖤": "𐕽",
+		"𐖥": "𐕾",
+		"𐖦": "𐕿",
+		"𐖧": "𐖀",
+		"𐖨": "𐖁",
+		"𐖩": "𐖂",
+		"𐖪": "𐖃",
+		"𐖫": "𐖄",
+		"𐖬": "𐖅",
+		"𐖭": "𐖆",
+		"𐖮": "𐖇",
+		"𐖯": "𐖈",
+		"𐖰": "𐖉",
+		"𐖱": "𐖊",
+		"𐖳": "𐖌",
+		"𐖴": "𐖍",
+		"𐖵": "𐖎",
+		"𐖶": "𐖏",
+		"𐖷": "𐖐",
+		"𐖸": "𐖑",
+		"𐖹": "𐖒",
+		"𐖻": "𐖔",
+		"𐖼": "𐖕",
+		"𐳀": "𐲀",
+		"𐳁": "𐲁",
+		"𐳂": "𐲂",
+		"𐳃": "𐲃",
+		"𐳄": "𐲄",
+		"𐳅": "𐲅",
+		"𐳆": "𐲆",
+		"𐳇": "𐲇",
+		"𐳈": "𐲈",
+		"𐳉": "𐲉",
+		"𐳊": "𐲊",
+		"𐳋": "𐲋",
+		"𐳌": "𐲌",
+		"𐳍": "𐲍",
+		"𐳎": "𐲎",
+		"𐳏": "𐲏",
+		"𐳐": "𐲐",
+		"𐳑": "𐲑",
+		"𐳒": "𐲒",
+		"𐳓": "𐲓",
+		"𐳔": "𐲔",
+		"𐳕": "𐲕",
+		"𐳖": "𐲖",
+		"𐳗": "𐲗",
+		"𐳘": "𐲘",
+		"𐳙": "𐲙",
+		"𐳚": "𐲚",
+		"𐳛": "𐲛",
+		"𐳜": "𐲜",
+		"𐳝": "𐲝",
+		"𐳞": "𐲞",
+		"𐳟": "𐲟",
+		"𐳠": "𐲠",
+		"𐳡": "𐲡",
+		"𐳢": "𐲢",
+		"𐳣": "𐲣",
+		"𐳤": "𐲤",
+		"𐳥": "𐲥",
+		"𐳦": "𐲦",
+		"𐳧": "𐲧",
+		"𐳨": "𐲨",
+		"𐳩": "𐲩",
+		"𐳪": "𐲪",
+		"𐳫": "𐲫",
+		"𐳬": "𐲬",
+		"𐳭": "𐲭",
+		"𐳮": "𐲮",
+		"𐳯": "𐲯",
+		"𐳰": "𐲰",
+		"𐳱": "𐲱",
+		"𐳲": "𐲲",
+		"𑣀": "𑢠",
+		"𑣁": "𑢡",
+		"𑣂": "𑢢",
+		"𑣃": "𑢣",
+		"𑣄": "𑢤",
+		"𑣅": "𑢥",
+		"𑣆": "𑢦",
+		"𑣇": "𑢧",
+		"𑣈": "𑢨",
+		"𑣉": "𑢩",
+		"𑣊": "𑢪",
+		"𑣋": "𑢫",
+		"𑣌": "𑢬",
+		"𑣍": "𑢭",
+		"𑣎": "𑢮",
+		"𑣏": "𑢯",
+		"𑣐": "𑢰",
+		"𑣑": "𑢱",
+		"𑣒": "𑢲",
+		"𑣓": "𑢳",
+		"𑣔": "𑢴",
+		"𑣕": "𑢵",
+		"𑣖": "𑢶",
+		"𑣗": "𑢷",
+		"𑣘": "𑢸",
+		"𑣙": "𑢹",
+		"𑣚": "𑢺",
+		"𑣛": "𑢻",
+		"𑣜": "𑢼",
+		"𑣝": "𑢽",
+		"𑣞": "𑢾",
+		"𑣟": "𑢿",
+		"𖹠": "𖹀",
+		"𖹡": "𖹁",
+		"𖹢": "𖹂",
+		"𖹣": "𖹃",
+		"𖹤": "𖹄",
+		"𖹥": "𖹅",
+		"𖹦": "𖹆",
+		"𖹧": "𖹇",
+		"𖹨": "𖹈",
+		"𖹩": "𖹉",
+		"𖹪": "𖹊",
+		"𖹫": "𖹋",
+		"𖹬": "𖹌",
+		"𖹭": "𖹍",
+		"𖹮": "𖹎",
+		"𖹯": "𖹏",
+		"𖹰": "𖹐",
+		"𖹱": "𖹑",
+		"𖹲": "𖹒",
+		"𖹳": "𖹓",
+		"𖹴": "𖹔",
+		"𖹵": "𖹕",
+		"𖹶": "𖹖",
+		"𖹷": "𖹗",
+		"𖹸": "𖹘",
+		"𖹹": "𖹙",
+		"𖹺": "𖹚",
+		"𖹻": "𖹛",
+		"𖹼": "𖹜",
+		"𖹽": "𖹝",
+		"𖹾": "𖹞",
+		"𖹿": "𖹟",
+		"𞤢": "𞤀",
+		"𞤣": "𞤁",
+		"𞤤": "𞤂",
+		"𞤥": "𞤃",
+		"𞤦": "𞤄",
+		"𞤧": "𞤅",
+		"𞤨": "𞤆",
+		"𞤩": "𞤇",
+		"𞤪": "𞤈",
+		"𞤫": "𞤉",
+		"𞤬": "𞤊",
+		"𞤭": "𞤋",
+		"𞤮": "𞤌",
+		"𞤯": "𞤍",
+		"𞤰": "𞤎",
+		"𞤱": "𞤏",
+		"𞤲": "𞤐",
+		"𞤳": "𞤑",
+		"𞤴": "𞤒",
+		"𞤵": "𞤓",
+		"𞤶": "𞤔",
+		"𞤷": "𞤕",
+		"𞤸": "𞤖",
+		"𞤹": "𞤗",
+		"𞤺": "𞤘",
+		"𞤻": "𞤙",
+		"𞤼": "𞤚",
+		"𞤽": "𞤛",
+		"𞤾": "𞤜",
+		"𞤿": "𞤝",
+		"𞥀": "𞤞",
+		"𞥁": "𞤟",
+		"𞥂": "𞤠",
+		"𞥃": "𞤡"
+	},
+	"S": {
+		"ß": "ẞ",
+		"ᾀ": "ᾈ",
+		"ᾁ": "ᾉ",
+		"ᾂ": "ᾊ",
+		"ᾃ": "ᾋ",
+		"ᾄ": "ᾌ",
+		"ᾅ": "ᾍ",
+		"ᾆ": "ᾎ",
+		"ᾇ": "ᾏ",
+		"ᾐ": "ᾘ",
+		"ᾑ": "ᾙ",
+		"ᾒ": "ᾚ",
+		"ᾓ": "ᾛ",
+		"ᾔ": "ᾜ",
+		"ᾕ": "ᾝ",
+		"ᾖ": "ᾞ",
+		"ᾗ": "ᾟ",
+		"ᾠ": "ᾨ",
+		"ᾡ": "ᾩ",
+		"ᾢ": "ᾪ",
+		"ᾣ": "ᾫ",
+		"ᾤ": "ᾬ",
+		"ᾥ": "ᾭ",
+		"ᾦ": "ᾮ",
+		"ᾧ": "ᾯ",
+		"ᾳ": "ᾼ",
+		"ῃ": "ῌ",
+		"ῳ": "ῼ"
+	}
+}
Index: frontend/node_modules/es-abstract/helpers/defaultEndianness.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/defaultEndianness.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/defaultEndianness.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Uint8Array = GetIntrinsic('%Uint8Array%', true);
+var $Uint32Array = GetIntrinsic('%Uint32Array%', true);
+
+var typedArrayBuffer = require('typed-array-buffer');
+
+var uInt32 = $Uint32Array && new $Uint32Array([0x12345678]);
+var uInt8 = uInt32 && new $Uint8Array(typedArrayBuffer(uInt32));
+
+module.exports = uInt8
+	? uInt8[0] === 0x78
+		? 'little'
+		: uInt8[0] === 0x12
+			? 'big'
+			: uInt8[0] === 0x34
+				? 'mixed' // https://developer.mozilla.org/en-US/docs/Glossary/Endianness
+				: 'unknown' // ???
+	: 'indeterminate'; // no way to know
Index: frontend/node_modules/es-abstract/helpers/every.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/every.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/every.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+module.exports = function every(array, predicate) {
+	for (var i = 0; i < array.length; i += 1) {
+		if (!predicate(array[i], i, array)) {
+			return false;
+		}
+	}
+	return true;
+};
Index: frontend/node_modules/es-abstract/helpers/forEach.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/forEach.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/forEach.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+'use strict';
+
+module.exports = function forEach(array, callback) {
+	for (var i = 0; i < array.length; i += 1) {
+		callback(array[i], i, array); // eslint-disable-line callback-return
+	}
+};
Index: frontend/node_modules/es-abstract/helpers/fractionToBinaryString.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/fractionToBinaryString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/fractionToBinaryString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,33 @@
+'use strict';
+
+var MAX_ITER = 1075; // 1023+52 (subnormals) => BIAS+NUM_SIGNFICAND_BITS-1
+var maxBits = 54; // only 53 bits for fraction
+
+module.exports = function fractionToBitString(x) {
+	var str = '';
+	if (x === 0) {
+		return str;
+	}
+	var j = MAX_ITER;
+
+	var y;
+	// Each time we multiply by 2 and find a ones digit, add a '1'; otherwise, add a '0'..
+	for (var i = 0; i < MAX_ITER; i += 1) {
+		y = x * 2;
+		if (y >= 1) {
+			x = y - 1; // eslint-disable-line no-param-reassign
+			str += '1';
+			if (j === MAX_ITER) {
+				j = i; // first 1
+			}
+		} else {
+			x = y; // eslint-disable-line no-param-reassign
+			str += '0';
+		}
+		// Stop when we have no more decimals to process or in the event we found a fraction which cannot be represented in a finite number of bits...
+		if (y === 1 || i - j > maxBits) {
+			return str;
+		}
+	}
+	return str;
+};
Index: frontend/node_modules/es-abstract/helpers/fromPropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/fromPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/fromPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,27 @@
+'use strict';
+
+module.exports = function fromPropertyDescriptor(Desc) {
+	if (typeof Desc === 'undefined') {
+		return Desc;
+	}
+	var obj = {};
+	if ('[[Value]]' in Desc) {
+		obj.value = Desc['[[Value]]'];
+	}
+	if ('[[Writable]]' in Desc) {
+		obj.writable = !!Desc['[[Writable]]'];
+	}
+	if ('[[Get]]' in Desc) {
+		obj.get = Desc['[[Get]]'];
+	}
+	if ('[[Set]]' in Desc) {
+		obj.set = Desc['[[Set]]'];
+	}
+	if ('[[Enumerable]]' in Desc) {
+		obj.enumerable = !!Desc['[[Enumerable]]'];
+	}
+	if ('[[Configurable]]' in Desc) {
+		obj.configurable = !!Desc['[[Configurable]]'];
+	}
+	return obj;
+};
Index: frontend/node_modules/es-abstract/helpers/getInferredName.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/getInferredName.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/getInferredName.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO: remove, semver-major
+module.exports = require('get-symbol-description/getInferredName');
Index: frontend/node_modules/es-abstract/helpers/getIteratorMethod.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/getIteratorMethod.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/getIteratorMethod.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,50 @@
+'use strict';
+
+var hasSymbols = require('has-symbols')();
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bound');
+var isString = require('is-string');
+
+var $iterator = GetIntrinsic('%Symbol.iterator%', true);
+var $stringSlice = callBound('String.prototype.slice');
+var $String = GetIntrinsic('%String%');
+
+var IsArray = require('./IsArray');
+
+module.exports = function getIteratorMethod(ES, iterable) {
+	var usingIterator;
+	if (hasSymbols) {
+		usingIterator = ES.GetMethod(iterable, $iterator);
+	} else if (IsArray(iterable)) {
+		usingIterator = function () {
+			var i = -1;
+			var arr = this;
+			return {
+				next: function () {
+					i += 1;
+					return {
+						done: i >= arr.length,
+						value: arr[i]
+					};
+				}
+			};
+		};
+	} else if (isString(iterable)) {
+		usingIterator = function () {
+			var i = 0;
+			return {
+				next: function () {
+					var nextIndex = ES.AdvanceStringIndex($String(iterable), i, true);
+					var value = $stringSlice(iterable, i, nextIndex);
+					i = nextIndex;
+					var done = nextIndex > iterable.length;
+					return {
+						done: done,
+						value: done ? void undefined : value
+					};
+				}
+			};
+		};
+	}
+	return usingIterator;
+};
Index: frontend/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// TODO: remove, semver-major
+
+module.exports = require('gopd');
Index: frontend/node_modules/es-abstract/helpers/getProto.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/getProto.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/getProto.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO, semver-major: remove
+module.exports = require('get-proto');
Index: frontend/node_modules/es-abstract/helpers/getSymbolDescription.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/getSymbolDescription.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/getSymbolDescription.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO: remove, semver-major
+module.exports = require('get-symbol-description');
Index: frontend/node_modules/es-abstract/helpers/intToBinaryString.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/intToBinaryString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/intToBinaryString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+'use strict';
+
+var $floor = require('math-intrinsics/floor');
+
+// https://runestone.academy/ns/books/published/pythonds/BasicDS/ConvertingDecimalNumberstoBinaryNumbers.html#:~:text=The%20Divide%20by%202%20algorithm,have%20a%20remainder%20of%200
+
+module.exports = function intToBinaryString(x) {
+	var str = '';
+	var y;
+
+	while (x > 0) {
+		y = x / 2;
+		x = $floor(y); // eslint-disable-line no-param-reassign
+		if (y === x) {
+			str = '0' + str;
+		} else {
+			str = '1' + str;
+		}
+	}
+	return str;
+};
Index: frontend/node_modules/es-abstract/helpers/integerToNBytes.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/integerToNBytes.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/integerToNBytes.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,28 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $BigInt = GetIntrinsic('%BigInt%', true);
+
+module.exports = function integerToNBytes(intValue, n, isLittleEndian) {
+	var Z = typeof intValue === 'bigint' ? $BigInt : $Number;
+	/*
+	if (intValue >= 0) { // step 3.d
+		// Let rawBytes be a List containing the n-byte binary encoding of intValue. If isLittleEndian is false, the bytes are ordered in big endian order. Otherwise, the bytes are ordered in little endian order.
+	} else { // step 3.e
+		// Let rawBytes be a List containing the n-byte binary 2's complement encoding of intValue. If isLittleEndian is false, the bytes are ordered in big endian order. Otherwise, the bytes are ordered in little endian order.
+	}
+    */
+	if (intValue < 0) {
+		intValue >>>= 0; // eslint-disable-line no-param-reassign
+	}
+
+	var rawBytes = [];
+	for (var i = 0; i < n; i++) {
+		rawBytes[isLittleEndian ? i : n - 1 - i] = $Number(intValue & Z(0xFF));
+		intValue >>= Z(8); // eslint-disable-line no-param-reassign
+	}
+
+	return rawBytes; // step 4
+};
Index: frontend/node_modules/es-abstract/helpers/isAbstractClosure.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isAbstractClosure.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isAbstractClosure.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var functionName = require('function.prototype.name');
+
+var anon = functionName(function () {});
+
+module.exports = function isAbstractClosure(x) {
+	return typeof x === 'function' && (!x.prototype || functionName(x) === anon);
+};
Index: frontend/node_modules/es-abstract/helpers/isByteValue.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isByteValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isByteValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function isByteValue(value) {
+	return typeof value === 'number' && value >= 0 && value <= 255 && (value | 0) === value;
+};
Index: frontend/node_modules/es-abstract/helpers/isCodePoint.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isCodePoint.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isCodePoint.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function isCodePoint(cp) {
+	return typeof cp === 'number' && cp >= 0 && cp <= 0x10FFFF && (cp | 0) === cp;
+};
Index: frontend/node_modules/es-abstract/helpers/isFinite.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isFinite.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isFinite.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO, semver-major: delete
+module.exports = require('math-intrinsics/isFinite');
Index: frontend/node_modules/es-abstract/helpers/isFullyPopulatedPropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isFullyPopulatedPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isFullyPopulatedPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+var isPropertyDescriptor = require('./records/property-descriptor');
+
+module.exports = function isFullyPopulatedPropertyDescriptor(ES, Desc) {
+	return isPropertyDescriptor(Desc)
+		&& '[[Enumerable]]' in Desc
+		&& '[[Configurable]]' in Desc
+		&& (ES.IsAccessorDescriptor(Desc) || ES.IsDataDescriptor(Desc));
+};
Index: frontend/node_modules/es-abstract/helpers/isInteger.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isInteger.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isInteger.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO, semver-major: delete
+module.exports = require('math-intrinsics/isInteger');
Index: frontend/node_modules/es-abstract/helpers/isLeadingSurrogate.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isLeadingSurrogate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isLeadingSurrogate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function isLeadingSurrogate(charCode) {
+	return typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;
+};
Index: frontend/node_modules/es-abstract/helpers/isLineTerminator.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isLineTerminator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isLineTerminator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://262.ecma-international.org/5.1/#sec-7.3
+
+module.exports = function isLineTerminator(c) {
+	return c === '\n' || c === '\r' || c === '\u2028' || c === '\u2029';
+};
Index: frontend/node_modules/es-abstract/helpers/isNaN.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isNaN.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isNaN.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = Number.isNaN || function isNaN(a) {
+	return a !== a;
+};
Index: frontend/node_modules/es-abstract/helpers/isNegativeZero.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isNegativeZero.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isNegativeZero.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,6 @@
+'use strict';
+
+// TODO, semver-major: remove
+module.exports = function isNegativeZero(x) {
+	return x === 0 && 1 / x === 1 / -0;
+};
Index: frontend/node_modules/es-abstract/helpers/isObject.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// TODO: remove, semver-major
+
+module.exports = require('es-object-atoms/isObject');
Index: frontend/node_modules/es-abstract/helpers/isPrefixOf.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isPrefixOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isPrefixOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var $strSlice = require('call-bound')('String.prototype.slice');
+
+module.exports = function isPrefixOf(prefix, string) {
+	if (prefix === string) {
+		return true;
+	}
+	if (prefix.length > string.length) {
+		return false;
+	}
+	return $strSlice(string, 0, prefix.length) === prefix;
+};
Index: frontend/node_modules/es-abstract/helpers/isPrimitive.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isPrimitive.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isPrimitive.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function isPrimitive(value) {
+	return value === null || (typeof value !== 'function' && typeof value !== 'object');
+};
Index: frontend/node_modules/es-abstract/helpers/isPropertyKey.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isPropertyKey.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isPropertyKey.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function isPropertyKey(argument) {
+	return typeof argument === 'string' || typeof argument === 'symbol';
+};
Index: frontend/node_modules/es-abstract/helpers/isSamePropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isSamePropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isSamePropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var every = require('./every');
+
+module.exports = function isSamePropertyDescriptor(ES, D1, D2) {
+	var fields = [
+		'[[Configurable]]',
+		'[[Enumerable]]',
+		'[[Get]]',
+		'[[Set]]',
+		'[[Value]]',
+		'[[Writable]]'
+	];
+	return every(fields, function (field) {
+		if ((field in D1) !== (field in D2)) {
+			return false;
+		}
+		return ES.SameValue(D1[field], D2[field]);
+	});
+};
Index: frontend/node_modules/es-abstract/helpers/isSameType.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isSameType.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isSameType.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+module.exports = function isSameType(x, y) {
+	if (x === y) {
+		return true;
+	}
+
+	if (typeof x === typeof y) {
+		if (typeof x !== 'object' || typeof y !== 'object') {
+			return true;
+		}
+		return !!x === !!y;
+	}
+
+	return false;
+};
Index: frontend/node_modules/es-abstract/helpers/isStringOrHole.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isStringOrHole.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isStringOrHole.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+// TODO: semver-major: remove
+
+var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false
+
+module.exports = function isStringOrHole(item, index, arr) {
+	return typeof item === 'string' || (canDistinguishSparseFromUndefined ? !(index in arr) : typeof item === 'undefined');
+};
Index: frontend/node_modules/es-abstract/helpers/isStringOrUndefined.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isStringOrUndefined.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isStringOrUndefined.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function isStringOrUndefined(item) {
+	return typeof item === 'string' || typeof item === 'undefined';
+};
Index: frontend/node_modules/es-abstract/helpers/isTrailingSurrogate.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/isTrailingSurrogate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/isTrailingSurrogate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function isTrailingSurrogate(charCode) {
+	return typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;
+};
Index: frontend/node_modules/es-abstract/helpers/maxSafeInteger.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/maxSafeInteger.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/maxSafeInteger.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO, semver-major: delete
+module.exports = require('math-intrinsics/constants/maxSafeInteger');
Index: frontend/node_modules/es-abstract/helpers/maxValue.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/maxValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/maxValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO, semver-major: delete
+module.exports = require('math-intrinsics/constants/maxValue');
Index: frontend/node_modules/es-abstract/helpers/mod.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/mod.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/mod.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO, semver-major: delete
+module.exports = require('math-intrinsics/mod');
Index: frontend/node_modules/es-abstract/helpers/modBigInt.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/modBigInt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/modBigInt.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,6 @@
+'use strict';
+
+module.exports = function bigIntMod(BigIntRemainder, bigint, modulo) {
+	var remain = BigIntRemainder(bigint, modulo);
+	return remain >= 0 ? remain : remain + modulo;
+};
Index: frontend/node_modules/es-abstract/helpers/padTimeComponent.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/padTimeComponent.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/padTimeComponent.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $strSlice = callBound('String.prototype.slice');
+
+module.exports = function padTimeComponent(c, count) {
+	return $strSlice('00' + c, -(count || 2));
+};
Index: frontend/node_modules/es-abstract/helpers/records/async-generator-request-record.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/records/async-generator-request-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/records/async-generator-request-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var hasOwn = require('hasown');
+
+var isPromiseCapabilityRecord = require('./promise-capability-record');
+
+module.exports = function isAsyncGeneratorRequestRecord(value) {
+	return !!value
+		&& typeof value === 'object'
+		&& hasOwn(value, '[[Completion]]') // TODO: confirm is a completion record
+		&& hasOwn(value, '[[Capability]]')
+		&& isPromiseCapabilityRecord(value['[[Capability]]']);
+};
Index: frontend/node_modules/es-abstract/helpers/records/data-view-with-buffer-witness-record.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/records/data-view-with-buffer-witness-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/records/data-view-with-buffer-witness-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var hasOwn = require('hasown');
+var isDataView = require('is-data-view');
+
+var isInteger = require('../isInteger');
+
+module.exports = function isDataViewWithBufferWitnessRecord(value) {
+	return !!value
+		&& typeof value === 'object'
+		&& hasOwn(value, '[[Object]]')
+		&& hasOwn(value, '[[CachedBufferByteLength]]')
+		&& (
+			(isInteger(value['[[CachedBufferByteLength]]']) && value['[[CachedBufferByteLength]]'] >= 0)
+			|| value['[[CachedBufferByteLength]]'] === 'DETACHED'
+		)
+		&& isDataView(value['[[Object]]']);
+};
Index: frontend/node_modules/es-abstract/helpers/records/iterator-record-2023.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/records/iterator-record-2023.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/records/iterator-record-2023.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+'use strict';
+
+var isIteratorRecordNew = require('./iterator-record');
+
+module.exports = function isIteratorRecord(value) {
+	return isIteratorRecordNew(value) && typeof value['[[NextMethod]]'] === 'function';
+};
Index: frontend/node_modules/es-abstract/helpers/records/iterator-record.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/records/iterator-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/records/iterator-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var hasOwn = require('hasown');
+
+module.exports = function isIteratorRecord(value) {
+	return !!value
+		&& typeof value === 'object'
+		&& hasOwn(value, '[[Iterator]]')
+		&& hasOwn(value, '[[NextMethod]]')
+		&& hasOwn(value, '[[Done]]')
+		&& typeof value['[[Done]]'] === 'boolean';
+};
Index: frontend/node_modules/es-abstract/helpers/records/match-record.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/records/match-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/records/match-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+'use strict';
+
+var hasOwn = require('hasown');
+var GetIntrinsic = require('get-intrinsic');
+
+var $parseInt = GetIntrinsic('%parseInt%');
+
+// https://262.ecma-international.org/13.0/#sec-match-records
+
+module.exports = function isMatchRecord(record) {
+	return (
+		!!record
+		&& typeof record === 'object'
+		&& hasOwn(record, '[[StartIndex]]')
+		&& hasOwn(record, '[[EndIndex]]')
+		&& record['[[StartIndex]]'] >= 0
+		&& record['[[EndIndex]]'] >= record['[[StartIndex]]']
+		&& String($parseInt(record['[[StartIndex]]'], 10)) === String(record['[[StartIndex]]'])
+		&& String($parseInt(record['[[EndIndex]]'], 10)) === String(record['[[EndIndex]]'])
+	);
+};
Index: frontend/node_modules/es-abstract/helpers/records/promise-capability-record.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/records/promise-capability-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/records/promise-capability-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var hasOwn = require('hasown');
+
+module.exports = function isPromiseCapabilityRecord(value) {
+	return !!value
+        && typeof value === 'object'
+		&& hasOwn(value, '[[Resolve]]')
+		&& typeof value['[[Resolve]]'] === 'function'
+		&& hasOwn(value, '[[Reject]]')
+		&& typeof value['[[Reject]]'] === 'function'
+		&& hasOwn(value, '[[Promise]]')
+		&& !!value['[[Promise]]']
+        && typeof value['[[Promise]]'] === 'object'
+		&& typeof value['[[Promise]]'].then === 'function';
+};
Index: frontend/node_modules/es-abstract/helpers/records/property-descriptor.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/records/property-descriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/records/property-descriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,36 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var hasOwn = require('hasown');
+
+var allowed = {
+	__proto__: null,
+	'[[Configurable]]': true,
+	'[[Enumerable]]': true,
+	'[[Get]]': true,
+	'[[Set]]': true,
+	'[[Value]]': true,
+	'[[Writable]]': true
+};
+
+// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type
+
+module.exports = function isPropertyDescriptor(Desc) {
+	if (!Desc || typeof Desc !== 'object') {
+		return false;
+	}
+
+	for (var key in Desc) { // eslint-disable-line
+		if (hasOwn(Desc, key) && !allowed[key]) {
+			return false;
+		}
+	}
+
+	var isData = hasOwn(Desc, '[[Value]]') || hasOwn(Desc, '[[Writable]]');
+	var IsAccessor = hasOwn(Desc, '[[Get]]') || hasOwn(Desc, '[[Set]]');
+	if (isData && IsAccessor) {
+		throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
+	}
+	return true;
+};
Index: frontend/node_modules/es-abstract/helpers/records/regexp-record.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/records/regexp-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/records/regexp-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var hasOwn = require('hasown');
+
+var isInteger = require('../isInteger');
+
+module.exports = function isRegExpRecord(value) {
+	return !!value
+		&& typeof value === 'object'
+		&& hasOwn(value, '[[IgnoreCase]]')
+		&& typeof value['[[IgnoreCase]]'] === 'boolean'
+		&& hasOwn(value, '[[Multiline]]')
+		&& typeof value['[[Multiline]]'] === 'boolean'
+		&& hasOwn(value, '[[DotAll]]')
+		&& typeof value['[[DotAll]]'] === 'boolean'
+		&& hasOwn(value, '[[Unicode]]')
+		&& typeof value['[[Unicode]]'] === 'boolean'
+		&& hasOwn(value, '[[CapturingGroupsCount]]')
+		&& typeof value['[[CapturingGroupsCount]]'] === 'number'
+		&& isInteger(value['[[CapturingGroupsCount]]'])
+		&& value['[[CapturingGroupsCount]]'] >= 0
+		&& (!hasOwn(value, '[[UnicodeSets]]') || typeof value['[[UnicodeSets]]'] === 'boolean'); // optional since it was added later
+};
Index: frontend/node_modules/es-abstract/helpers/records/set-record.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/records/set-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/records/set-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+'use strict';
+
+var hasOwn = require('hasown');
+var isInteger = require('../isInteger');
+
+module.exports = function isSetRecord(value) {
+	return !!value
+		&& typeof value === 'object'
+		&& hasOwn(value, '[[SetObject]]')
+		&& value['[[SetObject]]']
+		&& typeof value['[[SetObject]]'] === 'object'
+		&& hasOwn(value, '[[Size]]')
+		&& (
+			value['[[Size]]'] === Infinity
+			|| (isInteger(value['[[Size]]']) && value['[[Size]]'] >= 0)
+		)
+		&& hasOwn(value, '[[Has]]')
+		&& typeof value['[[Has]]'] === 'function'
+		&& hasOwn(value, '[[Keys]]')
+		&& typeof value['[[Keys]]'] === 'function';
+};
Index: frontend/node_modules/es-abstract/helpers/records/typed-array-with-buffer-witness-record.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/records/typed-array-with-buffer-witness-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/records/typed-array-with-buffer-witness-record.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var hasOwn = require('hasown');
+var isTypedArray = require('is-typed-array');
+
+var isInteger = require('../isInteger');
+
+module.exports = function isTypedArrayWithBufferWitnessRecord(value) {
+	return !!value
+		&& typeof value === 'object'
+		&& hasOwn(value, '[[Object]]')
+		&& hasOwn(value, '[[CachedBufferByteLength]]')
+		&& (
+			(isInteger(value['[[CachedBufferByteLength]]']) && value['[[CachedBufferByteLength]]'] >= 0)
+			|| value['[[CachedBufferByteLength]]'] === 'DETACHED'
+		)
+		&& isTypedArray(value['[[Object]]']);
+};
Index: frontend/node_modules/es-abstract/helpers/reduce.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/reduce.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/reduce.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+module.exports = function reduce(arr, fn, init) {
+	var acc = init;
+	for (var i = 0; i < arr.length; i += 1) {
+		acc = fn(acc, arr[i], i);
+	}
+	return acc;
+};
Index: frontend/node_modules/es-abstract/helpers/regexTester.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/regexTester.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/regexTester.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// TODO: remove, semver-major
+
+module.exports = require('safe-regex-test');
Index: frontend/node_modules/es-abstract/helpers/setProto.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/setProto.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/setProto.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO, semver-major: remove
+module.exports = require('set-proto');
Index: frontend/node_modules/es-abstract/helpers/sign.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/sign.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/sign.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// TODO, semver-major: delete
+module.exports = require('math-intrinsics/sign');
Index: frontend/node_modules/es-abstract/helpers/some.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/some.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/some.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+module.exports = function some(array, predicate) {
+	for (var i = 0; i < array.length; i += 1) {
+		if (predicate(array[i], i, array)) {
+			return true;
+		}
+	}
+	return false;
+};
Index: frontend/node_modules/es-abstract/helpers/timeConstants.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/timeConstants.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/timeConstants.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var HoursPerDay = 24;
+var MinutesPerHour = 60;
+var SecondsPerMinute = 60;
+var msPerSecond = 1e3;
+var msPerMinute = msPerSecond * SecondsPerMinute;
+var msPerHour = msPerMinute * MinutesPerHour;
+var msPerDay = 86400000;
+
+module.exports = {
+	HoursPerDay: HoursPerDay,
+	MinutesPerHour: MinutesPerHour,
+	SecondsPerMinute: SecondsPerMinute,
+	msPerSecond: msPerSecond,
+	msPerMinute: msPerMinute,
+	msPerHour: msPerHour,
+	msPerDay: msPerDay
+};
Index: frontend/node_modules/es-abstract/helpers/timeValue.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/timeValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/timeValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+'use strict';
+
+var $DateGetTime = require('call-bound')('Date.prototype.getTime');
+
+module.exports = function timeValue(x) {
+	return $DateGetTime(x);
+};
Index: frontend/node_modules/es-abstract/helpers/typedArrayConstructors.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/typedArrayConstructors.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/typedArrayConstructors.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var constructors = {
+	__proto__: null,
+	$Int8Array: GetIntrinsic('%Int8Array%', true),
+	$Uint8Array: GetIntrinsic('%Uint8Array%', true),
+	$Uint8ClampedArray: GetIntrinsic('%Uint8ClampedArray%', true),
+	$Int16Array: GetIntrinsic('%Int16Array%', true),
+	$Uint16Array: GetIntrinsic('%Uint16Array%', true),
+	$Int32Array: GetIntrinsic('%Int32Array%', true),
+	$Uint32Array: GetIntrinsic('%Uint32Array%', true),
+	$BigInt64Array: GetIntrinsic('%BigInt64Array%', true),
+	$BigUint64Array: GetIntrinsic('%BigUint64Array%', true),
+	$Float16Array: GetIntrinsic('%Float16Array%', true),
+	$Float32Array: GetIntrinsic('%Float32Array%', true),
+	$Float64Array: GetIntrinsic('%Float64Array%', true)
+};
+
+module.exports = function getConstructor(kind) {
+	return constructors['$' + kind];
+};
Index: frontend/node_modules/es-abstract/helpers/valueToFloat16Bytes.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/valueToFloat16Bytes.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/valueToFloat16Bytes.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,73 @@
+'use strict';
+
+var $abs = require('math-intrinsics/abs');
+var $floor = require('math-intrinsics/floor');
+var $pow = require('math-intrinsics/pow');
+
+var isFinite = require('math-intrinsics/isFinite');
+var isNaN = require('math-intrinsics/isNaN');
+var isNegativeZero = require('math-intrinsics/isNegativeZero');
+
+var maxFiniteFloat16 = 65504; // 2**16 - 2**5
+
+module.exports = function valueToFloat16Bytes(value, isLittleEndian) {
+	// NaN → exponent=all-ones, mantissa MSB=1 → 0x7e00
+	if (isNaN(value)) {
+		return isLittleEndian
+			? [0x00, 0x7e]
+			: [0x7e, 0x00];
+	}
+
+	var leastSig;
+
+	// ±0 → just the sign bit
+	if (value === 0) {
+		leastSig = isNegativeZero(value) ? 0x80 : 0x00;
+		return isLittleEndian
+			? [0x00, leastSig]
+			: [leastSig, 0x00];
+	}
+
+	// ±∞ → exponent=all-ones, mantissa=0 → 0x7c00 or 0xfc00
+	if ($abs(value) > maxFiniteFloat16 || !isFinite(value)) {
+		leastSig = value < 0 ? 0xfc : 0x7c;
+		return isLittleEndian
+			? [0x00, leastSig]
+			: [leastSig, 0x00];
+	}
+
+	var sign = value < 0 ? 1 : 0;
+	value = $abs(value); // eslint-disable-line no-param-reassign
+
+	// normalize to [1,2)
+	var exponent = 0;
+	while (value >= 2) {
+		exponent += 1;
+		value /= 2; // eslint-disable-line no-param-reassign
+	}
+	while (value < 1) {
+		exponent -= 1;
+		value *= 2; // eslint-disable-line no-param-reassign
+	}
+
+	// build mantissa (10 bits)
+	var mantissa = value - 1;
+	mantissa *= $pow(2, 10) + 0.5;
+	mantissa = $floor(mantissa);
+
+	// apply bias (15) and shift into place
+	exponent += 15;
+	exponent <<= 10;
+
+	// pack sign, exponent, mantissa
+	var result = (sign << 15) | exponent | mantissa;
+
+	// split into two bytes
+	var byte0 = result & 0xFF;
+	result >>= 8;
+	var byte1 = result & 0xFF;
+
+	return isLittleEndian
+		? [byte0, byte1]
+		: [byte1, byte0];
+};
Index: frontend/node_modules/es-abstract/helpers/valueToFloat32Bytes.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/valueToFloat32Bytes.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/valueToFloat32Bytes.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,67 @@
+'use strict';
+
+var $abs = require('math-intrinsics/abs');
+var $floor = require('math-intrinsics/floor');
+var $pow = require('math-intrinsics/pow');
+
+var isFinite = require('math-intrinsics/isFinite');
+var isNaN = require('math-intrinsics/isNaN');
+var isNegativeZero = require('math-intrinsics/isNegativeZero');
+
+var maxFiniteFloat32 = 3.4028234663852886e+38; // roughly 2 ** 128 - 1
+
+module.exports = function valueToFloat32Bytes(value, isLittleEndian) {
+	if (isNaN(value)) {
+		return isLittleEndian ? [0, 0, 192, 127] : [127, 192, 0, 0]; // hardcoded
+	}
+
+	var leastSig;
+
+	if (value === 0) {
+		leastSig = isNegativeZero(value) ? 0x80 : 0;
+		return isLittleEndian ? [0, 0, 0, leastSig] : [leastSig, 0, 0, 0];
+	}
+
+	if ($abs(value) > maxFiniteFloat32 || !isFinite(value)) {
+		leastSig = value < 0 ? 255 : 127;
+		return isLittleEndian ? [0, 0, 128, leastSig] : [leastSig, 128, 0, 0];
+	}
+
+	var sign = value < 0 ? 1 : 0;
+	value = $abs(value); // eslint-disable-line no-param-reassign
+
+	var exponent = 0;
+	while (value >= 2) {
+		exponent += 1;
+		value /= 2; // eslint-disable-line no-param-reassign
+	}
+
+	while (value < 1) {
+		exponent -= 1;
+		value *= 2; // eslint-disable-line no-param-reassign
+	}
+
+	var mantissa = value - 1;
+	mantissa *= $pow(2, 23) + 0.5;
+	mantissa = $floor(mantissa);
+
+	exponent += 127;
+	exponent <<= 23;
+
+	var result = (sign << 31)
+        | exponent
+        | mantissa;
+
+	var byte0 = result & 255;
+	result >>= 8;
+	var byte1 = result & 255;
+	result >>= 8;
+	var byte2 = result & 255;
+	result >>= 8;
+	var byte3 = result & 255;
+
+	if (isLittleEndian) {
+		return [byte0, byte1, byte2, byte3];
+	}
+	return [byte3, byte2, byte1, byte0];
+};
Index: frontend/node_modules/es-abstract/helpers/valueToFloat64Bytes.js
===================================================================
--- frontend/node_modules/es-abstract/helpers/valueToFloat64Bytes.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/helpers/valueToFloat64Bytes.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,85 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $parseInt = GetIntrinsic('%parseInt%');
+var $abs = require('math-intrinsics/abs');
+var $floor = require('math-intrinsics/floor');
+var isFinite = require('math-intrinsics/isFinite');
+var isNegativeZero = require('math-intrinsics/isNegativeZero');
+
+var callBound = require('call-bound');
+
+var $strIndexOf = callBound('String.prototype.indexOf');
+var $strSlice = callBound('String.prototype.slice');
+
+var fractionToBitString = require('../helpers/fractionToBinaryString');
+var intToBinString = require('../helpers/intToBinaryString');
+var isNaN = require('../helpers/isNaN');
+
+var float64bias = 1023;
+
+var elevenOnes = '11111111111';
+var elevenZeroes = '00000000000';
+var fiftyOneZeroes = elevenZeroes + elevenZeroes + elevenZeroes + elevenZeroes + '0000000';
+
+// IEEE 754-1985
+module.exports = function valueToFloat64Bytes(value, isLittleEndian) {
+	var signBit = value < 0 || isNegativeZero(value) ? '1' : '0';
+	var exponentBits;
+	var significandBits;
+
+	if (isNaN(value)) {
+		exponentBits = elevenOnes;
+		significandBits = '1' + fiftyOneZeroes;
+	} else if (!isFinite(value)) {
+		exponentBits = elevenOnes;
+		significandBits = '0' + fiftyOneZeroes;
+	} else if (value === 0) {
+		exponentBits = elevenZeroes;
+		significandBits = '0' + fiftyOneZeroes;
+	} else {
+		value = $abs(value); // eslint-disable-line no-param-reassign
+
+		// Isolate the integer part (digits before the decimal):
+		var integerPart = $floor(value);
+
+		var intBinString = intToBinString(integerPart); // bit string for integer part
+		var fracBinString = fractionToBitString(value - integerPart); // bit string for fractional part
+
+		var numberOfBits;
+		// find exponent needed to normalize integer+fractional parts
+		if (intBinString) {
+			exponentBits = intBinString.length - 1; // move the decimal to the left
+		} else {
+			var first1 = $strIndexOf(fracBinString, '1');
+			if (first1 > -1) {
+				numberOfBits = first1 + 1;
+			}
+			exponentBits = -numberOfBits; // move the decimal to the right
+		}
+
+		significandBits = intBinString + fracBinString;
+		if (exponentBits < 0) {
+			// subnormals
+			if (exponentBits <= -float64bias) {
+				numberOfBits = float64bias - 1; // limit number of removed bits
+			}
+			significandBits = $strSlice(significandBits, numberOfBits); // remove all leading 0s and the first 1 for normal values; for subnormals, remove up to `float64bias - 1` leading bits
+		} else {
+			significandBits = $strSlice(significandBits, 1); // remove the leading '1' (implicit/hidden bit)
+		}
+		exponentBits = $strSlice(elevenZeroes + intToBinString(exponentBits + float64bias), -11); // Convert the exponent to a bit string
+
+		significandBits = $strSlice(significandBits + fiftyOneZeroes + '0', 0, 52); // fill in any trailing zeros and ensure we have only 52 fraction bits
+	}
+
+	var bits = signBit + exponentBits + significandBits;
+	var rawBytes = [];
+	for (var i = 0; i < 8; i++) {
+		var targetIndex = isLittleEndian ? 8 - i - 1 : i;
+		rawBytes[targetIndex] = $parseInt($strSlice(bits, i * 8, (i + 1) * 8), 2);
+	}
+
+	return rawBytes;
+};
