From b86fd98a5cbd0741a1164cc2ae35aa3976652294 Mon Sep 17 00:00:00 2001 From: Malik <75104021+7malikk@users.noreply.github.com> Date: Mon, 20 Feb 2023 16:16:59 +0100 Subject: [PATCH] save map dropdown (#1357) * save map dropdown * save and recover map * hot fix * quick fixes --- dist/leaflet.distortableimage.js | 801 +++++++++++++++++++++------ dist/leaflet.distortableimage.js.map | 2 +- examples/archive.html | 42 +- examples/js/archive.js | 202 +++++-- 4 files changed, 839 insertions(+), 208 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index a2adbdd52..634bf43b3 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -195,9 +195,13 @@ ansiHTML.reset() /***/ (function() { function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } -function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } + +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } + function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + var arr = []; L.DistortableCollection = L.FeatureGroup.extend({ options: { @@ -217,14 +221,16 @@ L.DistortableCollection = L.FeatureGroup.extend({ onAdd: function onAdd(map) { L.FeatureGroup.prototype.onAdd.call(this, map); this._map = map; + if (this.editable) { this.editing.enable(); } - /** * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable, * events that need to be added on individual images are kept here to do so through `layeradd`. */ + + this.on('layeradd', this._addEvents, this); this.on('layerremove', this._removeEvents, this); }, @@ -232,6 +238,7 @@ L.DistortableCollection = L.FeatureGroup.extend({ if (this.editing) { this.editing.disable(); } + this.off('layeradd', this._addEvents, this); this.off('layerremove', this._removeEvents, this); }, @@ -243,6 +250,7 @@ L.DistortableCollection = L.FeatureGroup.extend({ }, this); L.DomEvent.on(layer.getElement(), { mousedown: this._deselectOthers, + /* Enable longpress for multi select for touch devices. */ contextmenu: this._longPressMultiSelect }, this); @@ -260,16 +268,21 @@ L.DistortableCollection = L.FeatureGroup.extend({ }, _longPressMultiSelect: function _longPressMultiSelect(e) { var _this = this; + if (!this.editable) { return; } + e.preventDefault(); this.eachLayer(function (layer) { var edit = layer.editing; + if (layer.getElement() === e.target && edit.enabled()) { L.DomUtil.toggleClass(layer.getElement(), 'collected'); + if (_this.anyCollected()) { layer.deselect(); + _this.editing._addToolbar(); } else { _this.editing._removeToolbar(); @@ -288,12 +301,13 @@ L.DistortableCollection = L.FeatureGroup.extend({ if (e.shiftKey) { /* conditional prevents disabled images from flickering multi-select mode */ if (layer.editing.enabled()) { - L.DomUtil.toggleClass(e.target, 'collected'); - // re-order layers by _leaflet_id to match their display order in UI + L.DomUtil.toggleClass(e.target, 'collected'); // re-order layers by _leaflet_id to match their display order in UI // add new layer to right position and avoid repitition + var newArr = arr.every(function (each) { return each._leaflet_id !== layer._leaflet_id; }); + if (newArr) { arr.push(layer); } else { @@ -301,6 +315,7 @@ L.DistortableCollection = L.FeatureGroup.extend({ } } } + if (this.anyCollected()) { layer.deselect(); } else { @@ -309,9 +324,11 @@ L.DistortableCollection = L.FeatureGroup.extend({ }, _deselectOthers: function _deselectOthers(e) { var _this2 = this; + if (!this.editable) { return; } + this.eachLayer(function (layer) { if (layer.getElement() !== e.target) { layer.deselect(); @@ -319,6 +336,7 @@ L.DistortableCollection = L.FeatureGroup.extend({ _this2._toggleCollected(e, layer); } }); + if (e) { L.DomEvent.stopPropagation(e); } @@ -327,12 +345,15 @@ L.DistortableCollection = L.FeatureGroup.extend({ var overlay = e.target; var map = this._map; var i; + if (!this.isCollected(overlay)) { return; } + this.eachLayer(function (layer) { layer._dragStartPoints = {}; layer.deselect(); + for (i = 0; i < 4; i++) { var c = layer.getCorner(i); layer._dragStartPoints[i] = map.latLngToLayerPoint(c); @@ -342,15 +363,20 @@ L.DistortableCollection = L.FeatureGroup.extend({ _dragMultiple: function _dragMultiple(e) { var overlay = e.target; var map = this._map; + if (!this.isCollected(overlay)) { return; } + var topLeft = map.latLngToLayerPoint(overlay.getCorner(0)); + var delta = overlay._dragStartPoints[0].subtract(topLeft); + this._updateCollectionFromPoints(delta, overlay); }, _toRemove: function _toRemove() { var _this3 = this; + var layerArr = this.getLayers(); return layerArr.filter(function (layer) { var mode = layer.editing._mode; @@ -359,6 +385,7 @@ L.DistortableCollection = L.FeatureGroup.extend({ }, _toMove: function _toMove(overlay) { var _this4 = this; + var layerArr = this.getLayers(); return layerArr.filter(function (layer) { var mode = layer.editing._mode; @@ -367,13 +394,16 @@ L.DistortableCollection = L.FeatureGroup.extend({ }, _updateCollectionFromPoints: function _updateCollectionFromPoints(delta, overlay) { var layersToMove = this._toMove(overlay); + var p = new L.Transformation(1, -delta.x, 1, -delta.y); var i; layersToMove.forEach(function (layer) { var movedPoints = {}; + for (i = 0; i < 4; i++) { movedPoints[i] = p.transform(layer._dragStartPoints[i]); } + layer.setCornersFromPoints(movedPoints); }); }, @@ -396,16 +426,20 @@ L.DistortableCollection = L.FeatureGroup.extend({ _context.prev = 2; _context.next = 5; return axios.get(url); + case 5: response = _context.sent; + if (!response.data.hasOwnProperty('avg_cm_per_pixel')) { _context.next = 14; break; } + if (!(response.data.collection.length > 1)) { _context.next = 10; break; } + response.data.collection.forEach(function (data) { imgCollectionProps[index] = data; index++; @@ -414,17 +448,20 @@ L.DistortableCollection = L.FeatureGroup.extend({ avg_cm_per_pixel: response.data.avg_cm_per_pixel, imgCollectionProps: imgCollectionProps }); + case 10: imgCollectionProps[index] = response.data.collection; return _context.abrupt("return", { avg_cm_per_pixel: response.data.avg_cm_per_pixel, imgCollectionProps: imgCollectionProps }); + case 14: if (!(response.data.length > 1)) { _context.next = 17; break; } + response.data.forEach(function (data) { imgCollectionProps[index] = data; index++; @@ -432,18 +469,22 @@ L.DistortableCollection = L.FeatureGroup.extend({ return _context.abrupt("return", { imgCollectionProps: imgCollectionProps }); + case 17: imgCollectionProps[index] = response.data; return _context.abrupt("return", { imgCollectionProps: imgCollectionProps }); + case 19: _context.next = 24; break; + case 21: _context.prev = 21; _context.t0 = _context["catch"](2); console.log('err', _context.t0); + case 24: case "end": return _context.stop(); @@ -455,6 +496,7 @@ L.DistortableCollection = L.FeatureGroup.extend({ // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json recreateImagesFromJsonUrl: function recreateImagesFromJsonUrl(url) { var _this5 = this; + return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { var imageCollectionObj; return _regeneratorRuntime().wrap(function _callee2$(_context2) { @@ -462,18 +504,23 @@ L.DistortableCollection = L.FeatureGroup.extend({ switch (_context2.prev = _context2.next) { case 0: imageCollectionObj = {}; + if (!url) { _context2.next = 6; break; } + _context2.next = 4; return _this5.fetchRemoteJson(url); + case 4: imageCollectionObj = _context2.sent; return _context2.abrupt("return", imageCollectionObj); + case 6: ; return _context2.abrupt("return", imageCollectionObj); + case 8: case "end": return _context2.stop(); @@ -489,6 +536,7 @@ L.DistortableCollection = L.FeatureGroup.extend({ this.eachLayer(function (layer) { if (allImages || this.isCollected(layer)) { var sections = layer._image.src.split('/'); + var filename = sections[sections.length - 1]; var zc = layer.getCorners(); var corners = [{ @@ -521,6 +569,7 @@ L.DistortableCollection = L.FeatureGroup.extend({ return json; } }); + L.distortableCollection = function (id, options) { return new L.DistortableCollection(id, options); }; @@ -558,44 +607,57 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ }, onAdd: function onAdd(map) { var _this = this; + this._map = map; + if (!this.getElement()) { this._initImage(); } + map.on('viewreset', this._reset, this); + if (this.options.corners) { this._corners = this.options.corners; + if (map.options.zoomAnimation && L.Browser.any3d) { map.on('zoomanim', this._animateZoom, this); } - } + } // Have to wait for the image to load because need to access its w/h + - // Have to wait for the image to load because need to access its w/h L.DomEvent.on(this.getElement(), 'load', function () { _this.getPane().appendChild(_this.getElement()); + _this._initImageDimensions(); + if (_this.options.rotation) { var units = _this.options.rotation.deg >= 0 ? 'deg' : 'rad'; + _this.setAngle(_this.options.rotation[units], units); } else { _this.rotation = { deg: 0, rad: 0 }; + _this._reset(); } - /* Initialize default corners if not already set */ + + if (!_this._corners) { if (map.options.zoomAnimation && L.Browser.any3d) { map.on('zoomanim', _this._animateZoom, _this); } } - /** if there is a featureGroup, only its editable option matters */ + + var eventParents = _this._eventParents; + if (eventParents) { _this.eP = eventParents[Object.keys(eventParents)[0]]; + if (_this.eP.editable) { _this.editing.enable(); } @@ -603,6 +665,7 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ if (_this.editable) { _this.editing.enable(); } + _this.eP = null; } }); @@ -612,14 +675,15 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ singleclickoff: this._resetClickListeners, singleclick: this._singleClick }, this); - /** * custom events fired from DoubleClickLabels.js. Used to differentiate * single / dblclick to not deselect images on map dblclick. */ + if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { L.DomEvent.on(map, 'click', this.deselect, this); } + this.fire('add'); L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this); L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this); @@ -632,9 +696,11 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ singleclick: this._singleClick }, this); L.DomEvent.off(map, 'click', this.deselect, this); + if (this.editing) { this.editing.disable(); } + this.fire('remove'); L.ImageOverlay.prototype.onRemove.call(this, map); L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this); @@ -649,11 +715,13 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var imageWidth = parseInt(aspectRatio * imageHeight); var center = map.project(map.getCenter()); var offset = L.point(imageWidth, imageHeight).divideBy(2); + if (this.options.corners) { this._corners = this.options.corners; } else { this._corners = [map.unproject(center.subtract(offset)), map.unproject(center.add(L.point(offset.x, -offset.y))), map.unproject(center.add(L.point(-offset.x, offset.y))), map.unproject(center.add(offset))]; } + this._initialDimensions = { 'center': center, 'offset': offset, @@ -683,11 +751,15 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ }, deselect: function deselect() { var edit = this.editing; + if (!edit.enabled()) { return; } + edit._removeToolbar(); + edit._hideMarkers(); + this._selected = false; this.fire('deselect'); return this; @@ -695,25 +767,31 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ select: function select(e) { var edit = this.editing; var eP = this.eP; + if (!edit.enabled()) { return; } + if (e) { L.DomEvent.stopPropagation(e); - } + } // this ensures deselection of all other images, allowing us to keep collection group optional + - // this ensures deselection of all other images, allowing us to keep collection group optional this._programmaticGrouping(); + this._selected = true; + edit._addToolbar(); + edit._showMarkers(); - this.fire('select'); - // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it + this.fire('select'); // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it + if (eP && eP.anyCollected()) { this.deselect(); return; } + return this; }, _programmaticGrouping: function _programmaticGrouping() { @@ -728,9 +806,11 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ this._corners[corner] = latlng; this.setBounds(L.latLngBounds(this.getCorners())); this.fire('update'); + if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { edit._updateToolbarPos(); } + this.edited = true; return this; }, @@ -740,6 +820,7 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ } else { var exceedsTop; var exceedsBottom; + if (zoom === 0) { exceedsTop = map.project(corner).y < 2; exceedsBottom = map.project(corner).y >= 255; @@ -747,6 +828,7 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ exceedsTop = map.project(corner).y / zoom < 2; exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255; } + return exceedsTop || exceedsBottom; } }, @@ -770,9 +852,8 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var map = this._map; var zoom = map.getZoom(); var edit = this.editing; - var i = 0; + var i = 0; // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402 - // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402 for (var k in latlngObj) { if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) { // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate @@ -781,15 +862,19 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ return; } } + for (var _k in latlngObj) { this._corners[i] = latlngObj[_k]; i += 1; } + this.setBounds(L.latLngBounds(this.getCorners())); this.fire('update'); + if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { edit._updateToolbarPos(); } + this.edited = true; return this; }, @@ -798,8 +883,10 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var zoom = map.getZoom(); var edit = this.editing; var i = 0; + for (var k in pointsObj) { var corner = map.layerPointToLatLng(pointsObj[k]); + if (this._cornerExceedsMapLats(zoom, corner, map)) { // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate this.setBounds(L.latLngBounds(this.getCorners())); @@ -807,15 +894,19 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ return; } } + for (var _k2 in pointsObj) { this._corners[i] = map.layerPointToLatLng(pointsObj[_k2]); i += 1; } + this.setBounds(L.latLngBounds(this.getCorners())); this.fire('update'); + if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { edit._updateToolbarPos(); } + this.edited = true; return this; }, @@ -825,13 +916,16 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var i; var p; var scaledCorners = {}; + if (scale === 0) { return; } + for (i = 0; i < 4; i++) { p = map.project(this.getCorner(i)).subtract(center).multiplyBy(scale).add(center); scaledCorners[i] = map.unproject(p); } + this.setCorners(scaledCorners); return this; }, @@ -844,12 +938,15 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var row1y = matrix[5]; var determinant = row0x * row1y - row0y * row1x; var angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad'); + if (determinant < 0) { angle += angle < 0 ? Math.PI : -Math.PI; } + if (angle < 0) { angle = 2 * Math.PI + angle; } + return unit === 'deg' ? Math.round(L.TrigUtil.radiansToDegrees(angle)) : L.Util.formatNum(angle, 2); }, setAngle: function setAngle(angle) { @@ -867,14 +964,17 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var i; var p; var q; + if (unit === 'deg') { angle = L.TrigUtil.degreesToRadians(angle); } + for (i = 0; i < 4; i++) { p = map.project(this.getCorner(i)).subtract(center); q = L.point(Math.cos(angle) * p.x - Math.sin(angle) * p.y, Math.sin(angle) * p.x + Math.cos(angle) * p.y); corners[i] = map.unproject(q.add(center)); } + this.setCorners(corners); return this; }, @@ -884,10 +984,12 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var p; var transCorners = {}; var delta = map.project(formerPoint).subtract(map.project(newPoint)); + for (i = 0; i < 4; i++) { p = map.project(this.getCorner(i)).subtract(delta); transCorners[i] = map.unproject(p); } + this.setCorners(transCorners); }, restore: function restore() { @@ -896,16 +998,20 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var offset = this._initialDimensions.offset; var zoom = this._initialDimensions.zoom; var corners = [center.subtract(offset), center.add(L.point(offset.x, -offset.y)), center.add(L.point(-offset.x, offset.y)), center.add(offset)]; + for (var i = 0; i < 4; i++) { if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) { this.setCorner(i, map.unproject(corners[i], zoom)); } } + this.edited = false; this.fire('restore'); return this; }, + /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */ + /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */ _getTranslateString: function _getTranslateString(point) { // on WebKit browsers (Chrome/Safari/iOS Safari/Android) @@ -913,7 +1019,6 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ // makes animation smoother as it ensures HW accel is used. // Firefox 13 doesn't care // (same speed either way), Opera 12 doesn't support translate3d - var is3d = L.Browser.webkit3d; var open = 'translate' + (is3d ? '3d' : '') + '('; var close = (is3d ? ',0' : '') + ')'; @@ -923,22 +1028,27 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var map = this._map; var image = this.getElement(); var latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map); + var transformMatrix = this._calculateProjectiveTransform(latLngToLayerPoint); + var topLeft = latLngToLayerPoint(this.getCorner(0)); var warp = L.DomUtil.getMatrixString(transformMatrix); - var translation = this._getTranslateString(topLeft); + var translation = this._getTranslateString(topLeft); /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ + + image._leaflet_pos = topLeft; image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - /* Set origin to the upper-left corner rather than * the center of the image, which is the default. */ + image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0'; this.rotation.deg = this.getAngle(); this.rotation.rad = this.getAngle('rad'); }, + /* * Calculates the transform string that will be * correct *at the end* of zooming. @@ -948,15 +1058,20 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ _animateZoom: function _animateZoom(event) { var map = this._map; var image = this.getElement(); + var latLngToNewLayerPoint = function latLngToNewLayerPoint(latlng) { return map._latLngToNewLayerPoint(latlng, event.zoom, event.center); }; + var transformMatrix = this._calculateProjectiveTransform(latLngToNewLayerPoint); + var topLeft = latLngToNewLayerPoint(this.getCorner(0)); var warp = L.DomUtil.getMatrixString(transformMatrix); - var translation = this._getTranslateString(topLeft); + var translation = this._getTranslateString(topLeft); /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ + + image._leaflet_pos = topLeft; image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); }, @@ -984,10 +1099,10 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var c = []; var j; /* Convert corners to container points (i.e. cartesian coordinates). */ + for (j = 0; j < 4; j++) { c.push(latLngToCartesian(this.getCorner(j))._subtract(offset)); } - /* * This matrix describes the action of * the CSS transform on each corner of the image. @@ -999,12 +1114,16 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ * says that the upper-left corner of the image * maps to the first latlng in this._corners. */ + + return L.MatrixUtil.general2DProjection(0, 0, c[0].x, c[0].y, w, 0, c[1].x, c[1].y, 0, h, c[2].x, c[2].y, w, h, c[3].x, c[3].y); } }); + L.distortableImageOverlay = function (id, options) { return new L.DistortableImageOverlay(id, options); }; + L.Map.addInitHook(function () { if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) { L.DomUtil.addClass(this.getContainer(), 'ldi'); @@ -1020,6 +1139,7 @@ L.Map.addInitHook(function () { /***/ (function() { var _this = this; + L.DomUtil = L.DomUtil || {}; L.DistortableImage = L.DistortableImage || {}; L.distortableImage = L.DistortableImage; @@ -1036,7 +1156,9 @@ L.DistortableImage.Keymapper = L.Handler.extend({ this._container = this._buildContainer(); this._scrollWrapper = this._wrap(); this._toggler = this._createButton(); + this._setMapper(this._container, this._scrollWrapper, this._toggler); + L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this); L.DomEvent.disableClickPropagation(this._container); L.DomEvent.disableScrollPropagation(this._container); @@ -1063,8 +1185,8 @@ L.DistortableImage.Keymapper = L.Handler.extend({ toggler.innerHTML = L.IconUtil.create('keyboard_open'); toggler.setAttribute('id', 'toggle-keymapper'); toggler.setAttribute('href', '#'); - toggler.setAttribute('title', 'Show keymap'); - // Will force screen readers like VoiceOver to read this as "Show keymap - button" + toggler.setAttribute('title', 'Show keymap'); // Will force screen readers like VoiceOver to read this as "Show keymap - button" + toggler.setAttribute('role', 'button'); toggler.setAttribute('aria-label', 'Show keymap'); return toggler; @@ -1079,14 +1201,18 @@ L.DistortableImage.Keymapper = L.Handler.extend({ this._keymapper = L.control({ position: this.options.position }); + this._keymapper.onAdd = function () { container.appendChild(wrap); - wrap.insertAdjacentHTML('beforeend', '' + '
' + /* eslint-disable */ + wrap.insertAdjacentHTML('beforeend', '
' + '
' + + /* eslint-disable */ '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\xa0u
Stack up / down
q\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\xa0backspace
Export Image(s)
e
'); /* eslint-enable */ + container.appendChild(button); return container; }; + this._keymapper.addTo(this._map); }, _toggleKeymapper: function _toggleKeymapper(e) { @@ -1101,6 +1227,7 @@ L.DistortableImage.Keymapper = L.Handler.extend({ if (document.querySelector('#keymapper-iconset')) { return; } + var el = L.DomUtil.create('div', ''); el.id = 'keymapper-iconset'; el.setAttribute('hidden', 'hidden'); @@ -1110,13 +1237,15 @@ L.DistortableImage.Keymapper = L.Handler.extend({ } }); L.DistortableImage.Keymapper.addInitHook(function () { - L.DistortableImage.Keymapper.prototype._n = L.DistortableImage.Keymapper.prototype._n ? L.DistortableImage.Keymapper.prototype._n + 1 : 1; - // dont enable keymapper for mobile + L.DistortableImage.Keymapper.prototype._n = L.DistortableImage.Keymapper.prototype._n ? L.DistortableImage.Keymapper.prototype._n + 1 : 1; // dont enable keymapper for mobile + if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) { _this.enable(); + _this._injectIconSet(); } }); + L.distortableImage.keymapper = function (map, options) { return new L.DistortableImage.Keymapper(map, options); }; @@ -1129,9 +1258,8 @@ L.distortableImage.keymapper = function (map, options) { \************************************************/ /***/ (function() { -L.DistortableImage = L.DistortableImage || {}; +L.DistortableImage = L.DistortableImage || {}; // this class holds the keybindings and toolbar API for an image collection instance -// this class holds the keybindings and toolbar API for an image collection instance L.DistortableCollection.Edit = L.Handler.extend({ options: { keymap: L.distortableImage.group_action_map @@ -1148,9 +1276,11 @@ L.DistortableCollection.Edit = L.Handler.extend({ this.editActions = this.options.actions; this.runExporter = L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') || this.startExport, this); L.DomEvent.on(document, 'keydown', this._onKeyDown, this); + if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { L.DomEvent.on(map, 'click', this._decollectAll, this); } + L.DomEvent.on(map, { singleclickon: this._singleClickListeners, singleclickoff: this._resetClickListeners, @@ -1158,6 +1288,7 @@ L.DistortableCollection.Edit = L.Handler.extend({ boxcollectend: this._addCollections }, this); this._group.editable = true; + this._group.eachLayer(function (layer) { return layer.editing.enable(); }); @@ -1166,17 +1297,22 @@ L.DistortableCollection.Edit = L.Handler.extend({ var group = this._group; var map = group._map; L.DomEvent.off(document, 'keydown', this._onKeyDown, this); + if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { L.DomEvent.off(map, 'click', this._decollectAll, this); } + L.DomEvent.off(map, { singleclickon: this._singleClickListeners, singleclickoff: this._resetClickListeners, singleclick: this._singleClick, boxcollectend: this._addCollections }, this); + this._decollectAll(); + this._group.editable = false; + this._group.eachLayer(function (layer) { return layer.editing.disable(); }); @@ -1194,9 +1330,11 @@ L.DistortableCollection.Edit = L.Handler.extend({ _onKeyDown: function _onKeyDown(e) { var keymap = this.options.keymap; var handlerName = keymap[e.key]; + if (!this[handlerName]) { return; } + if (this._group.anyCollected()) { this[handlerName].call(this); } @@ -1220,6 +1358,7 @@ L.DistortableCollection.Edit = L.Handler.extend({ }, _decollectAll: function _decollectAll(e) { var oe; + if (e) { oe = e.originalEvent; } @@ -1227,86 +1366,113 @@ L.DistortableCollection.Edit = L.Handler.extend({ * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete * also prevents deselection following a click on a disabled img by differentiating it from the map */ + + if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) { return; } + this._group.eachLayer(function (layer) { L.DomUtil.removeClass(layer.getElement(), 'collected'); layer.deselect(); }); + this._removeToolbar(); + if (e) { L.DomEvent.stopPropagation(e); } }, _unlockGroup: function _unlockGroup() { var _this = this; + if (!this.hasTool(L.UnlockAction)) { return; } + this._group.eachLayer(function (layer) { if (_this._group.isCollected(layer)) { var edit = layer.editing; - edit._unlock(); - // unlock updates the layer's handles; deselect to ensure they're hidden + + edit._unlock(); // unlock updates the layer's handles; deselect to ensure they're hidden + + layer.deselect(); } }); }, _lockGroup: function _lockGroup() { var _this2 = this; + if (!this.hasTool(L.LockAction)) { return; } + this._group.eachLayer(function (layer) { if (_this2._group.isCollected(layer)) { var edit = layer.editing; - edit._lock(); - // map.addLayer also deselects the image, so we reselect here + + edit._lock(); // map.addLayer also deselects the image, so we reselect here + + L.DomUtil.addClass(layer.getElement(), 'collected'); } }); }, _addCollections: function _addCollections(e) { var _this3 = this; + var box = e.boxCollectBounds; var map = this._group._map; + this._group.eachLayer(function (layer) { var edit = layer.editing; + if (layer.isSelected()) { layer.deselect(); } + var zoom = map.getZoom(); var center = map.getCenter(); var imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1)); imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center); + if (box.intersects(imgBounds) && edit.enabled()) { if (!_this3.toolbar) { _this3._addToolbar(); } + L.DomUtil.addClass(layer.getElement(), 'collected'); } }); }, _removeGroup: function _removeGroup(e) { var _this4 = this; + if (!this.hasTool(L.DeleteAction)) { return; } + var layersToRemove = this._group._toRemove(); + var n = layersToRemove.length; + if (n === 0) { return; } + var choice = L.DomUtil.confirmDeletes(n); + if (choice) { layersToRemove.forEach(function (layer) { _this4._group.removeLayer(layer); }); + if (!this._group.anyCollected()) { this._removeToolbar(); } } + if (e) { L.DomEvent.stopPropagation(e); } @@ -1315,14 +1481,17 @@ L.DistortableCollection.Edit = L.Handler.extend({ if (!this.customCollection) { this._exportOpts.collection = undefined; } + clearInterval(this.updateInterval); }, _addToolbar: function _addToolbar() { var group = this._group; var map = group._map; + if (group.options.suppressToolbar || this.toolbar) { return; } + this.toolbar = L.distortableImage.controlBar({ actions: this.editActions, position: 'topleft' @@ -1330,6 +1499,7 @@ L.DistortableCollection.Edit = L.Handler.extend({ }, _removeToolbar: function _removeToolbar() { var map = this._group._map; + if (this.toolbar) { map.removeLayer(this.toolbar); this.toolbar = false; @@ -1345,18 +1515,25 @@ L.DistortableCollection.Edit = L.Handler.extend({ addTool: function addTool(value) { if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { this._removeToolbar(); + this.editActions.push(value); + this._addToolbar(); } + return this; }, removeTool: function removeTool(value) { var _this5 = this; + this.editActions.some(function (item, idx) { if (_this5.editActions[idx] === value) { _this5._removeToolbar(); + _this5.editActions.splice(idx, 1); + _this5._addToolbar(); + return true; } else { return false; @@ -1366,51 +1543,54 @@ L.DistortableCollection.Edit = L.Handler.extend({ }, startExport: function startExport() { var _this6 = this; + if (!this.hasTool(L.ExportAction)) { return; } + return new Promise(function (resolve) { var opts = _this6._exportOpts; opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion var statusUrl; - _this6.updateInterval = null; + _this6.updateInterval = null; // this may be overridden to update the UI to show export progress or completion - // this may be overridden to update the UI to show export progress or completion var _defaultUpdater = function _defaultUpdater(data) { - data = JSON.parse(data); - // optimization: fetch status directly from google storage: + data = JSON.parse(data); // optimization: fetch status directly from google storage: + if (data.status_url) { if (statusUrl !== data.status_url && data.status_url.match('.json')) { // if (data.status_url && data.status_url.substr(0,1) === "/") { // opts.statusUrl = opts.statusUrl + data.status_url; // } else { - statusUrl = data.status_url; - // } + statusUrl = data.status_url; // } } if (data.status === 'complete') { clearInterval(_this6.updateInterval); + if (!_this6.customCollection) { _this6._exportOpts.collection = undefined; } + resolve(); + if (data.jpg !== null) { alert('Export succeeded. ' + opts.exportUrl + data.jpg); } - } - - // TODO: update to clearInterval when status == "failed" if we update that in this file: + } // TODO: update to clearInterval when status == "failed" if we update that in this file: // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb + + console.log(data); } - }; - - // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json; + }; // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json; // this may be overridden to integrate with any UI + + var _defaultHandleStatusRes = function _defaultHandleStatusRes(data) { - statusUrl = opts.statusUrl + data; - // repeatedly fetch the status.json + statusUrl = opts.statusUrl + data; // repeatedly fetch the status.json + _this6.updateInterval = setInterval(function () { var reqOpts = { method: 'GET' @@ -1422,9 +1602,9 @@ L.DistortableCollection.Edit = L.Handler.extend({ } }).then(opts.updater); }, opts.frequency); - }; + }; // initiate the export + - // initiate the export var _defaultFetchStatusUrl = function _defaultFetchStatusUrl(mergedOpts) { var form = new FormData(); form.append('collection', JSON.stringify(mergedOpts.collection)); @@ -1440,15 +1620,18 @@ L.DistortableCollection.Edit = L.Handler.extend({ return res.text(); } }).then(mergedOpts.handleStatusRes); - }; + }; // If the user has passed collection property + - // If the user has passed collection property _this6.customCollection = !!opts.collection; + if (!_this6.customCollection) { opts.collection = _this6._group.generateExportJson().images; } + opts.frequency = opts.frequency || 3000; opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel ! + opts.updater = opts.updater || _defaultUpdater; opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes; opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl; @@ -1456,6 +1639,7 @@ L.DistortableCollection.Edit = L.Handler.extend({ }); } }); + L.distortableCollection.edit = function (group, options) { return new L.DistortableCollection.Edit(group, options); }; @@ -1468,9 +1652,8 @@ L.distortableCollection.edit = function (group, options) { \*******************************************/ /***/ (function() { -L.DistortableImage = L.DistortableImage || {}; +L.DistortableImage = L.DistortableImage || {}; // holds the keybindings & toolbar API for an individual image instance -// holds the keybindings & toolbar API for an individual image instance L.DistortableImage.Edit = L.Handler.extend({ options: { opacity: 0.5, @@ -1487,47 +1670,60 @@ L.DistortableImage.Edit = L.Handler.extend({ L.setOptions(this, options); L.distortableImage.action_map.Escape = '_deselect'; }, - /* Run on image selection. */addHooks: function addHooks() { + + /* Run on image selection. */ + addHooks: function addHooks() { var overlay = this._overlay; this.editActions = this.options.actions; - /* bring the selected image into view */ + overlay.bringToFront(); + this._initModes(); + this._initHandles(); + this._appendHandlesandDragable(); + if (overlay.isSelected() && !overlay.options.suppressToolbar) { this._addToolbar(); } + this.parentGroup = overlay.eP ? overlay.eP : false; L.DomEvent.on(overlay.getElement(), { dblclick: this.nextMode }, this); L.DomEvent.on(window, 'keydown', this._onKeyDown, this); }, - /* Run on image deselection. */removeHooks: function removeHooks() { + + /* Run on image deselection. */ + removeHooks: function removeHooks() { var overlay = this._overlay; - var eP = this.parentGroup; + var eP = this.parentGroup; // First, check if dragging exists - it may be off due to locking - // First, check if dragging exists - it may be off due to locking this._disableDragging(); + if (this.toolbar) { this._removeToolbar(); } + for (var handle in this._handles) { L.DomUtil.remove(handle); } - /** * ensures if you disable an image while it is multi-selected * additional deselection logic is run */ + + if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) { L.DomUtil.removeClass(overlay.getElement(), 'collected'); } + if (eP && !eP.anyCollected() && eP.editing.toolbar) { eP.editing._removeToolbar(); } + L.DomEvent.off(overlay.getElement(), { dblclick: this.nextMode }, this); @@ -1537,24 +1733,27 @@ L.DistortableImage.Edit = L.Handler.extend({ if (!this._enabled) { return this; } + this._overlay.deselect(); + this._enabled = false; this.removeHooks(); return this; }, _initModes: function _initModes() { - this._modes = {}; - // passed from L.DistortablImage.PopupBar. If the mode is one + this._modes = {}; // passed from L.DistortablImage.PopupBar. If the mode is one // of the current toolbar actions, adds it to this._modes + for (var mode in L.DistortableImage.Edit.MODES) { var action = L.DistortableImage.Edit.MODES[mode]; + if (this.editActions.indexOf(action) !== -1) { this._modes[mode] = action; } - } - - // sets the current mode to the 1st available one if the one selected + } // sets the current mode to the 1st available one if the one selected // during initialization is not available + + if (!this._modes[this._mode]) { this._mode = Object.keys(this._modes)[0]; } @@ -1563,33 +1762,44 @@ L.DistortableImage.Edit = L.Handler.extend({ var overlay = this._overlay; var i; this._dragHandles = L.layerGroup(); + for (i = 0; i < 4; i++) { this._dragHandles.addLayer(L.dragHandle(overlay, i)); } + this._scaleHandles = L.layerGroup(); + for (i = 0; i < 4; i++) { this._scaleHandles.addLayer(L.scaleHandle(overlay, i)); } + this._distortHandles = L.layerGroup(); + for (i = 0; i < 4; i++) { this._distortHandles.addLayer(L.distortHandle(overlay, i)); } + this._rotateHandles = L.layerGroup(); // individual rotate + for (i = 0; i < 4; i++) { this._rotateHandles.addLayer(L.rotateHandle(overlay, i)); - } + } // handle includes rotate AND scale + - // handle includes rotate AND scale this._freeRotateHandles = L.layerGroup(); + for (i = 0; i < 4; i++) { this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i)); } + this._lockHandles = L.layerGroup(); + for (i = 0; i < 4; i++) { this._lockHandles.addLayer(L.lockHandle(overlay, i, { draggable: false })); } + this._handles = { drag: this._dragHandles, scale: this._scaleHandles, @@ -1600,22 +1810,26 @@ L.DistortableImage.Edit = L.Handler.extend({ }; }, _appendHandlesandDragable: function _appendHandlesandDragable() { - var ov = this._overlay; + var ov = this._overlay; // won't throw error if user adds 0 mode actions to toolbar - // won't throw error if user adds 0 mode actions to toolbar if (!this._mode) { this._enableDragging(); + return; } + this._updateHandle(); + if (!ov.isSelected() && this.currentHandle) { this.currentHandle.eachLayer(function (handle) { handle.setOpacity(0); + if (handle.dragging) { handle.dragging.disable(); } }); } + if (!this.isMode('lock')) { this._enableDragging(); } @@ -1625,9 +1839,11 @@ L.DistortableImage.Edit = L.Handler.extend({ var handlerName = keymap[e.key]; var ov = this._overlay; var eP = this.parentGroup; + if (eP && eP.anyCollected()) { return; } + if (this[handlerName] !== undefined && !ov.options.suppressToolbar) { if (ov.isSelected() && this.toolbar) { this[handlerName].call(this); @@ -1636,22 +1852,29 @@ L.DistortableImage.Edit = L.Handler.extend({ }, replaceTool: function replaceTool(old, next) { var _this = this; + if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) { return this; } + this.editActions.some(function (item, idx) { if (item === old) { _this._removeToolbar(); + _this.editActions[idx] = next; + _this._addToolbar(); + for (var mode in L.DistortableImage.Edit.MODES) { if (L.DistortableImage.Edit.MODES[mode] === old) { delete _this._modes[mode]; + _this._nextOrNone(mode); } else if (L.DistortableImage.Edit.MODES[mode] === next) { _this._modes[mode] = next; } } + return true; } }); @@ -1660,17 +1883,22 @@ L.DistortableImage.Edit = L.Handler.extend({ addTool: function addTool(value) { if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { this._removeToolbar(); + this.editActions.push(value); + this._addToolbar(); + for (var mode in L.DistortableImage.Edit.MODES) { if (L.DistortableImage.Edit.MODES[mode] === value) { this._modes[mode] = value; } } + if (!this._overlay.isSelected()) { this._removeToolbar(); } } + return this; }, hasTool: function hasTool(value) { @@ -1680,23 +1908,31 @@ L.DistortableImage.Edit = L.Handler.extend({ }, removeTool: function removeTool(value) { var _this2 = this; + this.editActions.some(function (item, idx) { if (item === value) { _this2._removeToolbar(); + _this2.editActions.splice(idx, 1); + _this2._addToolbar(); + for (var mode in L.DistortableImage.Edit.MODES) { if (L.DistortableImage.Edit.MODES[mode] === value) { delete _this2._modes[mode]; + _this2._nextOrNone(mode); } } + return true; } }); + if (!this._overlay.isSelected()) { this._removeToolbar(); } + return this; }, // set the mode to the next mode or if that was the last one set mode to '' @@ -1708,7 +1944,9 @@ L.DistortableImage.Edit = L.Handler.extend({ if (mode === 'lock') { this._enableDragging(); } + this._mode = ''; + this._updateHandle(); } } @@ -1716,6 +1954,7 @@ L.DistortableImage.Edit = L.Handler.extend({ _removeToolbar: function _removeToolbar() { var ov = this._overlay; var map = ov._map; + if (this.toolbar) { map.removeLayer(this.toolbar); this.toolbar = false; @@ -1723,36 +1962,43 @@ L.DistortableImage.Edit = L.Handler.extend({ }, _enableDragging: function _enableDragging() { var _this3 = this; + var overlay = this._overlay; var map = overlay._map; this.dragging = new L.Draggable(overlay.getElement()); this.dragging.enable(); - /* Hide toolbars and markers while dragging; click will re-show it */ + this.dragging.on('dragstart', function () { overlay.fire('dragstart'); + _this3._removeToolbar(); }); - /* * Adjust default behavior of L.Draggable, which overwrites the CSS3 * distort transformations that we set when it calls L.DomUtil.setPosition. */ + this.dragging._updatePosition = function () { var topLeft = overlay.getCorner(0); + var delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft)); + var currentPoint; var corners = {}; var i; this.fire('predrag'); + for (i = 0; i < 4; i++) { currentPoint = map.latLngToLayerPoint(overlay.getCorner(i)); corners[i] = map.layerPointToLatLng(currentPoint.add(delta)); } + overlay.setCorners(corners); overlay.fire('drag'); this.fire('drag'); }; + this.dragging.on('dragend', function () { overlay.fire('dragend'); }); @@ -1787,34 +2033,44 @@ L.DistortableImage.Edit = L.Handler.extend({ }, _toggleOpacity: function _toggleOpacity() { var image = this._overlay.getElement(); + if (!this.hasTool(L.OpacityAction)) { return; } + this._transparent = !this._transparent; var opacity = this._transparent ? this.options.opacity : 1; L.DomUtil.setOpacity(image, opacity); image.setAttribute('opacity', opacity); + this._refresh(); }, _setOpacities: function _setOpacities(o) { var image = this._overlay.getElement(); + this._opacity = o; + if (!this.hasTool(L.OpacitiesAction)) { return; } + this._opacity < 1 ? this._transparent = true : this._transparent = false; L.DomUtil.setOpacity(image, this._opacity); image.setAttribute('opacity', this._opacity); + this._refresh(); }, _toggleBorder: function _toggleBorder() { var image = this._overlay.getElement(); + if (!this.hasTool(L.BorderAction)) { return; } + this._outlined = !this._outlined; var outline = this._outlined ? this.options.outline : 'none'; image.style.outline = outline; + this._refresh(); }, // compare this to using overlay zIndex @@ -1828,14 +2084,19 @@ L.DistortableImage.Edit = L.Handler.extend({ _removeOverlay: function _removeOverlay() { var ov = this._overlay; var eP = this.parentGroup; + if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; } + var choice = L.DomUtil.confirmDelete(); + if (!choice) { return; } + this._removeToolbar(); + if (eP) { eP.removeLayer(ov); } else { @@ -1847,45 +2108,43 @@ L.DistortableImage.Edit = L.Handler.extend({ var overlay = this._overlay; var map = overlay._map; var img = overlay.getElement(); + if (!this.hasTool(L.ExportAction)) { return; - } + } // make a new image + - // make a new image var downloadable = new Image(); downloadable.id = downloadable.id || 'tempId12345'; document.body.appendChild(downloadable); + downloadable.onload = function onLoadDownloadableImage() { var height = downloadable.height; var width = downloadable.width; var nw = map.latLngToLayerPoint(overlay.getCorner(0)); var ne = map.latLngToLayerPoint(overlay.getCorner(1)); var sw = map.latLngToLayerPoint(overlay.getCorner(2)); - var se = map.latLngToLayerPoint(overlay.getCorner(3)); - - // I think this is to move the image to the upper left corner, + var se = map.latLngToLayerPoint(overlay.getCorner(3)); // I think this is to move the image to the upper left corner, // eslint-disable-next-line max-len // jywarren: i think we may need these or the image goes off the edge of the canvas // jywarren: but these seem to break the distortion math... - // jywarren: i think it should be rejiggered so it // finds the most negative values of x and y and then // adds those to all coordinates - // nw.x -= nw.x; // ne.x -= nw.x; // se.x -= nw.x; // sw.x -= nw.x; - // nw.y -= nw.y; // ne.y -= nw.y; // se.y -= nw.y; // sw.y -= nw.y; - // run once warping is complete + downloadable.onload = function () { L.DomUtil.remove(downloadable); }; + if (window && window.hasOwnProperty('warpWebGl')) { warpWebGl(downloadable.id, [0, 0, width, 0, width, height, 0, height], [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y], true // trigger download ); @@ -1896,65 +2155,87 @@ L.DistortableImage.Edit = L.Handler.extend({ }, _stackUp: function _stackUp() { var t = this._toggledImage; + if (!t || !this.hasTool(L.StackAction)) { return; } + this._toggledImage = false; + this._overlay.bringToFront(); + this._refresh(); }, _stackDown: function _stackDown() { var t = this._toggledImage; + if (t || !this.hasTool(L.StackAction)) { return; } + this._toggledImage = true; + this._overlay.bringToBack(); + this._refresh(); }, _unlock: function _unlock() { var ov = this._overlay; var map = ov._map; var eP = this.parentGroup; + if (!this.isMode('lock')) { return; } + if (eP && !eP.isCollected(ov) || !eP) { if (!this.hasTool(L.LockAction)) { return; } } + if (this.currentHandle) { map.removeLayer(this.currentHandle); } + if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) { this._mode = ''; this.currentHandle = ''; } else { this._mode = ov.options.mode; } + this._updateHandle(); + this._enableDragging(); + this._refresh(); }, _lock: function _lock() { var ov = this._overlay; var map = ov._map; var eP = this.parentGroup; + if (this.isMode('lock')) { return; } + if (eP && !eP.isCollected(ov) || !eP) { if (!this.hasTool(L.LockAction)) { return; } } + if (this.currentHandle) { map.removeLayer(this.currentHandle); } + this._mode = 'lock'; + this._updateHandle(); + this._disableDragging(); + this._refresh(); }, _deselect: function _deselect() { @@ -1962,40 +2243,49 @@ L.DistortableImage.Edit = L.Handler.extend({ }, _showMarkers: function _showMarkers(e) { var eP = this.parentGroup; + if (!this.currentHandle) { return; - } - // only markers we want in collect interface for now is lock + } // only markers we want in collect interface for now is lock + + if (!this.isMode('lock') && eP && eP.anyCollected()) { return; } + this.currentHandle.eachLayer(function (handle) { handle.setOpacity(1); + if (handle.dragging) { handle.dragging.enable(); } + L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive'); }); }, _hideMarkers: function _hideMarkers() { var ov = this._overlay; - var eP = this.parentGroup; + var eP = this.parentGroup; // workaround for race condition w/ feature group - // workaround for race condition w/ feature group if (!this._handles) { this._initHandles(); } + if (!this.currentHandle) { return; } + if (this.isMode('lock') && eP && eP.isCollected(ov)) { return; } + this.currentHandle.eachLayer(function (handle) { handle.setOpacity(0); + if (handle.dragging) { handle.dragging.disable(); } + L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive'); }); }, @@ -2003,10 +2293,13 @@ L.DistortableImage.Edit = L.Handler.extend({ var ov = this._overlay; var map = ov._map; var mode = this.getMode(); + if (this.currentHandle) { map.removeLayer(this.currentHandle); } + this.currentHandle = mode === '' ? '' : this._handles[mode]; + if (this.currentHandle !== '') { map.addLayer(this.currentHandle); } @@ -2014,24 +2307,28 @@ L.DistortableImage.Edit = L.Handler.extend({ _addToolbar: function _addToolbar() { var ov = this._overlay; var eP = this.parentGroup; - var map = ov._map; - // Find the topmost point on the image. + var map = ov._map; // Find the topmost point on the image. + var corners = ov.getCorners(); var maxLat = -Infinity; + if (eP && eP.anyCollected()) { eP.editing._addToolbar(); + return; } + if (ov.options.suppressToolbar || this.toolbar) { return; } + for (var i = 0; i < corners.length; i++) { if (corners[i].lat > maxLat) { maxLat = corners[i].lat; } - } + } // Longitude is based on the centroid of the image. + - // Longitude is based on the centroid of the image. var raisedPoint = ov.getCenter(); raisedPoint.lat = maxLat; this.toolbar = L.distortableImage.popupBar(raisedPoint, { @@ -2043,24 +2340,27 @@ L.DistortableImage.Edit = L.Handler.extend({ if (this.toolbar) { this._removeToolbar(); } + this._addToolbar(); }, _updateToolbarPos: function _updateToolbarPos() { - var overlay = this._overlay; - // Find the topmost point on the image. + var overlay = this._overlay; // Find the topmost point on the image. + var corners = overlay.getCorners(); var toolbar = this.toolbar; var maxLat = -Infinity; + if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) { for (var i = 0; i < corners.length; i++) { if (corners[i].lat > maxLat) { maxLat = corners[i].lat; } - } + } // Longitude is based on the centroid of the image. + - // Longitude is based on the centroid of the image. var raisedPoint = overlay.getCenter(); raisedPoint.lat = maxLat; + if (!overlay.options.suppressToolbar) { this.toolbar.setLatLng(raisedPoint); } @@ -2073,6 +2373,7 @@ L.DistortableImage.Edit = L.Handler.extend({ if (!this.enabled()) { return; } + return this._mode; }, getModes: function getModes() { @@ -2082,32 +2383,43 @@ L.DistortableImage.Edit = L.Handler.extend({ if (!this.enabled()) { return false; } + return this._mode === mode; }, setMode: function setMode(newMode) { var ov = this._overlay; var eP = this.parentGroup; var mode = this.getMode(); + if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) { return; } + if (this.toolbar) { this.toolbar.clickTool(newMode); } + if (this.isMode('lock') && !this.dragging) { this._enableDragging(); } + this._mode = newMode; + if (this.isMode('lock')) { this._disableDragging(); } + this._updateHandle(); + this._refresh(); + if (eP && eP.isCollected(ov)) { ov.deselect(); } + return this; }, + /** * need to attach a stop to img dblclick or it will propagate to * the map and fire the handler that shows map location labels on map dblclick. @@ -2119,15 +2431,19 @@ L.DistortableImage.Edit = L.Handler.extend({ var idx = modesArray.indexOf(mode); var nextIdx = (idx + 1) % modesArray.length; var newMode = modesArray[nextIdx]; + if (e) { if (eP && eP.anyCollected()) { return; } + L.DomEvent.stop(e); } + return this.setMode(newMode); } }); + L.distortableImage.edit = function (overlay, options) { return new L.DistortableImage.Edit(overlay, options); }; @@ -2146,6 +2462,7 @@ L.BorderAction = L.EditAction.extend({ var mode = edit._mode; var use; var tooltip; + if (edit._outlined) { use = 'border_outer'; tooltip = overlay.options.translation.removeBorder; @@ -2153,15 +2470,15 @@ L.BorderAction = L.EditAction.extend({ use = 'border_clear'; tooltip = overlay.options.translation.addBorder; } + options = options || {}; options.toolbarIcon = { svg: true, html: use, tooltip: tooltip, className: mode === 'lock' ? 'disabled' : '' - }; + }; // conditional for disabling keybindings for this action when the image is locked. - // conditional for disabling keybindings for this action when the image is locked. L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder'; L.EditAction.prototype.initialize.call(this, map, overlay, options); }, @@ -2169,6 +2486,7 @@ L.BorderAction = L.EditAction.extend({ var edit = this._overlay.editing; L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer'); L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border'); + edit._toggleBorder(); } }); @@ -2190,14 +2508,16 @@ L.DeleteAction = L.EditAction.extend({ * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods. */ + if (edit instanceof L.DistortableImage.Edit) { - tooltip = overlay.options.translation.deleteImage; - // backspace windows / delete mac + tooltip = overlay.options.translation.deleteImage; // backspace windows / delete mac + L.DistortableImage.action_map.Backspace = edit._mode === 'lock' ? '' : '_removeOverlay'; } else { tooltip = overlay.options.translation.deleteImages; L.DistortableImage.group_action_map.Backspace = edit._mode === 'lock' ? '' : '_removeGroup'; } + options = options || {}; options.toolbarIcon = { svg: true, @@ -2209,6 +2529,7 @@ L.DeleteAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; + if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); } else { @@ -2239,6 +2560,7 @@ L.DistortAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; + edit._distortMode(); } }); @@ -2265,6 +2587,7 @@ L.DragAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; + edit._dragMode(); } }); @@ -2294,10 +2617,12 @@ L.EditAction = L.Toolbar2.Action.extend({ this._map = map; L.setOptions(this, options); L.Toolbar2.Action.prototype.initialize.call(this, options); + this._injectIconSet(); }, _createIcon: function _createIcon(toolbar, container, args) { var _this = this; + var iconOptions = this.options.toolbarIcon; var className = iconOptions.className; var edit = this._overlay.editing; @@ -2305,45 +2630,58 @@ L.EditAction = L.Toolbar2.Action.extend({ this.toolbar = toolbar; this._icon = L.DomUtil.create('li', '', container); this._link = L.DomUtil.create('a', '', this._icon); + if (iconOptions.svg) { this._link.innerHTML = L.IconUtil.create(iconOptions.html); } else { this._link.innerHTML = iconOptions.html; } + this._link.setAttribute('href', '#'); + this._link.setAttribute('title', iconOptions.tooltip); + if (style) { this._link.setAttribute('style', style); } + ; + this._link.setAttribute('role', 'button'); + L.DomUtil.addClass(this._link, this.constructor.baseClass); + if (className) { L.DomUtil.addClass(this._link, className); + if (className === 'disabled') { L.DomUtil.addClass(this._icon, className); } + if (className === edit._mode) { L.DomUtil.addClass(this._link, 'selected-mode'); } else { L.DomUtil.removeClass(this._link, 'selected-mode'); } } + L.DomEvent.on(this._link, 'click', this.enable, this); L.DomEvent.on(this._overlay, 'update', function () { var match = _this._link.innerHTML.match(/xlink:href="#restore"/); + if (match && match.length === 1) { _this._enableAction(); } }); - /* Add secondary toolbar */ + this._addSubToolbar(toolbar, this._icon, args); }, _injectIconSet: function _injectIconSet() { if (document.querySelector('#iconset')) { return; } + var el = document.createElement('div'); el.id = 'iconset'; el.setAttribute('hidden', 'hidden'); @@ -2359,6 +2697,7 @@ L.EditAction = L.Toolbar2.Action.extend({ L.DomUtil.addClass(this._link, 'disabled'); } }); + L.editAction = function (map, overlay, options) { return new L.EditAction(map, overlay, options); }; @@ -2379,6 +2718,7 @@ L.ExportAction = L.EditAction.extend({ this.isExporting = false; this.mouseLeaveSkip = true; this.isHooksExecuted = false; + if (edit instanceof L.DistortableImage.Edit) { L.DistortableImage.action_map.e = '_getExport'; tooltip = overlay.options.translation.exportImage; @@ -2386,6 +2726,7 @@ L.ExportAction = L.EditAction.extend({ L.DistortableImage.group_action_map.e = 'runExporter'; tooltip = overlay.options.translation.exportImages; } + options = options || {}; options.toolbarIcon = { svg: true, @@ -2396,17 +2737,20 @@ L.ExportAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; + if (edit instanceof L.DistortableImage.Edit) { edit._getExport(); + return; - } + } // Make sure that addHooks is executed only once, event listeners will handle the rest + - // Make sure that addHooks is executed only once, event listeners will handle the rest if (this.isHooksExecuted) { return; } else { this.isHooksExecuted = true; } + var exportTool = this._link.parentElement; this.mouseEnterHandler = this.handleMouseEnter.bind(this); this.mouseLeaveHandler = this.handleMouseLeave.bind(this); @@ -2424,6 +2768,7 @@ L.ExportAction = L.EditAction.extend({ if (this.mouseLeaveSkip) { return; } + this.resetState(); this.detachMouseEventListeners(exportTool); edit.cancelExport(); @@ -2492,6 +2837,7 @@ L.FreeRotateAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; + edit._freeRotateMode(); } }); @@ -2518,6 +2864,7 @@ L.GeolocateAction = L.EditAction.extend({ }, addHooks: function addHooks() { var image = this._overlay.getElement(); + EXIF.getData(image, L.EXIF(image)); } }); @@ -2535,6 +2882,7 @@ L.LockAction = L.EditAction.extend({ var edit = overlay.editing; var use; var tooltip; + if (edit instanceof L.DistortableImage.Edit) { L.DistortableImage.action_map.u = '_unlock'; L.DistortableImage.action_map.l = '_lock'; @@ -2545,6 +2893,7 @@ L.LockAction = L.EditAction.extend({ tooltip = overlay.options.translation.lockImages; use = 'lock'; } + options = options || {}; options.toolbarIcon = { svg: true, @@ -2556,6 +2905,7 @@ L.LockAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; + if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); } else { @@ -2573,8 +2923,8 @@ L.LockAction = L.EditAction.extend({ /***/ (function() { var opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100. - // Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers. + var subtoolbarCss = new CSSStyleSheet(); subtoolbarCss.replaceSync(".leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n "); subtoolbarCss.insertRule(".leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }"); @@ -2607,6 +2957,7 @@ L.OpacitiesToolbar2 = L.Toolbar2.extend({ }, appendToContainer: function appendToContainer(container) { var baseClass = this.constructor.baseClass + '-' + this._calculateDepth(); + var className = baseClass + ' ' + this.options.className; var Action; var action; @@ -2616,23 +2967,25 @@ L.OpacitiesToolbar2 = L.Toolbar2.extend({ var m; this._container = container; this._ul = L.DomUtil.create('ul', className, container); - this._ul.style.transform = this.options.style ? this.options.style : ''; - - // Ensure that clicks, drags, etc. don't bubble up to the map. + this._ul.style.transform = this.options.style ? this.options.style : ''; // Ensure that clicks, drags, etc. don't bubble up to the map. // These are the map events that the L.Draw.Polyline handler listens for. // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but // if only 'mouseup' is silenced, then the map gets stuck in a halfway // state because it receives a 'mousedown' event and is waiting for the // corresponding 'mouseup' event. + this._disabledEvents = ['click', 'mousemove', 'dblclick', 'mousedown', 'mouseup', 'touchstart']; + for (j = 0, m = this._disabledEvents.length; j < m; j++) { L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation); } - /* Instantiate each toolbar action and add its corresponding toolbar icon. */ + + for (i = 0, l = this.options.actions.length; i < l; i++) { Action = this._getActionConstructor(this.options.actions[i]); action = new Action(); + action._createIcon(this, this._ul, this._arguments); } } @@ -2656,7 +3009,9 @@ L.OpacitiesAction = L.EditAction.extend({ }, addHooks: function addHooks() { var _this = this; + var link = this._link; + if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) { L.DomUtil.removeClass(link, 'subtoolbar_enabled'); setTimeout(function () { @@ -2665,6 +3020,7 @@ L.OpacitiesAction = L.EditAction.extend({ } else { L.DomUtil.addClass(link, 'subtoolbar_enabled'); } + ; L.IconUtil.toggleXlink(link, 'opacities', 'cancel'); L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel'); @@ -2685,6 +3041,7 @@ L.OpacityAction = L.EditAction.extend({ var mode = edit._mode; var use; var tooltip; + if (edit._transparent) { use = 'opacity_empty'; tooltip = overlay.options.translation.makeImageOpaque; @@ -2692,6 +3049,7 @@ L.OpacityAction = L.EditAction.extend({ use = 'opacity'; tooltip = overlay.options.translation.makeImageTransparent; } + options = options || {}; options.toolbarIcon = { svg: true, @@ -2707,6 +3065,7 @@ L.OpacityAction = L.EditAction.extend({ var link = this._link; L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); + edit._toggleOpacity(); } }); @@ -2764,6 +3123,7 @@ L.RotateAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; + edit._rotateMode(); } }); @@ -2790,6 +3150,7 @@ L.ScaleAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; + edit._scaleMode(); } }); @@ -2807,6 +3168,7 @@ L.StackAction = L.EditAction.extend({ var edit = overlay.editing; var use; var tooltip; + if (edit._toggledImage) { use = 'flip_to_back'; tooltip = overlay.options.translation.stackToFront; @@ -2814,6 +3176,7 @@ L.StackAction = L.EditAction.extend({ use = 'flip_to_front'; tooltip = overlay.options.translation.stackToBack; } + options = options || {}; options.toolbarIcon = { svg: true, @@ -2829,6 +3192,7 @@ L.StackAction = L.EditAction.extend({ var edit = this._overlay.editing; L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back'); L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back'); + edit._toggleOrder(); } }); @@ -2854,6 +3218,7 @@ L.UnlockAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; + edit._unlockGroup(); } }); @@ -2872,37 +3237,38 @@ L.EXIF = function getEXIFdata(img) { console.log(EXIF.getAllTags(img)); var GPS = EXIF.getAllTags(img); var altitude; - /* If the lat/lng is available. */ + if (typeof GPS.GPSLatitude !== 'undefined' && typeof GPS.GPSLongitude !== 'undefined') { // sadly, encoded in [degrees,minutes,seconds] // primitive value = GPS.GPSLatitude[x].numerator var lat = GPS.GPSLatitude[0] + GPS.GPSLatitude[1] / 60 + GPS.GPSLatitude[2] / 3600; var lng = GPS.GPSLongitude[0] + GPS.GPSLongitude[1] / 60 + GPS.GPSLongitude[2] / 3600; + if (GPS.GPSLatitudeRef !== 'N') { lat = lat * -1; } + if (GPS.GPSLongitudeRef === 'W') { lng = lng * -1; } - } - - // Attempt to use GPS compass heading; will require + } // Attempt to use GPS compass heading; will require // some trig to calc corner points, which you can find below: - var angle = 0; - // "T" refers to "True north", so -90. + + var angle = 0; // "T" refers to "True north", so -90. + if (GPS.GPSImgDirectionRef === 'T') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); - // "M" refers to "Magnetic north" + angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); // "M" refers to "Magnetic north" } else if (GPS.GPSImgDirectionRef === 'M') { angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); } else { console.log('No compass data found'); } - console.log('Orientation:', GPS.Orientation); + console.log('Orientation:', GPS.Orientation); /* If there is orientation data -- i.e. landscape/portrait etc */ + if (GPS.Orientation === 6) { // CCW angle += Math.PI / 180 * -90; @@ -2913,8 +3279,9 @@ L.EXIF = function getEXIFdata(img) { // 180 angle += Math.PI / 180 * 180; } - /* If there is altitude data */ + + if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { // Attempt to use GPS altitude: // (may eventually need to find EXIF field of view for correction) @@ -2941,8 +3308,7 @@ L.DistortHandle = L.EditHandle.extend({ options: { TYPE: 'distort', icon: L.icon({ - iconUrl: - // eslint-disable-next-line max-len + iconUrl: // eslint-disable-next-line max-len 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==', iconSize: [32, 32], iconAnchor: [16, 16] @@ -2956,6 +3322,7 @@ L.DistortHandle = L.EditHandle.extend({ this.setLatLng(this._handled.getCorner(this._corner)); } }); + L.distortHandle = function (overlay, idx, options) { return new L.DistortHandle(overlay, idx, options); }; @@ -2988,6 +3355,7 @@ L.DragHandle = L.EditHandle.extend({ this.setLatLng(this._handled.getCorner(this._corner)); } }); + L.dragHandle = function (overlay, idx, options) { return new L.DragHandle(overlay, idx, options); }; @@ -3010,18 +3378,23 @@ L.EditHandle = L.Marker.extend({ draggable: true, zIndexOffset: 10 }; + if (options && options.hasOwnProperty('draggable')) { markerOptions.draggable = options.draggable; } + L.Marker.prototype.initialize.call(this, latlng, markerOptions); }, onAdd: function onAdd(map) { L.Marker.prototype.onAdd.call(this, map); + this._bindListeners(); + this.updateHandle(); }, onRemove: function onRemove(map) { this._unbindListeners(); + L.Marker.prototype.onRemove.call(this, map); }, _onHandleDragStart: function _onHandleDragStart() { @@ -3032,6 +3405,7 @@ L.EditHandle = L.Marker.extend({ }, _fireEdit: function _fireEdit() { this._handled.edited = true; + this._handled.fire('edit'); }, _bindListeners: function _bindListeners() { @@ -3041,7 +3415,9 @@ L.EditHandle = L.Marker.extend({ drag: this._onHandleDrag, dragend: this._onHandleDragEnd }, this); + this._handled._map.on('zoomend', this.updateHandle, this); + this._handled.on('update', this.updateHandle, this); }, _unbindListeners: function _unbindListeners() { @@ -3051,25 +3427,36 @@ L.EditHandle = L.Marker.extend({ drag: this._onHandleDrag, dragend: this._onHandleDragEnd }, this); + this._handled._map.off('zoomend', this.updateHandle, this); + this._handled.off('update', this.updateHandle, this); }, - /* Takes two latlngs and calculates the scaling difference. */_calculateScalingFactor: function _calculateScalingFactor(latlngA, latlngB) { + + /* Takes two latlngs and calculates the scaling difference. */ + _calculateScalingFactor: function _calculateScalingFactor(latlngA, latlngB) { var overlay = this._handled; var map = overlay._map; var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); var formerPoint = map.latLngToLayerPoint(latlngA); var newPoint = map.latLngToLayerPoint(latlngB); + var formerRadiusSquared = this._d2(centerPoint, formerPoint); + var newRadiusSquared = this._d2(centerPoint, newPoint); + return Math.sqrt(newRadiusSquared / formerRadiusSquared); }, - /* Distance between two points in cartesian space, squared (distance formula). */_d2: function _d2(a, b) { + + /* Distance between two points in cartesian space, squared (distance formula). */ + _d2: function _d2(a, b) { var dx = a.x - b.x; var dy = a.y - b.y; return Math.pow(dx, 2) + Math.pow(dy, 2); }, - /* Takes two latlngs and calculates the angle between them. */calculateAngleDelta: function calculateAngleDelta(latlngA, latlngB) { + + /* Takes two latlngs and calculates the angle between them. */ + calculateAngleDelta: function calculateAngleDelta(latlngA, latlngB) { var overlay = this._handled; var map = overlay._map; var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); @@ -3093,8 +3480,7 @@ L.FreeRotateHandle = L.EditHandle.extend({ options: { TYPE: 'freeRotate', icon: L.icon({ - iconUrl: - // eslint-disable-next-line max-len + iconUrl: // eslint-disable-next-line max-len 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==', iconSize: [32, 32], iconAnchor: [16, 16] @@ -3106,20 +3492,27 @@ L.FreeRotateHandle = L.EditHandle.extend({ var formerLatLng = overlay.getCorner(this._corner); var newLatLng = this.getLatLng(); var angle = this.calculateAngleDelta(formerLatLng, newLatLng); + var scale = this._calculateScalingFactor(formerLatLng, newLatLng); + if (angle !== 0) { overlay.rotateBy(angle, 'rad'); } + var edgeMinWidth = overlay.edgeMinWidth; + if (!edgeMinWidth) { edgeMinWidth = 50; - } /* just in case */ + } + /* just in case */ + var corner1 = map.latLngToContainerPoint(overlay.getCorner(0)); var corner2 = map.latLngToContainerPoint(overlay.getCorner(1)); var w = Math.abs(corner1.x - corner2.x); var h = Math.abs(corner1.y - corner2.y); var distance = Math.sqrt(w * w + h * h); + if (distance > edgeMinWidth || scale > 1) { overlay.scaleBy(scale); } else { @@ -3130,6 +3523,7 @@ L.FreeRotateHandle = L.EditHandle.extend({ this.setLatLng(this._handled.getCorner(this._corner)); } }); + L.freeRotateHandle = function (overlay, idx, options) { return new L.FreeRotateHandle(overlay, idx, options); }; @@ -3159,7 +3553,9 @@ L.LockHandle = L.EditHandle.extend({ }, _bindListeners: function _bindListeners() { var icon = this.getElement(); + L.EditHandle.prototype._bindListeners.call(this); + L.DomEvent.on(icon, { mousedown: this._tooltipOn, mouseup: this._tooltipOff @@ -3168,31 +3564,39 @@ L.LockHandle = L.EditHandle.extend({ }, _unbindListeners: function _unbindListeners() { var icon = this.getElement(); + L.EditHandle.prototype._bindListeners.call(this); + L.DomEvent.off(icon, { mousedown: this._tooltipOn, mouseup: this._tooltipOff }, this); L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this); }, - /* cannot be dragged */_onHandleDrag: function _onHandleDrag() {}, + + /* cannot be dragged */ + _onHandleDrag: function _onHandleDrag() {}, updateHandle: function updateHandle() { this.setLatLng(this._handled.getCorner(this._corner)); }, _tooltipOn: function _tooltipOn(e) { var eP = this._handled.parentGroup; var edit = eP ? eP.editing : this._handled.editing; + if (e.shiftKey) { return; } + if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { return; } + var handlesArr = edit._lockHandles; this._timer = setTimeout(L.bind(function () { if (this._timeout) { clearTimeout(this._timeout); } + if (!this.getTooltip()) { this.bindTooltip('Locked!', { permanent: true @@ -3204,32 +3608,40 @@ L.LockHandle = L.EditHandle.extend({ } }); } + this.openTooltip(); }, this), 500); }, _tooltipOff: function _tooltipOff(e) { var eP = this._handled.parentGroup; var edit = eP ? eP.editing : this._handled.editing; + if (e.shiftKey) { return; } + if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { return; } + var handlesArr = edit._lockHandles; + if (e.currentTarget === document) { handlesArr.eachLayer(function (handle) { handle.closeTooltip(); }); } + if (this._timer) { clearTimeout(this._timer); } + this._timeout = setTimeout(L.bind(function () { this.closeTooltip(); }, this), 400); } }); + L.lockHandle = function (overlay, idx, options) { return new L.LockHandle(overlay, idx, options); }; @@ -3246,8 +3658,7 @@ L.RotateHandle = L.EditHandle.extend({ options: { TYPE: 'rotate', icon: L.icon({ - iconUrl: - // eslint-disable-next-line max-len + iconUrl: // eslint-disable-next-line max-len 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==', iconSize: [32, 32], iconAnchor: [16, 16] @@ -3258,17 +3669,18 @@ L.RotateHandle = L.EditHandle.extend({ var formerLatLng = overlay.getCorner(this._corner); var newLatLng = this.getLatLng(); var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - /* * running rotation logic even for an angle delta of 0 * prevents a small, occasional marker flicker */ + overlay.rotateBy(angle, 'rad'); }, updateHandle: function updateHandle() { this.setLatLng(this._handled.getCorner(this._corner)); } }); + L.rotateHandle = function (overlay, idx, options) { return new L.RotateHandle(overlay, idx, options); }; @@ -3285,8 +3697,7 @@ L.ScaleHandle = L.EditHandle.extend({ options: { TYPE: 'scale', icon: L.icon({ - iconUrl: - // eslint-disable-next-line max-len + iconUrl: // eslint-disable-next-line max-len 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=', iconSize: [32, 32], iconAnchor: [16, 16] @@ -3298,21 +3709,26 @@ L.ScaleHandle = L.EditHandle.extend({ var edgeMinWidth = overlay.edgeMinWidth; var formerLatLng = overlay.getCorner(this._corner); var newLatLng = this.getLatLng(); - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); + var scale = this._calculateScalingFactor(formerLatLng, newLatLng); /* * checks whether the "edgeMinWidth" property is set and tracks the minimum edge length; * this enables preventing scaling to zero, but we might also add an overall scale limit */ + if (!edgeMinWidth) { edgeMinWidth = 50; - } /* just in case */ + } + /* just in case */ + + var corner1 = map.latLngToLayerPoint(overlay.getCorner(0)); var corner2 = map.latLngToLayerPoint(overlay.getCorner(1)); var w = Math.abs(corner1.x - corner2.x); var h = Math.abs(corner1.y - corner2.y); var distance = Math.sqrt(w * w + h * h); + if (distance > edgeMinWidth || scale > 1) { overlay.scaleBy(scale); /* @@ -3327,6 +3743,7 @@ L.ScaleHandle = L.EditHandle.extend({ this.setLatLng(this._handled.getCorner(this._corner)); } }); + L.scaleHandle = function (overlay, idx, options) { return new L.ScaleHandle(overlay, idx, options); }; @@ -3343,16 +3760,17 @@ L.distortableImage = L.DistortableImage || {}; L.distortableImage = L.DistortableImage; L.DistortableImage.group_action_map = {}; L.DistortableImage.ControlBar = L.Toolbar2.Control.extend({}); + L.distortableImage.controlBar = function (options) { return new L.DistortableImage.ControlBar(options); }; - /** addInitHooks run before onAdd */ + + L.DistortableCollection.addInitHook(function () { /** Default actions */ - this.ACTIONS = [L.ExportAction, L.DeleteAction, L.LockAction, L.UnlockAction]; + this.ACTIONS = [L.ExportAction, L.DeleteAction, L.LockAction, L.UnlockAction]; // all possible modes - // all possible modes L.DistortableCollection.Edit.MODES = { lock: L.LockAction, unlock: L.UnlockAction @@ -3393,24 +3811,28 @@ L.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({ }, clickTool: function clickTool(name) { var tools = this.tools(); + for (var i = 0; i < tools.length; i++) { var tool = tools.item(i).children[0]; + if (L.DomUtil.hasClass(tool, name)) { tool.click(); return tool; } } + return false; } }); + L.distortableImage.popupBar = function (latlng, options) { return new L.DistortableImage.PopupBar(latlng, options); }; + L.DistortableImageOverlay.addInitHook(function () { /** Default actions */ - this.ACTIONS = [L.DragAction, L.ScaleAction, L.DistortAction, L.RotateAction, L.FreeRotateAction, L.LockAction, L.OpacityAction, L.OpacitiesAction, L.BorderAction, L.ExportAction, L.DeleteAction]; + this.ACTIONS = [L.DragAction, L.ScaleAction, L.DistortAction, L.RotateAction, L.FreeRotateAction, L.LockAction, L.OpacityAction, L.OpacitiesAction, L.BorderAction, L.ExportAction, L.DeleteAction]; // all possible modes - // all possible modes L.DistortableImage.Edit.MODES = { drag: L.DragAction, scale: L.ScaleAction, @@ -3456,8 +3878,7 @@ L.IconSet = L.Class.extend({ /***/ (function() { L.KeymapperIconSet = L.IconSet.extend({ - _symbols: - // eslint-disable-next-line max-len + _symbols: // eslint-disable-next-line max-len '' }); @@ -3486,11 +3907,11 @@ L.Map.mergeOptions({ boxCollector: true, boxZoom: false }); - /** * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with * our `L.DistortableCollection` class instead of a zoom box. * */ + L.Map.BoxCollector = L.Map.BoxZoom.extend({ initialize: function initialize(map) { this._map = map; @@ -3525,12 +3946,14 @@ L.Map.BoxCollector = L.Map.BoxZoom.extend({ _onMouseDown: function _onMouseDown(e) { if (!e.shiftKey || e.which !== 1 && e.button !== 1) { return false; - } - - // Clear the deferred resetState if it hasn't executed yet, otherwise it + } // Clear the deferred resetState if it hasn't executed yet, otherwise it // will interrupt the interaction and orphan a box element in the container. + + this._clearDeferredResetState(); + this._resetState(); + L.DomUtil.disableTextSelection(); L.DomUtil.disableImageDrag(); this._startPoint = this._map.mouseEventToContainerPoint(e); @@ -3545,11 +3968,15 @@ L.Map.BoxCollector = L.Map.BoxZoom.extend({ this._moved = true; this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container); L.DomUtil.addClass(this._container, 'leaflet-crosshair'); + this._map.fire('boxzoomstart'); } + this._point = this._map.mouseEventToContainerPoint(e); this._bounds = L.bounds(this._startPoint, this._point); + var size = this._bounds.getSize(); + L.DomUtil.setPosition(this._box, this._bounds.min); this._box.style.width = size.x + 'px'; this._box.style.height = size.y + 'px'; @@ -3559,6 +3986,7 @@ L.Map.BoxCollector = L.Map.BoxZoom.extend({ L.DomUtil.remove(this._box); L.DomUtil.removeClass(this._container, 'leaflet-crosshair'); } + L.DomUtil.enableTextSelection(); L.DomUtil.enableImageDrag(); L.DomEvent.off(document, { @@ -3571,21 +3999,27 @@ L.Map.BoxCollector = L.Map.BoxZoom.extend({ if (e.which !== 1 && e.button !== 1) { return; } + this._finish(); + if (!this._moved) { return; - } - - // Postpone to next JS tick so internal click event handling + } // Postpone to next JS tick so internal click event handling // still see it as "moved". + + this._clearDeferredResetState(); + this._resetStateTimeout = setTimeout(L.Util.bind(this._resetState, this), 0); var bounds = L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()), this._map.containerPointToLatLng(this._bounds.getTopRight())); + var zoom = this._map.getZoom(); - var center = this._map.getCenter(); - // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344 + var center = this._map.getCenter(); // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344 + + bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center); + this._map.fire('boxcollectend', { boxCollectBounds: bounds }); @@ -3604,23 +4038,26 @@ L.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector); L.Map.mergeOptions({ doubleClickLabels: true }); - /** * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant` * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it. */ + L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ enable: function enable() { var map = this._map; + if (this._enabled) { return this; - } + } // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled. + - // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled. if (map.doubleClickZoom.enabled()) { map.doubleClickZoom.disable(); } + this._map.fire('singleclickon'); + this._enabled = true; this.addHooks(); return this; @@ -3629,18 +4066,19 @@ L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ if (!this._enabled) { return this; } + this._enabled = false; this.removeHooks(); return this; }, _fireIfSingle: function _fireIfSingle(e) { var map = this._map; - var oe = e.originalEvent; + var oe = e.originalEvent; // prevents deselection in case of box selector - // prevents deselection in case of box selector if (oe && oe.shiftKey) { return; } + map._clicked += 1; this._map._clickTimeout = setTimeout(function () { if (map._clicked === 1) { @@ -3663,9 +4101,11 @@ L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ map._clicked = 0; clearTimeout(map._clickTimeout); }, 0); + if (!labels) { return; } + if (labels.options.opacity === 1) { labels.options.opacity = 0; labels.setOpacity(0); @@ -3706,17 +4146,18 @@ L.Map.DoubleClickZoom.include({ enable: function enable() { if (this._enabled) { return this; - } + } // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first + - // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first if (this._map.doubleClickLabels) { if (this._map.doubleClickLabels.enabled()) { return this; } - } + } // signify to collection/instance classes to turn on 'singleclick' listeners + - // signify to collection/instance classes to turn on 'singleclick' listeners this._map.fire('singleclickon'); + this._enabled = true; this.addHooks(); return this; @@ -3724,22 +4165,23 @@ L.Map.DoubleClickZoom.include({ disable: function disable() { if (!this._enabled) { return this; - } + } // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners. + - // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners. this._map.fire('singleclickoff'); + this._enabled = false; this.removeHooks(); return this; }, _fireIfSingle: function _fireIfSingle(e) { var map = this._map; - var oe = e.originalEvent; + var oe = e.originalEvent; // prevents deselection in case of box selector - // prevents deselection in case of box selector if (oe && oe.shiftKey) { return; } + map._clicked += 1; this._map._clickTimeout = setTimeout(function () { if (map._clicked === 1) { @@ -3765,12 +4207,15 @@ L.Map.DoubleClickZoom.include({ map._clicked = 0; clearTimeout(map._clickTimeout); }, 0); + if (!oe) { return false; } + var oldZoom = map.getZoom(); var delta = map.options.zoomDelta; var zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta; + if (map.options.doubleClickZoom === 'center') { map.setZoom(zoom); } else { @@ -3801,32 +4246,37 @@ L.Map.include({ labelOpacity: 1, doubleClickLabels: true }, opts); + if (!opts.labels) { this.mutantOptions = L.extend(this.mutantOptions, { labelOpacity: opts.labels ? 1 : undefined, doubleClickLabels: opts.labels ? true : undefined }); } + this._googleMutant = L.tileLayer(url, { maxZoom: opts.maxZoom, maxNativeZoom: opts.maxNativeZoom, minZoom: opts.minZoom, opacity: opts.mutantOpacity }).addTo(this); + if (opts.labels) { this._addLabels(opts); - } - // shouldn't have this handler at all if there are no labels to toggle + } // shouldn't have this handler at all if there are no labels to toggle else { this.doubleClickLabels = undefined; } + return this; }, _addLabels: function _addLabels(opts) { var url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}'; + if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) { opts.labelOpacity = 1; } + this._labels = L.tileLayer(url, { attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors', subdomains: 'abcd', @@ -3837,14 +4287,16 @@ L.Map.include({ minZoom: opts.minZoom, ext: 'png' }).addTo(this); + if (this.mutantOptions.doubleClickLabels) { this.doubleClickLabels.enable(); } + return this; } -}); -// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead +}); // start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead // during initialization + L.Map.addInitHook(function () { this.doubleClickLabels.disable(); this.doubleClickZoom.enable(); @@ -3864,7 +4316,6 @@ L.DomUtil = L.extend(L.DomUtil, { }, getMatrixString: function getMatrixString(m) { var is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d; - /* * Since matrix3d takes a 4*4 matrix, we add in an empty row and column, * which act as the identity on the z-axis. @@ -3872,11 +4323,14 @@ L.DomUtil = L.extend(L.DomUtil, { * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry */ + var matrix = [m[0], m[3], 0, m[6], m[1], m[4], 0, m[7], 0, 0, 1, 0, m[2], m[5], 0, m[8]]; var str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : ''; + if (!is3d) { console.log('Your browser must support 3D CSS transforms' + 'in order to use DistortableImageOverlay.'); } + return str; }, toggleClass: function toggleClass(el, className) { @@ -3890,13 +4344,16 @@ L.DomUtil = L.extend(L.DomUtil, { if (n === 1) { return this.confirmDelete(); } + var translation = this.translation.confirmImagesDeletes; var warningMsg = ''; + if (typeof translation === 'function') { warningMsg = translation(n); } else { warningMsg = translation; } + return window.confirm(warningMsg); } }); @@ -3919,10 +4376,12 @@ L.IconUtil = { if (/^#/.test(ref)) { ref = ref.replace(/^#/, ''); } + return '' + '' + ''; }, addClassToSvg: function addClassToSvg(container, loader) { var svg = container.querySelector('svg'); + if (svg) { L.DomUtil.addClass(svg, loader); } @@ -3932,23 +4391,29 @@ L.IconUtil = { if (!/^#/.test(ref1)) { ref1 = '#' + ref1; } + if (!/^#/.test(ref2)) { ref2 = '#' + ref2; } + var use = container.querySelector('use'); + if (use) { var toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1; use.setAttribute('xlink:href', toggled); return toggled; } + return false; }, toggleTitle: function toggleTitle(container, title1, title2) { var toggled = container.getAttribute('title') === title1 ? title2 : title1; container.setAttribute('title', toggled); + if (container.hasAttribute('aria-label')) { container.setAttribute('aria-label', toggled); } + return toggled; } }; @@ -3986,15 +4451,19 @@ L.MatrixUtil = { multmm: function multmm(a, b) { var c = []; var i; + for (i = 0; i < 3; i++) { for (var j = 0; j < 3; j++) { var cij = 0; + for (var k = 0; k < 3; k++) { cij += a[3 * i + k] * b[3 * k + j]; } + c[3 * i + j] = cij; } } + return c; }, // multiply a 3*3 matrix and a 3-vector @@ -4004,9 +4473,11 @@ L.MatrixUtil = { // multiply a scalar and a 3*3 matrix multsm: function multsm(s, m) { var matrix = []; + for (var i = 0, l = m.length; i < l; i++) { matrix.push(s * m[i]); } + return matrix; }, basisToPoints: function basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) { @@ -4021,9 +4492,7 @@ L.MatrixUtil = { general2DProjection: function general2DProjection(x1s, y1s, x1d, y1d, x2s, y2s, x2d, y2d, x3s, y3s, x3d, y3d, x4s, y4s, x4d, y4d) { var s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s); var d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d); - var m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s)); - - // Normalize to the unique matrix with m[8] == 1. + var m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s)); // Normalize to the unique matrix with m[8] == 1. // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ return L.MatrixUtil.multsm(1 / m[8], m); @@ -4085,6 +4554,7 @@ L.Utils = { confirmImageDelete: 'Are you sure? This image will be permanently deleted from the map.', confirmImagesDeletes: 'Are you sure? These images will be permanently deleted from the map.' }; + if (!this.options.translation) { this.options.translation = translation; } else { @@ -4095,6 +4565,7 @@ L.Utils = { } } } + L.DomUtil.initTranslation(this.options.translation); }, getNestedVal: function getNestedVal(obj, key, nestedKey) { @@ -7080,7 +7551,7 @@ module.exports.formatError = function (err) { /******/ /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "596d30b46f68213e18b2"; } +/******/ __webpack_require__.h = function() { return "b664115763eb65292f36"; } /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ diff --git a/dist/leaflet.distortableimage.js.map b/dist/leaflet.distortableimage.js.map index 2b1544f88..828169f3d 100644 --- a/dist/leaflet.distortableimage.js.map +++ b/dist/leaflet.distortableimage.js.map @@ -1 +1 @@ -{"version":3,"file":"leaflet.distortableimage.js","mappings":";;;;;;;;;;AAAY;;AAEZ;;AAEA;AACA,mDAAmD,IAAI,SAAS,MAAM,IAAI;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB,GAAG;AACH;AACA,uBAAuB;AACvB,GAAG;AACH,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,UAAU,+BAA+B;AAChF;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;+CC9KA;AAAA;AAAA;AADA,IAAMA,GAAG,GAAG,EAAE;AACdC,CAAC,CAACC,qBAAqB,GAAGD,CAAC,CAACE,YAAY,CAACC,MAAM,CAAC;EAC9CC,OAAO,EAAE;IACPC,QAAQ,EAAE,IAAI;IACdC,UAAU,EAAE;MACVC,cAAc,EAAE,gCAAgC;MAChDC,SAAS,EAAE,yBAAyB;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;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;AChfa;AACb;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB,mBAAO,CAAC,gFAAoB;AACrD,4BAA4B,mBAAO,CAAC,sFAAuB;AAC3D,wBAAwB,mBAAO,CAAC,8EAAmB;AACnD,6CAA6C,yCAAyC,+CAA+C;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,sDAAsD;AACtD,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB,8BAA8B;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,KACiC,EAAE,EAGtC;AACL,aAAa,KAC4B,EAAE,EAGtC;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;;;;;;;;;;;ACrMD,8CAA2C,CAAC,WAAW,EAAC,CAAC,mBAAmB,EAAE,6CAA6C,qoBAAqoB,6pBAA6pB,KAAK,uBAAuB,EAAE,KAAK,UAAU,KAAK,WAAW,aAAa,aAAa,YAAY,MAAM,aAAa,SAAS,WAAW,aAAa,aAAa,YAAY,GAAG,QAAQ,UAAU,OAAO,yBAAyB,2BAA2B,yBAAyB,2BAA2B,6BAA6B,uBAAuB,6BAA6B,yBAAyB,uBAAuB,yBAAyB,yBAAyB,2BAA2B,uBAAuB,uBAAuB,uBAAuB,yBAAyB,uBAAuB,6BAA6B,yBAAyB,yBAAyB,2BAA2B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,yBAAyB,yBAAyB,2BAA2B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,6BAA6B,2BAA2B,yBAAyB,uBAAuB,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,2BAA2B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,6BAA6B,2BAA2B,yBAAyB,uBAAuB,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,6BAA6B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,yBAAyB,yBAAyB,uBAAuB,qBAAqB,qBAAqB,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,aAAa,eAAe,aAAa,YAAY,YAAY,YAAY,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,cAAc,YAAY,gBAAgB,YAAY,YAAY,YAAY,cAAc,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,eAAe,cAAc,YAAY,gBAAgB,YAAY,YAAY,YAAY,cAAc,iBAAiB,cAAc,YAAY,aAAa,eAAe,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,aAAa,cAAc,gBAAgB,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,aAAa,eAAe,aAAa,cAAc,cAAc,cAAc,aAAa,cAAc,WAAW,aAAa,YAAY,cAAc,eAAe,cAAc,aAAa,cAAc,YAAY,YAAY,WAAW,YAAY,YAAY,YAAY,eAAe,YAAY,aAAa,cAAc,WAAW,cAAc,WAAW,WAAW,YAAY,YAAY,aAAa,aAAa,aAAa,cAAc,eAAe,aAAa,aAAa,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,YAAY,eAAe,cAAc,eAAe,cAAc,MAAM,aAAa,WAAW,aAAa,cAAc,aAAa,cAAc,eAAe,YAAY,eAAe,aAAa,YAAY,aAAa,aAAa,cAAc,YAAY,YAAY,YAAY,aAAa,YAAY,eAAe,aAAa,aAAa,cAAc,cAAc,aAAa,eAAe,cAAc,aAAa,aAAa,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,eAAe,cAAc,aAAa,YAAY,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,cAAc,cAAc,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,eAAe,cAAc,aAAa,YAAY,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,eAAe,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,cAAc,aAAa,aAAa,YAAY,WAAW,WAAW,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,aAAa,eAAe,aAAa,YAAY,YAAY,YAAY,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,cAAc,YAAY,gBAAgB,YAAY,YAAY,YAAY,cAAc,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,eAAe,cAAc,YAAY,gBAAgB,YAAY,YAAY,YAAY,cAAc,iBAAiB,cAAc,YAAY,aAAa,eAAe,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,aAAa,cAAc,gBAAgB,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,aAAa,eAAe,aAAa,cAAc,cAAc,cAAc,aAAa,cAAc,WAAW,aAAa,YAAY,cAAc,eAAe,cAAc,aAAa,cAAc,YAAY,YAAY,WAAW,YAAY,YAAY,YAAY,eAAe,YAAY,aAAa,cAAc,WAAW,cAAc,WAAW,WAAW,YAAY,YAAY,aAAa,aAAa,aAAa,cAAc,eAAe,aAAa,aAAa,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,YAAY,eAAe,cAAc,eAAe,cAAc,GAAG,QAAQ,UAAU,qBAAqB,uBAAuB,6BAA6B,eAAe,2BAA2B,YAAY,YAAY,8BAA8B,cAAc,cAAc,YAAY,cAAc,aAAa,uBAAuB,2BAA2B,aAAa,gBAAgB,6BAA6B,yBAAyB,kBAAkB,aAAa,eAAe,YAAY,gBAAgB,mBAAmB,aAAa,YAAY,cAAc,eAAe,aAAa,eAAe,aAAa,yBAAyB,eAAe,YAAY,6BAA6B,gBAAgB,eAAe,6BAA6B,cAAc,gBAAgB,aAAa,gBAAgB,kBAAkB,YAAY,YAAY,kBAAkB,oBAAoB,mBAAmB,oBAAoB,iCAAiC,8BAA8B,wBAAwB,cAAc,eAAe,kBAAkB,eAAe,wBAAwB,aAAa,kBAAkB,wCAAwC,cAAc,aAAa,aAAa,eAAe,WAAW,iBAAiB,aAAa,aAAa,aAAa,eAAe,aAAa,cAAc,eAAe,YAAY,YAAY,cAAc,YAAY,0BAA0B,uBAAuB,+BAA+B,yBAAyB,yBAAyB,gBAAgB,sBAAsB,aAAa,aAAa,eAAe,iBAAiB,8BAA8B,kBAAkB,wBAAwB,wBAAwB,6BAA6B,sBAAsB,4BAA4B,iCAAiC,6BAA6B,yBAAyB,uBAAuB,sBAAsB,0BAA0B,0BAA0B,kBAAkB,qBAAqB,yBAAyB,kBAAkB,4BAA4B,0BAA0B,uBAAuB,0BAA0B,2BAA2B,wBAAwB,2BAA2B,gBAAgB,qBAAqB,kBAAkB,aAAa,gBAAgB,YAAY,uBAAuB,6BAA6B,eAAe,2BAA2B,YAAY,aAAa,YAAY,8BAA8B,gBAAgB,cAAc,yBAAyB,6BAA6B,cAAc,aAAa,iBAAiB,cAAc,mBAAmB,oBAAoB,aAAa,aAAa,YAAY,yBAAyB,eAAe,qBAAqB,YAAY,YAAY,2BAA2B,8BAA8B,aAAa,gBAAgB,mBAAmB,aAAa,aAAa,qBAAqB,cAAc,eAAe,eAAe,eAAe,cAAc,YAAY,aAAa,YAAY,YAAY,aAAa,sBAAsB,yBAAyB,yBAAyB,uBAAuB,oBAAoB,0BAA0B,qBAAqB,aAAa,YAAY,eAAe,cAAc,YAAY,cAAc,YAAY,qBAAqB,aAAa,uBAAuB,aAAa,eAAe,qBAAqB,kBAAkB,aAAa,cAAc,aAAa,6BAA6B,2BAA2B,YAAY,aAAa,YAAY,6BAA6B,WAAW,cAAc,mBAAmB,gBAAgB,YAAY,iBAAiB,qBAAqB,uBAAuB,uBAAuB,cAAc,aAAa,cAAc,aAAa,eAAe,cAAc,yBAAyB,cAAc,YAAY,YAAY,cAAc,cAAc,gBAAgB,cAAc,aAAa,aAAa,cAAc,eAAe,YAAY,YAAY,cAAc,cAAc,cAAc,qBAAqB,eAAe,eAAe,aAAa,mBAAmB,aAAa,eAAe,eAAe,YAAY,yBAAyB,kBAAkB,qBAAqB,4BAA4B,oBAAoB,0BAA0B,0BAA0B,uBAAuB,0BAA0B,kBAAkB,uBAAuB,wBAAwB,gBAAgB,qBAAqB,sBAAsB,qBAAqB,wBAAwB,0BAA0B,yBAAyB,wBAAwB,qBAAqB,wBAAwB,mBAAmB,sBAAsB,kBAAkB,uBAAuB,yBAAyB,sBAAsB,oBAAoB,iBAAiB,uBAAuB,kBAAkB,YAAY,YAAY,mBAAmB,eAAe,sBAAsB,2BAA2B,uBAAuB,sBAAsB,2BAA2B,uBAAuB,aAAa,wBAAwB,wBAAwB,aAAa,YAAY,eAAe,WAAW,YAAY,YAAY,oBAAoB,kBAAkB,YAAY,mBAAmB,aAAa,cAAc,WAAW,aAAa,eAAe,eAAe,eAAe,YAAY,4BAA4B,2BAA2B,0BAA0B,8BAA8B,6BAA6B,uBAAuB,gBAAgB,aAAa,iBAAiB,yBAAyB,aAAa,YAAY,qBAAqB,kBAAkB,6BAA6B,mBAAmB,iBAAiB,sBAAsB,mBAAmB,mBAAmB,wBAAwB,4BAA4B,2BAA2B,wBAAwB,6BAA6B,yBAAyB,wBAAwB,sBAAsB,yBAAyB,2BAA2B,8BAA8B,gBAAgB,qBAAqB,uBAAuB,oBAAoB,2BAA2B,sBAAsB,gCAAgC,2BAA2B,qBAAqB,yBAAyB,+BAA+B,0BAA0B,yBAAyB,4BAA4B,+BAA+B,wBAAwB,8BAA8B,0BAA0B,gCAAgC,kBAAkB,wBAAwB,oBAAoB,yBAAyB,+BAA+B,yBAAyB,qBAAqB,0BAA0B,iBAAiB,sBAAsB,0BAA0B,sBAAsB,uBAAuB,aAAa,8BAA8B,WAAW,cAAc,6BAA6B,2BAA2B,YAAY,eAAe,YAAY,8BAA8B,cAAc,cAAc,gBAAgB,aAAa,8BAA8B,uBAAuB,WAAW,aAAa,8BAA8B,6BAA6B,eAAe,yBAAyB,gBAAgB,kBAAkB,oBAAoB,wBAAwB,iBAAiB,YAAY,YAAY,aAAa,WAAW,kBAAkB,sBAAsB,aAAa,WAAW,iBAAiB,sBAAsB,2BAA2B,sBAAsB,cAAc,gBAAgB,mBAAmB,qBAAqB,aAAa,aAAa,yBAAyB,YAAY,cAAc,aAAa,eAAe,uBAAuB,eAAe,aAAa,aAAa,eAAe,eAAe,eAAe,YAAY,WAAW,uBAAuB,2BAA2B,6BAA6B,YAAY,YAAY,0BAA0B,mBAAmB,sBAAsB,4BAA4B,qBAAqB,2BAA2B,2BAA2B,wBAAwB,2BAA2B,mBAAmB,iBAAiB,sBAAsB,uBAAuB,sBAAsB,yBAAyB,2BAA2B,0BAA0B,yBAAyB,sBAAsB,yBAAyB,oBAAoB,uBAAuB,mBAAmB,aAAa,qBAAqB,oBAAoB,aAAa,YAAY,oBAAoB,eAAe,aAAa,eAAe,eAAe,WAAW,eAAe,eAAe,cAAc,YAAY,YAAY,wBAAwB,uBAAuB,wBAAwB,qBAAqB,cAAc,oBAAoB,aAAa,cAAc,eAAe,2BAA2B,qBAAqB,0BAA0B,uBAAuB,4BAA4B,oBAAoB,aAAa,cAAc,YAAY,eAAe,oBAAoB,iBAAiB,sBAAsB,2BAA2B,sBAAsB,iBAAiB,YAAY,YAAY,iBAAiB,sBAAsB,eAAe,2BAA2B,cAAc,cAAc,aAAa,YAAY,aAAa,eAAe,eAAe,YAAY,YAAY,mBAAmB,cAAc,mBAAmB,mBAAmB,cAAc,mBAAmB,uBAAuB,mBAAmB,aAAa,mBAAmB,aAAa,gBAAgB,6BAA6B,aAAa,iBAAiB,cAAc,eAAe,2BAA2B,YAAY,eAAe,YAAY,8BAA8B,cAAc,iBAAiB,mBAAmB,qBAAqB,yBAAyB,cAAc,kBAAkB,cAAc,aAAa,iBAAiB,mBAAmB,yBAAyB,oBAAoB,sBAAsB,cAAc,mBAAmB,gBAAgB,oBAAoB,uBAAuB,wBAAwB,aAAa,gBAAgB,cAAc,aAAa,gBAAgB,yBAAyB,cAAc,aAAa,YAAY,cAAc,eAAe,YAAY,eAAe,aAAa,oBAAoB,qBAAqB,0BAA0B,sBAAsB,sBAAsB,YAAY,cAAc,cAAc,gBAAgB,cAAc,cAAc,YAAY,cAAc,cAAc,aAAa,YAAY,aAAa,cAAc,cAAc,aAAa,aAAa,6BAA6B,cAAc,YAAY,YAAY,cAAc,cAAc,cAAc,aAAa,eAAe,eAAe,YAAY,aAAa,uBAAuB,aAAa,YAAY,aAAa,aAAa,8BAA8B,eAAe,WAAW,YAAY,aAAa,2BAA2B,2BAA2B,YAAY,2BAA2B,WAAW,YAAY,8BAA8B,gBAAgB,cAAc,cAAc,cAAc,cAAc,uBAAuB,YAAY,eAAe,aAAa,iBAAiB,aAAa,YAAY,aAAa,cAAc,eAAe,iBAAiB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,cAAc,gBAAgB,iBAAiB,eAAe,cAAc,gBAAgB,cAAc,aAAa,YAAY,YAAY,eAAe,YAAY,aAAa,aAAa,eAAe,iBAAiB,2BAA2B,aAAa,aAAa,cAAc,gBAAgB,6BAA6B,yBAAyB,iBAAiB,cAAc,aAAa,iBAAiB,oBAAoB,kBAAkB,gBAAgB,kBAAkB,eAAe,eAAe,iBAAiB,aAAa,iBAAiB,cAAc,YAAY,cAAc,eAAe,gBAAgB,gBAAgB,cAAc,eAAe,aAAa,aAAa,gBAAgB,YAAY,gBAAgB,gBAAgB,eAAe,gBAAgB,iBAAiB,kBAAkB,iBAAiB,gBAAgB,wBAAwB,sBAAsB,iBAAiB,eAAe,iBAAiB,eAAe,qBAAqB,oBAAoB,sBAAsB,0BAA0B,0BAA0B,2BAA2B,cAAc,cAAc,cAAc,cAAc,cAAc,YAAY,iBAAiB,cAAc,aAAa,aAAa,eAAe,eAAe,cAAc,cAAc,cAAc,cAAc,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,cAAc,cAAc,cAAc,aAAa,cAAc,cAAc,cAAc,cAAc,iBAAiB,gBAAgB,iBAAiB,cAAc,cAAc,cAAc,cAAc,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,6BAA6B,aAAa,eAAe,aAAa,cAAc,aAAa,eAAe,iBAAiB,aAAa,eAAe,aAAa,cAAc,cAAc,eAAe,eAAe,YAAY,eAAe,iBAAiB,eAAe,eAAe,eAAe,aAAa,eAAe,cAAc,cAAc,eAAe,6BAA6B,cAAc,cAAc,gBAAgB,aAAa,2BAA2B,gBAAgB,yBAAyB,kBAAkB,YAAY,cAAc,cAAc,kBAAkB,YAAY,YAAY,aAAa,aAAa,eAAe,wBAAwB,yBAAyB,iBAAiB,iBAAiB,mBAAmB,oBAAoB,oBAAoB,aAAa,iBAAiB,eAAe,gBAAgB,cAAc,iBAAiB,cAAc,eAAe,gBAAgB,cAAc,eAAe,aAAa,eAAe,mBAAmB,kBAAkB,aAAa,gBAAgB,eAAe,aAAa,gBAAgB,yBAAyB,eAAe,cAAc,cAAc,aAAa,cAAc,cAAc,aAAa,cAAc,cAAc,gBAAgB,gBAAgB,cAAc,cAAc,eAAe,gBAAgB,YAAY,iBAAiB,eAAe,eAAe,eAAe,cAAc,aAAa,gBAAgB,gBAAgB,oBAAoB,oBAAoB,iBAAiB,mBAAmB,6BAA6B,uBAAuB,wBAAwB,cAAc,cAAc,iBAAiB,cAAc,eAAe,aAAa,aAAa,eAAe,eAAe,aAAa,aAAa,cAAc,gBAAgB,cAAc,eAAe,YAAY,WAAW,gBAAgB,cAAc,gBAAgB,uBAAuB,cAAc,gBAAgB,eAAe,YAAY,eAAe,cAAc,aAAa,gBAAgB,oBAAoB,cAAc,YAAY,gBAAgB,cAAc,YAAY,6BAA6B,sBAAsB,eAAe,aAAa,eAAe,eAAe,eAAe,aAAa,aAAa,cAAc,iBAAiB,iBAAiB,gBAAgB,kBAAkB,uBAAuB,kBAAkB,uBAAuB,wBAAwB,yBAAyB,iBAAiB,eAAe,eAAe,aAAa,cAAc,aAAa,eAAe,cAAc,aAAa,cAAc,cAAc,cAAc,gBAAgB,aAAa,iBAAiB,cAAc,aAAa,6BAA6B,eAAe,eAAe,aAAa,2BAA2B,eAAe,YAAY,aAAa,WAAW,cAAc,YAAY,YAAY,6BAA6B,YAAY,eAAe,WAAW,iBAAiB,YAAY,YAAY,eAAe,cAAc,cAAc,iBAAiB,eAAe,eAAe,eAAe,aAAa,YAAY,aAAa,cAAc,aAAa,cAAc,eAAe,cAAc,aAAa,gBAAgB,cAAc,eAAe,gBAAgB,cAAc,mBAAmB,oBAAoB,eAAe,eAAe,cAAc,gBAAgB,iBAAiB,cAAc,cAAc,aAAa,cAAc,aAAa,YAAY,uBAAuB,yBAAyB,aAAa,aAAa,cAAc,oBAAoB,qBAAqB,sBAAsB,YAAY,eAAe,eAAe,cAAc,eAAe,YAAY,eAAe,cAAc,cAAc,cAAc,cAAc,aAAa,aAAa,gBAAgB,aAAa,cAAc,iBAAiB,6BAA6B,eAAe,6BAA6B,eAAe,eAAe,eAAe,eAAe,eAAe,6BAA6B,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,cAAc,cAAc,aAAa,YAAY,YAAY,eAAe,cAAc,eAAe,YAAY,eAAe,cAAc,YAAY,aAAa,WAAW,YAAY,YAAY,aAAa,iBAAiB,YAAY,cAAc,eAAe,gBAAgB,iBAAiB,aAAa,gBAAgB,YAAY,YAAY,YAAY,cAAc,aAAa,WAAW,YAAY,YAAY,YAAY,YAAY,aAAa,iBAAiB,YAAY,aAAa,cAAc,cAAc,aAAa,eAAe,aAAa,aAAa,cAAc,cAAc,qBAAqB,aAAa,cAAc,cAAc,eAAe,gBAAgB,kBAAkB,eAAe,eAAe,kBAAkB,mBAAmB,gBAAgB,eAAe,kBAAkB,cAAc,cAAc,eAAe,aAAa,eAAe,eAAe,aAAa,gBAAgB,cAAc,aAAa,cAAc,eAAe,kBAAkB,eAAe,eAAe,YAAY,kBAAkB,iBAAiB,cAAc,eAAe,sBAAsB,uBAAuB,aAAa,gBAAgB,aAAa,gBAAgB,eAAe,eAAe,eAAe,6BAA6B,WAAW,2BAA2B,YAAY,aAAa,2BAA2B,YAAY,YAAY,8BAA8B,WAAW,eAAe,cAAc,eAAe,cAAc,cAAc,cAAc,cAAc,iBAAiB,iBAAiB,cAAc,aAAa,cAAc,WAAW,eAAe,cAAc,iBAAiB,eAAe,YAAY,eAAe,iBAAiB,iBAAiB,iBAAiB,gBAAgB,aAAa,cAAc,aAAa,cAAc,cAAc,6BAA6B,aAAa,cAAc,cAAc,gBAAgB,cAAc,eAAe,cAAc,WAAW,eAAe,cAAc,yBAAyB,cAAc,YAAY,YAAY,eAAe,aAAa,cAAc,gBAAgB,cAAc,cAAc,eAAe,eAAe,YAAY,YAAY,gBAAgB,aAAa,aAAa,aAAa,cAAc,eAAe,aAAa,eAAe,cAAc,WAAW,YAAY,aAAa,eAAe,iBAAiB,eAAe,eAAe,aAAa,cAAc,eAAe,YAAY,2BAA2B,aAAa,cAAc,gBAAgB,eAAe,eAAe,eAAe,eAAe,gBAAgB,eAAe,YAAY,eAAe,aAAa,cAAc,eAAe,cAAc,eAAe,IAAI,WAAW,cAAc,gBAAgB,gBAAgB,eAAe,eAAe,cAAc,aAAa,IAAI,QAAQ,aAAa,cAAc,eAAe,gBAAgB,iBAAiB,aAAa,WAAW,kBAAkB,sBAAsB,wBAAwB,sBAAsB,uBAAuB,uBAAuB,wBAAwB,0BAA0B,4BAA4B,uBAAuB,YAAY,YAAY,aAAa,iBAAiB,YAAY,cAAc,eAAe,gBAAgB,iBAAiB,aAAa,gBAAgB,mBAAmB,gBAAgB,kBAAkB,mBAAmB,gBAAgB,gBAAgB,eAAe,eAAe,YAAY,YAAY,YAAY,cAAc,cAAc,eAAe,cAAc,aAAa,WAAW,cAAc,iBAAiB,eAAe,cAAc,eAAe,eAAe,mBAAmB,YAAY,aAAa,iBAAiB,YAAY,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,sBAAsB,2BAA2B,mBAAmB,uBAAuB,sBAAsB,uBAAuB,cAAc,aAAa,gBAAgB,gBAAgB,eAAe,eAAe,YAAY,gBAAgB,aAAa,aAAa,eAAe,cAAc,iBAAiB,cAAc,eAAe,YAAY,cAAc,eAAe,aAAa,aAAa,aAAa,cAAc,cAAc,aAAa,cAAc,eAAe,eAAe,qBAAqB,aAAa,cAAc,cAAc,eAAe,eAAe,eAAe,gBAAgB,eAAe,aAAa,cAAc,cAAc,iBAAiB,gBAAgB,kBAAkB,cAAc,eAAe,yBAAyB,aAAa,aAAa,gBAAgB,YAAY,eAAe,mBAAmB,mBAAmB,iBAAiB,eAAe,eAAe,YAAY,cAAc,sBAAsB,YAAY,aAAa,2BAA2B,YAAY,eAAe,eAAe,6BAA6B,cAAc,eAAe,eAAe,gBAAgB,aAAa,aAAa,eAAe,eAAe,aAAa,YAAY,aAAa,gBAAgB,WAAW,iBAAiB,cAAc,YAAY,aAAa,cAAc,oBAAoB,wBAAwB,YAAY,aAAa,cAAc,qBAAqB,eAAe,eAAe,cAAc,eAAe,aAAa,aAAa,aAAa,eAAe,eAAe,gBAAgB,cAAc,gBAAgB,iBAAiB,yBAAyB,cAAc,gBAAgB,cAAc,eAAe,eAAe,cAAc,iBAAiB,cAAc,YAAY,cAAc,WAAW,cAAc,eAAe,cAAc,gBAAgB,cAAc,gBAAgB,eAAe,cAAc,gBAAgB,gBAAgB,YAAY,aAAa,aAAa,aAAa,cAAc,mBAAmB,cAAc,eAAe,YAAY,aAAa,cAAc,cAAc,cAAc,WAAW,YAAY,aAAa,YAAY,aAAa,cAAc,YAAY,eAAe,aAAa,YAAY,mBAAmB,wBAAwB,aAAa,cAAc,mBAAmB,cAAc,eAAe,cAAc,YAAY,cAAc,eAAe,aAAa,aAAa,wBAAwB,cAAc,eAAe,kBAAkB,iBAAiB,gBAAgB,gBAAgB,cAAc,gBAAgB,gBAAgB,gBAAgB,aAAa,kBAAkB,eAAe,eAAe,iBAAiB,YAAY,eAAe,aAAa,eAAe,gBAAgB,eAAe,cAAc,eAAe,gBAAgB,qBAAqB,cAAc,eAAe,YAAY,eAAe,aAAa,cAAc,mBAAmB,uBAAuB,aAAa,cAAc,eAAe,cAAc,cAAc,gBAAgB,gBAAgB,aAAa,cAAc,eAAe,gBAAgB,mBAAmB,mBAAmB,eAAe,gBAAgB,cAAc,cAAc,eAAe,gBAAgB,mBAAmB,mBAAmB,cAAc,6BAA6B,aAAa,sBAAsB,wBAAwB,uBAAuB,yBAAyB,WAAW,YAAY,eAAe,cAAc,eAAe,eAAe,aAAa,gBAAgB,aAAa,cAAc,iBAAiB,eAAe,aAAa,cAAc,iBAAiB,gBAAgB,gBAAgB,eAAe,eAAe,eAAe,cAAc,gBAAgB,eAAe,WAAW,6BAA6B,aAAa,aAAa,2BAA2B,YAAY,cAAc,eAAe,aAAa,aAAa,eAAe,cAAc,cAAc,YAAY,cAAc,6BAA6B,YAAY,cAAc,YAAY,aAAa,cAAc,cAAc,gBAAgB,cAAc,YAAY,cAAc,cAAc,gBAAgB,aAAa,eAAe,aAAa,cAAc,cAAc,cAAc,WAAW,cAAc,YAAY,cAAc,gBAAgB,yBAAyB,yBAAyB,eAAe,aAAa,gBAAgB,YAAY,aAAa,6BAA6B,aAAa,6BAA6B,eAAe,iBAAiB,yBAAyB,cAAc,YAAY,yBAAyB,iBAAiB,eAAe,cAAc,aAAa,YAAY,eAAe,eAAe,eAAe,aAAa,gBAAgB,YAAY,aAAa,aAAa,eAAe,cAAc,WAAW,kBAAkB,YAAY,eAAe,gBAAgB,eAAe,aAAa,iBAAiB,cAAc,gBAAgB,eAAe,eAAe,cAAc,6BAA6B,gBAAgB,gBAAgB,WAAW,iBAAiB,aAAa,4BAA4B,WAAW,YAAY,aAAa,cAAc,YAAY,aAAa,mBAAmB,oBAAoB,eAAe,oBAAoB,iBAAiB,iBAAiB,gBAAgB,cAAc,eAAe,aAAa,cAAc,eAAe,aAAa,iBAAiB,iBAAiB,iBAAiB,aAAa,eAAe,cAAc,eAAe,aAAa,aAAa,eAAe,YAAY,cAAc,aAAa,gBAAgB,aAAa,qBAAqB,gBAAgB,cAAc,gBAAgB,yBAAyB,cAAc,aAAa,eAAe,cAAc,aAAa,aAAa,gBAAgB,cAAc,iBAAiB,aAAa,cAAc,cAAc,eAAe,2BAA2B,aAAa,eAAe,cAAc,gBAAgB,cAAc,eAAe,eAAe,eAAe,eAAe,gBAAgB,eAAe,cAAc,eAAe,cAAc,kBAAkB,cAAc,cAAc,eAAe,IAAI,WAAW,cAAc,gBAAgB,gBAAgB,eAAe,eAAe,cAAc,aAAa,IAAI,QAAQ,aAAa,gBAAgB,cAAc,eAAe,aAAa,aAAa,gBAAgB,iBAAiB,cAAc,aAAa,uBAAuB,eAAe,eAAe,YAAY,eAAe,cAAc,eAAe,YAAY,aAAa,mBAAmB,uBAAuB,yBAAyB,uBAAuB,wBAAwB,0BAA0B,yBAAyB,wBAAwB,wBAAwB,aAAa,qBAAqB,cAAc,cAAc,YAAY,eAAe,mBAAmB,cAAc,cAAc,cAAc,cAAc,cAAc,aAAa,gBAAgB,gBAAgB,aAAa,eAAe,iBAAiB,cAAc,eAAe,aAAa,aAAa,aAAa,cAAc,eAAe,eAAe,eAAe,aAAa,cAAc,cAAc,iBAAiB,gBAAgB,WAAW,eAAe,cAAc,WAAW,YAAY,aAAa,eAAe,cAAc,YAAY,eAAe,cAAc,aAAa,cAAc,eAAe,iBAAiB,cAAc,YAAY,aAAa,cAAc,cAAc,cAAc,eAAe,cAAc,gBAAgB,yBAAyB,aAAa,IAAI,WAAW,iBAAiB,cAAc,aAAa,YAAY,gBAAgB,cAAc,eAAe,aAAa,iBAAiB,sBAAsB,uBAAuB,cAAc,eAAe,eAAe,YAAY,eAAe,aAAa,cAAc,aAAa,cAAc,aAAa,cAAc,cAAc,gBAAgB,gBAAgB,cAAc,sBAAsB,eAAe,iBAAiB,aAAa,cAAc,YAAY,aAAa,cAAc,gBAAgB,YAAY,aAAa,eAAe,aAAa,gBAAgB,kBAAkB,aAAa,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,iBAAiB,mBAAmB,cAAc,eAAe,iBAAiB,mBAAmB,YAAY,eAAe,eAAe,aAAa,cAAc,aAAa,gBAAgB,eAAe,eAAe,aAAa,cAAc,wBAAwB,oBAAoB,cAAc,YAAY,aAAa,eAAe,aAAa,gBAAgB,gBAAgB,cAAc,cAAc,gBAAgB,gBAAgB,eAAe,iBAAiB,kBAAkB,kBAAkB,mBAAmB,eAAe,eAAe,eAAe,aAAa,mBAAmB,oBAAoB,eAAe,oBAAoB,iBAAiB,iBAAiB,gBAAgB,YAAY,aAAa,yBAAyB,yBAAyB,yBAAyB,YAAY,aAAa,eAAe,gBAAgB,aAAa,gBAAgB,gBAAgB,gBAAgB,gBAAgB,gBAAgB,cAAc,cAAc,gBAAgB,eAAe,iBAAiB,kBAAkB,kBAAkB,mBAAmB,eAAe,eAAe,eAAe,cAAc,eAAe,cAAc,gBAAgB,eAAe,2BAA2B,eAAe,YAAY,aAAa,eAAe,eAAe,YAAY,aAAa,eAAe,YAAY,gBAAgB,kBAAkB,cAAc,iBAAiB,eAAe,oBAAoB,iBAAiB,eAAe,cAAc,eAAe,2BAA2B,cAAc,2BAA2B,eAAe,iBAAiB,eAAe,aAAa,aAAa,YAAY,eAAe,eAAe,aAAa,iBAAiB,aAAa,eAAe,cAAc,iBAAiB,qBAAqB,qBAAqB,uBAAuB,kBAAkB,sBAAsB,wBAAwB,eAAe,aAAa,iBAAiB,gBAAgB,cAAc,gBAAgB,iBAAiB,aAAa,cAAc,cAAc,eAAe,cAAc,yBAAyB,0BAA0B,aAAa,aAAa,6BAA6B,aAAa,cAAc,eAAe,2BAA2B,YAAY,cAAc,eAAe,cAAc,eAAe,YAAY,8BAA8B,cAAc,cAAc,cAAc,eAAe,iBAAiB,eAAe,cAAc,cAAc,uBAAuB,cAAc,aAAa,iBAAiB,oBAAoB,sBAAsB,uBAAuB,cAAc,aAAa,cAAc,gBAAgB,mBAAmB,eAAe,iBAAiB,eAAe,cAAc,cAAc,aAAa,eAAe,eAAe,aAAa,cAAc,cAAc,yBAAyB,gBAAgB,aAAa,aAAa,cAAc,cAAc,eAAe,mBAAmB,iBAAiB,mBAAmB,eAAe,cAAc,kBAAkB,aAAa,eAAe,iBAAiB,qBAAqB,uBAAuB,sBAAsB,uBAAuB,kBAAkB,wBAAwB,yBAAyB,YAAY,cAAc,YAAY,eAAe,cAAc,eAAe,eAAe,aAAa,YAAY,eAAe,cAAc,eAAe,cAAc,eAAe,cAAc,aAAa,gBAAgB,gBAAgB,gBAAgB,gBAAgB,iBAAiB,cAAc,eAAe,cAAc,eAAe,eAAe,YAAY,cAAc,YAAY,WAAW,eAAe,aAAa,cAAc,cAAc,aAAa,cAAc,YAAY,eAAe,cAAc,WAAW,cAAc,cAAc,aAAa,aAAa,cAAc,aAAa,gBAAgB,eAAe,cAAc,cAAc,aAAa,gBAAgB,eAAe,cAAc,aAAa,eAAe,6BAA6B,aAAa,cAAc,YAAY,uBAAuB,YAAY,cAAc,aAAa,cAAc,cAAc,yBAAyB,eAAe,eAAe,YAAY,aAAa,eAAe,aAAa,YAAY,cAAc,gBAAgB,aAAa,cAAc,aAAa,aAAa,MAAM,aAAa,YAAY,YAAY,eAAe,eAAe,cAAc,YAAY,aAAa,eAAe,cAAc,cAAc,YAAY,cAAc,cAAc,WAAW,cAAc,cAAc,gBAAgB,eAAe,aAAa,eAAe,aAAa,uBAAuB,YAAY,gBAAgB,eAAe,aAAa,aAAa,cAAc,cAAc,aAAa,aAAa,aAAa,eAAe,YAAY,WAAW,YAAY,eAAe,eAAe,cAAc,gBAAgB,aAAa,cAAc,eAAe,YAAY,aAAa,eAAe,cAAc,eAAe,iBAAiB,eAAe,eAAe,mBAAmB,eAAe,cAAc,8BAA8B,aAAa,kBAAkB,eAAe,iBAAiB,cAAc,cAAc,YAAY,gBAAgB,iBAAiB,aAAa,aAAa,aAAa,gBAAgB,aAAa,sBAAsB,eAAe,YAAY,cAAc,cAAc,aAAa,cAAc,YAAY,cAAc,cAAc,cAAc,gBAAgB,WAAW,cAAc,YAAY,eAAe,cAAc,aAAa,aAAa,YAAY,cAAc,cAAc,cAAc,aAAa,cAAc,aAAa,aAAa,aAAa,kBAAkB,qBAAqB,cAAc,kBAAkB,4BAA4B,0BAA0B,cAAc,0BAA0B,2BAA2B,yBAAyB,2BAA2B,YAAY,mBAAmB,cAAc,eAAe,YAAY,YAAY,eAAe,eAAe,cAAc,YAAY,aAAa,aAAa,eAAe,cAAc,cAAc,yBAAyB,6BAA6B,cAAc,cAAc,gBAAgB,cAAc,aAAa,cAAc,oBAAoB,aAAa,YAAY,aAAa,cAAc,qBAAqB,YAAY,aAAa,0BAA0B,aAAa,cAAc,eAAe,aAAa,aAAa,WAAW,cAAc,eAAe,eAAe,eAAe,cAAc,YAAY,aAAa,aAAa,YAAY,cAAc,YAAY,kBAAkB,aAAa,uBAAuB,gBAAgB,YAAY,eAAe,cAAc,WAAW,eAAe,cAAc,YAAY,cAAc,sBAAsB,eAAe,oBAAoB,aAAa,eAAe,eAAe,aAAa,cAAc,aAAa,eAAe,cAAc,YAAY,aAAa,iBAAiB,eAAe,cAAc,WAAW,YAAY,YAAY,aAAa,WAAW,WAAW,cAAc,cAAc,aAAa,iBAAiB,eAAe,cAAc,aAAa,cAAc,YAAY,aAAa,cAAc,cAAc,eAAe,cAAc,aAAa,aAAa,cAAc,eAAe,YAAY,aAAa,cAAc,cAAc,aAAa,WAAW,eAAe,eAAe,aAAa,eAAe,yBAAyB,eAAe,eAAe,YAAY,eAAe,cAAc,cAAc,cAAc,cAAc,cAAc,0BAA0B,wBAAwB,0BAA0B,eAAe,uBAAuB,wBAAwB,cAAc,mBAAmB,sBAAsB,cAAc,wBAAwB,uBAAuB,yBAAyB,wBAAwB,sBAAsB,wBAAwB,cAAc,sBAAsB,kBAAkB,aAAa,WAAW,iBAAiB,YAAY,aAAa,aAAa,WAAW,cAAc,eAAe,cAAc,cAAc,cAAc,cAAc,gBAAgB,gBAAgB,YAAY,eAAe,WAAW,YAAY,YAAY,oBAAoB,eAAe,aAAa,WAAW,cAAc,WAAW,aAAa,eAAe,eAAe,eAAe,YAAY,uBAAuB,iBAAiB,aAAa,gBAAgB,aAAa,iBAAiB,YAAY,eAAe,kBAAkB,cAAc,gBAAgB,WAAW,eAAe,gBAAgB,aAAa,aAAa,eAAe,cAAc,aAAa,cAAc,cAAc,eAAe,gBAAgB,sBAAsB,4BAA4B,wBAAwB,YAAY,aAAa,aAAa,cAAc,cAAc,cAAc,iCAAiC,2BAA2B,cAAc,iBAAiB,eAAe,gBAAgB,uBAAuB,6BAA6B,yBAAyB,yBAAyB,gBAAgB,2BAA2B,gBAAgB,eAAe,kBAAkB,cAAc,iBAAiB,eAAe,0BAA0B,eAAe,kBAAkB,aAAa,eAAe,cAAc,gBAAgB,cAAc,cAAc,eAAe,WAAW,cAAc,eAAe,cAAc,YAAY,eAAe,aAAa,eAAe,cAAc,YAAY,gBAAgB,cAAc,cAAc,cAAc,WAAW,cAAc,eAAe,eAAe,eAAe,aAAa,cAAc,kBAAkB,aAAa,wBAAwB,aAAa,YAAY,aAAa,YAAY,WAAW,WAAW,eAAe,WAAW,aAAa,eAAe,oBAAoB,cAAc,cAAc,aAAa,cAAc,cAAc,YAAY,aAAa,aAAa,kBAAkB,cAAc,iBAAiB,YAAY,eAAe,aAAa,0BAA0B,eAAe,eAAe,eAAe,YAAY,iBAAiB,YAAY,cAAc,cAAc,YAAY,eAAe,cAAc,cAAc,cAAc,cAAc,cAAc,2BAA2B,yBAAyB,2BAA2B,eAAe,cAAc,eAAe,uBAAuB,cAAc,yBAAyB,wBAAwB,0BAA0B,yBAAyB,uBAAuB,yBAAyB,uBAAuB,uBAAuB,cAAc,qBAAqB,cAAc,gBAAgB,YAAY,oBAAoB,eAAe,aAAa,eAAe,eAAe,WAAW,eAAe,eAAe,cAAc,YAAY,aAAa,gBAAgB,cAAc,eAAe,cAAc,cAAc,eAAe,cAAc,iBAAiB,mBAAmB,iBAAiB,mBAAmB,cAAc,cAAc,eAAe,eAAe,iBAAiB,aAAa,eAAe,oBAAoB,gBAAgB,YAAY,eAAe,eAAe,iBAAiB,cAAc,cAAc,cAAc,aAAa,aAAa,YAAY,eAAe,eAAe,YAAY,aAAa,kBAAkB,cAAc,oBAAoB,eAAe,eAAe,cAAc,aAAa,cAAc,cAAc,aAAa,cAAc,eAAe,eAAe,aAAa,iBAAiB,cAAc,eAAe,cAAc,YAAY,eAAe,aAAa,eAAe,cAAc,aAAa,mBAAmB,aAAa,yBAAyB,aAAa,cAAc,cAAc,cAAc,mBAAmB,cAAc,aAAa,cAAc,aAAa,iBAAiB,gBAAgB,gBAAgB,cAAc,gBAAgB,cAAc,cAAc,eAAe,aAAa,cAAc,aAAa,YAAY,cAAc,eAAe,aAAa,aAAa,aAAa,aAAa,0BAA0B,eAAe,eAAe,aAAa,cAAc,cAAc,eAAe,cAAc,eAAe,aAAa,cAAc,cAAc,aAAa,WAAW,cAAc,cAAc,aAAa,aAAa,aAAa,eAAe,cAAc,YAAY,aAAa,cAAc,cAAc,aAAa,aAAa,eAAe,eAAe,YAAY,aAAa,aAAa,eAAe,iBAAiB,cAAc,eAAe,eAAe,eAAe,aAAa,YAAY,cAAc,YAAY,cAAc,aAAa,eAAe,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,aAAa,iBAAiB,aAAa,cAAc,aAAa,sBAAsB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,cAAc,gBAAgB,iBAAiB,eAAe,gBAAgB,cAAc,cAAc,YAAY,eAAe,iBAAiB,aAAa,aAAa,cAAc,cAAc,eAAe,eAAe,aAAa,cAAc,aAAa,cAAc,cAAc,eAAe,aAAa,cAAc,eAAe,iBAAiB,iBAAiB,YAAY,eAAe,gBAAgB,aAAa,aAAa,cAAc,aAAa,cAAc,cAAc,eAAe,eAAe,eAAe,cAAc,cAAc,cAAc,eAAe,cAAc,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,aAAa,iBAAiB,aAAa,cAAc,eAAe,cAAc,cAAc,cAAc,cAAc,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,eAAe,cAAc,cAAc,cAAc,cAAc,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,cAAc,cAAc,cAAc,iBAAiB,eAAe,cAAc,eAAe,YAAY,eAAe,iBAAiB,eAAe,eAAe,eAAe,cAAc,cAAc,cAAc,eAAe,eAAe,cAAc,cAAc,gBAAgB,aAAa,gBAAgB,aAAa,aAAa,aAAa,kBAAkB,YAAY,YAAY,aAAa,aAAa,aAAa,cAAc,cAAc,WAAW,aAAa,aAAa,cAAc,iBAAiB,eAAe,gBAAgB,iBAAiB,cAAc,cAAc,eAAe,mBAAmB,gBAAgB,cAAc,eAAe,cAAc,cAAc,cAAc,aAAa,cAAc,aAAa,cAAc,cAAc,gBAAgB,gBAAgB,oBAAoB,oBAAoB,uBAAuB,gBAAgB,YAAY,iBAAiB,eAAe,eAAe,eAAe,cAAc,cAAc,wBAAwB,gBAAgB,cAAc,cAAc,eAAe,cAAc,eAAe,aAAa,eAAe,eAAe,eAAe,cAAc,eAAe,YAAY,uBAAuB,cAAc,YAAY,cAAc,gBAAgB,eAAe,aAAa,cAAc,eAAe,cAAc,eAAe,eAAe,aAAa,iBAAiB,eAAe,aAAa,cAAc,aAAa,eAAe,eAAe,cAAc,iBAAiB,eAAe,cAAc,aAAa,aAAa,eAAe,cAAc,qBAAqB,gBAAgB,aAAa,iBAAiB,eAAe,eAAe,eAAe,eAAe,cAAc,gBAAgB,YAAY,aAAa,sBAAsB,aAAa,WAAW,eAAe,mBAAmB,eAAe,WAAW,iBAAiB,YAAY,oBAAoB,eAAe,cAAc,mBAAmB,eAAe,eAAe,aAAa,YAAY,aAAa,cAAc,cAAc,aAAa,eAAe,cAAc,gBAAgB,mBAAmB,eAAe,gBAAgB,gBAAgB,iBAAiB,qBAAqB,cAAc,aAAa,YAAY,YAAY,aAAa,aAAa,aAAa,YAAY,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,aAAa,aAAa,cAAc,cAAc,aAAa,cAAc,kBAAkB,cAAc,iBAAiB,aAAa,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,cAAc,eAAe,cAAc,mBAAmB,eAAe,cAAc,kBAAkB,eAAe,cAAc,YAAY,aAAa,cAAc,eAAe,gBAAgB,iBAAiB,cAAc,eAAe,aAAa,cAAc,aAAa,YAAY,YAAY,YAAY,cAAc,iBAAiB,aAAa,cAAc,cAAc,aAAa,cAAc,cAAc,aAAa,cAAc,eAAe,eAAe,gBAAgB,eAAe,cAAc,eAAe,gBAAgB,4BAA4B,eAAe,cAAc,kBAAkB,aAAa,eAAe,aAAa,eAAe,eAAe,cAAc,eAAe,eAAe,eAAe,cAAc,eAAe,cAAc,eAAe,eAAe,eAAe,cAAc,YAAY,aAAa,cAAc,aAAa,eAAe,aAAa,aAAa,eAAe,cAAc,cAAc,cAAc,eAAe,aAAa,cAAc,eAAe,cAAc,iBAAiB,iBAAiB,iBAAiB,cAAc,aAAa,cAAc,cAAc,aAAa,eAAe,cAAc,cAAc,gBAAgB,cAAc,eAAe,eAAe,cAAc,aAAa,cAAc,YAAY,aAAa,cAAc,cAAc,cAAc,eAAe,cAAc,cAAc,iBAAiB,eAAe,YAAY,aAAa,eAAe,aAAa,aAAa,cAAc,cAAc,eAAe,cAAc,mBAAmB,aAAa,eAAe,iBAAiB,eAAe,cAAc,mBAAmB,cAAc,gBAAgB,eAAe,sBAAsB,eAAe,gBAAgB,sBAAsB,YAAY,eAAe,aAAa,eAAe,cAAc,cAAc,IAAI,SAAS,aAAa,cAAc,gBAAgB,gBAAgB,eAAe,eAAe,YAAY,aAAa,gBAAgB,iBAAiB,aAAa,YAAY,cAAc,eAAe,cAAc,eAAe,gBAAgB,iBAAiB,cAAc,eAAe,cAAc,eAAe,aAAa,YAAY,eAAe,cAAc,aAAa,eAAe,cAAc,eAAe,mBAAmB,cAAc,iBAAiB,aAAa,cAAc,cAAc,cAAc,aAAa,eAAe,cAAc,cAAc,eAAe,gBAAgB,eAAe,gBAAgB,aAAa,eAAe,eAAe,YAAY,cAAc,eAAe,cAAc,cAAc,cAAc,cAAc,eAAe,aAAa,cAAc,eAAe,eAAe,gBAAgB,eAAe,qBAAqB,iBAAiB,gBAAgB,cAAc,cAAc,cAAc,aAAa,gBAAgB,eAAe,eAAe,YAAY,cAAc,aAAa,YAAY,cAAc,eAAe,cAAc,gBAAgB,aAAa,eAAe,cAAc,cAAc,WAAW,cAAc,aAAa,aAAa,cAAc,cAAc,aAAa,aAAa,cAAc,eAAe,eAAe,eAAe,cAAc,cAAc,eAAe,cAAc,gBAAgB,aAAa,eAAe,eAAe,kBAAkB,aAAa,YAAY,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,wBAAwB,cAAc,YAAY,aAAa,aAAa,eAAe,mBAAmB,aAAa,cAAc,YAAY,gBAAgB,kBAAkB,gBAAgB,gBAAgB,gBAAgB,gBAAgB,gBAAgB,eAAe,gBAAgB,oBAAoB,gBAAgB,gBAAgB,cAAc,aAAa,oBAAoB,aAAa,oBAAoB,eAAe,WAAW,YAAY,eAAe,cAAc,eAAe,eAAe,cAAc,eAAe,cAAc,cAAc,gBAAgB,eAAe,cAAc,cAAc,iBAAiB,eAAe,iBAAiB,eAAe,cAAc,eAAe,eAAe,eAAe,cAAc,YAAY,eAAe,aAAa,eAAe,cAAc,cAAc,aAAa,aAAa,eAAe,YAAY,cAAc,cAAc,gBAAgB,YAAY,cAAc,cAAc,gBAAgB,aAAa,cAAc,aAAa,cAAc,YAAY,YAAY,aAAa,aAAa,aAAa,eAAe,aAAa,gBAAgB,YAAY,eAAe,aAAa,eAAe,iBAAiB,aAAa,cAAc,aAAa,eAAe,cAAc,YAAY,eAAe,eAAe,eAAe,gBAAgB,aAAa,YAAY,eAAe,cAAc,WAAW,cAAc,gBAAgB,aAAa,iBAAiB,gBAAgB,eAAe,cAAc,gBAAgB,gBAAgB,iBAAiB,cAAc,cAAc,YAAY,mBAAmB,cAAc,aAAa,eAAe,cAAc,iBAAiB,iBAAiB,iBAAiB,eAAe,cAAc,YAAY,eAAe,aAAa,cAAc,eAAe,cAAc,gBAAgB,cAAc,eAAe,aAAa,cAAc,eAAe,iBAAiB,cAAc,cAAc,cAAc,eAAe,gBAAgB,cAAc,eAAe,eAAe,gBAAgB,uBAAuB,wBAAwB,eAAe,cAAc,cAAc,IAAI,SAAS,aAAa,cAAc,gBAAgB,gBAAgB,eAAe,eAAe,YAAY,aAAa,gBAAgB,aAAa,aAAa,eAAe,aAAa,eAAe,YAAY,eAAe,cAAc,eAAe,aAAa,YAAY,mBAAmB,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,gBAAgB,aAAa,eAAe,iBAAiB,eAAe,cAAc,eAAe,sBAAsB,iBAAiB,gBAAgB,WAAW,eAAe,YAAY,mBAAmB,eAAe,eAAe,cAAc,iBAAiB,oBAAoB,iBAAiB,iBAAiB,YAAY,aAAa,cAAc,cAAc,aAAa,IAAI,SAAS,aAAa,aAAa,aAAa,cAAc,eAAe,aAAa,YAAY,cAAc,iBAAiB,eAAe,aAAa,cAAc,aAAa,cAAc,cAAc,gBAAgB,gBAAgB,eAAe,iBAAiB,eAAe,YAAY,aAAa,eAAe,eAAe,YAAY,aAAa,eAAe,cAAc,kBAAkB,gBAAgB,gBAAgB,cAAc,aAAa,eAAe,kBAAkB,eAAe,gBAAgB,gBAAgB,mBAAmB,kBAAkB,gBAAgB,gBAAgB,eAAe,eAAe,eAAe,aAAa,aAAa,aAAa,aAAa,kBAAkB,eAAe,gBAAgB,gBAAgB,gBAAgB,gBAAgB,gBAAgB,gBAAgB,mBAAmB,kBAAkB,gBAAgB,eAAe,eAAe,eAAe,cAAc,eAAe,cAAc,eAAe,YAAY,eAAe,eAAe,YAAY,eAAe,aAAa,cAAc,iBAAiB,cAAc,cAAc,iBAAiB,eAAe,eAAe,eAAe,cAAc,gBAAgB,eAAe,aAAa,aAAa,eAAe,iBAAiB,gBAAgB,cAAc,gBAAgB,iBAAiB,cAAc,aAAa,cAAc,eAAe,aAAa,eAAe,cAAc,eAAe,cAAc,YAAY,eAAe,eAAe,aAAa,eAAe,cAAc,iBAAiB,eAAe,cAAc,cAAc,cAAc,cAAc,gBAAgB,cAAc,iBAAiB,eAAe,cAAc,cAAc,cAAc,cAAc,eAAe,aAAa,gBAAgB,aAAa,cAAc,eAAe,gBAAgB,gBAAgB,gBAAgB,gBAAgB,YAAY,eAAe,cAAc,eAAe,aAAa,cAAc,cAAc,gBAAgB,cAAc,eAAe,eAAe,WAAW,aAAa,cAAc,cAAc,aAAa,WAAW,aAAa,cAAc,cAAc,eAAe,aAAa,cAAc,YAAY,YAAY,aAAa,aAAa,cAAc,cAAc,aAAa,aAAa,eAAe,eAAe,YAAY,aAAa,aAAa,aAAa,aAAa,gBAAgB,cAAc,cAAc,YAAY,aAAa;;;;;;;;;;;ACA96iE,8CAA2C,CAAC,WAAW,EAAC,CAAC,yBAAyB,EAAE;;;;;;;;;;;ACApF,8CAA2C,CAAC,WAAW,EAAC,CAAC,qBAAqB,iDAAiD,+GAA+G,oBAAoB,uDAAuD,mCAAmC,0BAA0B,wFAAwF,yBAAyB,OAAO,uBAAuB;;;;;;;;;;;;;;;;ACAlhB,kDAAkD,0CAA0C;;AAE5F,4CAA4C,gBAAgB,kBAAkB,OAAO,2BAA2B,wDAAwD,gCAAgC,uDAAuD;;AAE/P,8DAA8D,sEAAsE,8DAA8D,kDAAkD,iBAAiB,GAAG;;AAElO;;AAEtC;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;;AAEA;AACA,MAAM,oDAAS;AACf;AACA;AACA;AACA,aAAa,0BAA0B;AACvC;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0BAA0B;AACzC;;AAEA,GAAG;AACH;AACA;AACA;AACA,MAAM;;AAEN;AACA,eAAe,0BAA0B;AACzC;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;ACvDD;AACA;AAC+C;AACF;AACF;AACV;AACwB;AACP;AACD;AACJ;AACY;AACzD;AACA,aAAa,QAAQ;AACrB,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB,cAAc,YAAY,yEAAyE;AACnG,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB;;AAEA;AACA,aAAa,QAAQ;AACrB,cAAc,SAAS;AACvB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,eAAe,KAAuC,GAAG,uBAAgB,GAAG,CAAE;AAC9E;AACA,WAAW,SAAS;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAAQ,CAAC,eAAe;;AAElD;AACA;AACA,EAAE,mDAAQ;AACV;;AAEA;AACA;AACA,EAAE,mDAAQ;AACV;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;;;AAGA;AACA;AACA,EAAE,qEAAyB;AAC3B,EAAE,0DAAW;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,mDAAQ;AACZ,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,IAAI,mDAAQ;AACZ,GAAG;AACH;AACA,IAAI,mDAAQ,iCAAiC;;AAE7C;AACA,MAAM,iDAAI;AACV;;AAEA,IAAI,iEAAW;AACf,GAAG;;AAEH;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,GAAG;;AAEH;AACA,eAAe,qDAAqD;AACpE;AACA;AACA;AACA,MAAM,mDAAQ;AACd;;AAEA,IAAI,iEAAW;AACf,GAAG;AACH;AACA,IAAI,mDAAQ;;AAEZ;AACA,MAAM,iDAAI;AACV;;AAEA,IAAI,iEAAW;AACf,GAAG;AACH;AACA,IAAI,iEAAW;;AAEf;AACA,MAAM,iDAAI;AACV;;AAEA,IAAI,+DAAS;AACb,GAAG;AACH;;AAEA;AACA,aAAa,QAAQ;AACrB;AACA;AACA,IAAI,mDAAQ;AACZ;AACA,GAAG;;AAEH;AACA,aAAa,QAAQ;AACrB;AACA;AACA,IAAI,mDAAQ;AACZ;AACA,GAAG;;AAEH;AACA,aAAa,SAAS;AACtB,aAAa,KAAK;AAClB;AACA;AACA,IAAI,mDAAQ;;AAEZ;AACA,2BAA2B,0DAAa;AACxC;AACA;;AAEA,4CAA4C,+DAAS;AACrD,KAAK;;AAEL,IAAI,iEAAW;;AAEf,oBAAoB,8BAA8B;AAClD,MAAM,mDAAQ;AACd;;AAEA;;AAEA;AACA;AACA,MAAM,iDAAI;AACV;;AAEA;AACA;AACA;;AAEA,IAAI,+DAAS;AACb,GAAG;;AAEH;AACA,aAAa,SAAS;AACtB;AACA;AACA,IAAI,oDAAS;;AAEb;AACA,4BAA4B,0DAAa;AACzC;AACA;;AAEA,4CAA4C,+DAAS;AACrD,KAAK;;AAEL,IAAI,iEAAW;;AAEf,oBAAoB,4BAA4B;AAChD,MAAM,oDAAS;AACf;;AAEA;;AAEA;AACA;AACA,MAAM,iDAAI;AACV;AACA,GAAG;;AAEH;AACA,aAAa,OAAO;AACpB;AACA;AACA,IAAI,oDAAS;AACb,GAAG;AACH;AACA,IAAI,mDAAQ;;AAEZ;AACA,MAAM,iDAAI;AACV;;AAEA,IAAI,iEAAW;AACf;AACA;AACA,gBAAgB,qEAAe;AAC/B,sDAAM;;;;;;;;;;AClRN,uBAAuB;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,WAAW,mFAAmF,WAAW;AAC/K;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,UAAU;AACvB;;AAEA,CAAC;AACD;AACA,cAAc,sCAAsC;;AAEpD,0EAA0E,WAAW;AACrF,6EAA6E,WAAW;AACxF,wFAAwF,WAAW;;AAEnG;AACA;AACA,aAAa,qCAAqC;AAClD,aAAa,sDAAsD;AACnE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0EAA0E,aAAa;AACvF;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mGAAmG,eAAe;AAClH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,gFAAgF,iBAAiB;AACjG;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,CAAC;;AAED;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;AAErE;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,WAAW,mFAAmF,WAAW;AAC/K;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA;;AAEA,eAAe,gCAAmB;AAClC;AACA,cAAc,6DAA6D;;AAE3E,cAAc,yDAAyD;;AAEvE,cAAc,gCAAgC;;AAE9C,cAAc,2BAA2B;;AAEzC;AACA,aAAa,QAAQ;AACrB,cAAc,kBAAkB;AAChC,cAAc,kBAAkB;AAChC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC;;AAEA;AACA,aAAa,QAAQ;AACrB,cAAc,yDAAyD;AACvE,cAAc,qBAAqB;AACnC,cAAc,eAAe;AAC7B;;AAEA;AACA,WAAW,iBAAiB;AAC5B,aAAa,gBAAgB;AAC7B;;;AAGA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,4CAA4C;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,aAAa,mBAAmB;AAChC;AACA,aAAa,QAAQ;;AAErB;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,aAAa;AAC1B,aAAa,OAAO;AACpB,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;AAErE;AACA;AACA;AACA;;;AAGA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,gCAAmB;;AAEtC,eAAe,gCAAmB;AAClC;;AAEA,0BAA0B,gCAAmB;AAC7C,WAAW,mCAAmC;;;AAG9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,WAAW,mCAAmC;AAC9C,aAAa;AACb;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA,gBAAgB,gCAAmB,wBAAwB,gCAAmB;AAC9E,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW,gCAAmB,2BAA2B;AACzD,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA,kEAAkE,iBAAiB;AACnF;AACA,2DAA2D,aAAa;AACxE;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAmB;AACnB,qBAAqB,gCAAmB;AACxC,+CAA+C;AAC/C,sBAAsB;AACtB,uFAAuF,gCAAmB;;AAE1G,CAAC;AACD;AACA;AACA,oGAAoG,aAAa;AACjH,UAAU;AACV;;;;;;;;;;;;;;;;;;;;;AC1zBA;AACA;AAC2C;AACJ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAsC;;AAEjD;AACA,WAAW,mCAAmC;;AAE9C;AACA,WAAW,0CAA0C;;AAErD;AACA,WAAW,+BAA+B;;AAE1C;AACA,oEAAkB;AAClB;AACA,WAAW,eAAe;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;;AAEzB,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;;AAEjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,UAAU;;AAEzB,eAAe,mBAAmB;AAClC;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA,KAAK;AACL;AACA,eAAe,mBAAmB;;AAElC;AACA;;AAEA;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,eAAe;AAC1B;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY,sEAAsE;AAC7F,eAAe;AACf;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ,gCAAgC;;AAEhC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA,WAAW,QAAQ;AACnB,WAAW,kBAAkB,oEAAoE,GAAG;AACpG,WAAW,eAAe;AAC1B;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wDAAwD;;AAExD,iBAAiB,0DAAQ,CAAC,qDAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;;AAEjC;AACA,KAAK;AACL,GAAG;AACH;;;;;;;;;;;;;;;;;;;;ACnNA;AAC2D;AACtB,CAAC;;AAEtC;;AAEA;AACA,OAAO,6BAA6B,0BAA0B,6BAA6B,2BAA2B,6BAA6B,WAAW,6BAA6B,GAAG,mEAAe;AAC7M;;AAEA;AACA,qBAAqB;AACrB;AACA;;AAEO;AACP;AACA,WAAW,QAAQ;AACnB,aAAa,wDAAwD;AACrE,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,MAAM;;;AAGN,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mDAAQ;AACd;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,aAAa,KAAK;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA,+DAAe,MAAM;;;;;;;;;;;;AChErB;AACA,aAAa,4IAA4I;AACzJ,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,WAAW,QAAQ,+BAA+B;AAClD,aAAa;AACb;;;AAGA;AACA,qCAAqC;AACrC;;AAEA,wFAAwF;AACxF;AACA;;AAEA;AACA;AACA;;AAEA,wEAAwE;;AAExE;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;;AAEA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,+DAAe,eAAe;;;;;;;;;;;;ACxI9B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;;AAEA,+DAAe,sBAAsB;;;;;;;;;;;;;;;;;;ACzBW;AAChD,iCAAiC;AACjC;;AAEA,2BAA2B;;AAE3B;AACA,WAAW,uEAAuE;AAClF,aAAa;AACb;;AAEA;AACA,EAAE,sFAA6B;AAC/B;AACA,GAAG;AACH;;AAEA;AACA,UAAU,yEAAgB;;;;;;;;;;;;;;AClBuC;AACjE;AACA,WAAW,QAAQ;AACnB,eAAe;AACf;;AAEA;AACA,eAAe,yBAAyB;AACxC;;AAEA;AACA;;AAEA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA,IAAI;AACJ;AACA,uBAAuB,sEAAsB;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+DAAe,QAAQ;;;;;;;;;;;;;;;ACxCyB;AACjB;AAC/B,cAAc,4BAA4B;AAC1C,cAAc,2BAA2B;;AAEzC;AACA,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;;;AAGA;AACA;AACA,IAAI,6CAAQ;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,6CAAQ;AACZ,IAAI,kEAAe;;AAEnB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,+DAAe,SAAS;;;;;;;;;;;;ACvExB;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,+DAAe,OAAO;;;;;;;;;;;;AChBtB,sDAAsD,gBAAgB,6CAA6C,oDAAoD,IAAI,IAAI,IAAI,IAAI;AACvL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+DAAe,SAAS;;;;;;;;;;ACnBxB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAU;AACd;AACA;AACA,0BAA0B,uBAAgB;AAC1C;AACA,WAAW,mBAAO,CAAC,gDAAO;AAC1B;AACA,EAAE,UAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,IAAI,mBAAO,CAAC,0EAAoB;;AAEhC;AACA;AACA;AACA,IAAI;AACJ;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA,kBAAkB,mBAAO,CAAC,wDAAW;AACrC;AACA;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE,KAAK,EAEN;;;;;;;;;;;AC5DD,mBAAmB,mBAAO,CAAC,+CAAQ;AACnC;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF,WAAW,mBAAO,CAAC,gDAAO;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3CA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB;;AAEpB,6BAA6B;;AAE7B,uBAAuB;;AAEvB,0BAA0B;AAC1B;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;;;;;;UC1DA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA,sBAAsB;UACtB,oDAAoD,uBAAuB;UAC3E;UACA;UACA,GAAG;UACH;UACA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;;;;;WCxCA;WACA;WACA;WACA,eAAe,4BAA4B;WAC3C,eAAe;WACf,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA;;;;;WCJA,wCAAwC;;;;;WCAxC,qCAAqC;;;;;WCArC,8CAA8C;;;;;WCA9C;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,4CAA4C,mBAAmB;WAC/D;WACA;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA;;;;;WCzCA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;;WAED;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA,2BAA2B;WAC3B,4BAA4B;WAC5B,2BAA2B;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA,iBAAiB,qCAAqC;WACtD;;WAEA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,iBAAiB;WACrC;WACA;WACA;WACA,GAAG;WACH;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA,QAAQ;WACR;WACA,MAAM;WACN,KAAK;WACL,IAAI;WACJ,GAAG;WACH;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;;WAEA;WACA;;WAEA;;WAEA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;;WAEA;WACA;WACA,EAAE;;WAEF;WACA;;WAEA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,oBAAoB,oBAAoB;WACxC;WACA;WACA;WACA;WACA,EAAE;;WAEF;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;;WAEA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA,IAAI;WACJ;;WAEA;WACA;WACA,GAAG;WACH,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ,GAAG;WACH;WACA;WACA;WACA;;;;;WCrYA;;;;;WCAA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mBAAmB,2BAA2B;WAC9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,kBAAkB,cAAc;WAChC;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,cAAc,MAAM;WACpB;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA,cAAc,aAAa;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA,iBAAiB,4BAA4B;WAC7C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA,IAAI;WACJ;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,kBAAkB,uCAAuC;WACzD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,mBAAmB,iCAAiC;WACpD;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,uCAAuC;WAC7D;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,sBAAsB;WAC5C;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA,WAAW;WACX,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA,YAAY;WACZ;WACA;WACA;WACA;WACA;WACA;WACA,UAAU;WACV;WACA;WACA;WACA;WACA;WACA;WACA,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,mBAAmB,wCAAwC;WAC3D;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR,QAAQ;WACR;WACA;WACA;WACA;WACA;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA;WACA,OAAO;WACP;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE,IAAI;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,sCAAsC;WACtC;WACA;WACA,EAAE;WACF;;WAEA;;WAEA;;;;;UE9fA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA","sources":["webpack://leaflet-distortableimage/./node_modules/ansi-html-community/index.js","webpack://leaflet-distortableimage/./src/DistortableCollection.js","webpack://leaflet-distortableimage/./src/DistortableImageOverlay.js","webpack://leaflet-distortableimage/./src/components/DistortableImage.Keymapper.js","webpack://leaflet-distortableimage/./src/edit/DistortableCollection.Edit.js","webpack://leaflet-distortableimage/./src/edit/DistortableImage.Edit.js","webpack://leaflet-distortableimage/./src/edit/actions/BorderAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DeleteAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DistortAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DragAction.js","webpack://leaflet-distortableimage/./src/edit/actions/EditAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ExportAction.js","webpack://leaflet-distortableimage/./src/edit/actions/FreeRotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/GeolocateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/LockAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacitiesAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacityAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RestoreAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ScaleAction.js","webpack://leaflet-distortableimage/./src/edit/actions/StackAction.js","webpack://leaflet-distortableimage/./src/edit/actions/UnlockAction.js","webpack://leaflet-distortableimage/./src/edit/getEXIFdata.js","webpack://leaflet-distortableimage/./src/edit/handles/DistortHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/DragHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/EditHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/FreeRotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/LockHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/RotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/ScaleHandle.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.ControlBar.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.PopupBar.js","webpack://leaflet-distortableimage/./src/iconsets/IconSet.js","webpack://leaflet-distortableimage/./src/iconsets/KeymapperIconSet.js","webpack://leaflet-distortableimage/./src/iconsets/ToolbarIconSet.js","webpack://leaflet-distortableimage/./src/mapmixins/BoxCollector.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickLabels.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickZoom.js","webpack://leaflet-distortableimage/./src/mapmixins/MapMixins.js","webpack://leaflet-distortableimage/./src/util/DomUtil.js","webpack://leaflet-distortableimage/./src/util/IconUtil.js","webpack://leaflet-distortableimage/./src/util/ImageUtil.js","webpack://leaflet-distortableimage/./src/util/MatrixUtil.js","webpack://leaflet-distortableimage/./src/util/TrigUtil.js","webpack://leaflet-distortableimage/./src/util/Utils.js","webpack://leaflet-distortableimage/./node_modules/events/events.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/index.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/named-references.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/numeric-unicode-map.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/surrogate-pairs.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/clients/WebSocketClient.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/index.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/modules/logger/index.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/overlay.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/socket.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/createSocketURL.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/log.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/parseURL.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/reloadApp.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/sendMessage.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/stripAnsi.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/dev-server.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/emitter.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/log-apply-result.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/log.js","webpack://leaflet-distortableimage/webpack/bootstrap","webpack://leaflet-distortableimage/webpack/runtime/compat get default export","webpack://leaflet-distortableimage/webpack/runtime/define property getters","webpack://leaflet-distortableimage/webpack/runtime/get javascript update chunk filename","webpack://leaflet-distortableimage/webpack/runtime/get update manifest filename","webpack://leaflet-distortableimage/webpack/runtime/getFullHash","webpack://leaflet-distortableimage/webpack/runtime/hasOwnProperty shorthand","webpack://leaflet-distortableimage/webpack/runtime/load script","webpack://leaflet-distortableimage/webpack/runtime/make namespace object","webpack://leaflet-distortableimage/webpack/runtime/hot module replacement","webpack://leaflet-distortableimage/webpack/runtime/publicPath","webpack://leaflet-distortableimage/webpack/runtime/jsonp chunk loading","webpack://leaflet-distortableimage/webpack/before-startup","webpack://leaflet-distortableimage/webpack/startup","webpack://leaflet-distortableimage/webpack/after-startup"],"sourcesContent":["'use strict'\n\nmodule.exports = ansiHTML\n\n// Reference to https://github.com/sindresorhus/ansi-regex\nvar _regANSI = /(?:(?:\\u001b\\[)|\\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\\u001b[A-M]/\n\nvar _defColors = {\n reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR]\n black: '000',\n red: 'ff0000',\n green: '209805',\n yellow: 'e8bf03',\n blue: '0000ff',\n magenta: 'ff00ff',\n cyan: '00ffee',\n lightgrey: 'f0f0f0',\n darkgrey: '888'\n}\nvar _styles = {\n 30: 'black',\n 31: 'red',\n 32: 'green',\n 33: 'yellow',\n 34: 'blue',\n 35: 'magenta',\n 36: 'cyan',\n 37: 'lightgrey'\n}\nvar _openTags = {\n '1': 'font-weight:bold', // bold\n '2': 'opacity:0.5', // dim\n '3': '', // italic\n '4': '', // underscore\n '8': 'display:none', // hidden\n '9': '' // delete\n}\nvar _closeTags = {\n '23': '', // reset italic\n '24': '', // reset underscore\n '29': '' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = ''\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text\n }\n\n // Cache opened sequence.\n var ansiCodes = []\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)m/g, function (match, seq) {\n var ot = _openTags[seq]\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop()\n return ''\n }\n // Open tag.\n ansiCodes.push(seq)\n return ot[0] === '<' ? ot : ''\n }\n\n var ct = _closeTags[seq]\n if (ct) {\n // Pop sequence\n ansiCodes.pop()\n return ct\n }\n return ''\n })\n\n // Make sure tags are closed.\n var l = ansiCodes.length\n ;(l > 0) && (ret += Array(l + 1).join(''))\n\n return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.')\n }\n\n var _finalColors = {}\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null\n if (!hex) {\n _finalColors[key] = _defColors[key]\n continue\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex]\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string'\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n }\n var defHexColor = _defColors[key]\n if (!hex[0]) {\n hex[0] = defHexColor[0]\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]]\n hex.push(defHexColor[1])\n }\n\n hex = hex.slice(0, 2)\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n }\n _finalColors[key] = hex\n }\n _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () { return _openTags }\n })\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () { return _closeTags }\n })\n} else {\n ansiHTML.tags.open = _openTags\n ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey\n\n for (var code in _styles) {\n var color = _styles[code]\n var oriColor = colors[color] || '000'\n _openTags[code] = 'color:#' + oriColor\n code = parseInt(code)\n _openTags[(code + 10).toString()] = 'background:#' + oriColor\n }\n}\n\nansiHTML.reset()\n","const arr = [];\nL.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n // re-order layers by _leaflet_id to match their display order in UI\n // add new layer to right position and avoid repitition\n const newArr = arr.every((each) => {\n return each._leaflet_id !== layer._leaflet_id;\n });\n if (newArr) {\n arr.push(layer);\n } else {\n arr.splice(arr.indexOf(layer), 1);\n }\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n // connects to JSON file and fetches JSON data therein from remote source\n async fetchRemoteJson(url) {\n let index = 0;\n const imgCollectionProps = [];\n\n try {\n const response = await axios.get(url);\n if (response.data.hasOwnProperty('avg_cm_per_pixel')) {\n if (response.data.collection.length > 1) {\n response.data.collection.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data.collection;\n\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n } else {\n if (response.data.length > 1) {\n response.data.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data;\n\n return {\n imgCollectionProps,\n };\n }\n } catch (err) {\n console.log('err', err);\n }\n },\n\n // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json\n async recreateImagesFromJsonUrl(url) {\n let imageCollectionObj = {};\n\n if (url) {\n imageCollectionObj = await this.fetchRemoteJson(url);\n return imageCollectionObj;\n };\n\n return imageCollectionObj;\n },\n\n generateExportJson(allImages = false) {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (allImages || this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length - 1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n ];\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n tooltipText: layer.getTooltipText(),\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n interactive: true,\n tooltipText: '',\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n\n this.interactive = this.options.interactive;\n this.tooltipText = this.options.tooltipText;\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n\n L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this);\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n L.DomEvent.off(this.getElement(), 'mousemove', this.deactivateTooltip, this);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n activateTooltip() {\n if (!this._selected) {\n this.bindTooltip(this.tooltipText, {direction: 'top'}).openTooltip();\n }\n },\n\n closeToolTip() {\n this.closeTooltip();\n },\n\n deactivateTooltip() {\n this.unbindTooltip();\n },\n\n getTooltipText() {\n return this.tooltipText;\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
' +\n /* eslint-disable */\n '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\\xa0u
Stack up / down
q\\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\\xa0backspace
Export Image(s)
e
'\n );\n /* eslint-enable */\n container.appendChild(button);\n return container;\n };\n\n this._keymapper.addTo(this._map);\n },\n\n _toggleKeymapper(e) {\n e.preventDefault();\n\n this._container.className = (\n this._container.className === 'ldi-keymapper leaflet-control' ?\n 'ldi-keymapper-hide leaflet-control' :\n 'ldi-keymapper leaflet-control'\n );\n\n this._scrollWrapper.style.display = (\n this._scrollWrapper.style.display === 'none' ? 'block' : 'none'\n );\n\n this._toggler.innerHTML = (\n this._toggler.innerHTML === 'close' ?\n L.IconUtil.create('keyboard_open') :\n 'close'\n );\n\n L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap');\n L.DomUtil.toggleClass(this._toggler, 'close-icon');\n },\n\n _injectIconSet() {\n if (document.querySelector('#keymapper-iconset')) { return; }\n\n const el = L.DomUtil.create('div', '');\n el.id = 'keymapper-iconset';\n el.setAttribute('hidden', 'hidden');\n\n this._iconset = new L.KeymapperIconSet().render();\n el.innerHTML = this._iconset;\n\n document.querySelector('.leaflet-control-container').appendChild(el);\n },\n});\n\nL.DistortableImage.Keymapper.addInitHook(() => {\n L.DistortableImage.Keymapper.prototype._n = (\n L.DistortableImage.Keymapper.prototype._n ?\n L.DistortableImage.Keymapper.prototype._n + 1 :\n 1\n );\n // dont enable keymapper for mobile\n if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) {\n this.enable();\n this._injectIconSet();\n }\n});\n\nL.distortableImage.keymapper = (map, options) => {\n return new L.DistortableImage.Keymapper(map, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// this class holds the keybindings and toolbar API for an image collection instance\nL.DistortableCollection.Edit = L.Handler.extend({\n options: {\n keymap: L.distortableImage.group_action_map,\n },\n\n initialize(group, options) {\n this._group = group;\n this._exportOpts = group.options.exportOpts;\n\n L.setOptions(this, options);\n\n L.distortableImage.group_action_map.Escape = '_decollectAll';\n },\n\n addHooks() {\n const group = this._group;\n const map = group._map;\n\n this.editActions = this.options.actions;\n this.runExporter =\n L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') ||\n this.startExport, this);\n\n L.DomEvent.on(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._group.editable = true;\n this._group.eachLayer(layer => layer.editing.enable());\n },\n\n removeHooks() {\n const group = this._group;\n const map = group._map;\n\n L.DomEvent.off(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._decollectAll();\n this._group.editable = false;\n this._group.eachLayer(layer => layer.editing.disable());\n },\n\n enable() {\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n\n if (!this[handlerName]) { return; }\n\n if (this._group.anyCollected()) {\n this[handlerName].call(this);\n }\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this._decollectAll(e); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._group._map;\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n L.DomEvent.on(map, 'singleclick', this._decollectAll, this);\n },\n\n _resetClickListeners() {\n const map = this._group._map;\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n L.DomEvent.off(map, 'singleclick', this._decollectAll, this);\n },\n\n _decollectAll(e) {\n let oe;\n\n if (e) { oe = e.originalEvent; }\n /**\n * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete\n * also prevents deselection following a click on a disabled img by differentiating it from the map\n */\n if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) {\n return;\n }\n\n this._group.eachLayer((layer) => {\n L.DomUtil.removeClass(layer.getElement(), 'collected');\n layer.deselect();\n });\n\n this._removeToolbar();\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _unlockGroup() {\n if (!this.hasTool(L.UnlockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer)) {\n const edit = layer.editing;\n edit._unlock();\n // unlock updates the layer's handles; deselect to ensure they're hidden\n layer.deselect();\n }\n });\n },\n\n _lockGroup() {\n if (!this.hasTool(L.LockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer) ) {\n const edit = layer.editing;\n edit._lock();\n // map.addLayer also deselects the image, so we reselect here\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _addCollections(e) {\n const box = e.boxCollectBounds;\n const map = this._group._map;\n\n this._group.eachLayer((layer) => {\n const edit = layer.editing;\n\n if (layer.isSelected()) { layer.deselect(); }\n\n const zoom = map.getZoom();\n const center = map.getCenter();\n let imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1));\n\n imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center);\n if (box.intersects(imgBounds) && edit.enabled()) {\n if (!this.toolbar) { this._addToolbar(); }\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _removeGroup(e) {\n if (!this.hasTool(L.DeleteAction)) { return; }\n\n const layersToRemove = this._group._toRemove();\n const n = layersToRemove.length;\n\n if (n === 0) { return; }\n\n const choice = L.DomUtil.confirmDeletes(n);\n\n if (choice) {\n layersToRemove.forEach((layer) => {\n this._group.removeLayer(layer);\n });\n if (!this._group.anyCollected()) {\n this._removeToolbar();\n }\n }\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n cancelExport() {\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n clearInterval(this.updateInterval);\n },\n\n _addToolbar() {\n const group = this._group;\n const map = group._map;\n\n if (group.options.suppressToolbar || this.toolbar) { return; }\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n const opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n const outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n const tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n const tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n const size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n const zoom = this._map.getZoom();\n const center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n const map = overlay._map;\n\n const dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n let cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar named_references_1 = require(\"./named-references\");\nvar numeric_unicode_map_1 = require(\"./numeric-unicode-map\");\nvar surrogate_pairs_1 = require(\"./surrogate-pairs\");\nvar allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 });\nvar encodeRegExps = {\n specialChars: /[<>'\"&]/g,\n nonAscii: /(?:[<>'\"&\\u0080-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n nonAsciiPrintable: /(?:[<>'\"&\\x01-\\x08\\x11-\\x15\\x17-\\x1F\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n extensive: /(?:[\\x01-\\x0c\\x0e-\\x1f\\x21-\\x2c\\x2e-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7d\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g\n};\nvar defaultEncodeOptions = {\n mode: 'specialChars',\n level: 'all',\n numeric: 'decimal'\n};\n/** Encodes all the necessary (specified by `level`) characters in the text */\nfunction encode(text, _a) {\n var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e;\n if (!text) {\n return '';\n }\n var encodeRegExp = encodeRegExps[mode];\n var references = allNamedReferences[level].characters;\n var isHex = numeric === 'hexadecimal';\n encodeRegExp.lastIndex = 0;\n var _b = encodeRegExp.exec(text);\n var _c;\n if (_b) {\n _c = '';\n var _d = 0;\n do {\n if (_d !== _b.index) {\n _c += text.substring(_d, _b.index);\n }\n var _e = _b[0];\n var result_1 = references[_e];\n if (!result_1) {\n var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0);\n result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';';\n }\n _c += result_1;\n _d = _b.index + _e.length;\n } while ((_b = encodeRegExp.exec(text)));\n if (_d !== text.length) {\n _c += text.substring(_d);\n }\n }\n else {\n _c =\n text;\n }\n return _c;\n}\nexports.encode = encode;\nvar defaultDecodeOptions = {\n scope: 'body',\n level: 'all'\n};\nvar strict = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);/g;\nvar attribute = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g;\nvar baseDecodeRegExps = {\n xml: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.xml\n },\n html4: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html4\n },\n html5: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html5\n }\n};\nvar decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 });\nvar fromCharCode = String.fromCharCode;\nvar outOfBoundsChar = fromCharCode(65533);\nvar defaultDecodeEntityOptions = {\n level: 'all'\n};\n/** Decodes a single entity */\nfunction decodeEntity(entity, _a) {\n var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b;\n if (!entity) {\n return '';\n }\n var _b = entity;\n var decodeEntityLastChar_1 = entity[entity.length - 1];\n if (false\n && decodeEntityLastChar_1 === '=') {\n _b =\n entity;\n }\n else if (false\n && decodeEntityLastChar_1 !== ';') {\n _b =\n entity;\n }\n else {\n var decodeResultByReference_1 = allNamedReferences[level].entities[entity];\n if (decodeResultByReference_1) {\n _b = decodeResultByReference_1;\n }\n else if (entity[0] === '&' && entity[1] === '#') {\n var decodeSecondChar_1 = entity[2];\n var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X'\n ? parseInt(entity.substr(3), 16)\n : parseInt(entity.substr(2));\n _b =\n decodeCode_1 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_1 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_1)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1);\n }\n }\n return _b;\n}\nexports.decodeEntity = decodeEntity;\n/** Decodes all entities in the text */\nfunction decode(text, _a) {\n var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b;\n if (!text) {\n return '';\n }\n var decodeRegExp = decodeRegExps[level][scope];\n var references = allNamedReferences[level].entities;\n var isAttribute = scope === 'attribute';\n var isStrict = scope === 'strict';\n decodeRegExp.lastIndex = 0;\n var replaceMatch_1 = decodeRegExp.exec(text);\n var replaceResult_1;\n if (replaceMatch_1) {\n replaceResult_1 = '';\n var replaceLastIndex_1 = 0;\n do {\n if (replaceLastIndex_1 !== replaceMatch_1.index) {\n replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index);\n }\n var replaceInput_1 = replaceMatch_1[0];\n var decodeResult_1 = replaceInput_1;\n var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1];\n if (isAttribute\n && decodeEntityLastChar_2 === '=') {\n decodeResult_1 = replaceInput_1;\n }\n else if (isStrict\n && decodeEntityLastChar_2 !== ';') {\n decodeResult_1 = replaceInput_1;\n }\n else {\n var decodeResultByReference_2 = references[replaceInput_1];\n if (decodeResultByReference_2) {\n decodeResult_1 = decodeResultByReference_2;\n }\n else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') {\n var decodeSecondChar_2 = replaceInput_1[2];\n var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X'\n ? parseInt(replaceInput_1.substr(3), 16)\n : parseInt(replaceInput_1.substr(2));\n decodeResult_1 =\n decodeCode_2 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_2 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_2)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2);\n }\n }\n replaceResult_1 += decodeResult_1;\n replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length;\n } while ((replaceMatch_1 = decodeRegExp.exec(text)));\n if (replaceLastIndex_1 !== text.length) {\n replaceResult_1 += text.substring(replaceLastIndex_1);\n }\n }\n else {\n replaceResult_1 =\n text;\n }\n return replaceResult_1;\n}\nexports.decode = decode;\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.bodyRegExps={xml:/&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{\"<\":\"<\",\">\":\">\",\""\":'\"',\"'\":\"'\",\"&\":\"&\"},characters:{\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\",\"&\":\"&\"}},html4:{entities:{\"'\":\"'\",\" \":\" \",\" \":\" \",\"¡\":\"¡\",\"¡\":\"¡\",\"¢\":\"¢\",\"¢\":\"¢\",\"£\":\"£\",\"£\":\"£\",\"¤\":\"¤\",\"¤\":\"¤\",\"¥\":\"¥\",\"¥\":\"¥\",\"¦\":\"¦\",\"¦\":\"¦\",\"§\":\"§\",\"§\":\"§\",\"¨\":\"¨\",\"¨\":\"¨\",\"©\":\"©\",\"©\":\"©\",\"ª\":\"ª\",\"ª\":\"ª\",\"«\":\"«\",\"«\":\"«\",\"¬\":\"¬\",\"¬\":\"¬\",\"­\":\"­\",\"­\":\"­\",\"®\":\"®\",\"®\":\"®\",\"¯\":\"¯\",\"¯\":\"¯\",\"°\":\"°\",\"°\":\"°\",\"±\":\"±\",\"±\":\"±\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"´\":\"´\",\"´\":\"´\",\"µ\":\"µ\",\"µ\":\"µ\",\"¶\":\"¶\",\"¶\":\"¶\",\"·\":\"·\",\"·\":\"·\",\"¸\":\"¸\",\"¸\":\"¸\",\"¹\":\"¹\",\"¹\":\"¹\",\"º\":\"º\",\"º\":\"º\",\"»\":\"»\",\"»\":\"»\",\"¼\":\"¼\",\"¼\":\"¼\",\"½\":\"½\",\"½\":\"½\",\"¾\":\"¾\",\"¾\":\"¾\",\"¿\":\"¿\",\"¿\":\"¿\",\"À\":\"À\",\"À\":\"À\",\"Á\":\"Á\",\"Á\":\"Á\",\"Â\":\"Â\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"È\":\"È\",\"È\":\"È\",\"É\":\"É\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"×\":\"×\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"ß\":\"ß\",\"à\":\"à\",\"à\":\"à\",\"á\":\"á\",\"á\":\"á\",\"â\":\"â\",\"â\":\"â\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"å\":\"å\",\"å\":\"å\",\"æ\":\"æ\",\"æ\":\"æ\",\"ç\":\"ç\",\"ç\":\"ç\",\"è\":\"è\",\"è\":\"è\",\"é\":\"é\",\"é\":\"é\",\"ê\":\"ê\",\"ê\":\"ê\",\"ë\":\"ë\",\"ë\":\"ë\",\"ì\":\"ì\",\"ì\":\"ì\",\"í\":\"í\",\"í\":\"í\",\"î\":\"î\",\"î\":\"î\",\"ï\":\"ï\",\"ï\":\"ï\",\"ð\":\"ð\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ò\":\"ò\",\"ó\":\"ó\",\"ó\":\"ó\",\"ô\":\"ô\",\"ô\":\"ô\",\"õ\":\"õ\",\"õ\":\"õ\",\"ö\":\"ö\",\"ö\":\"ö\",\"÷\":\"÷\",\"÷\":\"÷\",\"ø\":\"ø\",\"ø\":\"ø\",\"ù\":\"ù\",\"ù\":\"ù\",\"ú\":\"ú\",\"ú\":\"ú\",\"û\":\"û\",\"û\":\"û\",\"ü\":\"ü\",\"ü\":\"ü\",\"ý\":\"ý\",\"ý\":\"ý\",\"þ\":\"þ\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\""\":'\"',\""\":'\"',\"&\":\"&\",\"&\":\"&\",\"<\":\"<\",\"<\":\"<\",\">\":\">\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"⟨\":\"〈\",\"⟩\":\"〉\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"},characters:{\"'\":\"'\",\" \":\" \",\"¡\":\"¡\",\"¢\":\"¢\",\"£\":\"£\",\"¤\":\"¤\",\"¥\":\"¥\",\"¦\":\"¦\",\"§\":\"§\",\"¨\":\"¨\",\"©\":\"©\",\"ª\":\"ª\",\"«\":\"«\",\"¬\":\"¬\",\"­\":\"­\",\"®\":\"®\",\"¯\":\"¯\",\"°\":\"°\",\"±\":\"±\",\"²\":\"²\",\"³\":\"³\",\"´\":\"´\",\"µ\":\"µ\",\"¶\":\"¶\",\"·\":\"·\",\"¸\":\"¸\",\"¹\":\"¹\",\"º\":\"º\",\"»\":\"»\",\"¼\":\"¼\",\"½\":\"½\",\"¾\":\"¾\",\"¿\":\"¿\",\"À\":\"À\",\"Á\":\"Á\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"È\":\"È\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"à\":\"à\",\"á\":\"á\",\"â\":\"â\",\"ã\":\"ã\",\"ä\":\"ä\",\"å\":\"å\",\"æ\":\"æ\",\"ç\":\"ç\",\"è\":\"è\",\"é\":\"é\",\"ê\":\"ê\",\"ë\":\"ë\",\"ì\":\"ì\",\"í\":\"í\",\"î\":\"î\",\"ï\":\"ï\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ó\":\"ó\",\"ô\":\"ô\",\"õ\":\"õ\",\"ö\":\"ö\",\"÷\":\"÷\",\"ø\":\"ø\",\"ù\":\"ù\",\"ú\":\"ú\",\"û\":\"û\",\"ü\":\"ü\",\"ý\":\"ý\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",'\"':\""\",\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"〈\":\"⟨\",\"〉\":\"⟩\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"}},html5:{entities:{\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"&\":\"&\",\"&\":\"&\",\"Á\":\"Á\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"ℬ\":\"ℬ\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"ℭ\":\"ℭ\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"ⅅ\":\"ⅅ\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"∯\":\"∯\",\"¨\":\"¨\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⫤\":\"⫤\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"⇓\":\"⇓\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"É\":\"É\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"ℋ\":\"ℋ\",\"Ħ\":\"Ħ\",\"≎\":\"≎\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"ℑ\":\"ℑ\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"⇒\":\"⇒\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"ℒ\":\"ℒ\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"ℳ\":\"ℳ\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"≫\":\"≫\",\"≪\":\"≪\",\" \":\"\\n\",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℌ\":\"ℌ\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∷\":\"∷\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",\""\":'\"',\""\":'\"',\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"ℜ\":\"ℜ\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"⇒\":\"⇒\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↓\":\"↓\",\"←\":\"←\",\"→\":\"→\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∋\":\"∋\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⋑\":\"⋑\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\" \":\"\\t\",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",\"_\":\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"↑\":\"↑\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"​\":\"​\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"â\":\"â\",\"´\":\"´\",\"´\":\"´\",\"а\":\"а\",\"æ\":\"æ\",\"æ\":\"æ\",\"⁡\":\"⁡\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"&\":\"&\",\"&\":\"&\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∠\":\"∠\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"Å\":\"Å\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"≈\":\"≈\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"≈\":\"≈\",\"≊\":\"≊\",\"å\":\"å\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"≈\":\"≈\",\"≍\":\"≍\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"∳\":\"∳\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⌅\":\"⌅\",\"⎵\":\"⎵\",\"⎶\":\"⎶\",\"≌\":\"≌\",\"б\":\"б\",\"„\":\"„\",\"∵\":\"∵\",\"∵\":\"∵\",\"⦰\":\"⦰\",\"϶\":\"϶\",\"ℬ\":\"ℬ\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▪\":\"▪\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⊥\":\"⊥\",\"⊥\":\"⊥\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"─\":\"─\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"‵\":\"‵\",\"˘\":\"˘\",\"¦\":\"¦\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"\\":\"\\\\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"•\":\"•\",\"≎\":\"≎\",\"⪮\":\"⪮\",\"≏\":\"≏\",\"≏\":\"≏\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"ˇ\":\"ˇ\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"¸\":\"¸\",\"¸\":\"¸\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"¢\":\"¢\",\"·\":\"·\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"®\":\"®\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"≗\":\"≗\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\"♣\":\"♣\",\":\":\":\",\"≔\":\"≔\",\"≔\":\"≔\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"∘\":\"∘\",\"∁\":\"∁\",\"ℂ\":\"ℂ\",\"≅\":\"≅\",\"⩭\":\"⩭\",\"∮\":\"∮\",\"𝕔\":\"𝕔\",\"∐\":\"∐\",\"©\":\"©\",\"©\":\"©\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"¤\":\"¤\",\"↶\":\"↶\",\"↷\":\"↷\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"∲\":\"∲\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⇓\":\"⇓\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"↓\":\"↓\",\"‐\":\"‐\",\"⊣\":\"⊣\",\"⤏\":\"⤏\",\"˝\":\"˝\",\"ď\":\"ď\",\"д\":\"д\",\"ⅆ\":\"ⅆ\",\"‡\":\"‡\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⋄\":\"⋄\",\"⋄\":\"⋄\",\"♦\":\"♦\",\"♦\":\"♦\",\"¨\":\"¨\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"÷\":\"÷\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",\"$\":\"$\",\"𝕕\":\"𝕕\",\"˙\":\"˙\",\"≐\":\"≐\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌆\":\"⌆\",\"↓\":\"↓\",\"⇊\":\"⇊\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⤐\":\"⤐\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"▾\":\"▾\",\"⇵\":\"⇵\",\"⥯\":\"⥯\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"⩷\":\"⩷\",\"≑\":\"≑\",\"é\":\"é\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\"∅\":\"∅\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"≖\":\"≖\",\"≕\":\"≕\",\"≂\":\"≂\",\"⪖\":\"⪖\",\"⪕\":\"⪕\",\"=\":\"=\",\"≟\":\"≟\",\"≡\":\"≡\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"≐\":\"≐\",\"≂\":\"≂\",\"η\":\"η\",\"ð\":\"ð\",\"ð\":\"ð\",\"ë\":\"ë\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"∃\":\"∃\",\"ℰ\":\"ℰ\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",\"fj\":\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"∀\":\"∀\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"≧\":\"≧\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"ϝ\":\"ϝ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≥\":\"≥\",\"≧\":\"≧\",\"⩾\":\"⩾\",\"⩾\":\"⩾\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"≫\":\"≫\",\"⋙\":\"⋙\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"≷\":\"≷\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⪈\":\"⪈\",\"≩\":\"≩\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"`\":\"`\",\"ℊ\":\"ℊ\",\"≳\":\"≳\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\">\":\">\",\">\":\">\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⪆\":\"⪆\",\"⥸\":\"⥸\",\"⋗\":\"⋗\",\"⋛\":\"⋛\",\"⪌\":\"⪌\",\"≷\":\"≷\",\"≳\":\"≳\",\"≩︀\":\"≩︀\",\"≩︀\":\"≩︀\",\"⇔\":\"⇔\",\" \":\" \",\"½\":\"½\",\"ℋ\":\"ℋ\",\"ъ\":\"ъ\",\"↔\":\"↔\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ℏ\":\"ℏ\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"‐\":\"‐\",\"í\":\"í\",\"í\":\"í\",\"⁣\":\"⁣\",\"î\":\"î\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"¡\":\"¡\",\"⇔\":\"⇔\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"ì\":\"ì\",\"ⅈ\":\"ⅈ\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ℑ\":\"ℑ\",\"ℐ\":\"ℐ\",\"ℑ\":\"ℑ\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"∈\":\"∈\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"ı\":\"ı\",\"∫\":\"∫\",\"⊺\":\"⊺\",\"ℤ\":\"ℤ\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"⨼\":\"⨼\",\"¿\":\"¿\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"∈\":\"∈\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"∈\":\"∈\",\"⁢\":\"⁢\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⇚\":\"⇚\",\"⇐\":\"⇐\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"≦\":\"≦\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"ℒ\":\"ℒ\",\"λ\":\"λ\",\"⟨\":\"⟨\",\"⦑\":\"⦑\",\"⟨\":\"⟨\",\"⪅\":\"⪅\",\"«\":\"«\",\"«\":\"«\",\"←\":\"←\",\"⇤\":\"⇤\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↩\":\"↩\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"⌈\":\"⌈\",\"{\":\"{\",\"л\":\"л\",\"⤶\":\"⤶\",\"“\":\"“\",\"„\":\"„\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"←\":\"←\",\"↢\":\"↢\",\"↽\":\"↽\",\"↼\":\"↼\",\"⇇\":\"⇇\",\"↔\":\"↔\",\"⇆\":\"⇆\",\"⇋\":\"⇋\",\"↭\":\"↭\",\"⋋\":\"⋋\",\"⋚\":\"⋚\",\"≤\":\"≤\",\"≦\":\"≦\",\"⩽\":\"⩽\",\"⩽\":\"⩽\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⪅\":\"⪅\",\"⋖\":\"⋖\",\"⋚\":\"⋚\",\"⪋\":\"⪋\",\"≶\":\"≶\",\"≲\":\"≲\",\"⥼\":\"⥼\",\"⌊\":\"⌊\",\"𝔩\":\"𝔩\",\"≶\":\"≶\",\"⪑\":\"⪑\",\"↽\":\"↽\",\"↼\":\"↼\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"≪\":\"≪\",\"⇇\":\"⇇\",\"⌞\":\"⌞\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⪇\":\"⪇\",\"≨\":\"≨\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟦\":\"⟦\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟼\":\"⟼\",\"⟶\":\"⟶\",\"↫\":\"↫\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"_\":\"_\",\"◊\":\"◊\",\"◊\":\"◊\",\"⧫\":\"⧫\",\"(\":\"(\",\"⦓\":\"⦓\",\"⇆\":\"⇆\",\"⌟\":\"⌟\",\"⇋\":\"⇋\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"↰\":\"↰\",\"≲\":\"≲\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"[\":\"[\",\"‘\":\"‘\",\"‚\":\"‚\",\"ł\":\"ł\",\"<\":\"<\",\"<\":\"<\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋖\":\"⋖\",\"⋋\":\"⋋\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"◂\":\"◂\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"✠\":\"✠\",\"↦\":\"↦\",\"↦\":\"↦\",\"↧\":\"↧\",\"↤\":\"↤\",\"↥\":\"↥\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"∡\":\"∡\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"µ\":\"µ\",\"∣\":\"∣\",\"*\":\"*\",\"⫰\":\"⫰\",\"·\":\"·\",\"·\":\"·\",\"−\":\"−\",\"⊟\":\"⊟\",\"∸\":\"∸\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"…\":\"…\",\"∓\":\"∓\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"∓\":\"∓\",\"𝓂\":\"𝓂\",\"∾\":\"∾\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"≫̸\":\"≫̸\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"≪̸\":\"≪̸\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"∇\":\"∇\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"≉\":\"≉\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"≉\":\"≉\",\"♮\":\"♮\",\"♮\":\"♮\",\"ℕ\":\"ℕ\",\" \":\" \",\" \":\" \",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"≇\":\"≇\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"≠\":\"≠\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"↗\":\"↗\",\"↗\":\"↗\",\"≐̸\":\"≐̸\",\"≢\":\"≢\",\"⤨\":\"⤨\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"∄\":\"∄\",\"𝔫\":\"𝔫\",\"≧̸\":\"≧̸\",\"≱\":\"≱\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"⩾̸\":\"⩾̸\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≯\":\"≯\",\"≯\":\"≯\",\"⇎\":\"⇎\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"∋\":\"∋\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"∋\":\"∋\",\"њ\":\"њ\",\"⇍\":\"⇍\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"≰\":\"≰\",\"↚\":\"↚\",\"↮\":\"↮\",\"≰\":\"≰\",\"≦̸\":\"≦̸\",\"⩽̸\":\"⩽̸\",\"⩽̸\":\"⩽̸\",\"≮\":\"≮\",\"≴\":\"≴\",\"≮\":\"≮\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"∤\":\"∤\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"¬\":\"¬\",\"∉\":\"∉\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"∉\":\"∉\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"∌\":\"∌\",\"∌\":\"∌\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"∦\":\"∦\",\"∦\":\"∦\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"⊀\":\"⊀\",\"⋠\":\"⋠\",\"⪯̸\":\"⪯̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⇏\":\"⇏\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"↛\":\"↛\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"⊁\":\"⊁\",\"⋡\":\"⋡\",\"⪰̸\":\"⪰̸\",\"𝓃\":\"𝓃\",\"∤\":\"∤\",\"∦\":\"∦\",\"≁\":\"≁\",\"≄\":\"≄\",\"≄\":\"≄\",\"∤\":\"∤\",\"∦\":\"∦\",\"⋢\":\"⋢\",\"⋣\":\"⋣\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊈\":\"⊈\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⫅̸\":\"⫅̸\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"⊉\":\"⊉\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"⫆̸\":\"⫆̸\",\"≹\":\"≹\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"≸\":\"≸\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"↖\":\"↖\",\"↖\":\"↖\",\"⤧\":\"⤧\",\"Ⓢ\":\"Ⓢ\",\"ó\":\"ó\",\"ó\":\"ó\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"ô\":\"ô\",\"ô\":\"ô\",\"о\":\"о\",\"⊝\":\"⊝\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⊙\":\"⊙\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"Ω\":\"Ω\",\"∮\":\"∮\",\"↺\":\"↺\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"‾\":\"‾\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"⊖\":\"⊖\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"⊕\":\"⊕\",\"∨\":\"∨\",\"↻\":\"↻\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"ª\":\"ª\",\"º\":\"º\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ℴ\":\"ℴ\",\"ø\":\"ø\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"õ\":\"õ\",\"⊗\":\"⊗\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"∥\":\"∥\",\"¶\":\"¶\",\"¶\":\"¶\",\"∥\":\"∥\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"∂\":\"∂\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"⊥\":\"⊥\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"ℳ\":\"ℳ\",\"☎\":\"☎\",\"π\":\"π\",\"⋔\":\"⋔\",\"ϖ\":\"ϖ\",\"ℏ\":\"ℏ\",\"ℎ\":\"ℎ\",\"ℏ\":\"ℏ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⊞\":\"⊞\",\"⨢\":\"⨢\",\"∔\":\"∔\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"±\":\"±\",\"±\":\"±\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"±\":\"±\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"£\":\"£\",\"≺\":\"≺\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"≺\":\"≺\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"≾\":\"≾\",\"′\":\"′\",\"ℙ\":\"ℙ\",\"⪵\":\"⪵\",\"⪹\":\"⪹\",\"⋨\":\"⋨\",\"∏\":\"∏\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"∝\":\"∝\",\"∝\":\"∝\",\"≾\":\"≾\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"⨌\":\"⨌\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"ℍ\":\"ℍ\",\"⨖\":\"⨖\",\"?\":\"?\",\"≟\":\"≟\",\""\":'\"',\""\":'\"',\"⇛\":\"⇛\",\"⇒\":\"⇒\",\"⤜\":\"⤜\",\"⤏\":\"⤏\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"√\":\"√\",\"⦳\":\"⦳\",\"⟩\":\"⟩\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"⟩\":\"⟩\",\"»\":\"»\",\"»\":\"»\",\"→\":\"→\",\"⥵\":\"⥵\",\"⇥\":\"⇥\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"↪\":\"↪\",\"↬\":\"↬\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"ℚ\":\"ℚ\",\"⤍\":\"⤍\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"⌉\":\"⌉\",\"}\":\"}\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"”\":\"”\",\"”\":\"”\",\"↳\":\"↳\",\"ℜ\":\"ℜ\",\"ℛ\":\"ℛ\",\"ℜ\":\"ℜ\",\"ℝ\":\"ℝ\",\"▭\":\"▭\",\"®\":\"®\",\"®\":\"®\",\"⥽\":\"⥽\",\"⌋\":\"⌋\",\"𝔯\":\"𝔯\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"→\":\"→\",\"↣\":\"↣\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"⇉\":\"⇉\",\"↝\":\"↝\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"≓\":\"≓\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⟧\":\"⟧\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"⇉\":\"⇉\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"↱\":\"↱\",\"]\":\"]\",\"’\":\"’\",\"’\":\"’\",\"⋌\":\"⋌\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"▸\":\"▸\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"‚\":\"‚\",\"≻\":\"≻\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"≿\":\"≿\",\"с\":\"с\",\"⋅\":\"⋅\",\"⊡\":\"⊡\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"⤥\":\"⤥\",\"↘\":\"↘\",\"↘\":\"↘\",\"§\":\"§\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"∖\":\"∖\",\"∖\":\"∖\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"⌢\":\"⌢\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"∣\":\"∣\",\"∥\":\"∥\",\"­\":\"­\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"ς\":\"ς\",\"∼\":\"∼\",\"⩪\":\"⩪\",\"≃\":\"≃\",\"≃\":\"≃\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"←\":\"←\",\"∖\":\"∖\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"∣\":\"∣\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"♠\":\"♠\",\"∥\":\"∥\",\"⊓\":\"⊓\",\"⊓︀\":\"⊓︀\",\"⊔\":\"⊔\",\"⊔︀\":\"⊔︀\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"□\":\"□\",\"□\":\"□\",\"▪\":\"▪\",\"▪\":\"▪\",\"→\":\"→\",\"𝓈\":\"𝓈\",\"∖\":\"∖\",\"⌣\":\"⌣\",\"⋆\":\"⋆\",\"☆\":\"☆\",\"★\":\"★\",\"ϵ\":\"ϵ\",\"ϕ\":\"ϕ\",\"¯\":\"¯\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⊆\":\"⊆\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⊂\":\"⊂\",\"⊆\":\"⊆\",\"⫅\":\"⫅\",\"⊊\":\"⊊\",\"⫋\":\"⫋\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"≻\":\"≻\",\"⪸\":\"⪸\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"⪺\":\"⪺\",\"⪶\":\"⪶\",\"⋩\":\"⋩\",\"≿\":\"≿\",\"∑\":\"∑\",\"♪\":\"♪\",\"¹\":\"¹\",\"¹\":\"¹\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"⊃\":\"⊃\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⊇\":\"⊇\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⫆\":\"⫆\",\"⊋\":\"⊋\",\"⫌\":\"⫌\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤦\":\"⤦\",\"↙\":\"↙\",\"↙\":\"↙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"⎴\":\"⎴\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⃛\":\"⃛\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"∴\":\"∴\",\"∴\":\"∴\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"ϑ\":\"ϑ\",\"≈\":\"≈\",\"∼\":\"∼\",\" \":\" \",\"≈\":\"≈\",\"∼\":\"∼\",\"þ\":\"þ\",\"þ\":\"þ\",\"˜\":\"˜\",\"×\":\"×\",\"×\":\"×\",\"⊠\":\"⊠\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"∭\":\"∭\",\"⤨\":\"⤨\",\"⊤\":\"⊤\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"⤩\":\"⤩\",\"‴\":\"‴\",\"™\":\"™\",\"▵\":\"▵\",\"▿\":\"▿\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"≜\":\"≜\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"◬\":\"◬\",\"≜\":\"≜\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"≬\":\"≬\",\"↞\":\"↞\",\"↠\":\"↠\",\"⇑\":\"⇑\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ú\":\"ú\",\"↑\":\"↑\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"û\":\"û\",\"у\":\"у\",\"⇅\":\"⇅\",\"ű\":\"ű\",\"⥮\":\"⥮\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"ù\":\"ù\",\"↿\":\"↿\",\"↾\":\"↾\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"¨\":\"¨\",\"¨\":\"¨\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"↑\":\"↑\",\"↕\":\"↕\",\"↿\":\"↿\",\"↾\":\"↾\",\"⊎\":\"⊎\",\"υ\":\"υ\",\"ϒ\":\"ϒ\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"▵\":\"▵\",\"▴\":\"▴\",\"⇈\":\"⇈\",\"ü\":\"ü\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⇕\":\"⇕\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⊨\":\"⊨\",\"⦜\":\"⦜\",\"ϵ\":\"ϵ\",\"ϰ\":\"ϰ\",\"∅\":\"∅\",\"ϕ\":\"ϕ\",\"ϖ\":\"ϖ\",\"∝\":\"∝\",\"↕\":\"↕\",\"ϱ\":\"ϱ\",\"ς\":\"ς\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"ϑ\":\"ϑ\",\"⊲\":\"⊲\",\"⊳\":\"⊳\",\"в\":\"в\",\"⊢\":\"⊢\",\"∨\":\"∨\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"|\":\"|\",\"|\":\"|\",\"𝔳\":\"𝔳\",\"⊲\":\"⊲\",\"⊂⃒\":\"⊂⃒\",\"⊃⃒\":\"⊃⃒\",\"𝕧\":\"𝕧\",\"∝\":\"∝\",\"⊳\":\"⊳\",\"𝓋\":\"𝓋\",\"⫋︀\":\"⫋︀\",\"⊊︀\":\"⊊︀\",\"⫌︀\":\"⫌︀\",\"⊋︀\":\"⊋︀\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"∧\":\"∧\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"℘\":\"℘\",\"≀\":\"≀\",\"≀\":\"≀\",\"𝓌\":\"𝓌\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"▽\":\"▽\",\"𝔵\":\"𝔵\",\"⟺\":\"⟺\",\"⟷\":\"⟷\",\"ξ\":\"ξ\",\"⟸\":\"⟸\",\"⟵\":\"⟵\",\"⟼\":\"⟼\",\"⋻\":\"⋻\",\"⨀\":\"⨀\",\"𝕩\":\"𝕩\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⟹\":\"⟹\",\"⟶\":\"⟶\",\"𝓍\":\"𝓍\",\"⨆\":\"⨆\",\"⨄\":\"⨄\",\"△\":\"△\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"ý\":\"ý\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ℨ\":\"ℨ\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"},characters:{\"Æ\":\"Æ\",\"&\":\"&\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"Ħ\":\"Ħ\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"\\n\":\" \",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",'\"':\""\",\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\"\\t\":\" \",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",_:\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"а\":\"а\",\"æ\":\"æ\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"ã\":\"ã\",\"ä\":\"ä\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⎶\":\"⎶\",\"б\":\"б\",\"„\":\"„\",\"⦰\":\"⦰\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"◯\":\"◯\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"\\\\\":\"\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"⪮\":\"⪮\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\":\":\":\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"⩭\":\"⩭\",\"𝕔\":\"𝕔\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"‐\":\"‐\",\"⤏\":\"⤏\",\"ď\":\"ď\",\"д\":\"д\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"♦\":\"♦\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",$:\"$\",\"𝕕\":\"𝕕\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"=\":\"=\",\"≟\":\"≟\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"η\":\"η\",\"ð\":\"ð\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",fj:\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"ℊ\":\"ℊ\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⥸\":\"⥸\",\"≩︀\":\"≩︀\",\"ъ\":\"ъ\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"í\":\"í\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"λ\":\"λ\",\"⦑\":\"⦑\",\"⪅\":\"⪅\",\"«\":\"«\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"л\":\"л\",\"⤶\":\"⤶\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"⇇\":\"⇇\",\"⋋\":\"⋋\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⋖\":\"⋖\",\"⥼\":\"⥼\",\"𝔩\":\"𝔩\",\"⪑\":\"⪑\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟼\":\"⟼\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"◊\":\"◊\",\"(\":\"(\",\"⦓\":\"⦓\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"‚\":\"‚\",\"ł\":\"ł\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"⫰\":\"⫰\",\"−\":\"−\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"𝓂\":\"𝓂\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"♮\":\"♮\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"≐̸\":\"≐̸\",\"⤨\":\"⤨\",\"𝔫\":\"𝔫\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"њ\":\"њ\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"𝓃\":\"𝓃\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"ñ\":\"ñ\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"⤧\":\"⤧\",\"ó\":\"ó\",\"ô\":\"ô\",\"о\":\"о\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"∨\":\"∨\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"¶\":\"¶\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"☎\":\"☎\",\"π\":\"π\",\"ϖ\":\"ϖ\",\"ℎ\":\"ℎ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⨢\":\"⨢\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"′\":\"′\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"⨖\":\"⨖\",\"?\":\"?\",\"⤜\":\"⤜\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"⦳\":\"⦳\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"»\":\"»\",\"⥵\":\"⥵\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"↳\":\"↳\",\"▭\":\"▭\",\"⥽\":\"⥽\",\"𝔯\":\"𝔯\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"⇉\":\"⇉\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"с\":\"с\",\"⋅\":\"⋅\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"⩪\":\"⩪\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"⊓︀\":\"⊓︀\",\"⊔︀\":\"⊔︀\",\"𝓈\":\"𝓈\",\"☆\":\"☆\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"♪\":\"♪\",\"¹\":\"¹\",\"²\":\"²\",\"³\":\"³\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"þ\":\"þ\",\"×\":\"×\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"‴\":\"‴\",\"▵\":\"▵\",\"≜\":\"≜\",\"◬\":\"◬\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"у\":\"у\",\"ű\":\"ű\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⦜\":\"⦜\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"в\":\"в\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"𝔳\":\"𝔳\",\"𝕧\":\"𝕧\",\"𝓋\":\"𝓋\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"𝓌\":\"𝓌\",\"𝔵\":\"𝔵\",\"ξ\":\"ξ\",\"⋻\":\"⋻\",\"𝕩\":\"𝕩\",\"𝓍\":\"𝓍\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"}}};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { log } from \"../utils/log.js\";\n\nvar WebSocketClient = /*#__PURE__*/function () {\n /**\n * @param {string} url\n */\n function WebSocketClient(url) {\n _classCallCheck(this, WebSocketClient);\n\n this.client = new WebSocket(url);\n\n this.client.onerror = function (error) {\n log.error(error);\n };\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n\n _createClass(WebSocketClient, [{\n key: \"onOpen\",\n value: function onOpen(f) {\n this.client.onopen = f;\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onClose\",\n value: function onClose(f) {\n this.client.onclose = f;\n } // call f with the message string as the first argument\n\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onMessage\",\n value: function onMessage(f) {\n this.client.onmessage = function (e) {\n f(e.data);\n };\n }\n }]);\n\n return WebSocketClient;\n}();\n\nexport { WebSocketClient as default };","/* global __resourceQuery, __webpack_hash__ */\n/// \nimport webpackHotLog from \"webpack/hot/log.js\";\nimport stripAnsi from \"./utils/stripAnsi.js\";\nimport parseURL from \"./utils/parseURL.js\";\nimport socket from \"./socket.js\";\nimport { formatProblem, show, hide } from \"./overlay.js\";\nimport { log, setLogLevel } from \"./utils/log.js\";\nimport sendMessage from \"./utils/sendMessage.js\";\nimport reloadApp from \"./utils/reloadApp.js\";\nimport createSocketURL from \"./utils/createSocketURL.js\";\n/**\n * @typedef {Object} Options\n * @property {boolean} hot\n * @property {boolean} liveReload\n * @property {boolean} progress\n * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay\n * @property {string} [logging]\n * @property {number} [reconnect]\n */\n\n/**\n * @typedef {Object} Status\n * @property {boolean} isUnloading\n * @property {string} currentHash\n * @property {string} [previousHash]\n */\n\n/**\n * @type {Status}\n */\n\nvar status = {\n isUnloading: false,\n // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement\n // eslint-disable-next-line camelcase\n currentHash: typeof __webpack_hash__ !== \"undefined\" ? __webpack_hash__ : \"\"\n};\n/** @type {Options} */\n\nvar options = {\n hot: false,\n liveReload: false,\n progress: false,\n overlay: false\n};\nvar parsedResourceQuery = parseURL(__resourceQuery);\n\nif (parsedResourceQuery.hot === \"true\") {\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n}\n\nif (parsedResourceQuery[\"live-reload\"] === \"true\") {\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n}\n\nif (parsedResourceQuery.logging) {\n options.logging = parsedResourceQuery.logging;\n}\n\nif (typeof parsedResourceQuery.reconnect !== \"undefined\") {\n options.reconnect = Number(parsedResourceQuery.reconnect);\n}\n/**\n * @param {string} level\n */\n\n\nfunction setAllLogLevel(level) {\n // This is needed because the HMR logger operate separately from dev server logger\n webpackHotLog.setLogLevel(level === \"verbose\" || level === \"log\" ? \"info\" : level);\n setLogLevel(level);\n}\n\nif (options.logging) {\n setAllLogLevel(options.logging);\n}\n\nself.addEventListener(\"beforeunload\", function () {\n status.isUnloading = true;\n});\nvar onSocketMessage = {\n hot: function hot() {\n if (parsedResourceQuery.hot === \"false\") {\n return;\n }\n\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n },\n liveReload: function liveReload() {\n if (parsedResourceQuery[\"live-reload\"] === \"false\") {\n return;\n }\n\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n },\n invalid: function invalid() {\n log.info(\"App updated. Recompiling...\"); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain.\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Invalid\");\n },\n\n /**\n * @param {string} hash\n */\n hash: function hash(_hash) {\n status.previousHash = status.currentHash;\n status.currentHash = _hash;\n },\n logging: setAllLogLevel,\n\n /**\n * @param {boolean} value\n */\n overlay: function overlay(value) {\n if (typeof document === \"undefined\") {\n return;\n }\n\n options.overlay = value;\n },\n\n /**\n * @param {number} value\n */\n reconnect: function reconnect(value) {\n if (parsedResourceQuery.reconnect === \"false\") {\n return;\n }\n\n options.reconnect = value;\n },\n\n /**\n * @param {boolean} value\n */\n progress: function progress(value) {\n options.progress = value;\n },\n\n /**\n * @param {{ pluginName?: string, percent: number, msg: string }} data\n */\n \"progress-update\": function progressUpdate(data) {\n if (options.progress) {\n log.info(\"\".concat(data.pluginName ? \"[\".concat(data.pluginName, \"] \") : \"\").concat(data.percent, \"% - \").concat(data.msg, \".\"));\n }\n\n sendMessage(\"Progress\", data);\n },\n \"still-ok\": function stillOk() {\n log.info(\"Nothing changed.\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"StillOk\");\n },\n ok: function ok() {\n sendMessage(\"Ok\");\n\n if (options.overlay) {\n hide();\n }\n\n reloadApp(options, status);\n },\n // TODO: remove in v5 in favor of 'static-changed'\n\n /**\n * @param {string} file\n */\n \"content-changed\": function contentChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {string} file\n */\n \"static-changed\": function staticChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {Error[]} warnings\n * @param {any} params\n */\n warnings: function warnings(_warnings, params) {\n log.warn(\"Warnings while compiling.\");\n\n var printableWarnings = _warnings.map(function (error) {\n var _formatProblem = formatProblem(\"warning\", error),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Warnings\", printableWarnings);\n\n for (var i = 0; i < printableWarnings.length; i++) {\n log.warn(printableWarnings[i]);\n }\n\n var needShowOverlayForWarnings = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.warnings;\n\n if (needShowOverlayForWarnings) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"warning\", _warnings, trustedTypesPolicyName || null);\n }\n\n if (params && params.preventReloading) {\n return;\n }\n\n reloadApp(options, status);\n },\n\n /**\n * @param {Error[]} errors\n */\n errors: function errors(_errors) {\n log.error(\"Errors while compiling. Reload prevented.\");\n\n var printableErrors = _errors.map(function (error) {\n var _formatProblem2 = formatProblem(\"error\", error),\n header = _formatProblem2.header,\n body = _formatProblem2.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Errors\", printableErrors);\n\n for (var i = 0; i < printableErrors.length; i++) {\n log.error(printableErrors[i]);\n }\n\n var needShowOverlayForErrors = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.errors;\n\n if (needShowOverlayForErrors) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"error\", _errors, trustedTypesPolicyName || null);\n }\n },\n\n /**\n * @param {Error} error\n */\n error: function error(_error) {\n log.error(_error);\n },\n close: function close() {\n log.info(\"Disconnected!\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Close\");\n }\n};\nvar socketURL = createSocketURL(parsedResourceQuery);\nsocket(socketURL, onSocketMessage, options.reconnect);","/******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./client-src/modules/logger/SyncBailHookFake.js\":\n/*!*******************************************************!*\\\n !*** ./client-src/modules/logger/SyncBailHookFake.js ***!\n \\*******************************************************/\n/***/ (function(module) {\n\n\n/**\n * Client stub for tapable SyncBailHook\n */\n\nmodule.exports = function clientTapableSyncBailHook() {\n return {\n call: function call() {}\n };\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/Logger.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/Logger.js ***!\n \\****************************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nvar LogType = Object.freeze({\n error:\n /** @type {\"error\"} */\n \"error\",\n // message, c style arguments\n warn:\n /** @type {\"warn\"} */\n \"warn\",\n // message, c style arguments\n info:\n /** @type {\"info\"} */\n \"info\",\n // message, c style arguments\n log:\n /** @type {\"log\"} */\n \"log\",\n // message, c style arguments\n debug:\n /** @type {\"debug\"} */\n \"debug\",\n // message, c style arguments\n trace:\n /** @type {\"trace\"} */\n \"trace\",\n // no arguments\n group:\n /** @type {\"group\"} */\n \"group\",\n // [label]\n groupCollapsed:\n /** @type {\"groupCollapsed\"} */\n \"groupCollapsed\",\n // [label]\n groupEnd:\n /** @type {\"groupEnd\"} */\n \"groupEnd\",\n // [label]\n profile:\n /** @type {\"profile\"} */\n \"profile\",\n // [profileName]\n profileEnd:\n /** @type {\"profileEnd\"} */\n \"profileEnd\",\n // [profileName]\n time:\n /** @type {\"time\"} */\n \"time\",\n // name, time as [seconds, nanoseconds]\n clear:\n /** @type {\"clear\"} */\n \"clear\",\n // no arguments\n status:\n /** @type {\"status\"} */\n \"status\" // message, arguments\n\n});\nexports.LogType = LogType;\n/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */\n\nvar LOG_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger raw log method\");\nvar TIMERS_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger times\");\nvar TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger aggregated times\");\n\nvar WebpackLogger = /*#__PURE__*/function () {\n /**\n * @param {function(LogTypeEnum, any[]=): void} log log function\n * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger\n */\n function WebpackLogger(log, getChildLogger) {\n _classCallCheck(this, WebpackLogger);\n\n this[LOG_SYMBOL] = log;\n this.getChildLogger = getChildLogger;\n }\n\n _createClass(WebpackLogger, [{\n key: \"error\",\n value: function error() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this[LOG_SYMBOL](LogType.warn, args);\n }\n }, {\n key: \"info\",\n value: function info() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this[LOG_SYMBOL](LogType.info, args);\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this[LOG_SYMBOL](LogType.log, args);\n }\n }, {\n key: \"debug\",\n value: function debug() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n this[LOG_SYMBOL](LogType.debug, args);\n }\n }, {\n key: \"assert\",\n value: function assert(assertion) {\n if (!assertion) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }\n }, {\n key: \"trace\",\n value: function trace() {\n this[LOG_SYMBOL](LogType.trace, [\"Trace\"]);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this[LOG_SYMBOL](LogType.clear);\n }\n }, {\n key: \"status\",\n value: function status() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n this[LOG_SYMBOL](LogType.status, args);\n }\n }, {\n key: \"group\",\n value: function group() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n this[LOG_SYMBOL](LogType.group, args);\n }\n }, {\n key: \"groupCollapsed\",\n value: function groupCollapsed() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n this[LOG_SYMBOL](LogType.groupCollapsed, args);\n }\n }, {\n key: \"groupEnd\",\n value: function groupEnd() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n\n this[LOG_SYMBOL](LogType.groupEnd, args);\n }\n }, {\n key: \"profile\",\n value: function profile(label) {\n this[LOG_SYMBOL](LogType.profile, [label]);\n }\n }, {\n key: \"profileEnd\",\n value: function profileEnd(label) {\n this[LOG_SYMBOL](LogType.profileEnd, [label]);\n }\n }, {\n key: \"time\",\n value: function time(label) {\n this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map();\n this[TIMERS_SYMBOL].set(label, process.hrtime());\n }\n }, {\n key: \"timeLog\",\n value: function timeLog(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeLog()\"));\n }\n\n var time = process.hrtime(prev);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeEnd\",\n value: function timeEnd(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeEnd()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeAggregate\",\n value: function timeAggregate(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeAggregate()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map();\n var current = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n\n if (current !== undefined) {\n if (time[1] + current[1] > 1e9) {\n time[0] += current[0] + 1;\n time[1] = time[1] - 1e9 + current[1];\n } else {\n time[0] += current[0];\n time[1] += current[1];\n }\n }\n\n this[TIMERS_AGGREGATES_SYMBOL].set(label, time);\n }\n }, {\n key: \"timeAggregateEnd\",\n value: function timeAggregateEnd(label) {\n if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return;\n var time = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n if (time === undefined) return;\n this[TIMERS_AGGREGATES_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }]);\n\n return WebpackLogger;\n}();\n\nexports.Logger = WebpackLogger;\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***!\n \\*****************************************************************/\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n LogType = _require.LogType;\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterItemTypes} FilterItemTypes */\n\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterTypes} FilterTypes */\n\n/** @typedef {import(\"./Logger\").LogTypeEnum} LogTypeEnum */\n\n/** @typedef {function(string): boolean} FilterFunction */\n\n/**\n * @typedef {Object} LoggerConsole\n * @property {function(): void} clear\n * @property {function(): void} trace\n * @property {(...args: any[]) => void} info\n * @property {(...args: any[]) => void} log\n * @property {(...args: any[]) => void} warn\n * @property {(...args: any[]) => void} error\n * @property {(...args: any[]) => void=} debug\n * @property {(...args: any[]) => void=} group\n * @property {(...args: any[]) => void=} groupCollapsed\n * @property {(...args: any[]) => void=} groupEnd\n * @property {(...args: any[]) => void=} status\n * @property {(...args: any[]) => void=} profile\n * @property {(...args: any[]) => void=} profileEnd\n * @property {(...args: any[]) => void=} logTime\n */\n\n/**\n * @typedef {Object} LoggerOptions\n * @property {false|true|\"none\"|\"error\"|\"warn\"|\"info\"|\"log\"|\"verbose\"} level loglevel\n * @property {FilterTypes|boolean} debug filter for debug logging\n * @property {LoggerConsole} console the console to log to\n */\n\n/**\n * @param {FilterItemTypes} item an input item\n * @returns {FilterFunction} filter function\n */\n\n\nvar filterToFunction = function filterToFunction(item) {\n if (typeof item === \"string\") {\n var regExp = new RegExp(\"[\\\\\\\\/]\".concat(item.replace( // eslint-disable-next-line no-useless-escape\n /[-[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\"), \"([\\\\\\\\/]|$|!|\\\\?)\"));\n return function (ident) {\n return regExp.test(ident);\n };\n }\n\n if (item && typeof item === \"object\" && typeof item.test === \"function\") {\n return function (ident) {\n return item.test(ident);\n };\n }\n\n if (typeof item === \"function\") {\n return item;\n }\n\n if (typeof item === \"boolean\") {\n return function () {\n return item;\n };\n }\n};\n/**\n * @enum {number}\n */\n\n\nvar LogLevel = {\n none: 6,\n false: 6,\n error: 5,\n warn: 4,\n info: 3,\n log: 2,\n true: 2,\n verbose: 1\n};\n/**\n * @param {LoggerOptions} options options object\n * @returns {function(string, LogTypeEnum, any[]): void} logging function\n */\n\nmodule.exports = function (_ref) {\n var _ref$level = _ref.level,\n level = _ref$level === void 0 ? \"info\" : _ref$level,\n _ref$debug = _ref.debug,\n debug = _ref$debug === void 0 ? false : _ref$debug,\n console = _ref.console;\n var debugFilters = typeof debug === \"boolean\" ? [function () {\n return debug;\n }] :\n /** @type {FilterItemTypes[]} */\n [].concat(debug).map(filterToFunction);\n /** @type {number} */\n\n var loglevel = LogLevel[\"\".concat(level)] || 0;\n /**\n * @param {string} name name of the logger\n * @param {LogTypeEnum} type type of the log entry\n * @param {any[]} args arguments of the log entry\n * @returns {void}\n */\n\n var logger = function logger(name, type, args) {\n var labeledArgs = function labeledArgs() {\n if (Array.isArray(args)) {\n if (args.length > 0 && typeof args[0] === \"string\") {\n return [\"[\".concat(name, \"] \").concat(args[0])].concat(_toConsumableArray(args.slice(1)));\n } else {\n return [\"[\".concat(name, \"]\")].concat(_toConsumableArray(args));\n }\n } else {\n return [];\n }\n };\n\n var debug = debugFilters.some(function (f) {\n return f(name);\n });\n\n switch (type) {\n case LogType.debug:\n if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.debug === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.debug.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.log:\n if (!debug && loglevel > LogLevel.log) return;\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.info:\n if (!debug && loglevel > LogLevel.info) return;\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.warn:\n if (!debug && loglevel > LogLevel.warn) return;\n console.warn.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.error:\n if (!debug && loglevel > LogLevel.error) return;\n console.error.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.trace:\n if (!debug) return;\n console.trace();\n break;\n\n case LogType.groupCollapsed:\n if (!debug && loglevel > LogLevel.log) return;\n\n if (!debug && loglevel > LogLevel.verbose) {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.groupCollapsed === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n }\n\n // falls through\n\n case LogType.group:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.group === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.group.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.groupEnd:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.groupEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupEnd();\n }\n\n break;\n\n case LogType.time:\n {\n if (!debug && loglevel > LogLevel.log) return;\n var ms = args[1] * 1000 + args[2] / 1000000;\n var msg = \"[\".concat(name, \"] \").concat(args[0], \": \").concat(ms, \" ms\");\n\n if (typeof console.logTime === \"function\") {\n console.logTime(msg);\n } else {\n console.log(msg);\n }\n\n break;\n }\n\n case LogType.profile:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profile === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profile.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.profileEnd:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profileEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profileEnd.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.clear:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.clear === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.clear();\n }\n\n break;\n\n case LogType.status:\n if (!debug && loglevel > LogLevel.info) return;\n\n if (typeof console.status === \"function\") {\n if (args.length === 0) {\n console.status();\n } else {\n console.status.apply(console, _toConsumableArray(labeledArgs()));\n }\n } else {\n if (args.length !== 0) {\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n }\n }\n\n break;\n\n default:\n throw new Error(\"Unexpected LogType \".concat(type));\n }\n };\n\n return logger;\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/runtime.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/runtime.js ***!\n \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nvar SyncBailHook = __webpack_require__(/*! tapable/lib/SyncBailHook */ \"./client-src/modules/logger/SyncBailHookFake.js\");\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n Logger = _require.Logger;\n\nvar createConsoleLogger = __webpack_require__(/*! ./createConsoleLogger */ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\");\n/** @type {createConsoleLogger.LoggerOptions} */\n\n\nvar currentDefaultLoggerOptions = {\n level: \"info\",\n debug: false,\n console: console\n};\nvar currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n/**\n * @param {string} name name of the logger\n * @returns {Logger} a logger\n */\n\nexports.getLogger = function (name) {\n return new Logger(function (type, args) {\n if (exports.hooks.log.call(name, type, args) === undefined) {\n currentDefaultLogger(name, type, args);\n }\n }, function (childName) {\n return exports.getLogger(\"\".concat(name, \"/\").concat(childName));\n });\n};\n/**\n * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options\n * @returns {void}\n */\n\n\nexports.configureDefaultLogger = function (options) {\n _extends(currentDefaultLoggerOptions, options);\n\n currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n};\n\nexports.hooks = {\n log: new SyncBailHook([\"origin\", \"type\", \"args\"])\n};\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!********************************************!*\\\n !*** ./client-src/modules/logger/index.js ***!\n \\********************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; }\n/* harmony export */ });\n/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/lib/logging/runtime.js */ \"./node_modules/webpack/lib/logging/runtime.js\");\n\n}();\nvar __webpack_export_target__ = exports;\nfor(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];\nif(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, \"__esModule\", { value: true });\n/******/ })()\n;","// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app)\n// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware).\nimport ansiHTML from \"ansi-html-community\";\nimport { encode } from \"html-entities\";\nvar colors = {\n reset: [\"transparent\", \"transparent\"],\n black: \"181818\",\n red: \"E36049\",\n green: \"B3CB74\",\n yellow: \"FFD080\",\n blue: \"7CAFC2\",\n magenta: \"7FACCA\",\n cyan: \"C3C2EF\",\n lightgrey: \"EBE7E3\",\n darkgrey: \"6D7891\"\n};\n/** @type {HTMLIFrameElement | null | undefined} */\n\nvar iframeContainerElement;\n/** @type {HTMLDivElement | null | undefined} */\n\nvar containerElement;\n/** @type {Array<(element: HTMLDivElement) => void>} */\n\nvar onLoadQueue = [];\n/** @type {TrustedTypePolicy | undefined} */\n\nvar overlayTrustedTypesPolicy;\nansiHTML.setColors(colors);\n/**\n * @param {string | null} trustedTypesPolicyName\n */\n\nfunction createContainer(trustedTypesPolicyName) {\n // Enable Trusted Types if they are available in the current browser.\n if (window.trustedTypes) {\n overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || \"webpack-dev-server#overlay\", {\n createHTML: function createHTML(value) {\n return value;\n }\n });\n }\n\n iframeContainerElement = document.createElement(\"iframe\");\n iframeContainerElement.id = \"webpack-dev-server-client-overlay\";\n iframeContainerElement.src = \"about:blank\";\n iframeContainerElement.style.position = \"fixed\";\n iframeContainerElement.style.left = 0;\n iframeContainerElement.style.top = 0;\n iframeContainerElement.style.right = 0;\n iframeContainerElement.style.bottom = 0;\n iframeContainerElement.style.width = \"100vw\";\n iframeContainerElement.style.height = \"100vh\";\n iframeContainerElement.style.border = \"none\";\n iframeContainerElement.style.zIndex = 9999999999;\n\n iframeContainerElement.onload = function () {\n containerElement =\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.createElement(\"div\");\n containerElement.id = \"webpack-dev-server-client-overlay-div\";\n containerElement.style.position = \"fixed\";\n containerElement.style.boxSizing = \"border-box\";\n containerElement.style.left = 0;\n containerElement.style.top = 0;\n containerElement.style.right = 0;\n containerElement.style.bottom = 0;\n containerElement.style.width = \"100vw\";\n containerElement.style.height = \"100vh\";\n containerElement.style.backgroundColor = \"rgba(0, 0, 0, 0.85)\";\n containerElement.style.color = \"#E8E8E8\";\n containerElement.style.fontFamily = \"Menlo, Consolas, monospace\";\n containerElement.style.fontSize = \"large\";\n containerElement.style.padding = \"2rem\";\n containerElement.style.lineHeight = \"1.2\";\n containerElement.style.whiteSpace = \"pre-wrap\";\n containerElement.style.overflow = \"auto\";\n var headerElement = document.createElement(\"span\");\n headerElement.innerText = \"Compiled with problems:\";\n var closeButtonElement = document.createElement(\"button\");\n closeButtonElement.innerText = \"X\";\n closeButtonElement.style.background = \"transparent\";\n closeButtonElement.style.border = \"none\";\n closeButtonElement.style.fontSize = \"20px\";\n closeButtonElement.style.fontWeight = \"bold\";\n closeButtonElement.style.color = \"white\";\n closeButtonElement.style.cursor = \"pointer\";\n closeButtonElement.style.cssFloat = \"right\"; // @ts-ignore\n\n closeButtonElement.style.styleFloat = \"right\";\n closeButtonElement.addEventListener(\"click\", function () {\n hide();\n });\n containerElement.appendChild(headerElement);\n containerElement.appendChild(closeButtonElement);\n containerElement.appendChild(document.createElement(\"br\"));\n containerElement.appendChild(document.createElement(\"br\"));\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.body.appendChild(containerElement);\n onLoadQueue.forEach(function (onLoad) {\n onLoad(\n /** @type {HTMLDivElement} */\n containerElement);\n });\n onLoadQueue = [];\n /** @type {HTMLIFrameElement} */\n\n iframeContainerElement.onload = null;\n };\n\n document.body.appendChild(iframeContainerElement);\n}\n/**\n * @param {(element: HTMLDivElement) => void} callback\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction ensureOverlayExists(callback, trustedTypesPolicyName) {\n if (containerElement) {\n // Everything is ready, call the callback right away.\n callback(containerElement);\n return;\n }\n\n onLoadQueue.push(callback);\n\n if (iframeContainerElement) {\n return;\n }\n\n createContainer(trustedTypesPolicyName);\n} // Successful compilation.\n\n\nfunction hide() {\n if (!iframeContainerElement) {\n return;\n } // Clean up and reset internal state.\n\n\n document.body.removeChild(iframeContainerElement);\n iframeContainerElement = null;\n containerElement = null;\n}\n/**\n * @param {string} type\n * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item\n * @returns {{ header: string, body: string }}\n */\n\n\nfunction formatProblem(type, item) {\n var header = type === \"warning\" ? \"WARNING\" : \"ERROR\";\n var body = \"\";\n\n if (typeof item === \"string\") {\n body += item;\n } else {\n var file = item.file || \"\"; // eslint-disable-next-line no-nested-ternary\n\n var moduleName = item.moduleName ? item.moduleName.indexOf(\"!\") !== -1 ? \"\".concat(item.moduleName.replace(/^(\\s|\\S)*!/, \"\"), \" (\").concat(item.moduleName, \")\") : \"\".concat(item.moduleName) : \"\";\n var loc = item.loc;\n header += \"\".concat(moduleName || file ? \" in \".concat(moduleName ? \"\".concat(moduleName).concat(file ? \" (\".concat(file, \")\") : \"\") : file).concat(loc ? \" \".concat(loc) : \"\") : \"\");\n body += item.message || \"\";\n }\n\n return {\n header: header,\n body: body\n };\n} // Compilation with errors (e.g. syntax error or missing modules).\n\n/**\n * @param {string} type\n * @param {Array} messages\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction show(type, messages, trustedTypesPolicyName) {\n ensureOverlayExists(function () {\n messages.forEach(function (message) {\n var entryElement = document.createElement(\"div\");\n var typeElement = document.createElement(\"span\");\n\n var _formatProblem = formatProblem(type, message),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n typeElement.innerText = header;\n typeElement.style.color = \"#\".concat(colors.red); // Make it look similar to our terminal.\n\n var text = ansiHTML(encode(body));\n var messageTextNode = document.createElement(\"div\");\n messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text;\n entryElement.appendChild(typeElement);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(messageTextNode);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n /** @type {HTMLDivElement} */\n\n containerElement.appendChild(entryElement);\n });\n }, trustedTypesPolicyName);\n}\n\nexport { formatProblem, show, hide };","/* global __webpack_dev_server_client__ */\nimport WebSocketClient from \"./clients/WebSocketClient.js\";\nimport { log } from \"./utils/log.js\"; // this WebsocketClient is here as a default fallback, in case the client is not injected\n\n/* eslint-disable camelcase */\n\nvar Client = // eslint-disable-next-line no-nested-ternary\ntypeof __webpack_dev_server_client__ !== \"undefined\" ? typeof __webpack_dev_server_client__.default !== \"undefined\" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : WebSocketClient;\n/* eslint-enable camelcase */\n\nvar retries = 0;\nvar maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance\n// It is mutable to enforce singleton\n// eslint-disable-next-line import/no-mutable-exports\n\nexport var client = null;\n/**\n * @param {string} url\n * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers\n * @param {number} [reconnect]\n */\n\nvar socket = function initSocket(url, handlers, reconnect) {\n client = new Client(url);\n client.onOpen(function () {\n retries = 0;\n\n if (typeof reconnect !== \"undefined\") {\n maxRetries = reconnect;\n }\n });\n client.onClose(function () {\n if (retries === 0) {\n handlers.close();\n } // Try to reconnect.\n\n\n client = null; // After 10 retries stop trying, to prevent logspam.\n\n if (retries < maxRetries) {\n // Exponentially increase timeout to reconnect.\n // Respectfully copied from the package `got`.\n // eslint-disable-next-line no-restricted-properties\n var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;\n retries += 1;\n log.info(\"Trying to reconnect...\");\n setTimeout(function () {\n socket(url, handlers, reconnect);\n }, retryInMs);\n }\n });\n client.onMessage(\n /**\n * @param {any} data\n */\n function (data) {\n var message = JSON.parse(data);\n\n if (handlers[message.type]) {\n handlers[message.type](message.data, message.params);\n }\n });\n};\n\nexport default socket;","/**\n * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL\n * @returns {string}\n */\nfunction format(objURL) {\n var protocol = objURL.protocol || \"\";\n\n if (protocol && protocol.substr(-1) !== \":\") {\n protocol += \":\";\n }\n\n var auth = objURL.auth || \"\";\n\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, \":\");\n auth += \"@\";\n }\n\n var host = \"\";\n\n if (objURL.hostname) {\n host = auth + (objURL.hostname.indexOf(\":\") === -1 ? objURL.hostname : \"[\".concat(objURL.hostname, \"]\"));\n\n if (objURL.port) {\n host += \":\".concat(objURL.port);\n }\n }\n\n var pathname = objURL.pathname || \"\";\n\n if (objURL.slashes) {\n host = \"//\".concat(host || \"\");\n\n if (pathname && pathname.charAt(0) !== \"/\") {\n pathname = \"/\".concat(pathname);\n }\n } else if (!host) {\n host = \"\";\n }\n\n var search = objURL.search || \"\";\n\n if (search && search.charAt(0) !== \"?\") {\n search = \"?\".concat(search);\n }\n\n var hash = objURL.hash || \"\";\n\n if (hash && hash.charAt(0) !== \"#\") {\n hash = \"#\".concat(hash);\n }\n\n pathname = pathname.replace(/[?#]/g,\n /**\n * @param {string} match\n * @returns {string}\n */\n function (match) {\n return encodeURIComponent(match);\n });\n search = search.replace(\"#\", \"%23\");\n return \"\".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash);\n}\n/**\n * @param {URL & { fromCurrentScript?: boolean }} parsedURL\n * @returns {string}\n */\n\n\nfunction createSocketURL(parsedURL) {\n var hostname = parsedURL.hostname; // Node.js module parses it as `::`\n // `new URL(urlString, [baseURLString])` parses it as '[::]'\n\n var isInAddrAny = hostname === \"0.0.0.0\" || hostname === \"::\" || hostname === \"[::]\"; // why do we need this check?\n // hostname n/a for file protocol (example, when using electron, ionic)\n // see: https://github.com/webpack/webpack-dev-server/pull/384\n\n if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf(\"http\") === 0) {\n hostname = self.location.hostname;\n }\n\n var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets.\n\n if (socketURLProtocol === \"auto:\" || hostname && isInAddrAny && self.location.protocol === \"https:\") {\n socketURLProtocol = self.location.protocol;\n }\n\n socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, \"ws\");\n var socketURLAuth = \"\"; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property\n // Parse authentication credentials in case we need them\n\n if (parsedURL.username) {\n socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username,\n // we only include password if the username is not empty.\n\n if (parsedURL.password) {\n // Result: :\n socketURLAuth = socketURLAuth.concat(\":\", parsedURL.password);\n }\n } // In case the host is a raw IPv6 address, it can be enclosed in\n // the brackets as the brackets are needed in the final URL string.\n // Need to remove those as url.format blindly adds its own set of brackets\n // if the host string contains colons. That would lead to non-working\n // double brackets (e.g. [[::]]) host\n //\n // All of these web socket url params are optionally passed in through resourceQuery,\n // so we need to fall back to the default if they are not provided\n\n\n var socketURLHostname = (hostname || self.location.hostname || \"localhost\").replace(/^\\[(.*)\\]$/, \"$1\");\n var socketURLPort = parsedURL.port;\n\n if (!socketURLPort || socketURLPort === \"0\") {\n socketURLPort = self.location.port;\n } // If path is provided it'll be passed in via the resourceQuery as a\n // query param so it has to be parsed out of the querystring in order for the\n // client to open the socket to the correct location.\n\n\n var socketURLPathname = \"/ws\";\n\n if (parsedURL.pathname && !parsedURL.fromCurrentScript) {\n socketURLPathname = parsedURL.pathname;\n }\n\n return format({\n protocol: socketURLProtocol,\n auth: socketURLAuth,\n hostname: socketURLHostname,\n port: socketURLPort,\n pathname: socketURLPathname,\n slashes: true\n });\n}\n\nexport default createSocketURL;","/**\n * @returns {string}\n */\nfunction getCurrentScriptSource() {\n // `document.currentScript` is the most accurate way to find the current script,\n // but is not supported in all browsers.\n if (document.currentScript) {\n return document.currentScript.getAttribute(\"src\");\n } // Fallback to getting all scripts running in the document.\n\n\n var scriptElements = document.scripts || [];\n var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) {\n return element.getAttribute(\"src\");\n });\n\n if (scriptElementsWithSrc.length > 0) {\n var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1];\n return currentScript.getAttribute(\"src\");\n } // Fail as there was no script to use.\n\n\n throw new Error(\"[webpack-dev-server] Failed to get current script source.\");\n}\n\nexport default getCurrentScriptSource;","import logger from \"../modules/logger/index.js\";\nvar name = \"webpack-dev-server\"; // default level is set on the client side, so it does not need\n// to be set by the CLI or API\n\nvar defaultLevel = \"info\"; // options new options, merge with old options\n\n/**\n * @param {false | true | \"none\" | \"error\" | \"warn\" | \"info\" | \"log\" | \"verbose\"} level\n * @returns {void}\n */\n\nfunction setLogLevel(level) {\n logger.configureDefaultLogger({\n level: level\n });\n}\n\nsetLogLevel(defaultLevel);\nvar log = logger.getLogger(name);\nexport { log, setLogLevel };","import getCurrentScriptSource from \"./getCurrentScriptSource.js\";\n/**\n * @param {string} resourceQuery\n * @returns {{ [key: string]: string | boolean }}\n */\n\nfunction parseURL(resourceQuery) {\n /** @type {{ [key: string]: string }} */\n var options = {};\n\n if (typeof resourceQuery === \"string\" && resourceQuery !== \"\") {\n var searchParams = resourceQuery.slice(1).split(\"&\");\n\n for (var i = 0; i < searchParams.length; i++) {\n var pair = searchParams[i].split(\"=\");\n options[pair[0]] = decodeURIComponent(pair[1]);\n }\n } else {\n // Else, get the url from the ', // italic\n '4': '', // underscore\n '8': 'display:none', // hidden\n '9': '' // delete\n}\nvar _closeTags = {\n '23': '', // reset italic\n '24': '', // reset underscore\n '29': '' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = ''\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text\n }\n\n // Cache opened sequence.\n var ansiCodes = []\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)m/g, function (match, seq) {\n var ot = _openTags[seq]\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop()\n return ''\n }\n // Open tag.\n ansiCodes.push(seq)\n return ot[0] === '<' ? ot : ''\n }\n\n var ct = _closeTags[seq]\n if (ct) {\n // Pop sequence\n ansiCodes.pop()\n return ct\n }\n return ''\n })\n\n // Make sure tags are closed.\n var l = ansiCodes.length\n ;(l > 0) && (ret += Array(l + 1).join(''))\n\n return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.')\n }\n\n var _finalColors = {}\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null\n if (!hex) {\n _finalColors[key] = _defColors[key]\n continue\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex]\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string'\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n }\n var defHexColor = _defColors[key]\n if (!hex[0]) {\n hex[0] = defHexColor[0]\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]]\n hex.push(defHexColor[1])\n }\n\n hex = hex.slice(0, 2)\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n }\n _finalColors[key] = hex\n }\n _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () { return _openTags }\n })\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () { return _closeTags }\n })\n} else {\n ansiHTML.tags.open = _openTags\n ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey\n\n for (var code in _styles) {\n var color = _styles[code]\n var oriColor = colors[color] || '000'\n _openTags[code] = 'color:#' + oriColor\n code = parseInt(code)\n _openTags[(code + 10).toString()] = 'background:#' + oriColor\n }\n}\n\nansiHTML.reset()\n","const arr = [];\nL.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n // re-order layers by _leaflet_id to match their display order in UI\n // add new layer to right position and avoid repitition\n const newArr = arr.every((each) => {\n return each._leaflet_id !== layer._leaflet_id;\n });\n if (newArr) {\n arr.push(layer);\n } else {\n arr.splice(arr.indexOf(layer), 1);\n }\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n // connects to JSON file and fetches JSON data therein from remote source\n async fetchRemoteJson(url) {\n let index = 0;\n const imgCollectionProps = [];\n\n try {\n const response = await axios.get(url);\n if (response.data.hasOwnProperty('avg_cm_per_pixel')) {\n if (response.data.collection.length > 1) {\n response.data.collection.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data.collection;\n\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n } else {\n if (response.data.length > 1) {\n response.data.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data;\n\n return {\n imgCollectionProps,\n };\n }\n } catch (err) {\n console.log('err', err);\n }\n },\n\n // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json\n async recreateImagesFromJsonUrl(url) {\n let imageCollectionObj = {};\n\n if (url) {\n imageCollectionObj = await this.fetchRemoteJson(url);\n return imageCollectionObj;\n };\n\n return imageCollectionObj;\n },\n\n generateExportJson(allImages = false) {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (allImages || this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length - 1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n ];\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n tooltipText: layer.getTooltipText(),\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n interactive: true,\n tooltipText: '',\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n\n this.interactive = this.options.interactive;\n this.tooltipText = this.options.tooltipText;\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n\n L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this);\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n L.DomEvent.off(this.getElement(), 'mousemove', this.deactivateTooltip, this);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n activateTooltip() {\n if (!this._selected) {\n this.bindTooltip(this.tooltipText, {direction: 'top'}).openTooltip();\n }\n },\n\n closeToolTip() {\n this.closeTooltip();\n },\n\n deactivateTooltip() {\n this.unbindTooltip();\n },\n\n getTooltipText() {\n return this.tooltipText;\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
' +\n /* eslint-disable */\n '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\\xa0u
Stack up / down
q\\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\\xa0backspace
Export Image(s)
e
'\n );\n /* eslint-enable */\n container.appendChild(button);\n return container;\n };\n\n this._keymapper.addTo(this._map);\n },\n\n _toggleKeymapper(e) {\n e.preventDefault();\n\n this._container.className = (\n this._container.className === 'ldi-keymapper leaflet-control' ?\n 'ldi-keymapper-hide leaflet-control' :\n 'ldi-keymapper leaflet-control'\n );\n\n this._scrollWrapper.style.display = (\n this._scrollWrapper.style.display === 'none' ? 'block' : 'none'\n );\n\n this._toggler.innerHTML = (\n this._toggler.innerHTML === 'close' ?\n L.IconUtil.create('keyboard_open') :\n 'close'\n );\n\n L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap');\n L.DomUtil.toggleClass(this._toggler, 'close-icon');\n },\n\n _injectIconSet() {\n if (document.querySelector('#keymapper-iconset')) { return; }\n\n const el = L.DomUtil.create('div', '');\n el.id = 'keymapper-iconset';\n el.setAttribute('hidden', 'hidden');\n\n this._iconset = new L.KeymapperIconSet().render();\n el.innerHTML = this._iconset;\n\n document.querySelector('.leaflet-control-container').appendChild(el);\n },\n});\n\nL.DistortableImage.Keymapper.addInitHook(() => {\n L.DistortableImage.Keymapper.prototype._n = (\n L.DistortableImage.Keymapper.prototype._n ?\n L.DistortableImage.Keymapper.prototype._n + 1 :\n 1\n );\n // dont enable keymapper for mobile\n if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) {\n this.enable();\n this._injectIconSet();\n }\n});\n\nL.distortableImage.keymapper = (map, options) => {\n return new L.DistortableImage.Keymapper(map, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// this class holds the keybindings and toolbar API for an image collection instance\nL.DistortableCollection.Edit = L.Handler.extend({\n options: {\n keymap: L.distortableImage.group_action_map,\n },\n\n initialize(group, options) {\n this._group = group;\n this._exportOpts = group.options.exportOpts;\n\n L.setOptions(this, options);\n\n L.distortableImage.group_action_map.Escape = '_decollectAll';\n },\n\n addHooks() {\n const group = this._group;\n const map = group._map;\n\n this.editActions = this.options.actions;\n this.runExporter =\n L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') ||\n this.startExport, this);\n\n L.DomEvent.on(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._group.editable = true;\n this._group.eachLayer(layer => layer.editing.enable());\n },\n\n removeHooks() {\n const group = this._group;\n const map = group._map;\n\n L.DomEvent.off(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._decollectAll();\n this._group.editable = false;\n this._group.eachLayer(layer => layer.editing.disable());\n },\n\n enable() {\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n\n if (!this[handlerName]) { return; }\n\n if (this._group.anyCollected()) {\n this[handlerName].call(this);\n }\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this._decollectAll(e); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._group._map;\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n L.DomEvent.on(map, 'singleclick', this._decollectAll, this);\n },\n\n _resetClickListeners() {\n const map = this._group._map;\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n L.DomEvent.off(map, 'singleclick', this._decollectAll, this);\n },\n\n _decollectAll(e) {\n let oe;\n\n if (e) { oe = e.originalEvent; }\n /**\n * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete\n * also prevents deselection following a click on a disabled img by differentiating it from the map\n */\n if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) {\n return;\n }\n\n this._group.eachLayer((layer) => {\n L.DomUtil.removeClass(layer.getElement(), 'collected');\n layer.deselect();\n });\n\n this._removeToolbar();\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _unlockGroup() {\n if (!this.hasTool(L.UnlockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer)) {\n const edit = layer.editing;\n edit._unlock();\n // unlock updates the layer's handles; deselect to ensure they're hidden\n layer.deselect();\n }\n });\n },\n\n _lockGroup() {\n if (!this.hasTool(L.LockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer) ) {\n const edit = layer.editing;\n edit._lock();\n // map.addLayer also deselects the image, so we reselect here\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _addCollections(e) {\n const box = e.boxCollectBounds;\n const map = this._group._map;\n\n this._group.eachLayer((layer) => {\n const edit = layer.editing;\n\n if (layer.isSelected()) { layer.deselect(); }\n\n const zoom = map.getZoom();\n const center = map.getCenter();\n let imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1));\n\n imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center);\n if (box.intersects(imgBounds) && edit.enabled()) {\n if (!this.toolbar) { this._addToolbar(); }\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _removeGroup(e) {\n if (!this.hasTool(L.DeleteAction)) { return; }\n\n const layersToRemove = this._group._toRemove();\n const n = layersToRemove.length;\n\n if (n === 0) { return; }\n\n const choice = L.DomUtil.confirmDeletes(n);\n\n if (choice) {\n layersToRemove.forEach((layer) => {\n this._group.removeLayer(layer);\n });\n if (!this._group.anyCollected()) {\n this._removeToolbar();\n }\n }\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n cancelExport() {\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n clearInterval(this.updateInterval);\n },\n\n _addToolbar() {\n const group = this._group;\n const map = group._map;\n\n if (group.options.suppressToolbar || this.toolbar) { return; }\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n const opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n const outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n const tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n const tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n const size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n const zoom = this._map.getZoom();\n const center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n const map = overlay._map;\n\n const dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n let cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar named_references_1 = require(\"./named-references\");\nvar numeric_unicode_map_1 = require(\"./numeric-unicode-map\");\nvar surrogate_pairs_1 = require(\"./surrogate-pairs\");\nvar allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 });\nvar encodeRegExps = {\n specialChars: /[<>'\"&]/g,\n nonAscii: /(?:[<>'\"&\\u0080-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n nonAsciiPrintable: /(?:[<>'\"&\\x01-\\x08\\x11-\\x15\\x17-\\x1F\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n extensive: /(?:[\\x01-\\x0c\\x0e-\\x1f\\x21-\\x2c\\x2e-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7d\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g\n};\nvar defaultEncodeOptions = {\n mode: 'specialChars',\n level: 'all',\n numeric: 'decimal'\n};\n/** Encodes all the necessary (specified by `level`) characters in the text */\nfunction encode(text, _a) {\n var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e;\n if (!text) {\n return '';\n }\n var encodeRegExp = encodeRegExps[mode];\n var references = allNamedReferences[level].characters;\n var isHex = numeric === 'hexadecimal';\n encodeRegExp.lastIndex = 0;\n var _b = encodeRegExp.exec(text);\n var _c;\n if (_b) {\n _c = '';\n var _d = 0;\n do {\n if (_d !== _b.index) {\n _c += text.substring(_d, _b.index);\n }\n var _e = _b[0];\n var result_1 = references[_e];\n if (!result_1) {\n var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0);\n result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';';\n }\n _c += result_1;\n _d = _b.index + _e.length;\n } while ((_b = encodeRegExp.exec(text)));\n if (_d !== text.length) {\n _c += text.substring(_d);\n }\n }\n else {\n _c =\n text;\n }\n return _c;\n}\nexports.encode = encode;\nvar defaultDecodeOptions = {\n scope: 'body',\n level: 'all'\n};\nvar strict = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);/g;\nvar attribute = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g;\nvar baseDecodeRegExps = {\n xml: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.xml\n },\n html4: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html4\n },\n html5: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html5\n }\n};\nvar decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 });\nvar fromCharCode = String.fromCharCode;\nvar outOfBoundsChar = fromCharCode(65533);\nvar defaultDecodeEntityOptions = {\n level: 'all'\n};\n/** Decodes a single entity */\nfunction decodeEntity(entity, _a) {\n var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b;\n if (!entity) {\n return '';\n }\n var _b = entity;\n var decodeEntityLastChar_1 = entity[entity.length - 1];\n if (false\n && decodeEntityLastChar_1 === '=') {\n _b =\n entity;\n }\n else if (false\n && decodeEntityLastChar_1 !== ';') {\n _b =\n entity;\n }\n else {\n var decodeResultByReference_1 = allNamedReferences[level].entities[entity];\n if (decodeResultByReference_1) {\n _b = decodeResultByReference_1;\n }\n else if (entity[0] === '&' && entity[1] === '#') {\n var decodeSecondChar_1 = entity[2];\n var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X'\n ? parseInt(entity.substr(3), 16)\n : parseInt(entity.substr(2));\n _b =\n decodeCode_1 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_1 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_1)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1);\n }\n }\n return _b;\n}\nexports.decodeEntity = decodeEntity;\n/** Decodes all entities in the text */\nfunction decode(text, _a) {\n var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b;\n if (!text) {\n return '';\n }\n var decodeRegExp = decodeRegExps[level][scope];\n var references = allNamedReferences[level].entities;\n var isAttribute = scope === 'attribute';\n var isStrict = scope === 'strict';\n decodeRegExp.lastIndex = 0;\n var replaceMatch_1 = decodeRegExp.exec(text);\n var replaceResult_1;\n if (replaceMatch_1) {\n replaceResult_1 = '';\n var replaceLastIndex_1 = 0;\n do {\n if (replaceLastIndex_1 !== replaceMatch_1.index) {\n replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index);\n }\n var replaceInput_1 = replaceMatch_1[0];\n var decodeResult_1 = replaceInput_1;\n var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1];\n if (isAttribute\n && decodeEntityLastChar_2 === '=') {\n decodeResult_1 = replaceInput_1;\n }\n else if (isStrict\n && decodeEntityLastChar_2 !== ';') {\n decodeResult_1 = replaceInput_1;\n }\n else {\n var decodeResultByReference_2 = references[replaceInput_1];\n if (decodeResultByReference_2) {\n decodeResult_1 = decodeResultByReference_2;\n }\n else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') {\n var decodeSecondChar_2 = replaceInput_1[2];\n var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X'\n ? parseInt(replaceInput_1.substr(3), 16)\n : parseInt(replaceInput_1.substr(2));\n decodeResult_1 =\n decodeCode_2 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_2 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_2)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2);\n }\n }\n replaceResult_1 += decodeResult_1;\n replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length;\n } while ((replaceMatch_1 = decodeRegExp.exec(text)));\n if (replaceLastIndex_1 !== text.length) {\n replaceResult_1 += text.substring(replaceLastIndex_1);\n }\n }\n else {\n replaceResult_1 =\n text;\n }\n return replaceResult_1;\n}\nexports.decode = decode;\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.bodyRegExps={xml:/&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{\"<\":\"<\",\">\":\">\",\""\":'\"',\"'\":\"'\",\"&\":\"&\"},characters:{\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\",\"&\":\"&\"}},html4:{entities:{\"'\":\"'\",\" \":\" \",\" \":\" \",\"¡\":\"¡\",\"¡\":\"¡\",\"¢\":\"¢\",\"¢\":\"¢\",\"£\":\"£\",\"£\":\"£\",\"¤\":\"¤\",\"¤\":\"¤\",\"¥\":\"¥\",\"¥\":\"¥\",\"¦\":\"¦\",\"¦\":\"¦\",\"§\":\"§\",\"§\":\"§\",\"¨\":\"¨\",\"¨\":\"¨\",\"©\":\"©\",\"©\":\"©\",\"ª\":\"ª\",\"ª\":\"ª\",\"«\":\"«\",\"«\":\"«\",\"¬\":\"¬\",\"¬\":\"¬\",\"­\":\"­\",\"­\":\"­\",\"®\":\"®\",\"®\":\"®\",\"¯\":\"¯\",\"¯\":\"¯\",\"°\":\"°\",\"°\":\"°\",\"±\":\"±\",\"±\":\"±\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"´\":\"´\",\"´\":\"´\",\"µ\":\"µ\",\"µ\":\"µ\",\"¶\":\"¶\",\"¶\":\"¶\",\"·\":\"·\",\"·\":\"·\",\"¸\":\"¸\",\"¸\":\"¸\",\"¹\":\"¹\",\"¹\":\"¹\",\"º\":\"º\",\"º\":\"º\",\"»\":\"»\",\"»\":\"»\",\"¼\":\"¼\",\"¼\":\"¼\",\"½\":\"½\",\"½\":\"½\",\"¾\":\"¾\",\"¾\":\"¾\",\"¿\":\"¿\",\"¿\":\"¿\",\"À\":\"À\",\"À\":\"À\",\"Á\":\"Á\",\"Á\":\"Á\",\"Â\":\"Â\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"È\":\"È\",\"È\":\"È\",\"É\":\"É\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"×\":\"×\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"ß\":\"ß\",\"à\":\"à\",\"à\":\"à\",\"á\":\"á\",\"á\":\"á\",\"â\":\"â\",\"â\":\"â\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"å\":\"å\",\"å\":\"å\",\"æ\":\"æ\",\"æ\":\"æ\",\"ç\":\"ç\",\"ç\":\"ç\",\"è\":\"è\",\"è\":\"è\",\"é\":\"é\",\"é\":\"é\",\"ê\":\"ê\",\"ê\":\"ê\",\"ë\":\"ë\",\"ë\":\"ë\",\"ì\":\"ì\",\"ì\":\"ì\",\"í\":\"í\",\"í\":\"í\",\"î\":\"î\",\"î\":\"î\",\"ï\":\"ï\",\"ï\":\"ï\",\"ð\":\"ð\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ò\":\"ò\",\"ó\":\"ó\",\"ó\":\"ó\",\"ô\":\"ô\",\"ô\":\"ô\",\"õ\":\"õ\",\"õ\":\"õ\",\"ö\":\"ö\",\"ö\":\"ö\",\"÷\":\"÷\",\"÷\":\"÷\",\"ø\":\"ø\",\"ø\":\"ø\",\"ù\":\"ù\",\"ù\":\"ù\",\"ú\":\"ú\",\"ú\":\"ú\",\"û\":\"û\",\"û\":\"û\",\"ü\":\"ü\",\"ü\":\"ü\",\"ý\":\"ý\",\"ý\":\"ý\",\"þ\":\"þ\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\""\":'\"',\""\":'\"',\"&\":\"&\",\"&\":\"&\",\"<\":\"<\",\"<\":\"<\",\">\":\">\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"⟨\":\"〈\",\"⟩\":\"〉\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"},characters:{\"'\":\"'\",\" \":\" \",\"¡\":\"¡\",\"¢\":\"¢\",\"£\":\"£\",\"¤\":\"¤\",\"¥\":\"¥\",\"¦\":\"¦\",\"§\":\"§\",\"¨\":\"¨\",\"©\":\"©\",\"ª\":\"ª\",\"«\":\"«\",\"¬\":\"¬\",\"­\":\"­\",\"®\":\"®\",\"¯\":\"¯\",\"°\":\"°\",\"±\":\"±\",\"²\":\"²\",\"³\":\"³\",\"´\":\"´\",\"µ\":\"µ\",\"¶\":\"¶\",\"·\":\"·\",\"¸\":\"¸\",\"¹\":\"¹\",\"º\":\"º\",\"»\":\"»\",\"¼\":\"¼\",\"½\":\"½\",\"¾\":\"¾\",\"¿\":\"¿\",\"À\":\"À\",\"Á\":\"Á\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"È\":\"È\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"à\":\"à\",\"á\":\"á\",\"â\":\"â\",\"ã\":\"ã\",\"ä\":\"ä\",\"å\":\"å\",\"æ\":\"æ\",\"ç\":\"ç\",\"è\":\"è\",\"é\":\"é\",\"ê\":\"ê\",\"ë\":\"ë\",\"ì\":\"ì\",\"í\":\"í\",\"î\":\"î\",\"ï\":\"ï\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ó\":\"ó\",\"ô\":\"ô\",\"õ\":\"õ\",\"ö\":\"ö\",\"÷\":\"÷\",\"ø\":\"ø\",\"ù\":\"ù\",\"ú\":\"ú\",\"û\":\"û\",\"ü\":\"ü\",\"ý\":\"ý\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",'\"':\""\",\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"〈\":\"⟨\",\"〉\":\"⟩\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"}},html5:{entities:{\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"&\":\"&\",\"&\":\"&\",\"Á\":\"Á\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"ℬ\":\"ℬ\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"ℭ\":\"ℭ\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"ⅅ\":\"ⅅ\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"∯\":\"∯\",\"¨\":\"¨\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⫤\":\"⫤\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"⇓\":\"⇓\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"É\":\"É\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"ℋ\":\"ℋ\",\"Ħ\":\"Ħ\",\"≎\":\"≎\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"ℑ\":\"ℑ\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"⇒\":\"⇒\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"ℒ\":\"ℒ\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"ℳ\":\"ℳ\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"≫\":\"≫\",\"≪\":\"≪\",\" \":\"\\n\",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℌ\":\"ℌ\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∷\":\"∷\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",\""\":'\"',\""\":'\"',\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"ℜ\":\"ℜ\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"⇒\":\"⇒\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↓\":\"↓\",\"←\":\"←\",\"→\":\"→\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∋\":\"∋\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⋑\":\"⋑\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\" \":\"\\t\",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",\"_\":\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"↑\":\"↑\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"​\":\"​\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"â\":\"â\",\"´\":\"´\",\"´\":\"´\",\"а\":\"а\",\"æ\":\"æ\",\"æ\":\"æ\",\"⁡\":\"⁡\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"&\":\"&\",\"&\":\"&\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∠\":\"∠\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"Å\":\"Å\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"≈\":\"≈\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"≈\":\"≈\",\"≊\":\"≊\",\"å\":\"å\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"≈\":\"≈\",\"≍\":\"≍\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"∳\":\"∳\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⌅\":\"⌅\",\"⎵\":\"⎵\",\"⎶\":\"⎶\",\"≌\":\"≌\",\"б\":\"б\",\"„\":\"„\",\"∵\":\"∵\",\"∵\":\"∵\",\"⦰\":\"⦰\",\"϶\":\"϶\",\"ℬ\":\"ℬ\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▪\":\"▪\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⊥\":\"⊥\",\"⊥\":\"⊥\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"─\":\"─\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"‵\":\"‵\",\"˘\":\"˘\",\"¦\":\"¦\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"\\":\"\\\\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"•\":\"•\",\"≎\":\"≎\",\"⪮\":\"⪮\",\"≏\":\"≏\",\"≏\":\"≏\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"ˇ\":\"ˇ\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"¸\":\"¸\",\"¸\":\"¸\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"¢\":\"¢\",\"·\":\"·\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"®\":\"®\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"≗\":\"≗\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\"♣\":\"♣\",\":\":\":\",\"≔\":\"≔\",\"≔\":\"≔\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"∘\":\"∘\",\"∁\":\"∁\",\"ℂ\":\"ℂ\",\"≅\":\"≅\",\"⩭\":\"⩭\",\"∮\":\"∮\",\"𝕔\":\"𝕔\",\"∐\":\"∐\",\"©\":\"©\",\"©\":\"©\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"¤\":\"¤\",\"↶\":\"↶\",\"↷\":\"↷\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"∲\":\"∲\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⇓\":\"⇓\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"↓\":\"↓\",\"‐\":\"‐\",\"⊣\":\"⊣\",\"⤏\":\"⤏\",\"˝\":\"˝\",\"ď\":\"ď\",\"д\":\"д\",\"ⅆ\":\"ⅆ\",\"‡\":\"‡\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⋄\":\"⋄\",\"⋄\":\"⋄\",\"♦\":\"♦\",\"♦\":\"♦\",\"¨\":\"¨\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"÷\":\"÷\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",\"$\":\"$\",\"𝕕\":\"𝕕\",\"˙\":\"˙\",\"≐\":\"≐\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌆\":\"⌆\",\"↓\":\"↓\",\"⇊\":\"⇊\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⤐\":\"⤐\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"▾\":\"▾\",\"⇵\":\"⇵\",\"⥯\":\"⥯\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"⩷\":\"⩷\",\"≑\":\"≑\",\"é\":\"é\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\"∅\":\"∅\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"≖\":\"≖\",\"≕\":\"≕\",\"≂\":\"≂\",\"⪖\":\"⪖\",\"⪕\":\"⪕\",\"=\":\"=\",\"≟\":\"≟\",\"≡\":\"≡\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"≐\":\"≐\",\"≂\":\"≂\",\"η\":\"η\",\"ð\":\"ð\",\"ð\":\"ð\",\"ë\":\"ë\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"∃\":\"∃\",\"ℰ\":\"ℰ\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",\"fj\":\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"∀\":\"∀\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"≧\":\"≧\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"ϝ\":\"ϝ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≥\":\"≥\",\"≧\":\"≧\",\"⩾\":\"⩾\",\"⩾\":\"⩾\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"≫\":\"≫\",\"⋙\":\"⋙\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"≷\":\"≷\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⪈\":\"⪈\",\"≩\":\"≩\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"`\":\"`\",\"ℊ\":\"ℊ\",\"≳\":\"≳\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\">\":\">\",\">\":\">\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⪆\":\"⪆\",\"⥸\":\"⥸\",\"⋗\":\"⋗\",\"⋛\":\"⋛\",\"⪌\":\"⪌\",\"≷\":\"≷\",\"≳\":\"≳\",\"≩︀\":\"≩︀\",\"≩︀\":\"≩︀\",\"⇔\":\"⇔\",\" \":\" \",\"½\":\"½\",\"ℋ\":\"ℋ\",\"ъ\":\"ъ\",\"↔\":\"↔\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ℏ\":\"ℏ\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"‐\":\"‐\",\"í\":\"í\",\"í\":\"í\",\"⁣\":\"⁣\",\"î\":\"î\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"¡\":\"¡\",\"⇔\":\"⇔\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"ì\":\"ì\",\"ⅈ\":\"ⅈ\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ℑ\":\"ℑ\",\"ℐ\":\"ℐ\",\"ℑ\":\"ℑ\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"∈\":\"∈\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"ı\":\"ı\",\"∫\":\"∫\",\"⊺\":\"⊺\",\"ℤ\":\"ℤ\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"⨼\":\"⨼\",\"¿\":\"¿\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"∈\":\"∈\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"∈\":\"∈\",\"⁢\":\"⁢\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⇚\":\"⇚\",\"⇐\":\"⇐\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"≦\":\"≦\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"ℒ\":\"ℒ\",\"λ\":\"λ\",\"⟨\":\"⟨\",\"⦑\":\"⦑\",\"⟨\":\"⟨\",\"⪅\":\"⪅\",\"«\":\"«\",\"«\":\"«\",\"←\":\"←\",\"⇤\":\"⇤\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↩\":\"↩\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"⌈\":\"⌈\",\"{\":\"{\",\"л\":\"л\",\"⤶\":\"⤶\",\"“\":\"“\",\"„\":\"„\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"←\":\"←\",\"↢\":\"↢\",\"↽\":\"↽\",\"↼\":\"↼\",\"⇇\":\"⇇\",\"↔\":\"↔\",\"⇆\":\"⇆\",\"⇋\":\"⇋\",\"↭\":\"↭\",\"⋋\":\"⋋\",\"⋚\":\"⋚\",\"≤\":\"≤\",\"≦\":\"≦\",\"⩽\":\"⩽\",\"⩽\":\"⩽\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⪅\":\"⪅\",\"⋖\":\"⋖\",\"⋚\":\"⋚\",\"⪋\":\"⪋\",\"≶\":\"≶\",\"≲\":\"≲\",\"⥼\":\"⥼\",\"⌊\":\"⌊\",\"𝔩\":\"𝔩\",\"≶\":\"≶\",\"⪑\":\"⪑\",\"↽\":\"↽\",\"↼\":\"↼\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"≪\":\"≪\",\"⇇\":\"⇇\",\"⌞\":\"⌞\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⪇\":\"⪇\",\"≨\":\"≨\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟦\":\"⟦\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟼\":\"⟼\",\"⟶\":\"⟶\",\"↫\":\"↫\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"_\":\"_\",\"◊\":\"◊\",\"◊\":\"◊\",\"⧫\":\"⧫\",\"(\":\"(\",\"⦓\":\"⦓\",\"⇆\":\"⇆\",\"⌟\":\"⌟\",\"⇋\":\"⇋\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"↰\":\"↰\",\"≲\":\"≲\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"[\":\"[\",\"‘\":\"‘\",\"‚\":\"‚\",\"ł\":\"ł\",\"<\":\"<\",\"<\":\"<\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋖\":\"⋖\",\"⋋\":\"⋋\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"◂\":\"◂\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"✠\":\"✠\",\"↦\":\"↦\",\"↦\":\"↦\",\"↧\":\"↧\",\"↤\":\"↤\",\"↥\":\"↥\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"∡\":\"∡\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"µ\":\"µ\",\"∣\":\"∣\",\"*\":\"*\",\"⫰\":\"⫰\",\"·\":\"·\",\"·\":\"·\",\"−\":\"−\",\"⊟\":\"⊟\",\"∸\":\"∸\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"…\":\"…\",\"∓\":\"∓\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"∓\":\"∓\",\"𝓂\":\"𝓂\",\"∾\":\"∾\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"≫̸\":\"≫̸\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"≪̸\":\"≪̸\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"∇\":\"∇\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"≉\":\"≉\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"≉\":\"≉\",\"♮\":\"♮\",\"♮\":\"♮\",\"ℕ\":\"ℕ\",\" \":\" \",\" \":\" \",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"≇\":\"≇\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"≠\":\"≠\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"↗\":\"↗\",\"↗\":\"↗\",\"≐̸\":\"≐̸\",\"≢\":\"≢\",\"⤨\":\"⤨\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"∄\":\"∄\",\"𝔫\":\"𝔫\",\"≧̸\":\"≧̸\",\"≱\":\"≱\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"⩾̸\":\"⩾̸\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≯\":\"≯\",\"≯\":\"≯\",\"⇎\":\"⇎\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"∋\":\"∋\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"∋\":\"∋\",\"њ\":\"њ\",\"⇍\":\"⇍\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"≰\":\"≰\",\"↚\":\"↚\",\"↮\":\"↮\",\"≰\":\"≰\",\"≦̸\":\"≦̸\",\"⩽̸\":\"⩽̸\",\"⩽̸\":\"⩽̸\",\"≮\":\"≮\",\"≴\":\"≴\",\"≮\":\"≮\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"∤\":\"∤\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"¬\":\"¬\",\"∉\":\"∉\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"∉\":\"∉\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"∌\":\"∌\",\"∌\":\"∌\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"∦\":\"∦\",\"∦\":\"∦\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"⊀\":\"⊀\",\"⋠\":\"⋠\",\"⪯̸\":\"⪯̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⇏\":\"⇏\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"↛\":\"↛\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"⊁\":\"⊁\",\"⋡\":\"⋡\",\"⪰̸\":\"⪰̸\",\"𝓃\":\"𝓃\",\"∤\":\"∤\",\"∦\":\"∦\",\"≁\":\"≁\",\"≄\":\"≄\",\"≄\":\"≄\",\"∤\":\"∤\",\"∦\":\"∦\",\"⋢\":\"⋢\",\"⋣\":\"⋣\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊈\":\"⊈\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⫅̸\":\"⫅̸\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"⊉\":\"⊉\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"⫆̸\":\"⫆̸\",\"≹\":\"≹\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"≸\":\"≸\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"↖\":\"↖\",\"↖\":\"↖\",\"⤧\":\"⤧\",\"Ⓢ\":\"Ⓢ\",\"ó\":\"ó\",\"ó\":\"ó\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"ô\":\"ô\",\"ô\":\"ô\",\"о\":\"о\",\"⊝\":\"⊝\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⊙\":\"⊙\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"Ω\":\"Ω\",\"∮\":\"∮\",\"↺\":\"↺\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"‾\":\"‾\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"⊖\":\"⊖\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"⊕\":\"⊕\",\"∨\":\"∨\",\"↻\":\"↻\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"ª\":\"ª\",\"º\":\"º\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ℴ\":\"ℴ\",\"ø\":\"ø\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"õ\":\"õ\",\"⊗\":\"⊗\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"∥\":\"∥\",\"¶\":\"¶\",\"¶\":\"¶\",\"∥\":\"∥\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"∂\":\"∂\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"⊥\":\"⊥\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"ℳ\":\"ℳ\",\"☎\":\"☎\",\"π\":\"π\",\"⋔\":\"⋔\",\"ϖ\":\"ϖ\",\"ℏ\":\"ℏ\",\"ℎ\":\"ℎ\",\"ℏ\":\"ℏ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⊞\":\"⊞\",\"⨢\":\"⨢\",\"∔\":\"∔\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"±\":\"±\",\"±\":\"±\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"±\":\"±\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"£\":\"£\",\"≺\":\"≺\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"≺\":\"≺\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"≾\":\"≾\",\"′\":\"′\",\"ℙ\":\"ℙ\",\"⪵\":\"⪵\",\"⪹\":\"⪹\",\"⋨\":\"⋨\",\"∏\":\"∏\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"∝\":\"∝\",\"∝\":\"∝\",\"≾\":\"≾\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"⨌\":\"⨌\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"ℍ\":\"ℍ\",\"⨖\":\"⨖\",\"?\":\"?\",\"≟\":\"≟\",\""\":'\"',\""\":'\"',\"⇛\":\"⇛\",\"⇒\":\"⇒\",\"⤜\":\"⤜\",\"⤏\":\"⤏\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"√\":\"√\",\"⦳\":\"⦳\",\"⟩\":\"⟩\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"⟩\":\"⟩\",\"»\":\"»\",\"»\":\"»\",\"→\":\"→\",\"⥵\":\"⥵\",\"⇥\":\"⇥\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"↪\":\"↪\",\"↬\":\"↬\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"ℚ\":\"ℚ\",\"⤍\":\"⤍\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"⌉\":\"⌉\",\"}\":\"}\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"”\":\"”\",\"”\":\"”\",\"↳\":\"↳\",\"ℜ\":\"ℜ\",\"ℛ\":\"ℛ\",\"ℜ\":\"ℜ\",\"ℝ\":\"ℝ\",\"▭\":\"▭\",\"®\":\"®\",\"®\":\"®\",\"⥽\":\"⥽\",\"⌋\":\"⌋\",\"𝔯\":\"𝔯\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"→\":\"→\",\"↣\":\"↣\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"⇉\":\"⇉\",\"↝\":\"↝\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"≓\":\"≓\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⟧\":\"⟧\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"⇉\":\"⇉\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"↱\":\"↱\",\"]\":\"]\",\"’\":\"’\",\"’\":\"’\",\"⋌\":\"⋌\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"▸\":\"▸\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"‚\":\"‚\",\"≻\":\"≻\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"≿\":\"≿\",\"с\":\"с\",\"⋅\":\"⋅\",\"⊡\":\"⊡\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"⤥\":\"⤥\",\"↘\":\"↘\",\"↘\":\"↘\",\"§\":\"§\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"∖\":\"∖\",\"∖\":\"∖\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"⌢\":\"⌢\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"∣\":\"∣\",\"∥\":\"∥\",\"­\":\"­\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"ς\":\"ς\",\"∼\":\"∼\",\"⩪\":\"⩪\",\"≃\":\"≃\",\"≃\":\"≃\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"←\":\"←\",\"∖\":\"∖\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"∣\":\"∣\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"♠\":\"♠\",\"∥\":\"∥\",\"⊓\":\"⊓\",\"⊓︀\":\"⊓︀\",\"⊔\":\"⊔\",\"⊔︀\":\"⊔︀\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"□\":\"□\",\"□\":\"□\",\"▪\":\"▪\",\"▪\":\"▪\",\"→\":\"→\",\"𝓈\":\"𝓈\",\"∖\":\"∖\",\"⌣\":\"⌣\",\"⋆\":\"⋆\",\"☆\":\"☆\",\"★\":\"★\",\"ϵ\":\"ϵ\",\"ϕ\":\"ϕ\",\"¯\":\"¯\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⊆\":\"⊆\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⊂\":\"⊂\",\"⊆\":\"⊆\",\"⫅\":\"⫅\",\"⊊\":\"⊊\",\"⫋\":\"⫋\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"≻\":\"≻\",\"⪸\":\"⪸\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"⪺\":\"⪺\",\"⪶\":\"⪶\",\"⋩\":\"⋩\",\"≿\":\"≿\",\"∑\":\"∑\",\"♪\":\"♪\",\"¹\":\"¹\",\"¹\":\"¹\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"⊃\":\"⊃\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⊇\":\"⊇\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⫆\":\"⫆\",\"⊋\":\"⊋\",\"⫌\":\"⫌\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤦\":\"⤦\",\"↙\":\"↙\",\"↙\":\"↙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"⎴\":\"⎴\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⃛\":\"⃛\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"∴\":\"∴\",\"∴\":\"∴\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"ϑ\":\"ϑ\",\"≈\":\"≈\",\"∼\":\"∼\",\" \":\" \",\"≈\":\"≈\",\"∼\":\"∼\",\"þ\":\"þ\",\"þ\":\"þ\",\"˜\":\"˜\",\"×\":\"×\",\"×\":\"×\",\"⊠\":\"⊠\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"∭\":\"∭\",\"⤨\":\"⤨\",\"⊤\":\"⊤\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"⤩\":\"⤩\",\"‴\":\"‴\",\"™\":\"™\",\"▵\":\"▵\",\"▿\":\"▿\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"≜\":\"≜\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"◬\":\"◬\",\"≜\":\"≜\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"≬\":\"≬\",\"↞\":\"↞\",\"↠\":\"↠\",\"⇑\":\"⇑\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ú\":\"ú\",\"↑\":\"↑\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"û\":\"û\",\"у\":\"у\",\"⇅\":\"⇅\",\"ű\":\"ű\",\"⥮\":\"⥮\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"ù\":\"ù\",\"↿\":\"↿\",\"↾\":\"↾\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"¨\":\"¨\",\"¨\":\"¨\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"↑\":\"↑\",\"↕\":\"↕\",\"↿\":\"↿\",\"↾\":\"↾\",\"⊎\":\"⊎\",\"υ\":\"υ\",\"ϒ\":\"ϒ\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"▵\":\"▵\",\"▴\":\"▴\",\"⇈\":\"⇈\",\"ü\":\"ü\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⇕\":\"⇕\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⊨\":\"⊨\",\"⦜\":\"⦜\",\"ϵ\":\"ϵ\",\"ϰ\":\"ϰ\",\"∅\":\"∅\",\"ϕ\":\"ϕ\",\"ϖ\":\"ϖ\",\"∝\":\"∝\",\"↕\":\"↕\",\"ϱ\":\"ϱ\",\"ς\":\"ς\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"ϑ\":\"ϑ\",\"⊲\":\"⊲\",\"⊳\":\"⊳\",\"в\":\"в\",\"⊢\":\"⊢\",\"∨\":\"∨\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"|\":\"|\",\"|\":\"|\",\"𝔳\":\"𝔳\",\"⊲\":\"⊲\",\"⊂⃒\":\"⊂⃒\",\"⊃⃒\":\"⊃⃒\",\"𝕧\":\"𝕧\",\"∝\":\"∝\",\"⊳\":\"⊳\",\"𝓋\":\"𝓋\",\"⫋︀\":\"⫋︀\",\"⊊︀\":\"⊊︀\",\"⫌︀\":\"⫌︀\",\"⊋︀\":\"⊋︀\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"∧\":\"∧\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"℘\":\"℘\",\"≀\":\"≀\",\"≀\":\"≀\",\"𝓌\":\"𝓌\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"▽\":\"▽\",\"𝔵\":\"𝔵\",\"⟺\":\"⟺\",\"⟷\":\"⟷\",\"ξ\":\"ξ\",\"⟸\":\"⟸\",\"⟵\":\"⟵\",\"⟼\":\"⟼\",\"⋻\":\"⋻\",\"⨀\":\"⨀\",\"𝕩\":\"𝕩\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⟹\":\"⟹\",\"⟶\":\"⟶\",\"𝓍\":\"𝓍\",\"⨆\":\"⨆\",\"⨄\":\"⨄\",\"△\":\"△\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"ý\":\"ý\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ℨ\":\"ℨ\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"},characters:{\"Æ\":\"Æ\",\"&\":\"&\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"Ħ\":\"Ħ\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"\\n\":\" \",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",'\"':\""\",\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\"\\t\":\" \",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",_:\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"а\":\"а\",\"æ\":\"æ\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"ã\":\"ã\",\"ä\":\"ä\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⎶\":\"⎶\",\"б\":\"б\",\"„\":\"„\",\"⦰\":\"⦰\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"◯\":\"◯\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"\\\\\":\"\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"⪮\":\"⪮\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\":\":\":\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"⩭\":\"⩭\",\"𝕔\":\"𝕔\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"‐\":\"‐\",\"⤏\":\"⤏\",\"ď\":\"ď\",\"д\":\"д\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"♦\":\"♦\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",$:\"$\",\"𝕕\":\"𝕕\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"=\":\"=\",\"≟\":\"≟\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"η\":\"η\",\"ð\":\"ð\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",fj:\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"ℊ\":\"ℊ\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⥸\":\"⥸\",\"≩︀\":\"≩︀\",\"ъ\":\"ъ\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"í\":\"í\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"λ\":\"λ\",\"⦑\":\"⦑\",\"⪅\":\"⪅\",\"«\":\"«\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"л\":\"л\",\"⤶\":\"⤶\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"⇇\":\"⇇\",\"⋋\":\"⋋\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⋖\":\"⋖\",\"⥼\":\"⥼\",\"𝔩\":\"𝔩\",\"⪑\":\"⪑\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟼\":\"⟼\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"◊\":\"◊\",\"(\":\"(\",\"⦓\":\"⦓\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"‚\":\"‚\",\"ł\":\"ł\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"⫰\":\"⫰\",\"−\":\"−\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"𝓂\":\"𝓂\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"♮\":\"♮\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"≐̸\":\"≐̸\",\"⤨\":\"⤨\",\"𝔫\":\"𝔫\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"њ\":\"њ\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"𝓃\":\"𝓃\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"ñ\":\"ñ\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"⤧\":\"⤧\",\"ó\":\"ó\",\"ô\":\"ô\",\"о\":\"о\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"∨\":\"∨\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"¶\":\"¶\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"☎\":\"☎\",\"π\":\"π\",\"ϖ\":\"ϖ\",\"ℎ\":\"ℎ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⨢\":\"⨢\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"′\":\"′\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"⨖\":\"⨖\",\"?\":\"?\",\"⤜\":\"⤜\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"⦳\":\"⦳\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"»\":\"»\",\"⥵\":\"⥵\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"↳\":\"↳\",\"▭\":\"▭\",\"⥽\":\"⥽\",\"𝔯\":\"𝔯\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"⇉\":\"⇉\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"с\":\"с\",\"⋅\":\"⋅\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"⩪\":\"⩪\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"⊓︀\":\"⊓︀\",\"⊔︀\":\"⊔︀\",\"𝓈\":\"𝓈\",\"☆\":\"☆\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"♪\":\"♪\",\"¹\":\"¹\",\"²\":\"²\",\"³\":\"³\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"þ\":\"þ\",\"×\":\"×\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"‴\":\"‴\",\"▵\":\"▵\",\"≜\":\"≜\",\"◬\":\"◬\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"у\":\"у\",\"ű\":\"ű\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⦜\":\"⦜\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"в\":\"в\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"𝔳\":\"𝔳\",\"𝕧\":\"𝕧\",\"𝓋\":\"𝓋\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"𝓌\":\"𝓌\",\"𝔵\":\"𝔵\",\"ξ\":\"ξ\",\"⋻\":\"⋻\",\"𝕩\":\"𝕩\",\"𝓍\":\"𝓍\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"}}};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { log } from \"../utils/log.js\";\n\nvar WebSocketClient = /*#__PURE__*/function () {\n /**\n * @param {string} url\n */\n function WebSocketClient(url) {\n _classCallCheck(this, WebSocketClient);\n\n this.client = new WebSocket(url);\n\n this.client.onerror = function (error) {\n log.error(error);\n };\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n\n _createClass(WebSocketClient, [{\n key: \"onOpen\",\n value: function onOpen(f) {\n this.client.onopen = f;\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onClose\",\n value: function onClose(f) {\n this.client.onclose = f;\n } // call f with the message string as the first argument\n\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onMessage\",\n value: function onMessage(f) {\n this.client.onmessage = function (e) {\n f(e.data);\n };\n }\n }]);\n\n return WebSocketClient;\n}();\n\nexport { WebSocketClient as default };","/* global __resourceQuery, __webpack_hash__ */\n/// \nimport webpackHotLog from \"webpack/hot/log.js\";\nimport stripAnsi from \"./utils/stripAnsi.js\";\nimport parseURL from \"./utils/parseURL.js\";\nimport socket from \"./socket.js\";\nimport { formatProblem, show, hide } from \"./overlay.js\";\nimport { log, setLogLevel } from \"./utils/log.js\";\nimport sendMessage from \"./utils/sendMessage.js\";\nimport reloadApp from \"./utils/reloadApp.js\";\nimport createSocketURL from \"./utils/createSocketURL.js\";\n/**\n * @typedef {Object} Options\n * @property {boolean} hot\n * @property {boolean} liveReload\n * @property {boolean} progress\n * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay\n * @property {string} [logging]\n * @property {number} [reconnect]\n */\n\n/**\n * @typedef {Object} Status\n * @property {boolean} isUnloading\n * @property {string} currentHash\n * @property {string} [previousHash]\n */\n\n/**\n * @type {Status}\n */\n\nvar status = {\n isUnloading: false,\n // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement\n // eslint-disable-next-line camelcase\n currentHash: typeof __webpack_hash__ !== \"undefined\" ? __webpack_hash__ : \"\"\n};\n/** @type {Options} */\n\nvar options = {\n hot: false,\n liveReload: false,\n progress: false,\n overlay: false\n};\nvar parsedResourceQuery = parseURL(__resourceQuery);\n\nif (parsedResourceQuery.hot === \"true\") {\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n}\n\nif (parsedResourceQuery[\"live-reload\"] === \"true\") {\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n}\n\nif (parsedResourceQuery.logging) {\n options.logging = parsedResourceQuery.logging;\n}\n\nif (typeof parsedResourceQuery.reconnect !== \"undefined\") {\n options.reconnect = Number(parsedResourceQuery.reconnect);\n}\n/**\n * @param {string} level\n */\n\n\nfunction setAllLogLevel(level) {\n // This is needed because the HMR logger operate separately from dev server logger\n webpackHotLog.setLogLevel(level === \"verbose\" || level === \"log\" ? \"info\" : level);\n setLogLevel(level);\n}\n\nif (options.logging) {\n setAllLogLevel(options.logging);\n}\n\nself.addEventListener(\"beforeunload\", function () {\n status.isUnloading = true;\n});\nvar onSocketMessage = {\n hot: function hot() {\n if (parsedResourceQuery.hot === \"false\") {\n return;\n }\n\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n },\n liveReload: function liveReload() {\n if (parsedResourceQuery[\"live-reload\"] === \"false\") {\n return;\n }\n\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n },\n invalid: function invalid() {\n log.info(\"App updated. Recompiling...\"); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain.\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Invalid\");\n },\n\n /**\n * @param {string} hash\n */\n hash: function hash(_hash) {\n status.previousHash = status.currentHash;\n status.currentHash = _hash;\n },\n logging: setAllLogLevel,\n\n /**\n * @param {boolean} value\n */\n overlay: function overlay(value) {\n if (typeof document === \"undefined\") {\n return;\n }\n\n options.overlay = value;\n },\n\n /**\n * @param {number} value\n */\n reconnect: function reconnect(value) {\n if (parsedResourceQuery.reconnect === \"false\") {\n return;\n }\n\n options.reconnect = value;\n },\n\n /**\n * @param {boolean} value\n */\n progress: function progress(value) {\n options.progress = value;\n },\n\n /**\n * @param {{ pluginName?: string, percent: number, msg: string }} data\n */\n \"progress-update\": function progressUpdate(data) {\n if (options.progress) {\n log.info(\"\".concat(data.pluginName ? \"[\".concat(data.pluginName, \"] \") : \"\").concat(data.percent, \"% - \").concat(data.msg, \".\"));\n }\n\n sendMessage(\"Progress\", data);\n },\n \"still-ok\": function stillOk() {\n log.info(\"Nothing changed.\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"StillOk\");\n },\n ok: function ok() {\n sendMessage(\"Ok\");\n\n if (options.overlay) {\n hide();\n }\n\n reloadApp(options, status);\n },\n // TODO: remove in v5 in favor of 'static-changed'\n\n /**\n * @param {string} file\n */\n \"content-changed\": function contentChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {string} file\n */\n \"static-changed\": function staticChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {Error[]} warnings\n * @param {any} params\n */\n warnings: function warnings(_warnings, params) {\n log.warn(\"Warnings while compiling.\");\n\n var printableWarnings = _warnings.map(function (error) {\n var _formatProblem = formatProblem(\"warning\", error),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Warnings\", printableWarnings);\n\n for (var i = 0; i < printableWarnings.length; i++) {\n log.warn(printableWarnings[i]);\n }\n\n var needShowOverlayForWarnings = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.warnings;\n\n if (needShowOverlayForWarnings) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"warning\", _warnings, trustedTypesPolicyName || null);\n }\n\n if (params && params.preventReloading) {\n return;\n }\n\n reloadApp(options, status);\n },\n\n /**\n * @param {Error[]} errors\n */\n errors: function errors(_errors) {\n log.error(\"Errors while compiling. Reload prevented.\");\n\n var printableErrors = _errors.map(function (error) {\n var _formatProblem2 = formatProblem(\"error\", error),\n header = _formatProblem2.header,\n body = _formatProblem2.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Errors\", printableErrors);\n\n for (var i = 0; i < printableErrors.length; i++) {\n log.error(printableErrors[i]);\n }\n\n var needShowOverlayForErrors = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.errors;\n\n if (needShowOverlayForErrors) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"error\", _errors, trustedTypesPolicyName || null);\n }\n },\n\n /**\n * @param {Error} error\n */\n error: function error(_error) {\n log.error(_error);\n },\n close: function close() {\n log.info(\"Disconnected!\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Close\");\n }\n};\nvar socketURL = createSocketURL(parsedResourceQuery);\nsocket(socketURL, onSocketMessage, options.reconnect);","/******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./client-src/modules/logger/SyncBailHookFake.js\":\n/*!*******************************************************!*\\\n !*** ./client-src/modules/logger/SyncBailHookFake.js ***!\n \\*******************************************************/\n/***/ (function(module) {\n\n\n/**\n * Client stub for tapable SyncBailHook\n */\n\nmodule.exports = function clientTapableSyncBailHook() {\n return {\n call: function call() {}\n };\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/Logger.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/Logger.js ***!\n \\****************************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nvar LogType = Object.freeze({\n error:\n /** @type {\"error\"} */\n \"error\",\n // message, c style arguments\n warn:\n /** @type {\"warn\"} */\n \"warn\",\n // message, c style arguments\n info:\n /** @type {\"info\"} */\n \"info\",\n // message, c style arguments\n log:\n /** @type {\"log\"} */\n \"log\",\n // message, c style arguments\n debug:\n /** @type {\"debug\"} */\n \"debug\",\n // message, c style arguments\n trace:\n /** @type {\"trace\"} */\n \"trace\",\n // no arguments\n group:\n /** @type {\"group\"} */\n \"group\",\n // [label]\n groupCollapsed:\n /** @type {\"groupCollapsed\"} */\n \"groupCollapsed\",\n // [label]\n groupEnd:\n /** @type {\"groupEnd\"} */\n \"groupEnd\",\n // [label]\n profile:\n /** @type {\"profile\"} */\n \"profile\",\n // [profileName]\n profileEnd:\n /** @type {\"profileEnd\"} */\n \"profileEnd\",\n // [profileName]\n time:\n /** @type {\"time\"} */\n \"time\",\n // name, time as [seconds, nanoseconds]\n clear:\n /** @type {\"clear\"} */\n \"clear\",\n // no arguments\n status:\n /** @type {\"status\"} */\n \"status\" // message, arguments\n\n});\nexports.LogType = LogType;\n/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */\n\nvar LOG_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger raw log method\");\nvar TIMERS_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger times\");\nvar TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger aggregated times\");\n\nvar WebpackLogger = /*#__PURE__*/function () {\n /**\n * @param {function(LogTypeEnum, any[]=): void} log log function\n * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger\n */\n function WebpackLogger(log, getChildLogger) {\n _classCallCheck(this, WebpackLogger);\n\n this[LOG_SYMBOL] = log;\n this.getChildLogger = getChildLogger;\n }\n\n _createClass(WebpackLogger, [{\n key: \"error\",\n value: function error() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this[LOG_SYMBOL](LogType.warn, args);\n }\n }, {\n key: \"info\",\n value: function info() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this[LOG_SYMBOL](LogType.info, args);\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this[LOG_SYMBOL](LogType.log, args);\n }\n }, {\n key: \"debug\",\n value: function debug() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n this[LOG_SYMBOL](LogType.debug, args);\n }\n }, {\n key: \"assert\",\n value: function assert(assertion) {\n if (!assertion) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }\n }, {\n key: \"trace\",\n value: function trace() {\n this[LOG_SYMBOL](LogType.trace, [\"Trace\"]);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this[LOG_SYMBOL](LogType.clear);\n }\n }, {\n key: \"status\",\n value: function status() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n this[LOG_SYMBOL](LogType.status, args);\n }\n }, {\n key: \"group\",\n value: function group() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n this[LOG_SYMBOL](LogType.group, args);\n }\n }, {\n key: \"groupCollapsed\",\n value: function groupCollapsed() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n this[LOG_SYMBOL](LogType.groupCollapsed, args);\n }\n }, {\n key: \"groupEnd\",\n value: function groupEnd() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n\n this[LOG_SYMBOL](LogType.groupEnd, args);\n }\n }, {\n key: \"profile\",\n value: function profile(label) {\n this[LOG_SYMBOL](LogType.profile, [label]);\n }\n }, {\n key: \"profileEnd\",\n value: function profileEnd(label) {\n this[LOG_SYMBOL](LogType.profileEnd, [label]);\n }\n }, {\n key: \"time\",\n value: function time(label) {\n this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map();\n this[TIMERS_SYMBOL].set(label, process.hrtime());\n }\n }, {\n key: \"timeLog\",\n value: function timeLog(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeLog()\"));\n }\n\n var time = process.hrtime(prev);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeEnd\",\n value: function timeEnd(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeEnd()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeAggregate\",\n value: function timeAggregate(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeAggregate()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map();\n var current = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n\n if (current !== undefined) {\n if (time[1] + current[1] > 1e9) {\n time[0] += current[0] + 1;\n time[1] = time[1] - 1e9 + current[1];\n } else {\n time[0] += current[0];\n time[1] += current[1];\n }\n }\n\n this[TIMERS_AGGREGATES_SYMBOL].set(label, time);\n }\n }, {\n key: \"timeAggregateEnd\",\n value: function timeAggregateEnd(label) {\n if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return;\n var time = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n if (time === undefined) return;\n this[TIMERS_AGGREGATES_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }]);\n\n return WebpackLogger;\n}();\n\nexports.Logger = WebpackLogger;\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***!\n \\*****************************************************************/\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n LogType = _require.LogType;\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterItemTypes} FilterItemTypes */\n\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterTypes} FilterTypes */\n\n/** @typedef {import(\"./Logger\").LogTypeEnum} LogTypeEnum */\n\n/** @typedef {function(string): boolean} FilterFunction */\n\n/**\n * @typedef {Object} LoggerConsole\n * @property {function(): void} clear\n * @property {function(): void} trace\n * @property {(...args: any[]) => void} info\n * @property {(...args: any[]) => void} log\n * @property {(...args: any[]) => void} warn\n * @property {(...args: any[]) => void} error\n * @property {(...args: any[]) => void=} debug\n * @property {(...args: any[]) => void=} group\n * @property {(...args: any[]) => void=} groupCollapsed\n * @property {(...args: any[]) => void=} groupEnd\n * @property {(...args: any[]) => void=} status\n * @property {(...args: any[]) => void=} profile\n * @property {(...args: any[]) => void=} profileEnd\n * @property {(...args: any[]) => void=} logTime\n */\n\n/**\n * @typedef {Object} LoggerOptions\n * @property {false|true|\"none\"|\"error\"|\"warn\"|\"info\"|\"log\"|\"verbose\"} level loglevel\n * @property {FilterTypes|boolean} debug filter for debug logging\n * @property {LoggerConsole} console the console to log to\n */\n\n/**\n * @param {FilterItemTypes} item an input item\n * @returns {FilterFunction} filter function\n */\n\n\nvar filterToFunction = function filterToFunction(item) {\n if (typeof item === \"string\") {\n var regExp = new RegExp(\"[\\\\\\\\/]\".concat(item.replace( // eslint-disable-next-line no-useless-escape\n /[-[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\"), \"([\\\\\\\\/]|$|!|\\\\?)\"));\n return function (ident) {\n return regExp.test(ident);\n };\n }\n\n if (item && typeof item === \"object\" && typeof item.test === \"function\") {\n return function (ident) {\n return item.test(ident);\n };\n }\n\n if (typeof item === \"function\") {\n return item;\n }\n\n if (typeof item === \"boolean\") {\n return function () {\n return item;\n };\n }\n};\n/**\n * @enum {number}\n */\n\n\nvar LogLevel = {\n none: 6,\n false: 6,\n error: 5,\n warn: 4,\n info: 3,\n log: 2,\n true: 2,\n verbose: 1\n};\n/**\n * @param {LoggerOptions} options options object\n * @returns {function(string, LogTypeEnum, any[]): void} logging function\n */\n\nmodule.exports = function (_ref) {\n var _ref$level = _ref.level,\n level = _ref$level === void 0 ? \"info\" : _ref$level,\n _ref$debug = _ref.debug,\n debug = _ref$debug === void 0 ? false : _ref$debug,\n console = _ref.console;\n var debugFilters = typeof debug === \"boolean\" ? [function () {\n return debug;\n }] :\n /** @type {FilterItemTypes[]} */\n [].concat(debug).map(filterToFunction);\n /** @type {number} */\n\n var loglevel = LogLevel[\"\".concat(level)] || 0;\n /**\n * @param {string} name name of the logger\n * @param {LogTypeEnum} type type of the log entry\n * @param {any[]} args arguments of the log entry\n * @returns {void}\n */\n\n var logger = function logger(name, type, args) {\n var labeledArgs = function labeledArgs() {\n if (Array.isArray(args)) {\n if (args.length > 0 && typeof args[0] === \"string\") {\n return [\"[\".concat(name, \"] \").concat(args[0])].concat(_toConsumableArray(args.slice(1)));\n } else {\n return [\"[\".concat(name, \"]\")].concat(_toConsumableArray(args));\n }\n } else {\n return [];\n }\n };\n\n var debug = debugFilters.some(function (f) {\n return f(name);\n });\n\n switch (type) {\n case LogType.debug:\n if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.debug === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.debug.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.log:\n if (!debug && loglevel > LogLevel.log) return;\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.info:\n if (!debug && loglevel > LogLevel.info) return;\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.warn:\n if (!debug && loglevel > LogLevel.warn) return;\n console.warn.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.error:\n if (!debug && loglevel > LogLevel.error) return;\n console.error.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.trace:\n if (!debug) return;\n console.trace();\n break;\n\n case LogType.groupCollapsed:\n if (!debug && loglevel > LogLevel.log) return;\n\n if (!debug && loglevel > LogLevel.verbose) {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.groupCollapsed === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n }\n\n // falls through\n\n case LogType.group:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.group === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.group.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.groupEnd:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.groupEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupEnd();\n }\n\n break;\n\n case LogType.time:\n {\n if (!debug && loglevel > LogLevel.log) return;\n var ms = args[1] * 1000 + args[2] / 1000000;\n var msg = \"[\".concat(name, \"] \").concat(args[0], \": \").concat(ms, \" ms\");\n\n if (typeof console.logTime === \"function\") {\n console.logTime(msg);\n } else {\n console.log(msg);\n }\n\n break;\n }\n\n case LogType.profile:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profile === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profile.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.profileEnd:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profileEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profileEnd.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.clear:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.clear === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.clear();\n }\n\n break;\n\n case LogType.status:\n if (!debug && loglevel > LogLevel.info) return;\n\n if (typeof console.status === \"function\") {\n if (args.length === 0) {\n console.status();\n } else {\n console.status.apply(console, _toConsumableArray(labeledArgs()));\n }\n } else {\n if (args.length !== 0) {\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n }\n }\n\n break;\n\n default:\n throw new Error(\"Unexpected LogType \".concat(type));\n }\n };\n\n return logger;\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/runtime.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/runtime.js ***!\n \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nvar SyncBailHook = __webpack_require__(/*! tapable/lib/SyncBailHook */ \"./client-src/modules/logger/SyncBailHookFake.js\");\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n Logger = _require.Logger;\n\nvar createConsoleLogger = __webpack_require__(/*! ./createConsoleLogger */ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\");\n/** @type {createConsoleLogger.LoggerOptions} */\n\n\nvar currentDefaultLoggerOptions = {\n level: \"info\",\n debug: false,\n console: console\n};\nvar currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n/**\n * @param {string} name name of the logger\n * @returns {Logger} a logger\n */\n\nexports.getLogger = function (name) {\n return new Logger(function (type, args) {\n if (exports.hooks.log.call(name, type, args) === undefined) {\n currentDefaultLogger(name, type, args);\n }\n }, function (childName) {\n return exports.getLogger(\"\".concat(name, \"/\").concat(childName));\n });\n};\n/**\n * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options\n * @returns {void}\n */\n\n\nexports.configureDefaultLogger = function (options) {\n _extends(currentDefaultLoggerOptions, options);\n\n currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n};\n\nexports.hooks = {\n log: new SyncBailHook([\"origin\", \"type\", \"args\"])\n};\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!********************************************!*\\\n !*** ./client-src/modules/logger/index.js ***!\n \\********************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; }\n/* harmony export */ });\n/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/lib/logging/runtime.js */ \"./node_modules/webpack/lib/logging/runtime.js\");\n\n}();\nvar __webpack_export_target__ = exports;\nfor(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];\nif(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, \"__esModule\", { value: true });\n/******/ })()\n;","// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app)\n// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware).\nimport ansiHTML from \"ansi-html-community\";\nimport { encode } from \"html-entities\";\nvar colors = {\n reset: [\"transparent\", \"transparent\"],\n black: \"181818\",\n red: \"E36049\",\n green: \"B3CB74\",\n yellow: \"FFD080\",\n blue: \"7CAFC2\",\n magenta: \"7FACCA\",\n cyan: \"C3C2EF\",\n lightgrey: \"EBE7E3\",\n darkgrey: \"6D7891\"\n};\n/** @type {HTMLIFrameElement | null | undefined} */\n\nvar iframeContainerElement;\n/** @type {HTMLDivElement | null | undefined} */\n\nvar containerElement;\n/** @type {Array<(element: HTMLDivElement) => void>} */\n\nvar onLoadQueue = [];\n/** @type {TrustedTypePolicy | undefined} */\n\nvar overlayTrustedTypesPolicy;\nansiHTML.setColors(colors);\n/**\n * @param {string | null} trustedTypesPolicyName\n */\n\nfunction createContainer(trustedTypesPolicyName) {\n // Enable Trusted Types if they are available in the current browser.\n if (window.trustedTypes) {\n overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || \"webpack-dev-server#overlay\", {\n createHTML: function createHTML(value) {\n return value;\n }\n });\n }\n\n iframeContainerElement = document.createElement(\"iframe\");\n iframeContainerElement.id = \"webpack-dev-server-client-overlay\";\n iframeContainerElement.src = \"about:blank\";\n iframeContainerElement.style.position = \"fixed\";\n iframeContainerElement.style.left = 0;\n iframeContainerElement.style.top = 0;\n iframeContainerElement.style.right = 0;\n iframeContainerElement.style.bottom = 0;\n iframeContainerElement.style.width = \"100vw\";\n iframeContainerElement.style.height = \"100vh\";\n iframeContainerElement.style.border = \"none\";\n iframeContainerElement.style.zIndex = 9999999999;\n\n iframeContainerElement.onload = function () {\n containerElement =\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.createElement(\"div\");\n containerElement.id = \"webpack-dev-server-client-overlay-div\";\n containerElement.style.position = \"fixed\";\n containerElement.style.boxSizing = \"border-box\";\n containerElement.style.left = 0;\n containerElement.style.top = 0;\n containerElement.style.right = 0;\n containerElement.style.bottom = 0;\n containerElement.style.width = \"100vw\";\n containerElement.style.height = \"100vh\";\n containerElement.style.backgroundColor = \"rgba(0, 0, 0, 0.85)\";\n containerElement.style.color = \"#E8E8E8\";\n containerElement.style.fontFamily = \"Menlo, Consolas, monospace\";\n containerElement.style.fontSize = \"large\";\n containerElement.style.padding = \"2rem\";\n containerElement.style.lineHeight = \"1.2\";\n containerElement.style.whiteSpace = \"pre-wrap\";\n containerElement.style.overflow = \"auto\";\n var headerElement = document.createElement(\"span\");\n headerElement.innerText = \"Compiled with problems:\";\n var closeButtonElement = document.createElement(\"button\");\n closeButtonElement.innerText = \"X\";\n closeButtonElement.style.background = \"transparent\";\n closeButtonElement.style.border = \"none\";\n closeButtonElement.style.fontSize = \"20px\";\n closeButtonElement.style.fontWeight = \"bold\";\n closeButtonElement.style.color = \"white\";\n closeButtonElement.style.cursor = \"pointer\";\n closeButtonElement.style.cssFloat = \"right\"; // @ts-ignore\n\n closeButtonElement.style.styleFloat = \"right\";\n closeButtonElement.addEventListener(\"click\", function () {\n hide();\n });\n containerElement.appendChild(headerElement);\n containerElement.appendChild(closeButtonElement);\n containerElement.appendChild(document.createElement(\"br\"));\n containerElement.appendChild(document.createElement(\"br\"));\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.body.appendChild(containerElement);\n onLoadQueue.forEach(function (onLoad) {\n onLoad(\n /** @type {HTMLDivElement} */\n containerElement);\n });\n onLoadQueue = [];\n /** @type {HTMLIFrameElement} */\n\n iframeContainerElement.onload = null;\n };\n\n document.body.appendChild(iframeContainerElement);\n}\n/**\n * @param {(element: HTMLDivElement) => void} callback\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction ensureOverlayExists(callback, trustedTypesPolicyName) {\n if (containerElement) {\n // Everything is ready, call the callback right away.\n callback(containerElement);\n return;\n }\n\n onLoadQueue.push(callback);\n\n if (iframeContainerElement) {\n return;\n }\n\n createContainer(trustedTypesPolicyName);\n} // Successful compilation.\n\n\nfunction hide() {\n if (!iframeContainerElement) {\n return;\n } // Clean up and reset internal state.\n\n\n document.body.removeChild(iframeContainerElement);\n iframeContainerElement = null;\n containerElement = null;\n}\n/**\n * @param {string} type\n * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item\n * @returns {{ header: string, body: string }}\n */\n\n\nfunction formatProblem(type, item) {\n var header = type === \"warning\" ? \"WARNING\" : \"ERROR\";\n var body = \"\";\n\n if (typeof item === \"string\") {\n body += item;\n } else {\n var file = item.file || \"\"; // eslint-disable-next-line no-nested-ternary\n\n var moduleName = item.moduleName ? item.moduleName.indexOf(\"!\") !== -1 ? \"\".concat(item.moduleName.replace(/^(\\s|\\S)*!/, \"\"), \" (\").concat(item.moduleName, \")\") : \"\".concat(item.moduleName) : \"\";\n var loc = item.loc;\n header += \"\".concat(moduleName || file ? \" in \".concat(moduleName ? \"\".concat(moduleName).concat(file ? \" (\".concat(file, \")\") : \"\") : file).concat(loc ? \" \".concat(loc) : \"\") : \"\");\n body += item.message || \"\";\n }\n\n return {\n header: header,\n body: body\n };\n} // Compilation with errors (e.g. syntax error or missing modules).\n\n/**\n * @param {string} type\n * @param {Array} messages\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction show(type, messages, trustedTypesPolicyName) {\n ensureOverlayExists(function () {\n messages.forEach(function (message) {\n var entryElement = document.createElement(\"div\");\n var typeElement = document.createElement(\"span\");\n\n var _formatProblem = formatProblem(type, message),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n typeElement.innerText = header;\n typeElement.style.color = \"#\".concat(colors.red); // Make it look similar to our terminal.\n\n var text = ansiHTML(encode(body));\n var messageTextNode = document.createElement(\"div\");\n messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text;\n entryElement.appendChild(typeElement);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(messageTextNode);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n /** @type {HTMLDivElement} */\n\n containerElement.appendChild(entryElement);\n });\n }, trustedTypesPolicyName);\n}\n\nexport { formatProblem, show, hide };","/* global __webpack_dev_server_client__ */\nimport WebSocketClient from \"./clients/WebSocketClient.js\";\nimport { log } from \"./utils/log.js\"; // this WebsocketClient is here as a default fallback, in case the client is not injected\n\n/* eslint-disable camelcase */\n\nvar Client = // eslint-disable-next-line no-nested-ternary\ntypeof __webpack_dev_server_client__ !== \"undefined\" ? typeof __webpack_dev_server_client__.default !== \"undefined\" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : WebSocketClient;\n/* eslint-enable camelcase */\n\nvar retries = 0;\nvar maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance\n// It is mutable to enforce singleton\n// eslint-disable-next-line import/no-mutable-exports\n\nexport var client = null;\n/**\n * @param {string} url\n * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers\n * @param {number} [reconnect]\n */\n\nvar socket = function initSocket(url, handlers, reconnect) {\n client = new Client(url);\n client.onOpen(function () {\n retries = 0;\n\n if (typeof reconnect !== \"undefined\") {\n maxRetries = reconnect;\n }\n });\n client.onClose(function () {\n if (retries === 0) {\n handlers.close();\n } // Try to reconnect.\n\n\n client = null; // After 10 retries stop trying, to prevent logspam.\n\n if (retries < maxRetries) {\n // Exponentially increase timeout to reconnect.\n // Respectfully copied from the package `got`.\n // eslint-disable-next-line no-restricted-properties\n var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;\n retries += 1;\n log.info(\"Trying to reconnect...\");\n setTimeout(function () {\n socket(url, handlers, reconnect);\n }, retryInMs);\n }\n });\n client.onMessage(\n /**\n * @param {any} data\n */\n function (data) {\n var message = JSON.parse(data);\n\n if (handlers[message.type]) {\n handlers[message.type](message.data, message.params);\n }\n });\n};\n\nexport default socket;","/**\n * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL\n * @returns {string}\n */\nfunction format(objURL) {\n var protocol = objURL.protocol || \"\";\n\n if (protocol && protocol.substr(-1) !== \":\") {\n protocol += \":\";\n }\n\n var auth = objURL.auth || \"\";\n\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, \":\");\n auth += \"@\";\n }\n\n var host = \"\";\n\n if (objURL.hostname) {\n host = auth + (objURL.hostname.indexOf(\":\") === -1 ? objURL.hostname : \"[\".concat(objURL.hostname, \"]\"));\n\n if (objURL.port) {\n host += \":\".concat(objURL.port);\n }\n }\n\n var pathname = objURL.pathname || \"\";\n\n if (objURL.slashes) {\n host = \"//\".concat(host || \"\");\n\n if (pathname && pathname.charAt(0) !== \"/\") {\n pathname = \"/\".concat(pathname);\n }\n } else if (!host) {\n host = \"\";\n }\n\n var search = objURL.search || \"\";\n\n if (search && search.charAt(0) !== \"?\") {\n search = \"?\".concat(search);\n }\n\n var hash = objURL.hash || \"\";\n\n if (hash && hash.charAt(0) !== \"#\") {\n hash = \"#\".concat(hash);\n }\n\n pathname = pathname.replace(/[?#]/g,\n /**\n * @param {string} match\n * @returns {string}\n */\n function (match) {\n return encodeURIComponent(match);\n });\n search = search.replace(\"#\", \"%23\");\n return \"\".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash);\n}\n/**\n * @param {URL & { fromCurrentScript?: boolean }} parsedURL\n * @returns {string}\n */\n\n\nfunction createSocketURL(parsedURL) {\n var hostname = parsedURL.hostname; // Node.js module parses it as `::`\n // `new URL(urlString, [baseURLString])` parses it as '[::]'\n\n var isInAddrAny = hostname === \"0.0.0.0\" || hostname === \"::\" || hostname === \"[::]\"; // why do we need this check?\n // hostname n/a for file protocol (example, when using electron, ionic)\n // see: https://github.com/webpack/webpack-dev-server/pull/384\n\n if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf(\"http\") === 0) {\n hostname = self.location.hostname;\n }\n\n var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets.\n\n if (socketURLProtocol === \"auto:\" || hostname && isInAddrAny && self.location.protocol === \"https:\") {\n socketURLProtocol = self.location.protocol;\n }\n\n socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, \"ws\");\n var socketURLAuth = \"\"; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property\n // Parse authentication credentials in case we need them\n\n if (parsedURL.username) {\n socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username,\n // we only include password if the username is not empty.\n\n if (parsedURL.password) {\n // Result: :\n socketURLAuth = socketURLAuth.concat(\":\", parsedURL.password);\n }\n } // In case the host is a raw IPv6 address, it can be enclosed in\n // the brackets as the brackets are needed in the final URL string.\n // Need to remove those as url.format blindly adds its own set of brackets\n // if the host string contains colons. That would lead to non-working\n // double brackets (e.g. [[::]]) host\n //\n // All of these web socket url params are optionally passed in through resourceQuery,\n // so we need to fall back to the default if they are not provided\n\n\n var socketURLHostname = (hostname || self.location.hostname || \"localhost\").replace(/^\\[(.*)\\]$/, \"$1\");\n var socketURLPort = parsedURL.port;\n\n if (!socketURLPort || socketURLPort === \"0\") {\n socketURLPort = self.location.port;\n } // If path is provided it'll be passed in via the resourceQuery as a\n // query param so it has to be parsed out of the querystring in order for the\n // client to open the socket to the correct location.\n\n\n var socketURLPathname = \"/ws\";\n\n if (parsedURL.pathname && !parsedURL.fromCurrentScript) {\n socketURLPathname = parsedURL.pathname;\n }\n\n return format({\n protocol: socketURLProtocol,\n auth: socketURLAuth,\n hostname: socketURLHostname,\n port: socketURLPort,\n pathname: socketURLPathname,\n slashes: true\n });\n}\n\nexport default createSocketURL;","/**\n * @returns {string}\n */\nfunction getCurrentScriptSource() {\n // `document.currentScript` is the most accurate way to find the current script,\n // but is not supported in all browsers.\n if (document.currentScript) {\n return document.currentScript.getAttribute(\"src\");\n } // Fallback to getting all scripts running in the document.\n\n\n var scriptElements = document.scripts || [];\n var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) {\n return element.getAttribute(\"src\");\n });\n\n if (scriptElementsWithSrc.length > 0) {\n var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1];\n return currentScript.getAttribute(\"src\");\n } // Fail as there was no script to use.\n\n\n throw new Error(\"[webpack-dev-server] Failed to get current script source.\");\n}\n\nexport default getCurrentScriptSource;","import logger from \"../modules/logger/index.js\";\nvar name = \"webpack-dev-server\"; // default level is set on the client side, so it does not need\n// to be set by the CLI or API\n\nvar defaultLevel = \"info\"; // options new options, merge with old options\n\n/**\n * @param {false | true | \"none\" | \"error\" | \"warn\" | \"info\" | \"log\" | \"verbose\"} level\n * @returns {void}\n */\n\nfunction setLogLevel(level) {\n logger.configureDefaultLogger({\n level: level\n });\n}\n\nsetLogLevel(defaultLevel);\nvar log = logger.getLogger(name);\nexport { log, setLogLevel };","import getCurrentScriptSource from \"./getCurrentScriptSource.js\";\n/**\n * @param {string} resourceQuery\n * @returns {{ [key: string]: string | boolean }}\n */\n\nfunction parseURL(resourceQuery) {\n /** @type {{ [key: string]: string }} */\n var options = {};\n\n if (typeof resourceQuery === \"string\" && resourceQuery !== \"\") {\n var searchParams = resourceQuery.slice(1).split(\"&\");\n\n for (var i = 0; i < searchParams.length; i++) {\n var pair = searchParams[i].split(\"=\");\n options[pair[0]] = decodeURIComponent(pair[1]);\n }\n } else {\n // Else, get the url from the

Share via email

+ + + + +
@@ -105,10 +126,25 @@

Share via email

- - + + + +
diff --git a/examples/js/archive.js b/examples/js/archive.js index 76278cbea..ec5285147 100644 --- a/examples/js/archive.js +++ b/examples/js/archive.js @@ -127,11 +127,7 @@ const renderThumbnails = (thumbnails = [], url, fullResImgs) => { image.src = `${url.replace('metadata', 'download')}/${file.name}`; imageRow.classList.add('col-4', 'd-flex', 'flex-column', 'p-2', 'align-items-center'); imageRow.append(image, placeButton, fileName); - // store the full-resolution image URL in a "data-original" attribute - image.setAttribute('data-original', `${url.replace('metadata', 'download')}/${thumbnails ? file.original : file.name}`); - image.src = `${url.replace('metadata', 'download')}/${file.name}`; - imageRow.classList.add('col-4', 'd-flex', 'flex-column', 'p-2', 'align-items-center'); - imageRow.append(image, placeButton, fileName); + imageContainer.appendChild(imageRow); imageContainer.setAttribute('class', 'row'); }); @@ -257,46 +253,77 @@ function placeImage (imageURL, options, newImage = false) { }; // Reconstruct Map from JSON URL -const reconstructMapFromJson = async (jsonDownloadURL) => { - if (jsonDownloadURL) { - const imageCollectionObj = await map.imgGroup.recreateImagesFromJsonUrl(jsonDownloadURL); - const imgObjCollection = imageCollectionObj.imgCollectionProps; - const avg_cm_per_pixel = imageCollectionObj.avg_cm_per_pixel; // this is made available here for future use +const reconstructMapFromJson = async (jsonDownloadURL = false, savedMapObj) => { + if (jsonDownloadURL) { + const imageCollectionObj = await map.imgGroup.recreateImagesFromJsonUrl(jsonDownloadURL); + const imgObjCollection = imageCollectionObj.imgCollectionProps; + const avg_cm_per_pixel = imageCollectionObj.avg_cm_per_pixel; // this is made available here for future use - // creates multiple images - this applies where multiple images are to be reconstructed - if (imgObjCollection.length > 1) { - let imageURL; - let options; + // creates multiple images - this applies where multiple images are to be reconstructed + if (imgObjCollection.length > 1) { + let imageURL; + let options; - const cornerBounds = getCornerBounds(imgObjCollection); - map.fitBounds(cornerBounds); + const cornerBounds = getCornerBounds(imgObjCollection); + map.fitBounds(cornerBounds); - imgObjCollection.forEach((imageObj) => { - imageURL = imageObj.src; - options = { - tooltipText: imageObj.tooltipText, - corners: imageObj.nodes, - }; - placeImage(imageURL, options, false); - }); + imgObjCollection.forEach((imageObj) => { + imageURL = imageObj.src; + options = { + tooltipText: imageObj.tooltipText, + corners: imageObj.nodes, + }; + placeImage(imageURL, options, false); + }); - return; - } + return; + } - // creates single image - this applies where only one image is to be reconstructed - const imageObj = imgObjCollection[0]; - const imageURL = imageObj[0].src; - const options = { - tooltipText: imageObj[0].tooltipText, - corners: imageObj[0].nodes, - } + // creates single image - this applies where only one image is to be reconstructed + const imageObj = imgObjCollection[0]; + const imageURL = imageObj[0].src; + const options = { + tooltipText: imageObj[0].tooltipText, + corners: imageObj[0].nodes, + } - const cornerBounds = getCornerBounds(imgObjCollection[0]); - console.log('cornerBounds: ', cornerBounds); - map.fitBounds(cornerBounds); + const cornerBounds = getCornerBounds(imgObjCollection[0]); + map.fitBounds(cornerBounds); + placeImage(imageURL, options, false); + } else { + // creates multiple images - this applies where multiple images are to be reconstructed + if (savedMapObj.length > 1) { + let imageURL; + let options; + + const cornerBounds = getCornerBounds(savedMapObj); + map.fitBounds(cornerBounds); + + savedMapObj.forEach((imageObj) => { + imageURL = imageObj.src; + options = { + tooltipText: imageObj.tooltipText, + corners: imageObj.nodes, + }; placeImage(imageURL, options, false); - } -} + }); + + return; + } + + // creates single image - this applies where only one image is to be reconstructed + const imageObj = savedMapObj[0]; + const imageURL = imageObj.src; + const options = { + tooltipText: imageObj.tooltipText, + corners: imageObj.nodes, + } + + const cornerBounds = getCornerBounds(savedMapObj); + map.fitBounds(cornerBounds); + placeImage(imageURL, options, false); + } +}; document.addEventListener('DOMContentLoaded', async (event) => { if (mapReconstructionMode) { // expected url format http://localhost:8081/examples/archive.html?json=https://archive.org/download/mkl-1/mkl-1.json @@ -311,7 +338,7 @@ document.addEventListener('DOMContentLoaded', async (event) => { document.addEventListener('click', (event) => { if (event.target.classList.contains('place-button')) { - const imageURL = event.target.previousElementSibling.src; + const imageURL = event.target.previousElementSibling.dataset.original; const imageTooltipText = getImageName(imageURL); const options = {tooltipText: imageTooltipText}; @@ -352,6 +379,51 @@ downloadJSON.addEventListener('click', () => { } }); +// save JSON to localStorage +saveMapBtn.addEventListener('click', () => { + const jsonImages = map.imgGroup.generateExportJson(true); + const d = new Date(); + const datetime = d.getHours() + ":" + d.getMinutes() + ' ' + d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear(); + + if (jsonImages.images.length) { + const modifiedJsonImages = {}; + const tempCollection = []; + + // restructure jsonImages + modifiedJsonImages.avg_cm_per_pixel = jsonImages.avg_cm_per_pixel; + jsonImages.images.map((image) => { + tempCollection.push({ + id: image.id, + src: image.src, + tooltipText: image.tooltipText, + image_file_name: image.image_file_name, + nodes: image.nodes, + cm_per_pixel: image.cm_per_pixel, + }); + }); + modifiedJsonImages.collection = tempCollection; + let savedMaps = [] + const newMap = { + map: modifiedJsonImages, + timeSaved: datetime, + amountOfImages: modifiedJsonImages.collection.length + }; + + // this is to check if are old maps saved, if true, update with new maps to be saved + if (JSON.parse(localStorage.getItem('savedMaps'))) { + const oldMaps = JSON.parse(localStorage.getItem('savedMaps')); + savedMaps = [...oldMaps, newMap] + localStorage.setItem('savedMaps', JSON.stringify(savedMaps)); + } else { + savedMaps = [newMap] + localStorage.setItem('savedMaps', JSON.stringify(savedMaps)); + } + bootstrap.Modal.getInstance(savedMapsModal).hide(); + alert("Saved!") + + } +}); + // share map modal const shareModal = document.getElementById('shareModal') const modality = new bootstrap.Modal(shareModal) @@ -359,6 +431,58 @@ shareMapBtn.addEventListener('click', () => { bootstrap.Modal.getInstance(shareModal).show() }); +// history map modal +const savedMapsModal = document.getElementById('savedMapsModal') +const savedMapsModalIntialization = new bootstrap.Modal(savedMapsModal) +let mapsToRecover +saveMapModalBtn.addEventListener('click', () => { + mapList.innerHTML = ''; + const savedMaps = JSON.parse(localStorage.getItem('savedMaps')); + bootstrap.Modal.getInstance(savedMapsModal).show(); + + if (savedMaps.length > 0) { + mapsToRecover = savedMaps; + savedMaps.forEach(((savedMap, index) => { + const {amountOfImages, timeSaved } = savedMap + const eachMap = document.createElement('div'); + const eachMapTextDiv = document.createElement('div'); + const eachMapAmountText = document.createElement('h6') + const eachMapDate = document.createElement('p') + const recoverBtn = document.createElement('a'); + const recoverBtnDiv = document.createElement('div') + + eachMap.classList.add('d-flex', 'justify-content-between', 'align-content-center') + eachMapTextDiv.classList.add('d-flex', 'flex-column') + eachMapAmountText.innerHTML = `${amountOfImages} image(s)` + eachMapDate.innerHTML = `Saved: ${timeSaved}` + eachMapTextDiv.append(eachMapAmountText, eachMapDate) + + recoverBtn.classList.add('btn', 'btn-primary', 'btn-md', 'rounded-pill', 'recover') + recoverBtn.innerHTML = "Recover" + recoverBtnDiv.appendChild(recoverBtn) + recoverBtn.setAttribute('data-map-index',`${index}`) + recoverBtn.setAttribute('title', 'Recover map') + + eachMap.append(eachMapTextDiv, recoverBtnDiv) + + mapList.append(eachMap) + })) + } else { + mapList.innerHTML += "
No Saved Maps
" + } +}); + +// this runs when the recover button is clicked in the saved maps modal +document.addEventListener('click', (event) => { + if (event.target.classList.contains('recover')) { + const mapToRecoverIdx = event.target.dataset.mapIndex + const mapCollection = mapsToRecover[mapToRecoverIdx].map.collection + reconstructMapFromJson(false, mapCollection) + bootstrap.Modal.getInstance(savedMapsModal).hide(); + bootstrap.Offcanvas.getInstance(sidebar).hide(); + } +}) + // aggregate coordinates of all images into an array function getCornerBounds(imgCollection) { let cornerBounds = [];